动态生成修改默认值SQL脚本

今天遇到一个问题, 就是在割接生产的脚本你类似如下
create table ** as select * from tableName@DB_LINK

但是割接过来的数据丢失了默认值,而其它外键索引主键我都有单独的脚本,唯一默认值未准备脚本,所以写了个下面的动作脚本来生成可以修改默认值的动态脚本:

DECLARE
--定义一个字符串数组类型
TYPE tableNamesArray IS TABLE OF VARCHAR2(200);
--所有表名
tableNames tableNamesArray := tableNamesArray('TEST_TAB,TEST_US',

);

result varchar2(4000);
tableName varchar2(200);
ownerName varchar2(20);
icnt integer;
BEGIN

--循环插入数据
FOR i IN 1 .. tableNames.COUNT LOOP
icnt := instr(tableNames(i), ',');
tableName := upper(subStr(tableNames(i), 1, icnt - 1));
ownerName := upper(subStr(tableNames(i),
icnt + 1,
length(tableNames(i))));

for rec in (select a.COLUMN_NAME cn, a.DATA_DEFAULT cd
from sys.all_tab_columns a
where a.TABLE_NAME = tableName
and a.OWNER = ownerName
and a.DATA_DEFAULT is not null) loop
result := 'alter table OD.' || tableName || ' modify(' || rec.cn ||
' default ' || rec.cd || ');';
dbms_output.put_line(result);
result := '';
end loop;
end loop;

EXCEPTION
WHEN others THEN
DBMS_OUTPUT.put_line('执行生成INSERT语句出现异常!' || substr(sqlerrm, 1, 2000));
END;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值