0

いくつかの MS Access クエリを Oracle に変換しようとしています。以下は、MS Access からのクエリの 1 つです。

    UPDATE [結果] INNER JOIN [マスター]
      オン ([結果].[LAST_NAME] = [MASTER].[LAST_NAME])
      AND ([結果].[FIRST_NAME] = [MASTER].[FIRST_NAME])
      AND ([結果].[ドキュメント番号] = [マスター].[ドキュメント番号])
      AND ([結果].[バッチ_ID] = [マスター].[リード_ID])
    SET [MASTER].[CLOSURE_REASON] = "名前とドキュメント番号が一致するためクローズ",
        [MASTER].[RESULT_ID] = [RESULT].[ID],
        [MASTER].[RESULT_PID] = [RESULT].[PID]
    WHERE (([MASTER].[CLOSURE_REASON] は Null です)
      AND ([MASTER].[REC_CODE] = "A1")
      AND ([結果].[EVENT_DATE] = [MASTER].[EVENT_DATE])
      AND ([結果].[EVENT_TYPE] = "オープン")
      AND ([MASTER].[DOCUMENT_NUMBER] Is Not Null)
      AND ([MASTER].[DOCUMENT_NUMBER)] "null"));

最初に ORA-01779: cannot modified a column that maps to a non-key-preserved table エラーを受け取りました。あなたのサイトのさまざまな例 (MERGE を含む) に従い、元のクエリを変更しました。現在、ORA-30926: ソース テーブルで安定した行セットを取得できませんというエラーが表示されます。

ほとんどの例では、テーブル間の結合は 1 つしか示されていませんでしたが、要件に基づいてさらに結合を行う必要があります。

このクエリを Oracle に変換するための助けは素晴らしいでしょう。ありがとう!

4

1 に答える 1

1

これは同等であるべきだと思います。

UPDATE master m
   SET closure_reason = 'Closed For Name and Document Number Match',
       (result_id, result_pid) = (SELECT r.id, r.pid
                                    FROM result r
                                   WHERE m.last_name       = r.last_name
                                     AND m.first_name      = r.first_name
                                     AND m.lead_id         = r.batch_id
                                     AND m.document_number = r.document_number
                                     AND m.event_date      = r.event_date
                                     AND r.event_type      = 'Open')
 WHERE m.closure_reason IS NULL
   AND m.rec_code = 'A1'
   AND m.document_number IS NOT NULL
   AND m.document_number != 'null'
   AND EXISTS( SELECT 1
                 FROM result r
                WHERE m.last_name       = r.last_name
                  AND m.first_name      = r.first_name
                  AND m.lead_id         = r.batch_id
                  AND m.document_number = r.document_number
                  AND m.event_date      = r.event_date
                  AND r.event_type      = 'Open' )

ただし、明らかに、これはテストされていません。テーブルを作成するための DDL、いくつかの行を挿入するための DML を投稿して、期待される結果を示すことができれば、コードをテストして、より正確な回答を提供できる可能性があります。

于 2012-07-30T17:00:44.267 に答える