ORA-02298: 无法验证 (约束)提示未找到父项关键字的解决办法

--在用PL/SQL导入表数据的时候报错 ORA-02298: 无法验证 (PNET.POST_CLOB_FK) - 未找到父项关键字

--发现是启用外键约束时报的错
alter table DM_VOLREV enable constraint VR_VOLID_FK;

/*原因分析:

你要插入的表A里,有外键连接到另一个表B的主键,你在表A的外键列插入的值,在表B的主键列找不到就不能插入。
主要看两表中的数据是否一致,从表中要关联外键的字段中的数据必须包含在主表相关字段的数据内。

处理的方法有:

1> 先不验证已有数据的CONSTRANT,加上参数NOVALIDATE.*/
ALTER TABLE PN_POST ADD CONSTRAINT POST_CLOB_FK FOREIGN KEY (POST_BODY_ID) REFERENCES PN_POST_BODY_CLOB (OBJECT_ID) NOVALIDATE;
--2>首先查看两个表对应起来的数据有多少
select count(*) from dm_volrev t,DM_VOLID k where t.vr_volid = k.vi_volid;
--再分别查看单独的数据,发现外键表多了一行
select count(*) from dm_volrev t;
select count(*) from DM_VOLID k;
-找到多的行并删除
select t.vr_volid from dm_volrev t where t.vr_volid not in (select k.vi_volid from DM_VOLID k);
delete from dm_volrev t where t.vr_volid = 479908;
--直接重新执行启用外键的语句,或者删除之前的外键创建新的外键
alter table DM_VOLREV drop constraint VR_VOLID_FK;
ALTER TABLE DM_VOLREV ADD CONSTRAINT VR_VOLID_FK foreign KEY (VR_VOLID) references DM_VOLID(VI_VOLID) VALIDATE;

/*启用约束:
enable( validate) :启用约束,创建索引,对已有及新加入的数据执行约束.
enable novalidate :启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据.

禁用约束:
disable( novalidate):关闭约束,删除索引,可以对约束列的数据进行修改等操作.
disable validate :关闭约束,删除索引,不能对表进行 插入/更新/删除等操作.*/

