oracle自动编号的触发器

--1:建表
CREATE TABLE  t1 (
       
       tid VARCHAR2(20),
       tname VARCHAR2(20)
       )
--2:自动编号连续的触发器
CREATE OR REPLACE TRIGGER tri_t_t1atu
--在真正insert数据库之前
BEFORE  INSERT 
ON t1  -- on 具体的表
FOR EACH ROW 
DECLARE 
   max_id VARCHAR2(20);
BEGIN 
      SELECT 'TID'||lpad(substr(nvl(max(tid),'TID000'),4,3)+1,3,0) INTO max_id  FROM t1;

      :NEW.tid := max_id;  --把max_id赋给tid列

END;


/*MAX(tid):找出最大值
nvl(MAX(tid),'TID000'):处理null值 
substr(nvl(max(tid),'TID000'),4,3):从第4位开始,截取3位
 +1:截取完后的数字+1;
 lpad(+1后的数字,要满足的位数,不够在left补0);
 'TID'||lpad():字符串连接成最终的 ‘TID000’样子*/
 
/*正确的理解:
·如果要修改新行中的值(:new.字段名 := 值),只能用 before。
·如果不修改,before和after都可以。

before和after的区别:就是能否修改new变量!(至少为什么,这是语法)*/

 3:执行

INSERT INTO t1(tname) VALUES('a');
INSERT INTO t1(tname) VALUES('b');
INSERT INTO t1(tname) VALUES('c');
COMMIT;

 

结果:

1 TID001 a
2 TID002 b
3 TID003 c
4 TID004 a
5 TID005 b
6 TID006 c

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值