求助触发器

喜欢黄家驹 2011-05-31 08:24:08
数据表名为 t_lyj
有个字段是 bh --编号 varchar2
它的规则是 年份-001 即2011-001 , 2011-002。。。。。2011-9999
如果要插入今年的的数据,bh取当前最大的编号 加1
如果是2012年的时候,则第一条的bh是2012-001

现在想写个触发器,当insert的时候执行。
帮帮我这个新手吧。

...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
喜欢黄家驹 2011-05-31
  • 打赏
  • 举报
回复
不管编号重复的问题了。
小型数据库,给我把触发器写出来就行了。。。谢谢啊
tangren 2011-05-31
  • 打赏
  • 举报
回复
编号如果用序列,则可能不连续,
如果自己生成编号,则要解决并发问题,
否则两并发的会话可能取到同一个编号。

所以最好使用一种串行的机制来生成编号。
可以建一张表来存储编号,然后采用串
主动锁定select ...for update;方式生成编号。
但这有一个缺点,大规模并发下效率低。
喜欢黄家驹 2011-05-31
  • 打赏
  • 举报
回复
看不懂啊,为什么要用循环啊?
toadzw 2011-05-31
  • 打赏
  • 举报
回复
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;

上面给了你一个例子,你自己去改吧

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