0

我坚持在 PopSQL中创建FUNCTIONPROCEDURE通过语句。DELIMITER当我尝试使用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 中运行良好。

我正在使用 PopSQL 并且没有使用 Workbench 的计划,因为 PopSQL 看起来比 Workbench 更现代、更清晰。

如何DELIMITER在 PopSQL 中使用?

4

1 回答 1

2

delimitermysql cli 命令,而不是 sql 语句(在下面的引用中 mysql 指的是 mysql cli,请查看链接的 mysql 手册页):

要重新定义 mysql 分隔符,请使用 delimiter 命令。下面的示例显示了如何为刚刚显示的 dorepeat() 过程执行此操作。分隔符更改为 // 以使整个定义能够作为单个语句传递给服务器,然后恢复为 ; 在调用程序之前。这使 ; 过程主体中使用的分隔符将传递给服务器,而不是由 mysql 本身解释。

因此,分隔符不能在 popsql 中使用,因为它似乎将所有内容都传递到 mysql 服务器而不尝试解释它。

于 2020-02-25T00:12:06.303 回答