数据表名为 t_lyj 
有个字段是 bh  --编号  varchar2 
它的规则是 年份-001   即2011-001  , 2011-002。。2011-9999
如果要插入今年的的数据,bh取当前最大的编号 加1
如果是2012年的时候,则第一条的bh是2012-001 现在想写个触发器,当insert的时候执行。
帮帮我这个新手吧。

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER CALLFUNINSERT
    AFTER INSERT  ON CALLFUN
    referencing NEW AS NEW OLD AS OLD 
    FOR EACH ROW 
    DECLARE
    CURSOR cur_autoinsert_levelpermission IS select LEVELID from OPERLEVEL;
    BEGIN 
    FOR EACH_LEVELROW IN cur_autoinsert_levelpermission LOOP
    INSERT INTO levelpermission VALUES(:NEW.CALLFUNID,EACH_LEVELROW.LEVELID,'1');
    END LOOP;
    END CALLFUNINSERT;上面给了你一个例子,你自己去改吧
      

  2.   

    编号如果用序列,则可能不连续,
    如果自己生成编号,则要解决并发问题,
    否则两并发的会话可能取到同一个编号。所以最好使用一种串行的机制来生成编号。
    可以建一张表来存储编号,然后采用串
    主动锁定select ...for update;方式生成编号。
    但这有一个缺点,大规模并发下效率低。