データベースの更新時に、多数の行に同じ変更を加えることがよくあります。個々の行を更新する反復作業が必要なくなると助かります。この目的のために、REPEATコマンドを使用します。
単一リクエストを使用した行の更新
特定の式ですべての行を記述してから、単一のリクエストを使用してそれらの行をすべて更新できます。例えば、次のリクエストは、データベースPersonnelの部門600の全従業員の給与を更新します。
update personnel.employee set salary=salary*1.07 where deptno=600;
複数リクエストを使用した行の更新
式ですべての行を記述できない場合、それらの行を個々に記述しなければなりません。例えば、次のリクエストは、2人の従業員の給与を更新します。
update personnel.employee set salary=salary*1.07 where empno = 10006;
update personnel.employee set salary=salary*1.07 where empno = 10013;
この方法は、更新が2、3の場合は便利ですが、数百ある場合は、スクリプトが非常に長くなります。また、柔軟性が非常に低くなります。別の従業員リストでスクリプトを再利用する場合は各エントリを編集する必要が生じます。
ファイルのインポートによる行の更新
さらに優れた方法として、従業員番号 (empno)10006および10013を表わすデータ形式の2つのレコードが含まれるファイル(RAISEEMPなど)を別個に作成するという方法があります。その後、BTEQ IMPORTコマンドとREPEATコマンドを併用して、データベース内の行を更新します。
ファイルのインポート時のREPEATコマンドの使用
リクエストの前にREPEATコマンドを使用して、実行される合計リクエスト数を指定します。
次のBTEQ REPEATコマンドを使用したBTEQスクリプトは、文字形式ファイルRAISEEMPを開き、更新シーケンスを2回繰り返します。
.IMPORT data file=raiseemp .REPEAT 2 using enumb (char(5)) update personnel.employee set salary=salary*1.07 where empno = :enumb;
従業員ごとに、BTEQはRAISEEMPファイルからenumbと呼ばれる変数の値を読み取り、EmpNoがenumbの値と等しい行に対してUPDATEを実行します。
もともとBTEQ EXPORTコマンドを使用してエクスポートされたファイルを、IMPORTコマンドのソースとして使用する際に、プラットフォーム タイプが違っている場合は、両方のプラットフォームのエンディアン タイプが同じであることを確認してください。この情報は、SHOW CONTROLSコマンド出力の「Client Platform Byte Order」タブから確認できます。