1, 添加id列

  1. -- ###############################################
  2. -- add ID column for XXXXXXTABLE
  3. -- ###############################################
  4. declare
  5. v_cnt binary_integer := 0;
  6. begin
  7.  
  8. select count(1) into v_cnt
  9. from user_tab_columns e
  10. where e.table_name = 'XXXXXXTABLE'
  11. and e.column_name = 'ID';
  12.  
  13. if( v_cnt = 0 ) then
  14. execute immediate 'alter table XXXXXXTABLE add ( ID int )';
  15. end if;
  16. end;
  17. /

2,给ID列赋值

  1. -- ###############################################
  2. -- set ID value with FXNDF_FIXING_POST_SEQ for XXXXXXTABLE
  3. -- ###############################################
  4. merge into XXXXXXTABLE u
  5. using (
  6. select rowid rid, rownum rnum from XXXXXXTABLE
  7. ) s
  8. on (u.rowid = s.rid)
  9. when matched then update set u.id = s.rnum ;
  10. commit;

3, 添加序列

  1. -- ###############################################
  2. -- add FXNDF_FIXING_POST_SEQ
  3. -- ###############################################
  4. declare
  5. v_cnt binary_integer := 0;
  6. v_sql varchar2(500) := '';
  7. v_current_max int :=0;
  8.  
  9. begin
  10.  
  11. select count(1) into v_cnt
  12. from user_sequences e
  13. where e.sequence_name = 'XXXXXXTABLE_SEQ';
  14.  
  15. if( v_cnt = 0 ) then
  16.  
  17. select max(ID) into v_current_max from XXXXXXTABLE;
  18.  
  19. select nvl(v_current_max,0) + 1 into v_current_max from dual;
  20.  
  21. v_sql := 'CREATE SEQUENCE XXXXXXTABLE_SEQ MINVALUE ' || v_current_max || ' MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH ' || v_current_max;
  22. execute immediate v_sql;
  23.  
  24. end if;
  25. end;
  26. /

4, 添加主键

  1. -- ###############################################
  2. -- add unit key on id for XXXXXXTABLE
  3. -- ###############################################
  4. declare
  5. v_cnt binary_integer :=0;
  6. begin
  7.  
  8. select count(1) into v_cnt
  9. from user_constraints e
  10. where e.table_name = 'XXXXXXTABLE'
  11. and e.constraint_name = 'PK_XXXXXXTABLE';
  12.  
  13. if( v_cnt = 0 ) then
  14. execute immediate 'alter table XXXXXXTABLE add constraint PK_XXXXXXTABLE primary key (ID)';
  15. end if;
  16. end;
  17. /

5, 添加before 触发器

  1. -- ###############################################
  2. -- add before insert trigger for XXXXXXTABLE
  3. -- ###############################################
  4. CREATE OR REPLACE TRIGGER TRG_XXXXXXTABLE_INST
  5. before insert ON XXXXXXTABLE for each row
  6. begin
  7.  
  8. select XXXXXXTABLE_SEQ.nextval into:new.ID from dual;
  9.  
  10. end TRG_XXXXXXTABLE_INST;
  11. /

用触发器来实现Oracle的自增长列的更多相关文章

  1. Oracle创建自动增长列

    前言: Oracle中不像SQL Server在创建表的时候使用identity(1001,1)来创建自动增长列,而是需要结合序列(Sequences)和触发器(Triggers)来实现 创建测试表 ...

  2. Oracle数据库自动增长列的实现过程

    1.创建序列 -- Create sequence create sequence INNERID minvalue 1 maxvalue 99999999999999 start with 1 in ...

  3. oracle创建自增长列

    --创建一个新表 /*create table students(stu_id number,stu_name varchar2(20),stu_email varchar2(40),primary ...

  4. Oracle增加自增长列

    -- 移除索引drop index TB_1;drop index TB_2 ;alter table TB drop constraint PK_TB; --允许列为空 alter table TB ...

  5. Oracle 给已创建的表增加自增长列

    对于已经创建的表,在特殊需求下,需要增加一个自增长列步骤: --1. 增加 自增长列 ); --2. 程序方式更新设置 IdNum 列 值 --3.查询最大 ) From Limsbusinessen ...

  6. oracle的自增长

    mysql的自增长非常容易,一个 AUTO_INCREMENT 就搞定,可是oracle就不行了 下面是oracle的自增长 #创建一个表CREATE TABLE T_TEST_DEPARTMENTS ...

  7. Oracle创建自增长主键

    Oracle主键常用的分为UUID和自增长int两种,下面简单说下各自的优缺点: UUID的优点 1.生成方便,不管是通过sys_guid() 还是java的uuid都能很方便的创建UUID. 2.适 ...

  8. Hibernate在oracle中ID增长的方式

    引用链接:http://blog.csdn.net/w183705952/article/details/7367272 Hibernate在oracle中ID增长的方式 第一种:设置ID的增长策略是 ...

  9. Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:

    Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...

随机推荐

  1. JS倒计时,不会重复执行

    直接上代码,亲自测试了的,没问题咯 <html> <head> <title>点击获取验证码按钮后按钮变灰,倒计时一段时间后又可重复点击</title> ...

  2. Servlet题库

    一.    填空题 Servlet中使用Session对象的步骤为:调用  HttpServletRequest.getSession()  得到Session对象,查看Session对象,在会话中保 ...

  3. Git命令之上传与同步

    操作步骤,可参考:http://blog.csdn.net/chenyufeng1991/article/details/47299461. 1.在本地仓库中,即项目目录下创建文件,如: 2.查看当前 ...

  4. printf()函数的参数和制表符

    · 参数 · 控制符 · 转义序列 printf("这是第们学习的第4课"); printf("12345\n6789"); \n  换行 \r  回车键 \b ...

  5. UVA 10192 Vacation

    裸最长公共子序列 #include<time.h> #include <cstdio> #include <iostream> #include<algori ...

  6. iOS 获取当前展示的页面

    - (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplica ...

  7. poj 1003:Hangover(水题,数学模拟)

    Hangover Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 99450   Accepted: 48213 Descri ...

  8. 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 ...

  9. 算法系列:CSAPP 推荐

    转载自:https://book.douban.com/review/6093947/ 如果你觉得这本书过于厚重担心看不下来的话,不妨跟着coursera的Hardware/Software Inte ...

  10. Microshaoft WinDbg cmdtree

    windbg ANSI Command Tree 1.0 title {"Microshaoft Commands"} body {"cmdtree"} {&q ...