Merge into的注意点之ORA-30926: 无法在源表中获得一组稳定的行?

转载 2015年11月19日 14:46:49

大家可以看看:

http://blog.sina.com.cn/s/blog_5d25646e0100qu17.html

的内容,然后我再补充一点:

新建两张table :test_source和test_target,他们的数据分别如下:                  
SQL> select * from test_source;
NAME               ID
---------- ----------
P3              74834
P4              74835
luo                 8
P1              74832
P2              74833
zhi                 8
SQL> select name ,id from test_target;
NAME       ID
---------- ----------
P3***           74834
P4***           74835
luo**               8
P1***           74832
P2***           74833
zhi**               8
SQL>  merge into test_target
  2   using test_source
  3   on (test_source.id = test_target.id)
  4   when matched then update set test_target.name = test_source.name
  5  when not matched then insert values(test_source.name,test_source.id);
 using test_source
       *
第 2 行出现错误:
ORA-30926: 无法在源表中获得一组稳定的行

---------------------哈哈,报错了,大家想想为什么呢?-----------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
解答如下:
首先我们要知道merge into存在的意义是什么!!!
      使用merge into  是为了根据匹配条件on(condition)利用table_source 的数据更新合并table_target的数据。
merge into 的内部处理是将table_source 的每一条记录和table_target的每一条记录对比匹配,匹配到符合条件的  记录就会进行修改,匹配不到的话就会insert。如果table_source的匹配列中有重复值的话,等到第二次重复的列值匹配的时候,就会将第一次的update后的值再一次update,就是说合并后的table_target中会丢失在table_source中的记录!!!如果记录丢失的话,两表合并的意义何在?!!因此我们使用merge into要注意:源表匹配列中不能有重复值,否则无法匹配(报错!     )。  
 -----------------------------------------------------------------------------------------------------------------我们可以上面将重复的列值去掉试试:
                                              
                                                                                  SQL> delete from test_source where name = 'zhi';
已删除 1 行。
SQL>  merge into test_target
  2   using test_source
  3   on (test_source.id = test_target.id)
  4   when matched then update set test_target.name = test_source.name
  5  when not matched then insert values(test_source.name,test_source.id);
6 行已合并。
  ---------------这回就何合并成功了。                 

ora-30926 无法在源表中获得稳定的行

1.一般就是需要一个值的地方,取到了多个值。 2.就是多值了。  我出现这个问题的时候是这样的。   table A  left join table B  on (A.name=b.Name)...
  • myrainblues
  • myrainblues
  • 2013年05月14日 15:22
  • 3024

Merge into的注意点之ORA-30926: 无法在源表中获得一组稳定的行?

Merge into的注意点之ORA-30926
  • ytfy12
  • ytfy12
  • 2016年09月09日 17:00
  • 10276

merge into 从一个表的一列数据复制到另一个表的一列 oracle 中报ora-30926 无法在源表中获得稳定的行

转自: http://hi.baidu.com/ex_dijkstra/item/a902e601cd1e2917cd34ea73  2)在merge的时候也遇到一个问题,出现”ORA-...
  • honghuajun
  • honghuajun
  • 2012年11月24日 20:30
  • 6986

Merge into的注意点之ORA-30926: 无法在源表中获得一组稳定的行?

 转自:http://blog.itpub.NET/29900383/viewspace-1284128/ 大家可以看看:http://blog.sina.com.cn/s/blog_5d25...
  • duhongsheng
  • duhongsheng
  • 2017年08月18日 12:11
  • 188

取得網頁上表格資料

 Private Sub CommandButton1_Click()    Dim oDoc As Object    Dim sDoc As Object    Dim iText As Stri...
  • Edream2
  • Edream2
  • 2007年10月25日 01:57
  • 1466

Merge into的注意点之ORA-30926: 无法在源表中获得一组稳定的行?

大家可以看看: http://blog.sina.com.cn/s/blog_5d25646e0100qu17.html 的内容,然后我再补充一点: 新建两张table :test_source和te...
  • pzasdq
  • pzasdq
  • 2015年11月19日 14:46
  • 878

工作总结的 -- Oracle merge into 报错& Linux使用

1. Merge into 问题 程序中merge into: 报ORA-30926: 无法在源表中获得一组稳定的行 原因分析:有一数据数源同一时间传输了两条数据,造成merge in...
  • richieruan
  • richieruan
  • 2016年11月02日 17:08
  • 237

Merge into的注意点之ORA-30926

大家可以看看:http://blog.sina.com.cn/s/blog_5d25646e0100qu17.html的内容,然后我再补充一点: 新建两张table :test_source和tes...
  • gua___gua
  • gua___gua
  • 2015年05月14日 16:08
  • 428

ORA-30926: unable to get a stable set of rows in the source tables

这个网址可以作为参考http://forums.oracle.com/forums/thread.jspa?threadID=1114905&start=0&tstart=0  这个问题有可能是在Me...
  • yuzmoon
  • yuzmoon
  • 2011年06月28日 16:28
  • 7390

Oracle9i之后的MERGE语法

MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执...
  • xzknet
  • xzknet
  • 2008年04月09日 09:20
  • 2865
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Merge into的注意点之ORA-30926: 无法在源表中获得一组稳定的行?
举报原因:
原因补充:

(最多只允许输入30个字)