【发布时间】:2017-11-11 23:25:11
【问题描述】:
我正在学习 oracle sql 和 pl/sql,我想知道 Oracle 中是否有等效的子句 'merge=output' 或获得相同结果的简单有效的方法。
链接到对 sql server 'merge,output' 语句的良好解释。 link
--sql server merge
MERGE #c_new AS trg
USING #c_base AS src
ON trg.Num_id = src.Num_id
WHEN MATCHED )
THEN
UPDATE SET
trg.Name = src.Name
,trg.Name_type = src.Name_type
WHEN NOT MATCHED BY trg
THEN
INSERT (Num_id, Name, Name_type)
VALUES (Num_id, src.Name, src.Name_type)
WHEN NOT MATCHED BY src THEN DELETE
------------output clause from here---------------
OUTPUT
$ACTION,
inserted.Name NewName,
deleted.Name PrevName,
inserted.Name_type NewName_type,
deleted.Name_type PrevName_type
返回(如“查询”)
$action NewName PrevName NewName_type PrevName_type
INSERT Abc1 Tp1
DELETE Abc2 Tp2
UPDATE Abc4 Abc3 Tp4 Tp3
是 Oracle 中的等效子句 'merge=output' 还是获得相同结果的简单有效方法
【问题讨论】:
-
edit 您的问题并添加一些示例数据和基于该数据的预期输出。 Formatted text 请no screen shots。不要在 cmets 中发布代码或附加信息
-
我的问题是关于 oracle 语法我或多或少知道如何从 sql server 实现合并输出之类的效果,但是如果在 oracle 中存在合并中的 clausle outup 或简单的方法,我找不到信息.我可以添加示例数据,但我认为这不是修复数据的好方法。在添加的链接中公开了从合并输出语句 sql 服务器返回数据的形式
-
我不知道“合并输出”应该是什么(可能许多其他使用 Oracle 的人也不知道)。您需要告诉我们您要解决的问题。可能是您在 SQL Server 中采用的方法在 Oracle 中不可用,或者该问题可以在 Oracle 中以完全不同的方式解决。最好的方法是描述实际问题并举例说明。您不能指望精通 Oracle 的人也了解有关 SQL Server 的一切。
-
好的,感谢您的回答,我添加了一些数据,但在我看来,如果您学习并询问语法是准备示例虚拟问题的不好方法,因为“statment”可以以非常不同的方式使用。此外,我认为 Oracle 'specjalist' 不需要了解有关 sql server 的所有信息,但对于与编程接触的人来说,找到并理解 'merge,从 sql server 输出' 在基本版本中不会超过 2 分钟:)
-
DML 语句不返回 Oracle 中的结果集。这听起来是个不错的功能。
标签: sql sql-server oracle plsql