删除未命名(系统命名)主键约束

由于表结构的变动需要删除,现有的主键约束,增加新的主键约束.但主键约束没有指定约束名生成,无法直接删除该主键约束.

需要先查询出主键约束名,然后才能够进行删除

原本是想通过该sql 语句在查询的时候直接进行删除,但是sql一直提示报错,原因不明白.

alter table 表名 drop constraint     (select  a.constraint_name    from user_cons_columns A,user_constraints B
where A.constraint_name=B.constraint_name and A.table_name='表名' and B.constraint_type='P')

后来想通过块的方式,将变量对应的值给相应的sql,但是也失败了,可能结果与上述的sql写法内核是一致的,最终通过拼接sql语句的办法总算是解决了

以下是成功代码

--删除原有的主键约束
--添加id字段
--更新主键约束为ID
DECLARE sql_drop_pri VARCHAR2(64);
 constraintName VARCHAR2(64) DEFAULT '0';
BEGIN
  select  'alter table 表名 drop constraint   '   ||      (select  a.constraint_name    from user_cons_columns A,user_constraints B
where A.constraint_name=B.constraint_name and A.table_name='表名' and B.constraint_type='P') into sql_drop_pri  from dual;
select  a.constraint_name  INTO constraintName   from user_cons_columns A,user_constraints B
where A.constraint_name=B.constraint_name and A.table_name='表名' and B.constraint_type='P';
if constraintName !='0' then
                execute immediate sql_drop_pri;        
end if;

--不抛出异常的话就会报no_data_found即使对相应的变量进行nvl()函数处理也没用
exception when no_data_found then
constraintName :='0';
END;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值