创建 Firebird 存储过程时出现错误 -104

Her*_*ter 0 firebird stored-procedures

我无法运行以下 SP

CREATE PROCEDURE SP_NYANSAT(
        FORNAVN VARCHAR(30),
        EFTERNAVN VARCHAR(30),
        ADRESSE VARCHAR(50),
        POSTNUMMER CHAR(4),
        TELEFONNUMMER CHAR(8),
        EMAIL VARCHAR(50))
    AS
    DECLARE VARIABLE ID INTEGER;
    BEGIN
      ID = GEN_ID(GEN_ANSAT_ID,1);
      INSERT INTO MYTABLE (ID, FORNAVN, EFTERNAVN, ADRESSE, POSTNUMMER, TELEFONNUMMER, EMAIL) VALUES (:ID, :FORNAVN, :EFTERNAVN, :ADRESSE, :POSTNUMMER, :TELEFONNUMMER, :EMAIL);
    END
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

can't format message 13:896 -- message file C:\Windows\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 1.
CREATE.
Run Code Online (Sandbox Code Playgroud)

Gui*_*ens 6

您在这段代码之前和之后使用过 Set Term 吗?

Firebird 中的所有命令都必须以分号终止。如果要创建存储过程,则需要能够区分终止分号和存储过程内部的分号。

像这样的东西:

SET TERM ^ ;

CREATE PROCEDURE SP_NYANSAT(
        FORNAVN VARCHAR(30),
        EFTERNAVN VARCHAR(30),
        ADRESSE VARCHAR(50),
        POSTNUMMER CHAR(4),
        TELEFONNUMMER CHAR(8),
        EMAIL VARCHAR(50))
    AS
    DECLARE VARIABLE ID INTEGER;
    BEGIN
      ID = GEN_ID(GEN_ANSAT_ID,1);
      INSERT INTO MYTABLE (ID, FORNAVN, EFTERNAVN, ADRESSE, POSTNUMMER, TELEFONNUMMER, EMAIL) VALUES (:ID, :FORNAVN, :EFTERNAVN, :ADRESSE, :POSTNUMMER, :TELEFONNUMMER, :EMAIL);
    END
    ^

SET TERM ; ^ 
Run Code Online (Sandbox Code Playgroud)

请注意存储过程的声明如何以 ^ 结束,从而结束该语句。声明后,您还可以恢复终止分号。

顺便说一句,我建议将 firebird.msg 复制到您收到的错误告诉您的位置,以便您可以看到到底发生了什么。

编辑:

如果您愿意,可以查看此链接。在那里您可以找到大量有关 Firebird + IBExpress 的信息,包括 SET TERM(第 81 页)。

编辑2:

刚刚在家尝试使用 IBExperts + Firebird,创建存储过程没有任何问题。我的猜测是您正在尝试执行以下操作之一:

  • 您已打开 SQL 编辑器并尝试直接编译代码。这是行不通的,因为 IBExperts 认为您正在尝试运行 DSQL 语句。存储过程是用 PSQL 语句创建的。

  • 您正在尝试使用“新过程”实用程序(检查主菜单右上角的按钮)并将整个代码粘贴到编辑器中。这是行不通的,因为在该编辑器中您只需输入正文代码。存储过程名称在您打开的窗口右上角的字段中设置。使用代码编辑器上方左侧的“插入参数/变量”按钮可以引入参数和变量。SET TERM 句子由 IBExperts 自动创建。您可以在 DDL 选项卡中检查生成的代码。

华泰