【问题标题】:Update query runs in SQL Server but not in Oracle更新查询在 SQL Server 中运行,但不在 Oracle 中
【发布时间】:2010-11-04 14:16:45
【问题描述】:

我需要在 SQL Server 和 Oracle 上运行此更新查询。如果重要的话,我们的 Oracle 版本是 10.2。当我在 Oracle 中运行查询时,我得到“错误 ORA-00933:SQL 命令未正确结束”。我需要做什么才能让它在 Oracle 中运行?

UPDATE dbo.tableUpdate
SET fieldA = tt.fieldB
FROM dbo.tableTranslate tt
WHERE
    tt.fieldC = dbo.tableUpdate.fieldC
    AND
    tt.fieldD = dbo.tableUpdate.fieldA
    AND
    1 = (
        SELECT COUNT(tblTrans.fieldD) 
        FROM dbo.tableTranslate tblTrans
        WHERE 
            tblTrans.fieldC = dbo.tableUpdate.fieldC 
            AND 
            tblTrans.fieldD = dbo.tableUpdate.fieldA
)

【问题讨论】:

    标签: sql sql-server oracle ora-00933


    【解决方案1】:

    UPDATE...FROM 语法对 Oracle 无效。您将需要使用子查询,如下所示:

    UPDATE dbo.tableUpdate t
    SET t.fieldA = (SELECT tt.fieldB
                    FROM dbo.tableTranslate tt
                    WHERE tt.fieldC = t.fieldC
                    AND tt.fieldD = t.fieldA
                   )
    WHERE 1 = (
            SELECT COUNT(tblTrans.fieldD) 
            FROM dbo.tableTranslate tblTrans
            WHERE tblTrans.fieldC = t.fieldC 
            AND tblTrans.fieldD = t.fieldA
            )
    

    【讨论】:

      【解决方案2】:

      Oracle 中的关联子查询语法略有不同。

      UPDATE dbo.tableUpdate
      SET fieldA = (select tt.fieldB
      FROM dbo.tableTranslate tt
      WHERE
          tt.fieldC = dbo.tableUpdate.fieldC
          AND
          tt.fieldD = dbo.tableUpdate.fieldA)
          AND
          1 = (
              SELECT COUNT(tblTrans.fieldD) 
              FROM dbo.tableTranslate tblTrans
              WHERE 
      tblTrans.fieldC = dbo.tableUpdate.fieldC 
      AND 
      tblTrans.fieldD = dbo.tableUpdate.fieldA)
      

      【讨论】:

        【解决方案3】:

        您需要完全重写 Oracle 查询。一些在 Oracle 10.2 中不起作用的东西:

        1. update 句子中的 from 子句(您需要为此编写子选择)
        2. dbo 架构,除非您实际上在 oracle 中有一个名为 dbo 的用户拥有您要更新的表

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多