用触发器来实现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主键生成器 ...
随机推荐
- JS倒计时,不会重复执行
直接上代码,亲自测试了的,没问题咯 <html> <head> <title>点击获取验证码按钮后按钮变灰,倒计时一段时间后又可重复点击</title> ...
- Servlet题库
一. 填空题 Servlet中使用Session对象的步骤为:调用 HttpServletRequest.getSession() 得到Session对象,查看Session对象,在会话中保 ...
- Git命令之上传与同步
操作步骤,可参考:http://blog.csdn.net/chenyufeng1991/article/details/47299461. 1.在本地仓库中,即项目目录下创建文件,如: 2.查看当前 ...
- printf()函数的参数和制表符
· 参数 · 控制符 · 转义序列 printf("这是第们学习的第4课"); printf("12345\n6789"); \n 换行 \r 回车键 \b ...
- UVA 10192 Vacation
裸最长公共子序列 #include<time.h> #include <cstdio> #include <iostream> #include<algori ...
- iOS 获取当前展示的页面
- (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplica ...
- poj 1003:Hangover(水题,数学模拟)
Hangover Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 99450 Accepted: 48213 Descri ...
- hdu 1754:I Hate It(线段树,入门题,RMQ问题)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 算法系列:CSAPP 推荐
转载自:https://book.douban.com/review/6093947/ 如果你觉得这本书过于厚重担心看不下来的话,不妨跟着coursera的Hardware/Software Inte ...
- Microshaoft WinDbg cmdtree
windbg ANSI Command Tree 1.0 title {"Microshaoft Commands"} body {"cmdtree"} {&q ...