2

我需要这个更新查询在 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
)
4

3 回答 3

6

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
        )
于 2010-11-04T14:21:32.877 回答
0

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)
于 2010-11-04T14:22:10.807 回答
0

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

  1. from句子中的子句update(您需要为此编写子选择)
  2. dbo架构,除非您实际上有一个dbo在 oracle 中命名的用户拥有您要更新的表
于 2010-11-04T14:22:43.360 回答