SQL Merge 语句在 Oracle 11g 中有效,但在 9i 中无效
Posted
技术标签:
【中文标题】SQL Merge 语句在 Oracle 11g 中有效,但在 9i 中无效【英文标题】:SQL Merge statement works in Oracle 11g but not 9i 【发布时间】:2012-05-17 14:58:06 【问题描述】:我有一个 SQL MERGE 语句在 Oracle 11g(开发环境)中完美运行,但当我尝试在 Oracle 9i(生产环境)中运行它时出现以下错误:ORA-00905: missing keyword。
有什么方法可以在 Oracle 9i 中完成这项工作?这是声明:
MERGE INTO non_asset dst
USING (SELECT tag, comments, computer_role
FROM non_asset_backup
WHERE sub_group = 'AALVOIP') src
ON (dst.tag = src.tag)
WHEN MATCHED THEN
UPDATE
SET dst.comments = src.comments,
dst.computer_role = src.computer_role
【问题讨论】:
这可能会有所帮助:nuijten.blogspot.com/2009/07/delete-in-merge-statement.html 【参考方案1】:在 9i 中,WHEN MATCHED
和 WHEN NOT MATCHED
分支都是强制性的。在 10g 和之后,其中一个可能会丢失(但显然不能同时丢失)。
参见http://docs.oracle.com/cd/B10501_01/server.920/a96540/statements_915a.htm#2080942 与http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9016.htm#i2081218
【讨论】:
嗯,有没有办法告诉它在不匹配时什么也不做 为了避免头疼,我会使用与生产相同的数据库版本进行开发。 顺便说一句,9i 不支持,所以你应该升级。我知道这并不简单,但即使是 10g 在很多方面都要好得多,更不用说 11g。 不,如果NOT MATCHED
,我认为你无能为力。你可能只需要UPDATE
。
谢谢,你很有帮助以上是关于SQL Merge 语句在 Oracle 11g 中有效,但在 9i 中无效的主要内容,如果未能解决你的问题,请参考以下文章