キュー テーブルを使用する前に、キュー テーブルのデフォルトのFIFO順序を変更する必要があるかもしれません。たとえば、特定のアプリケーションで、キュー テーブルのいくつかの行は優先度が高く即時に処理する必要があり、他の行は重要度が低い場合があります。通常のSQL INSERTおよびUPDATE文を使用してQITS値を変更することにより、キュー内の行順序を変更できます。
行のQITS値を小さくするには、その行をキューの前方、消費に近い方向に移動します。反対に行のQITS値を大きくすることにより、その行をキューの後方、消費から遠い方向に移動できます。
ブラウズ モードで使用可能なさまざまなピーク機能を使用して(キュー テーブルのブラウズを参照)、既存のQITS値がキュー内にどのように分散しているかを判別できます。
新規行に対して人為的なキュー位置を作成するには、SQL INSERT文を使用します。
システムで行のQITS値をデフォルトに基づいて作成する代わりに、開発者が指定するQITS値に基づいて行をキュー テーブルに挿入できます。以下の例では、いくつかの行がorder_QTという名前のキュー テーブルに2004年5月25日にすでに挿入されています。この例では、より早い疑似的なQITS値をINSERTに指定することにより、新規行がキュー内の既存の行よりも前の位置に挿入されるように要求します。
INSERT INTO order_QT (qits, qty, item, description, price) VALUES ('2004-05-25 00:00:00', 1, 'RLLB1', '1 doz BASEBALLS', 25.00);
すでにキュー テーブルに存在する行に対して人為的なキュー位置を作成するには、SQL UPDATE文を使用します。
- INTERVAL定数の既存値を変更することにより。
- 特定の値を割り当てることにより。
以下の例では、キューID番号が29の行のQITS値を、QITSタイムスタンプ値をINTERVAL定数だけ減算することによって更新します。
UPDATE order_QT SET qits = qits - INTERVAL '2' HOUR WHERE qsn = 29;
以下の例では、同じ行のQITS値を、特定のタイムスタンプ値によって更新します。
UPDATE order_QT SET qits = '2004-05-25 00:00:00' WHERE qsn = 29;
UPDATE文またはMERGE文のUpsert形式を使用してキュー テーブルの行を配列することもできます。
以下の例では、UPDATE文のUpsert形式を使用して、order_QTテーブルにあるオーダー番号値がBZ22905789の既存の行のQITSタイムスタンプ値を3時間増加させます。そのような行が存在しない場合、システムは条件付きINSERT文のVALUES句で指定された値を使用して、新規の行をテーブルに挿入します。
UPDATE order_QT SET qits = qits + INTERVAL '3' HOUR WHERE order_num = 'BZ22905789' ELSE INSERT INTO order_QT (qits, order_num, qty, item, description, price) VALUES ('2004-05-26 00:00:00', 'BZ22905789', 1, 'RCG11', 'Catcher Glove', 55.00);
キュー テーブルでの更新操作は、アプリケーションの例外処理ロジックの一部であり、通常生じる事柄ないので、注意が必要です。キュー テーブルを更新操作によって変更するとき、その実行時キャッシュは除去されるので、システムはテーブルの全テーブル スキャンを実行してそのキャッシュを再構築します。キュー テーブルの実行時キャッシュは、PEごとに約20,000行項目に限定されています(正確な限度は、PEごとに1 MBの行項目)。追加のカテゴリ別の限度は、 PEごとに約2,000の行項目、およびPEごとに厳密に100のキュー テーブル項目です。
データの入っていないキュー テーブルで行を更新しても、そのキュー テーブルに行が入力されることを待機している遅延状態のトランザクションには影響がありません。