oracle新增ID主键列,如何补全旧数据的ID值
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值的更多相关文章
- iot表输出按主键列排序,heap表不是
<pre name="code" class="html"> create table t1 (id char(10) primary key,a1 ...
- Oracle数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)
查询表信息(表名/表描述) Select table_Name As Name,Comments As Value From User_Tab_Comments Where table_Type='T ...
- MyBatis面对Oracle数据库如何实现主键列自增长
因为Oracle数据库而言 不能够像SqlServer和MySql一样主键自增 而且MyBatis也没有提供直接的主键自增方法 所以我们自己使用查询语句来实现自增 实现代码: <insert i ...
- 根据oracle的主键列生成SQLserver的主键
根据oracle的主键列生成MsSQLServer的主键列 select 'alter table ' || cu.table_name ||' add constraint '||' PK_' ...
- oracle 新增并返回新增的主键
oracle 的insert into 语句需要返回新增的主键的时候,可以使用一下insert 语法: insert into ims.t_bank_inquire_results (t_date,l ...
- MySql数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)
查询表信息(表名/表描述): SELECT table_name name,TABLE_COMMENT value FROM INFORMATION_SCHEMA.TABLES WHERE table ...
- SqlServer数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)
查询表信息(表名/表描述) Value ) AS value FROM sysobjects a Where a.xtype = 'U' AND a.name <> 'sysdiagram ...
- PostgreSql数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)
查询表信息(表名/表描述) select a.relname as name , b.description as value from pg_class a ) b on a.oid = b.obj ...
- Transactional Replication2:在Subscriber中,主键列是只读的
在使用Transactional Replication时,Subscriber 被认为是“Read-Only”的 , All data at the Subscriber is “read-only ...
随机推荐
- monkey在指定的activity里面运行
下载包地址:链接: https://pan.baidu.com/s/1Wk2eOj3saZx71Mx6pT2L4Q 提取码: gupa 运行方式:步骤1: 将工具下载下来放到本地目录下,解压步骤2:配 ...
- 网络 IO 模型简单介绍
一.同步阻塞 IO(BIO) 当用户线程调用了 read 系统调用,内核(kernel)就开始了 IO 的第一个阶段:准备数据.很多时候,数据在一开始还没有到达(比如,还没有收到一个完整的Socket ...
- flink1.11报错No ExecutorFactory found to execute the application
使用flink1.11版本时,报错:No ExecutorFactory found to execute the application 查找maven下载的依赖,发现没有下载flink-clien ...
- 从零实现Linux一键自动化部署.netCore+Vue+Nginx项目到Docker中
环境搭建 1.安装Linux,这里我用的阿里云服务器,CentOS7版本 2.进入Linux,安装Docker,执行以下命令 sudo yum update #更新一下yum包 sudo yum in ...
- C#读取DLL文件获取所有类
说明 调用Web.dll 文件,获取其中的所有的WebService 参考 https://blog.csdn.net/huoliya12/article/details/78873123 流程 使用 ...
- Spring Data Cache
Spring Data Cache注解使用 方法是一个对象,使用对象中的属性,如ID,作为cache key RedisConnection超时设置 参考 SpringBoot使用Redis缓存
- java中产品分类返回给前台页面 后台数据组装
public ResultBean getSpfl(Integer yyb) { ResultBean res = new ResultBean(); try { JSONArray data = n ...
- 提高服务端性能的几个socket选项
提高服务端性能的几个socket选项 在之前的一篇文章中,作者在配置了SO_REUSEPORT选项之后,使得应用的性能提高了数十倍.现在介绍socket选项中如下几个可以提升服务端性能的选项: SO_ ...
- 转载--对batch normalization的理解
转载的大神的: https://www.cnblogs.com/guoyaohua/p/8724433.html 上边这个应该是抄的下边这个原文,但是上边的有重点标记 https://blog.csd ...
- ThreadLocal解决什么问题
原创文章,转载请务必将下面这段话置于文章开头处(保留超链接).本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ ThreadLocal解决 ...