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のクエリを完全に書き直す必要があります。Oracle10.2では機能しないもの:

  1. from文中の節update(これには副選択を書く必要があります)
  2. dbodboスキーマ。ただし、更新しようとしているテーブルを所有するoracleという名前のユーザーが実際にいる場合を除きます。
于 2010-11-04T14:22:43.360 に答える