哦。需求写错了,更改一下:
============================
要求:    上面A处完成语句,在B处调用时,如果加入数据以后Member表中的分数和>1000,则不允许添加,如果加入后没有超过,则可以添加。    也就是说,B处的2条数据,前一条是可以成功的(添加后为1000),后一条不能成功(添加后为1500),A处的语句如何写?请高手帮忙。

解决方案 »

  1.   

    个人观点,trigger不可能完成任务。
    改用其他方法吧!
      

  2.   

    1\创建触发器的语法如下:CREATE [OR REPLACE] TRIGGER trigger_name
    {before|after|instead of} event
    ON {table_or_view_name|DATABASE}
    [FOR EACH ROW[WHEN condition>
    trigger_body 
    2\触发器对自己表进行触发修改判断就比较混乱。
    建议利用另一个表来触发。
      

  3.   

    CREATE OR REPLACE TRIGGER TRIG_MEMBER_TEST 
    after INSERT
    ON Member
    as
    insert into sumcredit select sum(credit)  from tablename;
    if sumcredit>1000  then
     delete from tablename where memberid=:new.memberid;
    end ifend TRIG_MEMBER_TEST ;自己想的,如果插入后,和>1000就把刚插入的记录删除!不知道行不行!
      

  4.   

    主要是因为我接触SQL过程语句太少,我已经让它成功触发了,不过我不知道怎么样不让它插入不合法的数据,哪位帮我改进一下?或是提供一点资料给我参考一下?--Player record插入触发器
    CREATE OR REPLACE TRIGGER TRIG_MEMBER_TEST
    BEFORE INSERT
    ON Member
    FOR EACH ROW
    DECLARE totalcredit Number(10);
    BEGIN
        SELECT Sum(credit)+:new.credit INTO totalcredit FROM Member;  --totalcredit表示假如添加成功的总分值。
        
        if totalcredit>1500 then
            RAISE_APPLICATION_ERROR (-20001,SQLERRM);  --这里,我现在只能引起一个错误窗,却没能阻止它增加记录。我对RAISE语句也不熟。
        end if;
    END;
    /
      

  5.   

    to  zhpsam109(孤寂无边):我昨天也是这个想法,不过被项目经理否决了,他不允许任何不合法的数据插入后再删除,其实我也是偏向这种想法。
      

  6.   

    create or replace view v_test as
      select *
        from membercreate or replace trigger T_test
      instead of insert on v_test  
      for each row
    declare
      -- local variables here
    begin
      if /*符合条件*/ then
         return;
      else
         insert into Member/**/
      end if;
    end T_test;
    建一个同样结构的视图,使用Instead Of的触发处理,
      

  7.   

    insert into v_test (memberid, credit)values(4,400);  
    insert into v_test (memberid, credit)values(5,500); 
    对表Member的Insert,Update,Delete操作全部转成对视图V_test的操作
      

  8.   

    to myrou(myrou) :因为有2个不同的客户需求,这个系统要运行在PostgreSQL和ORACLE这2个数据库上,PostgreSQL的视图好像是只读的,所以不能写入视图。不过这样的办法对我是有一些启发,比如instead的使用,我以前关注数据库真是太少了。。
      

  9.   

    to dinya2003(OK):主要是因为有多个服务器同时存取,所以无法在前端处理。