【问题标题】:Merging without source table Oracle SQL Developer合并无源表 Oracle SQL Developer
【发布时间】:2019-04-15 12:45:57
【问题描述】:

我正在尝试将数据合并到数据库中,但我不能没有表,我不想创建一个临时表,以便之后删除

MERGE INTO target_table target
USING ('0101-2019' as date, 1515 as random_data, 9595 as more_random_data) source
ON (target.date= source.date) 
WHEN MATCHED THEN
    UPDATE  SET target.date = source.date,  
                    target.random_data = source.random_data, 
                    target.more_random_data = source.more_random_data
WHEN NOT MATCHED THEN
    INSERT  (date,  random_data, more_random_data)
    VALUES (source.date,  source.random_data, source.more_random_data);

出于某种原因,如果我没有使用 Oracle SQL Developer,我可以找到一种可行的方法,但我无法将其翻译为 Oracle

MERGE target_table AS target
USING   (VALUES ('0101-2019', 1515, 9595))
     AS source(date, random_data, more_random_data)
ON target.date= source.date
WHEN MATCHED THEN
    UPDATE  SET target.date = source.date,
                    target.random_data = source.random_data
                    target.more_random_data = source.more_random_data
WHEN NOT MATCHED BY target THEN
    INSERT  (date, random_data, more_random_data)
    VALUES (source.date, source.random_data, source.more_random_data)
WHEN NO TMATCHED BY source THEN
    DELETE

不要问我这会在哪里起作用,这是我从我编写的适合我的情况的示例中找到的一些,但由于我使用 Oracle 的 SQL Developer,它对我不起作用。

【问题讨论】:

    标签: oracle sql-merge


    【解决方案1】:

    Oracle 仍然不支持标准的 VALUES 行构造函数。您需要使用select from dual 的解决方法:

    USING (
       select '0101-2019' as date, 1515 as random_data, 9595 as more_random_data
       from dual
    ) source
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2015-08-03
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多