create or replace trigger child_birth
  after update or insert on HRB02_04_03
  FOR EACH ROW
  declare
      id1 number;
      id2 number;
      select TEST_SEQ.Nextval into id1 from dual
      select TEST_SEQ.Currval into id2 from dual
begin
  if updating then
    update BIR_PERINATAL
       set INHisCode         = :NEW.hrb02_04_002,
           motherName        = :NEW.d01,
           birthChildWeigth  = (select hrb02_04_083
                                  from HRB02_04_04
                                 where d01 = :NEW.cid),
           birthChildstature = (select hrb02_04_084
                                  from HRB02_04_04
                                 where d01 = :NEW.cid)
     where perid = id2;
  end if;
  if inserting then
    insert into BIR_PERINATAL
      (PERID, INHisCode, motherName, birthChildWeigth, birthChildstature)
    values
      (id1,
       :NEW.hrb02_04_002,
       :NEW.d01,
       (select hrb02_04_083 from HRB02_04_04 where d01 = :NEW.cid),
       (select hrb02_04_084 from HRB02_04_04 where d01 = :NEW.cid));
  end if;
end;
我想在insert时用遍了id1,即序列的下一个值。update时用id2,序列当前值,实现添加于更新,可是一直编译错误。
说触发器 'CHIS.CHILD_BIRTH' 无效且未通过重新验证。请大家帮忙看下!

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER child_birth
       AFTER UPDATE OR INSERT
       ON hrb02_04_03
       FOR EACH ROW
    DECLARE
       id1   NUMBER := test_seq.NEXTVAL;
       id2   NUMBER := test_seq.CURRVAL;
    BEGIN
       IF UPDATING
       THEN
          UPDATE bir_perinatal
             SET inhiscode = :NEW.hrb02_04_002,
                 mothername = :NEW.d01,
                 birthchildweigth = (SELECT hrb02_04_083
                                       FROM hrb02_04_04
                                      WHERE d01 = :NEW.cid),
                 birthchildstature = (SELECT hrb02_04_084
                                        FROM hrb02_04_04
                                       WHERE d01 = :NEW.cid)
           WHERE perid = id2;
       END IF;   IF INSERTING
       THEN
          INSERT INTO bir_perinatal
                      (perid, inhiscode, mothername, birthchildweigth,
                       birthchildstature
                      )
               VALUES (id1, :NEW.hrb02_04_002, :NEW.d01, (SELECT hrb02_04_083
                                                            FROM hrb02_04_04
                                                           WHERE d01 = :NEW.cid),
                       (SELECT hrb02_04_084
                          FROM hrb02_04_04
                         WHERE d01 = :NEW.cid)
                      );
       END IF;
    END;
      

  2.   

    触发器 'CHIS.CHILD_BIRTH' 无效且未通过重新验证