表A有两列,(AID,AVAL)做一个触发器.完成下列任务:如果插入的 AVAL 不是以 'ABC' 开头.(说简单点吧,^_^).
那么取消这次插入,把该条记录的 AID 记录到表 B .如果用 SQL-Server 的话.简单多了.
用 Oracle 怎么实现呢?郁闷了好长时间了.

解决方案 »

  1.   

    aid=:new.aid
    if substr(aid,1,3)='ABC' then
       insert into b......
    end if;
      

  2.   

    SQL> CREATE TABLE TEST.A (ID VARCHAR2(5));表已创建。SQL> CREATE TABLE TEST.B (ID VARCHAR2(5));表已创建。SQL> CREATE OR REPLACE VIEW TEST.V_A AS SELECT * FROM TEST.A;视图已建立。SQL> CREATE OR REPLACE TRIGGER TEST.TRIGGER_TEST
      2  INSTEAD OF INSERT ON TEST.V_A
      3  FOR EACH ROW
      4  DECLARE
      5   theID VARCHAR2(5):='';
      6  BEGIN
      7   theID := :NEW.ID;
      8   IF SUBSTR(theID,1,3)='ABC' THEN
      9      INSERT INTO TEST.B(ID)VALUES(theID);
     10      ELSE
     11      INSERT INTO TEST.A(ID)VALUES(theID);
     12      END IF;
     13  END;
     14  /触发器已创建SQL> INSERT INTO TEST.V_A VALUES('123');已创建 1 行。SQL> INSERT INTO TEST.V_A VALUES('ABC');已创建 1 行。SQL> COMMIT;提交完成。SQL> SELECT *FROM TEST.A;ID
    -----
    123SQL> SELECT *FROM TEST.B;ID
    -----
    ABC
      

  3.   

    注意,INSERT INTO V_A 是为了使用INSTEAD OF 触发器,这种触发器不能创建在数据表上。
    从而我目前能想到的办法就是加一级视图。
      

  4.   

    不错,不错,boydgmx(梦霄) 的方法应该是可以的.
      

  5.   

    不错,我也学会了使用instead of 触发器了,刚好也碰到了一个类似的问题得解决
      

  6.   

    不好意思啊,第七行
    7  theID := :NEW.ID;这个:NEW.ID;哪里来的阿?没看到