SEQUENCE 演算子は、擬似列 SEQUENCE の値を計算するために使用されます。
擬似列 SEQUENCE は CREATE SEQUENCE で作成されたシーケンスであり、下位の演算子が各行を出力するたびに計算が実行されます。
例:擬似列 SEQUENCE の現在値と次の値を計算する
obclient> CREATE TABLE t1(c1 INT, c2 INT);
Query OK, 0 rows affected
obclient> CREATE TABLE t2(c1 INT, c2 INT);
Query OK, 0 rows affected
obclient> CREATE SEQUENCE seq INCREMENT BY 1 START WITH 1;
Query OK, 0 rows affected
obclient> EXPLAIN SELECT seq.NEXTVAL, seq.CURRVAL FROM t1;
Query Plan:
|=====================================
|ID|OPERATOR |NAME|EST. ROWS|COST |
-------------------------------------
|0 |SEQUENCE | |100000 |77868|
|1 | TABLE SCAN|T1 |100000 |64066|
=====================================
Outputs & filters:
-------------------------------------
0 - output([SEQ.NEXTVAL], [SEQ.CURRVAL]), filter(nil)
1 - output([T1.__pk_increment]), filter(nil),
access([T1.__pk_increment]), partitions(p0)
上記の例では、実行計画表示において0番目の演算子 SEQUENCE はシーケンスの値を計算するために使用され、output([SEQ.NEXTVAL],[SEQ.CURRVAL] は SEQUENCE がシーケンスの現在値と次の値を計算する必要があることを指定しています。t1 テーブルがデータを1行出力するたびに、SEQUENCE はシーケンスの値を1回計算します。実行計画表示における outputs & filters 列には、SEQUENCE 演算子の出力情報が詳細に示されています。
| 情報名 | 意味 |
|---|---|
| output | この演算子が出力する列。SEQUENCE 演算子のパラメータ情報は以下のとおりです:
|
| filter | この演算子上のフィルター条件。例の SEQUENCE 演算子では filter が設定されていないため、nil となります。 |