Wie kann ich mit PL/SQL Cursor-for-Schleife für einen Trigger

Hallo ich bin ein Neuling auf plsql dies ist das erste mal, dass ich plsql

Ich erstellt trigger mit plsql. Hier ist die syntax, die ich verwenden, um zu erstellen, auslösen. aber es gibt ein Fehler wie "[Err] ORA-24344: success with compilation error" ich kann nicht herausfinden, wo ich falsch gelaufen ist. In diesem trigger verwende ich eine for-Schleife mit einem cursor.
Ich denke, dass etwas falsch mit dem cursor Kann mir jemand helfen, um herauszufinden, wo ich schief ging . Ich benutze Navicat, dies zu tun. Ich bin mit diesen zu kämpfen, für fast 5 Tage 🙁 vielen Dank im Voraus

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;
;
  • Die Deklaration von Variablen Datentypen werden sollte, basierend auf der Spalte Typen -- zB. "employee_company_code emplyee_master.company_code%type;". Die miclaim_supervisor_count könnte pls_integer.
  • miclaim_supervisor_count wird nie null sein, da count(*) nicht null zurückgeben. Wenn Sie nur daran interessiert, ob alle Einträge vorhanden sind, dann setzen Sie ein rownum = 1 auf die Abfrage.
InformationsquelleAutor cHaNkX | 2013-03-15
Schreibe einen Kommentar