リリース情報
第 3 章のこのセクションに、以下の注釈を追加してください。
SQL プロシージャーのコンテキスト内で使用される場合、以下の名前には
通常 ID で許可されている文字しか使用できません(別のコンテキストで使用される
場合はこの限りではありません)。
- condition-name
- label
- parameter-name
- procedure-name
- SQL-variable-name
- statement-name
この節の段落が以下のように変更されました。
URL パラメーターまたは関数結果のサイズは入力と出力のどちらでも
同じで、DATALINK 列の長さでバインドされることに注意してください。
ただし、返された URL 値にアクセス・トークンが接続されている場合が
あります。このような事象が起こりうる状況では、出力ロケーションにはアクセス・
トークンおよび DATALINK 列の長さに対する十分なストレージ・スペースが
なければなりません。そのため、完全拡張フォームで入力されるコメントと
URL を合わせた実際の長さは、出力ストレージ・スペースに適合するよう
制限しなければなりません。制限された長さを超えていると、このエラーが
出されます。
構文図が変更されました。
.-演算子--------------------------------.
V |
>>----+-----+---+-function--------------+--+-------------------><
+- + -+ +-(式)------------------+
'- - -' +-constant--------------+
+-column-name-----------+
+-host-variable---------+
+-special-register------+
+-(scalar-fullselect)---+
+-labeled-duration------+
+-case-expression-------+
+-cast-specification----+
+-dereference-operation-+
+-OLAP-function---------+
+-method-invocation-----+
+-subtype-treatment-----+
'-sequence-reference----'
operator
(1)
|---+-CONCAT------+---------------------------------------------|
+- / ---------+
+- * ---------+
+- + ---------+
'- - ---------'
注:
- CONCAT の同義語として || を使用することができます。
以下は、第 3 章「式」の「OLAP 関数」セクションへの訂正事項です。
aggregation-function
|--column-function--OVER---(--+------------------------------+-->
'-| window-partition-clause |--'
>----+--------------------------------------------------------------------+>
'-| window-order-clause |--+--------------------------------------+--'
'-| window-aggregation-group-clause |--'
>---------------------------------------------------------------|
window-order-clause
.-,-----------------------------------------------.
V .-| asc オプション |---. |
|---ORDER BY-----sort-key-expression--+----------------------+--+->
'-| desc オプション |--'
>---------------------------------------------------------------|
asc オプション
.-NULLS LAST--.
|---ASC--+-------------+----------------------------------------|
'-NULLS FIRST-'
desc オプション
.-NULLS FIRST--.
|---DESC--+--------------+--------------------------------------|
'-NULLS LAST---'
window-aggregation-group-clause
|---+-ROWS--+---+-| group-start |---+---------------------------|
'-RANGE-' +-| group-between |-+
'-| group-end |-----'
group-end
|---+-UNBOUNDED FOLLOWING-----------+---------------------------|
'-unsigned-constant--FOLLOWING--'
window-order-clause 記述で:
- NULLS FIRST
- ウィンドウ配列において、ソート順序は、すべての非 NULL 値の前に NULL 値が置かれます。
- NULLS LAST
- ウィンドウ配列において、ソート順序は、すべての非 NULL 値の後に NULL 値が置かれます。
window-aggregation-group-clause 記述で:
- window-aggregation-group-clause
- 行 R の集約グループは、R の区分の行の順序付け内の R に関連して定義されている
行のセットです。その文節は集約グループを指定します。
この文節が指定されていない場合、デフォルトは、累積集約結果を提供する
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW と同じになります。
- ROWS
- 集約グループがカウント行によって定義されることを示します。
- RANGE
- 集約グループがソート・キーからのオフセットによって定義されることを示します。
- group-start
- 集約グループの開始点を指定します。集約グループの終了は current row です。
group-start 文節の仕様は、"BETWEEN group-start AND
CURRENT ROW" 形式の group-between 文節と同じです。
- group-between
- ROWS または RANGE に基づいて、集約グループの開始および終了を指定します。
- group-end
- 集約グループの終了点を指定します。集約グループの開始は current row です。
group-end 文節の仕様は、"BETWEEN CURRENT ROW AND
group-end" 形式の group-between 文節と同じです。
- UNBOUNDED PRECEDING
- current row の前の区分全体を組み込みます。
これは、ROWS または RANGE のいずれかと一緒に指定できます。
window-order-clause 内の複数の sort-key-expressions と一緒に指定することもできます。
- UNBOUNDED FOLLOWING
- current row に続く区分全体を組み込みます。
これは、ROWS または RANGE のいずれかと一緒に指定できます。
window-order-clause 内の複数の sort-key-expressions と一緒に指定することもできます。
- CURRENT ROW
- current row に基づいて、集約グループの開始および終了を指定します。
ROWS が指定された場合、current row が集約グループ境界です。
RANGE が指定された場合、集約グループ境界には、sort-key-expressions に
current row と同じ値を持つ行のセットが含まれます。group-bound1 で
value FOLLOWING が指定されている場合、この文節を group-bound2 で
指定することはできません。
- value PRECEDING
- current row の前の行の範囲または行数のいずれかを指定します。
ROWS が指定された場合、value は行数を示す正の整数です。
RANGE が指定された場合、value のデータ・タイプは、
window-order-clause の sort-key-expression のタイプと互換性がなければなりません。
sort-key-expression は 1 つのみで、sort-key-expression のデータ・タイプは
減算を許可しなければなりません。group-bound1 が CURRENT ROW または value
FOLLOWING の場合、この文節を group-bound2 で指定することはできません。
- value FOLLOWING
- current row の後の行の範囲または行数のいずれかを指定します。
ROWS が指定された場合、value は行数を示す正の整数です。
RANGE が指定された場合、value のデータ・タイプは、
window-order-clause の sort-key-expression のタイプと互換性がなければなりません。
sort-key-expression は 1 つのみで、sort-key-expression のデータ・タイプは
加算を許可しなければなりません。
以下の情報を「式」セクションの終わり (「サブタイプの取り扱い」の後) に追加します。
sequence-reference
|--+-| nextval-expression |-+-----------------------------------|
'-| prevval-expression |-'
nextval-expression
|---NEXTVAL FOR--sequence-name----------------------------------|
prevval-expression
|---PREVVAL FOR--sequence-name----------------------------------|
- NEXTVAL FOR sequence-name
- NEXTVAL 式は、sequence-name で指定されたシーケンスの次の値を返します。
- PREVVAL FOR sequence-name
-
PREVVAL 式は、現行セッションで前のステートメントの指定された
シーケンスについて生成された最新の値を返します。
この値は、シーケンスの名前が指定されている PREVVAL 式を使用して、繰り返し参照することができます。
単一ステートメント内に同じシーケンスを指定している PREVVAL 式のインスタンスが
複数存在する可能性があり、それらはすべて同じ値を返します。
同じシーケンス名が指定されている NEXTVAL 式がすでに
現行ユーザー・セッションで (現在または前のトランザクションで) 参照されている場合のみ、
PREVVAL 式を使用できます (SQLSTATE 51035)。
- 注:
-
- NEXTVAL 式がシーケンスの名前を指定していれば、新しいシーケンス番号が生成されます。
ただし、照会の中に同じシーケンス名を指定している NEXTVAL 式のインスタンスが
複数ある場合、シーケンスのカウンターは結果の行ごとに 1 つずつ増えていきます。
- シーケンスについて生成された最新の値は、そのシーケンスの名前が
指定されている PREVVAL 式を使用して繰り返し参照できます。
単一ステートメント内に同じシーケンスを指定している PREVVAL 式のインスタンスが
複数存在する可能性があります。
- 以下に示すように、先頭行であれば NEXTVAL 式でシーケンス番号を参照 (これで
シーケンス値が生成) し、その他の行であれば PREVVAL 式でシーケンス番号を
参照 (この PREVVAL のインスタンスは、前のステートメントで NEXTVAL 式によって生成された
シーケンス値を参照) することによって、2 つの別々の表で固有キー値として同じ
シーケンス番号を使用できます。
INSERT INTO order(orderno, custno)
VALUES (NEXTVAL FOR order_seq, 123456);
INSERT INTO line_item (orderno, partno, quantity)
VALUES (PREVVAL FOR order_seq, 987654, 1);
- NEXTVAL および PREVVAL 式を指定できる例:
- select-statement または SELECT INTO ステートメント: ステートメントに DISTINCT キーワード、
GROUP BY 文節、ORDER BY 文節、UNION キーワード、INTERSECT キーワード、または EXCEPT キーワードが
含まれていないかぎり、select-clause 内
- INSERT ステートメント: VALUES 文節内
- INSERT ステートメント: fullselect の select-clause 内
- UPDATE ステートメント: SET 文節にある式の fullselect の select-clause 内 (探索条件付き、
または位置指定 UPDATE ステートメントのいずれか)
- VALUES INTO ステートメント: 式の fullselect の select-clause 内
- NEXTVAL および PREVVAL 式を指定できない (SQLSTATE 428F9) 例:
- 完全外部結合の結合条件
- CREATE TABLE または ALTER TABLE ステートメント内の列の DEFAULT 値
- CREATE TABLE または ALTER TABLE ステートメント内の生成された列定義
- CHECK 制約の条件
- CREATE TRIGGER ステートメント
- CREATE VIEW ステートメント
- CREATE METHOD ステートメント
- CREATE FUNCTION ステートメント
- また、以下の対象に NEXTVAL 式を指定することはできません (SQLSTATE 428F9)。
- CASE 式
- 総計関数のパラメーター・リスト
- 副照会
- DISTINCT 演算子を含む SELECT ステートメント
- 結合の結合条件
- SELECT ステートメントの GROUP BY 文節
- UNION、INTERSECT、または EXCEPT セット演算子を使用して他の SELECT ステートメントと
組み合わせられている SELECT ステートメント
- ネストされた表の式
- 表関数のパラメーター・リスト
- SELECT、DELETE、または UPDATE ステートメントの WHERE 文節
- ORDER BY 文節
- CALL ステートメントのパラメーター・リスト
- シーケンスについて値が生成されると、その値を再使用することができなくなるため、
次に値が必要になったときに新しい値が生成されます。
NEXTVAL 式が組み込まれているステートメントが失敗した場合でも、これが当てはまります。
- 列の VALUES リストにある NEXTVAL 式が INSERT ステートメントに組み込まれており、
INSERT 実行中のある時点でエラー (次のシーケンス値を生成しているときの問題、あるいは
別の列の値に問題があると考えられる) が起こった場合、挿入は失敗し、シーケンスについて
生成した値は再使用できないものと見なされます。
場合によっては、同じ INSERT ステートメントを再実行することによって、正しく
動作することもあります。
たとえば、NEXTVAL が使用されていた列の固有索引が存在する結果としてエラーが起こり、
すでに生成されているシーケンス値がその索引に存在するとします。
シーケンスについて生成される次の値は、索引には存在しない値になることが考えられるため、
後続の INSERT が正しく動作する可能性があります。
- シーケンスの値の生成において、そのシーケンスが最大値 (または降順シーケンスの
最小値) に達し、循環が許可されていない場合、エラーが起こります (SQLSTATE 23522)。
この場合、ユーザーはシーケンスを ALTER して許容値の範囲を拡張、またはシーケンスの
循環を可能にでき、あるいは値の範囲がより大きな、異なるデータ・タイプを持つ新しい
シーケンスを DROP および CREATE することができます。
たとえば、シーケンスがデータ・タイプ SMALLINT で定義されていて、その結果、
そのシーケンスが割り当て可能な値を使い果たしてしまうことがあります。
シーケンスを INTEGER として再定義するため、そのシーケンスを新しい定義でドロップ
および再作成しなければならない場合があります。
- カーソルの SELECT ステートメントで PREVVAL を参照するように
指定されていると、カーソルを開く前に指定のシーケンスに生成された
値が参照されます。ただしカーソルを閉じると、後続のステートメントで指定されたシーケンスに
対して PREVVAL が返す値に影響が出たり、カーソルを再び開いたときに
同じステートメントに対して PREVVAL が返す値に影響がでることがあります。
これは、カーソルの SELECT ステートメントに同じシーケンス名の NEXTVAL の参照がある
場合に起こります。
これらの例では、表 "order" があり、以下のようにシーケンス "order_seq" が作成されることが
前提となっています。
CREATE SEQUENCE order_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE
NOCYCLE
CACHE 24
- 上で作成されたシーケンスの NEXTVAL 式で "order_seq" シーケンス番号を生成する例:
INSERT INTO order(orderno, custno)
VALUES (NEXTVAL FOR order_seq, 123456);
または、
UPDATE order
SET orderno = NEXTVAL FOR order_seq
WHERE custno = 123456;
または、
VALUES NEXTVAL FOR order_seq INTO :hv_seq;
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]