ORA-01779的处理方法

Oracle中试图对一个子查询进行更新时可能会出现ORA-01779错误。该错误的内容为:
ORA-01779: cannot modify a column which maps to a non-key-preserved table

例如,使用以下的更新查询就会出现该错误。

CREATE TABLE test1 ( id integer primary key, num integer );
INSERT INTO test1 VALUES (1,0);
INSERT INTO test1 VALUES (2,0);
INSERT INTO test1 VALUES (3,0);
INSERT INTO test1 VALUES (4,0);
CREATE TABLE test2 ( id integer, num integer, upd integer );
INSERT INTO test2 VALUES (1,10, 0);
INSERT INTO test2 VALUES (2,20, 1);
UPDATE ( SELECT t1.id id1, t1.num num1, t2.id id2, t2.num num2
FROM test1 t1, test2 t2 WHERE t1.id=t2.id AND t2.upd=1 )
SET num1=num2; ORA-01779: cannot modify a column which maps to a non-key-preserved table

这个错误的意思是,子查询的结果中,更新数据源(test2)的内容不唯一,导致被更新对象(test1)中的一行可能对应数据源(test2)中的多行。 本例中,test2表的id不唯一,因此test2表中可能存在id相同但是num不相同的数据,这种数据是无法用来更新 test1 的。

解决方法就是保证数据源的唯一性,例如本例中可以为test2.id创建一个唯一索引:

CREATE UNIQUE INDEX test2_idx_001 ON test2 (id);

之后上面的更新就可以执行了。

另外也可以强制 Oracle 执行,方法是加上 BYPASS_UJVC 注释。

UPDATE
( SELECT /*+ BYPASS_UJVC */ t1.id id1, t1.num num1, t2.id id2, t2.num num2
FROM test1 t1, test2 t2
WHERE t1.id=t2.id AND t2.upd=1 )
SET num1=num2;

BYPASS_UJVC的作用是跳过Oracle的键检查。 这样虽然能够执行了,但是如果test2中存在不唯一的数据,test1就会被更新多次而导致意想不到的结果。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7916042/viewspace-919092/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7916042/viewspace-919092/

无刷直流电机计算转速 一个霍尔传感器周期(Tms)有两种模式输出方式(3FG/1FG),一个电周期是6个60°电角度,电机磁极数是P,磁极对数PP = P / 2 3FG模式: 1个电周期= 6 * T 1FG模式: 1个电周期= 2 * T 1秒钟电周期个数: 1分钟电周期个数: 1分钟转速: 举例: 假设电机磁极数是8,3FG模式下,霍尔周期700us,计算该条件下转速 ... 阅读详情

相关推荐

基于强化学习的多无人机路径规划

我们使用了Dueling Double Deep Q-Network(DDDQN)算法来训练智能体,这个算法在深度Q学习算法的基础上进行了升级,具有更快的收敛速度和更好的性能。本文提出了一种基于强化学习的算法,实现了多无人机路径规划,并提供相应的MATLAB代码。通过基于强化学习的多无人机路径规划算法,我们能够高效地解决复杂环境下的任务需求,并在实际应用中取得了良好的效果。首先,我们定义了状态空间和动作空间。实验结果表明,我们的方法能够有效地解决多无人机路径规划问题,提高了任务完成的效率和准确率。

DjjPython的博客 795

【已解决】cannot modify a column which maps to a non key-preserved table

cannot modify a column which maps to a non key-preserved table

xiaomudouer的博客 2378

GPFS扩展技术原理(十一)-FMDN广播与EID加解密

GFPS扩展技术原理(十一)FMDN广播及EID加解密

十多年蓝牙协议软件开发,擅长蓝牙协议分析 911

ORA-01779: cannot modify a column which maps to a non key-preserved table

http://ora-01779.ora-code.com/ ORA-01779: cannot modify a column which maps to a non key-preserved table Cause: An attempt was made to insert or update columns of a join

走马观花 3325

Oracle 更新数据sql报错 cannot modify a column which maps to a non key-preserved table

原因:因不确定唯一主键 解决办法 : 1.创建索引 CREATE UNIQUE INDEX LSY_ZBX_ALL_idx ON LSY_ZBX_ALL (id); 注:若没有唯一主键值,可创建id列(执行一下sql) UPDATE LSY_ZBX_ALL SET ID = ROWNUM(填充索引列) 3.sql (由于 A重复,需B以逗号拼接) SELECT DISTINCT ...

lsy_know的博客 1595

ORA-01779: 无法修改与非键值保存表对应的列

问题描述 错误报告 - SQL 错误: ORA-01779: 无法修改与非键值保存表对应的列 01779. 00000 - "cannot modify a column which maps to a non key-preserved table" *Cause: An attempt was made to insert or update columns of a join view which map to a non-key-preserved table. ...

terence的博客 5万+

ORA-01779错误的处理方法

