照我的理解应该就是一个触发器吧
我向这样写大家看可以吗?
create or raplace trigger temp_air
after insert on TEST
for each row
when .......
begin
    update from TEST set  tag =0;
end;
/
就是那个when的条件应该如何写啊?

解决方案 »

  1.   

    这样应该可以了,
    create or raplace trigger temp_air
    after insert on TEST
    for each row
    DECLARE
     idExist NUMBER(1,0):=0;
    begin
     SELECT COUNT(*) INTO idExist
     FROM 你的表名
     WHERE ID=:NEW.ID;
     IF snoExist!=0
     THEN update TEST set  tag =0  where  ID=:NEW.ID;
     END IF;
    end;
      

  2.   

    to weiting623()  
       你的标点符号不对?那些;都不对啊
      

  3.   

    SQL> create or raplace trigger temp_air
      2  after insert on TEST
      3  for each row
      4  DECLARE
      5   idExist NUMBER(1,0):=0
      6  begin
      7   SELECT COUNT(*) INTO idExist FROM Test
      8   WHERE ID=:NEW.ID
      9   IF snoExist!=0
     10   THEN update TEST set  tag =0  where  ID=:NEW.ID;
    create or raplace trigger temp_air
              *
    ERROR 位于第 1 行:
    ORA-00905: 缺少关键字
    SQL>  END IF
    SP2-0042: 未知命令"END IF" -- 其余行忽略。
    SQL> end;
    SP2-0042: 未知命令"end" -- 其余行忽略。
      

  4.   

    刚才把replace写错了,还有一些小错误,帮你调过,这样可以了。
    create or replace trigger temp_air
    after insert on TEST
    for each row
    DECLARE
     idExist NUMBER(1,0):=0;
    begin
     SELECT COUNT(*) INTO idExist
     FROM TEST
     WHERE ID=:NEW.ID;
     IF idExist!=0
     THEN update TEST set  tag =0  where  ID=:NEW.ID;
     END IF;
    end;
      

  5.   

    谢谢 weiting623() 你的触发器是正确的
    但是我还是遇到一个问题。我在执行  insert into test values (1,'saf',0);的时候
    报错了ERROR 位于第 1 行:
    ORA-04091: 表 SYSTEM.TEST 发生了变化,触发器/函数不能读
    ORA-06512: 在"SYSTEM.TEMP_AIR", line 4
    ORA-04088: 触发器 'SYSTEM.TEMP_AIR' 执行过程中出错
    这是什么原因?谢谢!!!
      

  6.   

    而且你的那句SELECT COUNT(*) INTO idExist FROM TEST WHERE ID=:NEW.ID;
    是根据id来判断?不是应该写为WHERE name=:NEW.name;???
    呵呵,不好意思,我对触发器不是很了解。谢谢。打扰了
      

  7.   

    嗯,应该用WHERE name=:NEW.name;之前没仔细看清你的题目
      

  8.   

    用这个试试
    insert into test(ID,name,tag) values (1,'saf',0);