2011-12-23 8 views
0

私はFirebird 2.xを使用しています。レコードが存在しない場合はレコードを挿入し、そのIDを変数に返します。Firebird「insert ...ストアドプロシージャを使用して変数に戻す」

しかし、私は実行すると、それは次のようなエラーが発生することが判明:私のSPの

Dynamic SQL Error. SQL error code = -104. Unexpected end of command - line 2, column 76. 

完全なソースコードを以下:

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 
; 

私はこのエラーが原因INTOであることがわかりINSERTで私はそれを行う別の方法を見つけることができません。

私はあなたの助けに感謝します!

+0

あなたのSPの完全なソースコードとOFFICEテーブルのメタデータを提供してください。 –

+0

どのようにそのようなメタデータを取得できますか? –

+0

プロシージャが列を返さないときに、なぜSUSPENDを使用しますか? –

答えて

1

SUSPENDを削除するだけで、あなたのprocは魅力的に実行されます。私は、ストアドプロシージャを作成する代わりにEXECUTE BLOCKを提案しています。