以上所述是小编给大家介绍的ORA-02298: 无法验证 (约束)提示未找到父项关键字的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 查找oracle数据库表中是否存在系统关键字的方法

    今天在工程中遇到"ORA-01747: user.table.column, table.column 或列说明无效"的报错情况,查了一下是由于数据库列名起的不好引起的,名字用到了数据库的关键字. select * from v$reserved_words where keyword in( select COLUMN_NAME from all_tab_columns where table_name = '表名大写' and owner='用户名大写' ); ID可以忽略

  • Oracle AS关键字 提示错误

    今天运行程序时,在Oracle中输入SQL语句:select * from USERS as u ,程序报错 输入select * from USERS  u 可以正常的查询出结果. 但是在SQL Server 2005 中输入''select * from USERS as u''相同的语句就没有错,查了原因如下:SQL2规范允许关键字AS出现在表的名字和表的别名之间,虽然这使得FROM子句更容易被读懂,但是在特定的SQL产品中它可能还不被支持. 我想Oracle还不支持这样的语法.

  • oracle关键字作为字段名使用方法

    有时我们在定义字段名及别名时所用名与oracle关键字同名,这时该如何处理呢? 其实很简单,只要在此关键字加上"",如"group" 看下面的例子: 复制代码 代码如下: SQL> DROP TABLE k; Table dropped -- 建立表K,字段名为UID(oracle关键字) SQL> CREATE TABLE k(UID INT); CREATE TABLE k(UID INT) ORA-00904: : invalid IDENTIFI

  • ORA-02298: 无法验证 (约束)提示未找到父项关键字的解决办法

    --在用PL/SQL导入表数据的时候报错 ORA-02298: 无法验证 (PNET.POST_CLOB_FK) - 未找到父项关键字 --发现是启用外键约束时报的错 alter table DM_VOLREV enable constraint VR_VOLID_FK; /*原因分析: 你要插入的表A里,有外键连接到另一个表B的主键,你在表A的外键列插入的值,在表B的主键列找不到就不能插入. 主要看两表中的数据是否一致,从表中要关联外键的字段中的数据必须包含在主表相关字段的数据内. 处理的方法

  • nginx提示:500 Internal Server Error错误解决办法

     nginx提示:500 Internal Server Error错误解决办法 前言: 今天发现网站无法上传资源和发布文章,通过浏览器查看服务器的返回信息 500 Internal Server Error 刚开始我以为是应用服务器或者是程序异常,检查了下各自的日志,连请求记录都无,程序代码里也没抛出过该类型的异常,所以可以从服务器或者Nginx中找原因了. 1.是否磁盘空间不足? 使用 df -k 查看硬盘空间是否满了.清理硬盘空间就可以解决500错误.nginx如果开启了access lo

  • Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)

    selenium操作chrome浏览器需要有ChromeDriver驱动来协助.webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close. /** * Close the current window, quitting the browser if it's the last window currently open. */ void close(); /** * Quits this driver, closing every associated window. */

  • IIS 6.0提示“服务器应用程序不可用”的解决办法

    今天在公司测试服务器上放了2个测试网站,iis居然报服务器应用程序不可用,把iis重启了,应用程序池也回收了,网站文件夹权限也改了,居然还是不行,好吧,下面我们来说下怎么解决的. 出错信息: 服务器应用程序不可用 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用.请点击 Web 浏览器中的"刷新"按钮重试您的请求. 管理员注意事项: 详述此特定请求失败原因的错误信息可在 Web 服务器的系统事件日志中找到.请检查此日志项以查明导致该错误发生的原因. 解决办法: 需要在II

  • Oracle 11g安装错误提示未找到wfmlrsvcapp.ear的解决方法

    如图:Oracle 11g安装到42%挂了. 上度娘查了一下,原来是Oracle安装包的问题,1,2两个包都要下载下来,而且需要解压到相同(同一个)目录下. 但是博主已经骑虎难下了,而且还是个很懒的人所以,不想再重新安装,再来一遍了,幸好找到了一个效率比较高还可以偷懒的法子: 如图: 直接将:E:\All Tools\开发软件\Oracle 11g\win64_11gR2_database_2of2\database\stage\Components中的 4个文件 复制(剪切应该也可以,没试过.

  • shell脚本中执行时提示“没有那个文件或目录”的解决办法

    出现bad interpreter:No such file or directory的原因,是文件格式的问题.这个文件是在Windows下编写的.换行的方式与Unix不一样,但是在vim下面如果不Set一下又完全看不出来. 问题分析:1.将windows 下编写好的SHELL文件,传到linux下执行,提示出错.2.出错信息:bad interpreter: 没有那个文件或目录. 问题原因:因为操作系统是windows,在windows下编辑的脚本,所以有可能有不可见字符.脚本文件是DOS格式

  • IIS未找到提供程序该程序可能未正确安装错误解决办法

    Win7系统 IIS 调试ASP(aspcmsgbk25) 错误号:3706 提示 "未找到提供程序 该程序可能未正确安装"解决办法 . 有两种报错形式 一.错误号:3706  错误描述:未找到提供程序.该程序可能未正确安装. 二."ADODB.Connection 错误 '800a0e7a' 未找到提供程序.该程序可能未正确安装. " 错误的原因在于在64位系统中,IIS7应用程序池默认没有启用32位程序,也就是说如果使用的是64位操作系统,而没有64位的Jet

  • VS2012 未找到与约束ContractName匹配的导出 原创

    VisualStudio2012创建项目时,弹出错误窗口:VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出 这里主要是是Windows更新的补丁问题,解决此问题有两种方法 方法一:删除系统更新补丁 进入控制面板--点击系统与安全--windows update--点击查看已安装的更新,删除更新.卸载这四个补丁之后VS2012就可以完美运行啦.如果还不行的话,建议重启一

  • VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出 原创

    VisualStudio2012创建项目时,弹出错误窗口:VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出 这里主要是是Windows更新的补丁问题,官方已经出了解决这个方案的补丁,进去下载即可 下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=36020(microsoft官网免费补丁下载)

  • 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器

    今早开机发现,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: "在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)" 在网上看到他人说使用将服务器(local

随机推荐