错误报告 -
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.
*Action: Modify the underlying base tables directly.
这个错误产生的原因是子查询的结果中,用来更新demo_t1的demo_t2表id不唯一,导致被更新对象test1中的一行可能要对应test2中的很多行,这样
oracle
就不知道该怎么更新
例如demo_t1中fname A fmoney '20'有可能对应demo_t2中fname A fmoney '100', ifname A fmoney '200' 这2个数据,所以导致无法更新.
删除重复数据 给demo_t2加上一个主键
ALTER TABLE DEMO_T2 ADD PRIMARY KEY(FNAME);
再次尝试,更新成功
问题描述错误报告 -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....
今天遇到一个错误:
ORA
-
01779
:
无法
修改
与非
键值
保存
表
对应
的
列
。
后来发现,当要对一个基于多
表
连接的视图进行插入,更新等操作时,容易出现这个错误。
解决办法:个人认为,这个视图不能操作,可以对它基于的
表
进行操作,这样,该视图里也就有相应数据了。
于是,做了下面这个实验。
SQL
> create table emp2 as select * from emp;
表
已创建。
你要插入的
表
A里,有外键连接到另一个
表
B的主键,你在
表
A的外键
列
插入的值,在
表
B的主键
列
找不到就不能插入。
主要看两
表
中的数据是否一致,从
表
中要关联外键的字段中的数据必须包含在主
表
相关字段的数据内。
处理的方法有:
1> 先不验证已有数据的CONSTRANT,加上参数NOVALIDATE.*/
公司服务器周末要加硬盘,周一来后应用连不上了。报错如下 报错:
ORA
-12170:TNS connect timeout occurred
第一反应是监听没开:
1. 测试了一下, 连接超时没用ping 通
C:\Users\Administrator>tnsping brorcl
TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 – Production on 15-6月 -2015 09:45:43
已使用的参数文件
当更新一个子查询的时候,会出现这个错误。RA-
01779
: cannot modify a column which maps to a non key-preserved table
下面先模拟一下这个错误:
SQL
> select * from gw1;
ID NAME
---------- ----------
ORA
-12154:TNS:
无法
解析指定的连接标识符
ORA
-12154:TNS:无监听程序
错误分析一、PL/
SQL
客户端登录到
数据库
,如果配置错误会有以上错误,如下图。
这个错误主要是pl/
sql
客户端的tnsnames.
ora
配置错误,或者是输入 database选项错误。
错误分析二、未配置环境变量
所以解决问题之前一定要配置环境变量TNS_ADMIN
path添加;E:\PL
SQL
Developer(64)\instantclient_11_2
配置环境变量就是为了让PL/
SQL
Developer打开时加载到tnsnames.
ora
文件的内容
配置pl/
sql
的Datab
在对update进行优化时,考虑到update from 效率比较高,但由于
ora
cle会对
键值
进行检查,导致报
ora
-
01779
错误,通过采用BYPASS_UJVC跳过
Ora
cle的键的判定,达到同样的效果。
例子如下:
update (select /*+ BYPASS_UJVC */
t1.drawref,
ORA
-01261和
ORA
-01262是
Ora
cle
数据库
中的错误代码,通常与控制文件相关。
ORA
-01261
表
示控制文件中的记录已经过时,
无法
使用。这可能是由于控制文件已经被删除或损坏,或者是由于
数据库
实例
无法
访问控制文件。
ORA
-01262
表
示控制文件中的记录已经被
修改
,
无法
使用。这可能是由于控制文件已经被其他进程
修改
,或者是由于
数据库
实例
无法
访问控制文件。
要解决这些错误,可以尝试恢复控制文件,或者使用备份控制文件替换当前的控制文件。还可以检查
数据库
实例的权限和文件系统的可用空间,以确保
数据库
实例可以访问控制文件。