Informix - 创建过程时出现 DEFINE 语法错误

Informix - DEFINE syntax error while creating procedure

提问人:diminuta 提问时间:3/10/2023 最后编辑:Jonathan Lefflerdiminuta 更新时间:3/16/2023 访问量:194

问:

在 Informix 12.10 中创建过程时,我遇到了一个“语法错误”,所以我将过程减少到最低限度,似乎 Informix 不喜欢“DEFINE”:

CREATE PROCEDURE migrate_table()
    DEFINE f_number INTEGER;
END PROCEDURE;

这会抛出

SQL 脚本执行期间发生错误 Razón:SQL 错误 [42000]: 发生语法错误。

但是如果我执行:

CREATE PROCEDURE migrate_table()
END PROCEDURE;

我没有收到任何错误...

SQL 数据库 语法错误 Informix DBeaver

评论

1赞 jarlh 3/10/2023
我会尝试 DECLARE 而不是 DEFINE。
1赞 Jonathan Leffler 3/11/2023
您使用哪个程序来执行此语句?你是,perchance,使用而不是?当我使用DB-Access时,该过程有效。如果我使用 ,我相信该过程将被错误地解析,并且不会与语句的其余部分一起发送,这会使它成为语法错误。isqldbaccessisqlEND PROCEDURE;
0赞 diminuta 3/11/2023
@jarlh我尝试使用DECLARE时,出现相同的错误。
0赞 diminuta 3/11/2023
@JonathanLeffler我正在使用 DBeaver。我会尝试dbaccess
2赞 Jonathan Leffler 3/12/2023
在 CREATE PROCEDURE 语句中间存在分号会使解析变得复杂 — 通常,您只需要找到不在注释字符串中的第一个分号即可找到语句的结尾。CREATE PROCEDURE 和 CREATE FUNCTION 语句打破了这种简单的解析。所以,你必须分析你找到的东西,如果它是 CREATE [DBA] [FUNCTION|PROECDURE],您必须继续,直到在 END PROCEDURE 之后找到分号(之后可能会有文档信息)。这就是失败的地方;这大概是其他一些工具失败的地方。isql

答:

1赞 liaosnet 3/16/2023 #1
delimiter /
CREATE PROCEDURE migrate_table()
    DEFINE f_number INTEGER;
END PROCEDURE;
/

全选,然后执行。.(在 Dbeaver 中)