Oracle中试图对一个子查询进行更新时可能会出现ORA-01779错误。该错误的内容为:     ORA-01779: cannot modify a column which maps to a non-key-preserved table例如,使用以下的更新查询就会出现该错误。 CREATE TABLE test1 ( id integer primary key, num i

wsp971的专栏 758

oracle报错01779,ORA-01779处理方法(更新数据处理)

Oracle中试图对一个子查询进行更新时可能会出现ORA-01779错误。该错误的内容为: ORA-01779: cannot modify a column which mapsOracle中试图对一个子查询进行更新时可能会出现ORA-01779错误。该错误的内容为:ORA-01779: cannot modify a column which maps to a non-key-preserv...

weixin_33995900的博客 4972

oracle报错01779,Oracle数据ORA-01779错误的处理方法

Oracle中试图对一个子查询进行更新时可能会出现ORA-01779错误。该错误的内容为: ORA-01779: cannot modify a column which maps to a non-key-preserved table例如,使用以下的更新查询就会出现该错误。CREATE TABLE test1 (id integer primary key,num integer);INSER...

weixin_36393352的博客 455

ORA-01779处理方法(更新数据处理)

[quote]oracle11g不支持使用 BYPASS_UJVC [/quote]Oracle中试图对一个子查询进行更新时可能会出现ORA-01779错误。该错误的内容为: ORA-01779: cannot modify a column which maps to a non-key-preserved table例如,使用以下的更新查询就会出现该错误。 [code="java"]C...

s123917的博客 970

ORA-01779错误的处理方法(转贴:http://tech.inspiremedia.org/archives/82.html,原作者:charlee)

 Oracle中试图对一个子查询进行更新时可能会出现ORA-01779错误。该错误的内容为:ORA-01779: cannot modify a column which maps to a non-key-preserved table例如,使用以下的更新查询就会出现该错误。CREATE TABLE test1 ( id integer primary key, num

tianyacao007的专栏 1703

oracle报错01779,ora-01779错误的解决

ora-01779错误的解决在对update进行优化时,考虑到update from 效率比较高,但由于oracle会对键值进行检查,导致报ora-01779错误,通过采用BYPASS_UJVC跳过Oracle的键的判定,达到同样的效果。例子如下:update (select /*+ BYPASS_UJVC */t1.drawref,t.oprtype,t.bl_validation,'F' ...

weixin_32652003的博客 1089

Oracle-两表关联更新和插入

需求: 表a(com_name,stock_code,com_sacle,mark,market_location,company_name) 表b(com_name,stock_code,com_sacle) 如果a.stock_code=b.stock_code 把b.com_name,b.com_scale 插入a.com_name,a.com_scale 如果表b.stock_co...

weixin_34318272的博客 579

oracle view 执行出错,ORA-01779ORACLE中VIEW更新错误

Oracle中试图对一个子查询(VIEW)进行更新时可能会出现ORA-01779错误。该错误的内容为:ORA-01779: cannot modify a column which maps toa non-key-preserved table例如,使用以下的更新查询就会出现该错误。CREATE TABLE test1 ( id integer primary key, num integer)...

weixin_30726605的博客 385

oracle报错01779,关于ORA-01779问题的分析和解决

最近同事问我一个问题,是关于一个update语句的问题,需求有点特别,结果在使用update语句尝试了各种方法后,仍然是不依不饶的报出ORA-01779的错误。今天专门花时间分析了一下这个问题,还是有些收获。为了说明问题,我们先来看两组数据有两个表data,link,现在希望更新data表中的amount列值,和link表的credit_class做关联。如果data.credit_class=l...

weixin_28839549的博客 1210

Oracle视图更新条件——Key-Preserved Tables(ORA-01779: 无法修改与非键值保存表对应的列)

上周在做视图更新的时候,报了一个错:ORA-01779: 无法修改与非键值保存表对应的列。 官方文档是这么解释的:ORA-01779cannot modify a column which maps to a non key-preserved table 解决这个问题的关键在于搞清楚什么是Key-Preserved Tables? 上面是官方文档的解释。大致意思:搞清楚key-pr...

零怀念的博客 4474

微软c++运行库修复工具(2024)

微软c++运行库修复工具可修复各类损坏的VC运行库组件修复常见VC运行库缺失支持更新最新版Visual C++

java毕设-基于springboot的宠物医院管理系统.zip

项目资源包含:可运行源码+sql文件适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。项目具有较高的学习借鉴价值,也可拿来修改、二次开发。有任何使用上的问题,欢迎随时与博主沟通,博主看到后会第一时间及时解答。开发语言:Java框架:springboot技术:VueJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统是一个很好的项目,结合了后端服务(SpringBoot)和前端用户界面(Vue.js)技术,实现了前后端分离。后台路径地址:localhost:8080/项目名称/admin/dist/index.html前台路径地址:localhost:8080/项目名称/front/index.html

上一篇: in和exists的一些区别
下一篇: 10.2.0.1的客户端的bug,不能连上server
cl2689163935
博客等级 码龄12年 1粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值