2010-11-04 61 views
2

我需要此更新查询以在SQL Server和Oracle上运行。如果有问题,我们的Oracle版本是10.2。当我在Oracle中运行查询时,出现“错误ORA-00933:SQL命令未正确结束”。我需要做些什么才能使其在Oracle中运行?更新查询在SQL Server中运行但不在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 
) 

回答

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 
     ) 
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) 
0

您将需要完全重写您的Oracle查询。有些东西不会在甲骨文工作10.2:

  1. from子句中update句子(你需要为此编写一个子查询)
  2. dbo模式,除非你确实有一个在Oracle名为dbo用户拥有您尝试更新的表格
相关问题