嗨,我是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;
;
答案 0 :(得分:0)
根本不需要游标 - 为什么不使用SQL语句来执行插入?
答案 1 :(得分:0)
感谢您的所有答案和时间:)
好吧我找出了我的错误,感谢 oracle sql developer 实际上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;
希望这会对像我这样的人有所帮助:)。