create or replace trigger tirg_states after  insert   on statesfor each row
begin
  if(:new.s_status=1) then
    
      if (:new.s_id in (select id from father) )  then
 
        update father set sales=sales+1 where id=:new.s_id;
      else
       insert into father(id,sales) values(:new.s_id,1);
  end if;
 end if;
 end;
解释一下:我在states表做个插入触发器,如果states表中status字段等于1,这是:如果states表中new.s_id 的值在father表id 中,则更新,如果不在,就插入。可 if (:new.s_id in (select id from father) )  then 通不过,报“PLS-00405: 此上下文中不支持子查询“ 编译错误高手,这句我怎么写呢???帮我改一下

解决方案 »

  1.   

    可以声名一个变量,然后count(*)到那个变量里面select count(*) into XXX from father where id=:new.s_id,之后判断xxx的值,笨方法
      

  2.   

       用游标遍历father表!
      

  3.   

    试试这个:CREATE OR REPLACE TRIGGER TIRG_STATES
      AFTER INSERT ON STATES  FOR EACH ROW
    BEGIN
      IF (:NEW.S_STATUS = 1) THEN
        UPDATE FATHER SET SALES = SALES + 1 WHERE ID = :NEW.S_ID;
        IF SQL%ROWCOUNT = 0 THEN
          INSERT INTO FATHER (ID, SALES) VALUES (:NEW.S_ID, 1);
        END IF;
      
      END IF;
    END;