9.11 SEQUENCE列
LOOKUPテーブルのSEQUENCE列の設定と活用を説明します。
LOOKUPのSEQUENCE列の定義
SEQUENCE列は、NEXTVALで入力番号を生成するために使用します。
LOOKUPテーブルはPRIMARY KEYが必須のため、
SEQUENCE列自体をPRIMARY KEYにするか、他の列をPRIMARY KEYにするかも決めます。
この番号を、イベント発生時刻の順序と同じものとして解釈しないでください。
SEQUENCE列が必要な理由
同時刻に発生したアラームや管理履歴を、別々の行として識別する場合に使用できます。 LOOKUPは全行をメモリに保持するため、この例は小規模な管理履歴を対象とします。 長期間蓄積する大量イベントには、LOGテーブルを検討してください。
SEQUENCE列の宣言
SEQUENCEはLONGまたはINT64型の列に指定できます。
PROPERTY句のSEQUENCEパラメーターで開始値を設定します。この属性はLOOKUPテーブルだけで使用できます。
CREATE LOOKUP TABLE ch9_sequence (
seq LONG PROPERTY(SEQUENCE=1) PRIMARY KEY,
sensor_id VARCHAR(40),
alarm_type VARCHAR(20),
occurred_at DATETIME,
message VARCHAR(200)
);SEQUENCE=1: seq列が1から自動増分します。- 開始値は1以上4,294,967,295未満の整数だけを指定できます。
- 上の例のようにSEQUENCE列をPRIMARY KEYにすると、番号の一意性も保証されます。
SEQUENCE値の挿入: NEXTVAL()
サーバーはSEQUENCE列ごとに次に使用する番号をカウンターで保持し、NEXTVAL()はその値を取得して挿入します。
毎回テーブルの最大値を再計算することはありません。
-- NEXTVAL()で自動増分値を入力
INSERT INTO ch9_sequence (seq, sensor_id, alarm_type, occurred_at, message)
VALUES (NEXTVAL(seq), 'TEMP-01', 'HIGH', NOW, '온도 초과');
INSERT INTO ch9_sequence (seq, sensor_id, alarm_type, occurred_at, message)
VALUES (NEXTVAL(seq), 'PRESS-02', 'LOW', NOW, '압력 저하');
-- 検索
SELECT * FROM ch9_sequence ORDER BY seq;
-- seq=1、seq=2の順にソート一般列と同様の直接値指定
SEQUENCE列に値を直接入力することもできます。
入力値が現在のカウンターより大きければ、カウンターは入力値 + 1に進みます。
現在のカウンターより小さい値を入力しても、カウンターは減少しません。
-- 値を直接指定(nextvalは不要)
INSERT INTO ch9_sequence (seq, sensor_id, alarm_type, occurred_at, message)
VALUES (100, 'FLOW-03', 'NORMAL', NOW, '정상 복구');
-- 以後のNEXTVAL()呼び出しは101になります
INSERT INTO ch9_sequence (seq, sensor_id, alarm_type, occurred_at, message)
VALUES (NEXTVAL(seq), 'TEMP-01', 'NORMAL', NOW, '온도 정상');
-- seq = 101活用パターン
-- 最新アラームN件を検索
SELECT * FROM ch9_sequence ORDER BY seq DESC LIMIT 10;
-- 特定のseq以降のアラームを検索
SELECT * FROM ch9_sequence WHERE seq > 500 ORDER BY seq;
-- アラーム確認処理(PKによるUPDATE)
UPDATE ch9_sequence SET alarm_type = 'ACKNOWLEDGED'
WHERE seq = 101;実習テーブルは、次のように削除します。
DROP TABLE ch9_sequence;注意事項
- SEQUENCE列は
LONG、INT64型をサポートします。 - 開始値は正数(
SEQUENCE=1以上)のみ許可され、4,294,967,295未満である必要があります。 - カウンターはサーバーに保存され、増加方向だけに進みます。最大のseq行をDELETEしても番号は再使用されないため、欠番が生じる場合があります。
- SEQUENCE列をPRIMARY KEYにしない場合、
NEXTVAL()を使わずに重複値を直接入力できます。 番号の一意性が必要なら、この列をPRIMARY KEYに指定してください。
最終更新日