Sam*_*son 1 sql oracle merge select
是否可以使用select过滤一些要在表上合并的条目?
MERGE INTO (
SELECT * FROM P4PCA2_PIVOT_CA
WHERE ( CA_LIG_VTE_NUM_ID_PDT <> 0 )
) ta
USING P4DAS2_DONARTSTK tb ON (tb.NUM_ID_PDT =ta.CA_LIG_VTE_NUM_ID_PDT)
WHEN MATCHED THEN
UPDATE SET ta.COD_SECVTE_REVENT=tb.COD_SECVTE_REVENT);
Run Code Online (Sandbox Code Playgroud)
在Oracle中,您可以在(某些)视图或子查询上执行DML.指南是,如果Oracle能够从视图中检索物理行,则视图是可更新的.
因此,您可以在子查询上使用MERGE.在某些情况下这是有道理的.例如,假设您有一个包含状态列的表.您希望将新信息合并到此表中,但只修改具有的行STATUS='active'.你可以写:
MERGE INTO (SELECT * FROM mytable WHERE status='active') old
USING (SELECT * FROM newtable) new
ON (new.id = old.id)
WHEN MATCHED THEN UPDATE SET old.data1=new.data1;
Run Code Online (Sandbox Code Playgroud)
看起来这产生了ORA-009039iR2.它的工作原理是11g.测试脚本:
create table t (id number, c varchar2(10));
insert into t (select rownum, 'aaa' from dual connect by level <= 1000);
merge into (select * from t where id <= 10) t
using (select 1 id from dual) d
ON (t.id = d.id)
when matched then update set c = 'iii';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30887 次 |
| 最近记录: |