Stored procedures “火鸟”;插入。。。“返回”;使用存储过程转换为变量

Stored procedures “火鸟”;插入。。。“返回”;使用存储过程转换为变量,stored-procedures,insert,firebird,Stored Procedures,Insert,Firebird,我使用的是Firebird 2.x,我制作了一个存储过程来插入一条不存在的记录,并将其ID返回到一个变量中 但当我执行时,结果是发生了以下错误: Dynamic SQL Error. SQL error code = -104. Unexpected end of command - line 2, column 76. my SP的完整源代码如下: CREATE PROCEDURE INSERT_ADMIN_OFFICE AS DECLARE VARIABLE OFF_ID BIGINT;

我使用的是Firebird 2.x,我制作了一个存储过程来插入一条不存在的记录,并将其ID返回到一个变量中

但当我执行时,结果是发生了以下错误:

Dynamic SQL Error. SQL error code = -104. Unexpected end of command - line 2, column 76.
my SP的完整源代码如下:

CREATE PROCEDURE INSERT_ADMIN_OFFICE
AS
DECLARE VARIABLE OFF_ID BIGINT;
DECLARE VARIABLE PER_ID BIGINT;
DECLARE VARIABLE EMP_ID BIGINT;
DECLARE VARIABLE AP_ID BIGINT;
BEGIN
     IF (NOT EXISTS(SELECT * FROM OFFICE OFF WHERE OFF.DESCRIPTION LIKE '%Administrador%')) THEN
          INSERT INTO OFFICE (DESCRIPTION) VALUES ('Administrador') RETURNING ID INTO :OFF_ID;
     ELSE
          SELECT OFF.ID FROM OFFICE OFF WHERE OFF.DESCRIPTION LIKE '%Administrador%' INTO :OFF_ID;

     INSERT INTO PERSON (NAME, BIRTH_DATE, ADDRESS, DISTRICT, CITY, STATE) VALUES ('Intellitools Desenvolvimento de Software Ltda.', '01/01/2007', 'Rua Nunes Machado, 472 - Cj 503', 'Centro', 'Curitiba', 'PR') RETURNING ID INTO :PER_ID;
     INSERT INTO USER_PASSPORT (PERSON_ID, USER_NAME, PWD, TYPE) VALUES (:PER_ID, 'intellitools', 123, 1);
     INSERT INTO EMPLOYEE (OFFICE_ID, PERSON_ID) VALUES (:OFF_ID, :PER_ID) RETURNING ID INTO :EMP_ID;
     INSERT INTO ACCESS_PROFILE (DESCRIPTION) VALUES ('Administrador Geral') RETURNING ID INTO :AP_ID;
     INSERT INTO REL_EMPLOYEE_ACCESS_PROFILE (EMPLOYEE_ID, ACCESS_PROFILE_ID) VALUES (:EMP_ID, :AP_ID);
SUSPEND;
END
;
我注意到这个错误是由于INSERT上的INTO导致的,但我找不到其他方法来实现这一点


我感谢你的帮助

只要删除SUSPEND,你的程序就会像符咒一样执行。对于一次操作,我建议执行BLOCK而不是创建存储过程。

只要删除SUSPEND,您的进程就会像符咒一样执行。对于一次性操作,我建议执行块而不是创建存储过程。

请,为OFFICE表提供SP和元数据的完整源代码。当您的过程不返回任何列时,为什么要使用SUSPEND?从rdb$relation\u字段中选择rdb$field\u name,其中rdb$relation\u name='OFFICE'此查询将为您提供OFFICE表所有字段的列表。事实上,我不知道,我必须在没有挂起的情况下使用它吗?只要移除挂起,你的程序就会像符咒一样执行。对于一次性操作,我建议执行块而不是创建存储过程。请,为OFFICE表提供SP和元数据的完整源代码。当您的过程不返回任何列时,为什么要使用SUSPEND?从rdb$relation\u字段中选择rdb$field\u name,其中rdb$relation\u name='OFFICE'此查询将为您提供OFFICE表所有字段的列表。事实上,我不知道,我必须在没有挂起的情况下使用它吗?只要移除挂起,你的程序就会像符咒一样执行。对于一次操作,我建议执行块而不是创建存储过程。