0

customer_ids の大きなリストのテーブルのコメント フィールドを更新する必要があります。コメントを更新して、既存のコメントを含め、別のテーブルにあるテキストとパスワードを追加する必要があります。これを行う方法がよくわかりません。

単一の顧客 ID に対してこれを行うコードを次に示します。100を超える顧客IDのリストに対してこれを行うにはどうすればよいですか? 私の最初の考えは、一時テーブルを作成し、そこにすべての顧客 ID を配置することですが、customer_id がクエリで 2 回使用されるため、その後のコーディング方法はまだわかりません。

Update Contract
SET Contract_Comment= Contract_Comment || '; 12/29/2008 Password `' ||
(SELECT Password FROM WLogin WHERE default_customer_id='1234' ) ||'`'|| ' reinstated per Mickey Mouse;'
WHERE Customer_id='1234'
4

3 に答える 3

1

さて、Contract_comment が customer_id を持っているか、または customer_id を持つテーブルに簡単に結合されていると仮定します....

update contract c
set contract_comment = contract_comment || '; 12/29/2008 Password ' ||
(select password from WLogin w where w.default_customer_id = c.customer_id) ||''|| ' reinstated per Mickey Mouse;' WHERE Customer_id in (1234, 4567).

または、最後のリストを別のサブセレクトに置き換えます...

WHERE Customer_id in (... から customer_id を選択)。

于 2008-12-24T17:30:28.577 に答える
0

トッドが述べたことすべてに同意し、以下を追加したいと思います。

明らかではないかもしれませんが、彼は (おそらく) あなたの投稿から、customer_id フィールドを文字列として扱っている別のエラーを修正しました。

IDを引用符で囲むことにより(少なくともあなたの例では)、比較する前にすべての行を文字列に変換するか、指定したIDを整数に変換するようにOracleに強制します-実際の値を決定するために実験する必要があります適用されるルール。

いずれにせよ、データ型に一貫性を持たせ、それをデータベースに任せないようにする方がはるかに優れています。

提供されたコードは 1 人の顧客向けであるとおっしゃいました。このコードをループで展開する場合は、構築中の SQL ステートメントに顧客 ID を連結するだけではなく、バインド変数を使用するようにしてください。PL/SQL でこれを行っている場合は、自動的に行われます。Java または別の言語では、自分でこれを行う必要があります。

于 2008-12-29T03:29:41.983 に答える
0

上記のトッドの答えは、一時テーブルに ID を格納している場合は IN (または EXISTS 句を使用してうまく機能します。次のように拡張します。

UPDATE contract c
   SET contract_comment = nvl2(contract_comment, contract_comment || '; ', '') || '12/29/2008 Password ' ||
                          NVL((SELECT PASSWORD
                                FROM wlogin p
                               WHERE p.default_customer_id = c.customer_id),
                              '<NULL>') || '' || ' reinstated per Mickey Mouse'
 WHERE EXISTS (SELECT 'x' FROM wlogin l WHERE l.default_customer_id = c.customer_id)

これにより、1) パスワードが null の場合に対処し、2) wlogin レコードを持つ顧客に対してのみ更新することが保証されます。

次のようなものを自由に追加してください。

AND EXISTS (SELECT 'y' FROM temp_ids_table t WHERE t.customer_id = c.customer_id)

これらの正しい答えに対してあなたが与えた功績に感謝します。

  • シチュー
于 2009-01-02T18:14:09.517 に答える