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 MATCHEDWHEN 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 中无效的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 语句中外连接绑定变量 (Oracle 11g)

SSIS 执行 SQL 任务,受 MERGE 语句影响的行(Oracle 和 SQL Server)

oracle11g中有执行语句和执行脚本,有啥区别?

如何写sql语句恢复11g oracle数据库用户密码

『ORACLE』 SQL语句简单应用(11g)

『ORACLE』 SQL语句简单应用(11g)