Как использовать оператор DELIMITER в приложении Po pSQL? - PullRequest
0 голосов
/ 25 февраля 2020

Я застрял, чтобы создать операторы FUNCTION и PROCEDURE - DELIMITER в Po pSQL. Приложение продолжает выдавать ошибку, когда я пытаюсь использовать оператор DELIMITER:

ER_PARSE_ERROR: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с «DELIMITER || CREATE FUNCTION count_length (str VARCHAR (255), del VARCHAR (12), 'в строке 1

Ниже приведен код, который я написал:

DELIMITER ||
    CREATE FUNCTION count_length(str VARCHAR(255), del VARCHAR(12), pos INT)
    RETURNS VARCHAR(255)
        BEGIN
            DECLARE getLength;
            SET getLength = LENGTH(SUBSTRING_INDEX(str, del, pos - 1)) + 1;
            RETURN getLength;
        END ||
    CREATE PROCEDURE init()
        BEGIN
            SELECT count_length('Hello|my|name|is|John', '|', 2);
        END ||
DELIMITER ;
CALL init();

И это мои настройки БД:

Nickname:
    study
Type:
    MySQL
Hostname:
    localhost
Port:
    3325
Database:
    study
Username:
    root
Password:
    none

Странно то, что приведенный выше код прекрасно работает в MySQL Workbench.

Я использую Po pSQL и не планирую использовать Workbench Потому что Po pSQL выглядит более современным и понятным, чем Workbench.

Как использовать DELIMITER в Po pSQL?

1 Ответ

1 голос
/ 25 февраля 2020

delimiter - это команда mysql cli , а не оператор sql (в приведенной ниже цитате mysql относится к mysql cli, см. Связанную страницу руководства mysql) :

Чтобы переопределить разделитель mysql, используйте команду разделителя. В следующем примере показано, как это сделать для только что показанной процедуры dorepeat (). Разделитель изменен на //, чтобы разрешить передачу всего определения на сервер в виде одного оператора, а затем восстановить его; перед вызовом процедуры. Это позволяет; разделитель, используемый в теле процедуры для передачи на сервер, а не для интерпретации самим mysql.

Следовательно, разделитель нельзя использовать в po psql, так как кажется, что все проходит через на сервер mysql, не пытаясь его интерпретировать.

...