0

as400 の sql を使用して、200 億を超えるレコードを含むファイルを更新しています。

   UPDATE "LIBRARY"/AR#RMTPRL9 
   SET SENTFLAG = ' ', DATESENT = '0001-01-01', TIMESENT = '00:00:00', XMITT# = 0, LOCATION = 'PACI175A', ARBATCH# = ' ‘ 
   WHERE LOCATION = 'PACI173A' AND ARBATCH# = 'PAR1981181'

時間を節約するために、単一のクエリで arbatch# のさまざまな値に対してこの更新を実行するにはどうすればよいですか?

例: ARBATCH# 値 PAR19811284、PAR18736765 などに同じ更新ステートメントを使用したいと思います。

再編集:

次のデータがあります:(これらの値をEFGの場所に移動します)

  LOCATION     ARBATCH#
  ABC          1234
  ABC          5468
  ABC          8765
  XYZ          6759
  XYZ          5432

ここで、次のようにレコードの更新を実行するクエリを実現したいと思います。

 UPDATE "LIBRARY"/AR#RMTPRL9 
   SET SENTFLAG = ' ', DATESENT = '0001-01-01', TIMESENT = '00:00:00', XMITT# = 0, LOCATION = 'EFG', ARBATCH# = ' ‘ 
   WHERE LOCATION = 'ABC' AND ARBATCH# = '1234'

このような更新に「in」を使用するにはどうすればよいですか

4

2 に答える 2

0

あなたはかなり些細なことで「ごまかす」ことができます:

UPDATE "LIBRARY"/AR#RMTPRL9 
SET SENTFLAG = ' ', 
    DATESENT = '0001-01-01', TIMESENT = '00:00:00', 
    XMITT# = 0, 
    LOCATION = 'EFG', 
    ARBATCH# = ' ' 
WHERE (LOCATION, ARBATCH#) IN (VALUES ('ABC', '1234'),
                                      ('ABC', '5468'),
                                      ('ABC', '8765'),
                                      ('XYZ', '6759'),
                                      ('XYZ', '5432'))

(ステートメントは私のローカルiSeries DB2インスタンスで実行されます)

ちなみに、単一のタイムスタンプに結合する必要があり、おそらくnull許容型でもありますDATESENTTIMESENT個人的sentAtには、列の種類などではなく、名前のようなものが好きです。

于 2013-02-04T17:20:44.860 に答える
0

あなたは使用することができますin

   UPDATE "LIBRARY"/AR#RMTPRL9 
   SET SENTFLAG = ' ', DATESENT = '0001-01-01', 
   TIMESENT = '00:00:00', XMITT# = 0, LOCATION = 'PACI175A', ARBATCH# = ' ' 
   WHERE LOCATION = 'PACI173A' AND ARBATCH# IN( 'PAR1981181', PAR18736765 etc ...)
于 2013-02-03T14:22:16.890 に答える