这是我遇到的查询的结构:
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)
Run Code Online (Sandbox Code Playgroud)
我已经阅读了使用DUAL返回SYSDATE或其他操作... SELECT是否只是将一些输入值返回到表(行)中以简化其他子句中的进一步操作?
谢谢!
您遇到的代码旨在更新单个行,或者如果它不存在则创建它.
DUAL是一个只包含一行的特殊系统表.从DUAL中选择是一种解决方法,因为Oracles无法简单地做到:
select sysdate;
Run Code Online (Sandbox Code Playgroud)
请注意,它不一定是dual,它可以是任何一行表,甚至是返回一行的查询.
select sysdate
from dual;
Run Code Online (Sandbox Code Playgroud)
相当于:
select sysdate
from my_one_row_table;
Run Code Online (Sandbox Code Playgroud)
和
select sysdate
from my_table
where my_primary_key = 1;
Run Code Online (Sandbox Code Playgroud)
从版本10g开始,该dual表具有一个特殊的访问路径,在执行计划中显示为"fast dual",这导致0一致的获取,这是不可能使用其他表自己实现的.
| 归档时间: |
|
| 查看次数: |
4842 次 |
| 最近记录: |