我需要此更新查询才能在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
)
有帮助吗?

解决方案

更新...来自语法对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
        )

其他提示

与共同相关的子查询的语法在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)

您将需要完全重写Oracle的查询。一些在Oracle 10.2中无法使用的东西:

  1. from 子句 update 句子(您需要为此写一个子选择)
  2. dbo 架构,除非您实际上有一个用户命名 dbo 在Oracle拥有该桌子中,您要更新
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top