CREATE TABLE stubirthday
(
id varchar2(6) NOT NULL,
name varchar2(8) NULL,
birthday timestamp NULL
);CREATE TABLE stuage
(
id varchar2(6) NOT NULL,
age number(3) NULL
);
当改变stubirthday表 stuage表跟这变化
下面是建立的触发器
create or replace trigger aiudfer_stubirthday       after insert or update or delete
              on stubirthday 
 
       for each row
begin
  IF INSERTING THEN
     INSERT INTO stuage(id,age) VALUES(:NEW.id,(to_number(to_char(sysdate,'yyyy'))-to_number(to_char(:NEW.birthday,'yyyy')));
  ELSIF DELETING THEN
    DELETE FROM stuage WHERE id=:OLD.id;
  ELSE
     UPDATE stuage SET age=(to_number(to_char(sysdate,'yyyy'))-to_number(to_char(:NEW.birthday,'yyyy')) WHERE id=:OLD.id;
  END IF;
end ;
请问什么地方错了,orcle10g的警告: 创建的触发器带有编译错误。

解决方案 »

  1.   

    缺两个右括号
    create or replace trigger aiudfer_stubirthday       after insert or update or delete 
                  on stubirthday       for each row 
    begin 
      IF INSERTING THEN 
        INSERT INTO stuage(id,age) VALUES(:NEW.id,(to_number(to_char(sysdate,'yyyy'))-to_number(to_char(:NEW.birthday,'yyyy')))); --这里少一个 
      ELSIF DELETING THEN 
        DELETE FROM stuage WHERE id=:OLD.id; 
      ELSE 
        UPDATE stuage SET age=(to_number(to_char(sysdate,'yyyy'))-to_number(to_char(:NEW.birthday,'yyyy'))) -- 这里也少了
     WHERE id=:OLD.id; 
      END IF; 
    end ; 
      

  2.   

    在FOR EACH ROW 前面加上REFERENCING NEW AS NEW OLD AS OLD吧