2017-12-07 18 views
0

Oracle 11gで自動化を開発しています。私は、次のoracle 10gに正常に動作しますが、クエリを持っていない11Oracle 10gから11gへの問い合わせ

update(
    select rirr.NUM_SERIE_ULT, 
      tri.T_USED_IMEI, 
      rirr.celular, 
      tri.MSISDN, 
      rirr.TRAFICO, 
      case when rirr.celular = tri.MSISDN then 'MISMO ABONADO' 
       when rirr.celular <> tri.MSISDN then 'OTRO ABONADO' 
       else 'SIN TRAFICO' 
      end as TRAFICO_ACTUALIZAR 
    from RENOVACIONES_INT_RENO_REPO rirr 
     left join TRAFICO_RENOVACION_INTERNA tri 
     on rirr.NUM_SERIE_ULT = tri.T_USED_IMEI 
    ) 
set TRAFICO = TRAFICO_ACTUALIZAR; 
+4

ようこそ。 – OldProgrammer

+1

OldProgrammerをバックアップするには、クエリが機能していないことがわかっていますが、詳細を入力してください。あなたが何であれ、エラーを受けていますか?それはあなたがそれを期待するように(そしてエラーはありません)それが実行されますが、更新されませんか?より多くを提供してください。 – MER

+0

この問合せを実行すると、次のエラーが表示されます。「ORA-01779:非キー保存表にマップする列を変更できません。このエラーは、Oracle 10gを11gにアップグレードすると表示され始めます –

答えて

1

エラー:

あなたがテーブル rirr(ない実際のテーブル名から列 TRAFICOを更新している

、しかし、あなたが使用してエイリアスそれはクエリの中で)。この表は、結合条件rirr.NUM_SERIE_ULT = tri.T_USED_IMEIの表triに結合されています。

rirrの各行に対して、Oracleは、結合条件を満たすtriに一意の行を見つける必要があります。つまり、テーブルrirrの列NUM_SERIE_ULTに重複がある可能性があります。テーブルtriの列T_USED_IMEIは一意である必要があります(重複してはいけません)。さらに、結合を使用したOracleのUPDATE文の実装では、表triにUNIQUE索引またはUNIQUE制約が列T_USED_IMEIを持つ必要があります(Oracle 10ではそうでした)。 Oracle 10でUPDATE文が機能していた場合は、そのような索引や制約がある可能性があります。

このような索引または制約は、Oracle 11にはまだ存在しますか。アップグレードしただけでは、インデックスや制約を削除/削除してはいけません。それは、エラーメッセージが...

無関係な観察を意味するものです:

UPDATEのSELECTサブクエリで列を選択のポイントは何ですか?すなわち:rirr.NUM_SERIE_ULT, tri.T_USED_IMEI, rirr.celular, tri.MSISDN。最初の2つは結合条件に現れます。他の2つはTRAFICO_ACTUALIZARの定義に表示されます。しかし、それはあなたがこれらの4つの列のも別々にSELECTリストに表示する必要があることを意味しません。

+0

こんにちはMathguy、前のステートメントはOracle 10でうまくいきましたが、dbaが11にアップグレードされたときにquerysが停止したとき、私は問題を理解していません。私はただ一つのテーブルを他のテーブルの値で更新したい(case文)。しかし、このmomnetでは、私はこのクエリを変更する方法を知らない。 –

関連する問題