如何解决从PL / SQL过程块中删除
我的代码有点像这样:
CREATE OR REPLACE Procedure test
BEGIN
DELETE FROM person;
End;
/
错误说:ora-02292完整性约束违反-找到子记录
当我尝试使约束无效时,它说我无法“改变”桌子。
我必须做什么/更改?
解决方法
您不应该只是 disable 约束,因为您将留下子记录 orphans (没有父记录)。那你会怎么做?
正确的处理方式是
- 先删除孩子
- 最后删除父母
如果使用on delete cascade
选项创建了外键约束,则数据库将为您处理。
P.S。从“您不能更改表”开始,这不是Oracle错误消息。他们有自己的代码,例如ORA-06550
。很难猜测您实际上做了什么,并且-如果我不得不猜测-我会说您尝试在该过程中做到这一点:
SQL> create table temp (id number constraint pkt primary key);
Table created.
SQL> begin
2 alter table temp disable constraint pkt;
3 end;
4 /
alter table temp disable constraint pkt;
*
ERROR at line 2:
ORA-06550: line 2,column 3:
PLS-00103: Encountered the symbol "ALTER" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
您将需要动态SQL来做到这一点:
SQL> begin
2 execute immediate 'alter table temp disable constraint pkt';
3 end;
4 /
PL/SQL procedure successfully completed.
SQL>
但是,这又不是您应该处理这种情况的方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。