更新查询在SQL Server中运行,但在Oracle中不运行

时间:2010-11-04 14:16:45

标签: sql sql-server oracle ora-00933

我需要在SQL Server和Oracle上运行此更新查询。如果重要的话,我们的Oracle版本是10.2。当我在Oracle中运行查询时,我得到“ERROR 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
)

3 个答案:

答案 0 :(得分: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
        )

答案 1 :(得分: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)

答案 2 :(得分:0)

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

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