用触发器来实现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主键生成器 ...
随机推荐
- php策略模式的研究
<?php abstract class Moshi{ private $num; public $price; const Ted=1; const Sed=2 ...
- HTML标记语法之图片Img元素
语法:<img src=”xxx.jpg”alt=”xxx”title=”xxx”> 属性可取值如下: 属性名称 属性值 说明 src URL 图片路径 alt 文本 图片无法显示时的文本 ...
- 解决SQL Server的cannot resolve the collation conflict问题
当没有牵涉到两个不同的数据库时,出现以上错误. Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" ...
- supersr--图形上下文的注意点
- (void)test { // 不要自己调用drawRect:方法的原因: // 当系统调用drawRect:方法之前, 会创建一个与当前UIView的layer相关的图形上下文, 这样就可以保证 ...
- A Horrible Poem(bzoj 2795)
Description 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. Input 第一行一个正整 ...
- SQL Server多表多列更新
student表: lag表: 要求将student表stu_id列为1的stu_nick列和stu_phont列的数据更新为lag表的lag_nick列和lag_phone列. SQL语句: upd ...
- 在HTML中禁止文字的复制
很简单,只需在<body>中添加如下代码: <body oncontextmenu='return false' ondragstart='return false' onsele ...
- sehll_if
-s file 文件大小非0时为真 [ -f "somefile" ] :判断是否是一个文件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可 ...
- CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接 ...
- linux eclipse3.6.1 maven安装
linux maven安装及 eclipse maven插件安装,有需要的朋友可以参考下. 1. maven的安装(apache-maven-3.0.5为例): a.官网地址:http://mave ...