相关文章推荐
UPDATE (SELECT tt1.col1 ,tt2.cola,tt1.id,tt2.id FROM tt1,tt2 WHERE  tt1.ID=tt2.ID)  
SET col1=cola; 
 

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

根据错误提示:”无法修改与非键值保存表对应的列”,初步推断为tt2中没有主键?

那么在tt2上添加主键后再更新试试

ALTER TABLE tt2 ADD CONSTRAINT pk_tt2_id PRIMARY KEY(ID);  
UPDATE (SELECT tt1.col1 ,tt2.cola,tt1.id,tt2.id FROM tt1,tt2 WHERE  tt1.ID=tt2.ID)  
SET col1=cola;  
 

发现可以成功更新数据。

然后将在tt2上加的主键删除,再在tt1上添加主键试试,

ALTER TABLE tt2 DROP CONSTRAINT pk_tt2_id;  
ALTER TABLE tt1 ADD CONSTRAINT pk_tt1_id PRIMARY KEY(ID);  
 

再执行第3 步中的更新语句,发现还是报错:ORA-01779: 无法修改与非键值保存表对应的列

用A表去更新B表的数据,A表的关联条件必须为主键,Oracle这样做的目的是保证表A的满足关联条件的数据是唯一的,

这样在更新B表数据时才有意义(自己都不确定怎么影响别人,是吧,hehe),

当然,如果两表关联的字段都为主键,则无论谁更新谁都没有问题。

结论:用A表数据更新B表数据,则A与B的对应关系为:1:1 或 1:n。

二、如果两站表无任何关系

1.新建临时表

临时表数据来源为b表,给a表更新

数据结构有最少有主键id,和要更新的列

drop table temp_tt2;
create  GLOBAL TEMPORARY table tt2(
id number(10),
col1_b varchar2(10)
) ON COMMIT PRESERVE ROWS; 

2.不要忘了设置主键

alter table temp_tt2 add constraint pk_id_l primary key (id)
 

3.从tt2中插入数据到temp_tt2

insert into temp_tt2 
select id,col1 from tt2
 

4.用临时表和a表关联进行批量更新

UPDATE (SELECT tt1.col1 ,temp_tt2 .col1_b,tt1.id,temp_tt2 .id FROM tt1,temp_tt2 WHERE  tt1.ID=temp_tt2 .ID)  
SET col1=col1_b;  
                    一、如果两张表有主键关系的话:执行更新UPDATE (SELECT tt1.col1 ,tt2.cola,tt1.id,tt2.id FROM tt1,tt2 WHERE  tt1.ID=tt2.ID)  SET col1=cola; 报错:ORA-01779: 无法修改与非键值保存表对应的列分析根据错误提示:”无法修改与非键值保存表对应的列”,初步推...
				
今天遇到一个错误:ORA-01779无法修改与非键值保存对应。 后来发现,当要对一个基于多连接的视图进行插入,更新等操作时,容易出现这个错误。 解决办法:个人认为,这个视图不能操作,可以对它基于的进行操作,这样,该视图里也就有相应数据了。 于是,做了下面这个实验。 SQL> create table emp2 as select * from emp; 已创建。
ORA-01779: 无法修改与非键值保存对应 alter table 名 add constraint 主键名 primary key(字段名1,字段名2,,,,) 主键名一般设置 :pk_
这个错误通常发生在使用Oracle Data Pump导出或导入数据时,可能是由于以下原因导致的: 1. 转储文件或文件集损坏:在导出或导入数据时,转储文件或文件集可能会因为某些原因损坏或丢失,导致导出或导入操作无法完成。 2. 转储文件或文件集不完整:在导出或导入数据时,转储文件或文件集可能会因为某些原因不完整,导致导出或导入操作无法完成。 3. 主不存在或无法定位:在导入数据时,如果导入的数据中包含主,但是主不存在或无法定位,就会导致导入操作无法完成。 针对这个错误,可以尝试以下解决方案: 1. 检查转储文件或文件集是否完整和损坏,可以使用操作系统的工具对文件进行检查和修复,或者重新导出数据并使用新的转储文件或文件集进行导入。 2. 检查导入数据中是否包含主,如果包含主,可以先导入主,然后再导入其他。 3. 检查导入数据中的是否存在,如果不存在,需要先创建结构,然后再导入数据。 4. 可以尝试使用Oracle提供的工具进行数据恢复,例如使用Oracle的Data Recovery Advisor来诊断和解决数据恢复问题。 总之,这个错误通常是由于转储文件或文件集的问题导致的,需要仔细检查转储文件或文件集的完整性和有效性,以确定问题的原因,并采取相应的解决措施。
 
推荐文章