2015-02-10 2 views
0

Я пытаюсь создать функцию в MySQL Workbench, у меня есть SQL-код:MySQL Workbench 6.2 создать функцию

DELIMITER $$ 
CREATE FUNCTION `regex_replace` (pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000)) 
RETURNS VARCHAR(1000) 
DETERMINISTIC 
BEGIN 
DECLARE temp VARCHAR(1000); 
DECLARE ch VARCHAR(1); 
DECLARE i INT; 
SET i = 1; 
SET temp = ''; 
IF original REGEXP pattern THEN 
    loop_label: LOOP 
    IF i>CHAR_LENGTH(original) THEN 
    LEAVE loop_label; 
    END IF; 
    SET ch = SUBSTRING(original,i,1); 
    IF NOT ch REGEXP pattern THEN 
    SET temp = CONCAT(temp,ch); 
    ELSE 
    SET temp = CONCAT(temp,replacement); 
    END IF; 
    SET i=i+1; 
    END LOOP; 
ELSE 
    SET temp = original; 
END IF; 
RETURN temp; 
END; 
$$ 
DELIMITER ; 

Когда я кладу это в PhpMyAdmin, моя функция создается без каких-либо проблем. Когда я нажимаю на «Добавить Routine» в MySQL Workbench, а затем вставить этот код, я получаю эту ошибку: Syntax error: 'DELIMITER' (identifier) is not valid input at this position

Я не эксперт по функциям MySQL, так что я не знаю, что делать с этим , В чем проблема? Я действительно хочу это исправить, потому что MySQL Workbench теперь показывает мою функцию как _SYNTAX_ERROR вместо regex_replace.

ответ

-1

При использовании встроенной редактора процедур, MySQL Workbench добавляет несколько дополнительных команд:

USE `test`; // <---------- 
DROP procedure IF EXISTS `p2`; // <---------- 

DELIMITER $$ 
USE `test`$$ // <---------- 
CREATE PROCEDURE test.`p2`() 
LANGUAGE SQL 
DETERMINISTIC 
COMMENT 'Adds "nson" to first and last names in the record.' 
BEGIN 
SELECT 'Hello World'; 
END $$ 

DELIMITER ; // <---------- 

Если применить вышеуказанную косую черту в вашу процедуру, она должна помочь :)

Для справки: Stored Procedures Using MySQL Workbench

+0

Это процедура, как ее использовать в функции? Когда я ставлю 'USE' test'; // <---------- DROP procedure IF EXISTS 'p2'; // <---------- 'наверху (и измените тест на regex_replace или что-то еще). MySQL Workbench дает следующую ошибку: 'Синтаксическая ошибка: 'USE' (use) недействительный ввод в этой позиции' – SheperdOfFire

 Смежные вопросы

  • Нет связанных вопросов^_^