1.创建SEQUENCE

CREATE SEQUENCE MONKEY.TEST_ADD_IDCOL_ID
CACHE 100;

2.新增表栏位

ALTER TABLE MONKEY.TEST_ADD_IDCOL ADD(ID NUMBER);

3.重新编译USEDBY

4.创建trigger

CREATE TRIGGER MONKEY.TRI_TEST_ADD_IDCOL
BEFORE INSERT
ON MONKEY.TEST_ADD_IDCOL
FOR EACH ROW
BEGIN
SELECT MONKEY.TEST_ADD_IDCOL_ID.NEXTVAL INTO :NEW.ID FROM DUAL;
END;

5.补数据

/* Formatted on 2020/5/11 下午 02:00:49 (QP5 v5.163.1008.3004) */
DECLARE
CURSOR ROWIDS
IS
SELECT ROWIDTOCHAR (ROWID) AS RID
FROM MONKEY.TEST_ADD_IDCOL
WHERE ID IS NULL; V_COUNT NUMBER := 0;
BEGIN
FOR R IN ROWIDS
LOOP
UPDATE MONKEY.TEST_ADD_IDCOL
SET ID = MONKEY.TEST_ADD_IDCOL_ID.NEXTVAL
WHERE ROWID = R.RID; V_COUNT := V_COUNT + 1; IF V_COUNT = 1000
THEN
COMMIT;
V_COUNT := 0;
END IF;
END LOOP; COMMIT;
END;

通过ROWID确定到每一行,防止重复插入,同时,每一千行提交一笔,对大表比较友好,防止过大的UNDO产生以及失败后的长时间回滚

如果是小表(小于1G),可以使用如下方法

/* Formatted on 2020/5/11 下午 02:09:42 (QP5 v5.163.1008.3004) */
UPDATE MONKEY.TEST_ADD_IDCOL
SET ID = MONKEY.TEST_ADD_IDCOL_ID.NEXTVAL
WHERE ID IS NULL;

不管使用哪种方法,都需要查出来ID是NULL的行,索引是不存放NULL值的,因此在查找NULL值的过程中,无法使用索引,为解决这个问题,可以使用联合索引

 CREATE INDEX MONKEY.IX_TEST_ADD_IDCOL ON MONKEY.TEST_ADD_IDCOL (ID,0) ONLINE;

ONLINE可以不妨碍现有业务,和0联合就可以在查找NULL过程中用索引

6.修改ID为主键

ALTER TABLE  MONKEY.TEST_ADD_IDCOL ADD(CONSTRAINT PK_TEST_ADD_IDCOL PRIMARY KEY(ID));

oracle新增ID主键列,如何补全旧数据的ID值的更多相关文章

  1. iot表输出按主键列排序,heap表不是

    <pre name="code" class="html"> create table t1 (id char(10) primary key,a1 ...

  2. Oracle数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)

    查询表信息(表名/表描述) Select table_Name As Name,Comments As Value From User_Tab_Comments Where table_Type='T ...

  3. MyBatis面对Oracle数据库如何实现主键列自增长

    因为Oracle数据库而言 不能够像SqlServer和MySql一样主键自增 而且MyBatis也没有提供直接的主键自增方法 所以我们自己使用查询语句来实现自增 实现代码: <insert i ...

  4. 根据oracle的主键列生成SQLserver的主键

    根据oracle的主键列生成MsSQLServer的主键列 select 'alter table  ' || cu.table_name ||'  add constraint  '||' PK_' ...

  5. oracle 新增并返回新增的主键

    oracle 的insert into 语句需要返回新增的主键的时候,可以使用一下insert 语法: insert into ims.t_bank_inquire_results (t_date,l ...

  6. MySql数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)

    查询表信息(表名/表描述): SELECT table_name name,TABLE_COMMENT value FROM INFORMATION_SCHEMA.TABLES WHERE table ...

  7. SqlServer数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)

    查询表信息(表名/表描述) Value ) AS value FROM sysobjects a Where a.xtype = 'U' AND a.name <> 'sysdiagram ...

  8. PostgreSql数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)

    查询表信息(表名/表描述) select a.relname as name , b.description as value from pg_class a ) b on a.oid = b.obj ...

  9. Transactional Replication2:在Subscriber中,主键列是只读的

    在使用Transactional Replication时,Subscriber 被认为是“Read-Only”的 , All data at the Subscriber is “read-only ...

随机推荐

  1. Kubernetes【K8S】(一):Kubernetes组件

    什么是Kubernetes ​ Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化.Kubernetes拥有一个庞大且快速增长的生态系统. ...

  2. vue第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期)

    第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期) #课程目标 掌握安装 vue-cli 命令行工具的方法,掌握使用命令行在本地搭建开发环境,使用命令行 ...

  3. [水题日常]UVA1625 Color Length

    来整理一下思路- 一句话题意:给两个大写字母的序列,每次取出其中一个数列的第一个元素放到新序列里面,对每个字母\(c\)记它的跨度\(L(c)\)为这个字母最后出现的位置-第一次出现的位置,求新序列所 ...

  4. 浅谈强连通分量(Tarjan)

    强连通分量\(\rm (Tarjan)\)             --作者:BiuBiu_Miku \(1.\)一些术语   · 无向图:指的是一张图里面所有的边都是双向的,好比两个人打电话 \(U ...

  5. writeup | 你知道php的备份文件吗

    题目地址:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5064 转载请注明出处作者 ...

  6. 多年总结IDEA 使用技巧 (建议收藏!)

    很长一段时间没有更新了,前段时间转测试了,浪费了一些时间,终于可以写文章了,今天来写一下之前自己开发的一些习惯,因为自己本身自己是一个极简主义所以 开发喜欢这样:. 全屏显示 我们可以使用[Prese ...

  7. 程序运行慢?你怕是写的假 Python

    Python程序运行太慢的一个可能的原因是没有尽可能的调用内置方法,下面通过5个例子来演示如何用内置方法提升Python程序的性能. 1. 数组求平方和 输入一个列表,要求计算出该列表中数字的的平方和 ...

  8. WPF应用程序管理

    WPF应用程序管理(更多资源:http://cleopard.download.csdn.net/) 一.WPF应用程序由System.Windows.Application类进行管理 二.创建WPF ...

  9. JAVA十大经典排序算法最强总结(含JAVA代码实现)

    0.排序算法说明 0.1 排序的定义 对一序列对象根据某个关键字进行排序. 0.2 术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排 ...

  10. 如何理解java枚举,看例子

    先来看一下不用枚举怎么表示常量: //常量类 class Num { public static String ONE = "ONE"; public static String ...