oracle实现插入数据时主键自增

1 首先是建表语句

create table student (
       student_id number(8) not null primary key, --主键列
       first_name varchar2(50), -- 名字
       last_name varchar2(50)   -- 姓
);

2 创建自增序列

create sequence seq_student
       minvalue 1  --最小值
       nomaxvalue --最大值
       start with 1 --起始值
       increment by 1  --增长基数
       nocycle  --不循环,一直增加
       nocache ; -- 不使用缓存

到这里其实就可以使用了,只是在插入的时候必须要自己调用,像这样

insert into student(student_id,first_name,last_name) values(seq_student.nextval,'','');

为了可以不关注主键列,创建一个触发器。

3 创建触发器(插入数据时触发)

create trigger tri_student_ins 
       before insert on student for each row  when (new.student_id is null)
    begin 
      select seq_student.nextval into:new.student_id from dual;
    end;  

这样就可以插入数据了

insert into student(first_name,last_name) values('','');

4 写一个pl/sql代码块,批量插入数据

declare 
       i number := 1;
       v_first_name varchar2(50);
       v_last_name varchar2(50);
begin 
  for i in 1 .. 200 
    loop 
      v_first_name := '' || to_char(i);
      v_last_name := '' || to_char(i);
      insert into student(first_name,last_name) values(v_first_name,v_last_name);
      commit;
    end loop;
end;   

其他:

create sequence  seq_T_STLMERC_INFO_TEST 
minvalue 1       --最小值
nomaxvalue        --最大值
start with 1       --起始值
increment by 1        --增长基数
nocycle           --不循环,一直增加
nocache          -- 不使用缓存

或者

create sequence T_STLMERC_INFO_TEST increment by 1 start with 1;

– 创建触发器(插入数据时触发

create trigger  tri_T_STLMERC_INFO_TEST 
       before insert on T_STLMERC_INFO_TEST for each row  when (new.id is null)
    begin 
      select seq_T_STLMERC_INFO_TEST.nextval into:new.id from dual;
    end;  
declare i integer; v_OWN_ORG_NO varchar2(50);
begin i:=0; 
for i in 1..50000 loop  v_OWN_ORG_NO := '' || to_char(i);
  insert into T_STLMERC_INFO_TEST (STL_MERC_ID, MERC_ID, STOE_ID, OWN_ORG_NO, MERC_NM, TM_SMPPE, TM_SMP, TYPE_NM, STAIR_ORG_ID, STAIR_ORG_NAME, SUBCLASS, SUBTYPE, ORGANAME, GENERA, MERC_CNM)
values ('85714018062L003', '800161000001273', '102161080620006', v_OWN_ORG_NO, '天津测试商户号11门店', '', '20210603203208', '', '1', '互联网事业部', '', '', '互联网事业部', '2', '巨方品牌营销策程度有限公司');
--insert into T_STLMERC_INFO_TEST select * from T_STLMERC_INFO;
 end loop; 
end; 
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值