错误-104创建Firebird存储过程

时间:2011-02-23 21:23:11

标签: stored-procedures firebird

我无法运行以下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

我得到的错误如下:

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.

1 个答案:

答案 0 :(得分:4)

您是否在此代码之前和之后使用了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 ; ^ 

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

在旁注中,我建议将firebird.msg复制到您收到的错误位置,以便您可以看到实际发生的情况。

修改

如果您愿意,可以查看link。在那里你可以找到很多关于Firebird + IBExpress的信息,包括SET TERM(第81页)。

编辑2:

刚刚在家中尝试了IBExperts + Firebird,我没有创建存储过程的问题。我的猜测是你正在尝试做以下事情之一:

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

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

HTH