添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
   INSERT INTO tt1 VALUES(1,'tt1id1');
   INSERT INTO tt1 VALUES(2,'tt1id2');
   INSERT INTO tt2 VALUES(1,'tt2id1');
   INSERT INTO tt2 VALUES(2,'tt2id2');
   INSERT INTO tt1 VALUES(3,'tt1id3');
   INSERT INTO tt2 VALUES(4,'tt2id4');
   COMMIT;
3、执行更新
   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: 无法修改与非键值保存表对应的列

5、结论:

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

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

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

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

项目中通过子查询更新数据时遇到ORA-01779: 无法修改与非键值保存表对应的列,模拟过程如下:1、创建测试表 CREATE TABLE tt1 (ID INT,col1 VARCHAR2(20)); CREATE TABLE tt2 (ID INT,cola VARCHAR2(20));2、录入测试数据 INSERT INTO tt1 VALUES
ORA -12154:TNS: 无法 解析指定的连接标识符 ORA -12154:TNS:无监听程序 错误分析一、PL/SQL 客户端登录到数据库,如果配置错误会有以上错误,如下图。 这个错误主要是pl/sql客户端的tnsnames. ora 配置错误,或者是输入 database选项错误。 错误分析二、未配置环境变量 所以解决问题之前一定要配置环境变量TNS_ADMIN path添加;E:\PLSQL Developer(64)\instantclient_11_2 配置环境变量就是为了让PL/SQL Developer打开时加载到tnsnames. ora 文件的内容 配置pl/sql的Datab
你要插入的 A里,有外键连接到另一个 B的主键,你在 A的外键 插入的值,在 B的主键 找不到就不能插入。 主要看两 中的数据是否一致,从 中要关联外键的字段中的数据必须包含在主 相关字段的数据内。 处理的方法有: 1> 先不验证已有数据的CONSTRANT,加上参数NOVALIDATE.*/
今天遇到一个错误: ORA - 01779 无法 修改 与非 键值 保存 对应 。 后来发现,当要对一个基于多 连接的视图进行插入,更新等操作时,容易出现这个错误。 解决办法:个人认为,这个视图不能操作,可以对它基于的 进行操作,这样,该视图里也就有相应数据了。 于是,做了下面这个实验。 SQL> create table emp2 as select * from emp; 已创建。
ORA -01261和 ORA -01262是 Oracle 数据库中的错误代码,通常与控制文件相关。 ORA -01261 示控制文件中的记录已经过时, 无法 使用。这可能是由于控制文件已经被删除或损坏,或者是由于数据库实例 无法 访问控制文件。 ORA -01262 示控制文件中的记录已经被 修改 无法 使用。这可能是由于控制文件已经被其他进程 修改 ,或者是由于数据库实例 无法 访问控制文件。 要解决这些错误,可以尝试恢复控制文件,或者使用备份控制文件替换当前的控制文件。还可以检查数据库实例的权限和文件系统的可用空间,以确保数据库实例可以访问控制文件。
--创建临时表解决了 drop table TEMP_01; create table TEMP_01(dialog_id varchar2(38) primary key ,sort_id varchar2(38),sort_name varchar2(100)); insert into TEMP_01 select t.id,t.mutual_sort_top_id as id2,sy.sort_name as name2 from dialog t inner join rqm_cfg_systemsort sy on t.MUTUAL_SORT_TOP_ID=sy.id; commit; update (select hi.mutual_sort_top_id as id1, hi.mutual_sort_top_name as name1, t.sort_id as id2,t.sort_name as name2 from JCZC_BPMTASK hi inner join TEMP_01 t on hi.dialogid =t.dialog_id set id1=id2,name1=name2; commit; [/code]