Oracle使用游标给所有数据表添加主键约束

应用场景: 某软件系统中的数据库因为版本不断升级,需要定期导入最新的数据表结构到测试数据库中的不同表空间进行测试.导入的时候容易出现主键约束丢失问题.因此设计下面的脚本来实现批量新增主键约束功能.

具体操作步骤如下:

一、使用PL/SQL Developer工具连接上服务器上的某个数据库,按F8执行下面的脚本获取到最终要添加主键的SQL语句。

--Oracle使用游标给所有数据表添加主键约束
declare 
mytablename NVARCHAR2(200):=''; --定义要查询的数据表名称变量 
commentsql VARCHAR2(2000):=''; --定义要输出的执行语句字符串变量  
mytablekey NVARCHAR2(20):='ID'; --定义要查询的数据表主键字段名称变量 
cursor mycursor is select table_name from user_tables order by table_name;--定义游标      
myrecord mycursor%rowtype;  --定义游标记录类型   
Counter int :=0;   
begin   
open mycursor;  --打开游标   
if mycursor%isopen  then  --判断打开成功   
loop --循环获取记录集     
  fetch mycursor into myrecord;
  
  if mycursor%found then  --游标的found属性判断是否有记录  
  begin  
    mytablename:=myrecord.table_name;
    commentsql:='alter table '||mytablename||' add constraint PK_'||mytablename||' primary key ('||mytablekey||');';
    dbms_output.put_line(commentsql);      
    --execute immediate commentsql;--立即执行语句(因为很多表主键字段不是ID容易报错所以注释掉)
    --commit;    
  end;   
  else
  exit; --获取游标中的记录     
  
  end if;
end loop;   
else     
dbms_output.put_line('游标没有打开');   
end if; 
close mycursor;  --关闭游标   
end;
 

二、切换到PL/SQL Developer工具的输出选项卡,复制最终执行语句到新的SQL窗口。

三、执行添加主键约束脚本 。

四、补充说明:本例测试用的数据库中所有数据表字段中都有一个名称为ID的字段,执行多次后会提示一个数据表只能具有一个主键错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疾风铸境

提供工作中碰到的和研究过的技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值