1
CREATE TRIGGER TRG_EFMREFNO 
   BEFORE 
   INSERT ON FEEDBACK_CASE_TB 
   FOR EACH ROW 
   BEGIN 
   SELECT SEQ_EFMREFNO.NEXTVAL INTO:NEW.EFMREFNO FROM DUAL;
   END;

エラーが発生するのを助けてください


「BEGIN-OF-STATEMENT」の後に、予期しないトークン「CREATE TRIGGER TRG_EFMREFNO BEFOR 」が見つかりました。予期されるトークンには次が含まれる可能性があります: " <revoke>".. SQLCODE=-104、SQLSTATE=42601、DRIVER=4.12.79

「END」の後に予期しないトークン「END-OF-STATEMENT」が見つかりました。予想されるトークンには次のものが含まれる場合があります: "JOIN <joined_table>".. SQLCODE=-104、SQLSTATE=42601、DRIVER=4.12.79

そのエラーの解決策を教えてください

4

1 に答える 1

1

ここでは2つのことが起こっています-

1)「;」の場合 文字はSQLステートメントの一部であるため、ステートメントを終了するには別の文字を使用する必要があります。私は通常「@」を使用します。「db2」コマンドに別の文字を選択したことを伝えるには、次を使用します。

db2 -td@

またはファイルから読み取りたい場合

db2 -td@ -f <somefile>

2)トリガーの新しい行を更新する正しい方法は、新しい行のエイリアスを設定し、set句を使用することです。

CREATE TRIGGER TRG_EFMREFNO 
   BEFORE 
   INSERT ON FEEDBACK_CASE_TB 
   REFERENCING NEW AS N
   FOR EACH ROW 
   BEGIN 
       SET N.EFMREFNO = SEQ_EFMREFNO.NEXTVAL;
   END
@

同じことを達成するcreatetableステートメントのdefault句でシーケンスを使用する他の方法があるかもしれません:

于 2012-11-07T14:17:15.173 に答える