想学习一下触发器。请指教
有一张表A,三个字段ID,NAME(中文名),XMPY(名字首字母)
有一个函数F_TRANS_PINYIN_CAPITAL
如果增加一条记录1,张三
那个XMPY自动更新为‘zs’请问这个触发器怎么写?

解决方案 »

  1.   

    create or replace trigger a_trigger
    before insert on a
    for each row
    begin
    :new.XMPY := F_TRANS_PINYIN_CAPITAL(:new.NAME);
    end;
      

  2.   

    哥啊,要是就这样的话,百度、google多的是我要的是真的能帮忙解决的
    SQL语句啊
    个人认为难点在于:增加一条记录的时候,你怎么知道这条记录中的ID是多少?
    另外函数F_TRANS_PINYIN_CAPITAL 就是把名字更新为姓名首字母的。
      

  3.   


    create or replace trigger a_trigger
    before insert on a for each row
    declare
    pragma autonomous_transaction; --自由实务处理,调用函数或存储过程触发器有问题的话最好加这句
    i_xmpy char(6);  --长度根据实际情况定,建议别用varchar2
    begin
        i_xmpy := F_TRANS_PINYIN_CAPITAL(:new.NAME);
        update a set XMPY = i_xmpy 
        where ID = :new.ID;  --ID字段用的是序列的话,“:new.ID”可换成“序列名.currval”
    end;这段代码我直接写的,没有编译过,你先试试,没问题的话可以进行简化
      

  4.   

    楼主啊 你有没有试过1楼的代码 个人认为 仅通过你的描述 我认为1楼完全可以满足你的需求如果你认为有问题 就说明你描述的不清晰执行insert语句的时候 把名字取出来 通过你给的函数转换成拼音 赋值给new.XMPY 这就足够了 还写什么update啊 多此一举另外 建议楼主以后描述问题的时候尽量详细 把你的想法和存在的问题都摆出来 这样大家才会帮你解决
    看不懂的帖子 我很少回复 也懒得问
      

  5.   

    能不能弱弱的问一句,是不是也可以用after insert,毕竟要插入后才更新的么,万一插入时出问题了,没有插入进去,反而更新了字段。