CREATE TRIGGER FOXMOLD.WORKTB_MODIFY_NEW_TESTTRIGGER1 
   before INSERT ON FOXMOLD.WORKTB_MODIFY_NEW_TEST
   FOR EACH ROW 
DELARE 
   NUM VARCHAR2;
BEGIN
   SELECT COUNT(EMP_NO) INTO NUM FROM EMPLOYMENT_TEST
     WHERE EMP_NO=:NEW.EMP_NO
      AND TO_CHAR(WHAT_DATE,'YYYYMMDD')=CONCAT(CONCAT 
       (:NEW.YEAR,:NEW.MONTH),:NEW.DAY);
   IF NUM>0 THEN
      IF CONCAT(CONCAT(:NEW.YEAR,:NEW.MONTH),:NEW.DAY)<TO_CHAR
        (SYSDATE,'YYYYMMDD') THEN
         update employment_test set work_style=:new.id_class
         where emp_no=:new.emp_no
         and to_char(what_date,'yyyymmdd')=
         concat(concat(:new.year,:new.month),:new.day);
      END IF;
   END IF;
END;

解决方案 »

  1.   

    应该是after insert吧,是不是语法有错误呀
      

  2.   

    语法没有问题
    CREATE TRIGGER FOXMOLD.WORKTB_MODIFY_NEW_TESTTRIGGER1 AFTER INSERT 
    ON FOXMOLD.WORKTB_MODIFY_NEW_TEST
    FOR EACH ROW 
    DELARE 
       NUM VARCHAR2;
    BEGIN
    IF :NEW.YEAR||:NEW.MONTH||:NEW.DAY<TO_CHAR(SYSDATE,'YYYYMMDD') THEN
      update employment_test set work_style=:new.id_class
             where emp_no=:new.emp_no
             and to_char(what_date,'yyyymmdd')=:new.year||:new.month||:new.day;
    END IF;
    END;
    /
      

  3.   

    语法没有问题
    CREATE TRIGGER FOXMOLD.WORKTB_MODIFY_NEW_TESTTRIGGER1 AFTER INSERT 
    ON FOXMOLD.WORKTB_MODIFY_NEW_TEST
    FOR EACH ROW 
    DELARE 
       NUM VARCHAR2;
    BEGIN
    IF :NEW.YEAR||:NEW.MONTH||:NEW.DAY<TO_CHAR(SYSDATE,'YYYYMMDD') THEN
      update employment_test set work_style=:new.id_class
             where emp_no=:new.emp_no
             and to_char(what_date,'yyyymmdd')=:new.year||:new.month||:new.day;
    END IF;
    END;
    /
      

  4.   

    这是个新手很容易犯的错误,ORACLE的行触发器中禁止对当前表的操作(BEFORE INSERT除外),这是为了保证数据同步。
    beckhambobo(beckham)的写法才是合法的。