用触发器来实现Oracle的自增长列
1, 添加id列
-- ###############################################
-- add ID column for XXXXXXTABLE
-- ###############################################
declare
v_cnt binary_integer := 0;
begin select count(1) into v_cnt
from user_tab_columns e
where e.table_name = 'XXXXXXTABLE'
and e.column_name = 'ID'; if( v_cnt = 0 ) then
execute immediate 'alter table XXXXXXTABLE add ( ID int )';
end if;
end;
/
2,给ID列赋值
-- ###############################################
-- set ID value with FXNDF_FIXING_POST_SEQ for XXXXXXTABLE
-- ###############################################
merge into XXXXXXTABLE u
using (
select rowid rid, rownum rnum from XXXXXXTABLE
) s
on (u.rowid = s.rid)
when matched then update set u.id = s.rnum ;
commit;
3, 添加序列
-- ###############################################
-- add FXNDF_FIXING_POST_SEQ
-- ###############################################
declare
v_cnt binary_integer := 0;
v_sql varchar2(500) := '';
v_current_max int :=0; begin select count(1) into v_cnt
from user_sequences e
where e.sequence_name = 'XXXXXXTABLE_SEQ'; if( v_cnt = 0 ) then select max(ID) into v_current_max from XXXXXXTABLE; select nvl(v_current_max,0) + 1 into v_current_max from dual; v_sql := 'CREATE SEQUENCE XXXXXXTABLE_SEQ MINVALUE ' || v_current_max || ' MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH ' || v_current_max;
execute immediate v_sql; end if;
end;
/
4, 添加主键
-- ###############################################
-- add unit key on id for XXXXXXTABLE
-- ###############################################
declare
v_cnt binary_integer :=0;
begin select count(1) into v_cnt
from user_constraints e
where e.table_name = 'XXXXXXTABLE'
and e.constraint_name = 'PK_XXXXXXTABLE'; if( v_cnt = 0 ) then
execute immediate 'alter table XXXXXXTABLE add constraint PK_XXXXXXTABLE primary key (ID)';
end if;
end;
/
5, 添加before 触发器
-- ###############################################
-- add before insert trigger for XXXXXXTABLE
-- ###############################################
CREATE OR REPLACE TRIGGER TRG_XXXXXXTABLE_INST
before insert ON XXXXXXTABLE for each row
begin select XXXXXXTABLE_SEQ.nextval into:new.ID from dual; end TRG_XXXXXXTABLE_INST;
/
用触发器来实现Oracle的自增长列的更多相关文章
- Oracle创建自动增长列
前言: Oracle中不像SQL Server在创建表的时候使用identity(1001,1)来创建自动增长列,而是需要结合序列(Sequences)和触发器(Triggers)来实现 创建测试表 ...
- Oracle数据库自动增长列的实现过程
1.创建序列 -- Create sequence create sequence INNERID minvalue 1 maxvalue 99999999999999 start with 1 in ...
- oracle创建自增长列
--创建一个新表 /*create table students(stu_id number,stu_name varchar2(20),stu_email varchar2(40),primary ...
- Oracle增加自增长列
-- 移除索引drop index TB_1;drop index TB_2 ;alter table TB drop constraint PK_TB; --允许列为空 alter table TB ...
- Oracle 给已创建的表增加自增长列
对于已经创建的表,在特殊需求下,需要增加一个自增长列步骤: --1. 增加 自增长列 ); --2. 程序方式更新设置 IdNum 列 值 --3.查询最大 ) From Limsbusinessen ...
- oracle的自增长
mysql的自增长非常容易,一个 AUTO_INCREMENT 就搞定,可是oracle就不行了 下面是oracle的自增长 #创建一个表CREATE TABLE T_TEST_DEPARTMENTS ...
- Oracle创建自增长主键
Oracle主键常用的分为UUID和自增长int两种,下面简单说下各自的优缺点: UUID的优点 1.生成方便,不管是通过sys_guid() 还是java的uuid都能很方便的创建UUID. 2.适 ...
- Hibernate在oracle中ID增长的方式
引用链接:http://blog.csdn.net/w183705952/article/details/7367272 Hibernate在oracle中ID增长的方式 第一种:设置ID的增长策略是 ...
- Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...
随机推荐
- HTML认识
1.1 认识什么是纯文本文件 txt window自带有一个软件,叫做记事本,记事本保存的格式TXT,就是英文text的缩写,术语上称呼为"纯文本文件" TXT文件,只能保存文本内 ...
- Nodejs的第一个页面
nodejs安装后如何查看和安装其他工具 网上nodejs的文章已经很多,这里只是写下自己的小小心得,如果能帮到别人当然更好. 安装nodejs这里就不叙述了,直接上nodejs官网下载就好了,初学者 ...
- cuda 初学大全
转自:http://blog.csdn.net/augusdi/article/details/12529331 cuda 初学大全 1 硬件架构CUDA编程中,习惯称CPU为Host,GPU为Dev ...
- python基础——枚举类
python基础——枚举类 当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12 好处是简单 ...
- max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
在/etc/syscurity/limits.conf 加入以下两行: elastic hard nofile 65536 elastic soft nofile 65536 #备注:elastic ...
- EF – 1.模式
3种数据库 code first model first database first 创建EF http://www.cnblogs.com/tangge/p/3834578.htm ...
- C#的lock关键字
using System; using System.Threading; namespace Test { class Program { //一.Lock定义 //lock 关键字可以用来确保代码 ...
- c++序列化方法
暂时使用boost 序列化, 目前我的测试基本都ok 只是对于c++11 shared ptr 没有测试成功,只能手工写下shared ptr 部分的序列化,也就是目前我对指针都不直接序列化,自己管理 ...
- Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……
接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...
- Web框架本质
Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...