私は次のスクリプトを持っています:
ALTER TABLE ODANBIRM
ADD (OBID NUMBER(10, 0) );
----------------------------------------------------------------------------
CREATE OR REPLACE TRIGGER TR_OB_INC
BEFORE INSERT ON ODANBIRM
FOR EACH ROW
BEGIN
SELECT SEQ_OB.NEXTVAL INTO :NEW.OBID FROM DUAL;
END;
-----------------------------------------------------------------------------
DECLARE
CURSOR CUR IS
SELECT ROWID AS RID FROM ODANBIRM;
RC CUR%ROWTYPE;
BEGIN
OPEN CUR;
LOOP
FETCH CUR INTO RC;
EXIT WHEN CUR%NOTFOUND;
UPDATE ODANBIRM SET OBID=SEQ_OB.NEXTVAL WHERE ROWID=RC.RID;
END LOOP;
CLOSE CUR;
COMMIT;
END;
ご覧のとおり、3つの異なるスクリプトがあります(破線で区切ります)。これを実行すると、最初のスクリプトは実行されますが、トリガーを作成する2番目のスクリプトは、「シンボル「DECLARE」に遭遇しました」と失敗します。トリガー作成スクリプトを削除してもエラーは発生せず、最初と最後のスクリプトは問題なく実行されます。エラーが発生せずにすべてを実行するにはどうすればよいですか?
編集:次に、2番目のスクリプトは次のようになっている必要があることに気付きました。
UPDATE ODANBIRM SET OBID=SEQ_OB.NEXTVAL;
したがって、この単純なことをループで実行することは、時間の無駄であり、非効率的です。効率を上げるには、できるだけ多くのSQLを使用し、PLSQLをできるだけ少なくする必要があると聞いたことがあります。いい考えだと思います。