问题描述
嗨,汤姆,
我们正在编写一个脚本来清理一些表格。在脚本中,我正在做以下事情
1.使用所需数据创建临时表
2.禁用原始表的fk约束
3.截断表
4.从临时表中插入数据
5.启用具有验证和异常的约束到异常表中
在脚本中我已经提到每当SQLERROR退出SQL.SQLCODE作为第一个语句。
我现在面临一个问题,即使我使用将约束异常启用到异常表选项,SQL脚本也会出现SQL错误 “无法启用约束 <约束名称>-找不到父键”。
我的问题是,无论何时SQLERROR,这种行为都是正确的,尽管我将异常放入异常表中,但错误将使语句强制退出。
感谢您提前提供的时间。
拉格德斯
拉文德·巴哈杜尔
我们正在编写一个脚本来清理一些表格。在脚本中,我正在做以下事情
1.使用所需数据创建临时表
2.禁用原始表的fk约束
3.截断表
4.从临时表中插入数据
5.启用具有验证和异常的约束到异常表中
在脚本中我已经提到每当SQLERROR退出SQL.SQLCODE作为第一个语句。
我现在面临一个问题,即使我使用将约束异常启用到异常表选项,SQL脚本也会出现SQL错误 “无法启用约束 <约束名称>-找不到父键”。
我的问题是,无论何时SQLERROR,这种行为都是正确的,尽管我将异常放入异常表中,但错误将使语句强制退出。
感谢您提前提供的时间。
拉格德斯
拉文德·巴哈杜尔
专家解答
约束验证失败。将例外添加到子句不会使语句 “起作用”。它只是捕获所有违反约束的行。
你仍然会得到一个例外。所以每当SQLERROR退出触发,关闭连接
但你仍然应该有异常表中的冒犯性rowid:
在解决垃圾数据之前,验证外键时仍然会出现异常。你的脚本将终止。
你仍然会得到一个例外。所以每当SQLERROR退出触发,关闭连接
但你仍然应该有异常表中的冒犯性rowid:
create table exceptions ( row_id rowid, owner varchar2(30), table_name varchar2(30), constraint varchar2(30) ); whenever sqlerror exit create table par ( c1 primary key ) as select level c1 from dual connect by level <= 10; create table chd ( c1 constraint fk references par ( c1 ) disable ); insert into chd values ( -1 ); insert into chd values ( 0 ); insert into chd values ( 1 ); commit; alter table chd modify constraint fk enable exceptions into exceptions; ERROR at line 2: ORA-02298: cannot validate (CHRIS.FK) - parent keys not found Disconnected from Oracle Database 18c EE High Perf Release 18.0.0.0.0 - Production Version 18.6.0.0.0 C:\Users\csaxon>sqlplus chris@db18c SQL*Plus: Release 18.0.0.0.0 - Production on Wed Jun 12 09:09:12 2019 Version 18.3.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Last Successful login time: Wed Jun 12 2019 09:08:29 +01:00 Connected to: Oracle Database 18c EE High Perf Release 18.0.0.0.0 - Production Version 18.6.0.0.0 select rowid from exceptions; ROWID ------------------ AAASQ6AAMAAAACeAAA AAASQ6AAMAAAACeAAB select * from exceptions; ROW_ID OWNER TABLE_NAME CONSTRAINT AAASQtAAMAAAACTAAA CHRIS CHD FK AAASQtAAMAAAACTAAB CHRIS CHD FK select status from user_constraints where constraint_name = 'FK'; STATUS -------- DISABLED复制
在解决垃圾数据之前,验证外键时仍然会出现异常。你的脚本将终止。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
756次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
647次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
569次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
525次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
516次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
497次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
482次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
440次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
372次阅读
2025-05-05 19:28:36