暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 安全地添加、修改字段

原创 张正沛 2021-08-05
729

加字段

SQL> alter table tbname add cloum3 varchar2(10) default ‘ICBC’; --默认所有行的新加字段赋值为ICBC
风险:对于大表,add cloum 和 指定默认值不能同时进行。如果加字段的同时指定 DEFAULT 默认值,那么所有旧数据行的该字段都会update为default value,在表的数据量较大时,有导致生产库相关表长时间被锁表的风险。

修改字段

SQL> alter table RC_LISTING modify CUST_NAME VARCHAR2(200);
SQL> alter table tb1 rename column clum1 to clum2;
**修改建议:
1、如果已存在的数据行不需要更新为default value,建议分两条写add+modify。
SQL> alter table tbname add cloum3 varchar2(10);
SQL> alter table tbname modify cloum3 default ‘ICBC’; —旧的行对应的新字段就默认为 null,新加值才会设置为default value
2、如果已存在的数据行需要更新为default value,建议单独执行update语句,根据表的数据量手动分批次、或存储过程分批次循环执行。
SQL> update tbname set cloum3=‘ICBC’ where col_date < ‘2018-01-01 00:00’ and cloum3 is null;
SQL> commit;
SQL> update tbname set cloum3=‘ICBC’ where col_date < ‘2018-06-01 00:00’ and cloum3 is null;
SQL> commit;

获取ddl信息:

set linesize 200 pagesize 200
set serveroutput on
set feedback off
set long 99999
—去除storage等多余参数(可选)
execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,‘STORAGE’,false);
select dbms_metadata.get_ddl(‘TABLE’,‘TBNAME’,‘USER’) from dual; ##(‘TABLE’,‘表名’,‘用户名’)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论