Oracle SELECT FROM如何与多个字段一起工作

时间:2011-03-29 21:29:29

标签: sql oracle

以下是我遇到的查询结构:

MERGE INTO TABLE t
USING (SELECT ? id, ? email, ? cr_date, ? info, ? status FROM dual) n
ON t.id=n.id and t.email=n.email
WHEN MATCHED THEN UPDATE SET z.info = n.info z.status='Y'
WHEN NOT MATCHED THEN INSERT (info, status) VALUES (n.info, n.status)

我已经阅读了使用DUAL返回SYSDATE或其他操作... SELECT是否只是将一些输入值返回到表(行)中以简化其他子句中的进一步操作?

谢谢!

4 个答案:

答案 0 :(得分:7)

您遇到的代码是为了更新单个行,或者如果它不存在则创建它。

DUAL是一个只包含一行的特殊系统表。 从DUAL中选择是Oracles无法做到的简单方法:

select sysdate;

请注意,它不必是dual,它可以是任何一行表,甚至是返回一行的查询。

select sysdate
  from dual;

相当于:

select sysdate
  from my_one_row_table;

select sysdate
  from my_table
 where my_primary_key = 1;

从版本10g开始,dual表有一个特殊的访问路径,在执行计划中显示为“fast dual”,这导致0一致的获取,这是不可能自己使用其他表格。

答案 1 :(得分:0)

a)是的,您可以像这样的陈述一样使用。但是您必须重命名“date”字段名称,因为它的关键字是oracle。 b)但我强烈建议为此创建程序。

答案 2 :(得分:0)

了解DUAL表:http://www.orafaq.com/wiki/Dual 它常用于SYSDATE,也可用于以下多个字段:     SELECT USER,sysdate来自dual;

答案 3 :(得分:0)

该声明似乎基本上是使用DUAL的小技巧进行更新Else插入。 “?”似乎是绑定变量。

相同的逻辑可能看起来像(在伪代码中):

UPDATE t
SET t.id= ?,
    t.email= ?,
    t.status= 'Y'

如果更新更新0行那么

INSERT into t
VALUES (?, ?) 
两个在哪里?分别是“信息”和“状态”变量。

使用DUAL只会将您的工作减少到一个数据库调用,而不是两个。