当前位置:  数据库>oracle

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

    来源: 互联网  发布时间:2017-05-30

    本文导语: 当我更新一个视图的时候,遇到这个错误: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-k...

当我更新一个视图的时候,遇到这个错误: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.

可以来模拟这个错误:

SQL> desc gw2
Name    Type    Nullable Default Comments
------- ------- -------- ------- --------
SID    INTEGER Y                       
OLD_SID INTEGER Y                       

SQL> select * from gw1;
 
                                    ID                                    SID
--------------------------------------- ---------------------------------------
                                      1                                      1
                                      2                                      2
                                      3                                      3
                                      4                                      4
 
SQL> select * from gw2;
 
                                    SID                                OLD_SID
--------------------------------------- ---------------------------------------
                                      1                                      11
                                      2                                      22
                                      3                                      33
 
SQL> update (select gw1.sid,gw2.old_sid from gw1,gw2 where gw1.sid=gw2.sid) s set s.sid=s.old_sid;
 
update (select gw1.sid,gw2.old_sid from gw1,gw2 where gw1.sid=gw2.sid) s set s.sid=s.old_sid
 
ORA-01779: 无法修改与非键值保存表对应的列

这是因为,不能保证gw1中的一个sid对应一个唯一的gw2表的sid,也就是说gw2的sid不能保证唯一,解决的方法就是将gw2的sid加上unique约束。

SQL> alter table gw2 modify sid unique;
 
Table altered
 
SQL> update (select gw1.sid,gw2.old_sid from gw1,gw2 where gw1.sid=gw2.sid) s set s.sid=s.old_sid;
 
3 rows updated

这样就可以了。

相关阅读:

GoldenGate不使用数据泵完成Oracle-Oracle的双向复制

使用GoldenGate的数据泵进行Oracle-Oracle的单向复制

如何对 Oracle 数据泵(expdp/impdp) 进行 debug

Oracle 数据库导出数据泵(EXPDP)文件存放的位置

Oracle 10g 数据泵分区表的导出


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 出现ORA-01401和ORA-01008错误?
  • Eclipse连接Oracle数据库的ORA-00604 ORA-12705错误
  • oracle ORA-01114、ORA-27067错误解决方法
  • Oracle不能删除表 ORA-00604 ORA-01422 错误
  • 如何得到带有ora的行的下一行
  • ORA-12514及ORA-28547错误解决方案
  • 如何配置 linux 下 oracle 的 listener .ora 和
  • 浅析如何在tnsnames.ora中配置监听
  • Orcle的package中访问其它Schema的表报错ORA-00942解决方法
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • [Oracle] 浅析令人抓狂的ORA-01555问题
  • 解决报错ora-32035的方法分析
  • aq.executeQuery: ORA-00020: maximum number of processes (59) exceeded
  • Oracle 数据库闪回功能设置出现ORA-19809和ORA-19804错误
  • ORA-00947:Not enough values (没有足够的值)的深入分析
  • solaris10 安装 ora9.2.0.1 时报错
  • 在UNIX下,我的ORA817该怎么样才可以自己启动呀?
  • 基于ORA-12170 TNS 连接超时解决办法详解
  • 编程语言 iis7站长之家
  • 安装oracle出现error:ora-01031:insufficient privilleges的解决


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,