INSERT INTO table1(id,dept_id,name,description,creation_time,modified_time)
VALUES('id','dept_id','name','description','creation_time','modified_time')
ON DUPLICATE KEY UPDATE dept_id=VALUES(dept_id),name=VALUES(name),
description=VALUES(description),creation_time=VALUES(creation_time),
modified_time=VALUES(modified_time)
我使用下面的oracle来转换上面的mysql查询。查询失败。你能帮我找出oracle查询有什么问题吗。
Merge into table1 t1 using
(VALUES ('id','dept_id','name','description','creation_time','modified_time')) as temp
(id,dept_id,name,description,creation_time,modified_time) on t1. id = temp.id
WHEN MATCHED THEN UPDATE SET dept_id=t1.dept_id, description=t1.description, name=t1.name,
creation_time=t1.creation_time, modified_time=t1.modified_time
WHEN NOT MATCHED THEN INSERT (id,dept_id,name,description,creation_time,modified_time)
VALUES ('id','dept_id','name','description','creation_time','modified_time')
1条答案
按热度按时间xxslljrj1#
为此,需要在
using
子句(在您的情况下,需要一个子查询)。在oracle中,如果您需要选择一些内容,而不需要从实际的表中进行选择,则可以使用双表;这是一个只包含一行和一列的表。
因此,您的merge语句应该如下所示:
请注意
when not matched
子句使用源子查询中的列,而不是使用您提供的文本值(我假设在实际代码中,这些文字值实际上是变量;creation_time
在标记为creation\u time!的列中存储一个非常奇怪的值。我还切换了别名,以便更清楚地显示合并的位置;我发现这样更容易理解merge语句在做什么。基督教青年会。