0

こんにちは、私は plsql の初心者です。plsql を使用するのはこれが初めてです

plsqlを使用してトリガーを作成しました。そのトリガーを作成するために使用する構文を次に示します。しかし、「」としてエラーが発生[Err] ORA-24344: success with compilation errorし、どこで間違ったのかわかりません。このトリガーでは、カーソルで for ループを使用します。そのカーソルに何か問題があると思います 誰かが私がどこで間違ったのかを理解するのを手伝ってくれませんか. これには Navicat を使用します。私はこれにほぼ5日間苦労しています:(事前に感謝します

CREATE OR REPLACE TRIGGER "c" 
  AFTER INSERT ON "EMP_REPORT_TO"
  REFERENCING OLD AS "OLD" NEW AS "NEW"
  FOR EACH ROW
DECLARE

miclaim_supervisor_count number;
employee_company_code number;
employee_businessunit number;

cursor  projMgrsCursor is select b.BU_MEMBER_ID
from BU_MEMBER b, EMP_SUB_DIV s
where s.EMP_NO = :NEW.EMP_NO
and s.SUB_DIVISION_CODE = '02' and s.DIV_CODE = '041'
and b.BU_ID IN (select BU_ID from BU_MEMBER where BU_MEMBER_ID = :NEW.EMP_NO);


BEGIN
        delete from MICL_SUPERVISORS where EMP_NO = :NEW.EMP_NO and IS_OVVERRIDDEN = 0;
        select count(*) into miclaim_supervisor_count from MICL_SUPERVISORS where EMP_NO = :NEW.EMP_NO and IS_OVVERRIDDEN = 1;
        select COMPANY_CODE into employee_company_code from  EMPLOYEE_MASTER where EMP_NO = :NEW.EMP_NO;


if (employee_company_code = 'SOFT')then 

            OPEN projMgrsCursor;

            FOR projMgrsCursor IN projMgrs 
            LOOP                
            insert into MICL_SUPERVISORS VALUES ((:NEW.ID), (SELECT SYSDATE FROM DUAL), :NEW.ENTRYADDEDBY_EMP_NO, 3000, 0, projMgrEmpNo, NULL,:NEW.EMP_NO);
            END LOOP;   
        close projMgrsCursor;

else
            if(miclaim_supervisor_count IS NULL or miclaim_supervisor_count<1) then
                insert into MICL_SUPERVISORS VALUES ((:NEW.ID), (SELECT SYSDATE `enter code here`FROM DUAL), :NEW.ENTRYADDEDBY_EMP_NO, 3000, 0, :NEW.SUP_EMP_NO, NULL,:NEW.EMP_NO);
            end if;
end if;


END;
;
4

2 に答える 2

1

すべてのあなたの答えと時間をありがとう:)

まあ、オラクルのSQL開発者のおかげで、 実際にforループに問題がある場所を見つけました

ここにコードがあります(ループの修正コード)

OPEN  projMgrsCursor;

    LOOP
    FETCH projMgrsCursor INTO projMgrs;
    EXIT WHEN projMgrsCursor%NOTFOUND;
    insert into
 MICL_SUPERVISORS VALUES ((:NEW.ID), (SELECT SYSDATE FROM DUAL), :NEW.ENTRYADDEDBY_EMP_NO, 3000, 0,projMgrs, NULL,:NEW.EMP_NO);
    END LOOP;   

  CLOSE projMgrsCursor; 

これが私のような人に役立つことを願っています:)

于 2013-03-15T14:23:52.220 に答える
0

カーソルはまったく必要ありません。なぜ SQL ステートメントを使用して挿入を実行しないのでしょうか?

于 2013-03-15T07:21:15.333 に答える