0

将来期限が来るアクションのテーブルがあります。ケースの期日を含むすべてのケースを保持する 2 番目のテーブルがあります。そして、数字を保持する 3 番目のテーブルがあります。

問題は次のとおりです。私たちのシステムは、テーブルに将来のアクションを自動的に入力します。ただし、一部のクライアントについては、これらの日付を変更する必要があります。このための更新クエリを作成し、これをスケジューラで実行したいと考えました。しかし、私は現時点で立ち往生しています。

これまでのコードは次のとおりです。

UPDATE proxima_gestion p 
SET    fecha = (SELECT To_char(d.f_ult_vencim + c.hrem01, 'yyyyMMdd') 
                FROM   deuda d, 
                       c4u_activity_dates c, 
                       proxima_gestion p 
                WHERE  d.codigo_cliente = c.codigo_cliente 
                       AND p.n_expediente = d.n_expediente 
                       AND d.saldo > 1000 
                       AND p.tipo_gestion_id = 914 
                       AND p.codigo_oficina = 33 
                       AND d.f_ult_vencim > sysdate) 
WHERE  EXISTS (SELECT * 
               FROM   proxima_gestion p, 
                      deuda d 
               WHERE  p.n_expediente = d.n_expediente 
                      AND d.saldo > 1000 
                      AND p.tipo_gestion_id = 914 
                      AND p.codigo_oficina = 33 
                      AND d.f_ult_vencim > sysdate) 

フィールド fecha は、現在のアクション日付です。残念ながら、これは日付ではなく文字として保存されます。そのため、日付を char に戻す必要があります。F_ult_vencim は期日で、hrem01 は期日からアクションを配置する必要がある日数です。(たとえば、これを 10 にして、新しい日付を期日の 10 日後にすることができます)

それとは別に、日付を変更する必要がある場合には、さらにいくつかの基準があります (特定の債権者、特定の部門、将来のケースのみ、特定の金額から開始、特定のアクション タイプのみ)。

ただし、このクエリを実行しようとすると、エラー メッセージ ORA-01427: single-row subquery returns more than one row が表示されます。

両方のサブクエリを別々に実行すると、両方から 2 つの結果が得られます。私が達成しようとしているのは、これら 2 つのクエリを接続し、フィールドを新しい値に更新することです。期日はそれぞれ異なるため、この値はケースごとに異なります。

これは可能ですか?もしそうなら、どのように?

4

1 に答える 1

0

最初の SELECT が更新されるテーブルの各行に対して複数の行を返すため、エラーが発生しています。

最初に目にするのは、UPDATE のテーブルのエイリアスが両方の SELECT のエイリアスと同じであることです (p)。したがって、サブクエリ内の p への参照はすべて、外部クエリではなくサブクエリ内のproxima_gestion を参照しています。つまり、サブクエリは、UPDATE に必要な外部クエリに依存しません。

両方のサブクエリで FROM から "proxima_gestion p" を削除してみてください。p への参照は、外側の UPDATE クエリへの参照になります。

于 2013-05-30T16:34:17.600 に答える