0

ループ内の作業領域から DB テーブルを変更するための最適なソリューションを見つけたいと考えています。

それを達成するにはいくつかの方法があります。

LOOP AT itab INTO wa.
 wa-flag = 'X'.
 MODIFY zblabla FROM wa. 
ENDLOOP.

およびフィールド記号;

LOOP AT ITAB ASSIGNING <WA>.
  <WA>-flag = 'X'.
ENDLOOP.

または、内部テーブル全体から DBtable を変更する必要がありますか?

modify zblabla from it. 

エントリ数が 50 未満の場合、どちらがより良いアプローチかはわかりません。(エントリー数が多い方がいいのかも知りたいです。)

ありがとう。

4

3 に答える 3

4

最初の例 ( の例LOOP AT ITAB ASSIGNING <WA>) は、実際にはデータベースを変更しません。メモリ内のデータのみを変更します。ただし、後でUPDATE zblabla FROM TABLE itab.テーブル全体を一度にデータベースに戻すことができます。

テーブルのすべての行が変更された場合、これはすべての行を個別に変更するよりもはるかに高速です。しかし、テーブルの数行だけが実際に異なる場合、これは非常に無駄であり、 を使用して実際に変更された行のみを更新する方が高速である可能性がありますMODIFY

アプリケーションサーバーにロードすることなくデータベースの内容を更新するために時々使用できる別のオプションは、UPDATE database_table SET field = value WHERE conditionコマンドです。

UPDATE zblabla SET flag = 'X'.

何もしなくても、データベースのテーブルのすべての行に対してフラグを「X」に設定しますSELECT

あなたの例では、それは断然最速の方法ですが、現実の世界では、それほど些細な問題はめったにありません。

UPDATE ... SET ... WHERE ...MODIFYテーブルが非常に広く、変更したいフィールドを指定できるため、ほとんどを変更していない場合は、単一のエントリよりも優先する必要があります。SELECT *また、データを取得せず、個々のフィールドのみを照会する場合にも使用する必要があります。

于 2015-07-24T12:05:55.913 に答える