`
小杨学JAVA
  • 浏览: 903901 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

转:http://blog.itpub.net/29900383/viewspace-1284128/

大家可以看看: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-00060: 等待资源时检测到死锁--oracle 数据库表死锁异常

    在Oracle数据库系统中,"ORA-00060: 等待资源时检测到死锁" 是一个常见的错误提示,它表明两个或多个事务在执行过程中陷入了无法继续进行的状态,因为彼此都在等待对方释放资源。这种情况通常发生在并发操作中,比如...

    oracle Merge 函数.doc

    "Oracle Merge 函数详解" Oracle Merge 函数是一种强大...这时,如果执行 Merge 语句,会抛出错误:ORA-30926: 无法在源表中唯一地标识记录 因此,在使用 Merge 函数时,需要小心地处理关联的值,以避免错误的发生。

    gitlab-merge-request-resource:在GitLab上检查新合并请求的场所资源

    源配置 resource_types :- name : merge-request type : docker-image source : repository : mastertinner/gitlab-merge-request-resourceresources :- name : repo-mr type : merge-request source : uri : ...

    Oracle merge into用法

    在Oracle数据库中,`MERGE INTO`语句是一种非常强大的工具,它允许用户根据源表中的数据更新目标表,同时也可以插入新记录。这一特性在处理大量数据时尤其有用,因为它能够在一个步骤中完成更新和插入操作,从而提高...

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法可以批量插入时间价格表数据,但是需要注意其缺陷和限制。在实际应用中,需要根据实际情况选择合适的方法。 知识点总结: 1. Mybatis批量foreach merge into的用法可以批量...

    Merge into的使用详解

    在SQL语言中,`MERGE INTO`语句是一种强大的工具,用于合并两个数据集,它允许根据特定条件将数据从一个源(通常是临时表或视图)插入或更新到目标表。这个操作通常被称为“合并”或“ Upsert”,因为它可以实现插入...

    npm-merge-driver:git merge驱动程序,用于解决与npm相关的文件中的冲突

    npm-merge-driver(1)-用于自动合并锁文件的git merge驱动程序自动设置(推荐): 要立即开始使用它: $ npx npm-merge-driver install --global或按项目在本地安装: $ cd /path/to/git/repository$ npx npm-merge...

    npm-merge-driver-install:一个软件包,用于在本地自动安装npm-merge-driver

    npm-merge-driver安装 自动合并package-lock.json冲突的软件包。 很大程度上基于 ,在软件包安装时进行自动设置,并且只有一个小的依赖项来进行ci检查。 用生成的目录 安装 安装运行 npm i --save-dev npm-...

    oracle merge into的使用

    在 Oracle 数据库中,Merge Into 允许根据源表和目标表之间的匹配条件来决定是更新现有行还是插入新行。这种能力在处理批量数据时特别有用,可以显著提高数据处理效率。例如,当需要根据外部数据源同步本地数据库中...

    Oracle中merge into的使用

    在Oracle数据库中,`MERGE INTO`语句是一种强大的数据操作工具,它允许你在一个步骤中执行更新(UPDATE)和插入(INSERT)操作,从而提高了数据处理的效率和灵活性。这个命令尤其适用于需要同步两个表的数据时,比如...

    浅谈Oracle数据库中Merge Into的用法.pdf

    Merge Into 语句,我们能够在一个语句中对一个表同时执行 Insert 和 Update 操作,根据这个表或子查询的连接条件对另一个表进行查询,连接条件匹配上的进行 Update 操作,并且在其后面还可以接删除操作,无法匹配的...

    action-dependabot-auto-merge:当版本比较在范围内时自动合并Dependabot PR

    当版本比较在范围内时,自动合并Dependabot PR。 注意: Dependabot将等到所有状态检查通过后再进行合并。 这是Dependabot本身的功能,而不是此Action。 用法 name : auto-merge on : pull_request : jobs : auto...

    SSDT.rar_4078_SSDT-HACK_rights

    SSDT恢复的程序源 参考调试信息: Linking f:\driver\3 directory ******************** nmake.exe /c BUILDMSG=Stop. -i LINKONLY=1 NOPASS0=1 NTTEST= UMTEST= 386=1 link -out:.\i386\DrvTest.sys -machine:...

    trim-merge:修剪和合并视频

    创建一个描述您的输入和输出的config.yml文件。 # config.yml clips : - input : video.mp4 output : merged.mp4 clips : - time : 00:05-00:10 - time : 00:15-00:20 # Example directory: /Videos -...

    K-DBSCAN: Identifying Spatial Clusters With Differing Density Levels

    K-DBSCAN has two phases: first, it divides all data objects into different density levels to identify the different natural densities present in the dataset; then it extracts the clusters using a ...

    oracle手册

    - MERGE:根据条件合并源表和目标表的数据。 #### 8. 事务控制语句 - COMMIT:提交事务。 - ROLLBACK:回滚事务。 #### 9. DDL语句 - CREATE:创建数据库对象如表、视图等。 - DROP:删除数据库对象。 - ALTER:...

    git常用命令.docx

    - 描述: 单个提交应该包含一组相关的更改,如修复同一个功能中的多个错误。 - 注意事项: 细分提交,便于理解和维护。 - **频繁提交** - 描述: 定期提交变更,有助于保持提交的小型化。 - 注意事项: 频繁提交有...

    WinMerge-2.16.31-x64-Setup安装包

    WinMerge-2.16.31-x64-Setup安装包

    pybigquery-merge-into:向pybigquery添加MERGE INTO支持

    主要类是pybigquery_merge_into.merge_clause.MergeInto() 。 例子 >> > query = MergeInto ( target = target , source = source , onclause = target . c . t1 == source . c . s1 , when_clauses = [ ...

Global site tag (gtag.js) - Google Analytics