Stored procedures 错误-104创建Firebird存储过程

Stored procedures 错误-104创建Firebird存储过程,stored-procedures,firebird,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 INTEG

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

在此代码前后是否使用了Set术语

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复制到错误显示的位置,以便查看实际发生的情况

编辑:

如果你愿意,你可以检查一下。在那里你可以找到很多关于Firebird+IBMExpress的信息,包括设置术语(第81页)

编辑2:

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

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

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


HTH

您在该代码前后是否使用了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复制到错误显示的位置,以便查看实际发生的情况

编辑:

如果你愿意,你可以检查一下。在那里你可以找到很多关于Firebird+IBMExpress的信息,包括设置术语(第81页)

编辑2:

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

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

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


HTH

这样我得到了以下错误:无效令牌。动态SQL错误。SQL错误代码=-104。令牌未知-第3行第1列。设置。您使用哪个工具创建SP?是isql还是另一个?据我所知,SET TERM是特定于Firebird的,因此无论您使用什么组件或工具来创建SP,都需要能够识别它。我完全按照原样复制了代码。。我正在使用IBExpert创建过程。。也许是IBExpert不明白?我家里有IBExpert+Firebird。我到那里后会检查的。同时,如果您希望查看我现在将添加到答案中的URL。@Herter,刚刚添加了一些关于使用IBExperts+Firebird的信息。希望这能有所帮助。这样我就得到了以下错误:无效令牌。动态SQL错误。SQL错误代码=-104。令牌未知-第3行第1列。设置。您使用哪个工具创建SP?是isql还是另一个?据我所知,SET TERM是特定于Firebird的,因此无论您使用什么组件或工具来创建SP,都需要能够识别它。我完全按照原样复制了代码。。我正在使用IBExpert创建过程。。也许是IBExpert不明白?我家里有IBExpert+Firebird。我到那里后会检查的。同时,如果您希望查看我现在将添加到答案中的URL。@Herter,刚刚添加了一些关于使用IBExperts+Firebird的信息。希望有帮助。