0

特定の permeters に基づいて特定のレコードを更新する必要があるテーブルのクエリを作成しようとしています。いくつかのネストされた選択といくつかのネストされた部分文字列があり、トラブルシューティングが困難になっていると思います。これらのORA-01427のいくつかを解決しました:単一行のサブクエリはすでに複数の行の問題を返しますが、これを見つけることができないようです。基本的に、スクリプトが行っていることは、レコードから 2 つの列を取得し、さまざまな基準に基づいて、異なるテーブルに含まれる別のレコードに基づいてそれらを更新することです。以下は私が使用している現在のコードです:

UPDATE CMC_SBEL_ELIG_ENT p
SET (p.CSPI_ID, p.SBEL_EFF_DT) =
(SELECT co.new_plan, co.ch_dt
   FROM sbsb_plan_conv co, cmc_sbel_elig_ent p
   WHERE co.ch_dt > p.sbel_eff_dt
     and co.ch_dt < current_date
     AND co.new_plan <> p.CSPI_ID
     AND co.sbsb_ck = p.sbsb_ck
     AND p.cspi_id IN co.OLD_PLAN
     and p.SBEL_ELIG_TYPE IN ('tm','ce','TM','CE')
     )
WHERE (p.cspd_cat IN (
   select unique substr(o.old_plan, 1, 1) 
      from facets_ws.sbsb_plan_conv o
      where 
        substr(o.old_plan, 1, 1) IN (
            select substr(y.new_plan, 1, 1)   
            from sbsb_plan_conv y, cmc_sbel_elig_ent u
            where y.sbsb_ck = u.sbsb_ck
              AND (p.SBEL_ELIG_TYPE IN ('tm','ce','TM','CE'))

              and ((substr(y.new_plan, 1, 1) = 'M'
                and substr(y.new_plan, 1, 1) != 'R'
                and substr(y.new_plan, 1, 1) != 'D') 

                or (substr(y.new_plan, 1, 1) = 'R'
                and substr(y.new_plan, 1, 1) != 'M'
                and substr(y.new_plan, 1, 1) != 'D')

                or (substr(y.new_plan, 1, 1) = 'D'
                and substr(y.new_plan, 1, 1) != 'R'
                and substr(y.new_plan, 1, 1) != 'M'))

            and o.sbsb_ck = p.sbsb_ck)
      )
  );

2 つの select ステートメントで個々のクエリを実行すると、すべて明確な一意の値が返されます。したがって、それらが問題ではないと確信しています。

4

1 に答える 1

0

次のクエリを実行してみてください:-

SELECT count(co.new_plan)
  FROM sbsb_plan_conv co, cmc_sbel_elig_ent p
WHERE co.ch_dt > p.sbel_eff_dt
 and co.ch_dt < current_date
 AND co.new_plan <> p.CSPI_ID
 AND co.sbsb_ck = p.sbsb_ck
 AND p.cspi_id IN co.OLD_PLAN
 and p.SBEL_ELIG_TYPE IN ('tm','ce','TM','CE')
 group by co.new_plan;

上記が複数の行を返す場合、または複数のカウントを返す場合は、DISTINCT / MIN / ROWNUM を使用するか、その他の手法を使用するようにクエリを変更する必要がある場合があります。

于 2012-12-28T02:50:24.353 に答える