>サイトトップへ >このカテゴリの一覧へ

185

X 3005-2:2015 (ISO/IEC 9075-2:2011)

マ文

>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識別子>に適

用可能な権限は,CR によって参照される列に関する SELECT を含まなければならない。

ii)  そうでなければ,現行の権限は,CR によって参照される列に関する SELECT を含まなければ

ならない。

3)  CR の修飾する表が<データ変更差分表> DCDT の結果ならば,DCDT に単純に含まれる<データ変更

>の当該表を ST とし,CR に対応する ST の列を STC とする。

場合:

a) SQL

SECURITY

INVOKER を指定する<SQL ルーチン指定>を介在しないで,CR が<SQL スキーマ

>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識別子>に適用可

能な権限は,STC に関する SELECT を含まなければならない。

b)  そうでなければ,現行の権限は,STC に関する SELECT を含まなければならない。

一般規則

1)  被問合せ列参照を QCR とする。QCR の修飾する表を QT とし,QCR の基底指示対象として参照さ

れる QT の列を とする。QCR の値は,次のとおりに決定される。

a)  QCR が通常列参照ならば,QCR は,QT の与えられた行中の の値を示す。

b)  QCR がグループ内変動列参照ならば,QCR は,<集合関数指定>の引数の入力を構成するために

用いる QCR の修飾する問合せの与えられたグループの行中の の値を示す。

c)

QCR がグループ不変列参照ならば,QCR は,QCR の修飾する問合せの与えられたグループのど

の行中の の値とも異ならない値を示す。QCR の最特定型が,文字列,時刻帯付き日時又は利用

者定義型ならば,正確な値が,処理系依存の方法で選ばれる。

適合性規則

1)  機能 F821“局所表参照”なしでは,適合する SQL 言語は,MODULE を単純に含む<列参照>を含ん

ではならない。

2)  機能 T301“関数従属性”なしでは,適合する SQL 言語中で,QCR がグループ不変列参照ならば,

QCR は,QCR の修飾する問合せのグループ化列への参照でなければならない。

6.8

<SQL パラメタ参照>

機能

<SQL パラメタ参照> (<SQL parameter reference>)  は,SQL パラメタを参照する。

形式

<SQL パラメタ参照> ::=

  <基本識別子鎖>

構文規則

1) <SQL パラメタ参照>は,SQL パラメタ参照である<基本識別子鎖>でなければならない。

2) <SQL パラメタ参照>の宣言型は,それが参照する SQL パラメタの宣言型とする。

アクセス規則

なし。 

一般規則

なし。 

適合性規則

なし。 


186

X 3005-2:2015 (ISO/IEC 9075-2:2011)

6.9

<集合関数指定>

機能

<集合関数指定> (< set function specification>)  は,引数への関数の適用によって導出される値を指定する。

形式

<集合関数指定> ::=

  <集約関数>

 |

<グループ化操作>

<グループ化操作> ::=

  GROUPING  <左括弧> <列参照>

    [  {  <コンマ> <列参照> }... ] <右括弧>

構文規則

1) <集約関数>が<一般集合関数>を指定するならば,<一般集合関数>に単純に含まれる<値式>は,<集

合関数指定

>又は<問合せ式>を含んではならない。

2) <集約関数>が<2 項集合関数>を指定するならば,<2 項集合関数>に単純に含まれる<従属変数式>も,

<独立変数式>も,<集合関数指定>又は<問合せ式>を含んではならない。

3) <集合関数指定>  SFE に単純に含まれる<値式>  VE は,SFE が<順序付け集合関数>でないか,又は

VE が<WITHIN GROUP 指定>に単純に含まれるならば,

SFE の集約化引数  (aggregated argument)  と

する。そうでなければ,VE は,SFE の非集約化引数  (non-aggregated argument)  とする。

4) <集合関数指定> SFS の集約化引数に含まれる列参照 CR を,

SFS の集約化列参照  (aggregated column 

reference)  と呼ぶ。

5) <集約関数>が<FILTER 句>を指定するならば,<FILTER 句>に直に含まれる<探索条件>は,<集合関

数指定

>を含んではならない。

6) <集合関数指定> SFS の集約問合せ  (aggregation query)  は,次のとおりに決定される。

場合:

a)  SFS が集約化列参照をもたないならば,SFS の集約問合せは,SFS を含む最も内側の<問合せ指

>とする。

b)  そうでなければ,

SFS の集約問合せは,

SFS の集約化列参照の最も内側の修飾する問合せとする。

7)  SFS は,集約問合せをもたなければならず,その集約問合せの<HAVING 句>,<WINDOW 句>又は<

選択リスト

>に含まれなければならない。

8)  集約化列参照の修飾する問合せ QQ が SFS の集約問合せでないような SFS の集約化列参照を CR 

する。QQ がグループ化され,かつ,QQ の<HAVING 句>,<WINDOW 句>又は<選択リスト>に SFS

が含まれるならば,CR は,QQ のグループ化列に関数従属でなければならない。

注記 142  先行する構文規則は,“6.7 <列参照>”中のより包括的なものから得られる。

9) <集約関数>が指定されるならば,結果の宣言型は,<集約関数>の宣言型とする。

10) <グループ化操作>が指定されるならば,次による。

a) <グループ化操作>を含む<集合関数指定>の集約問合せを とする。各<列参照>は,のグループ

化列を参照しなければならない。

b)  結果の宣言型は,処理系定義の精度及び 0 の位取りをもつ真数とする。

c)

二つ以上の

<列参照>が指定されるならば,<列参照>の個数を とし,番目の<列参照>を CRi

1 ≤ i ≤ とする。


187

X 3005-2:2015 (ISO/IEC 9075-2:2011)

GROUPING ( CR1, ..., CRN-1, CRN )

は,次の指定と等価とする。

CAST ( ( 2 * GROUPING ( CR1, ..., CRN-1 ) + GROUPING ( CRN ) ) AS IDT )

ここで,IDT は,結果の処理系定義の宣言型とする。

アクセス規則

なし。 

一般規則

1) <集約関数>が指定されるならば,その結果は,<集約関数>の値とする。

注記 143  <グループ化操作>の値は,“7.9 <GROUP BY 句>”で定義している構文変換によって計算

される。

適合性規則

1)  機能 T431“拡張グループ化能力”なしでは,適合する SQL 言語は,<グループ化操作>を含んでは

ならない。

2)  機能 T433“複数引数 GROUPING 関数”なしでは,適合する SQL 言語は,二つ以上の<列参照>を

含む

<グループ化操作>を含んではならない。

3)  機能 T301“関数従属性”なしでは,適合する SQL 言語中で,CR が SFS の集約化列参照であり,

CR の修飾する問合せ QQ が SFS の集約問合せでなく,

QQ がグループ化され,

かつ,QQ の<HAVING

>,<WINDOW 句>又は<選択リスト>に SFS が含まれるならば,CR は,QQ のグループ化列への

参照でなければならない。

6.10  <ウィンドウ関数>

細分箇条署名

“<ウィンドウ関数>” [構文規則] (

パラメタ: “WINFUNC”,

) 戻り: “TRANSFORM”

機能

<ウィンドウ関数> (<window function>)  は,ウィンドウ関数を指定する。

形式

<ウィンドウ関数> ::=

  <ウィンドウ関数種別> OVER <ウィンドウ名又は指定>

<ウィンドウ関数種別> ::=

  <順位関数種別> <左括弧> <右括弧>

| ROW_NUMBER <左括弧> <右括弧>

 |

<集約関数>

 |

<NTILE 関数>

 |

<LEAD 又は LAG 関数>

 |

<FIRST_VALUE 又は LAST_VALUE 関数>

 |

<NTH_VALUE 関数>

<順位関数種別> ::=

  RANK

 |

DENSE_RANK


188

X 3005-2:2015 (ISO/IEC 9075-2:2011)

 |

PERCENT_RANK

 |

CUME_DIST

<NTILE 関数> ::=

  NTILE  <左括弧> <タイル数> <右括弧>

<タイル数> ::=

  <単純値指定>

 |

<動的パラメタ指定>

<LEAD 又は LAG 関数> ::=

  <LEAD 又は LAG> <左括弧> <LEAD 又は LAG の範囲>

     [ <コンマ> <変位> [ <コンマ> <既定式> ] ] <右括弧>

     [ <ナルの扱い> ]

<LEAD 又は LAG> ::=

  LEAD  |  LAG

<LEAD 又は LAG の範囲> ::=

  <値式>

<変位> ::=

  <真数定数>

<既定式> ::=

  <値式>

<ナルの扱い> ::=

  RESPECT NULLS | IGNORE NULLS

<FIRST_VALUE 又は LAST_VALUE 関数> ::=

  <FIRST_VALUE 又は LAST_VALUE> <左括弧> <値式> <右括弧> [ <ナルの扱い> ]

<FIRST_VALUE 又は LAST_VALUE> ::=

  FIRST_VALUE  |  LAST_VALUE

<NTH_VALUE 関数> ::=

  NTH_VALUE  <左括弧> <値式> <コンマ> <n 番目の行> <右括弧>

     [  <FROM  FIRST 又は FROM LAST> ] [ <ナルの扱い> ]

<n 番目の行> ::=

  <単純値指定>

 |

<動的パラメタ指定>

<FROM FIRST 又は FROM LAST> ::=

  FROM  FIRST

| FROM LAST

<ウィンドウ名又は指定> ::=

  <ウィンドウ名>

 |

<句内ウィンドウ指定>

<句内ウィンドウ指定> ::=

  <ウィンドウ指定>

構文規則


189

X 3005-2:2015 (ISO/IEC 9075-2:2011)

1)  この細分箇条の構文規則の適用では,WINFUNC を OF とする。この細分箇条の適用の結果は,適

切に,QSX 又は SSSRX とし,それは,TRANSFORM として戻される。

2) <ウィンドウ関数>に単純に含まれる<集約関数>は,<仮説集合関数>を単純に含んではならない。

3) <ウィンドウ関数>を OF とする。

4)  場合:

a)  OF が<ORDER BY 句>に含まれるならば,その<ORDER BY 句>は,単純表問合せである<問合せ

>に単純に含まれなければならない。“7.13 <問合せ式>”で規定するとおりに,単純表問合せの

構文変換の結果中に含まれる

<表式>を TE とする。

b)  そうでなければ,OF は,<問合せ指定> QS 又は<SELECT 文:単一行> SSSR に直に含まれる<選

択リスト

>に含まれなければならない。OF を含む QS に含まれる最も内側の<問合せ指定>を QSS

とする。QSS 又は SSSR に直に含まれる<表式>を TE とする。

5)  OF は,外への参照又は<問合せ式>を含んではならない。

6) <ウィンドウ名又は指定>を WNS とする。WNS によって定義されるウィンドウを記述するウィンド

ウ構造記述子を WDX とする。

7) <NTILE 関数>,<LEAD 又は LAG 関数>,<順位関数種別>又は ROW_NUMBER が指定されるなら

ば,次による。

a) <NTILE 関数>,<LEAD 又は LAG 関数>,RANK 又は DENSE_RANK が指定されるならば,WDX

のウィンドウ順序付け句 WOC が存在しなければならない。

b)  WDX のウィンドウ枠付け句が存在してはならない。

c)

場合:

i)

WNS が<ウィンドウ名>ならば,WNS を WNS1 とする。

ii)  そうでなければ,WNS に含まれる<ウィンドウ指定詳細>を WNS1 とする。

d)  RANK( ) OVER WNS は,次と等価とする。

( COUNT (*) OVER (

WNS1 RANGE UNBOUNDED PRECEDING )

- COUNT (*) OVER (

WNS1 RANGE CURRENT ROW ) + 1 )

e) DENSE_RANK が指定されるならば,次による。

i)

WOC に単純に含まれる<ソートキー>である<値式>の列挙を VE

1, . . . , VEN とする。

ii)  DENSE_RANK( ) OVER WNS は,次の<ウィンドウ関数>と等価とする。

COUNT (DISTINCT ROW (

VE

1

, ... ,

VE

N

 ) )

OVER (

WNS1 RANGE UNBOUNDED PRECEDING)

f)

ROW_NUMBER( ) OVER

WNS は,次の

<ウィンドウ関数>と等価とする。

COUNT (*) OVER (

WNS1 ROWS UNBOUNDED PRECEDING)

g)  処理系定義の精度をもつ概数型を ANT1 とする。PERCENT_RANK( ) OVER WNS は,次の指定

と等価とする。

CASE

  WHEN COUNT(*) OVER (

WNS1 RANGE BETWEEN UNBOUNDED PRECEDING

                                              AND  UNBOUNDED  FOLLOWING)  =  1

  THEN CAST (0 AS

ANT1)

  ELSE

        (CAST  (RANK  ()  OVER  (

WNS1) AS ANT1)-1) /


190

X 3005-2:2015 (ISO/IEC 9075-2:2011)

        (COUNT  (*)  OVER  (

WNS1 RANGE BETWEEN UNBOUNDED PRECEDING

                                              AND  UNBOUNDED  FOLLOWING)-1)

END

h)  処理系定義の精度をもつ概数型を ANT2 とする。CUME_DIST( ) OVER WNS は,次の指定と等

価とする。

 ( CAST ( COUNT (*) OVER

      (

WNS1 RANGE UNBOUNDED PRECEDING ) AS ANT2 ) /

    COUNT(*)  OVER  (

WNS1 RANGE BETWEEN UNBOUNDED PRECEDING

                                          AND  UNBOUNDED  FOLLOWING  )  )

i) <NTILE 関数>が指定されるならば,次による。

i) <タイル数>の宣言型は,位取り 0 の真数型でなければならない。

ii)  結果の宣言型は,位取り 0 の処理系定義の真数型とする。

j) <LEAD 又は LAG 関数>が指定されるならば,次による。

i) <LEAD 又は LAG の範囲>を VE1 とし,VE1 の宣言型を DT とする。

ii)  場合:

1) <変位>が指定されるならば,<変位>を OFF とする。OFF の宣言型は,位取り 0 の真数型で

なければならない。

2)  そうでなければ,1 を OFF とする。

iii)  場合:

1) <既定式>が指定されるならば,<既定式>を VE2 とする。VE2 の宣言型は,DT と互換でなけ

ればならない。

2)  そうでなければ,CAST (NULL AS DT)  を VE2 とする。

iv) <ナルの扱い>が指定されるならば,<ナルの扱い>を NTREAT とする。そうでなければ,

RESPECT NULLS を NTREAT とする。

v)  結果の宣言型は,DT とする。

8) <FIRST_VALUE 又は LAST_VALUE 関数>又は<NTH_VALUE 関数>が指定されるならば,

次による。

a) <NTH_VALUE 関数>が指定されるならば,次による。

i) <FROM

FIRST 又は FROM LAST>が指定されないならば,FROM FIRST が暗に想定される。

ii) <n 番目の行>の宣言型は,位取り 0 の処理系定義の真数型でなければならない。

b) <ナルの扱い>が指定されないならば,RESPECT NULLS が暗に想定される。

c) <値式>の宣言型を DT とする。結果の宣言型は,DT とする。

9)  OF を単純に含む<選択リスト>を SL とする。

注記 144  単純表問合せである<問合せ式>の<ORDER BY 句>に OF が元々含まれるならば,“7.13 <

問合せ式

>”で規定されるとおりに,単純表問合せの構文変換がこの規則の前に適用され

る。

10)  SL を単純に含む<問合せ指定>又は<SELECT 文:単一行>の<集合限定子>を SQ とする。<集合限定

>がないならば,長さ 0 の文字列を SQ とする。

11) <句内ウィンドウ指定>が指定されるならば,次による。

a) <ウィンドウ指定>を WS とする。

b)  WS を単純に含む<表式>又は<SELECT 文:単一行>中の他のどの<ウィンドウ名>とも等価でない


191

X 3005-2:2015 (ISO/IEC 9075-2:2011)

処理系依存の

<ウィンドウ名>を WSN とする。

c) <ウィンドウ関数種別>を OFT とする。

d)  OF を次の指定に置き換えることによって SL から得られる<選択リスト>  を SLNEW とする。

OFT OVER WSN

e)

TE の<FROM 句>,<WHERE 句>,<GROUP BY 句>及び<HAVING 句>を,それぞれ,FCWC

GBC 及び HC とする。<WHERE 句>,<GROUP BY 句>又は<HAVING 句>のいずれかがないなら

ば,長さ

0 の文字列を,それぞれ,WCGBC 又は HC とする。

f)

場合:

i)

TE に直に含まれる<WINDOW 句>がないならば,次の指定を WICNEW とする。

WINDOW

WSN AS WS

ii)  そうでなければ,

TE に直に含まれる<WINDOW 句>を WIC とし,

次の指定を WICNEW とする。

WICWSN AS WS

g)  次の指定を TENEW とする。

FC WC GBC HC WICNEW

h)  場合:

i)

OF が<問合せ指定> QSX に単純に含まれるならば,QSX は,次の指定と等価とする。

SELECT

SQ SLNEW TENEW

ii)  そうでなければ,OF は,<SELECT 文:単一行>  SSSRX に単純に含まれる。SSSRX の<選択相

手リスト

>を STL とする。SSSRX は,次の指定と等価とする。

SELECT

SQ SLNEW INTO STL TENEW

12) <集約関数> AF を単純に含む<ウィンドウ関数>の宣言型は,AF の宣言型とする。

13) <ウィンドウ名又は指定>を記述するウィンドウ構造記述子のウィンドウ順序付け句又はウィンド

ウ枠付け句が存在するならば,

<ウィンドウ関数>に単純に含まれるどの<集約関数>も,DISTINCT

又は

<順序付け集合関数>を指定してはならない。

アクセス規則

なし。 

一般規則

1)  場合:

a) <ウィンドウ関数種別>が<NTILE 関数>ならば,次による。

i) <タイル数>の値を NT とする。

ii)  場合:

1)  NT がナル値ならば,結果は,ナル値とする。

2)  NT が 0 以下ならば,例外条件:データ例外  (data exception)  -  NTILE 関数の引数が正しく

ない  (invalid argument for NTILE function)  が引き起こされる。

3)  そうでなければ,次による。

A) <ウィンドウ関数>を評価する現在行を とする。

B)  に対する ROW_NUMBER() OVER WNS の評価結果を ROWNUM とする。

C)  “7.11 <WINDOW 句>”の一般規則で規定しているとおりに,WDX によって定義される R

のウィンドウ枠中の行の集まりを とする。

D)  の基数を CT とする。


192

X 3005-2:2015 (ISO/IEC 9075-2:2011)

E)  場合:

I) MOD(CTNT) = 0 ならば,各 i,1 ≤ i ≤ NT に対して,(CT / NT)  を NQi とする。

II)  そうでなければ,各 i,1≤ i ≤ MOD(CTNT)  に対して,CEILING (CT / NT)  を NQi とし,

各 i,(MOD(CTNT) + 1) ≤ i ≤ NT に対して,FLOOR (CT / NT)  を NQi とする。

F) 0 を END

0  とする。各 i,1 ≤ i ≤ NT に対して,(END (i–1) + 1)  を STARTi とし,(END (i–1)

NQi)  を ENDi とする。

G) <ウィンドウ関数>の値は,とする。ここで,STARTi ≤ ROWNUM ≤ ENDi とする。

b) <ウィンドウ関数種別>が<LEAD 又は LAG 関数>ならば,次による。

i)

OFF の値を OFFSET とし,VE2 の値を DEFAULT とする。

ii)  “7.11 <WINDOW 句>”の一般規則で規定しているとおりに,WDX によって定義される現在行

のウィンドウ枠中の行の集まりを とする。

iii) LEAD が指定されるならば,次による。

1)  場合:

A)  NTREAT が RESPECT NULLS ならば,

WDX のウィンドウ順序付けに従って順序付けられ,

現在行に後続する の各行に対して VE1 を適用した結果である値の並びを TX とする。

B)  そうでなければ,WDX のウィンドウ順序付けに従って順序付けられ,現在行に後続する T

の行で,かつ,ナル値が取り除かれた各行に対して VE1 を適用した結果である値の並びを

TX とする。

2)  TX 中の値の個数を とする。

3)  場合:

A)  OFFSET > ならば,<ウィンドウ関数>の値は,DEFAULT とする。

B)  OFFSET = 0 ならば,

<ウィンドウ関数>の値は,現在行に対して評価した VE1 の値とする。

C)  そうでなければ,<ウィンドウ関数>の値は,TX の 番目の値とする。ここで,m = OFFSET

とする。

iv) LAG が指定されるならば,次による。

1)  場合:

A)  NTREAT が RESPECT NULLS ならば,

WDX のウィンドウ順序付けに従って順序付けられ,

現在行に先行する の各行に対して VE1 を適用した結果である値の並びを TX とする。

B)  そうでなければ,WDX のウィンドウ順序付けに従って順序付けられ,現在行に先行する T

の行で,かつ,ナル値が取り除かれた各行に対して VE1 を適用した結果である値の並びを

TX とする。

2)  TX 中の値の個数を とする。

3)  場合:

A)  OFFSET > ならば,<ウィンドウ関数>の値は,DEFAULT とする。

B)  OFFSET = 0 ならば,

<ウィンドウ関数>の値は,現在行に対して評価した VE1 の値とする。

C)  そうでなければ,<ウィンドウ関数>の値は,TX の 番目の値とする。ここで,m = (n –

OFFSET + 1)  とする。

c) <ウィンドウ関数種別>が<FIRST_VALUE 又は LAST_VALUE 関数>ならば,次による。

i)

7.11 <WINDOW 句>”の一般規則で規定しているとおりに,WDX によって定義される現在行

のウィンドウ枠中の行の集まりを とする。


193

X 3005-2:2015 (ISO/IEC 9075-2:2011)

ii)  場合:

1) RESPECT

NULLS が指定されるか又は暗に想定されるならば,WDX のウィンドウ順序付けに

従って順序付けられた の各行に対して<値式>を適用した結果である値の並びを TX とする。

2)  そうでなければ,WDX のウィンドウ順序付けに従って順序付けられた の行で,かつ,ナ

ル値が取り除かれた各行に対して

<値式>を適用した結果である値の並びを TX とする。

iii)  場合:

1)  TX が空ならば,<ウィンドウ関数>の値は,ナル値とする。

2) FIRST_VALUE が指定されるならば,<ウィンドウ関数>の値は,TX の最初の値とする。

2)  そうでなければ,<ウィンドウ関数>の値は,TX の最後の値とする。

d) <ウィンドウ関数種別>が<NTH_VALUE 関数>ならば,次による。

i) <n 番目の行>の値を RN とする。

ii)  場合:

1)  RN がナル値ならば,結果は,ナル値とする。

2)  RN が 0 以下ならば,例外条件:データ例外  (data exception)  -  NTH_VALUE 関数の引数が

正しくない  (invalid argument for NTH_VALUE function)  が引き起こされる。

3)  そうでなければ,次による。

A)  “7.11 <WINDOW 句>”の一般規則で規定しているとおりに,WDX によって定義される現

在行のウィンドウ枠中の行の集まりを とする。

B)  場合:

I) RESPECT

NULLS が指定されるか又は暗に想定されるならば,WDX のウィンドウ順序付

けに従って順序付けられた の各行に対して<値式>を適用した結果である値の並びを

TX とする。

II)  そうでなければ,WDX のウィンドウ順序付けに従って順序付けられた の行で,かつ,

ナル値が取り除かれた各行に対して

<値式>を適用した結果である値の並びを TX とする。

C)  TX 中の値の個数を TXN とする。

I)

TXN = 0 又は TXN < RN ならば,<ウィンドウ関数>の値は,ナル値とする。

II)  場合:

1) FROM

LAST が指定されるならば,<ウィンドウ関数>の値は,TX の 番目の値とす

る。ここで,m = (TXN – RN + 1)  とする。

2)  そうでなければ,<ウィンドウ関数>の値は,TX の 番目の値とする。ここで,m = RN

とする。

e)

そうでなければ,

<ウィンドウ関数>の値は,<集約関数>の値とする。

適合性規則

1)  機能 T611“基本 OLAP 演算”なしでは,適合する SQL 言語は,<ウィンドウ関数>を含んではなら

ない。

2)  機能 T612“高度 OLAP 演算”なしでは,適合する SQL 言語は,<ウィンドウ名>を含んではならな

い。

3)  機能 T612“高度 OLAP 演算”なしでは,適合する SQL 言語は,PERCENT_RANK 又は CUME_DIST

を含んではならない。

4)  機能 T612“高度 OLAP 演算”なしでは,適合する SQL 言語は,ウィンドウ順序付け句を含まない


194

X 3005-2:2015 (ISO/IEC 9075-2:2011)

ウィンドウ構造記述子をもつ

<ウィンドウ名又は指定>を直に含み,かつ,ROW_NUMBER を単純に

含む

<ウィンドウ関数>を含んではならない。

5)  機能 T614“NTILE 関数”なしでは,適合する SQL 言語は,<NTILE 関数>を含んではならない。

6)  機能 T615“LEAD 又は LAG 関数”なしでは,適合する SQL 言語は,<LEAD 又は LAG 関数>を含

んではならない。

7)  機能 T616“LEAD 及び LAG 関数のナルの扱いの選択肢”なしでは,適合する SQL 言語中で,<LEAD

又は

LAG 関数>は,<ナルの扱い>を含んではならない。

8)  機能 T617

FIRST_VALUE 又は LAST_VALUE 関数”なしでは,適合する SQL 言語は,<FIRST_VALUE

又は

LAST_VALUE 関数>を含んではならない。

9)  機能 T618“NTH_VALUE 関数”なしでは,適合する SQL 言語は,<NTH_VALUE 関数>を含んでは

ならない。

6.11  <入れ子ウィンドウ関数>

機能

<入れ子ウィンドウ関数> (<nested window function>)  は,<ウィンドウ関数>に単純に含まれる<集約関数>

の集約化引数中で入れ子になった関数を指定する。

形式

<入れ子ウィンドウ関数> ::=

  <入れ子 ROW_NUMBER 関数>

 |

<VALUE_OF 式 AT 行>

<入れ子 ROW_NUMBER 関数> ::=

  ROW_NUMBER  <左括弧> <行マーカ> <右括弧>

<VALUE_OF 式 AT 行> ::=

  VALUE_OF  <左括弧> <値式> AT <行マーカ式>

     [ <コンマ> <VALUE_OF の既定値> ] <右括弧>

<行マーカ> ::=

  BEGIN_PARTITION

 |

BEGIN_FRAME

 |

CURRENT_ROW

 |

FRAME_ROW

 |

END_FRAME

 |

END_PARTITION

<行マーカ式> ::=

  <行マーカ> [ <行マーカ差分> ]

<行マーカ差分> ::=

  <正符号> <行マーカ変位>

 |

<負符号> <行マーカ変位>

<行マーカ変位> ::=

  <単純値指定>

 |

<動的パラメタ指定>

<VALUE_OF の既定値> ::=


195

X 3005-2:2015 (ISO/IEC 9075-2:2011)

  <値式>

構文規則

1) <入れ子ウィンドウ関数> NWF は,<ウィンドウ関数> WF に直に含まれる<集約関数> AF の集約化

引数中に含まれなければならない。

2) <入れ子 ROW_NUMBER 関数>の宣言型は,位取り 0 の処理系定義の真数型とする。

3) <VALUE_OF 式 AT 行>が指定されるならば,それに直に含まれる<値式>の宣言型,及び<VALUE_OF

の既定値

>が指定されるならば,<VALUE_OF の既定値>の宣言型から成る集合を DTS とする。DTS

を DTSET として,“9.5  データ型組合せの結果”の構文規則を適用する。それらの構文規則を適用

によって戻される RESTYPE を DT とする。<VALUE_OF 式 AT 行>の宣言型は,DT とする。

4) <行マーカ変位>の宣言型は,位取り 0 の真数型でなければならない。

アクセス規則

なし。 

一般規則

1)  WF に関連付けられたウィンドウ構造記述子を とする。NWF の値を計算する行を R1 とする。W

によって決定される R1 のウィンドウ区画を とし,によって決定される R1 のウィンドウ枠を F

とし,行 R1 に対する NWF を計算している間の AF の引数の入力中の行を R2 とする。

注記 145  この規則の条件が与えられるとき,AF の引数の入力は,R1 によって決定されるウィン

ドウ枠 となる。したがって,R2 は,中にある。

2)  中の行の個数を NP とする。

によって決定される行の順序付けに従った の行の列挙を{ ROW

1,

ROW

2, ... , ROWNP }とする。1 から NP までの範囲の各 に対して,を行 ROWn のウィンドウ区

画行番号  (window partition row number)  という。

3)  NWF が<入れ子 ROW_NUMBER 関数>ならば,次による。

a) <行マーカ>を RM とする。

b)  場合:

i)

RM が BEGIN_PARTITION ならば,NWF の値は,1 とする。

ii)  RM が END_PARTITION ならば,NWF の値は,NP とする。

iii)  RM が CURRENT_ROW ならば,NWF の値は,R1 のウィンドウ区画行番号とする。

iv)  RM が BEGIN_FRAME ならば,NWF の値は,の最初の行のウィンドウ区画行番号とする。

v)  RM が END_FRAME ならば,NWF の値は,の最後の行のウィンドウ区画行番号とする。

vi)  RM が FRAME_ROW ならば,NWF の値は,R2 のウィンドウ区画行番号とする。

注記 146  ウィンドウ枠 が空になる可能性がある。しかし,その場合には,NWF を評価する

行がなく,先行する一般規則が呼び出されない。したがって,RM が BEGIN_FRAME,

END_FRAME 又は FRAME_ROW のとき,が空でないことを仮定できる。

4)  NWF が<VALUE_OF 式 AT 行>ならば,次による。

a)  NWF に直に含まれる<値式>を VE とし,NWF に直に含まれる<行マーカ式>を RME とする。

b)  RME に含まれる<行マーカ>を RM とする。<入れ子 ROW_NUMBER 関数> ROW_NUMBER(RM)

の値を RN とする。

c)

場合:

i)

NWF が<VALUE_OF の既定値>を含むならば,<VALUE_OF の既定値>の値を DEF とする。

ii)  そうでなければ,ナル値を DEF とする。


196

X 3005-2:2015 (ISO/IEC 9075-2:2011)

d)  場合:

i)

RME が<行マーカ差分>を含むならば,<行マーカ変位>の値を OFF とする。RME が<正符号>

を含むならば,RN + OFF を とする。そうでなければ,RN – OFF を とする。

ii)  そうでなければ,RN を とする。

e)

場合:

i)

がナル値,1 未満又は NP を超えるならば,NWF の値は,DEF とする。

注記 147  OFF がナルのときに限り,がナルになり得る。参考である前の注記で説明したと

おり,が空のときに,NWF は,決して評価されないので,先行する規則は,

空になる場合を含める必要がない。

ii)  そうでなければ,NWF の値は,ROWM に対して評価される VE の値とする。

適合性規則

1)  機能 T619“入れ子ウィンドウ関数”なしでは,適合する SQL 言語は,<入れ子ウィンドウ関数>を

含んではならない。

6.12  <CASE 式>

この細分箇条は,ISO/IEC 9075-14 の“6.4 <CASE >”によって修正される。 

機能

<CASE 式> (<case expression>)  は,条件付けされた値を指定する。

形式

<CASE 式> ::=

  <CASE 略式>

 |

<CASE 指定>

<CASE 略式> ::=

  NULLIF  <左括弧> <値式> <コンマ> <値式> <右括弧>

| COALESCE <左括弧> <値式>

    { <コンマ> <値式> }... <右括弧>

<CASE 指定> ::=

  <単純 CASE>

 |

<探索 CASE>

<単純 CASE> ::=

  CASE  <CASE オペランド> <単純 WHEN 句>... [ <ELSE 句> ] END

<探索 CASE> ::=

  CASE  <探索 WHEN 句>... [ <ELSE 句> ] END

<単純 WHEN 句> ::=

  WHEN  <WHEN オペランドリスト> THEN <結果>

<探索 WHEN 句> ::=

  WHEN  <探索条件> THEN <結果>

<ELSE 句> ::=

  ELSE  <結果>

<CASE オペランド> ::=

  <行値述語オペランド>


197

X 3005-2:2015 (ISO/IEC 9075-2:2011)

 |

<OVERLAPS 述語部分 1>

<WHEN オペランドリスト> ::=

  <WHEN オペランド> [ { <コンマ> <WHEN オペランド> }... ]

14

 <WHEN オペランド> ::=

  <行値述語オペランド>

 |

<比較述語部分 2>

 |

<BETWEEN 述語部分 2>

 |

<IN 述語部分 2>

 |

<文字 LIKE 述語部分 2>

 |

<オクテット LIKE 述語部分 2>

 |

<SIMILAR 述語部分 2>

 |

<LIKE_REGEX 述語部分 2>

 |

<NULL 述語部分 2>

 |

<限定比較述語部分 2>

 |

<NORMALIZED 述語部分 2>

 |

<MATCH 述語部分 2>

 |

<OVERLAPS 述語部分 2>

 |

<DISTINCT 述語部分 2>

 |

<MEMBER 述語部分 2>

 |

<SUBMULTISET 述語部分 2>

 |

<SET 述語部分 2>

 |

<型述語部分 2>

<結果> ::=

  <結果式>

 |

NULL

<結果式> ::=

  <値式>

構文規則

1) <CASE 式>が<CASE 略式>を指定するならば,次による。

a) <CASE 略式>に一般に含まれる<値式>は,潜在的に非決定的か又は SQL データを潜在的に修正す

SQL 呼出しルーチンが当該ルーチンになる<ルーチン呼出し>を一般に含んではならない。

b) <CASE 略式>に一般に含まれる<値式>は,<データ変更差分表>を含む<表一次子>を一般に含んで

はならない。

c)

NULLIF (

V

1, V2) は,次の<CASE 指定>と等価とする。

CASE WHEN

V1=V2 THEN

NULL ELSE V1

END

この構文上の変換の結果に,“8.2 <比較述語>”の適合性規則を適用する。

d)  COALESCE (V

1, V2) は,次の<CASE 指定>と等価とする。


198

X 3005-2:2015 (ISO/IEC 9075-2:2011)

CASE WHEN V1

IS NOT NULL THEN

V1 ELSE

V2 END

e)

n ≥ 3 に対して,COALESCE (V

1, V2, ..., Vn)  は,次の<CASE 指定>と等価とする。

CASE WHEN V1

IS NOT NULL THEN

V1 ELSE COALESCE

(V2, ...,

Vn) END

2) <CASE 指定>が<単純 CASE>を指定するならば,<CASE オペランド>を CO とする。

a)  CO は,潜在的に非決定的か又は SQL データを潜在的に修正する SQL 呼出しルーチンが当該ルー

チンになる

<ルーチン呼出し>を一般に含んではならない。

b)  CO は,<データ変更差分表>を含む<表一次子>を一般に含んではならない。

c)

CO が<OVERLAPS 述語部分 1>ならば,各<WHEN オペランド>は,<OVERLAPS 述語部分 2>で

なければならない。CO が<行値述語オペランド>ならば,どの<WHEN オペランド>も,

<OVERLAPS 述語 2>であってはならない。

d) <単純 WHEN 句>の個数を とする。

e) 1 から までの範囲の各 に対して,番目の<単純 WHEN 句>の<WHEN オペランドリスト>を

WOLi とする。WOLi に単純に含まれる<WHEN オペランド>の個数を M (i)  とする。1 から M (i)  ま
での範囲の各 に対して,WOLi に単純に含まれる 番目の<WHEN オペランド>を WOi,とする。

f) 1 から までの範囲の各 に対して,かつ,1 から M (i)  までの範囲の各 に対して,次による。

場合:

i)

WOi,が<行値述語オペランド>ならば,次の文字列を EWOi,とする。

WO

i,j

ii)  そうでなければ,WOi,を EWOi,とする。

g)  番目の<単純 WHEN 句>の<結果>を Ri とする。

h) <ELSE 句>が指定されるならば,その<ELSE 句>を CEEC とする。そうでなければ,長さ 0 の文

字列を CEEC とする。

i) <単純 CASE>は,番目の<探索 WHEN 句>が次の形式をとる<探索 CASE>と等価とする。

WHEN ( CO EWO

i

,

1

 ) OR

. . . OR

CO EWO

i,M(i)

 )

THEN R

i

j)

等価な

<探索 CASE>の<ELSE 句>は,次の形式をとる。

CEEC

k)  この構文上の変換の結果に,

8  述語”の細分箇条の適合性規則を適用する。

注記 148  “8  述語”の具体的な細分箇条は,構文上の変換の結果として作成される述語によっ

て決まる。

3) <CASE 指定>中の少なくとも一つの<結果>は,<結果式>を指定しなければならない。


199

X 3005-2:2015 (ISO/IEC 9075-2:2011)

4) <ELSE 句>が指定されないならば,ELSE NULL が暗に想定される。

5) <CASE 指定>中の全ての<結果式>の宣言型の集合を DTSET として,

9.5  データ型組合せの結果”

の構文規則を適用する。それらの構文規則の適用によって戻される RESTYPE を RT とする。<CASE

指定

>の宣言型は,RT とする。

アクセス規則

なし。 

一般規則

1)  場合:

a) <結果>が NULL を指定するならば,その値は,ナル値とする。

b) <結果>が<値式>を指定するならば,その値は,その<値式>の値とする。

2)  場合:

a) <CASE 指定>中のいずれかの<探索 WHEN 句>の<探索条件>の値が真  (True)  ならば,<CASE 式>

の値は,

<探索条件>が真  と評価される最初の(最も左側の)<探索 WHEN 句>の<結果>の値を,

<CASE 指定>の宣言型に型変換した値とする。

b) <CASE 指定>中のどの<探索条件>も,真  と評価されないならば,<CASE 式>の値は,陽に指定さ

れるか又は暗に想定される

<ELSE 句>の<結果>の値を,<CASE 指定>の宣言型に型変換した値と

する。

適合性規則

1)  機能 F262“拡張 CASE 式”なしでは,適合する SQL 言語中で,<単純 CASE>に直に含まれる<CASE

オペランド

>は,単一の<共通値式>又は<ブール述語オペランド>である<行値構成子述語オペランド

>の<行値述語オペランド>でなければならない。

2)  機能 F262“拡張 CASE 式”なしでは,適合する SQL 言語中で,<単純 WHEN 句>に含まれる<WHEN

オペランド

>は,単一の<共通値式>又は<ブール述語オペランド>である<行値構成子述語オペランド

>の<行値述語オペランド>でなければならない。

3)  機能 F263“単純 CASE 式中のコンマで区切られた述語”なしでは,適合する SQL 言語中で,<単純

WHEN 句>に含まれる<WHEN オペランドリスト>は,ただ一つの<WHEN オペランド>を単純に含ま

なければならない。

6.13  <CAST 指定>

この細分箇条は,ISO/IEC 9075-9 の“6.2 <CAST 指定>”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“6.5 <CAST 指定>”によって修正される。 

機能

<CAST 指定> (<CAST specification>)  は,データ変換を指定する。

形式

14

 <CAST 指定> ::=

  CAST  <左括弧> <CAST オペランド> AS <CAST 相手> <右括弧>

<CAST オペランド> ::=

  <値式>

 |

<暗黙型付き値指定>

<CAST 相手> ::=

  <定義域名>


200

X 3005-2:2015 (ISO/IEC 9075-2:2011)

 |

<データ型>

構文規則

1)  場合:

a) <定義域名>が指定されるならば,指定された定義域のデータ型を TD とする。

b) <データ型>が指定されるならば,<データ型>によって識別されるデータ型を TD とする。<デー

タ型

>は,<COLLATE 句>を含んではならない。

2)

09

 <CAST 指定>の結果の宣言型は,TD とする。

3)

14

 <CAST オペランド>が<値式>ならば,<値式>の宣言型を SD とする。

4)  ある列を とし,

<CAST 指定> CS の<CAST オペランド>を CO とする。を識別する単一の列参照,

又は が末端の列である単一の<CAST 指定>  CS1 から CO が構成されるならば,は,CS の末端

の列  (leaf column)  とする。

5) <CAST オペランド>が<空指定>を指定するならば,TD は,集まり型,又は元型が集まり型の個別

型でなければならない。

6)

09

14

 <CAST オペランド>が<値式>ならば,<CAST 指定>中の TD と SD との正しい組合せは,次の表

によって与えられる。“

Y”は,制限なしで,組合せが構文上正しいことを示す。“M”は,この細

分箇条中の他の構文規則を満たすことを条件として,組合せが正しいことを示す。“

N”は,組合せ

が正しくないことを示す。

SD

TD

EN AN  C  D  T  TS YM

DT BO

UDT

B  RT  CT RW

EN  Y Y Y N N N M M N M N M N N 
AN Y Y Y N N N N N N M N M N N 
C  Y Y Y Y Y Y Y Y Y M N M N N 
D  N N Y Y N Y N N N M N M N N 
T  N N Y N Y Y N N N M N M N N 
TS  N N Y Y Y Y N N N M N M N N 
YM M N Y N N N Y N N M N M N N 
DT M N Y N N N N Y N M N M N N 
BO N N Y N N N N N Y M N M N N 
UDT M M M M M M M M M M M M M N 
B  N N N N N N N N N M Y M N N 
RT  M M M M M M M M M M M M N N 
CT  N N N N N N N N N M N N M N 
RW N N N N N N N N N N N N N M

ここで,

 EN

=

真数

 AN

=

概数

 C

=

文字(固定長若しくは可変長,又は文字長大オブジェクト)

 D

=

日付

 T

=

時刻

 TS

=

時刻印

 YM

=

年月時間隔

 DT =

日時刻時間隔

 BO

=

ブール

 UDT =

利用者定義型

B = 2 進オクテット(固定長若しくは可変長,又は 2 進オクテット長大オブジェクト)


201

X 3005-2:2015 (ISO/IEC 9075-2:2011)

 RT

=

参照型

 CT

=

集まり型

 RW

=

行型

7)  TD が時間隔で,かつ,SD が真数ならば,TD は,単一の<基本日時フィールド>だけを含まなけれ

ばならない。

8)  TD が真数で,かつ,SD が時間隔ならば,SD は,単一の<基本日時フィールド>だけを含まなけれ

ばならない。

9)  SD が文字列で,かつ,TD が固定長,可変長又は長大オブジェクトの文字列ならば,SD 及び TD 

文字レパートリは,同じでなければならない。

10)  TD が固定長,可変長又は長大オブジェクトの文字列ならば,<CAST 指定>の宣言型照合順は,TD

の文字集合の文字集合照合順とし,その照合順起源は,

暗黙  (implicit)  とする。

11) <CAST オペランド>が<値式>で,かつ,SD 又は TD のいずれかが利用者定義型ならば,TD が SD

の上位型であるか,又は次の全てを満たすようなデータ型 が存在するかのいずれかでなければな

らない。

a)  の型指示子が SD の型優先順位リスト中にある。

b)  変換元データ型として を含み,かつ,相手データ型として TD を含む利用者定義型変換記述子

をもつ利用者定義型変換 CF

P

が存在する。

c)

利用者定義型変換記述子が相手データ型として TD をもつ利用者定義型変換 CF

Q

の利用者定義型

変換記述子中に変換元データ型として含まれる他のどのデータ型 の型指示子も,SD の型優先

順位リスト中で の型指示子に先行しない。

12) <CAST オペランド>が<値式>で,かつ,SD 又は TD のいずれかが参照型ならば,次による。

a)  SD 及び TD の被参照型を,それぞれ,RTSD 及び RTTD とする。

b) <データ型>が指定され,<SCOPE 句>を含むならば,その有効範囲を STD とする。そうでなけれ

ば,空であるかもしれないが,SD の参照型記述子に含まれる有効範囲を STD とする。

c)

RSTD と RTTD とが互換であるか,又は次の全てを満たすような,SD の型優先順位リスト中のデ

ータ型 が存在するかのいずれかでなければならない。

i)

変換元データ型として を含み,かつ,相手データ型として TD を含む利用者定義型変換記述

子をもつ利用者定義型変換 CF

P

が存在する。

ii)  利用者定義型変換記述子が相手データ型として TD をもつ利用者定義型変換 CF

Q

の利用者定義

型変換記述子中に変換元データ型として含まれる他のどのデータ型 の型指示子も,SD の型

優先順位リスト中で の型指示子に先行しない。

13)  SD が集まり型ならば,次による。

a)  SD の要素型を ESD とする。

b)  TD の要素型を ETD とする。

次の

<CAST 指定>が正しい<CAST 指定>でなければならない。

CAST ( VALUE AS ETD )

ここで,VALUE は,宣言型 ESD の<値式>とする。

14)  SD が行型ならば,次による。

a)  SD の次数を DSD とする。

b)  TD の次数を DTD とする。


202

X 3005-2:2015 (ISO/IEC 9075-2:2011)

c)

DSD は,DTD と等しくなければならない。

d)  SD 及び TD の 番目のフィールドを,それぞれ,FSDi 及び FTDi,1 ≤ i ≤ DSD とする。

e)

FSDi の宣言型及び FTDi の宣言型を,それぞれ,TFSDi 及び TFTDi,1 ≤ i ≤ DSD とする。

f) 1 から DSD までの範囲の に対して,次の<CAST 指定>が正しい<CAST 指定>でなければならな

い。

CAST ( VALUEi AS

TFTDi )

ここで,VALUEi は,宣言型 TFSDi の任意の<値式>とする。

15)

14

 <定義域名>が指定されるならば,<定義域名>によって識別される定義域を とする。<定義域名>

の陽に指定されるか又は暗に想定される

<スキーマ名>によって識別されるスキーマは,の記述子

を含んでいなければならない。

アクセス規則

1) <定義域名>が指定されるならば,次による。

場合:

a) SQL

SECURITY

INVOKER を指定する<SQL ルーチン指定>を介在しないで,<CAST 指定>が<SQL

スキーマ文

>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識別子>

の適用可能な権限は,

<定義域名>によって識別される定義域に関する USAGE を含まなければな

らない。

b)  そうでなければ,現行の権限は,<定義域名>によって識別される定義域に関する USAGE を含ま

なければならない。

2) <CAST オペランド>が<値式>で,かつ,SD 又は TD のいずれかが利用者定義型又は参照型ならば,

次による。

場合:

a) SQL

SECURITY

INVOKER を指定する<SQL ルーチン指定>を介在しないで,<CAST 指定>が<SQL

スキーマ文

>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識別子>

の適用可能な権限は,CF

P

に関する

EXECUTE を含まなければならない。

b)  そうでなければ,現行の権限は,CF

P

に関する

EXECUTE を含まなければならない。

一般規則

1) <CAST 指定>を CS とする。<CAST オペランド>が<値式> VE ならば,VE の値を SV とする。

2)  場合:

a) <CAST オペランド>が NULL を指定するならば,CS の結果は,ナル値とし,この細分箇条のこれ

以降の一般規則を適用しない。

b) <CAST オペランド>が<空指定>を指定するならば,CS の結果は,宣言型 TD の空の集まりとし,

この細分箇条のこれ以降の一般規則を適用しない。

c)

SV がナル値ならば,CS の結果は,ナル値とし,この細分箇条のこれ以降の一般規則を適用しな

い。

3)

14

 SD 又は TD のいずれかが利用者定義型ならば,次による。

場合:

a)  TD が SD の上位型ならば,TV は,SV とする。

b)  そうでなければ,次による。


203

X 3005-2:2015 (ISO/IEC 9075-2:2011)

i)

CF

P

の利用者定義型変換記述子に含まれる型変換関数を CP とする。

ii) <値式>である単一の SQL 引数をもつ静的 SQL 引数リストを SAL とする。SAL を STATIC SQL

ARG LIST として,CP を SUBJECT ROUTINE として,

10.4 <ルーチン呼出し>”の一般規則を

適用し,CP の呼出しの結果である値 TR を生成する。

iii)  場合:

1)  TD が利用者定義型ならば,TV は,TR とする。

2)  そうでなければ,TV は,次の CAST 指定の結果とする。

CAST (TR AS TD)

4)  SD 又は TD のいずれかが参照型ならば,次による。

場合:

a)  RSTD と RTTD とが互換ならば,次による。

i)

TV は,SV とする。

ii)  TV の参照型記述子中の有効範囲は,STD とする。

b)  そうでなければ,次による。

i)

CF

P

の利用者定義型変換記述子に含まれる型変換関数を CP とする。

ii) <値式>である単一の SQL 引数をもつ静的 SQL 引数リストを SAL とする。SAL を STATIC SQL

ARG LIST として,CP を SUBJECT ROUTINE として,

10.4 <ルーチン呼出し>”の一般規則を

適用し,CP の呼出しの結果である値 TV を生成する。

iii)  TV の参照型記述子中の有効範囲は,STD とする。

5)  SD が配列型で,かつ,TD が配列型又はマルチ集合型のいずれかならば,次による。

場合:

a)  SV の基数を SC とする。

b) 1 から SC までの範囲の に対して,次の<CAST 指定>が適用され,値 TVEi を生成する。

CAST ( VE[i] AS ETD )

c)

TD が配列型ならば,TD の最大基数を TC とする。

場合:

i)

SC が TC を超えるならば,例外条件:データ例外  (data exception)  -  配列データ,右切捨て

(array data, right truncation)  が引き起こされる。

ii)  そうでなければ,TV は,要素 TVEi,1 ≤ i ≤ SC をもつ配列とする。

d)  TD がマルチ集合型ならば,TV は,要素 TVEi,1 ≤ i ≤ SC をもつマルチ集合とする。

6)  SD がマルチ集合型で,かつ,TD が配列型又はマルチ集合型のいずれかならば,次による。

a)  SV の基数を SC とする。

b)  TD が配列型ならば,TD の最大基数を TC とする。

場合:

i)

SC が TC を超えるならば,例外条件:データ例外  -  配列データ,右切捨て  が引き起こされ

る。

ii)  そうでなければ,TV は,次の配列値構成子の評価の結果として得られる配列とする。

ARRAY ( ( SELECT CAST ( M.E AS ETD ) FROM UNNEST (VE) AS M(E) ))

注記 149  マルチ集合から配列型へのこの型変換は,ORDER BY なしの SELECT FROM を用い

るので,結果中の要素の順序は,処理系依存である。


204

X 3005-2:2015 (ISO/IEC 9075-2:2011)

c)

TD がマルチ集合型ならば,TV は,次のマルチ集合値構成子の評価の結果として得られるマルチ

集合とする。

MULTISET ( ( SELECT CAST ( M.E AS ETD ) FROM UNNEST (VE) AS M(E) ) )

7)  SD が行型ならば,TV は,次の行値構成子の評価の結果として得られる行とする。

ROW ( CAST ( VE.FSD

1

 AS TFTD

1

 ),

       CAST  (  VE.FSD

2

 AS TFTD

2

 ),

    ...

       CAST  (  VE.FSD

DSD

 AS TFTD

DSD

 ) )

8)  TD が真数ならば,次による。

場合:

a)  SD が真数又は概数ならば,次による。

場合:

i)

丸め又は切捨てが必要ならば,その後で,上位有効桁を失わない SV の表現がデータ型 TD 中に

存在するならば,TV は,その表現とする。丸めるか又は切り捨てるかの選択は,処理系定義と

する。

ii)  そうでなければ,例外条件:データ例外  -  数値範囲外  (numeric value out of range)  が引き起こ

される。

b)  SD が文字列ならば,SV は,先行又は後続の<空白>を取り除いた SV に置き換えられる。

場合:

i)

5.3 <定数>”中の<定数>に対する規則によって定義されるとおりに,SV が<符号付き数定数>

を構成しないならば,例外条件:

データ例外  -  型変換での文字値が正しくない  (invalid 

character value for cast)  が引き起こされる。

ii)  そうでなければ,その<符号付き数定数>を LT とする。<CAST 指定>は,次の指定と等価とす

る。

CAST ( LT AS TD )

c)

SD が時間隔データ型ならば,次による。

場合:

i)

上位有効桁を失わない SV の表現がデータ型 TD 中に存在するならば,TV は,その表現とする。

ii)  そうでなければ,例外条件:データ例外  -  数値範囲外  が引き起こされる。

9)  TD が概数ならば,次による。

場合:

a)  SD が真数又は概数ならば,次による。

場合:

i)

丸め又は切捨てが必要ならば,その後で,上位有効桁を失わない SV の表現がデータ型 TD 中に

存在するならば,TV は,その表現とする。丸めるか又は切り捨てるかの選択は,処理系定義と

する。

ii)  そうでなければ,例外条件:データ例外  -  数値範囲外  が引き起こされる。

b)  SD が文字列ならば,SV は,先行又は後続の<空白>を取り除いた SV に置き換えられる。

場合:

i)

5.3 <定数>”中の<定数>に対する規則によって定義されるとおりに,SV が<符号付き数定数>


205

X 3005-2:2015 (ISO/IEC 9075-2:2011)

を構成しないならば,例外条件:

データ例外  -  型変換での文字値が正しくない  が引き起こさ

れる。

ii)  そうでなければ,その<符号付き数定数>を LT とする。<CAST 指定>は,次の指定と等価とす

る。

CAST ( LT AS TD )

10)  TD が固定長文字列ならば,TD の文字単位での長さを LTD とする。

場合:

a)  SD が真数ならば,次による。

場合:

i)

5.3 <定数>”中の<真数定数>の定義に適合する文字列で,位取りが SD の位取りと同じで,か

つ,解釈値が SV の絶対値である最も短い文字列を YP とする。

ii)  場合:

1)  SV が 0 未満ならば,'–' || YP の結果を とする。

2)  そうでなければ,YP を とする。

iii)  場合:

1)  TD の文字レパートリ中にない<SQL 言語文字>を が含むならば,例外条件:データ例外  -

型変換での文字値が正しくない  が引き起こされる。

2)  の文字単位での長さ LY が LTD と等しいならば,TV は,とする。

3)  の文字単位での長さ LY が LTD 未満ならば,TV は,LTD – LY 個の<空白>で右側を拡張し

た とする。

4)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  (string data, right 

truncation)  が引き起こされる。

b)  SD が概数ならば,次による。

i)

次のとおりの文字列を YP とする。

場合:

1)  SV が 0 と等しいならば,YP は,'0E0'  とする。

2)  そうでなければ,

5.3  <定数>”中の<概数定数>の定義に適合する文字列で,解釈値が SV 

絶対値と等しく,かつ,

<仮数>が,'0'でない単一の<数字>,それに続く<ピリオド>及び<符

号なし整数

>から成る最も短い文字列を YP とする。

ii)  場合:

1)  SV が 0 未満ならば,'–' || YP の結果を とする。

2)  そうでなければ,YP を とする。

iii)  場合:

1)  TD の文字レパートリ中にない<SQL 言語文字>を が含むならば,例外条件:データ例外  -

型変換での文字値が正しくない  が引き起こされる。

2)  の文字単位での長さ LY が LTD と等しいならば,TV は,とする。

3)  の文字単位での長さ LY が LTD 未満ならば,TV は,LTD – LY 個の<空白>で右側を拡張し

た とする。

4)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  が引き起こされる。

c)

SD が固定長文字列,可変長文字列又は長大オブジェクト文字列ならば,次による。


206

X 3005-2:2015 (ISO/IEC 9075-2:2011)

場合:

i)

SV の文字単位での長さが LTD と等しいならば,TV は,SV とする。

ii)  SV の文字単位での長さが LTD を超えるならば,TV は,SV の最初の LTD 個の文字とする。SV

の残りの文字のいずれかが

<空白>でない文字ならば,終了条件:警告  (warning)  -  データ列

データ,右切捨て  が引き起こされる。

iii)  SV の文字単位での長さ が LTD 未満ならば,TV は,LTD – 個の<空白>で右側を拡張した

SV とする。

d)  SD が日時データ型又は時間隔データ型ならば,

5.3  <定数>”中の<定数>の定義に適合する文字

列で,解釈値が SV で,かつ,解釈精度が SD の精度である最も短い文字列を とする。SV が負

の時間隔ならば,

<符号>は,定数 中の<引用符なし時間隔データ列>内に指定しなければならな

い。

場合:

i)

TD の文字レパートリ中にない<SQL 言語文字>を が含むならば,例外条件:データ例外  -  型

変換での文字値が正しくない  が引き起こされる。

ii)  の文字単位での長さ LY が LTD と等しいならば,TV は,とする。

iii)  の文字単位での長さ LY が LTD 未満ならば,TV は,LTD – LY 個の<空白>で右側を拡張した

とする。

iv)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  が引き起こされる。

e)

SD がブールならば,次による。

場合:

i)

SV が真  (True)  で,かつ,LTD が 4 未満でないならば,TV は,LTD – 4 個の<空白>で右側を拡

張した

 'TRUE' とする。

ii)  SV が偽  (False)  で,かつ,LTD が 5 未満でないならば,TV は,LTD  –  5 個の<空白>で右側を

拡張した

 'FALSE' とする。

iii)  そうでなければ,

例外条件:

データ例外  -  型変換での文字値が正しくない  が引き起こされる。

11)  TD が可変長文字列又は長大オブジェクト文字列ならば,

TD の文字単位での最大長を MLTD とする。

場合:

a)  SD が真数ならば,次による。

場合:

i)

5.3 <定数>”中の<真数定数>の定義に適合する文字列で,位取りが SD の位取りと同じで,か

つ,解釈値が SD の絶対値である最も短い文字列を YP とする。

ii)  場合:

1)  SV が 0 未満ならば,'–' || YP の結果を とする。

2)  そうでなければ,YP を とする。

iii)  場合:

1)  TD の文字レパートリ中にない<SQL 言語文字>を が含むならば,例外条件:データ例外  -

型変換での文字値が正しくない  が引き起こされる。

2)  の文字単位での長さ LY が MLTD 以下ならば,TV は,とする。

3)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  が引き起こされる。

b)  SD が概数ならば,次による。


207

X 3005-2:2015 (ISO/IEC 9075-2:2011)

i)

次のとおりの文字列を YP とする。

場合:

1)  SV が 0 と等しいならば,YP は,'0E0'  とする。

2)  そうでなければ,

5.3  <定数>”中の<概数定数>の定義に適合する文字列で,解釈値が SV 

絶対値と等しく,かつ,

<仮数>が,'0'でない単一の<数字>,それに続く<ピリオド>及び<符

号なし整数

>から成る最も短い文字列を YP とする。

ii)  場合:

1)  SV が 0 未満ならば,'–' || YP の結果を とする。

2)  そうでなければ,YP を とする。

iii)  場合:

1)  TD の文字レパートリ中にない<SQL 言語文字>を が含むならば,例外条件:データ例外  -

型変換での文字値が正しくない  が引き起こされる。

2)  の文字単位での長さ LY が MLTD 以下ならば,TV は,とする。

3)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  が引き起こされる。

c)

SD が固定長文字列,可変長文字列又は長大オブジェクト文字列ならば,次による。

場合:

i)

SV の文字単位での長さが MLTD 以下ならば,TV は,SV とする。

ii)  SV の文字単位での長さが MLTD を超えるならば,

TV は,

SV の最初の MLTD 個の文字とする。

SV の残りの文字のいずれかが<空白>でない文字ならば,終了条件:警告  -  データ列データ,

右切捨て  が引き起こされる。

d)  SD が日時データ型又は時間隔データ型ならば,

5.3  <定数>”中の<定数>の定義に適合する文字

列で,解釈値が SV で,かつ,解釈精度が SD の精度である最も短い文字列を とする。SV が負

の時間隔ならば,

<符号>は,定数 中の<引用符なし時間隔データ列>内に指定しなければならな

い。

場合:

i)

TD の文字レパートリ中にない<SQL 言語文字>を が含むならば,例外条件:データ例外  -  型

変換での文字値が正しくない  が引き起こされる。

ii)  の文字単位での長さ LY が MLTD 以下ならば,TV は,とする。

iii)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  が引き起こされる。

e)

SD がブールならば,次による。

場合:

i)

SV が真で,かつ,MLTD が 4 未満でないならば,TV は,'TRUE'  とする。

ii)  SV が偽で,かつ,MLTD が 5 未満でないならば,TV は,'FALSE'  とする。

iii)  そうでなければ,

例外条件:

データ例外  -  型変換での文字値が正しくない  が引き起こされる。

12)  TD 及び SD が 2 進オクテット列型ならば,次による。

場合:

a)  TD が固定長 2 進オクテット列ならば,TD のオクテット単位での長さを LTD とする。

i)

SV のオクテット単位での長さが LTD と等しいならば,TV は,SV とする。

ii)  SV のオクテット単位での長さが LTD を超えるならば,TV は,SV の最初の LTD 個のオクテッ

トとし,終了条件:

警告  -  データ列データ,右切捨て  が引き起こされる。


208

X 3005-2:2015 (ISO/IEC 9075-2:2011)

iii)  SV のオクテット単位での長さ が LTD 未満ならば,TV は,LTD – 個の X'00'で右側を拡張

した SV する。

b)  そうでなければ,TD のオクテット単位での最大長を MLTD とする。

場合:

i)

SV のオクテット単位での長さが MLTD 以下ならば,TV は,SV とする。

ii)  SV のオクテット単位での長さが MLTD を超えるならば,TV は,SV の最初の MLTD 個のオク

テットとし,終了条件:

警告  -  データ列データ,右切捨て  が引き起こされる。

13)  TD が日時データ型 DATE ならば,次による。

場合

a)  SD が文字列ならば,SV は,次の値で置き換えられる。

TRIM ( BOTH ' ' FROM VE )

場合:

i)

データ型 TD の正しい値を決定するために,“5.3  <定数>”中の<定数>又は<引用符なし日付デ

ータ列

>に対する規則を SV に適用できるならば,その値を TV とする。

ii)  そうでなければ,例外条件:データ例外  -  日時形式が正しくない  (invalid datetime format)  が

引き起こされる。

b)  SD が日時データ型 DATE ならば,TV は,SV とする。

c)

SD が日時データ型 TIMESTAMP WITHOUT TIME ZONE ならば,TV は,SV の年,月及び日の<

基本日時フィールド

>とする。

d)  SD が日時データ型 TIMESTAMP WITH TIME ZONE ならば,TV は,次の式によって計算される。

CAST ( CAST ( VE AS TIMESTAMP WITHOUT TIME ZONE ) AS DATE )

14) SQL セションの現行既定時刻帯時差を STZD とする。

15)  TD が日時データ型 TIME WITHOUT TIME ZONE ならば,TD の<時刻精度>を TSP とする。

場合:

a)  SD が文字列ならば,SV は,次の値で置き換えられる。

TRIM ( BOTH ' ' FROM VE )

場合:

i)

データ型 TD の正しい値を決定するために,“5.3  <定数>”中の<定数>又は<引用符なし時刻デ

ータ列

>に対する規則を SV に適用できるならば,その値を TV とする。

ii)  データ型 TIME(TSP) WITH TIME ZONE の正しい値を決定するために,

5.3 <定数>”中の<定数

>又は<引用符なし時刻データ列>に対する規則を SV に適用できるならば,次の値を TV とする。

CAST ( CAST ( VE AS TIME(TSP) WITH TIME ZONE ) AS

TIME(TSP) WITHOUT TIME ZONE )

iii)  そうでなければ,例外条件:データ例外  -  日時形式が正しくない  が引き起こされる。

b)  SD が TIME WITHOUT TIME ZONE ならば,TV は,必要ならば,処理系定義の丸め又は切捨てを

行った SV とする。

c)

SD が TIME WITH TIME ZONE ならば,SV の UTC 構成要素を SVUTC とし,SV の時刻帯時差を

SVTZ とする。TV は,24 時間を法として計算し,必要ならば,処理系定義の丸め又は切捨てを行

った SVUTC+SVTZ とする。

d)  SD が TIMESTAMP WITHOUT TIME ZONE ならば,TV は,必要ならば,処理系定義の丸め又は


209

X 3005-2:2015 (ISO/IEC 9075-2:2011)

切捨てを行った SV の時,分及び秒の<基本日時フィールド>とする。

e)

SD が TIMESTAMP WITH TIME ZONE ならば,TV は,次の値とする。

CAST ( CAST ( VE AS TIMESTAMP(TSP) WITHOUT TIME ZONE )

AS TIME(TSP) WITHOUT TIME ZONE )

16)  TD が日時データ型 TIME WITH TIME ZONE ならば,TD の<時刻精度>を TSP とする。

場合:

a)  SD が文字列ならば,SV は,次の値で置き換えられる。

TRIM ( BOTH ' ' FROM VE )

場合:

i)

データ型 TD の正しい値を決定するために,“5.3  <定数>”中の<定数>又は<引用符なし時刻デ

ータ列

>に対する規則を SV に適用できるならば,その値を TV とする。

ii)  データ型 TIME(TSP) WITHOUT TIME ZONE の正しい値を決定するために,

5.3 <定数>”中の<

定数

>又は<引用符なし時刻データ列>に対する規則を SV に適用できるならば,次の値を TV 

する。

CAST ( CAST ( VE AS TIME(TSP) WITHOUT TIME ZONE )

AS TIME(TSP) WITH TIME ZONE )

iii)  そうでなければ,例外条件:データ例外  -  日時形式が正しくない  が引き起こされる。

b)  SD が TIME WITH TIME ZONE ならば,TV は,必要ならば,処理系定義の丸め又は切捨てを行っ

た SV とする。

c)

SD が TIME WITHOUT TIME ZONE ならば,TV の UTC 構成要素は,24 時間を法として計算し,

必要ならば,処理系定義の丸め又は切捨てを行った SV – STZD とし,TV の時刻帯構成要素は,

STZD とする。

d)  SD が TIMESTAMP WITH TIME ZONE ならば,TV の UTC 構成要素は,必要ならば,処理系定義

の丸め又は切捨てを行った SV の時,分及び秒の<基本日時フィールド>とし,TV の時刻帯構成要

素は,SV の時間帯時差とする。

e)

SD が TIMESTAMP WITHOUT TIME ZONE ならば,TV は,次の値とする。

CAST ( CAST ( VE AS TIMESTAMP(TSP) WITH TIME ZONE )

AS TIME(TSP) WITH TIME ZONE )

17)  TD が日時データ型 TIMESTAMP WITHOUT TIME ZONE ならば,

TD の<時刻印精度>を TSP とする。

場合:

a)  SD が文字列ならば,SV は,次の値で置き換えられる。

TRIM ( BOTH ' ' FROM VE )

場合:

i)

データ型 TD の正しい値を決定するために,“5.3  <定数>”中の<定数>又は<引用符なし時刻印

データ列

>に対する規則を SV に適用できるならば,その値を TV とする。

ii)  データ型 TIMESTAMP(TSP) WITH TIME ZONE の正しい値を決定するために,

5.3 <定数>”中

<定数>又は<引用符なし時刻印データ列>に対する規則を SV に適用できるならば,次の値を

TV とする。

CAST ( CAST ( VE AS TIMESTAMP(TSP) WITH TIME ZONE )

AS TIMESTAMP(TSP) WITHOUT TIME ZONE )


210

X 3005-2:2015 (ISO/IEC 9075-2:2011)

iii)  そうでなければ,例外条件:データ例外  -  日時形式が正しくない  が引き起こされる。

b)  SD が日付ならば,TV の<基本日時フィールド>時,分及び秒には,0 が設定され,TV の<基本日

時フィールド

>年,月及び日には,SV 中のそれらのそれぞれの値が設定される。

c)

SD が TIME WITHOUT TIME ZONE ならば,TV の<基本日時フィールド>年,月及び日には,

CURRENT_DATE の実行でのそれらのそれぞれの値が設定され,TV の<基本日時フィールド>時,

分及び秒には,必要ならば,処理系定義の丸め又は切捨てを行った SV 中のそれらのそれぞれの

値が設定される。

d)  SD が TIME WITH TIME ZONE ならば,TV は,次の値とする。

CAST ( CAST ( VE AS TIMESTAMP WITH TIME ZONE )

AS TIMESTAMP WITHOUT TIME ZONE )

e)

SD が TIMESTAMP WITHOUT TIME ZONE ならば,TV は,必要ならば,処理系定義の丸め又は

切捨てを行った SV とする。

f)

SD が TIMESTAMP WITH TIME ZONE ならば,SV の UTC 構成要素を SVUTC とし,SV の時刻帯

時差を SVTZ とする。TV は,必要ならば,処理系定義の丸め又は切捨てを行った SVUTC+SVTZ

とする。

18)  TD が日時データ型 TIMESTAMP WITH TIME ZONE ならば,TD の<時刻印精度>を TSP とする。

場合:

a)  SD が文字列ならば,SV は,次の値で置き換えられる。

TRIM ( BOTH ' ' FROM VE )

場合:

i)

データ型 TD の正しい値を決定するために,“5.3  <定数>”中の<定数>又は<引用符なし時刻印

データ列

>に対する規則を SV に適用できるならば,その値を TV とする。

ii)  データ型 TIMESTAMP(TSP) WITHOUT TIME ZONE の正しい値を決定するために,

5.3 <定数

>”中の<定数>又は<引用符なし時刻印データ列>に対する規則を SV に適用できるならば,次の

値を TV とする。

CAST ( CAST ( VE AS TIMESTAMP(TSP) WITHOUT TIME ZONE )

AS TIMESTAMP(TSP) WITH TIME ZONE )

iii)  そうでなければ,例外条件:データ例外  -  日時形式が正しくない  が引き起こされる。

b)  SD が日付ならば,TV は,次の値とする。

CAST ( CAST ( VE AS TIMESTAMP(TSP) WITHOUT TIME ZONE )

AS TIMESTAMP(TSP) WITH TIME ZONE )

c)

SD が TIME WITHOUT TIME ZONE ならば,TV は,次の値とする。

CAST ( CAST ( VE AS TIMESTAMP(TSP) WITHOUT TIME ZONE )

AS TIMESTAMP(TSP) WITH TIME ZONE )

d)  SD が TIME WITH TIME ZONE ならば,TV の<基本日時フィールド>年,月及び日には,

CURRENT_DATE の実行でのそれらのそれぞれの値が設定され,TV の<基本日時フィールド>時,

分及び秒には,必要ならば,処理系定義の丸め又は切捨てを行った SV 中のそれらのそれぞれの

値が設定される。TV の時刻帯構成要素には,SV の時刻帯時差が設定される。

e)

SD が TIMESTAMP WITHOUT TIME ZONE ならば,TV の UTC 構成要素は,STZD の時刻帯時差

をもつ SV – STZD とする。


211

X 3005-2:2015 (ISO/IEC 9075-2:2011)

f)

SD が TIMESTAMP WITH TIME ZONE ならば,TV は,必要ならば,処理系定義の丸め又は切捨

てを行った SV とする。

19)  TD が時間隔ならば,次による。

場合:

a)  SD が真数ならば,次による。

場合:

i)

データ型 TD での SV の表現が上位有効桁を失うことになるならば,例外条件:データ例外  -  時

間隔フィールドあふれ  (interval field overflow)  が引き起こされる。

ii)  次の<CAST 指定>によって形成される<真数定数>の位取りを NDSEN とする。

CAST (SV AS CHARACTER VARYING(max))

ここで,max は,CHARACTER VARYING 型の処理系定義の最大精度とする。TD の小数秒精

度の桁数 NDFSP が NDSEN 未満ならば,“4.4.2  数の性質”で規定するとおり,NDFSP 桁の

精度に SV を丸めることによって TV が決定されるか,又は NDFSP 桁の精度に SV を切り捨て

ることによって TV が決定されるかは,処理系定義とする。

iii)  そうでなければ,TV は,その表現とする。

b)  SD が文字列ならば,SV は,次の値で置き換えられる。

TRIM ( BOTH ' ' FROM VE )

場合:

i)

データ型 TD の正しい値を決定するために,“5.3  <定数>”中の<定数>又は<引用符なし時間隔

データ列

>に対する規則を SV に適用できるならば,その値を TV とする。

ii)  そうでなければ,例外条件:データ例外  -  時間隔形式が正しくない  (invalid interval format)  が

引き起こされる。

c)

SD が時間隔で,かつ,TD と SD とが同じ時間隔精度をもつならば,TV は,SV とする。

d)  SD が時間隔で,かつ,TD と SD とが異なる時間隔精度をもつならば,TD の最上位及び最下位有

<基本日時フィールド>を,それぞれ,及び とする。

i)

グレゴリオ暦で定義されたとおりの時間隔の自然な規則(すなわち,

1 分は,60 秒,1 時間は,

60 分,1 日は,24 時間,及び 1 年は,12 か月)に従って,SV を単位 でのスカラに変換した

結果を とする。

ii)  (再び,1 分は,60 秒,1 時間は,60 分,1 日は,24 時間,及び 1 年は,12 か月という規則に

従って,

TD の<時間隔修飾子>“P TO Q”に適合するように を正規化する。結果の最下位有

効フィールドで切り捨てるか又は丸めるかは,処理系定義とする。これが の先行日時フィー

ルドの精度を失うことになるならば,例外条件:

データ例外  -  時間隔フィールドあふれ  が引

き起こされる。

iii)  TV は,の値とする。

20)

09

 TD がブールならば,次による。

場合:

a)  SD が文字列ならば,SV は,次の値で置き換えられる。

TRIM ( BOTH ' ' FROM VE )

場合:

i)

データ型 TD の正しい値を決定するために,“5.3  <定数>”中の<定数>に対する規則を SV に適


212

X 3005-2:2015 (ISO/IEC 9075-2:2011)

用できるならば,その値を TV とする。

ii)  そうでなければ,

例外条件:

データ例外  -  型変換での文字値が正しくない  が引き起こされる。

b)  SD がブールならば,TV は,SV とする。

21) <CAST 指定>が<定義域名>を含み,<定義域制約>を含む定義域をその<定義域名>が参照し,かつ,

その

<定義域制約>に単純に含まれる<検査制約定義>を TV が満たさないならば,例外条件:整合性

制約違反  (integrity constraint violation)  が引き起こされる。

22)  CS の結果は,TV とする。

適合性規則

1)  機能 T042“拡張 LOB データ型提供”なしでは,適合する SQL 言語は,宣言型が BINARY LARGE

OBJECT 又は CHARACTER LARGE OBJECT である<CAST オペランド>を含んではならない。

2)  機能 F421“各国文字”なしでは,適合する SQL 言語は,宣言型が NATIONAL CHARACTER,

NATIONAL CHARACTER VARYING 又は NATIONAL CHARACTER LARGE OBJECT である<CAST

オペランド

>を含んではならない。

3)  機能 T042“拡張 LOB データ型提供”なしでは,適合する SQL 言語は,宣言型が NATIONAL

CHARACTER LARGE OBJECT である<CAST オペランド>を含んではならない。

4)  機能 S043“拡張参照型”なしでは,適合する SQL 言語中で,<CAST オペランド>の宣言型が参照

型ならば,

<CAST 相手>は,参照型である<データ型>を含まなければならない。

6.14  <次値式>

この細分箇条は,ISO/IEC 9075-4 の“6.3 <次値式>”によって修正される。 

機能

<次値式> (<next value expression>)  は,順序数生成子の次の値を戻す。

形式

<次値式> ::=

  NEXT VALUE FOR <順序数生成子名>

構文規則

1) <次値式>は,次のうちの一つに直接含まれなければならない。

a)  次のうちの一つに直に含まれる<問合せ式>を構成する<問合せ指定>に単純に含まれる<選択リス

>。

i) <カーソル指定>。

ii) <表定義>中の<AS 副問合せ句>に単純に含まれる<表副問合せ>。

iii) <副問合せ発>。

iv) <SELECT 文:単一行>。

b) <動的単一行 SELECT 文>に直に含まれる<問合せ指定>に単純に含まれる<選択リスト>。

c) <構成子発>。

d) <併合挿入値リスト>。

e)

04

 <更新元>。

2) <次値式>は,<CASE 式>,<探索条件>,<ORDER BY 句>,<集約関数>,<ウィンドウ関数>,グル

ープ問合せ,又は

<集合限定子> DISTINCT を単純に含む<問合せ指定>に含まれてはならない。

3) <次値式>の宣言型は,<順序数生成子名>によって識別される順序数生成子記述子に含まれるデータ

型記述子によって記述されるデータ型とする。


213

X 3005-2:2015 (ISO/IEC 9075-2:2011)

アクセス規則

1)  場合:

a) <次値式>が<スキーマ定義>に含まれるならば,その<スキーマ定義>を含むスキーマを所有する<

認可識別子

>に適用可能な権限は,<順序数生成子名>によって識別される順序数生成子に関する

USAGE 権限を含まなければならない。

b)  そうでなければ,現行の権限は,<順序数生成子名>によって識別される順序数生成子に関する

USAGE 権限を含まなければならない。

一般規則

1) <次値式> NVE が指定されるならば,NVE に含まれる<順序数生成子名>によって識別される順序数

生成子記述子を SEQ とする。

場合:

a)  NVE が<問合せ指定>  QS に直接含まれるならば,QS の結果中の各行 RQS に対して,SEQ 

SEQUENCE として,

9.25  順序数生成子の次値の生成”の一般規則を適用する。これらの一般規

則の適用によって戻される RESULT を RQS に対する値とする。

b)  NVE が<文脈型付き表値生成子>  TVC に直接含まれるならば,TVC に含まれる各<文脈型付き行

値式

CTRVE に対して,SEQ を SEQUENCE として,“9.25  順序数生成子の次値の生成”の一般

規則を適用する。これらの一般規則の適用によって戻される RESULT を CTRVE に対する値とす

る。

c)

NVE が<更新元>に直接含まれるならば,<UPDATE 文:探索>又は<UPDATE 文:位置付け>によ

って更新される各行 USR に対して,SEQ を SEQUENCE として,“9.25  順序数生成子の次値の生

成”の一般規則を適用する。これらの一般規則の適用によって戻される RESULT を USR に対す

る値とする。

適合性規則

1)  機能 T176“順序数生成子提供”なしでは,適合する SQL 言語は,<次値式>を含んではならない。

6.15  <フィールド参照>

機能

<フィールド参照> (<field reference>)  は,行値のフィールドを参照する。

形式

<フィールド参照> ::=

  <値式一次子> <ピリオド> <フィールド名>

構文規則

1) <フィールド参照>を FR とし,FR に直に含まれる<値式一次子>を VEP とし,FR に直に含まれる<

フィールド名

>を FN とする。

2)  VEP の宣言型は,行型でなければならない。その行型を RT とする。

3)  FR は,フィールド参照  (field reference)  とする。

4)  FN は,RT のフィールドを曖昧さなく参照しなければならない。そのフィールドを とする。

5)  FR の宣言型は,の宣言型とする。

アクセス規則

なし。 

一般規則


214

X 3005-2:2015 (ISO/IEC 9075-2:2011)

1)  VEP の値を VR とする。

2)  場合:

a)  VR がナル値ならば,FR の値は,ナル値とする。

b)  そうでなければ,FR の値は,VR のフィールド の値とする。

適合性規則

1)  機能 T051“行型”なしでは,適合する SQL 言語は,<フィールド参照>を含んではならない。

6.16  <下位型扱い>

機能

<下位型扱い> (<subtype treatment>)  は,式の宣言型を修正する。

形式

<下位型扱い> ::=

  TREAT  <左括弧> <下位型オペランド> AS <相手下位型> <右括弧>

<下位型オペランド> ::=

  <値式>

<相手下位型> ::=

  <パス解決利用者定義型名>

 |

<参照型>

構文規則

1) <値式>の宣言型 VT は,構造型又は参照型でなければならない。

2)  場合:

a)  VT が構造型ならば,次による。

i) <相手下位型>は,<パス解決利用者定義型名>を指定しなければならない。

ii) <パス解決利用者定義型名>に単純に含まれる<利用者定義型名>によって識別される構造型を

DT とする。

b)  そうでなければ,次による。

i) <相手下位型>は,<参照型>を指定しなければならない。

ii) <参照型>によって識別される参照型を DT とする。

3)  VT は,DT の上位型でなければならない。

4) <下位型扱い>の結果の宣言型は,DT とする。

アクセス規則

なし。 

一般規則

1) <値式>の値を とする。

2)  場合:

a)  がナル値ならば,<下位型扱い>の値は,ナル値とする。

b)  そうでなければ,次による。

i)

の最特定型が DT の下位型でないならば,例外条件:相手の型の指定が正しくない  (invalid 

target type specification)  が引き起こされる。

注記 150  “最特定型”は,“4.7.3.4  下位型及び上位型”で定義している。

ii) <下位型扱い>の値は,とする。


215

X 3005-2:2015 (ISO/IEC 9075-2:2011)

適合性規則

1)  機能 S161“下位型扱い”なしでは,適合する SQL 言語は,<下位型扱い>を含んではならない。

2)  機能 S162“参照に対する下位型扱い”なしでは,適合する SQL 言語は,<参照型>を含む<相手下位

>を含んではならない。

6.17  <メソッド呼出し>

この細分箇条は,ISO/IEC 9075-13 の“6.1 <メソッド呼出し>”によって修正される。 

機能

<メソッド呼出し> (<method invocation>)  は,利用者定義型の値の SQL 呼出しメソッドを参照する。

形式

<メソッド呼出し> ::=

  <直接呼出し>

 |

<一般化呼出し>

<直接呼出し> ::=

  <値式一次子> <ピリオド> <メソッド名> [ <SQL 引数リスト> ]

<一般化呼出し> ::=

  <左括弧> <値式一次子> AS <データ型> <右括弧>

      <ピリオド> <メソッド名> [ <SQL 引数リスト> ]

<メソッド選択> ::=

  <ルーチン呼出し>

<構成メソッド選択> ::=

  <ルーチン呼出し>

構文規則

1) <メソッド呼出し>を OR とし,OR の<直接呼出し>又は<一般化呼出し>に直に含まれる<値式一次子

>を VEP とし,OR に直に含まれる<メソッド名>を MN とする。

2)

13

 VEP の宣言型は,利用者定義型でなければならない。その利用者定義型を UDT とする。

3)  場合:

a) <SQL 引数リスト>が指定されるならば,次の文字列を AL とする。

A

1

, ..., A

n

ここで,Ai,1 ≤ i ≤ は,<SQL 引数リスト>中での順序位置の順序で,<SQL 引数リスト>に直に

含まれる

<SQL 引数>とする。

b)  そうでなければ,長さ 0 の文字列を AL とする。

4)  場合:

a) <メソッド呼出し>が<新呼出し>に直に含まれるならば,UDT の記述子を含むスキーマの<スキー

マ名

>を含む SQL パスを TP とする。

b)  そうでなければ,UDT の上位型又は下位型の記述子を含む全てのスキーマの<スキーマ名>を含む,

任意に定義された

SQL パスを TP とする。

5)  場合:

a) <一般化呼出し>が指定されるならば,

<一般化呼出し>に単純に含まれる<データ型>を DT とする。

次の

<メソッド選択>を RI とする。

MN (VEP AS DT AL)


216

X 3005-2:2015 (ISO/IEC 9075-2:2011)

b)  そうでなければ,次による。

場合:

i) <メソッド呼出し>が<新呼出し>に直に含まれるならば,次の<構成メソッド選択>を RI とする。

MN (VEP AL)

ii)  そうでなければ,次の<メソッド選択>を RI とする。

MN (VEP AL)

6)  RI を ROUTINE  INVOCATION として,TP を SQLPATH として,

10.4  <ルーチン呼出し>”の構文

規則を適用し,当該ルーチン SR 及び静的 SQL 引数リスト SAL を生成する。

アクセス規則

なし。 

一般規則

1)  SR を SUBJECT ROUTINE として,

SAL を STATIC SQL ARG LIST として,

10.4 <ルーチン呼出し>”

の一般規則を適用し,

<ルーチン呼出し>の結果である値 を生成する。

2) <メソッド呼出し>の値は,とする。

適合性規則

1)  機能 S023“基本構造型”なしでは,適合する SQL 言語は,<メソッド呼出し>を含んではならない。

6.18  <静的メソッド呼出し>

機能

<静的メソッド呼出し> (<static method invocation>)  は,静的メソッドを呼び出す。

形式

<静的メソッド呼出し> ::=

  <パス解決利用者定義型名> <2 重コロン> <メソッド名>

      [  <SQL 引数リスト> ]

<静的メソッド選択> ::=

  <ルーチン呼出し>

構文規則

1) <パス解決利用者定義型名>に直に含まれる<利用者定義型名>を TN とし,TN によって識別される

利用者定義型を とする。

2) <静的メソッド呼出し>に直に含まれる<メソッド名>を MN とする。

3)  場合:

a) <SQL 引数リスト>が指定されるならば,その<SQL 引数リスト>を AL とする。

b)  そうでなければ,<左括弧><右括弧>を AL とする。

4)  の上位型の記述子を含む全てのスキーマの<スキーマ名>だけを含む SQL パスを TP とする。

5)  次の<ルーチン呼出し>を RI とする。

MN AL

6)  次の<静的メソッド選択>を SMS とする。

RI

7)  RI を ROUTINE  INVOCATION として,TP を SQLPATH として,を UDT として,

10.4  <ルーチ

ン呼出し

>”の構文規則を適用し,当該ルーチン SR 及び静的 SQL 引数リスト SAL を生成する。

アクセス規則


217

X 3005-2:2015 (ISO/IEC 9075-2:2011)

なし。 

一般規則

1)  SR を SUBJECT ROUTINE として,

SAL を STATIC SQL ARG LIST として,

10.4 <ルーチン呼出し>”

の一般規則を適用し,

<ルーチン呼出し>の結果である値 を生成する。

2) <静的メソッド呼出し>の値は,とする。

適合性規則

1)  機能 S024“拡張構造型”なしでは,適合する SQL 言語は,<静的メソッド呼出し>を含んではなら

ない。

6.19  <NEW 指定>

この細分箇条は,ISO/IEC 9075-13 の“6.2 <NEW 指定>”によって修正される。 

機能

<NEW 指定> (<new specification>)  は,構造型の値を新たに構成するメソッドを呼び出す。

形式

<NEW 指定> ::=

  NEW  <パス解決利用者定義型名> <SQL 引数リスト>

<新呼出し> ::=

  <メソッド呼出し>

 |

<ルーチン呼出し>

構文規則

1) <NEW 指定>に直に含まれる<パス解決利用者定義型名>を UDTN とする。UDTN に直に含まれる<

被修飾識別子

>を MN とする。

2)  UDTN によって識別される利用者定義型を UDT とする。UDT は,実現値生成可でなければならな

い。UDTN の暗に想定されるか又は陽に指定される<スキーマ名>を SN とする。SN によって識別さ

れるスキーマを とする。SN.MN を RN とする。

3)  場合:

a) <NEW 指定>が次の形式

NEW UDTN()

から成るならば,次による。

場合:

i)

メソッド名が MN と等価で,かつ,非拡張パラメタリストが空である SQL 呼出し構成メソッド

の記述子を が含まないならば,<NEW 指定>は,次の<新呼出し>と等価とする。

RN()

ii)  そうでなければ,<NEW 指定>は,次の<新呼出し>と等価とする。

RN().MN()

b)  そうでなければ,次の<NEW 指定>

NEW UDTN(a

1

a

2

, ..., a

n

)

は,次の

<新呼出し>と等価とする。

RN().MN(a

1

a

2

, ..., a

n

)

アクセス規則

なし。 


218

X 3005-2:2015 (ISO/IEC 9075-2:2011)

注記 151  “10.4 <ルーチン呼出し>”の構文規則に従って,構成関数及び示された構成メソッドに関

する

EXECUTE 権限を,(適切に)適用可能な権限又は現行の権限が含む。

一般規則

なし。 

適合性規則

1)  機能 S023“基本構造型”なしでは,適合する SQL 言語は,<NEW 指定>を含んではならない。

6.20  <属性又はメソッド参照>

機能

<属性又はメソッド参照> (<attribute and method reference>)  は,参照型の値又は SQL 呼出しメソッドの呼

出しによって識別される行の列をアクセスすることによって得られる値を戻す。

形式

<属性又はメソッド参照> ::=

  <値式一次子> <内参照演算子> <被修飾識別子>

      [  <SQL 引数リスト> ]

<内参照演算子> ::=

  <右矢印>

構文規則

1) <値式一次子> VEP の宣言型は,

参照型でなければならず,その参照型記述子に含まれる有効範囲は,

空であってはならない。VEP の被参照型を RT とする。

2) <被修飾識別子>を QI とする。<SQL 引数リスト>が指定されるならば,<SQL 引数リスト>を SAL

とする。そうでなければ,長さ

0 の文字列を SAL とする。

3)  場合:

a)  QI が RT の属性の属性名と等価で,かつ,SAL が長さ 0 の文字列ならば,<属性又はメソッド参

>は,次の形式の<内参照演算> AMR によって実効的に置き換えられる。

VEP -> QI

b)  そうでなければ,<属性又はメソッド参照>は,次の形式の<メソッド参照>  AMR によって実効的

に置き換えられる。

VEP -> QI SAL

4) <属性又はメソッド参照>の宣言型は,AMR の宣言型とする。

アクセス規則

なし。 

一般規則

なし。 

適合性規則

1)  機能 S041“基本参照型”なしでは,適合する SQL 言語は,<属性又はメソッド参照>を含んではな

らない。

6.21  <内参照演算>

機能

<内参照演算> (<dereference operation>)  は,参照型の値によって識別される行の列にアクセスする。

形式


219

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<内参照演算> ::=

  <参照値式> <内参照演算子> <属性名>

構文規則

1) <参照値式>を RVE とする。RVE の参照型記述子は,有効範囲を含まなければならない。RVE の被

参照型を RT とする。

2) <属性名>を AN とする。AN は,RT の属性 AT を識別しなければならない。

3) <内参照演算>の宣言型は,AT の宣言型とする。

4)  RVE の参照型の有効範囲中の参照可能表の名前を とする。

5)  の自己参照列の名前を OID とする。

6) <内参照演算>は,次の形式の<スカラ副問合せ>と等価とする。

( SELECT AN

   FROM  S

   WHERE  S.OID = RVE )

アクセス規則

なし。 

一般規則

なし。 

適合性規則

1)  機能 S041“基本参照型”なしでは,適合する SQL 言語は,<内参照演算>を含んではならない。

6.22  <メソッド参照>

機能

<メソッド参照> (<method reference>)  は,メソッドである SQL 呼出しルーチンの呼出しで得られる値を

戻す。

形式

<メソッド参照> ::=

  <値式一次子> <内参照演算子> <メソッド名> <SQL 引数リスト>

構文規則

1) <値式一次子> VEP の宣言型は,

参照型でなければならず,その参照型記述子に含まれる有効範囲は,

空であってはならない。

2)  メソッド名を MN とする。<SQL 引数リスト>を MRAL とする。

3)  次の<メソッド呼出し>に対して,

6.17  <メソッド呼出し>”の構文規則が評価され,当該ルーチン

SR 及び静的 SQL 引数リスト SAL を生成する。

DEREF (VEP) . MN MRAL

4) <メソッド参照>の宣言型は,次の式の宣言型とする。

DEREF (VEP) . MN MRAL

アクセス規則

1)  VEP の有効範囲である表を SCOPE とする。

場合:

a)  SQL SECURITY INVOKER を指定する<SQL ルーチン指定>を介在しないで,<メソッド参照>が

<SQL スキーマ文>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識


220

X 3005-2:2015 (ISO/IEC 9075-2:2011)

別子

>の適用可能な権限は,表 SCOPE 及びメソッド SR に対する表/メソッド権限を含まなければ

ならない。

b)  そうでなければ,現行の権限は,表 SCOPE 及びメソッド SR に対する表/メソッド権限を含まな

ければならない。

一般規則

1)  SR 及び SAL を,それぞれ,当該ルーチン及び SQL 引数リストとして,

6.17  <メソッド呼出し>”

の一般規則を適用し,

<ルーチン呼出し>の結果である値 を生成する。

2) <メソッド参照>の値は,とする。

適合性規則

1)  機能 S043“拡張参照型”なしでは,適合する SQL 言語は,<メソッド参照>を含んではならない。

6.23  <参照解決>

機能

<参照解決> (<reference resolution>)  は,REF 値によって参照される値を得る。

形式

<参照解決> ::=

  DEREF  <左括弧> <参照値式> <右括弧>

構文規則

1) <参照解決>を RR とし,<参照値式>を RVE とする。RVE の参照型記述子は,有効範囲を含まなけ

ればならない。

2)  RR の宣言型は,RVE の宣言型によって参照される構造型とする。

3)  RVE の参照型記述子に含まれる表名によって識別される表を SCOPE とする。SCOPE は,RR のた

めの有効範囲化された表とする。

注記 152  “有効範囲化された表”という用語は,“4.9  参照型”で定義している。

4)  SCOPE の下位表の個数を とする。任意の順序で,SCOPE の下位表を Si,1 ≤ i ≤ とする。

5)  各 Si,1 ≤ i ≤ に対して,Si に関連付けられた構造型 STi の Si の記述子に含まれる名前を STNi 

し,Si の自己参照列を REFCOLi とし,STi の属性の個数を Ni とし,STi の属性の名前,すなわち,
Si の列の名前を Ai,j,1 ≤ j ≤ Ni とする。

アクセス規則

1)  場合:

a) <参照解決>が<スキーマ定義>に含まれるならば,その<スキーマ定義>を含むスキーマを所有する

<認可識別子>に適用可能な権限は,SCOPE の少なくとも一つの上位表に関する SELECT WITH

HIERARCHY OPTION を含まなければならない。

b)  そうでなければ,現行の権限は,SCOPE の少なくとも一つの上位表に関する SELECT WITH

HIERARCHY OPTION を含まなければならない。

一般規則

1) <参照解決>の値は,次の値とする。

 (

   SELECT  A

1,1

 ( ... A

1,N1

     ( STN

1

(),A

1,N1

 ), ... A

1,1

 )

   FROM  ONLY  S

1


221

X 3005-2:2015 (ISO/IEC 9075-2:2011)

   WHERE  S

1

.REFCOL

1

 = RVE

  UNION

   SELECT  A

2,1

 ( ... A

2,N2

     ( STN

2

(), A

2,N2

 ), ... A

2,1

 )

   FROM  ONLY  S

2

   WHERE  S

2

.REFCOL

2

 = RVE

  UNION

 ...

  UNION

   SELECT  A

m,1

 ( ... A

m,Nm

     ( STN

m

(), A

m,Nm

 ), ... A

m,1

 )

   FROM  ONLY  S

m

   WHERE  S

m

.REFCOL

m

 = RVE

 )

注記 153  この一般規則の評価は,これ以上のアクセス規則の検査なしで,実効的に実行される。

適合性規則

1)  機能 S043“拡張参照型”なしでは,適合する SQL 言語は,<参照解決>を含んではならない。

6.24  <配列要素参照>

機能

<配列要素参照> (<array element reference >)  は,配列の要素を戻す。

形式

<配列要素参照> ::=

  <配列値式>

      <左角括弧又は 3 文字表記> <数値式> <右角括弧又は 3 文字表記>

構文規則

1) <配列要素参照>の宣言型は,指定された<配列値式>の要素型とする。

2) <数値式>の宣言型は,位取り 0 の真数でなければならない。

アクセス規則

なし。 

一般規則

1) <配列値式>又は<数値式>の値がナル値ならば,<配列要素参照>の結果は,ナル値とする。

2) <数値式>の値を とする。

場合:

a)  が 0 より大きく,かつ,<配列値式>の基数以下ならば,<配列要素参照>の結果は,<配列値式>

の値の 番目の要素の値とする。

b)  そうでなければ,例外条件:データ例外  (data exception)  -  配列要素誤り  (array element error)  が

引き起こされる。

適合性規則

1)  機能 S091“基本配列提供”なしでは,適合する SQL 言語は,<配列要素参照>を含んではならない。

6.25  <マルチ集合要素参照>


222

X 3005-2:2015 (ISO/IEC 9075-2:2011)

機能

<マルチ集合要素参照> (<multiset element reference >)  は,一つの要素から成るマルチ集合の唯一の要素を

戻す。

形式

<マルチ集合要素参照> ::=

  ELEMENT  <左括弧> <マルチ集合値式> <右括弧>

構文規則

1) <マルチ集合値式>を MVE とする。

<マルチ集合要素参照>は,次の<スカラ副問合せ>と等価とする。

( SELECT M.E

  FROM  UNNEST  (MVE) AS M(E) )

アクセス規則

なし。 

一般規則

なし。 

適合性規則

1)  機能 S271“基本マルチ集合提供”なしでは,適合する SQL 言語は,<マルチ集合要素参照>を含ん

ではならない。

6.26  <値式>

この細分箇条は,ISO/IEC 9075-9 の“6.3 <値式>”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“6.7 <値式>”によって修正される。 

機能

<値式> (<value expression>)  は,値を指定する。

形式

<値式> ::=

  <共通値式>

 |

<ブール値式>

 |

<行値式>

09

14

 <共通値式> ::=

  <数値式>

 |

<データ列値式>

 |

<日時値式>

 |

<時間隔値式>

 |

<利用者定義型値式>

 |

<参照値式>

 |

<集まり値式>

<利用者定義型値式> ::=

  <値式一次子>

<参照値式> ::=

  <値式一次子>

<集まり値式> ::=


223

X 3005-2:2015 (ISO/IEC 9075-2:2011)

  <配列値式>

 |

<マルチ集合値式>

構文規則

1) <値式>の宣言型は,

それに単純に含まれる

<共通値式>,<ブール値式>又は<行値式>の宣言型とする。

2)

09

14

 <共通値式>の宣言型は,それぞれ,<数値式>,<データ列値式>,<日時値式>,<時間隔値式>,

<利用者定義型値式>,<集まり値式>又は<参照値式>の宣言型とする。

3) <利用者定義型値式>の宣言型は,それに直に含まれる<値式一次子>の宣言型とし,その<値式一次

>は,利用者定義型でなければならない。

4) <参照値式>の宣言型は,それに直に含まれる<値式一次子>の宣言型とし,その<値式一次子>は,参

照型でなければならない。

5) <集まり値式>の宣言型は,それに直に含まれる<配列値式>又は<マルチ集合値式>の宣言型とする。

6)  ある列を とする。<値式>を VE とする。VE に含まれる列参照によって が識別されるならば,C

は,VE の基となる列  (underlying column)  とする。が VE の基となる列であるか,又は が VE 

基となる列の一般に基となる列ならば,は,VE の一般に基となる列  (generally underlying column)

とする。

7) <値式>又は<括弧なし値式一次子>が次のいずれかを一般に含むならば,それは,潜在的に非決定的

(possibly non-deterministic)  とする。

a) <日時値関数>。

b) <次値式>。

c)

次のいずれかであるか,又は“6.13 <CAST 指定>”の一般規則の実行によって,次のいずれかを

再帰的に意味する

<CAST 指定>。

i)

結果の型が時刻帯付き日時で,かつ,時刻帯付き日時ではない宣言型を

<CAST オペランド>が

もつ

<CAST 指定>。

ii)

14

  結果の型が配列型で,かつ,マルチ集合型である宣言型を<CAST オペランド>がもつ<CAST

指定

>。

d) <問合せによる配列値構成子>。

e)

宣言型が時刻帯なし日時である

<日時一次子>を単純に含み,かつ,陽に指定された<時刻帯>を単

純に含む

<日時因子>。

f)

一方のオペランドの宣言型が時刻帯付き日時で,かつ,他方のオペランドの宣言型が時刻帯なし

日時であるような,

<日時値式>と<日時項>との差を計算する<時間隔値式>。

g)  一方の構成要素が時刻帯付き日時で,かつ,他方の構成要素が時刻帯なし日時であるような対応

する構成要素を宣言型としてもつような

<行値述語オペランド>  RVP1 及び RVP2 を単純に含む<

比較述語

>,<OVERLAPS 述語>又は<DISTINCT 述語>。

注記 154  これは,<比較述語>への構文変換によって,<BETWEEN 述語>を含む。

h)  一方の構成要素が時刻帯付き日時で,かつ,他方の構成要素が時刻帯なし日時であるような対応

する構成要素を宣言型としてもつような

<行値述語オペランド>  RVP 及び<表副問合せ>  TS を単

純に含む

<限定比較述語>又は<MATCH 述語>。

注記 155  これは,<限定比較述語>への構文変換によって,<IN 述語>を含む。

i)

一方の構成要素が時刻帯付き日時で,かつ,他方の構成要素が時刻帯なし日時であるような対応

する構成要素を,

<行値述語オペランド> RVP の唯一のフィールド の宣言型,及び<マルチ集合


224

X 3005-2:2015 (ISO/IEC 9075-2:2011)

値式

MVP の要素型がもつような,RVP 及び MVP を単純に含む<MEMBER 述語>。

j)

一方の構成要素が時刻帯付き日時で,かつ,他方の構成要素が時刻帯なし日時であるような対応

する構成要素を,

<行値述語オペランド> RVP の唯一のフィールド の要素型,及び<マルチ集合

値式

MVP の要素型がもつような,RVP 及び MVP を単純に含む<SUBMULTISET 述語>。

k)  一方の構成要素が時刻帯付き日時で,かつ,他方の構成要素が時刻帯なし日時であるような対応

する構成要素をオペランドの要素型としてもつような

MULTISET UNION,MULTISET EXCEPT

又は

MULTISET INTERSECT を指定するか又は暗に想定する<マルチ集合値式>。

l) CURRENT_USER,CURRENT_ROLE,SESSION_USER,SYSTEM_USER,CURRENT_CATALOG,

CURRENT_SCHEMA 又は CURRENT_PATH である<値指定>。

m)  潜在的に非決定的である SQL 呼出しルーチンを当該ルーチンとしてもつ<ルーチン呼出し>。

n)

14

 MIN 又は MAX を指定する<集約関数>で,文字列型,利用者定義型又は時刻帯付き日時型を基

にする宣言型をもつ

<値式>を単純に含む<集約関数>。

o) INTERSECTION を指定する<集約関数>で,文字列型,利用者定義型又は時刻帯付き日時型を基に

する宣言要素型をもつ

<値式>を単純に含む<集約関数>。

p) <配列集約関数>。

q) MULTISET

UNION

DISTINCT,MULTISET EXCEPT 又は MULTISET INTERSECT を指定する<マ

ルチ集合値式

>で,文字列型,利用者定義型又は時刻帯付き日時型を基にする宣言要素型を結果の

型としてもつ

<マルチ集合値式>。

r)

文字列型,利用者定義型又は時刻帯付き日時型を基にする宣言要素型をもつ

<マルチ集合 SET 関

>。

s) ROW_NUMBER,FIRST_VALUE,LAST_VALUE,NTH_VALUE,NTILE,LEAD 若しくは LAG を

指定するか,又は関連付けられた

<ウィンドウ指定>が ROWS を指定する<ウィンドウ指定>。

t)

14

  潜在的に非決定的である<問合せ指定>又は<問合せ式>。

注記 156  あるデータ型が別のデータ型を基にするという概念は,“4.1  データ型”で定義している。

アクセス規則

なし。 

一般規則

1) <値式>の値は,それに単純に含まれる<共通値式>,<ブール値式>又は<行値式>の値とする。

2)

14

 <共通値式>の値は,それに直に含まれる<数値式>,<データ列値式>,<日時値式>,<時間隔値式

>,<利用者定義型値式>,<集まり値式>又は<参照値式>の値とする。

3)  表の行 に対して<値式> が評価されるとき,に直接含まれる列参照 CR によるその表の列への

各参照は,その行中のその列の値とする。

4) <集まり値式>の値は,それに直に含まれる<配列値式>又は<マルチ集合値式>の値とする。

5) <参照値式> RVE の値は,RVE に直に含まれる<値式一次子>の値とする。

適合性規則

1)  機能 T031“BOOLEAN データ型”なしでは,適合する SQL 言語は,<ブール値式>である<値式>を

含んではならない。

2)  機能 S041“基本参照型”なしでは,適合する SQL 言語は,<参照値式>を含んではならない。

6.27  <数値式>

機能


225

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<数値式> (<numeric value expression>)  は,数値を指定する。

形式

<数値式> ::=

  <項>

 |

<数値式> <正符号> <項>

 |

<数値式> <負符号> <項>

<項> ::=

  <因子>

 |

<項> <アスタリスク> <因子>

 |

<項> <斜線> <因子>

<因子> ::=

  [  <符号> ] <数一次子>

<数一次子> ::=

  <値式一次子>

 |

<数値関数>

構文規則

1) 2 項算術演算子の両方のオペランドの宣言型が真数ならば,結果の宣言型は,次のとおりに決定さ

れる精度及び位取りをもつ処理系定義の真数型とする。

a) 1 番目及び 2 番目のオペランドの位取りを,それぞれ,S1 及び S2 とする。

b)  加算及び減算の結果の精度は,処理系定義とし,位取りは,S1 と S2 との最大値とする。

c)

乗算の結果の精度は,処理系定義とし,位取りは,S1 + S2 とする。

d)  除算の結果の精度及び位取りは,処理系定義とする。

2) 2 項算術演算子のいずれかのオペランドの宣言型が概数ならば,結果の宣言型は,処理系定義の概

数型とする。

3) <因子>の宣言型は,それに直に含まれる<数一次子>の宣言型とする。

4) <数一次子>の宣言型は,数でなければならない。

5) <数値式>が<負符号> NMS を直に含み,かつ,<負符号> FMS である<符号>を直に含む<因子>を直

に含む

<項>を直に含むならば,NMS と FMS との間に<分離符号>がなければならない。

アクセス規則

なし。 

一般規則

1) <数値式>に単純に含まれるいずれかの<数一次子>の値がナル値ならば,<数値式>の結果は,ナル値

とする。

2) <数値式>が<数一次子>だけを含むならば,<数値式>の結果は,指定された<数一次子>の値とする。

3)  単項算術演算子<正符号>及び<負符号>(それぞれ,+及び-)は,それぞれ,単項プラス及び単項マ

イナスを指定する。単項プラスは,そのオペランドを変更しない。単項マイナスは,そのオペラン

ドの符号を反転する。

4) 2 項算術演算子<正符号>,<負符号>,<アスタリスク>及び<斜線>(それぞれ,+,-,*及び/)は,

それぞれ,加算,減算,乗算及び除算を指定する。除数の値が

0 ならば,例外条件:データ例外  (data 

exception)  -  による除算  (division by zero)  が引き起こされる。


226

X 3005-2:2015 (ISO/IEC 9075-2:2011)

5)  算術演算の結果の最特定型が真数ならば,次による。

場合:

a)  演算子が除算ではなく,かつ,結果の宣言型の精度及び位取りで算術演算結果が正確に表現可能

でないならば,例外条件:

データ例外  -  数値範囲外  (numeric value out of range)  が引き起こされ

る。

b)  演算子が除算で,かつ,結果の宣言型の精度及び位取りで表現された概算算術演算結果が,丸め

又は切捨てが必要ならば,その後で,

1 桁以上の上位有効桁を失うならば,例外条件:データ例

外  -  数値範囲外  が引き起こされる。丸めるか又は切り捨てるかの選択は,処理系定義とする。

6)  算術演算の結果の最特定型が概数で,かつ,概算算術演算結果の指数が結果の宣言型に対する処理

系定義の指数の範囲内でないならば,例外条件:

データ例外  -  数値範囲外  が引き起こされる。

適合性規則

なし。 

6.28  <数値関数>

機能

<数値関数> (<numeric value function>)  は,数型の値を生成する関数を指定する。

形式

<数値関数> ::=

  <POSITION 式>

 |

<OCCURRENCES_REGEX 関数>

 |

<POSITION_REGEX 式>

 |

<EXTRACT 式>

 |

<LENGTH 式>

 |

<基数式>

 |

<最大基数式>

 |

<絶対値式>

 |

<剰余式>

 |

<自然対数>

 |

<指数関数>

 |

<べき関数>

 |

<平方根>

 |

<下限関数>

 |

<上限関数>

 |

<幅バケット関数>

<POSITION 式> ::=

  <文字 POSITION 式>

 |

<2 進オクテット POSITION 式>

<OCCURRENCES_REGEX 関数> ::=

  OCCURRENCES_REGEX  <左括弧>

      <XQuery パターン> [ FLAG <XQuery オプションフラグ> ]

      IN  <REGEX 当該文字列>


227

X 3005-2:2015 (ISO/IEC 9075-2:2011)

      [  FROM  <開始位置> ]

      [  USING  <文字長単位> ]

      <右括弧>

<XQuery パターン> ::=

  <文字値式>

<XQuery オプションフラグ> ::=

  <文字値式>

<REGEX 当該文字列> ::=

  <文字値式>

<POSITION_REGEX 式> ::=

  POSITION_REGEX  <左括弧>

      [<POSITION_REGEX の START 又は AFTER> ]

      <XQuery パターン> [ FLAG <XQuery オプションフラグ> ]

      IN  <REGEX 当該文字列>

      [  FROM  <開始位置> ]

      [  USING  <文字長単位> ]

      [  OCCURRENCE  <REGEX 出現回数> ]

      [  GROUP  <REGEX キャプチャグループ> ]

      <右括弧>

<POSITION_REGEX の START 又は AFTER> ::=

  START

 |

AFTER

<REGEX 出現回数> ::=

  <数値式>

<REGEX キャプチャグループ> ::=

  <数値式>

<文字 POSITION 式> ::=

  POSITION  <左括弧> <文字値式 1> IN <文字値式 2>

      [  USING  <文字長単位> ] <右括弧>

<文字値式 1> ::=

  <文字値式>

<文字値式 2> ::=

  <文字値式>

<2 進オクテット POSITION 式> ::=

  POSITION  <左括弧> <2 進オクテット値式> IN <2 進オクテット値式> <右括弧>

<LENGTH 式> ::=

  <CHAR_LENGTH 式>

 |

<OCTET_LENGTH 式>

<CHAR_LENGTH 式> ::=

  { CHAR_LENGTH | CHARACTER_LENGTH } <左括弧> <文字値式>


228

X 3005-2:2015 (ISO/IEC 9075-2:2011)

      [  USING  <文字長単位> ] <右括弧>

<OCTET_LENGTH 式> ::=

  OCTET_LENGTH  <左括弧> <データ列値式> <右括弧>

<EXTRACT 式> ::=

  EXTRACT  <左括弧> <抜き出しフィールド> FROM <抜き出し元> <右括弧>

<抜き出しフィールド> ::=

  <基本日時フィールド>

 |

<時刻帯フィールド>

<時刻帯フィールド> ::=

  TIMEZONE_HOUR

 |

TIMEZONE_MINUTE

<抜き出し元> ::=

  <日時値式>

 |

<時間隔値式>

<基数式> ::=

  CARDINALITY  <左括弧> <集まり値式> <右括弧>

<最大基数式> ::=

  ARRAY_MAX_CARDINALITY  <左括弧> <配列値式> <右括弧>

<絶対値式> ::=

  ABS  <左括弧> <数値式> <右括弧>

<剰余式> ::=

  MOD  <左括弧> <数値式被除数> <コンマ>

      <数値式除数> <右括弧>

<数値式被除数> ::=

  <数値式>

<数値式除数> ::=

  <数値式>

<自然対数> ::=

  LN  <左括弧> <数値式> <右括弧>

<指数関数> ::=

  EXP  <左括弧> <数値式> <右括弧>

<べき関数> ::=

  POWER  <左括弧> <数値式基底> <コンマ>

      <数値式指数> <右括弧>

<数値式基底> ::=

  <数値式>

<数値式指数> ::=

  <数値式>

<平方根> ::=

  SQRT  <左括弧> <数値式> <右括弧>


229

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<下限関数> ::=

  FLOOR  <左括弧> <数値式> <右括弧>

<上限関数> ::=

  { CEIL | CEILING } <左括弧> <数値式> <右括弧>

<幅バケット関数> ::=

 WIDTH_BUCKET

<左括弧> <幅バケットオペランド> <コンマ> <幅バケット境界 1> <コンマ>

    <幅バケット境界 2> <コンマ> <幅バケット数> <右括弧>

<幅バケットオペランド> ::=

  <数値式>

<幅バケット境界 1> ::=

  <数値式>

<幅バケット境界 2> ::=

  <数値式>

<幅バケット数> ::=

  <数値式>

構文規則

1) <POSITION 式>,

<OCCURRENCES_REGEX 関数>又は<POSITION_REGEX 式>が指定されるならば,

結果の宣言型は,位取り

0 の処理系定義の真数型とする。

2) <文字 POSITION 式>が指定されるならば,<文字値式 1>と<文字値式 2>とが比較可能でなければな

らない。

3) <OCCURRENCES_REGEX 関数>が指定されるならば,次による。

a) <XQuery パターン>と<REGEX 当該文字列>とが比較可能でなければならない。

b) <開始位置>の宣言型は,位取り 0 の真数でなければならない。

c) <開始位置>が指定されないならば,1 が暗に想定される。

d)  場合:

i) <文字長単位>が指定されるならば,<REGEX 当該文字列>の文字レパートリは,UCS でなけれ

ばならない。

ii)  そうでなければ,CHARACTERS が暗に想定される。

e) <XQuery オプションフラグ>が指定されないならば,長さ 0 の文字列が暗に想定される。

4) <POSITION_REGEX 式>が指定されるならば,次による。

a) <XQuery パターン>と<REGEX 当該文字列>とが比較可能でなければならない。

b) <POSITION_REGEX の START 又は AFTER>が指定されないならば,START が暗に想定される。

c) <開始位置>,<REGEX 出現回数>及び<REGEX キャプチャグループ>の宣言型は,位取り 0 の真数

でなければならない。

d) <開始位置>が指定されないならば,1 が暗に想定される。

e)

場合:

i) <文字長単位>が指定されるならば,<REGEX 当該文字列>の文字レパートリは,UCS でなけれ

ばならない。

ii)  そうでなければ,CHARACTERS が暗に想定される。

f) <REGEX 出現回数>が指定されないならば,1 が暗に想定される。


230

X 3005-2:2015 (ISO/IEC 9075-2:2011)

g) <REGEX キャプチャグループ>が指定されないならば,0 が暗に想定される。

h) <XQuery オプションフラグ>が指定されないならば,長さ 0 の文字列が暗に想定される。

5)  場合:

a) <データ列値式>の文字符号化形式が UTF8,UTF16 又は UTF32 でないならば,<文字長単位>は,

指定してはならない。

b)  そうでなければ,<文字長単位>が指定されないならば,CHARACTERS が暗に想定される。

6) <EXTRACT 式>が指定されるならば,次による。

場合:

a) <抜き出しフィールド>が<基本日時フィールド>ならば,それは,<抜き出し元>に直に含まれる<

時間隔値式

>又は<日時値式>の<基本日時フィールド>を識別しなければならない。

b) <抜き出しフィールド>が<時刻帯フィールド>ならば,<抜き出し元>の宣言型は,TIME WITH

TIME ZONE 又は TIMESTAMP WITH TIME ZONE でなければならない。

7) <EXTRACT 式>が指定されるならば,次による。

場合:

a) <抜き出しフィールド>が SECOND を指定しない<基本日時フィールド>であるか,又は<抜き出し

フィールド

>が<基本日時フィールド>でないならば,結果の宣言型は,位取り 0 の処理系定義の

真数型とする。

b)  そうでなければ,結果の宣言型は,<抜き出し元>の SECOND <基本日時フィールド>の,適切に,

指定されるか又は想定される

<時刻小数秒精度>又は<時間隔小数秒精度>未満ではない位取りを

もつ処理系定義の真数型とする。

8) <LENGTH 式>が指定されるならば,結果の宣言型は,位取り 0 の処理系定義の真数型とする。

9) <基数式>が指定されるならば,結果の宣言型は,位取り 0 の処理系定義の真数型とする。

10) <最大基数式>が指定されるならば,結果の宣言型は,位取り 0 の処理系定義の真数型とする。

11) <絶対値式>が指定されるならば,結果の宣言型は,それに直に含まれる<数値式>の宣言型とする。

12) <剰余式>が指定されるならば,各<数値式>の宣言型は,位取り 0 の真数でなければならない。結果

の宣言型は,それに直に含まれる

<数値式除数>の宣言型とする。

13) <自然対数>の結果の宣言型は,処理系定義の概数型とする。

14) <指数関数>の結果の宣言型は,処理系定義の概数型とする。

15) <べき関数>の結果の宣言型は,処理系定義の概数型とする。

16) <平方根>が指定されるならば,それに単純に含まれる<数値式>を NVE とする。<平方根>は,次の

指定と等価とする。

POWER (NVE, 0.5)

17) <下限関数>又は<上限関数>が指定されるならば,次による。

場合:

a)  それらに単純に含まれる<数値式>  NVE の宣言型が真数ならば,結果の宣言型は,処理系定義の

精度,NVE の基数及び位取り 0 をもつ真数とする。

b)  そうでなければ,結果の宣言型は,処理系定義の精度をもつ概数とする。

18) <幅バケット関数>が指定されるならば,<幅バケット数>の宣言型は,位取り 0 の真数でなければな

らない。

<幅バケット関数>の結果の宣言型は,<幅バケット数>の宣言型とする。

アクセス規則


231

X 3005-2:2015 (ISO/IEC 9075-2:2011)

なし。 

一般規則

1)  場合:

a) <最大基数式>  MCE が指定されるならば,MCE の結果は,MCE に単純に含まれる<配列値式>の

宣言型の最大基数とする。

b)  そうでなければ,<数値関数>に単純に含まれる一つ以上の<データ列値式>,<日時値式>,<時間

隔値式

>及び<集まり値式>の値がナル値ならば,<数値関数>の結果は,ナル値とし,この細分箇

条の一般規則は,これ以上適用しない。

2) <文字 POSITION 式>が指定されるならば,

<文字値式 1>の値を CVE1 とし,<文字値式 2>の値を CVE2

とする。

場合:

a) CHAR_LENGTH(CVE1)  が 0 ならば,結果は,1 とする。

b) <文字長単位>が指定されるならば,<文字長単位>を CLU とする。そうでなければ,CHARACTERS

を CLU とする。次のような少なくとも一つの値 が存在するならば,結果は,そのような最小

の とする。

CVE1 = SUBSTRING ( CVE2 FROM P FOR CHAR_LENGTH (CVE1 USING CLU ) USING CLU )

注記 157  用いる照合順は,通常の方法で決定される。

c)

そうでなければ,結果は,

0 とする。

3) <2 進オクテット POSITION 式>が指定されるならば,次による。

場合:

a) 1 番目の<2 進オクテット値式>が長さ 0 をもつならば,結果は,1 とする。

b) 1 番目の<2 進オクテット値式>の値が,2 番目の<2 進オクテット値式>の値からの連続するオクテ

ットの同一の長さの部分データ列と等しいならば,結果は,

2 番目の<2 進オクテット値式>の値

中の,そのような最初の部分データ列の開始に先行するオクテットの個数より

1 大きい値とする。

c)

そうでなければ,結果は,

0 とする。

4) <EXTRACT 式>が指定されるならば,次による。

場合:

a) <抜き出しフィールド>が<基本日時フィールド>ならば,結果は,その<基本日時フィールド>によ

って識別される日時フィールドの値とし,

<抜き出し元>と同じ符号をもつ。

注記 158  識別される<基本日時フィールド>の値が 0 か,又は<抜き出し元>が<時間隔値式>でな

いならば,その符号は,無関係である。

b)  そうでなければ,<日時値式>に関連付けられた,暗に想定されるか又は陽に指定される時刻帯時

差の時間隔値を TZ とする。

場合:

i) <抜き出しフィールド>が TIMEZONE_HOUR ならば,結果は,EXTRACT (HOUR FROM TZ) と

して計算される。

ii)  そうでなければ,結果は,EXTRACT (MINUTE FROM TZ)  として計算される。

5) <CHAR_LENGTH 式>が指定されるならば,次による。

場合:

a) <文字値式>の文字符号形式が UTF8,UTF16 又は UTF32 でないならば,<データ列値式>を とす


232

X 3005-2:2015 (ISO/IEC 9075-2:2011)

る。

場合:

i)

の最特定型が文字列ならば,結果は,の値中の文字の個数とする。

注記 159  文字列中の文字の個数は,その文字列の文字集合の意味に従って決定される。

ii)  そうでなければ,結果は,OCTET_LENGTH(S)  とする。

b)  そうでなければ,結果は,<CHAR_LENGTH 式>中で陽に指定されるか又は暗に想定される<文字

長単位

>での個数とし,関連する引用規格の文書中のそれらの単位の定義に従って数えた個数とす

る。

6) <OCTET_LENGTH 式>が指定されるならば,<データ列値式>を とする。の値中のビット(2 進

桁)の個数を BL とする。<OCTET_LENGTH 式>の結果は,除算  (BL/8)  の商未満ではない最小の

整数とする。

7) <基数式>の結果は,<集まり値式>の結果の要素の個数とする。

8) <絶対値式>が指定されるならば,それに直に含まれる<数値式>の値を とする。

場合:

a)  がナル値ならば,結果は,ナル値とする。

b)  N ≥ 0 ならば,結果は,とする。

c)

そうでなければ,結果は,-1* とする。-1* が結果の宣言型で表現可能でないならば,例外

条件:

データ例外  (data exception)  -  数値範囲外  (numeric value out of range)  が引き起こされる。

9) <剰余式>が指定されるならば,それに直に含まれる<数値式被除数>の値を とし,それに直に含ま

れる

<数値式除数>の値を とする。

場合:

a)  及び のうちの少なくとも一つがナル値ならば,結果は,ナル値とする。

b)  が 0 ならば,例外条件:データ例外  (data exception)  -  による除算  (division by zero)  が引き

起こされる。

c)

そうでなければ,結果は,次の全ての条件が真となるような,位取り

0 の一意な真数値 とする。

i)

が と同じ符号をもつ。

ii)  の絶対値が の絶対値未満である。

iii)  位取り 0 の,ある真数値 に対して,N = M * K + である。

10) <自然対数>が指定されるならば,それに単純に含まれる<数値式>の値を とする。

場合:

a)  がナル値ならば,結果は,ナル値とする。

b)  が 0 又は負ならば,

例外条件:

データ例外  -  自然対数の引数が正しくない  (invalid argument for 

natural logarithm)  が引き起こされる。

c)

そうでなければ,結果は,の自然対数とする。

11) <指数関数>が指定されるならば,それに単純に含まれる<数値式>の値を とする。

場合:

a)  がナル値ならば,結果は,ナル値とする。

b)  そうでなければ,結果は,e(自然対数の底)を 乗した値とする。結果の宣言型で結果が表現

可能でないならば,例外条件:

データ例外  -  数値範囲外  が引き起こされる。

12) <べき関数>が指定されるならば,<数値式基底>を NVEB とし,NVEB の値を VB とし,<数値式指


233

X 3005-2:2015 (ISO/IEC 9075-2:2011)

>を NVEE とし,NVEE の値を VE とする。

場合:

a)  VB 及び VE のうちの少なくとも一つがナル値ならば,結果は,ナル値とする。

b)  VB が 0 で,かつ,VE が負ならば,例外条件:データ例外  -  べき関数の引数が正しくない  (invalid 

argument for power function)  が引き起こされる。

c)

VB が 0 で,かつ,VE が 0 ならば,結果は,1 とする。

d)  VB が 0 で,かつ,VE が正ならば,結果は,0 とする。

e)

VB が負で,かつ,VE が位取り 0 の真数値と等しくないならば,例外条件:データ例外  -  べき関

数の引数が正しくない  が引き起こされる。

f)

VB が負で,かつ,VE が位取り 0 の偶数の真数値と等しいならば,結果は,次の式の結果とする。

EXP(NVEE*LN(-NVEB))

g)  VB が負で,かつ,VE が位取り 0 の奇数の真数値と等しいならば,結果は,次の式の結果とする。

- EXP(NVEE*LN(-NVEB))

h)  そうでなければ,結果は,次の式の結果とする。

EXP(NVEE*LN(NVEB))

13) <下限関数>が指定されるならば,それに単純に含まれる<数値式> NVE の値を とする。

場合:

a)  がナル値ならば,結果は,ナル値とする。

b)  そうでなければ,次による。

場合:

i)

NVE の最特定型が真数ならば,結果は,以下で最大の位取り 0 の真数値とする。結果の宣言

型でこの結果が表現可能でないならば,例外条件:

データ例外  -  数値範囲外  が引き起こされ

る。

ii)  そうでなければ,結果は,以下で最大の整数とする。結果の宣言型でこの結果が表現可能で

ないならば,例外条件:

データ例外  -  数値範囲外  が引き起こされる。

14) <上限関数>が指定されるならば,それに単純に含まれる<数値式> NVE の値を とする。

場合:

a)  がナル値ならば,結果は,ナル値とする。

b)  そうでなければ,次による。

場合:

i)

NVE の最特定型が真数ならば,結果は,以上で最小の位取り 0 の真数値とする。結果の宣言

型でこの結果が表現可能でないならば,例外条件:

データ例外  -  数値範囲外  が引き起こされ

る。

ii)  そうでなければ,結果は,以上で最小の整数とする。結果の宣言型でこの結果が表現可能で

ないならば,例外条件:

データ例外  -  数値範囲外  が引き起こされる。

15) <幅バケット関数>が指定されるならば,<幅バケットオペランド>の値を WBO とし,<幅バケット

境界

1>の値を WBB1 とし,<幅バケット境界 2>の値を WBB2 とし,<幅バケット数>の値を WBC 

する。

場合:

a)  WBOWBB1WBB2 及び WBC のうちの少なくとも一つがナル値ならば,結果は,ナル値とす


234

X 3005-2:2015 (ISO/IEC 9075-2:2011)

る。

b)  WBC が 0 以下ならば,例外条件:データ例外  -  幅バケット関数の引数が正しくない  (invalid 

argument for width bucket function)  が引き起こされる。

c)

WBB1 が WBB2 と等しいならば,例外条件:データ例外  -  幅バケット関数の引数が正しくない

が引き起こされる。

d)  WBB1 が WBB2 未満ならば,次による。

場合:

i)

WBO が WBB1 未満ならば,結果は,0 とする。

ii)  WBO が WBB2 以上ならば,結果は,WBC+1 とする。結果の宣言型で結果が表現可能でないな

らば,例外条件:

データ例外  -  数値範囲外  が引き起こされる。

iii)  そうでなければ,結果は,((WBC * (WBOWBB1) / (WBB2WBB1)) + 1) 以下で最大の

位取り

0 の真数値とする。

e)

WBB1 が WBB2 を超えるならば,次による。

場合:

i)

WBO が WBB1 を超えるならば,結果は,0 とする。

ii)  WBO が WBB2 以下ならば,結果は,WBC+1 とする。結果の宣言型で結果が表現可能でないな

らば,例外条件

:データ例外  -  数値範囲外  が引き起こされる。

iii)  そうでなければ,結果は,((WBC * (WBB1WBO) / (WBB1WBB2)) + 1) 以下で最大の

位取り

0 の真数値とする。

16)  <OCCURRENCES_REGEX 関数>が指定されるならば,次による。

a) <REGEX 当該文字列>を RSS とし,RSS の値を STR とし,<XQuery パターン>の値を PAT とし,

<開始位置>の値を SP とし,<文字長単位>を CLU とし,<XQuery オプションフラグ>の値を FL

とする。

b)  場合:

i)

STRPAT 及び FL のうちの少なくとも一つがナル値ならば,<OCCURRENCES_REGEX 関数>

の結果は,ナル値とする。

ii)  SP が 1 未満か,又は次の値を超えるならば,<OCCURRENCES_REGEX 関数>の結果は,–1 と

する。

CHARACTER_LENGTH ( RSS USING CLU )

iii)  CLU が OCTETS で,かつ,STR の SP 番目のオクテットが文字の最初のオクテットでないなら

ば,<

OCCURRENCES_REGEX 関数>の結果は,処理系依存とする。

iv)  そうでなければ,STR を STRING として,PAT を PATTERN として,SP を POSITION として,

CLU を UNITS として,FL を FLAG として,

9.18 XQuery 正規表現照合”の一般規則を適用す

る。これらの一般規則の適用によって戻される LIST を LOMV とする。

v)  <OCCURRENCES_REGEX 関数>の結果は,LOMV 中の一致ベクトルの個数とする。

17) <POSITION_REGEX 式>が指定されるならば,次による。

a) <REGEX 当該文字列>を RSS とし,RSS の値を STR とし,<XQuery パターン>の値を PAT とし,

<開始位置>の値を SP とし,<文字長単位>を CLU とし,<REGEX 出現回数>の値を OCC とし,

<REGEX キャプチャグループ>を CAP とし,<XQuery オプションフラグ>の値を FL とする。

b)  場合:


235

X 3005-2:2015 (ISO/IEC 9075-2:2011)

i)

STRPATOCCCAP 及び FL のうちの少なくとも一つがナル値ならば,<POSITION_REGEX

>の結果は,ナル値とする。

ii)  OCC が 1 未満ならば,<POSITION_REGEX 式>の結果は,0 とする。

iii)  CAP が 0 未満か,又は PAT の XQuery 正規表現括弧付き部分表現の個数を超えるならば,

<POSITION_REGEX 式>の結果は,0 とする。

iv)  SP が 1 未満か,又は次の値を超えるならば,<POSITION_REGEX 式>の結果は,0 とする。

CHARACTER_LENGTH ( RSS USING CLU )

v)  CLU が OCTETS で,かつ,STR の SP 番目のオクテットが文字の最初のオクテットでないなら

ば,

<POSITION_REGEX 式>の結果は,処理系依存とする。

vi)  そうでなければ,STR を STRING として,PAT を PATTERN として,SP を POSITION として,

CLU を UNITS として,FL を FLAG として,

9.18 XQuery 正規表現照合”の一般規則を適用す

る。これらの一般規則の適用によって戻される LIST を LOMV とする。

場合:

1)  少なくとも OCC 個の一致ベクトルが LOMV 中にあるならば,LOMV 中の OCC 番目の一致

ベクトルを MV とする。MV[CAP]  を PL とする。ここで,MV[0]  は,MV 中の最初の位置/

長さとする。PL の位置を とし,PL の長さを とする。<POSITION_REGEX 式>の結果は,

次による。

場合:

A)  が 0 ならば,0 とする。

B) <POSITION_REGEX の START 又は AFTER>が START ならば,とする。

C)  そうでなければ,P + とする。

2)  そうでなければ,<POSITION_REGEX 式>の結果は,0 とする。

適合性規則

1)  機能 S091“基本配列提供”又は機能 S271“基本マルチ集合提供”なしでは,適合する SQL 言語は,

<基数式>を含んではならない。

2)  機能 F052“時間隔及び日時の算術”なしでは,適合する SQL 言語は,<EXTRACT 式>を含んでは

ならない。

3)  機能 F411

“時刻帯指定”なしでは,適合する

SQL 言語は,<時刻帯フィールド>を指定する<EXTRACT

>を含んではならない。

4)  機能 F421“各国文字”なしでは,適合する SQL 言語は,NATIONAL CHARACTER,NATIONAL

CHARACTER VARYING 又は NATIONAL CHARACTER LARGE OBJECT の宣言型をもつ<データ列

値式

>を単純に含む<LENGTH 式>を含んではならない。

5)  機能 T041“基本 LOB データ型提供”又は機能 T021“BINARY 及び VARBINARY データ型”なし

では,適合する

SQL 言語は,<2 進オクテット POSITION 式>を含んではならない。

6)  機能 T441“ABS 及び MOD 関数”なしでは,適合する SQL 言語は,<絶対値式>を含んではならな

い。

7)  機能 T441“ABS 及び MOD 関数”なしでは,適合する SQL 言語は,<剰余式>を含んではならない。

8)  機能 T621“拡張数関数”なしでは,適合する SQL 言語は,<自然対数>を含んではならない。

9)  機能 T621“拡張数関数”なしでは,適合する SQL 言語は,<指数関数>を含んではならない。

10)  機能 T621“拡張数関数”なしでは,適合する SQL 言語は,<べき関数>を含んではならない。


236

X 3005-2:2015 (ISO/IEC 9075-2:2011)

11)  機能 T621“拡張数関数”なしでは,適合する SQL 言語は,<平方根>を含んではならない。

12)  機能 T621“拡張数関数”なしでは,適合する SQL 言語は,<下限関数>を含んではならない。

13)  機能 T621“拡張数関数”なしでは,適合する SQL 言語は,<上限関数>を含んではならない。

14)  機能 T612“高度 OLAP 演算”なしでは,適合する SQL 言語は,<幅バケット関数>を含んではなら

ない。

15)  機能 F842“OCCURENCES_REGEX 関数”なしでは,適合する SQL 言語は,<OCCURENCES_REGEX

関数

>を含んではならない。

16)  機 能 F846 “ 正 規 表 現 演 算 子 で の オ ク テ ッ ト 提 供 ” な し で は , 適 合 す る SQL 言 語 中 で ,

<OCCURENCES_REGEX 関数>は,<文字長単位>を含んではならない。

17)  機能 F843“POSITION_REGEX 関数”なしでは,適合する SQL 言語は,<POSITION_REGEX 式>を

含んではならない。

18)  機 能 F846 “ 正 規 表 現 演 算 子 で の オ ク テ ッ ト 提 供 ” な し で は , 適 合 す る SQL 言 語 中 で ,

<POSITION_REGEX 式>は,<文字長単位>を含んではならない。

19)  機能 F847“値式正規表現”なしでは,適合する SQL 言語中で,<XQuery パターン>及び<XQuery オ

プションフラグ

>は,<値指定>でなければならない。

20)  機能 S403“ARRAY_MAX_CARDINALITY”なしでは,適合する SQL 言語は,<最大基数式>を含ん

ではならない。

6.29  <データ列値式>

機能

<データ列値式> (<string value expression>)  は,文字列値又は 2 進オクテット列値を指定する。

形式

<データ列値式> ::=

  <文字値式>

 |

<2 進オクテット値式>

<文字値式> ::=

  <連結>

 |

<文字因子>

<連結> ::=

  <文字値式> <連結演算子> <文字因子>

<文字因子> ::=

  <文字一次子> [ <COLLATE 句> ]

<文字一次子> ::=

  <値式一次子>

 |

<データ列値関数>

<2 進オクテット値式> ::=

  <2 進オクテット連結>

 |

<2 進オクテット因子>

<2 進オクテット因子> ::=

  <2 進オクテット一次子>

<2 進オクテット一次子> ::=


237

X 3005-2:2015 (ISO/IEC 9075-2:2011)

  <値式一次子>

 |

<データ列値関数>

<2 進オクテット連結> ::=

  <2 進オクテット値式> <連結演算子> <2 進オクテット因子>

構文規則

1) <文字一次子>の宣言型は,文字列でなければならない。

2) <文字値式>の宣言型は,それに単純に含まれる<連結>又は<文字因子>の宣言型とする。

3) <連結>が指定されるならば,次による。

a) <文字値式>の宣言型を D1 とし,<連結>に単純に含まれる<文字因子>の宣言型を D2 とする。D1

及び D2 を DTSET として,“9.5  データ型組合せの結果”の構文規則を適用する。これらの構文

規則の適用によって戻される RESTYPE を とする。の文字集合を CS とし,の照合順を CO

とし,の照合順起源を CD とする。

b)  D1 の文字単位での長さに D2 の文字単位での長さを加えた長さを とする。

可変長文字列の処理

系定義の最大長を VL とし,長大オブジェクト文字列の処理系定義の最大長を LOL とし,固定長

文字列の処理系定義の最大長を FL とする。

場合:

i) <文字値式>又は<文字因子>の宣言型が文字長大オブジェクト型ならば,<連結>の宣言型は,文

字集合 CS,照合順 CO,照合順起源 CD,及び と LOL との小さい方と等しい最大長をもつ文

字長大オブジェクト型とする。

ii) <文字値式>又は<文字因子>の宣言型が可変長文字列ならば,<連結>の宣言型は,文字集合 CS

照合順 CO,照合順起源 CD,及び と VL との小さい方と等しい最大長をもつ可変長文字列と

する。

iii) <文字値式>及び<文字因子>の宣言型が固定長文字列ならば,は,FL を超えてはならず,<

連結

>の宣言型は,文字集合 CS,照合順 CO,照合順起源 CD 及び長さ をもつ固定長文字列

とする。

4) <文字因子>が指定されるならば,次による。

場合:

a) <COLLATE 句>が指定されるならば,宣言型照合順が<COLLATE 句>によって識別される照合順

であること,及びその照合順起源が

明示  (explicit)  であることを除いて,<文字因子>の宣言型は,

<文字一次子>の宣言型とする。

b)  そうでなければ,<文字因子>の宣言型は,<文字一次子>の宣言型とする。

5) <2 進オクテット一次子>の宣言型は,2 進オクテット列でなければならない。

6)  場合:

a) <2 進オクテット連結>が指定されるならば,<2 進オクテット値式>の宣言型を B1 とし,<2 進オ

クテット因子

>の宣言型を B2 とする。B1 のオクテット単位での長さに B2 のオクテット単位での

長さを加えた長さを とする。固定長 2 進オクテット列の処理系定義の最大長を FL とし,可変

2 進オクテット列の処理系定義の最大長を VL とし,長大オブジェクト 2 進オクテット列の処

理系定義の最大長を LOL とする。

<2 進オクテット連結>の宣言型は,次による。

場合:


238

X 3005-2:2015 (ISO/IEC 9075-2:2011)

i) <2 進オクテット値式>又は<2 進オクテット因子>の宣言型が 2 進オクテット長大オブジェクト

型ならば,と LOL との小さい方と等しい最大長をもつ長大オブジェクト 2 進オクテット列と

する。

ii) <2 進オクテット値式>又は<2 進オクテット因子>の宣言型が可変長 2 進オクテット列ならば,

と VL との小さい方と等しい最大長をもつ可変長 2 進オクテット列とする。

iii) <2 進オクテット値式>及び<2 進オクテット因子>の宣言型が固定長 2 進オクテット列ならば,

長さ をもつ固定長 2 進オクテット列とし,は,FL を超えてはならない。

b)  そうでなければ,<2 進オクテット値式>の宣言型は,<2 進オクテット因子>の宣言型とする。

アクセス規則

なし。 

一般規則

1) <データ列値式>に単純に含まれるいずれかの<文字一次子>又は<2 進オクテット一次子>の値がナル

値ならば,

<データ列値式>の結果は,ナル値とする。

2) <連結>が指定されるならば,次による。

a) <文字因子>の文字レパートリが UCS ならば,この一般規則の残りの部分では,

“長さ

 (length)”

という用語は,“文字単位での長さ

  (length in characters)”を意味するものとして解釈しなければな

らない。

b) <文字値式>及び<文字因子>の結果を,それぞれ,S1 及び S2 とする。

場合:

i)

S1 及び S2 のうちの少なくとも一つがナル値ならば,<連結>の結果は,ナル値とする。

ii)  そうでなければ,次による。

1)  S1 及びそれに続く S2 から成るデータ列を とし,の長さを とする。

2) <文字因子>の文字レパートリが UCS ならば,は,次の値で置き換えられる。

場合:

A) <探索条件> S1 IS NORMALIZED AND S2 IS NORMALIZED が真  (True)  と評価されるな

らば,次の値。

NORMALIZE (S)

B)  そうでなければ,処理系定義のデータ列。

3)  場合:

A)  S1 及び S2 のうちの少なくとも一つの最特定型が文字長大オブジェクト型ならば,長大オ

ブジェクト文字列の処理系定義の最大長を LOL とする。

場合:

I)

が LOL 以下ならば,<連結>の結果は,長さ をもつ とする。

II)  が LOL より大きく,かつ,の最も右側の M – LOL 個の文字が全て<空白>文字なら

ば,

<連結>の結果は,長さ LOL をもつ の最初の LOL 個の文字とする。

III)  そうでなければ,例外条件:データ例外  (data exception)  -  データ列データ,右切捨て

(string data, right truncation)  が引き起こされる。

B)  S1 及び S2 のうちの少なくとも一つの最特定型が可変長文字列ならば,可変長文字列の処

理系定義の最大長を VL とする。

場合:


239

X 3005-2:2015 (ISO/IEC 9075-2:2011)

I)

が VL 以下ならば,<連結>の結果は,長さ をもつ とする。

II)  が VL より大きく,かつ,の最も右側の M – VL 個の文字が全て<空白>文字ならば,

<連結>の結果は,長さ VL をもつ の最初の VL 個の文字とする。

III)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  が引き起こされ

る。

C)  S1 及び S2 の両方の最特定型が固定長文字列ならば,<連結>の結果は,とする。

3) <2 進オクテット連結>が指定されるならば,<2 進オクテット値式>及び<2 進オクテット因子>の結

果を,それぞれ,S1 及び S2 とする。

場合:

a)  S1 及び S2 のうちの少なくとも一つがナル値ならば,<2 進オクテット連結>の結果は,ナル値と

する。

b)  そうでなければ,S1 及びそれに続く S2 から成るデータ列を とし,のオクテット単位での長

さを とする。

場合:

i)

S1 及び S2 のうちの少なくとも一つの最特定型が 2 進オクテット長大オブジェクト型ならば,

長大オブジェクト

2 進オクテット列の処理系定義の最大長を LOL とする。

場合:

1)  が LOL 以下ならば,<2 進オクテット連結>の結果は,長さ をもつ とする。

2)  が LOL より大きく,かつ,の最も右側の M – LOL 個のオクテットが全て X'00'  ならば,

<2 進オクテット連結>の結果は,長さ LOL をもつ の最初の LOL 個のオクテットとする。

3)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  が引き起こされる。

ii)  S1 及び S2 のうちの少なくとも一つの最特定型が可変長 2 進オクテット列ならば,可変長 2 進

オクテット列の処理系定義の最大長を VL とする。

場合:

1)  が VL 以下ならば,<2 進オクテット連結>の結果は,長さ をもつ とする。

2)  が VL より大きく,かつ,の最も右側の M – VL 個のオクテットが全て X'00'  ならば,<2

進オクテット連結

>の結果は,長さ VL をもつ の最初の VL 個のオクテットとする。

3)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  が引き起こされる。

iii)  S1 及び S2 の両方の最特定型が固定長 2 進オクテット列ならば,<2 進オクテット連結>の結果

は,とする。

4) <文字値式>の結果が長さ 0 の文字列ならば,例外条件:データ例外  -  長さ の文字列  (zero-length 

character string)  が引き起こされるかどうかは,処理系定義とする。

適合性規則

1)  機能 F421“各国文字”なしでは,適合する SQL 言語は,NATIONAL CHARACTER,NATIONAL

CHARACTER VARYING 又は NATIONAL CHARACTER LARGE OBJECT の宣言型をもつ<文字値式>

を含んではならない。

2)  機能 T041“基本 LOB データ型提供”又は機能 T021“BINARY 及び VARBINARY データ型”なし

では,適合する

SQL 言語は,<2 進オクテット値式>を含んではならない。

6.30  <データ列値関数>

この細分箇条は,ISO/IEC 9075-9 の“6.4 <データ列値関数>”によって修正される。 


240

X 3005-2:2015 (ISO/IEC 9075-2:2011)

この細分箇条は,ISO/IEC 9075-14 の“6.8 <データ列値関数>”によって修正される。 

機能

<データ列値関数> (<string value function>)  は,文字列型又は 2 進オクテット列型の値を生成する関数を

指定する。

形式

09

 <データ列値関数> ::=

  <文字値関数>

 |

<2 進オクテット値関数>

14

 <文字値関数> ::=

  <文字部分列関数>

 |

<正規表現部分列関数>

 |

<SUBSTRING_REGEX 関数>

 |

<大文字小文字変換>

 |

<符号変換>

 |

<文字文字変換>

 |

<TRANSLATE_REGEX 関数>

 |

<TRIM 関数>

 |

<文字 OVERLAY 関数>

 |

<NORMALIZE 関数>

 |

<特定型メソッド>

<文字部分列関数> ::=

  SUBSTRING  <左括弧> <文字値式> FROM <開始位置>

      [  FOR  <データ列長> ] [ USING <文字長単位> ] <右括弧>

<正規表現部分列関数> ::=

  SUBSTRING  <左括弧> <文字値式> SIMILAR <文字値式>

      ESCAPE  <エスケープ文字> <右括弧>

<SUBSTRING_REGEX 関数> ::=

  SUBSTRING_REGEX  <左括弧>

      <XQuery パターン> [ FLAG <XQuery オプションフラグ> ]

      IN  <REGEX 当該文字列>

      [  FROM  <開始位置> ]

      [  USING  <文字長単位> ]

      [  OCCURRENCE  <REGEX 出現回数> ]

      [  GROUP  <REGEX キャプチャグループ> ]

      <右括弧>

<大文字小文字変換> ::=

  { UPPER | LOWER } <左括弧> <文字値式> <右括弧>

<符号変換> ::=

  CONVERT  <左括弧> <文字値式>

      USING  <符号変換名> <右括弧>


241

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<文字文字変換> ::=

  TRANSLATE  <左括弧> <文字値式>

      USING  <文字変換名> <右括弧>

<TRANSLATE_REGEX 関数> ::=

  TRANSLATE_REGEX  <左括弧>

      <XQuery パターン> [ FLAG <XQuery オプションフラグ> ]

      IN  <REGEX 当該文字列>

      [  WITH  <XQuery 置換文字列> ]

      [  FROM  <開始位置> ]

      [  USING  <文字長単位> ]

      [  OCCURRENCE  <TRANSLATE_REGEX の出現回数> ]

      <右括弧>

<XQuery 置換文字列> ::=

  <文字値式>

<TRANSLATE_REGEX の出現回数> ::=

  <REGEX 出現回数>

 |

ALL

<TRIM 関数> ::=

  TRIM  <左括弧> <TRIM オペランド> <右括弧>

<TRIM オペランド> ::=

  [  [  <TRIM 指定> ] [ <TRIM 文字> ] FROM ] <TRIM 元>

<TRIM 元> ::=

  <文字値式>

<TRIM 指定> ::=

  LEADING

 |

TRAILING

 |

BOTH

<TRIM 文字> ::=

  <文字値式>

<文字 OVERLAY 関数> ::=

  OVERLAY  <左括弧> <文字値式> PLACING <文字値式>

      FROM  <開始位置> [ FOR <データ列長> ]

      [  USING  <文字長単位> ] <右括弧>

<NORMALIZE 関数> ::=

  NORMALIZE  <左括弧> <文字値式>

      [ <コンマ> <正規形式> [ <コンマ> <正規化関数結果長> ] ] <右括弧>

<正規形式> ::=

  NFC

 |

NFD

 |

NFKC


242

X 3005-2:2015 (ISO/IEC 9075-2:2011)

 |

NFKD

<正規化関数結果長> ::=

  <文字長>

 |

<文字長大オブジェクト長>

<特定型メソッド> ::=

  <利用者定義型値式> <ピリオド> SPECIFICTYPE

      [ <左括弧> <右括弧> ]

14

 <2 進オクテット値関数> ::=

  <2 進オクテット部分列関数>

 |

<2 進オクテット TRIM 関数>

 |

<2 進オクテット OVERLAY 関数>

<2 進オクテット部分列関数> ::=

  SUBSTRING  <左括弧> <2 進オクテット値式> FROM <開始位置>

      [  FOR  <データ列長> ] <右括弧>

<2 進オクテット TRIM 関数> ::=

  TRIM  <左括弧> <2 進オクテット TRIM オペランド> <右括弧>

<2 進オクテット TRIM オペランド> ::=

  [  [  <TRIM 指定> ] [ <TRIM オクテット> ] FROM ] <2 進オクテット TRIM 元>

<2 進オクテット TRIM 元> ::=

  <2 進オクテット値式>

<TRIM オクテット> ::=

  <2 進オクテット値式>

<2 進オクテット OVERLAY 関数> ::=

  OVERLAY  <左括弧> <2 進オクテット値式> PLACING <2 進オクテット値式>

      FROM  <開始位置> [ FOR <データ列長> ] <右括弧>

<開始位置> ::=

  <数値式>

<データ列長> ::=

  <数値式>

構文規則

1)

09

 <データ列値関数>の宣言型は,それに直に含まれる<文字値関数>又は<2 進オクテット値関数>の

宣言型とする。

2)

14

  <文字値関数>の宣言型は,それに直に含まれる<文字部分列関数>,<正規表現部分列関数>,

<SUBSTRING_REGEX 関 数 > , < 大 文 字 小 文 字 変 換 > , < 符 号 変 換 > , < 文 字 文 字 変 換 > ,

<TRANSLATE_REGEX 関数>,<TRIM 関数>,<文字 OVERLAY 関数>,<NORMALIZE 関数>又は<

特定型メソッド

>の宣言型とする。

3) <開始位置>,<データ列長>,<REGEX 出現回数>又は<REGEX キャプチャグループ>の宣言型は,

位取り

0 の真数でなければならない。

4) <文字部分列関数>  CSF が指定されるならば,CSF に直に含まれる<文字値式>の宣言型を DTCVE

とする。CSF の宣言型 DTCSF の最大長,文字集合及び照合順は,次のとおりに決定される。


243

X 3005-2:2015 (ISO/IEC 9075-2:2011)

a)  場合:

i) <文字値式>の宣言型が固定長文字列又は可変長文字列ならば,DTCSF は,DTCVE の長さ又は

最大長と等しい最大長をもつ可変長文字列型とする。

ii)  そうでなければ,DTCSF は,DTCVE の最大長と等しい最大長をもつ長大オブジェクト文字列

型とする。

b) <文字部分列関数>の文字集合及び照合順は,DTCVE の文字集合及び照合順とする。

5) <文字値式>の文字レパートリが UCS でないならば,<文字長単位>は,指定してはならない。

6) USING

<文字長単位>が指定されないならば,USING CHARACTERS が暗に想定される。

7) <正規表現部分列関数>が指定されるならば,次による。

a) <正規表現部分列関数>の<エスケープ文字>及び<文字値式>の宣言型は,同じ文字レパートリをも

つ文字列でなければならない。

b)  場合:

i) 1 番目の<文字値式>の宣言型が固定長文字列又は可変長文字列ならば,<正規表現部分列関数>

の宣言型は,

1 番目の<文字値式>の長さ又は最大長と等しい最大長をもつ可変長文字列とする。

ii)  そうでなければ,<正規表現部分列関数>の宣言型は,1 番目の<文字値式>の最大長と等しい最

大長をもつ文字長大オブジェクト型とする。

c) <正規表現部分列関数>の文字集合及び照合順は,1 番目の<文字値式>の文字集合及び照合順とす

る。

8) <SUBSTRING_REGEX 関数> RSF が指定されるならば,次による。

a) <開始位置>が指定されないならば,1 が暗に想定される。

b)  場合:

i) <文字長単位>が指定されるならば,<REGEX 当該文字列>の文字レパートリは,UCS でなけれ

ばならない。

ii)  そうでなければ,CHARACTERS が暗に想定される。

c) <REGEX 出現回数>が指定されないならば,1 が暗に想定される。

d) <REGEX キャプチャグループ>が指定されないならば,0 が暗に想定される。

e) <XQuery オプションフラグ>が指定されないならば,長さ 0 の文字列が暗に想定される。

f)

RSF に直に含まれる<REGEX 当該文字列>を RSS とする。RSS の宣言型を DTCVE とする。RSF

の宣言型 DTRSF は,次のとおりに決定される。

i)

場合:

1)  DTCVE が固定長文字列又は可変長文字列ならば,DTRSF は,DTCVE の長さ又は最大長と

等しい最大長をもつ可変長文字列とする。

2)  そうでなければ,DTRSF は,DTCVE の最大長と等しい最大長をもつ長大オブジェクト文字

列型とする。

ii)  DTRSF の文字集合及び照合順は,DTCVE の文字集合及び照合順とする。

9) <大文字小文字変換>が指定されるならば,<大文字小文字変換>の結果の宣言型は,<文字値式>の宣

言型とする。

10) <符号変換>が指定されるならば,次による。

a) <符号変換>は,<選択副リスト>に直に含まれる<導出列>に直に含まれる<値式>に単純に含まれる

か,又は

<ホストパラメタ名>である<単純値指定>若しくは<ホストパラメタ指定>である<値指定>


244

X 3005-2:2015 (ISO/IEC 9075-2:2011)

のいずれかを直に含まなければならない。

b) <符号変換名>は,符号変換を識別しなければならない。

c)

場合:

i) <文字値式>の宣言型が固定長文字列又は可変長文字列ならば,結果の宣言型は,処理系定義の

最大長をもつ可変長文字列とする。

ii)  そうでなければ,結果の宣言型は,処理系定義の最大長をもつ文字長大オブジェクト型とする。

d)  結果の文字集合は,文字レパートリが<文字値式>の文字レパートリと同じで,かつ,文字符号化

形式が

<符号変換名>によって識別される符号変換によって決定される文字符号化形式である処

理系定義の文字集合 CS とする。結果の宣言型照合順は,CS の文字集合照合順とする。

11) <文字文字変換>が指定されるならば,次による。

a) <文字変換名>は,文字文字変換を識別しなければならない。

b)  場合:

i) <文字値式>の宣言型が固定長文字列又は可変長文字列ならば,<文字文字変換>の宣言型は,処

理系定義の最大長をもつ可変長文字列とする。

ii)  そうでなければ,<文字文字変換>の宣言型は,処理系定義の最大長をもつ文字長大オブジェク

ト型とする。

c) <文字文字変換>の宣言型は,文字変換の相手文字集合である文字集合 CS をもつ。結果の宣言型

照合順は,CS の文字集合照合順とする。

12) <TRANSLATE_REGEX 関数> RT が指定されるならば,次による。

a) <開始位置>が指定されないならば,1 が暗に想定される。

b)  場合:

i) <文字長単位>が指定されるならば,<REGEX 当該文字列>の文字レパートリは,UCS でなけれ

ばならない。

ii)  そうでなければ,CHARACTERS が暗に想定される。

c) <TRANSLATE_REGEX の出現回数>が指定されないならば,ALL が暗に想定される。

d) <XQuery 置換文字列>が指定されないならば,長さ 0 の文字列が暗に想定される。

e) <XQuery オプションフラグ>が指定されないならば,長さ 0 の文字列が暗に想定される。

f)

RT に直に含まれる<REGEX 当該文字列>を RSS とする。RSS の宣言型を DTCVE とする。RT 

宣言型 DTRT は,次のとおりに決定される。

i)

場合:

1) <XQuery 置換文字列>が指定されないか,又は長さ 0 の文字列ならば,次による。

A)  DTCVE が固定長文字列又は可変長文字列ならば,DTRT は,DTCVE の長さ又は最大長と

等しい最大長をもつ可変長文字列とする。

B)  そうでなければ,DTRT は,DTCVE の最大長と等しい最大長をもつ長大オブジェクト文字

列型とする。

2)  そうでなければ,次による。

A)  DTCVE が固定長文字列又は可変長文字列ならば,DTRT は,処理系定義の最大長をもつ可

変長文字列とする。

B)  そうでなければ,DTRT は,処理系定義の最大長をもつ長大オブジェクト文字列型とする。

ii)  DTRT の文字集合及び照合順は,DTCVE の文字集合及び照合順とする。


245

X 3005-2:2015 (ISO/IEC 9075-2:2011)

13) <TRIM 関数>が指定されるならば,次による。

a)  場合:

i) FROM が指定されるならば,次による。

1) <TRIM 指定>若しくは<TRIM 文字>のいずれか又は両方を指定しなければならない。

2) <TRIM 指定>が指定されないならば,BOTH が暗に想定される。

3) <TRIM 文字>が指定されないならば,' '  が暗に想定される。

ii)  そうでなければ,<TRIM 元>を SRC とする。TRIM ( SRC )  は,TRIM ( BOTH ' ' FROM SRC )

と等価とする。

b)  場合:

i) <文字値式>の宣言型が固定長文字列又は可変長文字列ならば,

<TRIM 関数>の宣言型は,<TRIM

>の長さ又は最大長と等しい最大長をもつ可変長文字列とする。

ii)  そうでなければ,<TRIM 関数>の宣言型は,<TRIM 元>の最大長と等しい最大長をもつ文字長

大オブジェクト型とする。

c) <TRIM 文字>が指定されるならば,<TRIM 文字>と<TRIM 元>とは,比較可能でなければならな

い。

d) <TRIM 関数>の文字集合及び照合順は,<TRIM 元>の文字集合及び照合順とする。

14) <文字 OVERLAY 関数>が指定されるならば,次による。

a) 1 番目の<文字値式>を CV とし,<開始位置>を SP とし,2 番目の<文字値式>を RS とする。

b) < デ ー タ 列 長 > が 指 定 さ れ る な ら ば , < デ ー タ 列 長 > を SL と す る 。 そ う で な け れ ば ,

CHAR_LENGTH(RS)  を SL とする。

c) <文字 OVERLAY 関数>は,次の指定と等価とする。

SUBSTRING ( CV FROM 1 FOR SP-1 )

|| RS

|| SUBSTRING ( CV FROM SP + SL )

15) <NORMALIZE 関数>が指定されるならば,次による。

a) <文字値式>の文字集合 CS は,UTF8,UTF16 又は UTF32 でなければならない。<NORMALIZE 関

>の宣言型の文字集合及び照合順は,それぞれ,CS 及び<文字値式>の照合順とする。

b)  場合:

i) <正規形式>が指定されるならば,<正規形式>を NF とする。

ii)  そうでなければ,NFC を NF とする。

c)

場合:

i) <文字値式>の宣言型が固定長文字列又は可変長文字列ならば,次による。

1) <文字長大オブジェクト長>は,指定してはならない。

2) <正規化関数結果長>が指定されるならば,<正規化関数結果長>に含まれる<長さ>の値を 

する。そうでなければ,位取り

  0 の真数型の値で,可変長文字列の処理系定義の最大長以下

の処理系定義の値を とする。

3) <NORMALIZE 関数>の宣言型は,陽に指定するか又は暗に想定される<文字長単位>の単位で,

と等しい最大長をもつ可変長文字列とする。

ii)  そうでなければ,次による。

1) <文字長>は,指定してはならない。


246

X 3005-2:2015 (ISO/IEC 9075-2:2011)

2) <正規化関数結果長>が指定されるならば,<正規化関数結果長>に含まれる<文字長大オブジ

ェクト長

>の値を とする。そうでなければ,位取り 0 の真数型の値で,長大オブジェクト

文字列の処理系定義の最大長以下の処理系定義の値を とする。

3) <NORMALIZE 関数>の宣言型は,陽に指定するか又は暗に想定される<文字長単位>の単位で,

と等しい最大長をもつ文字長大オブジェクト型とする。

16) <特定型メソッド>が指定されるならば,<特定型メソッド>の宣言型は,処理系定義の最大長をもつ

可変長文字列とする。文字列の文字集合は,

SQL_IDENTIFIER とする。

17)

14

 <2 進オクテット値関数>の宣言型は,それに直に含まれる<2 進オクテット部分列関数>,<2 進オ

クテット

TRIM 関数>又は<2 進オクテット OVERLAY 関数>の宣言型とする。

18) <2 進オクテット部分列関数> BSF が指定されるならば,BSF に直に含まれる<2 進オクテット値式>

の宣言型を DTBVE とする。BSF の宣言型 DTBSF 及びその最大長は,次による。

場合:

a)  DTBVE が固定長 2 進オクテット列又は可変長 2 進オクテット列ならば,DTBVE の長さ又は最大

長と等しい最大長をもつ可変長

2 進オクテット列型とする。

b)  そうでなければ,

DTBVE の最大長と等しい最大長をもつ長大オブジェクト 2 進オクテット列型と

する。

19) <2 進オクテット TRIM 関数>  が指定されるならば,次による。

a)  場合:

i) FROM が指定されるならば,次による。

1) <TRIM 指定>若しくは<TRIM オクテット>のいずれか又は両方を指定しなければならない。

2) <TRIM 指定>が指定されないならば,BOTH が暗に想定される。

3) <TRIM オクテット>が指定されないならば,X'00'が暗に想定される。

ii)  そうでなければ,<TRIM 元>を SRC とする。TRIM ( SRC )  は,TRIM ( BOTH X’00’ FROM

SRC

 )

  と等価とする。

b)  場合:

i) <2 進オクテット値式>の宣言型が固定長 2 進オクテット列又は可変長 2 進オクテット列ならば,

<2 進オクテット TRIM 関数>の宣言型は,<2 進オクテット TRIM 元>の長さ又は最大長と等し

い最大長をもつ可変長

2 進オクテット列型とする。

ii)  そうでなければ,<2 進オクテット TRIM 関数>の宣言型は,<2 進オクテット TRIM 元>の最大

長と等しい最大長をもつ長大オブジェクト

2 進オクテット列型とする。

20) <2 進オクテット OVERLAY 関数>が指定されるならば,次による。

a) 1 番目の<2 進オクテット値式>を BV とし,<開始位置>を SP とし,2 番目の<2 進オクテット値式

>を RS とする。

b) < デ ー タ 列 長 > が 指 定 さ れ る な ら ば , < デ ー タ 列 長 > を SL と す る 。 そ う で な け れ ば ,

OCTET_LENGTH(RS)  を SL とする。

c) <2 進オクテット OVERLAY 関数>は,次の指定と等価とする。

SUBSTRING ( BV FROM 1 FOR SP-1 )

|| RS

|| SUBSTRING ( BV FROM SP + SL )

アクセス規則


247

X 3005-2:2015 (ISO/IEC 9075-2:2011)

1)  場合:

a) SQL

SECURITY

INVOKER を指定する<SQL ルーチン指定>を介在しないで,<データ列値関数>が

<SQL スキーマ文>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識

別子

>の適用可能な権限は,<データ列値式>に含まれる<文字変換名>によって識別される全ての

文字変換に関する

USAGE を含まなければならない。

b)  そうでなければ,現行の権限は,<データ列値式>に含まれる<文字変換名>によって識別される全

ての文字変換に関する

USAGE を含まなければならない。

一般規則

1) <データ列値関数>の結果は,それに直に含まれる<文字値関数>又は<2 進オクテット値関数>の結果

とする。

2)

14

  <文字値関数>の結果は,それに直に含まれる<文字部分列関数>,<正規表現部分列関数>,

<SUBSTRING_REGEX 関 数 > , < 大 文 字 小 文 字 変 換 > , < 符 号 変 換 > , < 文 字 文 字 変 換 > ,

<TRANSLATE_REGEX 関数>,<TRIM 関数>,<文字 OVERLAY 関数>,<NORMALIZE 関数>又は<

特定型メソッド

>の結果とする。

3) <文字部分列関数>が指定されるならば,次による。

a) <文字値式>の文字符号化形式が UTF8,UTF16 又は UTF32 ならば,この一般規則の残りの部分で

は,“文字”という用語は,“

<文字長単位>によって指定される単位”を意味するものとして解釈

しなければならない。

b) <文字値式>の値を とし,の文字単位での長さを LC とし,<開始位置>の値を とする。

c) <データ列長>が指定されるならば,<データ列長>の値を とし,S + を とする。そうでなけ

れば,LC+1 と との大きい方の値を とする。

d)  C及び のうちの少なくとも一つがナル値ならば,<文字部分列関数>の結果は,ナル値とす

る。

e)

が 未満ならば,例外条件:データ例外  (data exception)  -  部分データ列誤り  (substring error)

が引き起こされる。

f)

場合:

i)

が LC を超えるか,又は が 1 未満ならば,<文字部分列関数>の結果は,長さ 0 の文字列と

する。

ii)  そうでなければ,次による。

1)  と 1 との大きい方の値を S1 とする。と LC+1 との小さい方の値を E1 とする。E1 – S1 

L1 とする。

2) <文字部分列関数>の結果は,文字が 中に現れるのと同じ順序での文字順位 S1 から始まる

の L1 個の文字を含む文字列とする。

4) <SUBSTRING_REGEX 関数>が指定されるならば,次による。

a) <REGEX 当該文字列>を RSS とし,RSS の値を STR とし,<XQuery パターン>の値を PAT とし,

<開始位置>の値を SP とし,<文字長単位>を CLU とし,<REGEX 出現回数>の値を OCC とし,

<REGEX キャプチャグループ>を CAP とし,<XQuery オプションフラグ>の値を FL とする。

b)  場合:

i)

STRPATOCCCAP 及び FL のうちの少なくとも一つがナル値ならば,<SUBSTRING_REGEX

関数

>の結果は,ナル値とする。


248

X 3005-2:2015 (ISO/IEC 9075-2:2011)

ii)  OCC が 1 未満ならば,<SUBSTRING_REGEX 関数>の結果は,ナル値とする。

iii)  CAP が 0  未満か,又は PAT の XQuery 正規表現括弧付き部分表現の個数を超えるならば,

<SUBSTRING_REGEX 関数>の結果は,ナル値とする。

iv)  SP が 1 未満か,又は次の値を超えるならば,<SUBSTRING_REGEX 関数>の結果は,ナル値と

する。

CHARACTER_LENGTH ( RSS USING CLU )

v)  CLU が OCTETS で,かつ,STR の SP 番目のオクテットが文字の最初のオクテットでないなら

ば,

<SUBSTRING_REGEX 関数>の結果は,処理系依存とする。

vi)  STR を STRING として,PAT を PATTERN として,SP を POSITION として,CLU を UNITS

として,FL を FLAG として,“9.18 XQuery 正規表現照合”の一般規則を適用する。これらの

一般規則の適用によって戻される LIST を LOMV とする。

場合:

1)  少なくとも OCC 個の一致ベクトルが LOMV 中にあるならば,LOMV 中の OCC 番目の一致

ベクトルを MV とする。MV[CAP]  を PL とする。ここで,MV[0]  は,MV 中の最初の位置/

長さとする。PL の位置を とし,PL の長さを とする。<SUBSTRING_REGEX 関数>の結

果は,次による。

A)  が 0 ならば,ナル値とする。

B)  そうでなければ,位置が で,かつ,長さが である STR の部分文字列とする。

2)  そうでなければ,<SUBSTRING_REGEX 関数>の結果は,ナル値とする。

5) <NORMALIZE 関数>が指定されるならば,次による。

a) <文字値式>の値を とする。

b)  がナル値ならば,<NORMALIZE 関数>の結果は,ナル値とする。

c)

[UNICODE15]どおりの NF によって指定される正規化形式での を NR とする。

d)  場合:

i)

NR の文字単位での長さが 以下ならば,<NORMALIZE 関数>の結果は,NR とする。

ii)  そうでなければ,例外条件:データ例外  -  データ列データ,右切捨て  (string data, right 

truncation)  が引き起こされる。

6) <正規表現部分列関数>が指定されるならば,次による。

a) 1 番目の<文字値式>の結果を とし,2 番目の<文字値式>の結果を とし,<エスケープ文字>の

結果を とする。

b)  C及び のうちの少なくとも一つがナル値ならば,<正規表現部分列関数>の結果は,ナル値

とする。

c)

の文字単位での長さが 1 と等しくないならば,例外条件:データ例外  -  エスケープ文字が正

しくない  (invalid escape character)  が引き起こされる。

d)  及びその直後に続く<2 重引用符>から成る 2 文字の並びの,ただ二つの実現値を が含まない

ならば,例外条件:

データ例外  -  エスケープ文字の用い方が正しくない  (invalid use of escape 

character)  が引き起こされる。

e)

次の条件が

真  (True)  であるような の部分文字列を R1R2 及び R3 とする

'R' = 'R1' || 'E' || '"' || 'R2' || 'E' || '"' || 'R3'

f)

R1R2 又は R3 のいずれか一つが長さ 0 の文字列ではなく,かつ,<正規表現>の形式をもたない


249

X 3005-2:2015 (ISO/IEC 9075-2:2011)

ならば,例外条件:

データ例外  -  正規表現が正しくない  (invalid regular expression)  が引き起こ

される。

g)  次の述語が真でないならば,<正規表現部分列関数>の結果は,ナル値とする。

'C' SIMILAR TO 'R1' || 'R2' || 'R3' ESCAPE 'E'

h)  そうでなければ,<正規表現部分列関数>の結果 は,次のとおりに計算される。

i)

次の

<探索条件>の値が真  であるような の部分文字列 S23 が存在するような の最も短い最

初の部分文字列を S1 とする。

'C' = 'S1' || 'S23' AND

'S1' SIMILAR TO 'R1' ESCAPE 'E' AND

'S23' SIMILAR TO '(R2R3)' ESCAPE 'E'

ii)  次の<探索条件>の値が真  であるような S23 の部分文字列 S2 が存在するような S23 の最も短い

最後の部分文字列を S3 とする。

'S23' = 'S2' || 'S3' AND

'S2' SIMILAR TO 'R2' ESCAPE 'E' AND

'S3' SIMILAR TO 'R3' ESCAPE 'E'

iii) <正規表現部分列関数>の結果は,S2 とする。

7) <大文字小文字変換>が指定されるならば,次による。

a) <文字値式>の値を とする。

b)  がナル値ならば,<大文字小文字変換>の結果は,ナル値とする。

c) <大文字小文字変換>の宣言型の文字単位での長さ又は最大長を FRML とする。

d)  場合:

i) UPPER が指定されるならば,の文字集合中に対応する大文字(1 文字又は複数の文字)をも

つ全ての小文字,及び の文字集合中に対応する大文字(1 文字又は複数の文字)をもつ全て

のタイトル文字が,大文字(

1 文字又は複数の文字)によって置き換えられた の写しを FR

とする。

ii) LOWER が指定されるならば,の文字集合中の対応する小文字(1 文字又は複数の文字)をも

つ全ての大文字,及び の文字集合中に対応する小文字(1 文字又は複数の文字)をもつ全て

のタイトル文字が,小文字(

1 文字又は複数の文字)によって置き換えられた の写しを FR

とする。

e) <文字因子>の文字集合が UTF8,UTF16 又は UTF32 ならば,FR は,次の値によって置き換えら

れる。

場合:

i) <探索条件> S IS NORMALIZED が真  と評価されるならば,次の値。

NORMALIZE (FR)

ii)  そうでなければ,FR

f)

FR の文字単位での長さを FRL とする。

g)  場合:

i)

FRL が FRML 以下ならば,<大文字小文字変換>の結果は,FR とする。FR の宣言型が固定長

文字列ならば,結果は,

(FRML – FRL)  個の<空白>が右側に詰め込まれる。

ii)  FRL が FRML を超えるならば,<大文字小文字変換>の結果は,長さ FRML をもつ,FR の最初


250

X 3005-2:2015 (ISO/IEC 9075-2:2011)

の FRML 個の文字とする。FR の最も右側の  (FRL  FRML)  個の文字のいずれかが<空白>文字

でないならば,終了条件:

警告  (warning)  -  データ列データ,右切捨て  が引き起こされる。

8) <文字文字変換>が指定されるならば,次による。

場合:

a) <文字値式>の値がナル値ならば,<文字文字変換>の結果は,ナル値とする。

b)  文字変換がどのように実行されるかを示す項目が SQL 呼出しルーチン TR を指定する文字変換記

述子を

<文字変換名>が識別するならば,<文字文字変換>の結果は,<文字文字変換>に含まれる<

文字値式

>である単一の SQL 引数をもつ TR の呼出しの結果とする。

c)

そうでなければ,

<文字文字変換>の値は,<文字変換名>によって識別される文字変換の文字変換

記述子中で指定される

<既存文字変換名>によって識別される文字変換によって戻される値とす

る。

9) <TRANSLATE_REGEX 関数>が指定されるならば,次による。

a) <REGEX 当該文字列>を RSS とし,RSS の値を STR とし,<XQuery パターン>の値を PAT とし,

<開始位置>の値を SP とし,<文字長単位>を CLU とし,<XQuery 置換文字列>の値を REP とし,

<XQuery オプションフラグ>の値を FL とする。

b)  場合:

i)

STRPATREP 及び FL のうちの少なくとも一つがナル値ならば,<TRANSLATE_REGEX 関

>の結果は,ナル値とする。

ii)  SP が 1 未満か,又は次の値を超えるならば,<TRANSLATE_REGEX 関数>の結果は,ナル値と

する。

CHARACTER_LENGTH ( RSS USING CLU )

iii)  CLU が OCTETS で,かつ,STR の SP 番目のオクテットが文字の最初のオクテットでないなら

ば,

<TRANSLATE_REGEX 関数>の結果は,処理系依存とする。

iv)  STR を STRING として,PAT を PATTERN として,SP を POSITION として,CLU を UNITS

として,FL を FLAG として,“9.18 XQuery 正規表現照合”の一般規則を適用する。これらの

一般規則の適用によって戻される LIST を LOMV とする。

v)  <TRANSLATE_REGEX の出現回数>を RTO とする。

場合:

1)  RTO が<REGEX 出現回数>ならば,RTO の値を OCC とする。

場合:

A)  OCC がナル値ならば,<TRANSLATE_REGEX 関数>の結果は,ナル値とする。

B)  OCC が 1 未 満 か , 又 は LOMV 中 の 一 致 ベ ク ト ル の 個 数 を 超 え る な ら ば ,

<TRANSLATE_REGEX 関数>の結果は,STR とする。

C)  そうでなければ,LOMV 中の OCC 番目の一致ベクトルを MV とする。MV を MATCH とし

て,STR を STRING として,PAT を PATTERN として,REP を REPLACEMENT として,

FL を FLAG と し て ,“ 9.19 XQuery 正 規 表 現 置 換 ” の 一 般 規 則 を 適 用 す る 。

<TRANSLATE_REGEX 関数 >の結果は,これらの一般規則の適用によって戻される

RESULT とする。

2)  そうでなければ,<TRANSLATE_REGEX の出現回数>は,ALL とする。LOMV 中の一致ベク

トルの個数を とする。STR を SN とする。


251

X 3005-2:2015 (ISO/IEC 9075-2:2011)

A)  降順で から 1 までの範囲の全ての に対して,LOMV 中の 番目の一致ベクトルを MVi

とする。MVi を MATCH として,Si を STRING として,PAT を PATTERN として,REP 
REPLACEMENT として,FL を FLAG として,

9.19 XQuery 正規表現置換”の一般規則を

適用する。これらの一般規則の適用によって戻される RESULT を Si-

1

とする。

注記 160  置換えは,文字列内での一致の位置が変わることを避けるために,STR の最後

から前方へ移動しながら適用される。置換えが実行されるとき,文字列中の後

方に未処理の置換えがなく,したがって,部分文字列が異なる長さの文字列に

よって置き換えられても,他の一致の位置が乱れない。

B) <TRANSLATE_REGEX 関数>の結果は,S

0

とする。

10) <符号変換>が指定されるならば,次による。

場合:

a) <文字値式>の値がナル値ならば,<符号変換>の結果は,ナル値とする。

b)  そうでなければ,<符号変換>の値は,<符号変換名>によって指定される符号変換の適用の後の<

文字値式

>の値とする。

11) <TRIM 関数>が指定されるならば,次による。

a) <TRIM 元>の値を とする。

b) <TRIM 文字>が指定されるならば,<TRIM 文字>の値を SC とする。そうでなければ,<空白>を

SC とする。

c)

及び SC のうちの少なくとも一つがナル値ならば,<TRIM 関数>の結果は,ナル値とする。

d)  SC の文字単位での長さが 1 でないならば,例外条件:データ例外  -  TRIM 誤り  (trim error)  が

引き起こされる。

e)

場合:

i) BOTH が指定されるか,又は<TRIM 指定>が指定されないならば,<TRIM 関数>の結果は,先

行又は後続する SC と等しい文字を取り除いた の値とする。

ii) TRAILING が指定されるならば,<TRIM 関数>の結果は,後続する SC と等しい文字を取り除い

た の値とする。

iii) LEADING が指定されるならば,<TRIM 関数>の結果は,先行する SC と等しい文字を取り除い

た の値とする。

12) <特定型メソッド>が指定されるならば,次による。

a) <利用者定義型値式>の値を とする。

b)  場合:

i)

がナル値ならば,ナル値を RV とする。

ii)  そうでなければ,次による。

1)  の最特定型を UDT とする。

2)  UDT の<利用者定義型名>を UDTN とする。

3)  UDTN に含まれる<カタログ名>を CN とし,UDTN に含まれる<修飾なしスキーマ名>を SN

とし,UDTN に含まれる<被修飾識別子>を UN とする。<2 重引用符>の全ての実現値を<2 重

引用表現

>によって置き換えた CNSN 及び UN を,それぞれ,CNDSND 及び UND とす

る。次の値を RV とする。

"CND"."SND"."UND"


252

X 3005-2:2015 (ISO/IEC 9075-2:2011)

c) <特定型メソッド>の結果は,RV とする。

13)

14

 <2 進オクテット値関数>の結果は,それに単純に含まれる<2 進オクテット部分列関数>,<2 進オ

クテット

TRIM 関数>又は<2 進オクテット OVERLAY 関数>の結果とする。

14) <2 進オクテット部分列関数>が指定されるならば,次による。

a) <2 進オクテット値式>の値を とし,のオクテット単位での長さを LB とし,<開始位置>の値

を とする。

b) <データ列長>が指定されるならば,<データ列長>の値を とし,S + を とする。そうでなけ

れば,LB+1 と との大きい方の値を とする。

c)

B及び のうちの少なくとも一つがナル値ならば,<2 進オクテット部分列関数>の結果は,ナ

ル値とする。

d)  が 未満ならば,例外条件:データ例外  -  部分データ列誤り  が引き起こされる。

e)

場合:

i)

が LB を超えるか,又は が 1 未満ならば,<2 進オクテット部分列関数>の結果は,長さ 0

のデータ列とする。

ii)  そうでなければ,次による。

1)  と 1 との大きい方の値を S1 とする。と LB+1 との小さい方の値を E1 とする。E1S1 

L1 とする。

2) <2 進オクテット部分列関数>の結果は,オクテットが 中に現れるのと同じ順序でのオクテ

ット順位 S1 から始まる の L1 個のオクテットを含む 2 進オクテット列とする。

15) <2 進オクテット TRIM 関数>が指定されるならば,次による。

a) <TRIM 元>の値を とする。

b) <TRIM オクテット>の値を SO とする。

c)

及び SO のうちの少なくとも一つがナル値ならば,<2 進オクテット TRIM 関数>の結果は,ナル

値とする。

d)  SO のオクテット単位での長さが 1  でないならば,例外条件:データ例外  -  TRIM 誤り  が引き

起こされる。

e)

場合:

i) BOTH が指定されるか,又は<TRIM 指定>が指定されないならば,<2 進オクテット TRIM 関数

>の結果は,先行又は後続する SO と等しいオクテットを取り除いた の値とする。

ii) TRAILING が指定されるならば,<2 進オクテット TRIM 関数>の結果は,後続する SO と等し

いオクテットを取り除いた の値とする。

iii) LEADING が指定されるならば,<2 進オクテット TRIM 関数>の結果は,先行する SO と等しい

オクテットを取り除いた の値とする。

16) <データ列値式>の結果が長さ 0 の文字列ならば,例外条件:データ例外  -  長さ の文字列  が引

き起こされるかどうかは,処理系定義とする。

適合性規則

1)  機能 T581“正規表現部分列関数”なしでは,適合する SQL 言語は,<正規表現部分列関数>を含ん

ではならない。

2)  機能 T312“OVERLAY 関数”なしでは,適合する SQL 言語は,<文字 OVERLAY 関数>を含んでは

ならない。


253

X 3005-2:2015 (ISO/IEC 9075-2:2011)

3)  機能 T312“OVERLAY 関数”なしでは,適合する SQL 言語は,<2 進オクテット OVERLAY 関数>

を含んではならない。

4)  機能 T042“拡張 LOB データ型提供”又は機能 T022“BINARY 及び VARBINARY データ型の高度

提供”なしでは,適合する

SQL 言語は,<2 進オクテット値関数>を含んではならない。

5)  機能 F695“文字変換提供”なしでは,適合する SQL 言語は,<文字文字変換>を含んではならない。

6)  機能 F695“文字変換提供”なしでは,適合する SQL 言語は,<符号変換>を含んではならない。

7)  機能 T061“UCS 提供”なしでは,適合する SQL 言語は,<NORMALIZE 関数>を含んではならない。

8)  機能 S261“特定型メソッド”なしでは,適合する SQL 言語は,<特定型メソッド>を含んではなら

ない。

9)  機能 F394“選択可能な正規形式指定”なしでは,適合する SQL 言語は,<正規形式>を含んではな

らない。

10)  機能 F421“各国文字”なしでは,適合する SQL 言語は,NATIONAL CHARACTER,NATIONAL

CHARACTER VARYING 又は NATIONAL CHARACTER LARGE OBJECT の宣言型をもつ<文字値関

>を含んではならない。

11)  機能 F844“SUBSTRING_REGEX”なしでは,適合する SQL 言語は,<SUBSTRING_REGEX 関数>

を含んではならない。

12)  機 能 F846 “ 正 規 表 現 演 算 子 で の オ ク テ ッ ト 提 供 ” な し で は , 適 合 す る SQL 言 語 中 で ,

<SUBSTRING_REGEX 関数>は,<文字長単位>を含んではならない。

13)  機能 F845“TRANSLATE_REGEX”なしでは,適合する SQL 言語は,<TRANSLATE_REGEX 関数>

を含んではならない。

14)  機 能 F846 “ 正 規 表 現 演 算 子 で の オ ク テ ッ ト 提 供 ” な し で は , 適 合 す る SQL 言 語 中 で ,

<TRANSLATE_REGEX 関数>は,<文字長単位>を含んではならない。

15)  機能 F847“値式正規表現”なしでは,適合する SQL 言語中で,<XQuery パターン>,<XQuery オプ

ションフラグ

>及び<XQuery 置換文字列>は,<値指定>でなければならない。

6.31  <日時値式>

機能

<日時値式> (<datetime value expression>)  は,日時値を指定する。

形式

<日時値式> ::=

  <日時項>

 |

<時間隔値式> <正符号> <日時項>

 |

<日時値式> <正符号> <時間隔項>

 |

<日時値式> <負符号> <時間隔項>

<日時項> ::=

  <日時因子>

<日時因子> ::=

  <日時一次子> [ <時刻帯> ]

<日時一次子> ::=

  <値式一次子>

 |

<日時値関数>


254

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<時刻帯> ::=

  AT  <時刻帯指定子>

<時刻帯指定子> ::=

  LOCAL

| TIME ZONE <時間隔一次子>

構文規則

1) <日時一次子>の宣言型は,日時でなければならない。

2) <日時値式>が<正符号>も<負符号>も直に含まないならば,<日時値式>の結果の精度は,それが単純

に含む

<値式一次子>又は<日時値関数>の精度とする。

3) <日時一次子>の宣言型が DATE ならば,<時刻帯>を指定してはならない。

4)  場合:

a) <時刻帯>が指定され,かつ,<日時一次子>の宣言型が TIMESTAMP WITHOUT TIME ZONE 又は

TIME WITHOUT TIME ZONE ならば,<日時項>の宣言型は,それぞれ,<日時一次子>と同じ小数

秒精度をもつ

TIMESTAMP WITH TIME ZONE 又は TIME WITH TIME ZONE とする。

b)  そうでなければ,<日時項>の宣言型は,<日時一次子>の宣言型と同じとする。

5) <日時値式>が<正符号>又は<負符号>のいずれかを直に含むならば,次による。

a) <時間隔値式>又は<時間隔項>は,<日時値式>又は<日時項>内に含まれる<基本日時フィールド>

だけを含まなければならない。

b) <日時値式>の結果は,それが単純に含む<日時値式>及び<時間隔項>又は<日時項>及び<時間隔値

>のいずれかに小数秒精度があるならば,それらの小数秒精度のうちの大きい方の小数秒精度を

もち,

<日時値式>又は<日時項>に含まれる<基本日時フィールド>と同じ<基本日時フィールド>

を含む。

6) <時刻帯指定子>に直に含まれる<時間隔一次子>の宣言型は,INTERVAL HOUR TO MINUTE でなけ

ればならない。

アクセス規則

なし。 

一般規則

1) <日時値式>に単純に含まれる<日時一次子>,<時間隔値式>,<日時値式>又は<時間隔項>のいずれ

かの値がナル値ならば,

<日時値式>の結果は,ナル値とする。

2) <時刻帯>が指定され,かつ,<時刻帯指定子>に直に含まれる<時間隔一次子>がナル値ならば,<日

時値式

>の結果は,ナル値とする。

3) <日時一次子>の値は,それに直に含まれる<値式一次子>又は<日時値関数>の値とする。

4)  これに続く一般規則では,<日時項>又は<日時値式>の結果である日時データ型の整合性を維持する

ように算術演算が行われる。これには,直に次の上位有効

<基本日時フィールド>からの桁送り,又

は直に次の上位有効

<基本日時フィールド>への桁上げを含んでもよい。<日時項>又は<日時値式>

のデータ型が時刻帯付き時刻又は時刻帯なし時刻ならば,

HOUR <基本日時フィールド>の算術演算

は,

24 を法として行われる。<時間隔値式>又は<時間隔項>が年月時間隔ならば,結果の DAY フィ

ールドは,

<日時項>又は<日時値式>の DAY フィールドと同じとする。

5) <日時項>の値は,次のとおりに決定される。<日時項>に単純に含まれる<日時一次子> DP の宣言型

を DT,値の UTC 構成要素を DV,時刻帯構成要素があるならば,時刻帯構成要素を TZD とし,SQL


255

X 3005-2:2015 (ISO/IEC 9075-2:2011)

セションの現行既定時刻帯時差を STZD とする。

場合:

a) <時刻帯>が指定されないならば,<日時項>の値は,DP の値とする。

b)  そうでなければ,次による。

i)

場合:

1)  DT が時刻帯付き日時ならば,<日時項>の UTC 構成要素は,DV とする。

2)  そうでなければ,<日時項>の UTC 構成要素は,DV – STZD とする。

ii)  場合:

1) LOCAL が指定されるならば,STZD を TZ とする。

2) TIME

ZONE が指定されるならば,<時刻帯指定子>に直に含まれる<時間隔一次子>の値が

INTERVAL-’14:00’ 未満か,又は INTERVAL + ’14:00’ を超えるならば,例外条件:

データ例外  (data exception)  -  時刻帯時差値が正しくない  (invalid time zone displacement 

value)  が引き起こされる。そうでなければ,<時刻帯>に単純に含まれる<時間隔一次子>の値

を TZ とする。

iii) <日時項>の値の時刻帯構成要素は,TZ とする。

6) <日時値式>が演算子<正符号>又は<負符号>を直に含むならば,結果の時刻帯構成要素があるとき,

それは,

<日時値式>に直に含まれる<日時項>又は<日時値式>の時刻帯構成要素と同じとする。(結

果の型が時刻帯なしならば,)その結果,又は(結果の型が時刻帯付きならば,

)その結果の

UTC 構

成要素は,次のとおりに実効的に評価される。

a)  場合:

i) <日時値式>が演算子<正符号>を直に含み,かつ,<時間隔値式>若しくは<時間隔項>が負の値で

ないならば,又は

<日時値式>が演算子<負符号>を直に含み,かつ,<時間隔項>が負の値ならば,

<時間隔値式>又は<時間隔項>の連続する<基本日時フィールド>が<日時値式>又は<日時項>の

対応するフィールドに加算される。

ii)  そうでなければ,<時間隔値式>又は<時間隔項>の連続する<基本日時フィールド>が<日時値式>

又は

<日時項>の対応するフィールドから減算される。

b)  先行する手順の後に,結果のいずれかの<基本日時フィールド>がそのフィールドに対して許され

る値の範囲外にあるか,又は日付及び時刻に対する自然な規則に基づいて結果が正しくないなら

ば,例外条件:

データ例外  -  日時フィールドあふれ  (datetime field overflow)  が引き起こされる。

注記 161  <基本日時フィールド>に対して許される値の範囲は,表 9“日時フィールドの正しい

値”参照。

適合性規則

1)  機能 F052“時間隔及び日時の算術”なしでは,適合する SQL 言語は,<正符号>又は<負符号>を直

に含む

<日時値式>を含んではならない。

2)  機能 F411“時刻帯指定”なしでは,適合する SQL 言語は,<時刻帯>を含んではならない。

6.32  <日時値関数>

機能

<日時値関数> (<datetime value function>)  は,日時型の値を生成する関数を指定する。

形式

<日時値関数> ::=


256

X 3005-2:2015 (ISO/IEC 9075-2:2011)

  <CURRENT_DATE 値関数>

 |

<CURRENT_TIME 値関数>

 |

<CURRENT_TIMESTAMP 値関数>

 |

<現在地方時刻値関数>

 |

<現在地方時刻印値関数>

<CURRENT_DATE 値関数> ::=

  CURRENT_DATE

<CURRENT_TIME 値関数> ::=

  CURRENT_TIME  [  <左括弧> <時刻精度> <右括弧> ]

<現在地方時刻値関数> ::=

  LOCALTIME  [  <左括弧> <時刻精度> <右括弧> ]

<CURRENT_TIMESTAMP 値関数> ::=

  CURRENT_TIMESTAMP  [  <左括弧> <時刻印精度> <右括弧> ]

<現在地方時刻印値関数> ::=

  LOCALTIMESTAMP  [  <左括弧> <時刻印精度> <右括弧> ]

構文規則

1) <CURRENT_DATE 値関数>の宣言型は,DATE とする。<CURRENT_TIME 値関数>の宣言型は,TIME

WITH TIME ZONE とする。<CURRENT_TIMESTAMP 値関数>の宣言型は,TIMESTAMP WITH TIME

ZONE とする。

注記 162  <時刻精度>及び<時刻印精度>を規定する規則については,“6.1 <データ型>”の構文規則

参照。

2)  場合:

a) <時刻精度> TP が指定されるならば,LOCALTIME(TP)  は,次の指定と等価とする。

CAST (CURRENT_TIME(TP) AS TIME(TP)  WITHOUT  TIME  ZONE)

b)  そうでなければ,LOCALTIME は,次の指定と等価とする。

CAST (CURRENT_TIME AS TIME WITHOUT TIME ZONE)

3)  場合:

a) <時刻印精度> TP が指定されるならば,LOCALTIMESTAMP(TP)  は,次の指定と等価とする。

CAST (CURRENT_TIMESTAMP(TP) AS TIMESTAMP(TP) WITHOUT TIME ZONE)

b)  そうでなければ,LOCALTIMESTAMP は,次の指定と等価とする。

CAST (CURRENT_TIMESTAMP AS TIMESTAMP WITHOUT TIME ZONE)

アクセス規則

なし。 

一般規則

1) <日時値関数>の CURRENT_DATE,CURRENT_TIME 及び CURRENT_TIMESTAMP は,それぞれ,

現在の日付,現在の時刻及び現在の時刻印を戻す。時刻及び時刻印の値は,

SQL セションの現行既

定時刻帯時差と等しい時刻帯時差付きで戻される。

2) <時刻精度>及び<時刻印精度>は,指定されるならば,それぞれ,時刻又は時刻印の戻される値の精

度を決定する。

3)

09

 <被トリガ動作>に一般に含まれない<SQL 手続文>を とする。<SQL 手続文>を介在しない S,又


257

X 3005-2:2015 (ISO/IEC 9075-2:2011)

は の実行の結果として活性化されるトリガの<被トリガ動作>に含まれる<SQL 手続文>のいずれか

に,当該ルーチンが

SQL 関数を含まない<ルーチン呼出し>を介在しないで,一般に含まれる<値式

>に含まれる全ての<日時値関数>は,実効的に同時に評価される。の実行中及びそれによって活性

化されるトリガの実行中の

<日時値関数>の評価の時期は,処理系依存とする。

注記 163  トリガの活性化は,“4.39.2  トリガ実行”で定義している。

適合性規則

1)  機能 F555“拡張秒精度”なしでは,適合する SQL 言語は,0 でない<時刻精度>を含む<現在地方時

刻値関数

>を含んではならず,0 でない<時刻精度>を含む<CURRENT_TIME 値関数>を含んではなら

ない。

2)  機能 F555“拡張秒精度”なしでは,適合する SQL 言語は,0 でも 6 でもない<時刻印精度>を含む<

現 在 地 方 時 刻 印 値 関 数

> を 含 ん で は な ら ず , 0 で も 6 で も な い < 時 刻 印 精 度 > を 含 む

<CURRENT_TIMESTAMP 値関数>を含んではならない。

3)  機能 F411“時刻帯指定”なしでは,適合する SQL 言語は,<CURRENT_TIME 値関数>を含んでは

ならない。

4)  機能 F411“時刻帯指定”なしでは,適合する SQL 言語は,<CURRENT_TIMESTAMP 値関数>を含

んではならない。

6.33  <時間隔値式>

機能

<時間隔値式> (<interval value expression>)  は,時間隔値を指定する。

形式

<時間隔値式> ::=

  <時間隔項>

 |

<時間隔値式 1> <正符号> <時間隔項 1>

 |

<時間隔値式 1> <負符号> <時間隔項 1>

 |

<左括弧> <日時値式> <負符号> <日時項> <右括弧>

      <時間隔修飾子>

<時間隔項> ::=

  <時間隔因子>

 |

<時間隔項 2> <アスタリスク> <因子>

 |

<時間隔項 2> <斜線> <因子>

 |

<項> <アスタリスク> <時間隔因子>

<時間隔因子> ::=

  [  <符号> ] <時間隔一次子>

<時間隔一次子> ::=

  <値式一次子> [ <時間隔修飾子> ]

 |

<時間隔値関数>

<時間隔値式 1> ::=

  <時間隔値式>

<時間隔項 1> ::=

  <時間隔項>


258

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<時間隔項 2> ::=

  <時間隔項>

構文規則

1) <時間隔値式>の宣言型は,時間隔とする。<時間隔一次子>に直に含まれる<値式一次子>の宣言型は,

時間隔でなければならない。

2)  場合:

a) <時間隔値式>が<時間隔修飾子> IQ を単純に含むならば,

結果の宣言型は,

INTERVAL IQ とする。

b) <時間隔値式>が<時間隔項>ならば,<時間隔値式>の結果は,<時間隔一次子>と同じ時間隔フィー

ルドを含む。

<時間隔一次子>が秒フィールドを含むならば,結果の小数秒精度は,<時間隔一次

>の小数秒精度と同じとする。結果の<時間隔先行フィールド精度>は,処理系定義とするが,<

時間隔一次子

>の<時間隔先行フィールド精度>未満であってはならない。

c) <時間隔項 1>が指定されるならば,結果は,<時間隔値式 1>又は<時間隔項 1>のいずれかの結果

中に含まれる全ての時間隔フィールドを含み,両方が秒フィールドを含むならば,結果の小数秒

精度は,それらの二つの小数秒精度の大きい方とする。

<時間隔先行フィールド精度>は,処理系

定義とするが,

<時間隔項 1>の時間隔フィールド及び<時間隔先行フィールド精度>をもつ全ての

時間隔値だけでなく,

<時間隔値式 1>の時間隔フィールド及び<時間隔先行フィールド精度>をも

つ全ての時間隔値を表現するのにも十分でなければならない。

注記 164  時間隔フィールドは,表 4“年月 INTERVAL の値中のフィールド”及び表 5“日時刻

INTERVAL の値中のフィールド”によって実効的に定義している。

3)  場合:

a) <時間隔項 1>が年月時間隔ならば,<時間隔値式 1>は,年月時間隔でなければならない。

b) <時間隔項 1>が日時刻時間隔ならば,<時間隔値式 1>は,日時刻時間隔でなければならない。

4) <日時値式>が指定されるならば,<日時値式>と<日時項>とは,比較可能でなければならない。

5) <時間隔一次子>が<動的パラメタ指定>を指定するときに限り,<時間隔一次子>は,<時間隔修飾子>

を指定しなければならない。

アクセス規則

なし。 

一般規則

1) <時間隔項>が“<項> * <時間隔因子>”を指定するならば,<項>の値及び<時間隔因子>の値を,そ

れぞれ,及び とする。<時間隔項>の結果は,F * の結果とする。

2) <時間隔値式>に単純に含まれる<時間隔一次子>,<日時値式>,<日時項>又は<因子>のいずれかの

値がナル値ならば,

<時間隔値式>の結果は,ナル値とする。

3)  IP が<時間隔一次子>ならば,次による。

場合:

a) <値式一次子> VEP 及び陽に指定される<時間隔修飾子> IQ を IP が直に含むならば,IP の値は,

次の演算によって計算される。

CAST ( VEP AS INTERVAL IQ )

b)  IP が<値式一次子> VEP を直に含むならば,IP の値は,VEP の値とする。

c)

IP が<時間隔値関数> IVF ならば,IP の値は,IVF の値とする。

4) <時間隔因子>の<符号>が<負符号>ならば,<時間隔因子>の値は,<時間隔一次子>の値の符号を反


259

X 3005-2:2015 (ISO/IEC 9075-2:2011)

転した値とする。そうでなければ,

<時間隔因子>の値は,<時間隔一次子>の値とする。

5) <時間隔項 2>が指定されるならば,次による。

a) <時間隔項 2>の値を とし,<因子>の値を とする。

b) <時間隔項 2>の最上位有効<基本日時フィールド>及び最下位有効<基本日時フィールド>を,それ

ぞれ,及び とする。

c)

次の演算の真数の結果を とする。

CAST ( CAST ( X AS INTERVAL Q ) AS E1 )

ここで,E1 は,有効桁を失わないような十分な位取り及び精度をもつ真数データ型とする。

d) <時間隔値式>中に指定される演算子*又は/を OP とする。

e)

次の演算の結果を,

<基本日時フィールド> で表現される<時間隔値式>の結果 とする。

CAST ( (E OP Y) AS INTERVAL Q

f) <時間隔値式>の結果は,次のとおりとする。

CAST ( I AS INTERVAL W )

ここで,は,複数の<基本日時フィールド> P TO を識別する<時間隔修飾子>とするが,有効

桁が失われないような

<時間隔先行フィールド精度>をもつ。

6) <時間隔項 1>が指定されるならば,<時間隔項 1>及び<時間隔値式 1>中の最上位有効<基本日時フィ

ールド

>及び最下位有効<基本日時フィールド>を,それぞれ,及び とし,<時間隔値式 1>の値

を とし,<時間隔項 1>の値を とする。

a)  次の演算の真数の結果を とする

CAST ( CAST ( X AS INTERVAL Q )

AS E1 )

ここで,E1 は,有効桁を失わないような十分な位取り及び精度をもつ真数データ型とする。

b)  次の演算の真数の結果を とする

CAST ( CAST ( Y AS INTERVAL Q )

AS E2 )

ここで,E2 は,有効桁を失わないような十分な位取り及び精度をもつ真数データ型とする。

c) <時間隔値式>中に指定される演算子+又は-を OP とする。

d)  次の指定の結果を,<基本日時フィールド> で表現される<時間隔値式>の結果 とする。

CAST ( (A OP B) AS

INTERVAL Q )

e) <時間隔値式>の結果は,次のとおりとする。

CAST ( I AS INTERVAL W )

ここで,は,複数の<基本日時フィールド> P TO を識別する<時間隔修飾子>とするが,有効

桁が失われないような

<時間隔先行フィールド精度>をもつ。

7) <日時値式>が指定されるならば,<時間隔修飾子>によって指定される最下位有効<基本日時フィー

ルド

>を とする。<日時値式>を DTE とし,<日時項>を DT とし,処理系定義の最大秒精度を MSP

とする。

<時間隔値式>の評価は,次のとおりに行われる。

a)  場合:

i) <日時値式>の宣言型が TIME WITH TIME ZONE ならば,次の値を とする。

CAST ( DTE AT LOCAL


260

X 3005-2:2015 (ISO/IEC 9075-2:2011)

AS TIME(MSP) WITHOUT

TIME ZONE )

ii) <日時値式>の宣言型が TIMESTAMP WITH TIME ZONE ならば,次の値を とする。

CAST ( DTE AT LOCAL

AS TIMESTAMP(MSP) WITHOUT

TIME ZONE )

iii)  そうでなければ,DTE の値を とする。

b)  場合:

i) <日時項>の宣言型が TIME WITH TIME ZONE ならば,次の値を とする。

CAST ( DT AT LOCAL

AS TIME(MSP) WITHOUT

TIME ZONE )

ii) <日時項>の宣言型が TIMESTAMP WITH TIME ZONE ならば,次の値を とする。

CAST ( DT AT LOCAL

AS TIMESTAMP(MSP) WITHOUT

TIME ZONE )

iii)  そうでなければ,DT の値を とする。

c)

及び は,それぞれ,ある処理系依存の開始日時からの差として,単位 での整数のスカラ値

A2 及び B2 に変換される。

d)  結果は,A2B2 を実効的に計算し,その後,である<終了フィールド>及び有効桁を失わないた

めに十分に有効な

<開始フィールド>をもつ<時間隔修飾子>を用いた時間隔に,その差を変換する

ことによって決定される。

(時刻帯付き又は時刻帯なしの)

TIME 型の二つの値の差は,(各端点

を除いて)-

24:00:00 と+24:00:00 との間にあるように制約される。その計算は,決定的でなけれ

ばならないが,この範囲中にある

0 でない二つの値のどちらを結果とするかは,処理系定義とす

る。この時間隔は,必要ならば,丸め又は切捨てを行って,さらに,指定された

<時間隔修飾子>

を用いた時間隔に変換される。丸めるか又は切り捨てるかの選択は,処理系定義とする。必要な

有効桁数が処理系定義の最大有効桁数を超えるならば,例外条件:

データ例外  (data exception)  -

時間隔フィールドあふれ  (interval field overflow)  が引き起こされる。

適合性規則

1)  機能 F052“時間隔及び日時の算術”なしでは,適合する SQL 言語は,<時間隔値式>を含んではな

らない。

6.34  <時間隔値関数>

機能

<時間隔値関数> (<interval value function>)  は,時間隔型の値を生成する関数を指定する。

形式

<時間隔値関数> ::=

  <時間隔絶対値関数>

<時間隔絶対値関数> ::=

  ABS  <左括弧> <時間隔値式> <右括弧>

構文規則


261

X 3005-2:2015 (ISO/IEC 9075-2:2011)

1) <時間隔絶対値関数>が指定されるならば,結果の宣言型は,<時間隔値式>の宣言型とする。

アクセス規則

なし。 

一般規則

1) <時間隔絶対値関数>が指定されるならば,<時間隔値式>の値を とする。

場合:

a)  がナル値ならば,結果は,ナル値とする。

b)  N ≥ 0 ならば,結果は,とする。

c)

そうでなければ,結果は,

-1 * とする。

適合性規則

1)  機能 F052“時間隔及び日時の算術”なしでは,適合する SQL 言語は,<時間隔値関数>を含んでは

ならない。

6.35  <ブール値式>

機能

<ブール値式> (<boolean value expression>)  は,ブール値を指定する。

形式

<ブール値式> ::=

  <ブール項>

 |

<ブール値式> OR <ブール項>

<ブール項> ::=

  <ブール因子>

 |

<ブール項> AND <ブール因子>

<ブール因子> ::=

  [ NOT ] <ブールテスト>

<ブールテスト> ::=

  <ブール一次子> [ IS [ NOT ] <真理値> ]

<真理値> ::=

  TRUE

 |

FALSE

 |

UNKNOWN

<ブール一次子> ::=

  <述語>

 |

<ブール述語オペランド>

<ブール述語オペランド> ::=

  <括弧付きブール値式>

 |

<括弧なし値式一次子>

<括弧付きブール値式> ::=

  <左括弧> <ブール値式> <右括弧>

構文規則

1) <括弧なし値式一次子>の宣言型は,ブールでなければならない。


262

X 3005-2:2015 (ISO/IEC 9075-2:2011)

2) <ブールテスト>中に NOT が指定されるならば,それに含まれる<ブール一次子>を BP とし,それ

に含まれる

<真理値>を TV とする。<ブールテスト>は,次の指定と等価とする。

( NOT ( BP IS TV ) )

3)  列 又は<キーワード> VALUE のいずれかを で示す。<ブール値式>  BVE,及び が与えられる

と,“BVE が に対する容易にナルでないことが分かる条件  (readily-known-not-null condition)”とい

う概念が次のとおりに定義される。

場合:

a)  BVE が“RVE IS NOT NULL”という形式の<述語>ならば,BVE は,に対する容易にナルでな

いことが分かる条件  とする。ここで,RVE は,を参照する<列参照>である<共通値式>,<ブー

ル述語オペランド

>又は<行値構成子要素>を単純に含む<行値構成子述語オペランド>である<行

値述語オペランド

>とする。

b)  BVE が<述語>“VALUE IS NOT NULL”ならば,BVE は,VALUE に対する容易にナルでないこ

とが分かる条件  とする。

c)

そうでなければ,BVE は,に対する容易にナルでないことが分かる条件ではない。

4)  列 又は<キーワード> VALUE のいずれかを で示す。<ブール値式>  BVE,及び が与えられる

と,“BVE が に対するナルでないことが分かる条件  (known-not-null condition)”という概念が次の

とおりに再帰的に定義される。

a)  BVE が<述語>のとき,BVE が に対する容易にナルでないことが分かる条件ならば,BVE は,

に対するナルでないことが分かる条件とする。

b)  機能 T101“拡張ナル可能性決定”を SQL 処理系が提供するならば,BVE は,次の再帰的な規則

に従っても,に対するナルでないことが分かる条件として認識される。

i)

BVE が<括弧付きブール値式>で,かつ,それに単純に含まれる<ブール値式>が に対するナ

ルでないことが分かる条件ならば,BVE は,に対するナルでないことが分かる条件とする。

ii)  BVE が<括弧なし値式一次子>ならば,BVE は,に対するナルでないことが分かる条件ではな

い。

iii)  BVE が<ブールテスト>ならば,BVE に直に含まれる<ブール一次子>を BP とする。BP が 

対するナルでないことが分かる条件で,かつ,

<真理値>が指定されないならば,BVE は,

対するナルでないことが分かる条件とする。そうでなければ,BVE は,に対するナルでない

ことが分かる条件ではない。

iv)  BVE が“NOT  BT”という形式から成るならば,次による。ここで,BT は,<ブールテスト>

とする。

場合:

1)  BT が“CR IS NULL”ならば,BVE は,に対するナルでないことが分かる条件とする。こ

こで,CR は,列 を参照する列参照とする。

2)  BT が“VALUE IS NULL”ならば,BVE は,VALUE に対するナルでないことが分かる条件と

する。

3)  そうでなければ,BVE は,に対するナルでないことが分かる条件ではない。

注記 165  簡単にするために,この規則は,“NOT NOT A IS NULL”又は“NOT (A IS NULL

OR NOT (B=2))”のような条件の解析を試みない。

v)  BVE が“BVE1 AND BVE2”という形式から成るならば,次による。


263

X 3005-2:2015 (ISO/IEC 9075-2:2011)

場合:

1)  BVE1 及び BVE2 のうちの少なくとも一つが に対するナルでないことが分かる条件ならば,

BVE は,に対するナルでないことが分かる条件とする。

2)  そうでなければ,BVE は,に対するナルでないことが分かる条件ではない。

vi)  BVE が“BVE1 OR BVE2”という形式から成るならば,BVE は,に対するナルでないことが

分かる条件ではない。

注記 166  簡単にするために,この規則は,ナルでないことが分かる条件として分類してもよ

い“A IS NOT NULL OR A IS NOT NULL”のような場合を検出しない。

c)

BVE が真  (True)  のとき,は,ナルであり得ない,ということを SQL 処理系が正確に推論する

ことを可能にする処理系定義の規則に,BVE が適合するならば,BVE は,に対するナルでない

ことが分かる条件とする。

5)  “回顧決定的 (retrospectively deterministic)”という概念は,次のとおりに再帰的に定義される。

a) <括弧付きブール値式>は,それに単純に含まれる<ブール値式>が回顧決定的ならば,回顧決定的

とする。

b) <括弧なし値式一次子>は,それが潜在的に非決定的でないならば,回顧決定的とする。

c) <述語> は,次のうち一つが真ならば,回顧決定的  とする。

i)

が潜在的に非決定的でない。

ii)  が,

X < Y”,“X <= Y”,“Y > X”,“Y >= X”,“X < Y + Z”,“X <= Y + Z”,“Y + Z > X”,“Y +

Z >= X

,“X < Y – Z”,“X <= Y – Z”,“Y – Z > X”又は“Y – Z >= X”という形式の<比較述語>

である。ここで,は,CURRENT_DATE,CURRENT_TIMESTAMP 又は LOCALTIMESTAMP

とし,及び は,潜在的に非決定的な<値式>ではなく,かつ,左側及び右側の比較オペラン

ドの宣言型は,両方とも時刻帯付き日時か又は両方とも時刻帯なし日時かのいずれかとする。

iii)  が,

Y > <限定子> <表副問合せ>”,“Y + Z > <限定子> <表副問合せ>”,“Y – Z > <限定子> <

表副問合せ

>”,“Y >= <限定子> <表副問合せ>”,“Y + Z >= <限定子> <表副問合せ>”又は“Y – Z

>= < 限 定 子 > < 表 副 問 合 せ > ” と い う 形 式 の < 限 定 比 較 述 語 > で あ る 。 こ こ で , は ,

CURRENT_DATE,CURRENT_TIMESTAMP 又は LOCALTIMESTAMP とし,は,潜在的に非

決定的でない

<値式>で,<表副問合せ>に単純に含まれる<問合せ式>は,潜在的に非決定的でな

く,かつ,左側及び右側の比較オペランドの宣言型は,両方とも時刻帯付き日時か又は両方と

も時刻帯なし日時かのいずれかとする。

iv)  が,回顧決定的な<ブール値式>に変換される<BETWEEN 述語>である。

d) <ブール一次子>は,それに単純に含まれる<述語>,<括弧付きブール値式>又は<括弧なし値式一

次子

>が回顧決定的ならば,回顧決定的とする。

e) <ブール因子>を BF とする。BF に単純に含まれる<ブール一次子>を BP とする。

i)

BF が次の形式のいずれかから成るならば,BF は,否定的  (negative)  と呼ぶ。

NOT BP

BP IS FALSE

BP IS NOT TRUE

NOT BP IS NOT FALSE

NOT BP IS TRUE

ii)  次のうち一つが真ならば,BF は,回顧決定的とする。


264

X 3005-2:2015 (ISO/IEC 9075-2:2011)

1)  BF が否定的で,かつ,潜在的に非決定的な<値式>を BF が一般に含まない。

2)  BF が否定的でなく,かつ,BP が回顧決定的である。

f) <ブール値式>は,それに単純に含まれる全ての<ブール因子>が回顧決定的ならば,回顧決定的と

する。

アクセス規則

なし。 

一般規則

1)  結果は,各<ブール一次子>から導出される結果に,指定されたブール演算子(

AND”,“OR”,

NOT”及び“IS”)を適用することによって導出される。ブール演算子が指定されないならば,<

ブール値式

>の結果は,指定された<ブール一次子>の結果とする。

2) NOT

(

真 ) は,偽  とし,NOT(  偽 ) は,真  とし,NOT(  不定 ) は,不定  とする。

3)  表 11“AND ブール演算子のための真理値表”

,表 12“OR ブール演算子のための真理値表”及び表

13“IS ブール演算子のための真理値表”は,それぞれ,AND,OR 及び IS の意味を規定する。

表 11AND ブール演算子のための真理値表

AND

  (True)   

  (False)   

不定

  (Unknown) 

 

 

 

不定

 

 

 

 

 

不定

 

不定

 

 

不定

 

表 12OR ブール演算子のための真理値表

OR

  (True)   

  (False)   

不定

  (Unknown) 

 

 

 

 

 

 

 

不定

 

不定

 

 

不定

 

不定

 

表 13IS ブール演算子のための真理値表

IS

TRUE

FALSE

UNKNOWN

 

 

 

 

 

 

 

 

不定

 

 

 

 

適合性規則

1)  機能 T031“BOOLEAN データ型”なしでは,適合する SQL 言語は,<括弧なし値式一次子>を単純

に含む

<ブール一次子>を含んではならない。

2)  機能 F571“真理値テスト”なしでは,適合する SQL 言語は,<真理値>を単純に含む<ブールテスト

>を含んではならない。

6.36  <配列値式>

機能

<配列値式> (<array value expression>)  は,配列値を指定する。

形式

<配列値式> ::=

  <配列連結>


265

X 3005-2:2015 (ISO/IEC 9075-2:2011)

 |

<配列一次子>

<配列連結> ::=

  <配列値式 1> <連結演算子> <配列一次子>

<配列値式 1> ::=

  <配列値式>

<配列一次子> ::=

  <配列値関数>

 |

<値式一次子>

構文規則

1) <配列値式>の宣言型は,それに直に含まれる<配列連結>又は<配列一次子>の宣言型とする。

2) <配列一次子>の宣言型は,それに直に含まれる<配列値関数>又は<値式一次子>の宣言型とし,その

宣言型は,配列型,又は元型が配列型の個別型でなければならない。

3) <配列連結>が指定されるならば,次による。

a) <配列値式 1>及び<配列一次子>の宣言型を DTSET として,

9.5  データ型組合せの結果”の構文

規則を適用する。これらの構文規則の適用によって戻される RESTYPE を DT とする。

b)  配列型の処理系定義の最大基数を IMDC とする。

c) <配列連結>の結果の宣言型は,配列型とし,その要素型は,DT の要素型で,かつ,その最大基

数は,

<配列値式 1>の最大基数と<配列一次子>の最大基数との合計と IMDC との小さい方とする。

アクセス規則

なし。 

一般規則

1) <配列値式>の結果の値は,それに直に含まれる<配列連結>又は<配列一次子>の値とする。

2) <配列連結>が指定されるならば,<配列値式 1>の値を AV1 とし,<配列一次子>の値を AV2 とする。

場合:

a)  AV1 及び AV2 のうちの少なくとも一つがナル値ならば,<配列連結>の結果は,ナル値とする。

b)  AV1 の基数と AV2 の基数との合計が IMDC を超えるならば,

例外条件:

データ例外  (data exception)

  配列データ,右切捨て  (array data, right truncation)  が引き起こされる。

c)

そうでなければ,結果は,AV1 の全ての要素,及びそれに続く AV2 の全ての要素から成る配列と

する。

適合性規則

1)  機能 S091“基本配列提供”なしでは,適合する SQL 言語は,<配列値式>を含んではならない。

6.37  <配列値関数>

機能

<配列値関数> (<array value function>)  は,配列型の値を生成する関数を指定する。

形式

<配列値関数> ::=

  <TRIM_ARRAY 関数>

<TRIM_ARRAY 関数> ::=

 TRIM_ARRAY

<左括弧> <配列値式> <コンマ> <数値式> <右括弧>

構文規則


266

X 3005-2:2015 (ISO/IEC 9075-2:2011)

1) <配列値関数>の宣言型は,それに直に含まれる<TRIM_ARRAY 関数>の宣言型とする。

2) <TRIM_ARRAY 関数>が指定されるならば,次による。

a) <数値式>の宣言型は,位取り 0 の真数型でなければならない。

b) <TRIM_ARRAY 関数>の宣言型は,それに直に含まれる<配列値式>の宣言型とする。

アクセス規則

なし。 

一般規則

1) <配列値関数>の値は,それに直に含まれる<TRIM_ARRAY 関数>の値とする。

2) <TRIM_ARRAY 関数>の結果は,次のとおりに決定される。

a) <数値式>の値を NV とする。

b)  NV がナル値ならば,結果は,ナル値とし,この細分箇条の一般規則は,これ以上適用しない。

c)

NV が 0 未満ならば,例外条件:データ例外  (data exception)  -  配列要素誤り  (array element error)

が引き起こされる。

d) <配列値式>の値を AV とする。

e)

AV がナル値ならば,結果は,ナル値とし,この細分箇条の一般規則は,これ以上適用しない。

f)

AV の基数を AC とする。

g)  NV が AC を超えるならば,例外条件:データ例外  (data exception)  -  配列要素誤り  (array element 

error)  が引き起こされる。

h)  AC – NV を とする。

i)

場合:

i)

N = 0 ならば,結果は,基数が 0 の配列とする。

ii)  そうでなければ,結果は,全ての i,1  ≤  i  ≤  に対して,結果の 番目の要素の値が AV の 

目の要素の値であるような 個の要素の配列とする。

適合性規則

1)  機能 S404“TRIM_ARRAY”なしでは,適合する SQL 言語は,<TRIM_ARRAY 関数>を含んではな

らない。

6.38  <配列値構成子>

機能

<配列値構成子> (<array value constructor>)  は,配列の構成体を指定する。

形式

<配列値構成子> ::=

  <列挙による配列値構成子>

 |

<問合せによる配列値構成子>

<列挙による配列値構成子> ::=

 ARRAY

<左角括弧又は 3 文字表記> <配列要素リスト> <右角括弧又は 3 文字表記>

<配列要素リスト> ::=

<配列要素> [ { <コンマ> <配列要素> } ... ]

<配列要素> ::=

<値式>

<問合せによる配列値構成子> ::=


267

X 3005-2:2015 (ISO/IEC 9075-2:2011)

 ARRAY

<表副問合せ>

構文規則

1) <配列値構成子>の宣言型は,それに直に含まれる<列挙による配列値構成子>又は<問合せによる配

列値構成子

>の宣言型とする。

2) <列挙による配列値構成子>の<配列要素リスト>に直に含まれる<配列要素>の宣言型を DTSET とし

て,“9.5  データ型組合せの結果”の構文規則を適用する。これらの構文規則の適用によって戻され

る RESTYPE を DT とする。<列挙による配列値構成子>の宣言型は,要素型 DT の配列型とする。<

列挙による配列値構成子

>の最大基数は,<配列要素リスト>中の<配列要素>の個数とし,それは,

要素型が DT である配列型に対する処理系定義の最大基数を超えてはならない。

3) <問合せによる配列値構成子>が指定されるならば,次による。

a) <表副問合せ>に単純に含まれる<問合せ式> QE は,次数が 1 でなければならない。<問合せ式>の

結果中の列の宣言型を ET とする。

b) <問合せによる配列値構成子>の宣言型は,要素型 ET,及びそのような配列型に対する処理系定

義の最大基数 IMDC と等しい最大基数をもつ配列とする。

アクセス規則

なし。 

一般規則

1) <配列値構成子>の値は,それに直に含まれる<列挙による配列値構成子>又は<問合せによる配列値

構成子

>の値とする。

2) <列挙による配列値構成子>の結果は,<配列要素リスト>に直に含まれる 番目の<配列要素>の値を

DT のデータ型に型変換した値を 番目の要素としてもつ配列とする。

3) <問合せによる配列値構成子>の結果は,次のとおりに決定される。

a)  QE が評価され,表 を生成する。中の行の個数を とする。

b)  が IMDC を超えるならば,例外条件:データ例外  (data exception)  -  配列データ,右切捨て

(array data, right truncation)  が引き起こされる。

c) <問合せによる配列値構成子>の結果は,全ての i,1  ≤  i  ≤  に対して,番目の要素の値が の i

番目の行中の唯一の列の値であるような 個の要素の配列とする。

注記 167  配列の要素の順序は,“7.13 <問合せ式>”の一般規則によって実効的に決定される。

適合性規則

1)  機能 S091“基本配列提供”なしでは,適合する SQL 言語は,<列挙による配列値構成子>を含んで

はならない。

2)  機能 S095“問合せによる配列構成子”なしでは,適合する SQL 言語は,<問合せによる配列値構成

>を含んではならない。

6.39  <マルチ集合値式>

機能

<マルチ集合値式> (<multiset value expression>)  は,マルチ集合値を指定する。

形式

<マルチ集合値式> ::=

  <マルチ集合項>

 |

<マルチ集合値式> MULTISET UNION [ ALL | DISTINCT ] <マルチ集合項>


268

X 3005-2:2015 (ISO/IEC 9075-2:2011)

 |

<マルチ集合値式> MULTISET EXCEPT [ ALL | DISTINCT ] <マルチ集合項>

<マルチ集合項> ::=

  <マルチ集合一次子>

 |

<マルチ集合項> MULTISET INTERSECT [ ALL | DISTINCT ] <マルチ集合一次子>

<マルチ集合一次子> ::=

  <マルチ集合値関数>

 |

<値式一次子>

構文規則

1) <マルチ集合一次子>の宣言型は,それに直に含まれる<マルチ集合値関数>又は<値式一次子>の宣言

型とし,それは,マルチ集合型,又は元型がマルチ集合型の個別型でなければならない。

2)  MI が,MULTISET INTERSECT を直に含む<マルチ集合項>ならば,1 番目のオペランド(<マルチ

集合項

>)を OP1 とし,2 番目のオペランド(<マルチ集合一次子>)を OP2 とする。

a)  OP1 及び OP2 は,マルチ集合要素グループ化操作のマルチ集合オペランドとする。

9.13  マルチ

集合要素グループ化操作”の構文規則及び適合性規則を適用する。

b)  OP1 の要素型を ET1 とし,OP2 の要素型を ET2 とする。ET1 及び ET2 を DTSET として,

9.5  デ

ータ型組合せの結果”の構文規則を適用する。これらの構文規則の適用によって戻される

RESTYPE を ET とする。MULTISET INTERSECT 演算の結果の型は,要素型 ET のマルチ集合と

する。

c) DISTINCT が指定されるならば,DISTINCT を SQ とする。そうでなければ,ALL を SQ とする。

d)  MI は,次の CASE 式と等価とする。

( CASE WHEN OP1 IS NULL OR OP2 IS NULL THEN NULL

         ELSE  MULTISET  (  SELECT  T1.V

                            FROM  UNNEST  (OP1) AS T1(V)

                          INTERSECT  SQ

                            SELECT  T2.V

                            FROM  UNNEST  (OP2) AS T2(V)

                          )

   END  )

3)  MU が,MULTISET UNION を直に含む<マルチ集合値式>ならば,1 番目のオペランド(<マルチ集

合値式

>)を OP1 とし,2 番目のオペランド(<マルチ集合項>)を OP2 とする。

a) DISTINCT が指定されるならば,OP1 及び OP2 は,マルチ集合要素グループ化操作のマルチ集合

オペランドとする。“9.13  マルチ集合要素グループ化操作”の構文規則及び適合性規則を適用す

る。

b)  OP1 の要素型を ET1 とし,OP2 の要素型を ET2 とする。ET1 及び ET2 を DTSET として,

9.5  デ

ータ型組合せの結果”の構文規則を適用する。これらの構文規則の適用によって戻される

RESTYPE を ET とする。MULTISET UNION 演算の結果の型は,要素型 ET のマルチ集合とする。

c) DISTINCT が指定されるならば,DISTINCT を SQ とする。そうでなければ,ALL を SQ とする。

d)  MU は,次の CASE 式と等価とする。

( CASE WHEN OP1 IS NULL OR OP2 IS NULL THEN NULL

         ELSE  MULTISET  (  SELECT  T1.V


269

X 3005-2:2015 (ISO/IEC 9075-2:2011)

                             FROM  UNNEST  (OP1) AS T1(V)

                          UNION  SQ

                             SELECT  T2.V

                             FROM  UNNEST  (OP2) AS T2(V)

                           )

   END  )

4)  ME が,MULTISET EXCEPT を直に含む<マルチ集合値式>ならば,1 番目のオペランド(<マルチ集

合値式

>)を OP1 とし,2 番目のオペランド(<マルチ集合項>)を OP2 とする。

a)  OP1 及び OP2 は,マルチ集合要素グループ化操作のマルチ集合オペランドとする。

9.13  マルチ

集合要素グループ化操作”の構文規則及び適合性規則を適用する。

b)  OP1 の要素型を ET1 とし,OP2 の要素型を ET2 とする。ET1 及び ET2 を DTSET として,

9.5  デ

ータ型組合せの結果”の構文規則を適用する。これらの構文規則の適用によって戻される

RESTYPE を ET とする。

MULTISET EXCEPT 演算の結果の型は,要素型 ET のマルチ集合とする。

c) DISTINCT が指定されるならば,DISTINCT を SQ とする。そうでなければ,ALL を SQ とする。

d)  ME は,次の CASE 式と等価とする。

( CASE WHEN OP1 IS NULL OR OP2 IS NULL THEN NULL

         ELSE  MULTISET  (  SELECT  T1.V

                             FROM  UNNEST  (OP1) AS T1(V)

                          EXCEPT  SQ

                             SELECT  T2.V

                             FROM  UNNEST  (OP2) AS T2(V)

                           )

   END  )

アクセス規則

なし。 

一般規則

1) <マルチ集合一次子>の値は,それに直に含まれる<マルチ集合値関数>又は<値式一次子>の値とする。

2) <マルチ集合一次子>である<マルチ集合項>の値は,<マルチ集合一次子>の値とする。

3) <マルチ集合項>である<マルチ集合値式>の値は,<マルチ集合項>の値とする。

適合性規則

1)  機能 S271“基本マルチ集合提供”なしでは,適合する SQL 言語は,<マルチ集合値式>を含んでは

ならない。

2)  機能 S275“高度マルチ集合提供”なしでは,適合する SQL 言語は,MULTISET UNION,MULTISET

INTERSECTION 又は MULTISET EXCEPT を含んではならない。

注記 168  MULTISET UNION DISTINCT,MULTISET INTERSECTION 又は MULTISET EXCEPT が

指定されるならば,

9.13  マルチ集合要素グループ化操作”の適合性規則も適用する。

6.40  <マルチ集合値関数>

機能

<マルチ集合値関数> (<multiset value function>)  は,マルチ集合型の値を生成する関数を指定する。

形式


270

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<マルチ集合値関数> ::=

  <マルチ集合 SET 関数>

<マルチ集合 SET 関数> ::=

  SET  <左括弧> <マルチ集合値式> <右括弧>

構文規則

1) <マルチ集合 SET 関数>に単純に含まれる<マルチ集合値式>を MVE とする。MVE は,マルチ集合

要素グループ化操作のマルチ集合オペランドとする。“9.13  マルチ集合要素グループ化操作”の構

文規則及び適合性規則を適用する。

2) <マルチ集合 SET 関数>は,次の CASE 式と等価とする。

( CASE WHEN MVE IS NULL THEN NULL

         ELSE  MULTISET  (  SELECT  DISTINCT  M.E

                             FROM  UNNEST  (MVE) AS M(E) )

   END  )

アクセス規則

なし。 

一般規則

なし。 

適合性規則

1)  機能 S271“基本マルチ集合提供”なしでは,適合する SQL 言語は,<マルチ集合値関数>を含んで

はならない。

注記 169  “9.13  マルチ集合要素グループ化操作”の適合性規則も適用する。

6.41  <マルチ集合値構成子>

機能

<マルチ集合値構成子> (<multiset value constructor>)  は,マルチ集合の構成体を指定する。

形式

<マルチ集合値構成子> ::=

  <列挙によるマルチ集合値構成子>

 |

<問合せによるマルチ集合値構成子>

 |

<問合せによる表値構成子>

<列挙によるマルチ集合値構成子> ::=

  MULTISET  <左角括弧又は 3 文字表記> <マルチ集合要素リスト> <右角括弧又は 3 文字表記>

<マルチ集合要素リスト> ::=

  <マルチ集合要素> [ { <コンマ> <マルチ集合要素> }... ]

<マルチ集合要素> ::=

  <値式>

<問合せによるマルチ集合値構成子> ::=

  MULTISET  <表副問合せ>

<問合せによる表値構成子> ::=

  TABLE  <表副問合せ>

構文規則


271

X 3005-2:2015 (ISO/IEC 9075-2:2011)

1) <マルチ集合値構成子>が<問合せによる表値構成子> TVCBQ を直に含むならば,次による。

a)  TVCBQ に単純に含まれる<問合せ式>を QE とする。

b)  QE は,<ORDER BY 句>を直に含んではならない。

c)

QE の結果中の列の個数を とする。

d)  全てが互いに異なる処理系依存の識別子を C1,...,Cn とする。

e)

TVCBQ は,次の指定と等価とする。

MULTISET ( SELECT ROW ( C1, ..., Cn )

              FROM  (  QE ) AS T ( C1, ..., Cn ) )

2) <マルチ集合値構成子>の宣言型は,それに直に含まれる<列挙によるマルチ集合値構成子>又は<問

合せによるマルチ集合値構成子

>の宣言型とする。

3)  <列挙によるマルチ集合値構成子>の<マルチ集合要素リスト>に直に含まれる<マルチ集合要素>の

宣言型を DTSET として,“9.5  データ型組合せの結果”の構文規則を適用する。これらの構文規則

の適用によって戻される RESTYPE を DT とする。<列挙によるマルチ集合値構成子>の宣言型は,

要素型 DT のマルチ集合型とする。

4) <問合せによるマルチ集合値構成子>が指定されるならば,次による。

a) <表副問合せ> TS は,次数が 1 でなければならない。

b)  TS は,<ORDER BY 句>を直に含んではならない。

c)

TS の結果中の列の宣言型を ET とする。

d) <問合せによるマルチ集合値構成子>の宣言型は,要素型 ET のマルチ集合とする。

アクセス規則

なし。 

一般規則

1) <マルチ集合値構成子>の値は,それに直に含まれる<列挙によるマルチ集合値構成子>又は<問合せ

によるマルチ集合値構成子

>の値とする。

2)  <列挙によるマルチ集合値構成子>の結果は,<マルチ集合要素リスト>に直に含まれる<マルチ集合

要素>の値を,DT のデータ型に型変換した値である要素をもつマルチ集合とする。

3) <問合せによるマルチ集合値構成子>が指定されるならば,次による。

a)  TS の値を とする。中の列の個数を とする。

b) <問合せによるマルチ集合値構成子>の結果は,の各行に対して一つの要素をもつ,個の要素

のマルチ集合とする。ここで,各要素の値は,の対応する行中の唯一の列の値とする。

適合性規則

1)  機能 S271“基本マルチ集合提供”なしでは,適合する SQL 言語は,<マルチ集合値構成子>を含ん

ではならない。

2)  機能 T326“表関数”なしでは,適合する SQL 言語中で,<マルチ集合値構成子>は,<問合せによる

表値構成子

>を含んではならない。

7

問合せ式

7.1

<行値構成子>

機能

<行値構成子> (<row value constructor>)  は,行を構成するために値又は値リストを指定する。


272

X 3005-2:2015 (ISO/IEC 9075-2:2011)

形式

<行値構成子> ::=

  <共通値式>

 |

<ブール値式>

 |

<明示行値構成子>

<明示行値構成子> ::=

  <左括弧> <行値構成子要素> <コンマ>

      <行値構成子要素リスト> <右括弧>

| ROW <左括弧> <行値構成子要素リスト> <右括弧>

 |

<行副問合せ>

<行値構成子要素リスト> ::=

  <行値構成子要素> [ { <コンマ> <行値構成子要素> }... ]

<行値構成子要素> ::=

  <値式>

<文脈型付き行値構成子> ::=

  <共通値式>

 |

<ブール値式>

 |

<文脈型付き値指定>

 |

<左括弧> <文脈型付き値指定> <右括弧>

 |

<左括弧> <文脈型付き行値構成子要素> <コンマ>

      <文脈型付き行値構成子要素リスト> <右括弧>

| ROW <左括弧> <文脈型付き行値構成子要素リスト> <右括弧>

<文脈型付き行値構成子要素リスト> ::=

  <文脈型付き行値構成子要素>

      [ { <コンマ> <文脈型付き行値構成子要素> }... ]

<文脈型付き行値構成子要素> ::=

  <値式>

 |

<文脈型付き値指定>

<行値構成子述語オペランド> ::=

  <共通値式>

 |

<ブール述語オペランド>

 |

<明示行値構成子>

構文規則

1) <行値構成子>が<共通値式>又は<ブール値式> ならば,<行値構成子>は,次の指定と等価とする。

ROW ( X )

2) <行値構成子述語オペランド>が<共通値式>又は<ブール述語オペランド> ならば,<行値構成子述

語オペランド

>は,次の指定と等価とする。

ROW ( X )

3) <明示行値構成子>を ERVC とする。

場合:


273

X 3005-2:2015 (ISO/IEC 9075-2:2011)

a)  ERVC が<行副問合せ>を単純に含むならば,ERVC の宣言型は,その<行副問合せ>の宣言型とす

る。

b)  そうでなければ,ERVC の宣言型は,ERVC に単純に含まれる各<行値構成子要素> に順序どお

りに対応する(

<フィールド名>,<データ型>)対の並びによって記述される行型とする。<デー

タ型

>は,の宣言型とし,<フィールド名>は,処理系依存とする。

4) <行値構成子>又は<行値構成子述語オペランド> RVC が<明示行値構成子> ERVC ならば,RVC の宣

言型は,ERVC の宣言型とする。

5) <文脈型付き行値構成子>を CTRVC とする。

a)  CTRVC が<共通値式>,<ブール値式>又は<文脈型付き値指定> ならば,CTRVC は,次の指定と

等価とする。

ROW ( X )

b)  構文規則 5)a)で規定した構文変換が実行された後で,必要ならば,CTRVC の宣言型は,CTRVC

に単純に含まれる各

<文脈型付き行値構成子要素>  に順序どおりに対応する(<フィールド名>,

<データ型>)対の並びによって記述される行型とする。<データ型>は,の宣言型とし,<フィ

ールド名

>は,処理系依存とする。

6) <行値構成子>,<文脈型付き行値構成子>又は<行値構成子述語オペランド>の次数は,その宣言型の

次数とする。

アクセス規則

なし。 

一般規則

1) <ナル指定>の値は,ナル値とする。

2) <既定値指定>の値は,

11.5 <DEFAULT 句>”の一般規則に従って決定される。

3)  場合:

a) <行値構成子>,<行値構成子述語オペランド>又は<文脈型付き行値構成子>が<共通値式>,<ブー

ル値式

>又は<文脈型付き行値構成子要素> を直に含むならば,<行値構成子>,<行値構成子述語

オペランド

>又は<文脈型付き行値構成子>の結果は,値が の値である単一列を含む行とする。

b) <明示行値構成子>が指定されるならば,<行値構成子>又は<行値構成子述語オペランド>の結果は,

番目の列の値が,

<明示行値構成子>に単純に含まれる 番目の<行値構成子要素>の値である列か

ら成る行とする。

c) <文脈型付き行値構成子要素リスト>が指定されるならば,<文脈型付き行値構成子>の結果は,i

番目の列の値が,

<文脈型付き行値構成子要素リスト>中の 番目の<文脈型付き行値構成子要素>

の値である列から成る行とする。

適合性規則

1)  機能 T051“行型”なしでは,適合する SQL 言語は,ROW を直に含む<明示行値構成子>を含んでは

ならない。

2)  機能 T051“行型”なしでは,適合する SQL 言語は,ROW を直に含む<文脈型付き行値構成子>を含

んではならない。

3)  機能 F641“行構成子及び表構成子”なしでは,適合する SQL 言語は,二つ以上の<行値構成子要素

>を含み,かつ,<表値構成子>に単純に含まれない<明示行値構成子>を含んではならない。

4)  機能 F641“行構成子及び表構成子”なしでは,適合する SQL 言語は,<行副問合せ>である<明示行


274

X 3005-2:2015 (ISO/IEC 9075-2:2011)

値構成子

>を含んではならない。

5)  機能 T031“BOOLEAN データ型”なしでは,適合する SQL 言語は,<ブール述語オペランド>を直

に含む

<行値構成子述語オペランド>を含んではならない。

6)  機能 F641“行構成子及び表構成子”なしでは,適合する SQL 言語は,二つ以上の<行値構成子要素

>を含み,かつ,<文脈型付き表値構成子>に単純に含まれない<文脈型付き行値構成子>を含んでは

ならない。

7.2

<行値式>

機能

<行値式> (<row value expression>)  は,行値を指定する。

形式

<行値式> ::=

  <行値の特別な場合>

 |

<明示行値構成子>

<表行値式> ::=

  <行値の特別な場合>

 |

<行値構成子>

<文脈型付き行値式> ::=

  <行値の特別な場合>

 |

<文脈型付き行値構成子>

<行値述語オペランド> ::=

  <行値の特別な場合>

 |

<行値構成子述語オペランド>

<行値の特別な場合> ::=

  <括弧なし値式一次子>

構文規則

1) <行値の特別な場合>の宣言型は,行型でなければならない。

2) <行値式>の宣言型は,それに直に含まれる<行値の特別な場合>又は<明示行値構成子>の宣言型とす

る。

3) <表行値式>の宣言型は,それに直に含まれる<行値の特別な場合>又は<行値構成子>の宣言型とす

る。

4) <文脈型付き行値式>の宣言型は,それに直に含まれる<行値の特別な場合>又は<文脈型付き行値構

成子

>の宣言型とする。<行値述語オペランド>の宣言型は,それに直に含まれる<行値の特別な場合

>又は<行値構成子述語オペランド>の宣言型とする。

アクセス規則

なし。 

一般規則

1) <行値の特別な場合>は,<括弧なし値式一次子>によって示される行値を指定する。

2) <行値式>は,<行値の特別な場合>又は<明示行値構成子>によって示される行値を指定する。

3) <表行値式>は,<行値の特別な場合>又は<行値構成子>によって示される行値を指定する。

4) <文脈型付き行値式>は,<行値の特別な場合>又は<文脈型付き行値構成子>によって示される行値を


275

X 3005-2:2015 (ISO/IEC 9075-2:2011)

指定する。

5) <行値述語オペランド>は,<行値の特別な場合>又は<行値構成子述語オペランド>によって示される

行値を指定する。

適合性規則

1)  機能 T051“行型”なしでは,適合する SQL 言語は,<行値の特別な場合>を含んではならない。

7.3

<表値構成子>

機能

<表値構成子> (<table value constructor>)  は,表を構成するために<行値式>の集合を指定する。

形式

<表値構成子> ::=

  VALUES  <行値式リスト>

<行値式リスト> ::=

  <表行値式> [ { <コンマ> <表行値式> }... ]

<文脈型付き表値構成子> ::=

  VALUES  <文脈型付き行値式リスト>

<文脈型付き行値式リスト> ::=

  <文脈型付き行値式>

      [ { <コンマ> <文脈型付き行値式> }... ]

構文規則

1) <行値式リスト>に直に含まれる全ての<表行値式>は,同じ次数でなければならない。

2) <文脈型付き行値式リスト>に直に含まれる全ての<文脈型付き行値式>は,同じ次数でなければなら

ない。

3) <表値構成子>又は<文脈型付き表値構成子>は,潜在的に非決定的な<値式>を一般に含むならば,潜

在的に非決定的  (possibly non-deterministic)  とする。

4)  個の<表行値式>から成る<表値構成子>又は 個の<文脈型付き行値式>から成る<文脈型付き表値

構成子

>を TVC とする。番目の<表行値式>又は 番目の<文脈型付き行値式>を RVEi,1 ≤ i ≤ 

示す。行型 RVEi,1 ≤ i ≤ を DTSET として,“9.5  データ型組合せの結果”の構文規則を適用する。
これらの構文規則の適用によって戻される RESTYPE を TVC の行型とする。列名は,処理系依存と

する。

アクセス規則

なし。 

一般規則

1)  いずれかの<表行値式>又は<文脈型付き行値式>の結果がナル値ならば,例外条件:データ例外  (data 

exception)  -  表中にナル行は許されない  (null row not permitted in table)  が引き起こされる。

2) <表値構成子>又は<文脈型付き表値構成子>  TVC の結果 は,TVC 中の<表行値式>の個数又は<文

脈型付き行値式

>の個数を基数としてもつ表とする。がそのような 個の式の結果ならば,は,

中に 回出現する。

適合性規則

1)  機能 F641“行構成子及び表構成子”なしでは,適合する SQL 言語中で,<文脈型付き表値構成子>

<文脈型付き行値式リスト>は,ただ一つの<文脈型付き行値構成子>  RVE を含まなければならな


276

X 3005-2:2015 (ISO/IEC 9075-2:2011)

い。RVE は,“(<文脈型付き行値構成子要素リスト>)”という形式から成らなければならない。

2)  機能 F641“行構成子及び表構成子”なしでは,適合する SQL 言語は,<表値構成子>を含んではな

らない。

7.4

<表式>

機能

<表式> (<table expression>)  は,表又はグループ表を指定する。

形式

<表式> ::=

  <FROM 句>

      [  <WHERE 句> ]

      [  <GROUP  BY 句> ]

      [  <HAVING 句> ]

      [  <WINDOW 句> ]

構文規則

1) <表式>の結果は,<WINDOW 句>が指定されるならば,それによって定義されるウィンドウ構造記

述子とともに,

<表式>に直に含まれる<FROM 句>の結果の行型を行型としてもつ導出表とする。

2)  ある列を とする。<表式>を TE とする。が,TE に含まれる列参照の基となる列ならば,は,

TE の基となる列  (underlying column)  とする。が,TE に含まれる列参照の一般に基となる列なら

ば,は,TE の一般に基となる列  (generally underlying column)  とする。

アクセス規則

なし。 

一般規則

1)  全ての省略可能な句が省略されるならば,<表式>の結果は,<FROM 句>の結果と同じとする。そう

でなければ,指定される各句は,前に指定される句の結果に適用され,

<表式>の結果は,最後に指

定される句を適用した結果とする。

適合性規則

なし。 

7.5

<FROM 句>

機能

<FROM 句> (<from clause>)  は,一つ以上の表から導出される表を指定する。

形式

<FROM 句> ::=

  FROM  <表参照リスト>

<表参照リスト> ::=

  <表参照> [ { <コンマ> <表参照> }... ]

構文規則

1)  順序付けされた<表参照リスト>を TRL とする。

a)  TRL 中のどの要素 TRi も,要素 TRj への外への参照を含んではならない。ここで,i ≤ とする。

b)  TRL 中の要素が<データ変更差分表>を一般に含むならば,TRL 中にただ一つの要素が存在しなけ

ればならない。


277

X 3005-2:2015 (ISO/IEC 9075-2:2011)

2)  場合:

a) <表参照リスト>が単一の<表参照>を直に含むならば,<表参照リスト>の結果の記述子は,その<

表参照

>によって識別される表の記述子と同じとする。<表参照リスト>の結果の行型 RT は,その

<表参照>によって識別される表の行型とする。

b) <表参照リスト>が二つ以上の<表参照>を直に含むならば,<表参照リスト>の結果の列の記述子は,

<表参照リスト>中に<表参照>が現れる順序で,かつ,各表内で列が定義される順序での,<表参

>によって識別される表の列の記述子とする。<表参照リスト>の結果の行型 RT は,次のとおり

に,結果の列記述子の並び SCD によって決定される。

i)

SCD 中の列記述子の個数を とする。RT は,個のフィールドをもつ。

ii) 1 から までの範囲の に対して,RT 中の 番目のフィールド記述子のフィールド名は,SCD

中の 番目の列記述子に含まれる列名とする。

iii) 1 から までの範囲の に対して,RT 中の 番目のフィールド記述子のデータ型記述子は,次

による。

場合:

1)  SCD 中の 番目の列記述子が定義域名 DN を含むならば,DN によって識別される定義域の

記述子に含まれるデータ型記述子とする。

2)  そうでなければ,SCD 中の 番目の列記述子に含まれるデータ型記述子とする。

3) <FROM 句>の結果の記述子は,<表参照リスト>の結果の記述子と同じとする。

アクセス規則

なし。 

一般規則

1)  TRL の結果を TRLR とする。

場合:

a)  TRL が単一の<表参照> TR を単純に含むならば,TRLR は,TR の結果とする。

b)  TRL が 個の<表参照>を単純に含み,n > 1 ならば,順序どおりに TRL の最初の n-1 個の要素を

とることによって形成される

<表参照リスト>を TRL-P とし,TRL の最後の要素を TRL-L とし,

TRL-P の結果を TRLR-P とする。

場合:

i)

TRLR-P が空ならば,TRLR は,空とする。

ii)  TRLR-P が 個の行を含み,m ≥ 1 ならば,どの行 Ri,1 ≤ i ≤ に対しても,TRL-L 中に含ま

れる全ての外への参照の下での TRL-L の対応する評価を TRLR-Li とする。Ri に TRLR-Li の行
を連結することによって形成される全ての行を含む表を SUBRi とする。SUBRi 中のどの行 RR
も,TRLR 中の行とし,TRLR 中の RR の実現値の個数は,SUBRi の全ての実現値中の RR の実
現値の個数の合計とする。

<表参照リスト>の結果は,<表参照リスト>の列の記述子の順序付けに従って列を並べ替えた TRLR

とする。

2) <FROM 句>の結果は,TRLR とする。

適合性規則

なし。 

7.6

<表参照>


278

X 3005-2:2015 (ISO/IEC 9075-2:2011)

この細分箇条は,ISO/IEC 9075-4 の“7.1 <表参照>”によって修正される。 

この細分箇条は,ISO/IEC 9075-9 の“7.1 <表参照>”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“7.1 <表参照>”によって修正される。 

機能

<表参照> (<table reference>)  は,表を参照する。

形式

<表参照> ::=

  <表因子>

 |

<結合表>

<表因子> ::=

  <表一次子> [ <標本句> ]

<標本句> ::=

  TABLESAMPLE  <標本方法> <左括弧> <標本率> <右括弧>

      [  <REPEATABLE 句> ]

<標本方法> ::=

  BERNOULLI

 |

SYSTEM

<REPEATABLE 句> ::=

  REPEATABLE  <左括弧> <繰返し引数> <右括弧>

<標本率> ::=

  <数値式>

<繰返し引数> ::=

  <数値式>

14

 <表一次子> ::=

  <表名又は問合せ名> [<問合せシステム時刻期間指定> ]

    [  [  AS  ]  <相関名>

      [ <左括弧> <導出列リスト> <右括弧> ] ]

 |

<導出表> [ AS ] <相関名>

      [ <左括弧> <導出列リスト> <右括弧> ]

 |

<横参照導出表> [ AS ] <相関名>

      [ <左括弧> <導出列リスト> <右括弧> ]

 |

<集まり導出表> [ AS ] <相関名>

      [ <左括弧> <導出列リスト> <右括弧> ]

 |

<表関数導出表> [ AS ] <相関名>

      [ <左括弧> <導出列リスト> <右括弧> ]

 |

<ONLY 指定> [ [ AS ] <相関名>

      [ <左括弧> <導出列リスト> <右括弧> ] ]

 |

<データ変更差分表> [ [ AS ] <相関名>

      [ <左括弧> <導出列リスト> <右括弧> ] ]

 |

<括弧付き結合表>


279

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<問合せシステム時刻期間指定> ::=

  FOR SYSTEM_TIME AS OF <時点 1>

| FOR SYSTEM_TIME BETWEEN [ ASYMMETRIC | SYMMETRIC ]

      <時点 1> AND <時点 2>

| FOR SYSTEM_TIME FROM <時点 1> TO <時点 2>

<時点 1> ::=

  <時点>

<時点 2> ::=

  <時点>

<時点> ::=

  <日時値式>

<ONLY 指定> ::=

  ONLY  <左括弧> <表名又は問合せ名> <右括弧>

<横参照導出表> ::=

  LATERAL  <表副問合せ>

<集まり導出表> ::=

  UNNEST  <左括弧> <集まり値式>

      [ { <コンマ> <集まり値式> }... ] <右括弧>

      [  WITH  ORDINALITY  ]

<表関数導出表> ::=

  TABLE  <左括弧> <集まり値式> <右括弧>

<導出表> ::=

  <表副問合せ>

<表名又は問合せ名> ::=

  <表名>

 |

<遷移表名>

 |

<問合せ名>

<導出列リスト> ::=

  <列名リスト>

<列名リスト> ::=

  <列名> [ { <コンマ> <列名> }... ]

<データ変更差分表> ::=

  <結果選択肢> TABLE <左括弧> <データ変更文> <右括弧>

<データ変更文> ::=

  <DELETE 文:探索>

 |

<INSERT 文>

 |

<MERGE 文>

 |

<UPDATE 文:探索>

<結果選択肢> ::=

  FINAL


280

X 3005-2:2015 (ISO/IEC 9075-2:2011)

 |

NEW

 |

OLD

<括弧付き結合表> ::=

  <左括弧> <括弧付き結合表> <右括弧>

 |

<左括弧> <結合表> <右括弧>

構文規則

1) <問合せシステム時刻期間指定> QSTPS が指定されるならば,次による。

a) <表名又は問合せ名>によって識別される表は,システムバージョン表でなければならない。

b) BETWEEN が指定され,SYMMETRIC 又は ASYMMETRIC のどちらも指定されないならば,

ASYMMETRIC が暗に想定される。

c)

04

 QSTPS は,<列参照>又は<SQL パラメタ参照>を含んではならない。

2) <表名又は問合せ名>によって識別される表がシステムバージョン表で,かつ,<問合せシステム時

刻期間指定

>が指定されないならば,FOR SYSTEM_TIME AS OF CURRENT_TIMESTAMP が暗に想

定される。

3) <時点>の宣言型は,DATE 又は時刻印型のいずれかでなければならない。

4) <繰返し引数>の宣言型は,位取り 0 の真数型でなければならない。

5) <表参照>を TR とし,TR に直に含まれる<表因子>を TF とし,TF に直に含まれる<表一次子>を TP

とする。

6)  TP が<表関数導出表> TFDT を単純に含むならば,次による。

a)  TFDT に直に含まれる<集まり値式>は,<ルーチン呼出し>でなければならない。

b)  TP に単純に含まれる<相関名>を CN とする。

c)

TP に単純に含まれる<集まり値式>を CVE とする。

d)  場合:

i)

TP が<導出列リスト> DCL を指定するならば,次の指定を TFDCL とする。

DCL )

ii)  そうでなければ,長さ 0 の文字列を TFDCL とする。

e)

TP は,次の<表一次子>と等価とする。

UNNEST ( CVE ) AS CN TFDCL

7)  TP が<集まり導出表> CDT を単純に含むならば,次による。

a)  CDT に単純に含まれる<集まり値式>の個数を NCV とする。

b)  左から右の順序で,CDT に単純に含まれる<集まり値式>の列挙を CVEj,1 ≤ j ≤ NCV とする。

c)

CVEj の宣言型の要素型を ETj,1 ≤ j ≤ NCV とする。

d)  TP に単純に含まれる<相関名>を CN とし,CN とも,TP に含まれる他のどの<識別子>とも等価

でない

<識別子>を TEMP とする。

e)

場合:

i)

いずれかの CVEj,1 ≤ j ≤ NCV の宣言型がマルチ集合ならば,NCV は,1 でなければならず,
WITH ORDINALITY を指定してはならない。宣言要素型が ET

1

の配列の処理系定義の最大基数

を IMDC

1

とする。次の指定を C

1

とする。

( CAST (CVE

1

 AS ET

1

 ARRAY[IMDC

1

]) )

ii)  そうでなければ,CVEj を Cj,1 ≤ j ≤ NCV とする。


281

X 3005-2:2015 (ISO/IEC 9075-2:2011)

f)

次の指定を CARDj,1 ≤ j ≤ NCV とする。

COALESCE( CARDINALITY( C

j

 ), 0 )

g)  CARD

1

を MCARD

1

とする。次の指定を MCARDj,2 ≤ j ≤ NCV とする。

CASE

WHEN CARD

j

 > CARD

j-1

THEN CARD

j

ELSE CARD

j-1

END

h)  MCARDNCV を MAXCARD とする。

i)

CNTEMP,又は TP に含まれる他のどの<識別子>とも互いに等価でない NCV+1 個の<列名>を

Nj,1 ≤ j ≤ NCV,及び NORD とする。

j)

次の指定を ELT1j,1 ≤ j ≤ NCV とする。

CASE

WHEN 1 <= CARDINALITY( C

j

 )

THEN C

j

[1]

ELSE NULL

END

k)  次の指定を ELTNORDj,1 ≤ j ≤ NCV とする。

CASE

WHEN NORD < CARDINALITY( C

j

 )

THEN C

j

[NORD+1]

ELSE NULL

END

l)

次の指定を RECQP とする。

WITH RECURSIVE TEMP(N

1

, ..., N

NCV

NORD) AS

( SELECT ELT1

1

 AS N

1

, ..., ELT1

NCV

 AS N

NCV

, 1 AS NORD

FROM (VALUES(1)) AS CN

WHERE 0 < MAXCARD

UNION

SELECT ELTNORD

1

 AS N

1

, ..., ELTNORD

NCV

 AS N

NCV

NORD+1 AS NORD

FROM TEMP

WHERE NORD < MAXCARD

)

m)  場合:

i)

TP が<導出列リスト> DCL を指定するならば,次による。

1) 1 から NCV までの範囲の全ての に対して,次による。

場合:

A)  ETj が行型ならば,ETj の次数を DETj とする。

B)  そうでなければ,1 を DETj とする。

2)  場合:


282

X 3005-2:2015 (ISO/IEC 9075-2:2011)

A)  CDT が WITH ORDINALITY を指定するならば,DCL は,DET

1

 +  + DETNCV +1 個の<

列名

>を含まなければならない。

B)  そうでなければ,DCL は,DET

1

 +  + DETNCV 個の<列名>を含まなければならない。

3)  次の指定を PDCLP とする。

DCL )

ii)  そうでなければ,次による。

場合:

1)  いずれかの ETj,1 ≤ j ≤ NCV が行型ならば,次による。

A)  行型である各 ETj に対して,次による。

I)

ETj の次数を DET(j)とする。

II)  ETj 中の 番目のフィールドの名前を FNj,i,1 ≤ i ≤ DET(j)  とする。

B)  行型でない各 ETj に対して,1 を DET(j)  とし,TP に含まれる他のどの<識別子>とも等価

でない

<識別子>を FNj,

1

とする。

C)  場合:

I)

CDT が WITH ORDINALITY を指定するならば,次の指定を PDCLP とする。

FN

1,1

FN

1,2

, ..., FN

1,DET(1)

,

...,

FN

NCV,1

,

FN

NCV,2

, ...,

FN

NCV,DET(NCV)

,

NORD

)

II)  そうでなければ,次の指定を PDCLP とする。

FN

1,1

FN

1,2

, ..., FN

1,DET(1)

,

...,

FN

NCV,1

,

FN

NCV,2

, ...,

FN

NCV,DET(NCV)

)

2)  そうでなければ,長さ 0 の文字列を PDCLP とする。

n)  ETj,1 ≤ j ≤ NCV が行型ならば,(Nj).*  を SLEj とする。そうでなければ,Nj を SLEj とする。

場合:

i)

CDT が WITH ORDINALITY を指定するならば,次の指定を ELDT とする。

LATERAL ( RECQP SELECT SLE

1

, ..., SLE

NCV

NORD

FROM TEMP ) AS CN PDCLP

NORD によって名前付けられた列を CDT の添え字列  (ordinality column)  と呼ぶ。

ii)  そうでなければ,次の指定を ELDT とする。

LATERAL ( RECQP SELECT SLE

1

, ..., SLE

NCV

FROM TEMP ) AS CN PDCLP

o)  TP は,<表一次子> ELDT と等価とする。

8)  TP が<括弧付き結合表>ではなく,

TP が<相関名>を単純に含むならば,

その

<相関名>を RV とする。

そうでなければ,あるならば,TF に単純に含まれる<表名又は問合せ名>を RV とする。RV は,範

囲変数とする。RV は,TF 中及び TR 中に露出する  (exposed by)。

注記 170  “範囲変数”は,“4.15.10  表を含む演算”で定義している。

注記 171  <括弧付き結合表>の範囲変数は,それに単純に含まれる<結合表>の範囲変数と同じであ


283

X 3005-2:2015 (ISO/IEC 9075-2:2011)

る。

<結合表>は,“7.7 <結合表>”で定義している。

注記 172  したがって,範囲変数は,(<相関名>又は<表名又は問合せ名>のいずれかの)BNF 非終

端である。等価な

<識別子>をもつ幾つかの範囲変数を<SQL 手続文>が含む可能性がある

が,それでも,それらは,異なる範囲変数とみなさなければならない。

9)  場合:

a)  TR が<問合せ式>を介在しないで<FROM 句>  FC に含まれるならば,TR の有効範囲句  (scope 

clause)  SC は,FC を含む<SELECT 文:単一行>か又は最も内側の<問合せ指定>とする。TR の範

囲変数の有効範囲は,SC の<選択リスト>,<WHERE 句>,<GROUP BY 句>,<HAVING 句>及び

<WINDOW 句>,並びに,FC に単純に含まれ,かつ,TR によって先行される全ての<横参照導出

>,FC に単純に含まれ,かつ,TR によって先行される全ての<集まり導出表>,及び TR を含む

SC に含まれる全ての<結合表>の<結合条件>とする。SC が,単純表問合せ STQ の<問合せ式本体

>である<問合せ指定>ならば,TR の範囲変数の有効範囲は,STQ の<ORDER BY 句>も含む。

注記 173  “単純表問合せ”は,“7.13 <問合せ式>”で定義している。

b)  TF が<MERGE 文> MS に単純に含まれるならば,TR の有効範囲句  SC は,MS とする。TF の範

囲変数及び TR の範囲変数の有効範囲は,SC の<探索条件>,<設定句リスト>及び<併合挿入値リ

スト

>とする。

注記 174  “14.12 <MERGE 文>”は,TR が<結合表>を直接含むことを許していない。

c)

そうでなければ,TR の有効範囲句  SC は,<問合せ式>を介在しないで TR を含む最も外側の<結

合表

>とする。TR のどの範囲変数の有効範囲も,TR を含む SC の<結合条件>,及び SC に含まれ

る全ての

<結合表>の<結合条件>とする。

10)  TR 中に露出する範囲変数を RV とする。TR と同じ有効範囲句をもつ<表参照> TR1 中に露出する範

囲変数を RV1 とする。

場合:

a)  RV が<表名>ならば,次による。

場合:

i)

RV1 が<表名>ならば,RV1 は,RV と等価であってはならない。

ii)  そうでなければ,RV1 は,RV の<被修飾識別子>と等価であってはならない。

b)  そうでなければ,次による。

場合:

i)

RV1 が<表名>ならば,RV1 の<被修飾識別子>は,RV と等価であってはならない。

ii)  そうでなければ,RV1 は,RV と等価であってはならない。

11)  TF に単純に含まれる<表名又は問合せ名>が TF によって定義される有効範囲句及び有効範囲をもつ

ことは,

<表名又は問合せ名>が TF 中及び TR 中に露出することと同値とする。

12)  TP が<表名又は問合せ名> TOQN を単純に含むならば,次による。

場合:

a)  TOQN が,<問合せ名>  QN と等価な<識別子>ならば,TP を含む<問合せ式>に単純に含まれる

<WITH リスト要素>で,その<WITH リスト要素>に単純に含まれる<問合せ名> QN1 が QN と等価

で,かつ,QN1 が有効範囲中で最も内側の問合せ名であるような<WITH リスト要素>を WLE 

する。WLE の結果を<問合せ名>によって指定される表  (table specified by the <query name>)  とす

る。


284

X 3005-2:2015 (ISO/IEC 9075-2:2011)

注記 175  “有効範囲中の問合せ名”は,“7.13 <問合せ式>”で定義している。

b)  TOQN が,有効範囲中にある<遷移表名>と等価な<識別子>ならば,TOQN によって識別される表

<遷移表名>によって指定される表  (table specified by the <transition table name>)  とする。

注記 176  “<遷移表名>の有効範囲”は,“11.49 <トリガ定義>”で定義している。

c)

そうでなければ,TP に単純に含まれる<表名>によって識別される表を<表名>によって指定され

る表  (table specified by the <table name>)  とする。

注記 177  前記の各場合は,TOQN が<問合せ名>として解釈されるか,<遷移表名>として解釈さ

れるか,又は

<表名>として解釈されるかという曖昧さをなくしている。

13)  TP が<ONLY 指定> OS を単純に含み,かつ,<表名又は問合せ名> TN によって識別される表が型付

き表でないならば,OS は,TN と等価とする。

14) <横参照導出表>の行型は,それに単純に含まれる<問合せ式>の行型とする。

15) <表参照> TR が<データ変更差分表> DCDT を単純に含むならば,TR に単純に含まれる<データ変更

>を とする。は,FOR PORTION OF を含んではならない。の当該表を TT とする。

a)  場合:

i)

が<INSERT 文>ならば,<結果選択肢>は,OLD を指定してはならない。

ii)  が<DELETE 文:探索>ならば,<結果選択肢>は,NEW 又は FINAL を指定してはならない。

iii)  が<MERGE 文>で,かつ,が<併合更新指定>又は<併合削除指定>のいずれかを含まないな

らば,

<結果選択肢>は,OLD を指定してはならない。

iv)  が<MERGE 文>で,かつ,が<併合更新指定>又は<併合挿入指定>のいずれかを含まないな

らば,

<結果選択肢>は,NEW 又は FINAL を指定してはならない。

b)  TT がビュー表ならば,次による。

i)

TT のビュー記述子は,WITH CHECK OPTION を示さなければならない。

ii) FINAL が指定されるならば,次による。

1)  が<INSERT 文>か,又は<併合挿入指定>を含む<MERGE 文>のいずれかならば,TT は,ト

リガ挿入可能であってはならない。

2)  が<UPDATE 文:探索>か,又は<併合更新指定>を含む<MERGE 文>のいずれかならば,TT

は,トリガ更新可能であってはならない。

c)

DCDT の行型は,TT の行型とする。

16)  場合:

a) <導出列リスト> DCL が TR 中に指定されるならば,次による。

i)

どの

<列名>も,<導出列リスト>中に 2 回以上指定してはならない。

ii)  DCL 中の<列名>の個数は,TR に単純に含まれる<導出表>,<結合表>,<横参照導出表>,<デ

ータ変更差分表

>又は<表名又は問合せ名>によって指定される表の次数と同じでなければなら

ない。

iii)  TR の行型 RT は,

<フィールド名>,<データ型>)対の並びによって記述される。ここで,i

番目の対の

<フィールド名>は,DCL 中の 番目の<列名>とし,番目の対の<データ型>は,TR

に単純に含まれる

<導出表>,<結合表>,<横参照導出表>,<データ変更差分表>又は<表名又は

問合せ名

>によって指定される表の 番目の列の宣言型とする。

b)  そうでなければ,TR の行型 RT は,それに単純に含まれる<表名又は問合せ名>,<導出表>,<横

参照導出表

>,<データ変更差分表>又は<結合表>の行型とする。


285

X 3005-2:2015 (ISO/IEC 9075-2:2011)

17) <導出表>又は<横参照導出表>が更新可能な導出表  (updatable derived table)  であることは,

<導出表>

又は

<横参照導出表>に単純に含まれる<問合せ式>が更新可能であることと同値とする。

18) <導出表>又は<横参照導出表>が単純に更新可能な導出表  (simply updatable derived table)  であるこ

とは,

<導出表>又は<横参照導出表>に単純に含まれる<問合せ式>が単純に更新可能であることと同

値とする。

19) <導出表>又は<横参照導出表>が挿入可能な導出表  (insertable-into derived table)  であることは,<導

出表

>又は<横参照導出表>に単純に含まれる<問合せ式>が挿入可能であることと同値とする。

20) <集まり導出表>は,更新可能ではなく,単純に更新可能でもない。

21) <データ変更差分表>は,更新可能ではなく,単純に更新可能でもない。

22) <表参照> TR が<表因子> TF を直に含むならば,次による。

場合:

a)  実表を識別する<表名>を TF が単純に含むならば,TF によって識別される表のどの列も,TR 

更新可能な列  (updatable column)  と呼ぶ。

b)  ビューを識別する<表名>を TF が単純に含むならば,TF によって識別されるビューのどの更新可

能な列も,TR の更新可能な列  と呼ぶ。

c) <導出表>又は<横参照導出表>を TF が単純に含むならば,<導出表>又は<横参照導出表>に単純に

含まれる

<問合せ式>によって識別される表のどの更新可能な列も,TR の更新可能な列  と呼ぶ。

23) <表参照>  TR が<表因子>を直に含み,TR に単純に含まれる<表名又は問合せ名>が<表名>  TN を直

に含むならば,TN によって識別される表を とする。TN の陽に指定されるか又は暗に想定される

<スキーマ名>によって識別されるスキーマは,の記述子を含んでいなければならない。

24) <表名>によって識別される表がビュー表で,かつ,その<表名>によって識別されるビュー記述子中

の階層的な

<問合せ式>が潜在的に非決定的ならば,その<表名>は,潜在的に非決定的  (possibly 

non-deterministic)  とする。

注記 178  下位表の作成が決定的から潜在的に非決定的にビューを変更してもよい。しかし,潜在

的に非決定的でないことを要求する依存性がビューにあるならば,これは,禁止される。

25) <問合せ名>によって識別される<問合せ式>が潜在的に非決定的ならば,その<問合せ名>は,潜在的

に非決定的  とする。

26) <導出表>又は<横参照導出表>に単純に含まれる<問合せ式>が潜在的に非決定的ならば,その<導出

>又は<横参照導出表>は,潜在的に非決定的  とする。

27) <データ変更差分表>は,潜在的に非決定的  とする。

28) <表一次子>に単純に含まれる<表名>,<問合せ名>,<導出表>,<横参照導出表>,<データ変更差分

> 若 し く は < 結 合 表 > が 潜 在 的 に 非 決 定 的 で あ る か , 又 は FOR SYSTEM_TIME AS OF

CURRENT_TIMESTAMP を暗に若しくは陽に指定しない<問合せシステム時刻期間指定>を<表一次

>が含むならば,その<表一次子>は,潜在的に非決定的  とする。

29)

14

  <表参照>に単純に含まれる<表一次子>若しくは<結合表>が潜在的に非決定的であるか,又は<標

本句

>が指定されるならば,その<表参照>は,潜在的に非決定的  とする。

アクセス規則

1) <表名> TN を単純に含む<表名又は問合せ名>を<表一次子> TP が単純に含むならば,次による。

a)  TN によって識別される表を とする。

b)  場合:


286

X 3005-2:2015 (ISO/IEC 9075-2:2011)

i) <表明定義>又は<検査制約定義>に直に含まれる<探索条件>に TN が含まれるならば,その<表

明定義

>又は<検査制約定義>を含むスキーマを所有する<認可識別子>に適用可能な権限は,T

の少なくとも一つの列に関する

REFERENCES を含まなければならない。

ii)  そうでなければ,次による。

1)  場合:

A) SQL

SECURITY

INVOKER を指定する<SQL ルーチン指定>を介在しないで,TP が<SQL ス

キーマ文

>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識別

>に適用可能な権限は,の少なくとも一つの列に関する SELECT を含まなければならな

い。

B)  そうでなければ,現行の権限は,の少なくとも一つの列に関する SELECT を含まなけれ

ばならない。

2)  TP が<ONLY 指定>を単純に含み,かつ,TN が型付き表を識別するならば,次による。

場合:

A) SQL

SECURITY

INVOKER を指定する<SQL ルーチン指定>を介在しないで,TP が<SQL ス

キーマ文

>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識別

> に 適 用 可 能 な 権 限 は , の 少 な く と も 一 つ の 上 位 表 に 関 す る SELECT WITH

HIERARCHY OPTION を含まなければならない。

B)  そうでなければ,現行の権限は,の少なくとも一つの上位表に関する SELECT WITH

HIERARCHY OPTION を含まなければならない。

2) <表一次子>  TP が<データ変更差分表>を単純に含むならば,TR に単純に含まれる<データ変更文>

を とする。の当該表を TT とする。

場合:

a) SQL

SECURITY

INVOKER を指定する<SQL ルーチン指定>を介在しないで,TP が<SQL スキーマ

>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識別子>に適用可

能な権限は,TT の少なくとも一つの列に関する SELECT を含まなければならない。

b)  そうでなければ,現行の権限は,TT の少なくとも一つの列に関する SELECT を含まなければな

らない。

一般規則

1) <表一次子> TP が<表名又は問合せ名> TOQN を単純に含むならば,次による。

場合:

a)  TOQN が<問合せ名> QN を単純に含むならば,TP の結果は,QN によって指定される表とする。

b)  TOQN が<遷移表名> TTN を単純に含むならば,

TP の結果は,

TTN によって指定される表とする。

注記 179  <遷移表名>によって識別される表は,“15.7  実表からの行の削除の効果”,“15.10  実

表への表の挿入の効果”又は“15.13  実表中の行の置換えの効果”の一般規則で定義

しているとおりの遷移表である。

c)

09

  そうでなければ,TP に単純に含まれる<表名>によって指定される表を とする。

場合:

i) ONLY が指定されるならば,TP の結果は,の真下位表中に下位行をもつ 中の行を除く,T

中の全ての行から成る表とする。

ii)  そうでなければ,次による。


287

X 3005-2:2015 (ISO/IEC 9075-2:2011)

場合:

1)  がシステムバージョン表ならば,次による。

A)  暗に想定されるか又は陽に指定される<問合せシステム時刻期間指定>を SVS とし,のシ

ステム時刻期間開始列を SSTARTCOL とし,のシステム時刻期間終了列を SENDCOL 

する。SSTARTCOL の宣言型を DT とする。

B)  SVS が FOR SYSTEM_TIME AS OF を指定するならば,

<時点 1>の値を POTV1 とする。CAST

(POTV1 AS DT)  の結果を POT1 とする。

C)  SVS が FOR SYSTEM_TIME BETWEEN 又は FOR SYSTEM_TIME FROM を指定するならば,

<時点 1>の値を POTV1 とし,<時点 2>の値を POTV2 とする。

場合:

I) SYMMETRIC が指定され,かつ,POTV1 > POTV2 ならば,CAST (POTV2 AS DT)  の結

果を POT1 とし,CAST (POTV1 AS DT)  の結果を POT2 とする。

II)  そうでなければ,CAST (POTV1 AS DT)  の結果を POT1 とし,CAST (POTV2 AS DT)  の

結果を POT2 とする。

D)  場合:

I)

SVS が FOR SYSTEM_TIME AS OF を指定するならば,TP の結果は,(SSTARTCOL <=

POT1 AND SENDCOL > POT1)  の結果が真  となる の全ての行 から成る表とする。

II)  SVS が FOR SYSTEM_TIME BETWEEN を指定するならば,TP の結果は,(POT1 <= POT2

AND SENDCOL > POT1 AND SSTARTCOL <= POT2)  の結果が真  となる の全ての行 R

から成る表とする。

III)  SVS が FOR SYSTEM_TIME FROM を指定するならば,TP の結果は,(POT1 < POT2 AND

SENDCOL > POT1 AND SSTARTCOL < POT2)  の結果が真  となる の全ての行 から成

る表とする。

2)  そうでなければ,TP の結果は,の全ての行から成る表とする。

2)

14

 <問合せ式> QE を単純に含む<導出表>又は<横参照導出表> LDT が指定されるならば,LDT の結

果は,QE の結果とする。

3) <データ変更差分表> DCDT が指定されるならば,DCDT に直に含まれる<データ変更文>を とし,

の当該表を TT とする。

a) FINAL が指定されるならば,次による。

i)

現行

SQL セション文脈の当該表制限フラグが偽  ならば,それに真  が設定される。

ii)  現行 SQL セション文脈に含まれる制限当該表名リストに TT の<表名>が追加される。

b)  場合:

i)

が<DELETE 文:探索>ならば,DCDT の結果は,TT に対する削除操作の差分旧表とする。

注記 180  “削除操作の差分旧表”は,“14.9 <DELETE 文:探索>”で定義している。

ii)  が<INSERT 文>ならば,DCDT の結果は,TT に対する挿入操作の差分新表とする。

注記 181  “挿入操作の差分新表”は,“15.10  実表への表の挿入の効果”及び“15.12  ビュー

表への表の挿入の効果”で定義している。

iii)  が<MERGE 文>ならば,次による。

場合:

1) OLD が指定されるならば,DCDT の結果は,あるならば,TT に対する併合操作の差分旧表


288

X 3005-2:2015 (ISO/IEC 9075-2:2011)

とする。

注記 182  “併合操作の差分旧表”は,“14.12 <MERGE 文>”で定義している。

2)  そうでなければ,DCDT の結果は,あるならば,TT に対する更新操作の差分新表と,あるな

らば,TT に対する挿入操作の差分新表との和集合とする。

注記 183  “更新操作の差分新表”は,“15.13  実表中の行の置換えの効果”及び“15.15  ビ

ュー表中の行の置換えの効果”で定義している。

注記 184  “挿入操作の差分新表”は,“15.10  実表への表の挿入の効果”及び“15.12  ビュ

ー表への表の挿入の効果”で定義している。

iv)  が<UPDATE 文:探索>ならば,次による。

場合:

1) OLD が指定されるならば,DCDT の結果は,TT に対する更新操作の差分旧表とする。

注記 185  “更新操作の差分旧表”は,“14.14 <UPDATE 文:探索>”で定義している。

2)  そうでなければ,DCDT の結果は,TT に対する更新操作の差分新表とする。

注記 186  “更新操作の差分新表”は,“15.13  実表中の行の置換えの効果”及び“15.15  ビ

ュー表中の行の置換えの効果”で定義している。

c) FINAL が指定されるならば,次による。

i)

現行

SQL セション文脈に含まれる制限当該表名リストから TT の<表名>が取り除かれる。

ii)  現行 SQL セション文脈に含まれる制限当該表名リストが空ならば,現行 SQL セション文脈の

当該表制限フラグに

  が設定される。

4)  TP が<結合表>を直に含むならば,TP の結果は,その<結合表>の結果とする。

5) <表因子> TF に直に含まれる<表一次子>を TP とする。TP の結果を RT とする。

場合:

a) <標本句>が指定されるならば,次による。

i)

RT 中の行数を とし,<標本率>の値を とする。

ii)  がナル値か,又は S < 0 若しくは S > 100 ならば,例外条件:データ例外  (data exception)  -  標

本率が正しくない  (invalid sample size)  が引き起こされる。

iii) <REPEATABLE 句>が指定されるならば,<繰返し引数>の値を RPT とする。RPT がナル値なら

ば,例外条件:

データ例外  -  標本句中の繰返し引数が正しくない  (invalid repeat argument in a 

sample clause)  が引き起こされる。

iv)  場合:

1) <標本方法>が BERNOULLI を指定するならば,TF の結果は,RT の行を約  (N*S/100)  行含む

表とする。TF の結果中に含まれる RT の行の確率は,S/100 とする。さらに,RT の与えられ

た行が TF の結果中に含まれるかどうかは,RT の他の行が TF の結果中に含まれるかどうか

とは独立している。

2)  そうでなければ,TF の結果は,RT の行を約  (N*S/100)  行含む表とする。TF の結果中に含

まれる RT の行の確率は,S/100 とする。

v)  TF が外への参照を含むならば,外への参照に対する値の与えられた集合で TF が評価されるご

とに,同一の行をもつ表が生成される。

注記 187  “外への参照”は,“6.7 <列参照>”で定義している。

b)  そうでなければ,TF の結果は,RT とする。


289

X 3005-2:2015 (ISO/IEC 9075-2:2011)

6) <表参照> TR の結果は,それに直に含まれる<表因子>又は<結合表>の結果とする。

7) <表因子> TF 中に露出する範囲変数を RV とする。RV に関連付けられた表は,TF の結果とする。

注記 188  “RV に関連付けられた表”は,“4.15.10  表を含む演算”で定義している。

適合性規則

1)  機能 S091“基本配列提供”又は機能 S271“基本マルチ集合提供”なしでは,適合する SQL 言語は,

<集まり導出表>を含んではならない。

2)  機能 T491“LATERAL 導出表”なしでは,適合する SQL 言語は,<横参照導出表>を含んではなら

ない。

3)  機能 T121“問合せ式中の(RECURSIVE を除く)WITH”なしでは,適合する SQL 言語は,<問合

せ名

>を含んではならない。

4)  機能 S111“問合せ式中の ONLY”なしでは,適合する SQL 言語は,<ONLY 指定>を含む<表参照>

を含んではならない。

5)  機能 F591“導出表”なしでは,適合する SQL 言語は,<導出表>を含んではならない。

6)  機能 T326“表関数”なしでは,適合する SQL 言語は,<表関数導出表>を含んではならない。

7)  機能 T613“サンプリング”なしでは,適合する SQL 言語は,<標本句>を含んではならない。

8)  機能 T211“基本トリガ能力”なしでは,適合する SQL 言語は,<遷移表名>を含んではならない。

9)  機能 S301“拡張 UNNEST”なしでは,適合する SQL 言語中で,<集まり導出表>は,二つ以上の<

集まり値式

>を単純に含んではならない。

10)  機能 T495“データ変更及び取出しの一体化”なしでは,適合する SQL 言語は,<データ変更差分表

>を含んではならない。

11)  機能 T180“システムバージョン表”なしでは,適合する SQL 言語は,<問合せシステム時刻期間指

>を含んではならない。

7.7

<結合表>

機能

<結合表> (<joind table>)  は,直積,内結合又は外結合から導出される表を指定する。

形式

<結合表> ::=

  <交差結合>

 |

<修飾付き結合>

 |

<自然結合>

<交差結合> ::=

  <表参照> CROSS JOIN <表因子>

<修飾付き結合> ::=

  {  <表参照> | <分割結合表> }

      [ <結合型> ] JOIN

      { <表参照> | <分割結合表> }

      <結合指定>

<分割結合表> ::=

  <表因子> PARTITION BY

      <分割結合列参照リスト>


290

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<分割結合列参照リスト> ::=

  <左括弧> <分割結合列参照>

      [ { <コンマ> <分割結合列参照> }... ]

      <右括弧>

<分割結合列参照> ::=

  <列参照>

<自然結合> ::=

  {  <表参照> | <分割結合表> }

      NATURAL  [  <結合型> ] JOIN

      { <表因子> | <分割結合表> }

<結合指定> ::=

  <結合条件>

 |

<名前付き列結合>

<結合条件> ::=

  ON  <探索条件>

<名前付き列結合> ::=

  USING  <左括弧> <結合列リスト> <右括弧>

<結合型> ::=

  INNER

 |

<外結合型> [ OUTER ]

<外結合型> ::=

  LEFT

 |

RIGHT

 |

FULL

<結合列リスト> ::=

  <列名リスト>

構文規則

1) <結合表>は,<データ変更差分表>を一般に含んではならない。

2) <結合表>の 1 番目のオペランドである<表参照>又は<表因子>を TRA とし,<結合表>の 2 番目のオ

ペランドである

<表参照>又は<表因子>を TRB とする。TRA 及び TRB の行型を,それぞれ,RTA 

び RTB とする。次の指定を CP とする。

SELECT *

FROM TRATRB

3)  TRA を参照する外への参照を含む<横参照導出表>を TRB が含むならば,<結合型>は,RIGHT 又は

FULL を含んではならない。

4) <修飾付き結合>又は<自然結合>が指定され,かつ,<結合型>が指定されないならば,INNER が暗

に想定される。

5) <結合条件>を含む<修飾付き結合>が指定され,<探索条件>に直接含まれる<値式>が<集合関数指定

>ならば,<結合表>は,<HAVING 句>又は<選択リスト>に含まれなければならず,<集合関数指定>

は,外への参照を含む集約化引数 AA を含まなければならず,かつ,AA に含まれるどの列参照も,


291

X 3005-2:2015 (ISO/IEC 9075-2:2011)

外への参照でなければならない。

注記 189  “外への参照”は,“6.7 <列参照>”で定義している。

6) <探索条件>は,<問合せ式>を介在しないで,<ウィンドウ関数>を含んではならない。

7) NATURAL も指定されず,<名前付き列結合>を直に含む<結合指定>も指定されないならば,<結合

>の結果の列の記述子は,その列のナル可能性特性の可能性を除いて,CP の列の記述子と同じと

する。

8) <分割結合表> PJT が指定されるならば,次による。

a) <修飾付き結合>又は<自然結合>は,<外結合型>を指定しなければならない。

b)  各<分割結合列参照>は,PJT に単純に含まれる<表一次子>によって参照される表の列を一意に参

照しなければならない。このような列を

結合分割列  (join partitioning column)  と呼ぶ。

c) <修飾付き結合>又は<自然結合>の 1 番目のオペランドが<分割結合表>ならば,<外結合型>は,

RIGHT 又は FULL でなければならない。

d) <修飾付き結合>又は<自然結合>の 2 番目のオペランドが<分割結合表>ならば,<外結合型>は,

LEFT 又は FULL でなければならず,TRB は,TRA を参照する外への参照を含む<横参照導出表>

を含んではならない。

9) NATURAL が指定されるか,又は<名前付き列結合>を直に含む<結合指定>が指定されるならば,次

による。

a) NATURAL が指定されるならば,

RTA のただ一つのフィールドの<フィールド名>と等価で,

かつ,

RTB のただ一つのフィールドの<フィールド名>と等価な<フィールド名>を共通列名  (common 

column name)  とする。RTA は,重複する共通列名をもってはならず,RTB は,重複する共通列名

をもってはならない。共通列名をもつ RTA 及び RTB のフィールドがあるならば,それらの全て

のフィールドを

対応する結合列  (corresponding join columns)  として参照する。

b) <名前付き列結合>が指定されるならば,<結合列リスト>中のどの<列名>も,RTA のただ一つのフ

ィールドの

<フィールド名>と等価でなければならず,RTB のただ一つのフィールドの<フィール

ド名

>と等価でなければならない。そのような列の名前を共通列名  とする。<結合列リスト>中で

識別される列を

対応する結合列  として参照する。

c)

対応する結合列は,結合分割列であってはならない。

d)  RTA 及び RTB の対の対応する結合列を,それぞれ,CA 及び CB とする。CA と CB とは,比較可

能でなければならない。CA 及び CB は,等値性演算のオペランドとし,“9.11  等値性演算”の構

文規則及び適合性規則を適用する。

e)

少なくとも一つの対応する結合列があるならば,次による。

i)

対応する結合列の個数を とする。

ii)  各 i,1 ≤ i ≤ に対して,次による。

1)  RTA 中の共通列名の順序位置の順序で取り込まれた 番目の共通列名を CJCNi とする。

2)  場合:

A)  名前が CJCNi である RTA のフィールドが範囲変数に関連付けられているならば,その範

囲変数を RVAi とする。

B)  そうでなければ,<結合表>を含む最も外側の<問合せ指定>中のどの範囲変数とも等価でな

く,これらの規則によって作成される他のどの範囲変数とも等価でない範囲変数を RVAi
とする。RVAi は,名前が CJCNi である RTA のフィールドに実効的に関連付けられる。


292

X 3005-2:2015 (ISO/IEC 9075-2:2011)

注記 190  この“実効的な範囲変数”は,自然結合又は名前付き列結合の結果中の共通列

がそれに関連付けられる範囲変数をもたないという事実を打開する手段である。

これは,例えば,“

(A NATURAL JOIN B) NATURAL JOIN C”のように,自然結

合又は名前付き列結合が入れ子になっているときにだけ必要である。この例で

は,“

(A NATURAL JOIN B)”の結果中の共通列に範囲変数を実際に関連付ける

構文がない。

3)  場合:

A)  名前が CJCNi である RTB のフィールドが範囲変数に関連付けられているならば,その範

囲変数を RVBi とする。

B)  そうでなければ,<結合表>を含む最も外側の<問合せ指定>中のどの範囲変数とも等価でな

く,これらの規則によって作成される他のどの範囲変数とも等価でない範囲変数を RVBi
とする。RVBi は,名前が CJCNi である RTB のフィールドに実効的に関連付けられる。 
注記 191  これは,例えば,“A NATURAL JOIN (B NATURAL JOIN C)”のように,自然結

合又は名前付き列結合が入れ子になっているときにだけ必要である。この例で

は,“

(B NATURAL JOIN C)”の結果中の共通列に範囲変数を実際に関連付ける

構文がない。

iii)  全ての i,1  ≤  i  ≤  に対して,昇順に次の形式の<導出列>から成る<選択リスト>を SLCC とす

る。

COALESCE ( RVA

i

.CJCN

i

RVB

i

.CJCN

i

 ) AS CJCN

i

f)

対応する結合列ではない少なくとも一つのフィールドを RTA が含むならば,次による。

i)

対応する結合列ではない RTA のフィールドの個数を NCA とする。

ii)  各 j,1 ≤ j ≤ NCA に対して,次による。

1)  RTA 中の対応する結合列ではないフィールドの順序位置の順序で取り込まれたそれらの 

目のフィールドの名前を CAj とする。

2)  場合:

A)  名前が CAj である RTA のフィールドが範囲変数に関連付けられているならば,その範囲変

数を RVCAj とする。

B)  そうでなければ,<結合表>を含む最も外側の<問合せ指定>中のどの範囲変数とも等価でな

く,これらの規則によって作成される他のどの範囲変数とも等価でない範囲変数を RVCAj
とする。RVCAj は,名前が CAj である RTA のフィールドに実効的に関連付けられる。

iii)  全ての j,1 ≤ j ≤ NCA に対して,昇順に次の形式の<導出列>から成る<選択リスト>を SLTA 

する。

RVCA

j

.CA

j

g)  対応する結合列ではない少なくとも一つのフィールドを RTB が含むならば,次による。

i)

対応する結合列ではない RTB のフィールドの個数を NCB とする。

ii)  各 k,1 ≤ k ≤ NCB に対して,次による。

1)  RTB 中の対応する結合列ではないフィールドの順序位置の順序で取り込まれた,それらの k

番目のフィールドの名前を CBk とする。

2)  場合:

A)  名前が CBk である RTB のフィールドが範囲変数に関連付けられているならば,その範囲


293

X 3005-2:2015 (ISO/IEC 9075-2:2011)

変数を RVCBk とする。

B)  そうでなければ,<結合表>を含む最も外側の<問合せ指定>中のどの範囲変数とも等価でな

く,これらの規則によって作成される他のどの範囲変数とも等価でない範囲変数を RVCBk
とする。RVCBk は,名前が CBk である RTB のフィールドに実効的に関連付けられる。

iii)  全ての k,1 ≤ k ≤ NCB に対して,昇順に次の形式の<導出列>から成る<選択リスト>を SLTB 

する。

RVCB

k

.CB

k

h) <選択リスト> SL を次のとおりに定義する。

場合:

i)

RTA 及び RTB のフィールドの全てが対応する結合列ならば,

SLCC”を SL とする。

ii)  RTA が対応する結合列を含まず,かつ,RTB が対応する結合列を含まないならば,

SLTA,

SLTB”を SL とする。

iii)  対応する結合列以外のフィールドを RTA が含まないならば,

SLCCSLTB”を SL とする。

iv)  対応する結合列以外のフィールドを RTB が含まないならば,

SLCCSLTA”を SL とする。

v)  そうでなければ,

SLCCSLTASLTB”を SL とする。

<結合表>の結果の列の記述子は,その列のナル可能性特性の可能性を除いて,次の結果の列の記

述子と同じとする。

SELECT SL FROM TRATRB

10)  次 の 条 件 の 少 な く と も 一 つ を 満 た す な ら ば , < 結 合 表 > は , 潜 在 的 に 非 決 定 的   (possibly 

non-deterministic)  とする。

a)  TRA 又は TRB のいずれかが潜在的に非決定的である。

b)  潜在的に非決定的な<値式>,潜在的に非決定的な<問合せ指定>又は潜在的に非決定的な<問合せ

>を一般に含む<結合条件>が指定される。

c) NATURAL が指定されるか又は<名前付き列結合>を直に含む<結合指定>が指定され,かつ,共通

列名 CCN によって識別される二つの対応する結合列の宣言型が対応する構成要素をもち,一方の

構成要素が時刻帯付きの日時で,他方の構成要素が時刻帯なしの日時であるような CCN がある。

d)  結合分割列の宣言型が文字列型,利用者定義型,TIME WITH TIME ZONE 又は TIMESTAMP WITH

TIME ZONE である。

11) <結合表>の行の宣言型は,順序どおりに取り込まれた,その<結合表>の列記述子の並びによって示

される(

<フィールド名>,<データ型>)対の並びによって定義される行型 RT とする。

12)  次の全ての条件が真ならば,<結合表>の結果の列 CR は,容易にナルでないことが分かる  (readily 

known not null)。

a) <結合表>が<外結合型>を単純に含まない。

b) <結合表>が NATURAL を単純に含まない。

c) <結合表>が  <分割結合表>を単純に含まない。

d)  CR が,容易にナルでないことが分かる列を参照する列参照である。

13)  次のいずれかの条件が真ならば,<結合表>の結果の列 CR は,ナルでないことが分かる  (known not 

null)。

a)  CR が容易にナルでないことが分かる。

b) SQL 処理系が機能 T101“拡張ナル可能性決定”を提供するならば,次の条件に従って,CR が潜


294

X 3005-2:2015 (ISO/IEC 9075-2:2011)

在的にナル可能でない。

i)

対応する結合列又は結合分割列ではない RTA のフィールド CA に対応する<結合表>の結果のど

の列 CR に対しても,次のいずれかの条件が真ならば,CR は,潜在的にナル可能  (possibly 

nullable)  とする。

1) RIGHT 又は FULL が指定される。

2) INNER,LEFT 又は CROSS JOIN が指定されるか又は暗に想定され,かつ,CA が潜在的にナ

ル可能である。

ii)  対応する結合列又は結合分割列ではない RTB のフィールド CB に対応する<結合表>の結果のど

の列 CR に対しても,次のいずれかの条件が真ならば,CR は,潜在的にナル可能  とする。

1) LEFT 又は FULL が指定される。

2) INNER,RIGHT 又は CROSS JOIN が指定されるか又は暗に想定され,かつ,CB が潜在的に

ナル可能である。

iii)  RTA の対応する結合列 CA 及び RTB の対応する結合列 CB に対応する<結合表>の結果のどの列

CR に対しても,次のいずれかの条件が真ならば,CR は,潜在的にナル可能  とする。

1) LEFT 又は FULL が指定され,かつ,CA が潜在的にナル可能である。

2) RIGHT 又は FULL が指定され,かつ,CB が潜在的にナル可能である。

iv)  結合分割列 JPC に対応する<結合表>の結果の列 CR は,JPC が潜在的にナル可能ならば,潜在

的にナル可能  とする。

c)

CR の値がナルであり得ないことを正確に推論できる処理系定義の規則に,CR が適合する。

アクセス規則

1)  少なくとも一つの共通列名が存在するならば,各 i,1 ≤ i ≤ に対して,次による。

a)  範囲変数 RVAi が実表又はビュー表 TA に関連付けられているならば,次による。

場合:

i) <表明定義>又は<検査制約定義>に直に含まれる<探索条件>に<結合表>が含まれるならば,その

<表明定義>又は<検査制約定義>を含むスキーマを所有する<認可識別子>に適用可能な権限は,

CJCNi によって識別される TA の列に関する REFERENCES を含まなければならない。

ii) SQL

SECURITY

INVOKER を指定する<SQL ルーチン指定>を介在しないで,<結合表>が<SQL

スキーマ文

>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識別子

>に適用可能な権限は,CJCNi によって識別される TA の列に関する SELECT を含まなければな
らない。

iii)  そうでなければ,現行の権限は,CJCNi によって識別される TA の列に関する SELECT を含ま

なければならない。

b)  範囲変数 RVBi が実表又はビュー表 TB に関連付けられているならば,次による。

場合:

i) <表明定義>又は<検査制約定義>に直に含まれる<探索条件>に<結合表>が含まれるならば,その

<表明定義>又は<検査制約定義>を含むスキーマを所有する<認可識別子>に適用可能な権限は,

CJCNi によって識別される TB の列に関する REFERENCES を含まなければならない。

ii) SQL

SECURITY

INVOKER を指定する<SQL ルーチン指定>を介在しないで,<結合表>が<SQL

スキーマ文

>に含まれるならば,その<SQL スキーマ文>を含むスキーマを所有する<認可識別子

>に適用可能な権限は,CJCNi によって識別される TB の列に関する SELECT を含まなければな


295

X 3005-2:2015 (ISO/IEC 9075-2:2011)

らない。

iii)  そうでなければ,現行の権限は,CJCNi によって識別される TB の列に関する SELECT を含ま

なければならない。

一般規則

1)  場合:

a) <交差結合>が指定されるならば,CP を とする。

b) <結合条件>が指定されるならば,<探索条件>を SC とし,次の指定を とする。

CP

WHERE SC

c) NATURAL が指定されるか又は<名前付き列結合>が指定されるならば,次による。

場合:

i)

対応する結合列があるならば,次の指定を とする。

CP

WHERE RVA

1

.CJCN

1

 = RVB

1

.CJCN

1

  AND  ...

  AND  RVA

N

.CJCN

N

 = RVB

N

.CJCN

N

注記 192  RVAi 及び RVBi の幾つか又は全てが,構文規則で作成された実効的な範囲変数であ

ってもよい。これらの実効的な範囲変数は,CP の<FROM 句>で定義されないが,

それでも,RTA 及び/又は RTB の適切なフィールドに正確に関連付けられなければ

ならない。

ii)  そうでなければ,CP を とする。

2)  を評価した結果を TR とし,TRA 及び TRB の次数を,それぞれ,DA 及び DB とし,TRA を評価

した結果を TVA とする。に対する実効的な名前を TN とする。

3) LEFT が指定され,かつ,2 番目のオペランドが<分割結合表>を指定しないならば,次による。

a)  ある行 が TR 中に存在し,ある行 RA が TVA 中に存在し,の最初の DA 個のフィールドの値

が RA の対応するフィールドの値と同一であるような TVA の行の集まりを PA とする。

b)  PA 中にない TVA のそれらの行を UA とする。

c)

ナル値を含む DB 個の列で右側を拡張した UA を XA とする。

d)  XA に対する実効的な異なる名前を XNA とする。

4) RIGHT 若しくは FULL が指定されるか,又は LEFT が指定され,かつ,2 番目のオペランドが<分割

結合表

>を指定するならば,次による。

a)  TRB を評価した結果を TVB とする。

注記 193  構文規則から当然の結果として,TRB は,TRA を参照する外への参照を含む<横参照

導出表

>を含まないことになる。これは,TRB を独立して評価することが可能である

ことを保証する。

b)  場合:

i) 1 番目のオペランドが<分割結合表>を指定するならば,次による。

場合:

1)  TVA が空ならば,0 を NA とする。

2)  そうでなければ,TVA は,各区画の各結合分割列 JPC に対して,JPC のどの二つの値も異な


296

X 3005-2:2015 (ISO/IEC 9075-2:2011)

らないような最小の個数の区画に分割される。結合分割列の宣言型が利用者定義型で,かつ,

TVA の二つの行に対するその列の比較の結果が不定  (Unknown)  になるならば,それらの行

の区画への割当ては,処理系依存とする。区画の個数を NA とする。区画の列挙を GA1,...,
GANA とする。

ii)  そうでなければ,1 を NA とし,TVA を GA

1 とする。

c)

場合:

i) 2 番目のオペランドが<分割結合表>を指定するならば,次による。

場合:

1)  TVB が空ならば,0 を NB とする。

2)  そうでなければ,TVB は,各区画の各結合分割列 JPC に対して,JPC のどの二つの値も異な

らないような最小の個数の区画に分割される。結合分割列の宣言型が利用者定義型で,かつ,

TVB の二つの行に対するその列の比較の結果が不定  になるならば,それらの行の区画への

割当ては,処理系依存とする。区画の個数を NB とする。区画の列挙を GB1,...,GBNB 
する。

ii)  そうでなければ,1 を NB とし,TVB を GB

1 とする。

d) 1 から NA までの範囲の各 に対して,かつ,1 から NB までの範囲の各 に対して,GAi の行 RA

と,GBj 中に存在する行 RB とを連結したものが TR 中に存在するような,RA の集まりを PAi,j
とする。

e) 1 から NA までの範囲の各 に対して,かつ,1 から NB までの範囲の各 に対して,GAj 中に存

在する行 RA と,GBi の行 RB とを連結したものが TR 中に存在するような,RB の集まりを PBi

,

j

とする。

f) 1 から NA までの範囲の各 に対して,かつ,1 から NB までの範囲の各 に対して,PAi

,

中に存

在しない GAi の行の集まりを UAi

,

とする。

g) 1 から NA までの範囲の各 に対して,かつ,1 から NB までの範囲の各 に対して,PBi

,

中に存

在しない GBi の行の集まりを UBi

,

 とする。

h) 1 から NA までの範囲の各 に対して,かつ,1 から NB までの範囲の各 に対して,次のとおり

に決定される宣言型及び値をもつ DB 個の列で右側を拡張した UAi

,

を XAi

,

とする。1 から DB

までの範囲の各 に対して,(DA + k)  番目の列の宣言型は,TVB の 番目の列の宣言型とし,そ

の値は,次の値とする。

場合:

i)

TVB の 番目の列が結合分割列ならば,GBj の 番目の列の共通の値とする。

ii)  そうでなければ,ナル値とする。

i) 1 から NA までの範囲の各 に対して,かつ,1 から NB までの範囲の各 に対して,次のとおり

に決定される宣言型及び値をもつ DA 個の列で左側を拡張した UBi

,

 を XBi

,

 とする。1 から DA

までの範囲の各 に対して,番目の列の宣言型は,TVA の 番目の列の宣言型とし,その値は,

次の値とする。

場合:

i)

TVA の 番目の列が結合分割列ならば,GAi の 番目の列の共通の値とする。

ii)  そうでなければ,ナル値とする。

j) 1 から NA までの範囲の全ての i,及び 1 から NB までの範囲の全ての に対する XAi

,

  中の全て


297

X 3005-2:2015 (ISO/IEC 9075-2:2011)

の行の集まりを XA とする。

注記 194  NA が 0 ならば,XA は,空である。

k) 1 から NA までの範囲の全ての i,及び 1 から NB までの範囲の全ての に対する XBi

,

  中の全て

の行の集まりを XB とする。

注記 195  NB が 0 ならば,XB は,空である。

l)

XA に対する実効的な異なる名前を XNA とする。

XB に対する実効的な異なる名前を XNB とする。

5)  場合:

a) INNER 又は<交差結合>が指定されるならば,TR を とする。

b) LEFT が指定されるならば,次の結果を とする。

SELECT *

FROM TN

UNION ALL

SELECT *

FROM XNA

c) RIGHT が指定されるならば,次の結果を とする。

SELECT *

FROM TN

UNION ALL

SELECT *

FROM XNB

d) FULL が指定されるならば,次の結果を とする。

SELECT *

FROM TN

UNION ALL

SELECT *

FROM XNA

UNION ALL

SELECT *

FROM XNB

6)  の実効的な名前を SN とする。

場合:

a) NATURAL が指定されるか又は<名前付き列結合>が指定されるならば,次による。

i)

の 番目の列の異なる名前を CSi とする。が DA 以下ならば,の列 CSi は,RTA の 番目
のフィールドに対応する。DA を超える に対して,の列 CSj は,RTB の  (jDA)  番目のフィ
ールドに対応する。

ii)  少なくとも一つの対応する結合列があるならば,列 CSi と列 CSj との全ての組に対する次の形

式の導出列から成る

<選択リスト>を SLCC とする。

COALESCE (CS

i

CS

j

)

ここで,CSi 及び CSj は,対応する結合列の対である RTA 及び RTB のフィールドに対応する。

iii)  対応する結合列ではない一つ以上のフィールドを RTA が含むならば,対応する結合列ではない


298

X 3005-2:2015 (ISO/IEC 9075-2:2011)

RTA のフィールドに対応する の全ての列 CSi に対して,中のそれらの順序位置での順序ど
おりに取り込まれた,次の形式の

<選択リスト>を SLTA とする。

CS

i

iv)  対応する結合列ではない一つ以上のフィールドを RTB が含むならば,対応する結合列ではない

RTB のフィールドに対応する の全ての列 CSj に対して,中のそれらの順序位置での順序ど
おりに取り込まれた,次の形式の

<選択リスト>を SLTB とする。

CS

j

v) <選択リスト> SL を次のとおりに定義する。

場合:

1)  RTA 及び RTB の全てのフィールドが対応する結合列ならば,次の指定を SL とする。

SLCC

2)  RTA が対応する結合列を含まず,かつ,RTB が対応する結合列を含まないならば,次の指定

を SL とする。

SLTASLTB

3)  対応する結合列以外のフィールドを RTA が含まないならば,次の指定を SL とする。

SLCCSLTB

4)  対応する結合列以外のフィールドを RTB が含まないならば,次の指定を SL とする。

SLCCSLTA

5)  そうでなければ,次の指定を SL とする。

SLCCSLTASLTB

vi) <結合表>の結果は,次の結果とする。

SELECT SL

FROM SN

b)  そうでなければ,<結合表>の結果は,とする。

適合性規則

1)  機能 F401“拡張結合表”なしでは,適合する SQL 言語は,<交差結合>を含んではならない。

2)  機能 F401“拡張結合表”なしでは,適合する SQL 言語は,<自然結合>を含んではならない。

3)  機能 F401“拡張結合表”なしでは,適合する SQL 言語は,FULL を含んではならない。

4)  機能 F402“LOB,配列及びマルチ集合に対する名前付き列結合”なしでは,<自然結合>又は<名前

付き列結合

>中で が対応する結合列で,かつ,の宣言型が LOB 順序付け,配列順序付け又はマ

ルチ集合順序付けならば,適合する

SQL 言語は,その<自然結合>又は<名前付き列結合>のいずれ

かを単純に含む

<結合表>を含んではならない。

注記 196  が対応する結合列ならば,“9.11  等値性演算”の適合性規則も適用する。

5)  機能 F403“分割結合表”なしでは,適合する SQL 言語は,<分割結合表>を含んではならない。

7.8

<WHERE 句>

機能

<WHERE 句> (<where clause>)  は,先行する<FROM 句>の結果に<探索条件>を適用することによって導

出される表を指定する。

形式

<WHERE 句> ::=


299

X 3005-2:2015 (ISO/IEC 9075-2:2011)

  WHERE  <探索条件>

構文規則

1) <探索条件>に直接含まれる<値式>が<集合関数指定>ならば,<WHERE 句>は,<HAVING 句>又は<

選択リスト

>に含まれなければならず,<集合関数指定>は,列参照を含まなければならず,かつ,<

集合関数指定

>の集約化引数に含まれるどの列参照も,外への参照でなければならない。

注記 197  外への参照  (outer reference)  は,“6.7 <列参照>”で定義している。

2) <探索条件>は,<問合せ式>を介在しないで<ウィンドウ関数>を含んではならない。

アクセス規則

なし。 

一般規則

1)  先行する<FROM 句>の結果を とする。

2) <探索条件>が の各行に対して実効的に評価される。<WHERE 句>の結果は,<探索条件>の結果が

真  となる の行から成る表とする。

適合性規則

1)  機能 F441“拡張集合関数提供”なしでは,適合する SQL 言語は,<WHERE 句>に直接含まれる<値

>で,<集合関数指定>を一般に含む<導出列>を参照する<列参照>を含む<値式>を含んではならな

い。

7.9

<GROUP BY 句>

機能

<GROUP BY 句> (<group by clause>)  は,前に指定された句の結果に<GROUP BY 句>を適用することに

よって導出されるグループ表

 (grouped table) を指定する。

形式

<GROUP BY 句> ::=

  GROUP BY [ <集合限定子> ] <グループ化要素リスト>

<グループ化要素リスト> ::=

  <グループ化要素> [ { <コンマ> <グループ化要素> }... ]

<グループ化要素> ::=

  <通常グループ化集合>

 |

<ROLLUP リスト>

 |

<CUBE リスト>

| <GROUPING SETS 指定>

 |

<空グループ化集合>

<通常グループ化集合> ::=

  <グループ化列参照>

 |

<左括弧> <グループ化列参照リスト> <右括弧>

<グループ化列参照> ::=

  <列参照> [ <COLLATE 句> ]

<グループ化列参照リスト> ::=

  <グループ化列参照> [ { <コンマ> <グループ化列参照> }... ]

<ROLLUP リスト> ::=


300

X 3005-2:2015 (ISO/IEC 9075-2:2011)

  ROLLUP  <左括弧> <通常グループ化集合リスト> <右括弧>

<通常グループ化集合リスト> ::=

  <通常グループ化集合> [ { <コンマ> <通常グループ化集合> }... ]

<CUBE リスト> ::=

  CUBE  <左括弧> <通常グループ化集合リスト> <右括弧>

<GROUPING SETS 指定> ::=

  GROUPING  SETS  <左括弧> <グループ化集合リスト> <右括弧>

<グループ化集合リスト> ::=

  <グループ化集合> [ { <コンマ> <グループ化集合> }... ]

<グループ化集合> ::=

  <通常グループ化集合>

 |

<ROLLUP リスト>

 |

<CUBE リスト>

| <GROUPING SETS 指定>

 |

<空グループ化集合>

<空グループ化集合> ::=

  <左括弧> <右括弧>

構文規則

1)  各<グループ化列参照>は,<FROM 句>の結果として得られる表の列を,曖昧さなく参照しなければ

ならない。

<GROUP BY 句>中で参照される列は,グループ化列  (grouping column)  とする。

注記 198  “列参照”は,“6.7 <列参照>”で定義している。

2)  各<グループ化列参照>は,グループ化操作のオペランドとする。

9.12  グループ化操作”の構文規

則及び適合性規則を適用する。

3)  どの<グループ化列参照> GC に対しても,次による。

場合:

a) <COLLATE 句>が指定されるならば,<照合順名>によって識別される照合順を CS とする。列参

照の宣言型は,文字列でなければならない。CS が宣言型照合順であること,及び照合順起源が明

示  (explicit)  であることを除いて,GC の宣言型は,その列参照の宣言型とする。

b)  そうでなければ,GC の宣言型は,その列参照の宣言型とする。

4) <GROUP

BY 句>を単純に含む<問合せ指定>を QS とし,QS に単純に含まれる<選択リスト>,<FROM

>,あるならば,<WHERE 句>,<GROUP BY 句>,及びあるならば,<HAVING 句>を,それぞれ,

SLFCWCGBC 及び HC とする。

5)  QS に直に含まれる,陽に指定されるか又は暗に想定される<集合限定子>を,QSSQ とする。

6) <GROUP

BY 句>に直に含まれる<集合限定子>があるならば,それを GBSQ とする。そうでなけれ

ば,

ALL を GBSQ とする。

7)  “7.12  <問合せ指定>”の構文規則中の構文変換を用いて,全ての<アスタリスク>及び<被アスタリ

スク付け識別子鎖

>を置き換えることによって SL から得られるものを SL1 とする。

8) <GROUP

BY 句>が,<ROLLUP リスト>,<CUBE リスト>,<GROUPING SETS 指定>又は<グループ

化列参照リスト

>を含まず,かつ,<グループ化列参照>及び<空グループ化集合>の両方を含まない

ならば,

<GROUP BY 句>は,基本的  (primitive)  とする。


301

X 3005-2:2015 (ISO/IEC 9075-2:2011)

9) <GROUP

BY 句>が,<ROLLUP リスト>,<CUBE リスト>又は<GROUPING SETS 指定>を含まない

ならば,

<GROUP BY 句>は,単純  (simple)  とする。

10)  GBC が,基本的でない単純な<GROUP BY 句>ならば,GBC は,次のとおりに,基本的な<GROUP BY

>に変換される。

a)  GBC に含まれる<グループ化列参照>の個数を NSGB とする。

b)  場合:

i)

NSGB が 0 ならば,GBC は,次の GROUP BY 句で置き換えられる。

GROUP BY ()

ii)  そうでなければ,次による。

1)  GBC に含まれる<グループ化列参照>の列挙を,SGCR

1,...SGCRNSGB とする。

2)  GBC は,次の GROUP BY 句で置き換えられる。

GROUP BY SGCR

1

 , ...

SGCR

NSGB

注記 199  すなわち,基本的でない単純な<GROUP BY 句>は,正しい構文に対して必要に応じて,

全ての括弧及び余分な

<コンマ>を削除することによって,基本的な<GROUP BY 句>

に変換してもよい。グループ化列が全くない(例えば,GROUP BY (), ())ならば,

GROUP BY()

  の標準形式に変換される。

11)  GBC が,基本的な<GROUP BY 句>ならば,全ての<グループ化操作>を真数定数 0 に置き換えるこ

とによって,SL1 及び HC から得られるものを,それぞれ,SLNEW 及び HCNEW とする。QS は,

次の問合せ指定と等価とする。

SELECT QSSQ SLNEW FC

WC GBC HCNEW

12) <通常グループ化集合リスト>を OGSL とする。OGSL の連結  (concatenation)  が,次のとおり定義さ

れる。

a)  OGSL に単純に含まれる<グループ化列参照>の個数を NGCR とし,

<グループ化列参照>の列挙を,

左から右の順序で,GCRj,1 ≤ j ≤ NGCR とする。

b)  OGSL の連結は,次の<通常グループ化集合リスト>とする。

GCR

1

, ..., GCR

NGCR

注記 200  したがって,OGSL の連結は,全ての括弧を削除することによって形成してもよい。

例えば,“

(A, B), (C, D)”の連結は,“A, B, C, D”である。

13) <ROLLUP リスト>を RL とする。RL に含まれる 個の<通常グループ化集合>中の<通常グループ化

集合

>を OGSi とする。

a) 1 から までの範囲の各 に対して,次の<通常グループ化集合リスト>の連結を COGSi とする。

OGS

1

OGS

2

,..., OGS

i

b)  RL は,次の指定と等価とする。

GROUPING SETS (

COGS

n

 ),

COGS

n-1

 ),

COGS

n-2

 ),

...


302

X 3005-2:2015 (ISO/IEC 9075-2:2011)

COGS

1

 ),

( ) )

注記 201  変換の結果は,<ROLLUP リスト>の<通常グループ化集合リスト>の全ての初期部分リ

ストに対して,

<通常グループ化集合>を右から一つずつ削除し,それで得られる各<

通常グループ化集合リスト

>を連結することによって得られる<グループ化集合>を含

<GROUPING SETS 指定>で RL を置き換えたものである。<空グループ化集合>は,

最も短い初期部分リストとみなされる。例えば,“ROLLUP ( (A, B), (C, D) )”

は,“GROUPING SETS ( (A, B, C, D), (A, B), () )”と等価である。

14) <CUBE リスト>を CL とする。CL に含まれる 個の<通常グループ化集合>中の<通常グループ化集

>を OGSi とする。CL は,次のとおりに変換される。

a)  M = 2

n

 – 1 とする。

b) 1 から までの範囲の各 に対して,次による。

i)

個のビット(2 進数の桁)から成る値 の 2 進数を BSLi とする。

ii) 1 から までの範囲の各 に対して,左から右に数えて,BSLi 中の 番目のビットを Bi

,

とす

る。

iii) 1 から までの範囲の各 に対して,次の文字列を GSLCRi

,

とする。

場合:

1)  Bi

,

が 0 ならば,長さ 0 の文字列。

2)  Bi

,

が 1 で,かつ,全ての k < に対して Bi

,

が 0 ならば,OGSj

3)  そうでなければ,<コンマ>及びそれに続く OGSj

iv)  次の<通常グループ化集合リスト>の連結を GSLi とする。

GSLCR

i,1

 GSLCR

i,2

 ... GSLCR

i,n

c)

CL は,次の指定と等価とする。

GROUPING SETS ( ( GSL

M

 ), ( GSL

M-1

 ), ..., ( GSL

1

 ), ( ) )

注記 202  変換の結果は,<通常グループ化集合>を含まない空の部分集合として<空グループ化

集合

>を含めて,<CUBE リスト>の<通常グループ化集合リスト>中の<通常グループ化

集合

>の集合の可能な全ての部分集合に対する<グループ化集合>を含む<GROUPING

SETS 指定>で CL を置き換えたものである。

例えば,CUBE (A, B, C)

  は,次の指定と等価である。

GROUPING SETS ( /* BSL

i

 */

(A,  B,  C),  /*  111  */

(A,  B    ),  /*  110  */

(A,      C),  /*  101  */

(A        ),  /*  100  */

(     B,  C),  /*  011  */

(     B   ),  /*  010  */

(        C),  /*  001  */

(         )

)

別の例として,CUBE ((A, B), (C, D))

  は,次の指定と等価である。


303

X 3005-2:2015 (ISO/IEC 9075-2:2011)

GROUPING SETS ( /* BSL

i

 */

(A, B, C, D), /* 11 */

(A,  B       ),  /*  10  */

(       C,  D),  /*  01  */

(            )

)

15) <GROUPING SETS 指定>を GSSA とする。GSSA が,別の<GROUPING SETS 指定> GSSB を単純に

含むならば,GSSA は,次のとおりに変換される。

a)  GSSA に単純に含まれる<グループ化集合>の個数を NA とし,GSSB に単純に含まれる<グループ

化集合

>の個数を NB とする。

b) 1

≤ i ≤ NA に対して,GSSA に単純に含まれる<グループ化集合>の列挙を GSAi とする。

c) 1

≤ i ≤ NB に対して,GSSB に単純に含まれる<グループ化集合>の列挙を GSBi とする。

d)  GSSB = GSAk となる値を とする。

e)

GSSA は,次の指定と等価とする。

GROUPING SETS (

    GSA

1

GSA

2

, ... GSA

k-1

,

    GSB

1

, ... , GSB

NB

,

    GSA

k+1

, ..., GSA

NA

 )

注記 203  したがって,入れ子にされた<GROUPING SETS 指定>は,それの各<グループ化集合>

を,それを包含する

<GROUPING SETS 指定>の<グループ化集合>にするために単純に

“昇格させること

 (promoting)”によって取り除かれる。

16)  単純でない<GROUP BY 句>を CGB とする。CGB は,次のとおりに変換される。

a) <ROLLUP リスト>及び<CUBE リスト>と同様に,別の<GROUPING SETS 指定>中で入れ子にされ

<GROUPING SETS 指定>を取り除くために,先行する構文規則を繰り返し適用する。

注記 204  結果として,CGB は,単一の<GROUPING SETS 指定>,又は二つ以上の<グループ化

集合

>のリストのいずれかになり,その<グループ化集合>のそれぞれは,<通常グルー

プ化集合

>,<空グループ化集合>,又は<通常グループ化集合>及び<空グループ化集合

>だけを含む<GROUPING SETS 指定>である。<ROLLUP リスト>,<CUBE リスト>,

又は入れ子になった

<GROUPING SETS 指定>は,残らない。

b) <通常グループ化集合>又は<空グループ化集合>であるどの<グループ化要素>  GS も,次の

<GROUPING SETS 指定>に置き換える。

GROUPING SETS ( GS )

注記 205  結果として,CGB は,一つ以上の<GROUPING SETS 指定>のリストになる。

c)

CGB が二つ以上の<GROUPING SETS 指定>を含むならば,CGB 中の最初の二つの<GROUPING

SETS 指定>を GSSX 及び GSSY とする。CGB は,“GSSX <コンマ> GSSY”を次のとおりに置き換

えることによって変換される。

i)

GSSX 中の<グループ化集合>の個数を NX とし,GSSY 中の<グループ化集合>の個数を NY とす

る。

ii)  GSSX に含まれる<グループ化集合>を GSXi,1 ≤ i ≤ NX とし,GSSY に含まれる<グループ化集

>を GSYi,1 ≤ i ≤ NY とする。


304

X 3005-2:2015 (ISO/IEC 9075-2:2011)

iii)  GSXi 中の<グループ化列参照>の個数を MX(i)  とし,GSYi 中の<グループ化列参照>の個数を

MY(i)  とする。

注記 206  GSXi が<空グループ化集合>ならば,MX(i)は,0 である。GSYi についても同様であ

る。

iv)  GSXi に含まれる<グループ化列参照>を GCRXi

,

j,1 ≤ j ≤ MX(i)  とし,GSYi に含まれる<グルー

プ化列参照

>を,GCRYi

,

j,1 ≤ j ≤ MY(i)  とする。

注記 207  GSXi が<空グループ化集合>ならば,GCRXi,は,存在しない。GSYi についても同

様である。

v) 1 から NX までの範囲の各 a,及び 1 から NY までの範囲の各 に対して,次の指定,すなわち,

1 から MX(a)  までの範囲の全ての に対する GCRAa

,

j,及びそれに続く,1 から MY(b)  までの

範囲の全ての に対する GCRYb

,

から成る<通常グループ化集合>を GSTa

,

とする。

GCRX

a,1

, ..., GCRX

a,MX(a)

GCRY

b,1

 , ..., GCRY

b,MY(b)

 )

vi)  CGB は,

GSSX <コンマ> GSSY”を次の指定に置き換えることによって変換される。

GROUPING SETS (

  GST

1,1

, ..., GST

1,NY

,

  GST

2,1

, ..., GST

2,NY

,

  ...

  GST

NX,1

 , ..., GST

NX,NY

)

注記 208  したがって,GSSA 中の各<通常グループ化集合>は,GSSB 中の各<通常グループ化

集合

>  と“連結される (concatenated)”。例えば,

GROUP BY GROUPING SETS ((A, B), (C)),

           GROUPING  SETS  ((X,  Y),  ())

は,次の指定に変換される。

GROUP BY GROUPING SETS ((A, B, X, Y), (A, B),

           (C,  X,  Y),  (C))

d)  単一の<GROUPING SETS 指定>で CGB が構成されるまで,この構文規則の先行する部分規則を

繰り返し適用する。

17) <グループ化要素リスト>が,<通常グループ化集合>又は<空グループ化集合>だけを含む単一の

<GROUPING SETS 指定> GSS から成るならば,次による。

a)  GSS に含まれる<グループ化集合>の個数を とする。

b)  GSS に含まれる<グループ化集合>を GSi,1 ≤ i ≤ とする。

c)

GSS に含まれる,異なる<列参照>の個数を とする。

d)  左から右への出現順に従ってリスト中で順序付けられるこれらの<列参照>の順序付けられたリ

ストを PC とする。

e)

PC 中の 番目の<列参照>を PCk,1 ≤ k ≤ とする

f)

PCk によって識別される列の宣言型を DTPCk とする。

g)  SL1 に単純に含まれる<導出列>の個数を NDC とする。

h)  SL1 に単純に含まれる<導出列>の列挙を,左から右の順序で,DCq,1 ≤ q ≤ NDC とする。

i)

DCq,1 ≤ q ≤ NDC の列名を DCNq とする。


305

X 3005-2:2015 (ISO/IEC 9075-2:2011)

j)

DCq に単純に含まれる<値式>を VEq,1 ≤ q ≤ NDC とする。

k)  全てが互いに異なる処理系依存の列名を XNk,1 ≤ k ≤ pYN,1 ≤ k ≤ p,及び ZNq,1 ≤ q ≤ NDC

とする。

l)

次の

<選択リスト>を SL2 とする。

PC

1

 AS XN

1

, GROUPING (PC

1

) AS YN

1

,

...,

PC

p

 AS XN

p

, GROUPING (PC

p

) AS YN

p

,

VE

1

 AS ZN

1

, ..., VE

NDC

 AS ZN

NDC

m)  各 GSi に対して,次による。

i)

GSi が<空グループ化集合>ならば,0 を n(i)  とする。GSi が<グループ化列参照>ならば,1 を

n(i)  とする。そうでなければ,<グループ化列参照リスト>に含まれる<グループ化列参照>の個

数を n(i)  とする。

ii)  GSi に含まれる<グループ化列参照>を GCRi

,

j,1 ≤ j ≤ n(i)  とする。

iii)  場合:

1)  GSi が<通常グループ化集合>ならば,次による。

A)  次のとおりに,SL2 を変換して SL3 を求め,HC を変換して HC3 を求める。

各 PCk に対して,PCk = GCRi,となる がないならば,SL2 及び HC 中の次の置換えを行

う。

I)

PCk を参照する<列参照>を含む SL2 及び HC 中の各<グループ化操作>を次の指定に置き
換える。ここで,IDT は,<グループ化操作>の宣言型である位取り 0 の処理系定義の真

数型とする。

CAST ( 1 AS IDT )

II)  PCk を参照する SL2 及び HC 中の各<列参照>を次の指定に置き換える。

CAST ( NULL AS DTPC

k

 )

B)  SL3 及び HC3 中に残る各<グループ化操作>を次の指定に置き換えることによって,SL3 

変換して SLNEW を求め,HC3 を変換して HCNEW を求める。ここで,IDT は,<グルー

プ化操作

>の宣言型である位取り 0 の処理系定義の真数型とする。

CAST ( 0 AS IDT )

注記 209  したがって,<グループ化操作>によって参照されるグループ化列が GCRi,中に

あるならば,

<グループ化操作>の値は,0 になり,そうでなければ,1 になる。

C)  次の指定を GSSQLi とする。

SELECT QSSQ SLNEW

FC

WC

GROUP BY GCR

i,1

, ..., GCR

i,n(i)

HCNEW

2)  GSi が<空グループ化集合>ならば,次による。

A)  次のとおりに,SL2 を変換して SLNEW を求め,HC を変換して HCNEW を求める。

各 k,1 ≤ k ≤ に対して,次による。

I)

PCk を参照する<列参照>を含む SL2 及び HC 中の各<グループ化操作>を次の指定に置き


306

X 3005-2:2015 (ISO/IEC 9075-2:2011)

換える。ここで,IDT は,<グループ化操作>の宣言型である位取り 0 の処理系定義の真

数型とする。

CAST ( 1 AS IDT )

II)  PCk を参照する SL2 及び HC 中の各<列参照>を次の指定に置き換える。

CAST ( NULL AS DTPC

k

 )

B)  次の指定を GSSQLi とする。

SELECT QSSQ SLNEW

FC

WC

GROUP BY ()

HCNEW

n)  次の指定を GU とする。

GSSQL

1

  UNION  GBSQ

GSSQL

2

  UNION  GBSQ

...

  UNION  GBSQ

GSSQL

m

o)  QS は,次の指定と等価とする。

SELECT QSSQ ZN

1

 AS DC

1

, ..., ZN

NDC

 AS DC

NDC

FROM ( GU )

アクセス規則

なし。 

一般規則

注記 210  この細分箇条の構文規則で規定している構文変換の結果として,基本的な<GROUP BY 句>

の考慮だけが残る。

1) <WHERE 句>が指定されないならば,先行する<FROM 句>の結果を とする。そうでなければ,先

行する

<WHERE 句>の結果を とする。

2)  場合:

a)  グループ化列がないならば,<GROUP BY 句>の結果は,唯一のグループとしての から成るグル

ープ表とする。

b)  そうでなければ,<GROUP BY 句>の結果は,各グループの各グループ化列に対して,そのグルー

プ化列のどの二つの値も異ならないような最小の個数のグループへの,の行の集合の分割とす

る。グループ化列の宣言型が利用者定義型で,かつ,の二つの行に対するその列の比較の結果

不定  (Unknown)  になるならば,<GROUP BY 句>の結果中のグループへのこれらの行の割当て

は,処理系依存とする。

3) <探索条件>又は<値式>がグループに適用されるとき,グループ化列に関数従属である列への参照

CR は,次のとおりに理解される。

場合:


307

X 3005-2:2015 (ISO/IEC 9075-2:2011)

a)  CR がグループ不変列参照ならば,それは,そのグループ中の行のその列の共通の値への参照とす

る。列の最特定型が文字列,時刻帯付き日時又は利用者定義型ならば,その値は,グループの各

行中の列の値と異ならない処理系依存の値とする。

b)  そうでなければ,CR は,グループ内変動列参照として,グループ化列によって決定される与えら

れたグループの各行中の列の値への参照とし,

<集合関数指定>の引数の入力を構成するために用

いる。

適合性規則

1)  機能 T431“拡張グループ化能力”なしでは,適合する SQL 言語は,<ROLLUP リスト>を含んでは

ならない。

2)  機能 T431“拡張グループ化能力”なしでは,適合する SQL 言語は,<CUBE リスト>を含んではな

らない。

3)  機能 T431“拡張グループ化能力”なしでは,適合する SQL 言語は,<GROUPING SETS 指定>を含

んではならない。

4)  機能 T431“拡張グループ化能力”なしでは,適合する SQL 言語は,<空グループ化集合>を含んで

はならない。

5)  機能 T431“拡張グループ化能力”なしでは,適合する SQL 言語は,<グループ化列参照リスト>を

含む

<通常グループ化集合>を含んではならない。

6)  機能 T432“入れ子及び連結 GROUPING SETS”なしでは,適合する SQL 言語は,<GROUPING SETS

指定

>を含む<グループ化集合リスト>を含んではならない。

7)  機能 T432“入れ子及び連結 GROUPING SETS”なしでは,適合する SQL 言語は,<GROUP BY 句>

に単純に含まれる唯一の

<グループ化要素>ではない<GROUPING SETS 指定>  GSS を単純に含む

<GROUP BY 句>を含んではならない。

注記 211  “9.12  グループ化操作”の適合性規則も適用する。

8)  機能 T434“GROUP BY DISTINCT”なしでは,適合する SQL 言語は,<集合限定子>を単純に含む

<GROUP BY 句>を含んではならない。

7.10  <HAVING 句>

機能

<HAVING 句> (<having clause>)  は,<探索条件>を満たさないグループを取り除くことによって導出され

るグループ表を指定する。

形式

<HAVING 句> ::=

  HAVING  <探索条件>

構文規則

1) <HAVING 句>を HC とする。HC を直に含む<表式>を TE とする。TE が<GROUP BY 句>を直に含

まないならば,“

GROUP BY ( )”が暗に想定される。TE に直に含まれる<GROUP BY 句> GBC によ

って定義される表の記述子を とし,GBC の結果を とする。

2)  GBC に含まれる<列参照>によって参照される全ての列から成る集合を とする。

3) <探索条件>に直接含まれる各列参照は,次のうちのいずれか一つでなければならない。

a)  に関数従属である列への曖昧さのない参照。

b)  外への参照。


308

X 3005-2:2015 (ISO/IEC 9075-2:2011)

注記 212  先行する構文規則は,“6.7 <列参照>”中のより包括的なものから得られる。

3) <探索条件>中の<問合せ式>に含まれ,の列を参照する各列参照は,次のうちのいずれか一つでな

ければならない。

a)  に関数従属である列への曖昧さのない参照。

b) <集合関数指定>の集約化引数に含まれる。

注記 213  先行する構文規則は,“6.7 <列参照>”中のより包括的なものから得られる。

5) <探索条件>は,<問合せ式>を介在しないで,<ウィンドウ関数>を含んではならない。

6) <HAVING 句>の結果の行型は,の行型 RT とする。

アクセス規則

なし。 

一般規則

1)  の各グループに対して<探索条件>が評価される。<HAVING 句>の結果は,<探索条件>の結果が真

(True)  となる のグループから成るグループ表とする。

適合性規則

1)  機能 T301

“関数従属性”なしでは,適合する

SQL 言語中で, <探索条件>に直接含まれる各列参照は,

次のうちのいずれか一つでなければならない。

a)  のグループ化列への曖昧さのない参照。

b)  外への参照。

2)  機能 T301“関数従属性”なしでは,適合する SQL 言語中で, <探索条件>中の<問合せ式>に含まれ,

の列を参照する各列参照は,次のうちのいずれか一つでなければならない。

a)  のグループ化列への曖昧さのない参照。

b) <集合関数指定>の集約化引数中に含まれる。

7.11  <WINDOW 句>

機能

<WINDOW 句> (<window clause>)  は,一つ以上のウィンドウ定義を指定する。

形式

<WINDOW 句> ::=

  WINDOW  <ウィンドウ定義リスト>

<ウィンドウ定義リスト> ::=

  <ウィンドウ定義> [ { <コンマ> <ウィンドウ定義> }... ]

<ウィンドウ定義> ::=

  <新ウィンドウ名> AS <ウィンドウ指定>

<新ウィンドウ名> ::=

  <ウィンドウ名>

<ウィンドウ指定> ::=

  <左括弧> <ウィンドウ指定詳細> <右括弧>

<ウィンドウ指定詳細> ::=

  [  <既存ウィンドウ名> ]

      [ <ウィンドウ区画句> ]

      [ <ウィンドウ順序句> ]


309

X 3005-2:2015 (ISO/IEC 9075-2:2011)

      [ <ウィンドウ枠句> ]

<既存ウィンドウ名> ::=

  <ウィンドウ名>

<ウィンドウ区画句> ::=

  PARTITION  BY  <ウィンドウ区画列参照リスト>

<ウィンドウ区画列参照リスト> ::=

  <ウィンドウ区画列参照>

      [ { <コンマ> <ウィンドウ区画列参照> }... ]

<ウィンドウ区画列参照> ::=

  <列参照> [ <COLLATE 句> ]

<ウィンドウ順序句> ::=

  ORDER  BY  <ソート指定リスト>

<ウィンドウ枠句> ::=

  <ウィンドウ枠単位> <ウィンドウ枠範囲>

      [ <ウィンドウ枠除外> ]

<ウィンドウ枠単位> ::=

  ROWS

 |

RANGE

 |

GROUPS

<ウィンドウ枠範囲> ::=

  <ウィンドウ枠開始>

 |

<ウィンドウ枠 BETWEEN>

<ウィンドウ枠開始> ::=

  UNBOUNDED  PRECEDING

 |

<ウィンドウ枠 PRECEDING>

| CURRENT ROW

<ウィンドウ枠 PRECEDING> ::=

  <符号なし値指定> PRECEDING

<ウィンドウ枠 BETWEEN> ::=

  BETWEEN  <ウィンドウ枠境界 1> AND <ウィンドウ枠境界 2>

<ウィンドウ枠境界 1> ::=

  <ウィンドウ枠境界>

<ウィンドウ枠境界 2> ::=

  <ウィンドウ枠境界>

<ウィンドウ枠境界> ::=

  <ウィンドウ枠開始>

| UNBOUNDED FOLLOWING

 |

<ウィンドウ枠 FOLLOWING>

<ウィンドウ枠 FOLLOWING> ::=

  <符号なし値指定> FOLLOWING


310

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<ウィンドウ枠除外> ::=

  EXCLUDE  CURRENT  ROW

| EXCLUDE GROUP

| EXCLUDE TIES

| EXCLUDE NO OTHERS

構文規則

1) <WINDOW 句>を直に含む<表式>を TE とする。

2) <新ウィンドウ名> NWN1 は,NWN1 と等価な別の<新ウィンドウ名> NWN2 の有効範囲中に含まれ

てはならない。

3) <ウィンドウ定義>を WDEF とする。

4)  WDEF の<ウィンドウ区画句>又は<ウィンドウ順序句>に含まれる各<列参照>は,TE の結果である

導出表 の列を曖昧さなく参照しなければならない。<ウィンドウ区画句>中で参照される列は,分

割列  (partitioning column)  とする。各分割列は,グループ化操作のオペランドとし,“9.12  グループ

化操作”の構文規則及び適合性規則を適用する。

注記 214  がグループ表ならば,<ウィンドウ区画句>又は<ウィンドウ順序句>に含まれる<列参

>は,“7.12 <問合せ指定>”中の構文変換を実行することによって得られるグループ表

の列を参照しなければならない。

5)  どの<ウィンドウ区画列参照> PC に対しても,次とする。

場合:

a) <COLLATE 句>が指定されるならば,<照合順名>によって識別される照合順を CS とする。列参

照の宣言型は,文字列でなければならない。CS が宣言型照合順であること,及び照合順起源が明

示  (explicit)  であることを除いて,PC の宣言型は,その列参照の宣言型とする。

b)  そうでなければ,PC の宣言型は,その列参照の宣言型とする。

6)  がグループ表ならば,のグループ化列の集合を とする。の列を参照する<WINDOW 句>に含

まれる各列参照は,に関数従属である列を参照するか,又は<集合関数指定>の集約化引数に含ま

れなければならない。

注記 215  先行する構文規則は,“6.7 <列参照>”中のより包括的なものから得られる。

7) <WINDOW 句>は,<問合せ式>を介在しないで,<ウィンドウ関数>を含んではならない。

8)  WDEF が<ウィンドウ枠 BETWEEN>を指定するならば,次による。

a) <ウィンドウ枠境界 1>は,UNBOUNDED FOLLOWING を指定してはならない。

b) <ウィンドウ枠境界 2>は,UNBOUNDED PRECEDING を指定してはならない。

c) <ウィンドウ枠境界 1>が CURRENT ROW を指定するならば,<ウィンドウ枠境界 2>は,<ウィン

ドウ枠

PRECEDING>を指定してはならない。

d) <ウィンドウ枠境界 1>が<ウィンドウ枠 FOLLOWING>を指定するならば,<ウィンドウ枠境界 2>

は,

<ウィンドウ枠 PRECEDING>又は CURRENT ROW を指定してはならない。

9)  WDEF が<ウィンドウ枠範囲>を指定し,かつ,<ウィンドウ枠 BETWEEN>を指定しないならば,<

ウィンドウ枠開始

>を WAGS とする。<ウィンドウ枠範囲>は,次の<ウィンドウ枠 BETWEEN>と等

価とする。

BETWEEN WAGS AND CURRENT ROW

10)  WDEF が<既存ウィンドウ名> EWN を指定するならば,次による。


311

X 3005-2:2015 (ISO/IEC 9075-2:2011)

a)  WDEF は,<既存ウィンドウ名>と等価な<ウィンドウ名>の有効範囲内になければならない。

b)  EWN によって識別されるウィンドウ構造記述子を WDX とする。

c)

WDEF は,<ウィンドウ区画句>を指定してはならない。

d)  WDX がウィンドウ順序付け句をもつならば,WDEF は,<ウィンドウ順序句>を指定してはなら

ない。

e)

WDX は,ウィンドウ枠付け句をもってはならない。

11)  WDEF の<ウィンドウ枠句>が<ウィンドウ枠 PRECEDING>又は<ウィンドウ枠 FOLLOWING>を指

定するならば,

<ウィンドウ枠 PRECEDING>又は<ウィンドウ枠 FOLLOWING>に単純に含まれる<

符号なし値指定

>を UVS とする。

場合:

a) RANGE が指定されるならば,次による。

i)

場合:

1)  WDEF が<ウィンドウ順序句> WOC を含むならば,WOC を WDEFOC とする。

2)  そうでなければ,WDEF は,ウィンドウ順序付け句 WOGC を含むウィンドウ構造記述子を

識別する

<既存ウィンドウ名>を指定しなければならない。WOGC を WDEFOC とする。

ii)  WDEFOC は,単一の<ソートキー> SK を含まなければならない。

iii)  SK の宣言型は,数,日時又は時間隔でなければならない。SK の宣言型が数ならば,UVS の宣

言型は,数でなければならない。そうでなければ,この規格の“6.31 <日時値式>”及び“6.33

<時間隔値式>”の構文規則に従って,SK の宣言型に加算又は減算を行ってもよい時間隔型でな

ければならない。

b) ROWS が指定されるならば,UVS の宣言型は,位取り 0 の真数でなければならない。

c) GROUPS が指定されるならば,次による。

i)

WDEF は,<ウィンドウ順序句>を含むか,又はウィンドウ順序付け句を含むウィンドウ構造記

述子を識別する

<既存ウィンドウ名>を指定するかのいずれかでなければならない。

ii)  UVS の宣言型は,位取り 0 の真数でなければならない。

12)  WDEF に単純に含まれる<新ウィンドウ名>の有効範囲は,<WINDOW 句>を単純に含む<問合せ指

>又は<SELECT 文:単一行>の<選択リスト>に加えて,<WINDOW 句>中の WDEF に続く任意の<

ウィンドウ定義

>から成る。単純表問合せである<問合せ式>の<問合せ式本体>である<問合せ指定>

<WINDOW 句>が単純に含まれるならば,<新ウィンドウ名>の有効範囲は,その<問合せ式>の

<ORDER BY 句>があるとき,その<ORDER BY 句>も含む。

13)  次の全ての条件を満たすならば,二つのウィンドウ構造記述子 WD1 及び WD2 は,順序等価

(order-equivalent)  とする。

a)  WD1 及び WD2 のウィンドウ分割句に含まれる<ウィンドウ区画列参照>の列挙を,左から右の順

序で,それぞれ,WPCR1i,1 ≤ i ≤ N1,及び WPCR2i,1 ≤ i ≤ N2 とする。N1 = N2 であり,かつ,
全ての に対して,WPCR1i と WPCR2i とが等価な列参照である。

b)  WD1 及び WD2 のウィンドウ順序付け句に含まれる<ソート指定>の列挙を,左から右の順序で,

それぞれ,SS1i,1 ≤ i ≤ M1,及び SS2i,1 ≤ i ≤ M2 とする。M1 = M2 で,かつ,全ての に対し
て,SS1i と SS2i とが,等価な列参照である<ソートキー>を含み,同じ<順序付け指定>を指定す
るか又は暗に想定し,あるならば,同じ

<COLLATE 句>を指定するか又は暗に想定し,同じ<ナル

順序付け

>を指定するか又は暗に想定する。


312

X 3005-2:2015 (ISO/IEC 9075-2:2011)

アクセス規則

なし。 

一般規則

1)  TE を直に含む<問合せ指定>又は<SELECT 文:単一行>の<選択リスト>を SL とする。

場合:

a)  SL が<ウィンドウ関数>を単純に含まないならば,<WINDOW 句>は,無視され,TE の結果は,

TE の最後の<FROM 句>,<WHERE 句>,<GROUP BY 句>又は<HAVING 句>の結果とする。

b)  そうでなければ,

TE に単純に含まれる最後の<FROM 句>又は<WHERE 句>の結果を RTE とする。

注記 216 <GROUP

BY 句>又は<HAVING 句>を<WINDOW 句>とともにもつことは許されるが,

<ウィンドウ関数>があるならば,<GROUP BY 句>及び<HAVING 句>は,“7.12  <問合

せ指定

>”中の構文変換によって取り除かれるので,ここでは考慮しない。

i)

ウィンドウ構造記述子 WDESC は,各<ウィンドウ定義> WDEF に対して,次のとおりに作成さ

れる。

1)  WDESC のウィンドウ名は,WDEF に単純に含まれる<新ウィンドウ名>とする。

2) <既存ウィンドウ名>が指定されるならば,WDEF に単純に含まれる<既存ウィンドウ名>を

EWN とし,EWN によって識別されるウィンドウ構造記述子を WDX とする。

3) <既存ウィンドウ名>が指定され,かつ,WDX のウィンドウ順序付け句が存在するならば,

WDESC の順序付けウィンドウ名は,EWN とする。そうでなければ,順序付けウィンドウ名

は,存在しない。

4)  場合:

A)  WDEF が<ウィンドウ区画句>  WDEFWPC を単純に含むならば,WDESC のウィンドウ分

割句は,WDEFWPC とする。

B) <既存ウィンドウ名>が指定されるならば,WDESC のウィンドウ分割句は,WDX のウィン

ドウ分割句とする。

C)  そうでなければ,WDESC は,ウィンドウ分割句をもたない。

5)  場合:

A)  WDEF が<ウィンドウ順序句>  WDEFWOC を単純に含むならば,WDESC のウィンドウ順

序付け句は,WDEFWOC とする。

B) <既存ウィンドウ名>が指定されるならば,WDESC のウィンドウ順序付け句は,WDX のウ

ィンドウ順序付け句とする。

C)  そうでなければ,WDESC は,ウィンドウ順序付け句をもたない。

6)  WDEF が<ウィンドウ枠句>  WDEFWFC を単純に含むならば,WDESC のウィンドウ枠付け

句は,WDEFWFC とする。そうでなければ,WDESC は,ウィンドウ枠付け句をもたない。

ii) <WINDOW 句>の結果は,RTE,及び<WINDOW 句>によって定義されるウィンドウ構造記述子

とする。

2)  ウィンドウ構造記述子を WD とする。

3)  WD は,RTE の各行 に対して,WD のウィンドウ分割列において と異ならない RTE の行の集

まりから成る,WD の下での のウィンドウ区画  (window partition)  を定義する。WD がウィンドウ

分割句をもたないならば,のウィンドウ区画は,結果の RTE 全体とする。

4)  WD は,WD のウィンドウ順序付け句に単純に含まれる<ソート指定リスト>を用いて,

10.10 <ソー


313

X 3005-2:2015 (ISO/IEC 9075-2:2011)

ト指定リスト

>”の一般規則に従って,WD によって定義される各ウィンドウ区画の行のウィンドウ

順序付けも定義する。WD がウィンドウ順序付け句をもたないならば,ウィンドウ順序付けは,処

理系依存とし,全ての行は,同位とする。ウィンドウ区画内の同位行のウィンドウ順序付けは,処

理系依存とするが,そのウィンドウ順序付けは,順序等価である全てのウィンドウ構造記述子に対

して同じでなければならない。それは,ウィンドウ W1 がウィンドウ W2 のための順序付けウィン

ドウであるような W1 と W2 との任意の対に対しても同じでなければならない。

5)  WD は,RTE の各行 に対して,行の集まりから成る,のウィンドウ枠 WF も定義する。WF 

次のとおり定義される。

場合:

a)  WD がウィンドウ枠付け句をもたないならば,次による。

場合:

i)

WD のウィンドウ順序付け句が存在しないならば,WF は,のウィンドウ区画とする。

ii)  そうでなければ,WF は,ウィンドウ順序付け句によって定義されるウィンドウ区画のウィン

ドウ順序付けで に先行するか又は と同位である,のウィンドウ区画の全ての行から成る。

b)  そうでなければ,WD によって定義される のウィンドウ区画を最初は WF とする。WD のウィ

ンドウ枠付け句を WFC とする。WFC に含まれる<ウィンドウ枠境界 1>を WFB1 とし,<ウィン

ドウ枠境界

2>を WFB2 とする。

i) RANGE が指定されるならば,次による。

1)  次の部分規則中で,日時と年月時間隔とを組み合わせて加算又は減算を行うとき,<基本日時

フィールド

> DAY が<基本日時フィールド> YEAR 及び MONTH の計算値に対して正しくな

いという理由で,その結果が例外条件:

データ例外  (data exception)  -  日時フィールドあふ

れ  (datetime field overflow)  を引き起こすことになるならば,<基本日時フィールド> DAY には,

<基本日時フィールド> YEAR 及び MONTH に対して正しい最終日が設定され,どんな例外条

件も引き起こさない。

2)  場合:

注記 217  次の部分規則中で,WFB1 が UNBOUNDED PRECEDING を指定するならば,こ

の 段 階 で は , WF か らど の行も取り 除かれない 。 WFB1 は , UNBOUNDED

FOLLOWING ではあり得ない。

A)  WFB1 が<ウィンドウ枠 PRECEDING>を指定するならば,<符号なし値指定>の値を V1P 

する。

場合:

I)

V1P が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行又

は後続行数・グループ数が正しくない  (invalid preceding or following size in window 

function)  が引き起こされる。

II)  そうでなければ,WD のウィンドウ順序付け句に含まれる唯一の<ソートキー>を SK 

する。現在行に対する SK の値を VSK とする。

場合:

1)  VSK がナル値で,かつ,NULLS LAST が指定されるか又は暗に想定されるならば,SK

値がナル値ではない全ての行 R2 を WF から取り除く。

2)  VSK がナル値でないならば,次による。


314

X 3005-2:2015 (ISO/IEC 9075-2:2011)

a) NULLS

FIRST が指定されるか又は暗に想定されるならば,SK の値がナル値である

全ての行 R2 を WF から取り除く。

b)  場合:

i)

ウィンドウ順序付け句に含まれる

<順序付け指定>が DESC を指定するならば,

VSK + V1P の値を BOUND とする。SK の値が BOUND を超える全ての行 R2 

WF から取り除く。

ii)  そうでなければ,VSK – V1P の値を BOUND とする。SK の値が BOUND 未満の全

ての行 R2 を WF から取り除く。

B)  WFB1 が CURRENT ROW を指定するならば,WD によって定義されるウィンドウ順序付け

で,現在行と同位ではなく,現在行に先行する全ての行を WF から取り除く。

C)  WFB1 が<ウィンドウ枠 FOLLOWING>を指定するならば,<符号なし値指定>の値を V1F

とする。

場合:

I)

V1F が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,WD のウィンドウ順序付け句に含まれる唯一の<ソートキー>を SK 

する。現在行に対する SK の値を VSK とする。

場合:

1)  VSK がナル値で,かつ,NULLS LAST が指定されるか又は暗に想定されるならば,SK

の値がナル値ではない全ての行 R2 を WF から取り除く。

2)  VSK がナル値でないならば,次による。

a) NULLS

FIRST が指定されるか又は暗に想定されるならば,SK の値がナル値である

全ての行 R2 を WF から取り除く。

b)  場合:

i)

ウィンドウ順序付け句に含まれる

<順序付け指定>が DESC を指定するならば,

VSK – V1F の値を BOUND とする。SK の値が BOUND を超える全ての行 R2 

WF から取り除く。

ii)  そうでなければ,VSK + V1F の値を BOUND とする。SK の値が BOUND 未満の全

ての行 R2 を WF から取り除く。

3)  場合:

注記 218  次の部分規則中で,WFB2 が UNBOUNDED FOLLOWING を指定するならば,こ

の 段 階 で は , WF か らど の行も取り 除かれない 。 WFB2 は , UNBOUNDED

PRECEDING ではあり得ない。

A)  WFB2 が<ウィンドウ枠 PRECEDING>を指定するならば,<符号なし値指定>の値を V2P 

する。

場合:

I)

V2P が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,WD のウィンドウ順序付け句に含まれる唯一の<ソートキー>を SK 

する。現在行に対する SK の値を VSK とする。


315

X 3005-2:2015 (ISO/IEC 9075-2:2011)

場合:

1)  VSK がナル値で,かつ,NULLS FIRST が指定されるか又は暗に想定されるならば,

SK の値がナル値ではない全ての行 R2 を WF から取り除く。

2)  VSK がナル値でないならば,次による。

a) NULLS

LAST が指定されるか又は暗に想定されるならば,SK の値がナル値である

全ての行 R2 を WF から取り除く。

b)  場合:

i)

ウィンドウ順序付け句に含まれる

<順序付け指定>が DESC を指定するならば,

VSK + V2P の値を BOUND とする。SK の値が BOUND 未満の全ての行 R2 を WF

から取り除く。

ii)  そうでなければ,VSK – V2P の値を BOUND とする。SK の値が BOUND を超える

全ての行 R2 を WF から取り除く。

B)  WFB2 が CURRENT ROW を指定するならば,WD によって定義される順序付けで,現在行

と同位ではなく,現在行に後続する全ての行を WF から取り除く。

C)  WFB2 が<ウィンドウ枠 FOLLOWING>を指定するならば,<符号なし値指定>の値を V2F

とする。

場合:

I)

V2F が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,WD のウィンドウ順序付け句に含まれる唯一の<ソートキー>を SK 

する。現在行に対する SK の値を VSK とする。

場合:

1)  VSK がナル値で,かつ,NULLS FIRST が指定されるか又は暗に想定されるならば,

SK の値がナル値ではない全ての行 R2 を WF から取り除く。

2)  VSK がナル値でないならば,次による。

a) NULLS

LAST が指定されるか又は暗に想定されるならば,SK の値がナル値である

全ての行 R2 を WF から取り除く。

b)  場合:

i) <ウィンドウ順序句>に含まれる<順序付け指定>が DESC を指定するならば,VSK

– V2F の値を BOUND とする。SK の値が BOUND 未満の全ての行 R2 を WF から

取り除く。

ii)  そうでなければ,VSK + V2F の値を BOUND とする。SK の値が BOUND を超える

全ての行 R2 を WF から取り除く。

ii) ROWS が指定されるならば,次による。

1)  場合:

注記 219  次の部分規則中で,WFB1 が UNBOUNDED PRECEDING を指定するならば,こ

の 段 階 で は , WF か らど の行も取り 除かれない 。 WFB1 は , UNBOUNDED

FOLLOWING ではあり得ない。

A)  WFB1 が<ウィンドウ枠 PRECEDING>を指定するならば,<符号なし値指定>の値を V1P 

する。


316

X 3005-2:2015 (ISO/IEC 9075-2:2011)

場合:

I)

V1P が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,WD によって定義されるウィンドウ順序付けで,V1P 個の行を超えて

現在行に先行する全ての行を WF から取り除く。

B)  WFB1 が CURRENT ROW を指定するならば,WD によって定義されるウィンドウ順序付け

で,現在行に先行する全ての行を WF から取り除く。

注記 220  この段階は,処理系依存のウィンドウ順序付けで現在行に先行する現在行の同

位行も取り除く。

C)  WFB1 が<ウィンドウ枠 FOLLOWING>を指定するならば,<符号なし値指定>の値を V1F

とする。

場合:

I)

V1F が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,WD によって定義されるウィンドウ順序付けで,現在行に先行する全

ての行,及び V1F 個の行未満の現在行に後続する全ての行を WF から取り除く。

注記 221  V1F が 0 ならば,現在行は,この段階では,WF から取り除かれない。そう

でなければ,現在行は,WF から取り除かれる。

2)  場合:

注記 222  次の部分規則中で,WFB2 が UNBOUNDED FOLLOWING を指定するならば,こ

の 段 階 で は , WF か らど の行も取り 除かれない 。 WFB2 は , UNBOUNDED

PRECEDING ではあり得ない。

A)  WFB2 が<ウィンドウ枠 PRECEDING>を指定するならば,<符号なし値指定>の値を V2P 

する。

場合:

I)

V1F が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,WD によって定義されるウィンドウ順序付けで,現在行に後続する全

ての行,及び V2P 個の行未満で現在行に先行する全ての行を WF から取り除く。

注記 223  V2P が 0 ならば,現在行は,この段階では,WF から取り除かれない。そう

でなければ,現在行は,WF から取り除かれる。

B)  WFB2 が CURRENT ROW を指定するならば,WD によって定義されるウィンドウ順序付け

で,現在行に後続する全ての行を WF から取り除く。

注記 224  この段階では,処理系依存のウィンドウ順序付けで,現在行に後続する現在行

の同位行を取り除く。

C)  WFB2 が<ウィンドウ枠 FOLLOWING>を指定するならば,<符号なし値指定>の値を V2F

とする。

場合:

I)

V2F が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。


317

X 3005-2:2015 (ISO/IEC 9075-2:2011)

II)  そうでなければ,WD によって定義されるウィンドウ順序付けで,V2F 個の行を超えて

現在行に後続する全ての行を WF から取り除く。

iii) GROUPS が指定されるならば,次による。

1)  ウィンドウ区画の行は,次のとおりにウィンドウ順序付けグループ  (window ordering groups)

に置かれる。二つの行が同じウィンドウ順序付けグループにあるということは,

10.10 <ソー

ト指定リスト

>”の一般規則に従って,<ソート指定リスト>に関して同位であることと同値

とする。

2)  ウィンドウ区画内のウィンドウ順序付けグループは,

次のとおりに順序付けられる。“10.10 <

ソート指定リスト

>”の一般規則に従ったウィンドウ順序付けで,ウィンドウ順序付けグルー

プ WOG1 中のある行 R1 がウィンドウ順序付けグループ WOG2 中のある行 R2 に先行するな

らば,WOG1 は,WOG2 に先行する。

注記 225  ウィンドウ順序付けグループ中の全ての行が<ソート指定リスト>に関して同位で

あるので,WOG1 の一つの行が WOG2 の一つの行に先行するならば,WOG1 の全

ての行が WOG2 の全ての行に先行する。

3)  二つのウィンドウ順序付けグループ WOG1 及び WOG2 間の距離  (distance)  は,WOG1 及び

WOG2 を含めて,

それらの間のウィンドウ順序付けグループの個数から

1 を引いた数とする。

注記 226  したがって,ウィンドウ順序付けグループ WOG とそれ自体との間の距離は,1 – 1

= 0  である。

4)  現在ウィンドウ順序付けグループ  (current window ordering group)  は,現在行を含むウィンド

ウ順序付けグループとする。

5)  場合:

注記 227  次の部分規則中で,WFB1 が UNBOUNDED PRECEDING を指定するならば,こ

の 段 階 で は , WF か らど の行も取り 除かれない 。 WFB1 は , UNBOUNDED

FOLLOWING ではあり得ない。

A)  WFB1 が<ウィンドウ枠 PRECEDING>を指定するならば,<符号なし値指定>の値を V1P 

する。

場合:

I)

V1P が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,現在ウィンドウ順序付けグループに V1P を超える距離で先行するウィ

ンドウ順序付けグループの全ての行を WF から取り除く。

B)  WFB1 が CURRENT ROW を指定するならば,現在ウィンドウ順序付けグループに先行す

る全てのウィンドウ順序付けグループの全ての行を WF から取り除く。

注記 228  したがって,CURRENT ROW は,0 PRECEDING と等価である。

C)  WFB1 が<ウィンドウ枠 FOLLOWING>を指定するならば,<符号なし値指定>の値を V1F

とする。

場合:

I)

V1F が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,現在ウィンドウ順序付けグループに先行するウィンドウ順序付けグル


318

X 3005-2:2015 (ISO/IEC 9075-2:2011)

ープの全ての行,及び現在ウィンドウ順序付けグループに V1F 未満の距離で後続するウ

ィンドウ順序付けグループの全ての行を WF から取り除く。V1F が正の値ならば,現在

ウィンドウ順序付けグループの全ての行も WF から取り除く。

6)  場合:

注記 229  次の部分規則中で,WFB2 が UNBOUNDED FOLLOWING を指定するならば,こ

の 段 階 で は , WF か らど の行も取り 除かれない 。 WFB2 は , UNBOUNDED

PRECEDING ではあり得ない。

A)  WFB2 が<ウィンドウ枠 PRECEDING>を指定するならば,<符号なし値指定>の値を V2P 

する。

場合:

I)

V2P が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,現在ウィンドウ順序付けグループに V2P 未満の距離で先行するウィン

ドウ順序付けグループの全ての行,及び現在ウィンドウ順序付けグループに後続するウ

ィンドウ順序付けグループの全ての行を WF から取り除く。V2P が正の値ならば,現在

ウィンドウ順序付けグループの全ての行も WF から取り除く。

B)  WFB2 が CURRENT ROW を指定するならば,現在ウィンドウ順序付けグループに後続す

る全てのウィンドウ順序付けグループの全ての行を WF から取り除く。

注記 230  したがって,CURRENT ROW は,0 FOLLOWING と等価である。

C)  WFB2 が<ウィンドウ枠 FOLLOWING>を指定するならば,<符号なし値指定>の値を V2F

とする。

場合:

I)

V2F が負の値か又はナル値ならば,例外条件:データ例外  -  ウィンドウ関数中の先行

又は後続行数・グループ数が正しくない  が引き起こされる。

II)  そうでなければ,現在ウィンドウ順序付けグループに V2F を超える距離で後続するウィ

ンドウ順序付けグループの全ての行を WF から取り除く。

iv) <ウィンドウ枠除外> WFE が指定されるならば,次による。

場合:

1)  EXCLUDE CURRENT ROW が指定され,かつ,現在行が WF 中に残っているならば,現在行

を WF から取り除く。

2) EXCLUDE

GROUP が指定されるならば,現在行及び現在行のどの同位行も WF から取り除

く。

3) EXCLUDE

TIES が指定されるならば,現在行以外の現在行のどの同位行も WF から取り除く。

注記 231  現在行が WF から既に取り除かれているならば,それは,WF から取り除かれた

ままとする。

注記 232  EXCLUDE NO OTHERS が指定されるならば,この規則によって他のどの行も WF

から取り除かれることはない。

適合性規則

1)  機能 T611“基本 OLAP 演算”なしでは,適合する SQL 言語は,<ウィンドウ指定>を含んではなら

ない。


319

X 3005-2:2015 (ISO/IEC 9075-2:2011)

2)  機能 T612“高度 OLAP 演算”なしでは,適合する SQL 言語は,<WINDOW 句>を含んではならな

い。

3)  機能 T612“高度 OLAP 演算”なしでは,適合する SQL 言語は,<既存ウィンドウ名>を含んではな

らない。

4)  機能 T301“関数従属性”なしでは,適合する SQL 言語中で,がグループ表ならば,の列を参照

する

<WINDOW 句>に含まれる各列参照は,のグループ化列に対する参照であるか,又は<集合関

数指定

>の集約化引数に含まれなければならない。

5)  機能 T612“高度 OLAP 演算”なしでは,適合する SQL 言語は,<ウィンドウ枠除外>を含んではな

らない。

注記 233  “9.12  グループ化操作”の適合性規則も適用する。

6)  機能 T620“WINDOW 句:GROUPS 選択肢”なしでは,適合する SQL 言語は,GROUPS を指定す

<ウィンドウ枠単位>を含んではならない。

7.12  <問合せ指定>

この細分箇条は,ISO/IEC 9075-4 の“7.2 <問合せ指定>”によって修正される。 

細分箇条署名

“<問合せ指定>” [構文規則] (

パラメタ: “TBLEXP”,

) 戻り: “TBLEXP2”

機能

<問合せ指定> (<query specification>)  は,<表式>の結果から導出される表を指定する。

形式

<問合せ指定> ::=

  SELECT  [  <集合限定子> ] <選択リスト> <表式>

<選択リスト> ::=

  <アスタリスク>

 |

<選択副リスト> [ { <コンマ> <選択副リスト> }... ]

<選択副リスト> ::=

  <導出列>

 |

<修飾付きアスタリスク>

<修飾付きアスタリスク> ::=

  <被アスタリスク付け識別子鎖> <ピリオド> <アスタリスク>

 |

<全フィールド参照>

<被アスタリスク付け識別子鎖> ::=

  <被アスタリスク付け識別子> [ { <ピリオド> <被アスタリスク付け識別子> }... ]

<被アスタリスク付け識別子> ::=

  <識別子>

<導出列> ::=

  <値式> [ <AS 句> ]

<AS 句> ::=

  [ AS ] <列名>


320

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<全フィールド参照> ::=

  <値式一次子> <ピリオド> <アスタリスク>

      [ AS <左括弧> <全フィールド列名リスト> <右括弧> ]

<全フィールド列名リスト> ::=

  <列名リスト>

構文規則

1)  この細分箇条の構文規則の適用では,TBLEXP を QSPEC とする。この細分箇条の適用の結果は,

TBLEXP2 として戻される XFORM とする。

2)  QSPEC に単純に含まれる<表式>の結果を とする。

3)  QSPEC の結果を TQS とする。

4)  場合:

a) <EXISTS 述語>に直に含まれる<表副問合せ>に,<選択リスト>“*”が単純に含まれるならば,<

選択リスト

>は,任意の<定数>である<値式>と等価とする。

b)  そうでなければ,<選択リスト>“*”は,<値式>の並びと等価とし,その並び中の各<値式>は,T

の列を参照する列参照とし,の各列は,ただ 1 回参照される。列は,内のそれらの順序位置

の昇順に参照される。

5) <問合せ指定>によって指定される表の次数は,<選択リスト>の基数と等しい。

6) <集合限定子> DISTINCT が指定されるならば,の各列は,グループ化操作のオペランドとする。

9.12  グループ化操作”の構文規則及び適合性規則を適用する。

7) <値式一次子>が<被アスタリスク付け識別子鎖>の形式をとる<全フィールド参照>が曖昧な場合は,

曖昧さを解決するために,最初は

<被アスタリスク付け識別子鎖>として解析しなければならない。

8) <被アスタリスク付け識別子鎖>が指定されるならば,次による。

a) <被アスタリスク付け識別子鎖>を IC とする。

b)  IC に直に含まれる<被アスタリスク付け識別子>の個数を とする。

c)

IC に直に含まれる<被アスタリスク付け識別子>を,左から右の順序で,Ii,1 ≤ i ≤ とする。

d)  I

1

を PIC

1

とする。

2 から までの範囲の に対して,PICJ-1.I

J

を PICJ とする。PICJ を,IC 

番目の部分識別子鎖  (partial identifier chain)  と呼ぶ。

e)

と 3 との最小値を とする。

f) 1 から までの範囲の高々一つの に対して,PICJ を IC の基底  (basis)  と呼び,を IC の基底

長  (basis length)  と呼ぶ。基底の指示対象  (referent)  は,表 T,表の列 C,又は SQL パラメタ SP

とする。IC の基底  及び基底有効範囲  (basis scope)  は,次の規則に従って,候補基底  (candidate 

basis)  によって定義される。

i)

04

 IC が<ルーチン名>の有効範囲中に含まれ,その<ルーチン名>に関連付けられた<SQL パラメ

タ宣言リスト

>が,I

1

と等価な

<SQL パラメタ名>をもつ SQL パラメタ SP を含むならば,PIC

1

は,IC の候補基底とし,PIC

1

の有効範囲は,SP の有効範囲とする。

ii)  N = 2 で,<ルーチン名> RN の<被修飾識別子>と PIC

1

が等価で,

<ルーチン名> RN の有効範囲

が IC を含み,かつ,<ルーチン名>  RN に関連付けられた<SQL パラメタ宣言リスト>が,I

2

等価な

<SQL パラメタ名>をもつ SQL パラメタ SP を含むならば,PIC

2

は,IC の候補基底とし,

PIC

2

の有効範囲は,SP の有効範囲とし,PIC

2

の指示対象は,SP とする。

iii)  N > 2 で,<ルーチン名> RN の<被修飾識別子>と PIC

1

が等価で,

<ルーチン名> RN の有効範囲


321

X 3005-2:2015 (ISO/IEC 9075-2:2011)

が IC を含み,かつ,<ルーチン名>  RN に関連付けられた<SQL パラメタ宣言リスト>が,I

2

等価な

<SQL パラメタ名>をもつ細分可能な SQL パラメタ SP を含むならば,PIC

2

は,IC の候

補基底とし,PIC

2

の有効範囲は,SP の有効範囲とし,PIC

2

の指示対象は,SP とする。

iv)  N = 2 で,かつ,有効範囲中にある露出する<相関名>と PIC

1

が等価ならば,PIC

1

と等価で,か

つ,最も内側の有効範囲をもつ露出する

<相関名>を EN とする。I

2

と等価な

<識別子>をもつ行

型の列 を,EN に関連付けられた表がもつならば,PIC

2

は,IC の候補基底とし,PIC

2

の有

効範囲は,EN の有効範囲とする。

v)  N > 2 で,かつ,有効範囲中にある露出する<相関名>と PIC

1

が等価ならば,PIC

1

と等価で,か

つ,最も内側の有効範囲をもつ露出する

<相関名>を EN とする。I

2

と等価な

<識別子>をもつ行

型又は構造型の列 を,EN に関連付けられた表がもつならば,PIC

2

は,IC の候補基底とし,

PIC

2

の有効範囲は,EN の有効範囲とする。

vi)  N ≤ 3 で,かつ,有効範囲中にある露出する<表名又は問合せ名>と PICN が等価ならば,PICN

と等価で,かつ,最も内側の有効範囲をもつ露出する

<表名又は問合せ名>を EN とする。PICN

は,IC の候補基底とし,PICN の有効範囲は,EN の有効範囲とする。

vii)  最も内側の有効範囲をもつただ一つの候補基底 CB が存在しなければならない。IC の基底は,

CB とする。その基底有効範囲は,CB の有効範囲とする。

g)  場合:

i)

基底が

<表名又は問合せ名>又は<相関名>ならば,基底に関連付けられた表を TQ とする。<選

択副リスト

>は,<値式>の並びと等価とし,その並び中の各<値式>は,<結合表>の共通列では

ない TQ の列を参照する列参照 CR とする。共通列ではない TQ の各列は,ただ 1 回参照されな

ければならない。列は,TQ 内のそれらの順序位置の昇順に参照されなければならない。

ii)  そうでなければ,IC の基底の長さを BL とする。

場合:

1)  BL = ならば,<選択副リスト> IC.*  は(IC).*  と等価とする。

2)  そうでなければ,<選択副リスト> IC.*  は,次の指定と等価とする。

PIC

BL

 ) . I

BL+1

 . ... . I

N

 . *

注記 234  どちらの場合にも,等価な構文は,<全フィールド参照> ::= <値式一次子> <ピリ

オド

> <アスタリスク>  として解析される。

9) <全フィールド参照>  AFR 中で指定される<値式一次子>  VEP のデータ型は,ある行型 VER でなけ

ればならない。VER の次数を とする。VER のフィールド名を F

1

...,Fn とする。

場合:

a) <全フィールド列名リスト>  AFCNL が指定されるならば,AFCNL に単純に含まれる<列名>の個

数は,でなければならない。これらの<列名>を,左から右の順序で,AFCNi,1 ≤ i ≤ とする。
AFR は,次の指定と等価とする。

VEP . F

1

 AS AFCN

1

,

... ,

VEP . F

n

 AS AFCN

n

b)  そうでなければ,AFR は,次の指定と等価とする。

VEP . F

1

 ,

... ,


322

X 3005-2:2015 (ISO/IEC 9075-2:2011)

VEP . F

n

10)  ある列を とする。<問合せ指定>を QS とする。1 から<導出列>の個数までの範囲の に対して,

QS の<選択リスト>に単純に含まれる 番目の<導出列>を DCi とする。

a)  全ての に対して,が,DCi の<値式>の基となる列であるか,又は が,QS に直に含まれる<

表式

>の基となる列ならば,は,DCi,及び DCi を識別する全ての列参照の基となる列  (underlying 

column)  とする。

b)  全ての に対して,が,DCi の<値式>の一般に基となる列であるか,又は が,QS に直に含ま

れる

<表式>の一般に基となる列ならば,は,DCi,及び DCi を識別する全ての列参照の一般に

基となる列  (generally underlying column)  とする。

11) <ウィンドウ関数>に含まれる各列参照は,の列を曖昧さなく参照しなければならない。

12)  次の二つの条件の両方を満たすならば,

QS は,

グループ化され,ウィンドウ化された問合せ  (grouped, 

windowed query)  とする。

a)  がグループ表である。

b)  QS に単純に含まれる<導出列>が<ウィンドウ関数>を単純に含む。

13)  グループ化され,ウィンドウ化された問合せ GWQ は,次のとおりに等価な<問合せ指定>に変換さ

れる。

a)  GWQ が<句内ウィンドウ指定>を含むならば,GWQ を WINFUNC として,

6.10  <ウィンドウ関

>”の構文規則を適用する。これらの構文規則の適用によって戻される TRANSFORM を GWQ1

とする。そうでなければ,GWQ を GWQ1 とする。

b)  GWQ1 の<選択リスト>が<アスタリスク>を直に含むか,又は<修飾付きアスタリスク>を単純に含

むならば,GWQ1 を TBLEXP として,この細分箇条の構文規則を適用する。これらの構文規則の

適用によって戻される TBLEXP2 を GWQ2 とする。そうでなければ,GWQ1 を GWQ2 とする。

c)

先行する変換があるならば,その結果を GWQ2 とする。

d)  GWQ2 の<選択リスト>,<FROM 句>,<WHERE 句>,<GROUP BY 句>,<HAVING 句>及び

<WINDOW 句>を,それぞれ,SLFCWCGBCHC 及び WIC とする。<WHERE 句>,<GROUP

BY 句>又は<HAVING 句>のいずれかがないならば,長さ 0 の文字列を,それぞれ,WCGBC 

び HC とする。GWQ2 の<問合せ指定>に直に含まれる<集合限定子>があるならば,それを SQ 

する。そうでなければ,長さ

0 の文字列を SQ とする。

注記 235  GWQ に<WINDOW 句>が元々ないならば,“6.10  <ウィンドウ関数>”の構文変換が作

成するので,GWQ2 には,<WINDOW 句>がないということはあり得ない。

e)

GWQ2 に単純に含まれる<集合関数指定>の個数を N1 とする。

f)

GWQ2 に単純に含まれる<集合関数指定>の列挙を SFSi,1 ≤ i ≤ N1 とする。

g)  互いに異なり,かつ,GWQ2 に含まれる全ての<識別子>とも異なる<識別子>のリストを SFSIi,1

≤ i ≤ N1 とする。

h)  N1 = 0 ならば,長さ 0 の文字列を SFSL とする。そうでなければ,次の指定を SFSL とする。

SFS

1

 AS SFSI

1

,

SFS

2

 AS SFSI

2

, ...,

SFS

N1

 AS SFSI

N1

i)

<集合関数指定> SFSi を,対応する<識別子> SFSIi に置き換えることによって,HC から得られ

るものを HCNEW とする。


323

X 3005-2:2015 (ISO/IEC 9075-2:2011)

j) <問合せ式>又は<集合関数指定>を介在しないで SL 又は WIC に含まれる外への参照でない<列参

>の個数を N2 とする。

k) <問合せ式>又は<集合関数指定>を介在しないで SL 又は WIC に含まれる外への参照でない<列参

>の列挙を CRj,1 ≤ j ≤ N2 とする。

l)

互いに異なり,かつ,GWQ2 中の全ての<識別子>と異なり,全ての SFSIi とも異なる<識別子>の
リストを CRIj,1 ≤ j ≤ N2 とする。

m)  N2 = 0 ならば,長さ 0 の文字列を CRL とする。そうでなければ,次の指定を CRL とする。

CR

1

 AS CRI

1

CR

2

 AS CRI

2

, ..., CR

N2

 AS CRI

N2

n)  SL に単純に含まれ,<AS 句>を指定しない<導出列>の個数を N3 とする。

o)  SL に単純に含まれ,<AS 句>を指定しない<導出列>を DCOLk,1 ≤ k ≤ N3 とする。各 に対して,

次のとおりに決定される

<列名>を COLNk とする。

場合:

i)

DCOLk が単一の列参照ならば,COLNk は,列参照によって示される列の<列名>とする。

ii)

04

 DCOLk が単一の SQL パラメタ参照ならば,COLNk は,SQL パラメタ参照によって示される

SQL パラメタの<SQL パラメタ名>とする。

iii)  そうでなければ,COLNk は,処理系依存の<列名>とする。

p)  各<導出列> DCOLk を次の指定に置き換えることによって,SL から得られるものを SL2 とする。

DCOL

k

 AS COLN

k

q)  任意の<識別子>を GWQN とする。

r)

単純に含まれる各

<集合関数指定>  SFSi を GWQN.SFSIi に置き換え,各<列参照>  CRj 

GWQN.CRIj に置き換えることによって,SL2 から得られる<選択リスト>を SLNEW とする。

s)

<集合関数指定>  SFSi を GWQN.SFSIi に置き換え,各<列参照>  CRj を GWQN.CRIj に置き換

えることによって,WIC から得られる<WINDOW 句>を WICNEW とする。

t)

SFSL 又は CRL のいずれかが長さ 0 の文字列ならば,長さ 0 の文字列を COMMA とする。そうで

なければ,“

,”(<コンマ>)を COMMA とする。

u)  GWQ は,次の<問合せ指定>と等価とする。

SELECT SLNEW

FROM ( SELECT SQ SFSL COMMA CRL

        FC

        WC

        GBC

        HC ) AS GWQN

WICNEW

14)  この細分箇条の構文規則 4),構文規則 6),構文規則 8),構文規則 8)g)及び構文規則 13)で規定した

構文上の変換の結果である

<問合せ式>を XFORM とする。

15)  次のいずれかの条件が真ならば,<問合せ指定>は,潜在的に非決定的  (possibly non-deterministic)  と

する。

a) <集合限定子> DISTINCT が指定され,かつ,文字列,利用者定義型,TIME WITH TIME ZONE 又

TIMESTAMP WITH TIME ZONE のデータ型を のいずれかの列がもつ。

b)  潜在的に非決定的な<値式>,<問合せ指定>又は<問合せ式>を<問合せ指定>が一般に含む。


324

X 3005-2:2015 (ISO/IEC 9075-2:2011)

c) <選択リスト>,<HAVING 句>又は<WINDOW 句>が,文字列,利用者定義型,TIME WITH TIME

ZONE 又は TIMESTAMP WITH TIME ZONE のデータ型をもつ の列 への参照を含み,中に

関数従属性 G  ↦ がある。ここで,は,のグループ化列から成る集合とする。

16) <表式>が<GROUP BY 句>を直に含まず,かつ,ある<集合関数指定>の集約問合せである<問合せ指

>に<表式>が単純に含まれるならば,GROUP BY () が暗に想定される。

注記 236  “集約問合せ”は,“6.9 <集合関数指定>”で定義している。

17)  がグループ表ならば,のグループ化列の集合を とする。<選択リスト>に含まれる各<値式>中

で,の列を参照する各列参照は,に関数従属である列 を参照するか,又は集約問合せが QS

である

<集合関数指定>の集約化引数に含まれなければならない。

注記 237  先行する構文規則は,“6.7 <列参照>”中のより包括的なものから得られる。

18)  TQS の各列は,その列を定義する<導出列>に単純に含まれる<値式>のデータ型記述子と同じである

データ型記述子を含む列記述子をもつ。

19)  場合:

a) <選択リスト>中の 番目の<導出列>が,<列名>  CN を含む<AS 句>を指定するならば,結果の i

番目の列の

<列名>は,CN とする。

b) <選択リスト>中の 番目の<導出列>が<AS 句>を指定しないで,かつ,その<導出列>の<値式>が

単一の列参照ならば,結果の 番目の列の<列名>は,その列参照によって示される列の<列名>と

する。

c)

04

  <選択リスト>中の 番目の<導出列>が<AS 句>を指定しないで,かつ,その<導出列>の<値式>

が単一の

SQL パラメタ参照ならば,結果の 番目の列の<列名>は,その SQL パラメタ参照によ

って示される

SQL パラメタの< SQL パラメタ名>とする。

d)  そうでなければ,<問合せ指定>の 番目の列の<列名>は,処理系依存とする。

20)  (<アスタリスク>及び<修飾付きアスタリスク>を取り除くための構文変換を実行した後に,

<列参

CR によって参照される列が CR の修飾する表の容易にナルでないことが分かる列であるような,

<列参照> CR である<値式>を直に含む<導出列>によって列 が定義されるならば,TQS の列 は,

容易にナルでないことが分かる  (readily known not null)。

21)  TQS の列 CKNN がナルでないことが分かる  (known not null)  ということは,次の条件のうちの少な

くとも一つを満たすことと同値とする。

a)  CKNN が容易にナルでないことが分かっている。

b) SQL 処理系が機能  T101  “拡張ナル可能性決定”を提供し,かつ,CKNN が,次のいずれかを含

<導出列>によって定義されていない。

i)

潜在的にナル可能である列 に対する列参照。

ii) <標識パラメタ>。

iii) <標識変数>。

iv)

04

 <動的パラメタ指定>。

v) SQL パラメタ。

vi) SQL ルーチン,又は PARAMETER STYLE SQL を指定するか若しくは暗に想定する外部ルーチ

ンのいずれかである

SQL 呼出しルーチンを当該ルーチンとしてもつ<ルーチン呼出し>,<メソ

ッド参照

>又は<メソッド呼出し>。

vii) <問合せ式>。


325

X 3005-2:2015 (ISO/IEC 9075-2:2011)

viii) CAST ( NULL AS X )  (ここで,は,<データ型>又は<定義域名>を表現する。

ix) <順位関数種別>,ROW_NUMBER,又は COUNT を単純に含む<集約関数>を<ウィンドウ関数

種別

>が含まない<ウィンドウ関数>。

x) CURRENT_USER,CURRENT_ROLE 又は SYSTEM_USER。

xi) COUNT を単純に含まない<集合関数指定>。

xii) <CASE 式>。

xiii) <フィールド参照>。

xiv) <配列要素参照>。

xv) <マルチ集合要素参照>。

xvi) <内参照演算>。

xvii) <参照解決>。

xviii)<比較述語>,<BETWEEN 述語>,<IN 述語>又は<限定比較述語>  に単純に含まれる<行値述

語オペランド

>のフィールドの宣言型が,行型,利用者定義型,配列型又はマルチ集合型である

ような,

<比較述語>,<BETWEEN 述語>,<IN 述語>又は<限定比較述語> P

xix) <MEMBER 述語>。

xx) <SUBMULTISET 述語>。

c)

列の値がナルであり得ないことを,

SQL 処理系が正確に推論することができる処理系定義の規則

がある。

22) <表式>の<FROM 句>に単純に含まれる<表参照>を TREF とする。<問合せ指定>の単純に基となる

表  (simply underlying table)  は,<導出表>を介在しないで,TREF に含まれる<表名又は問合せ名>及

<導出表>とする。

23)  キー保持  (key-preserving)  及び 対 対応  (one-to-one)  という用語は,次のとおりに定義される。

a)  QS の単純に基となる表を UT で示し,UT の列の集合を UTCOLS とし,QS の列の集合を QSCOLS

とし,有効範囲句が QS の,UT に対する露出する範囲変数を QSCN とする。

b)  UT の強い候補キーCKUT の全ての要素が QSCOLS 中に QSCN の下の対応物をもつような,

CKUT

が存在するならば,QS は,UT に関してキー保持  (key-preserving with respect to)  であるという。

注記 238  “強い候補キー”は,“4.20  候補キー”で定義している。

注記 239  “対応物”は,“4.19.2  一般規則及び定義”で定義している。この条件から判断すると,

QS 中のどの行も,UT 中のただ一つの行,すなわち,CKUT の列の組み合わせた値で,

QS 中の行と同じ値をもつ UT 中の行に対応する。UT 中の単一行に対応する二つ以上

の行が QS 中に存在してもよい。

c)

QS が UT に関して 対 対応  (one-to-one with respect to)  であることは,QS が UT に関してキー

保持で,UT が更新可能で,かつ,QS の強い候補キーCKQS のどの要素も,UT の下の,UTCOLS

の要素の対応物であるような,CKQS が存在することと同値とする。

注記 240  この条件から判断すると,UT 中のどの行も,QS 中の高々一つの行,すなわち,CKQS

の列の組み合わせた値で,UT 中の行と同じ値をもつ QS 中の行に対応する。

24) <問合せ指定>が潜在的に更新可能  (potentially updatable)  であることは,次の全ての条件を満たすこ

とと同値とする。

a) DISTINCT が指定されない。

b)  実表中に対応物をもつ列参照である<選択リスト>中の<導出列>から成る表のどの列も,<選択リ


326

X 3005-2:2015 (ISO/IEC 9075-2:2011)

スト

>中で 2 回以上参照されない。

c)

QS に直に含まれる<表式>が,陽に指定されるか又は暗に想定される<GROUP BY 句>又は

<HAVING 句>を単純に含まない。

d)  QS に直に含まれる<表式>が,FOR SYSTEM_TIME AS OF CURRENT_TIMESTAMP を指定しない

陽に指定されるか又は暗に想定される

<問合せシステム時刻期間指定>を単純に含まない。

e)

QS に直に含まれる<表式>が<データ変更差分表>を一般に含まない。

25) <問合せ指定> QS が潜在的に更新可能であるならば,次による。

場合:

a) <表式>の<FROM 句>がただ一つの<表参照>を指定するならば,更新可能な TR 中に QS の列が対

応物をもつとき,その列は,

潜在的に更新可能な列  (potentially updatable column)  という。

注記 241  表参照の更新可能な列の概念は,“7.6 <表参照>”で定義している。

b)  そうでなければ,QS が,QS の単純に基となる表 UT に関して 1 対 1 対応であるような UT の更

新可能な列の対応物を QS の列がもつならば,その列は,潜在的に更新可能な列  という。

26) <問合せ指定>が潜在的に更新可能で,かつ,少なくとも一つの潜在的に更新可能な列をもつならば,

その

<問合せ指定>は,更新可能  (updatable)  とする。

27)  次の全ての条件を満たすならば,<問合せ指定> QS は,単純に更新可能  (simply updatable)  とする。

a)  QS が更新可能である。

b)  QS に直に含まれる<表式>に直に含まれる<FROM 句>がただ一つの<表参照>をもち,かつ,その<

表参照

>によって参照される表が単純に更新可能である。

c)

QS のどの結果列も,潜在的に更新可能である。

d)  QS に直に含まれる<表式>が<WHERE 句> WC を直に含むならば,QS の末端で一般に基となるど

の表も,WC に含まれるどの<問合せ式>の一般に基となる表でもない。

28) <問合せ指定>  QS が挿入可能  (insertable-into)  であることは,QS の全ての単純に基となる表が挿入

可能であることと同値とする。

29)  次の少なくとも一つが真ならば,QS の列 は,更新可能とする。

a)  QS が単純に更新可能である。

b)  QS が更新可能で,が潜在的に更新可能で,かつ,SQL 処理系が機能 T111“更新可能な結合,

和集合及び列”を提供する。

30)  TQS の行型 RT は,TQS の列記述子の並びによって示される,その順序どおりの(<フィールド名>,

<データ型>)対の並びによって定義される。

アクセス規則

なし。 

一般規則

1)  場合:

a)  がグループ表でないならば,各<値式>が の各行に適用され,個の行から成る表 TEMP が生

成される。ここで,は,の基数とする。表の 番目の列は,番目の<値式>の評価によって導

出される値を含む。

b)  がグループ表ならば,次による。

場合:

i)

が 0 個のグループをもつならば,空の表を TEMP とする。


327

X 3005-2:2015 (ISO/IEC 9075-2:2011)

ii)  が一つ以上のグループをもつならば,各<値式>が の各グループに適用され,個の行から

成る表 TEMP が生成される。ここで,は,中のグループの個数とする。TEMP の 番目の

列は,番目の<値式>の評価によって導出される値を含む。<値式>が の与えられたグループ

に適用されるとき,そのグループは,集約問合せが QS である各<集合関数指定>の引数の入力

とする。

2)  場合:

a) <集合限定子> DISTINCT が指定されないならば,<問合せ指定>の結果は,TEMP とする。

b) <集合限定子> DISTINCT が指定されるならば,<問合せ指定>の結果は,冗長な重複行を取り除く

ことによって,TEMP から導出される表とする。いずれかの列の最特定型が文字列,時刻帯付き

日時又は利用者定義型ならば,これらの列の正確な値は,処理系依存の方法で選択される。

適合性規則

1)  機能 F801“完全な集合関数”なしでは,適合する SQL 言語は,DISTINCT を含む<集合限定子>が

QS に含まれる<問合せ式>に含まれる場合を除いて,DISTINCT を含む二つ以上の<集合限定子>を

含む

<問合せ指定> QS を含んではならない。

2)  機能 T051“行型”なしでは,適合する SQL 言語は,<全フィールド参照>を含んではならない。

3)  機能 T301“関数従属性”なしでは,適合する SQL 言語中で,がグループ表ならば,<選択リスト

>に含まれる各<値式>中の,の列を参照する各<列参照>は,グループ化列を参照するか,又は<集

合関数指定

>の集約化引数中で指定されなければならない。

4)  機能 T325“修飾付き SQL パラメタ参照”なしでは,適合する SQL 言語は,指示対象が SQL パラメ

タで,かつ,最初の

<識別子>が<ルーチン名>の<被修飾識別子>である<被アスタリスク付け識別子

>を含んではならない。

5)  機能 T053“全フィールド参照のための陽に指定された別名”なしでは,適合する SQL 言語は,<全

フィールド列名リスト

>を含んではならない。

注記 242  <集合限定子> DISTINCT が指定されるならば,“9.12  グループ化操作”の適合性規則も

適用する。

6)  機能 T285“拡張導出列名”なしでは,適合する SQL 言語中で,<選択リスト>中の<導出列>が<AS

>を指定しないで,かつ,その<導出列>の<値式>が単一の列参照でないならば,その列の<列名>

は,処理系依存とする。

7.13  <問合せ式>

この細分箇条は,ISO/IEC 9075-14 の“7.2 <問合せ式>”によって修正される。 

機能

<問合せ式> (<query expression>)  は,表を指定する。

形式

<問合せ式> ::=

  [  <WITH 句> ] <問合せ式本体>

      [  <ORDER  BY 句> ] [<結果 OFFSET 句> ] [ <FETCH FIRST 句> ]

14

 <WITH 句> ::=

  WITH [ RECURSIVE ] <WITH リスト>

<WITH リスト> ::=

  <WITH リスト要素> [ { <コンマ> <WITH リスト要素> }... ]


328

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<WITH リスト要素> ::=

  <問合せ名> [ <左括弧> <WITH 列リスト> <右括弧> ]

      AS <表副問合せ> [ <SEARCH 又は CYCLE 句> ]

<WITH 列リスト> ::=

  <列名リスト>

<問合せ式本体> ::=

  <問合せ項>

 |

<問合せ式本体> UNION [ ALL | DISTINCT ]

      [  <CORRESPONDING 指定> ] <問合せ項>

 |

<問合せ式本体> EXCEPT [ ALL | DISTINCT ]

      [  <CORRESPONDING 指定> ] <問合せ項>

<問合せ項> ::=

  <問合せ一次子>

 |

<問合せ項> INTERSECT [ ALL | DISTINCT ]

      [  <CORRESPONDING 指定> ] <問合せ一次子>

<問合せ一次子> ::=

  <単純表>

 |

<左括弧> <問合せ式本体>

      [  <ORDER  BY 句> ] [<結果 OFFSET 句> ] [ <FETCH FIRST 句> ] <右括弧>

<単純表> ::=

  <問合せ指定>

 |

<表値構成子>

 |

<明示表>

<明示表> ::=

  TABLE  <表名又は問合せ名>

<CORRESPONDING 指定> ::=

  CORRESPONDING [ BY <左括弧> <対応列リスト> <右括弧> ]

<対応列リスト> ::=

  <列名リスト>

<ORDER BY 句> ::=

  ORDER  BY  <ソート指定リスト>

<結果 OFFSET 句> ::=

  OFFSET  <変位行数> { ROW | ROWS }

<FETCH FIRST 句> ::=

  FETCH { FIRST | NEXT } [ <最初の取出し量> ] { ROW | ROWS } { ONLY | WITH TIES }

<最初の取出し量> ::=

  <最初の取出し行数>

 |

<最初の取出し率>

<変位行数> ::=

  <単純値指定>


329

X 3005-2:2015 (ISO/IEC 9075-2:2011)

<最初の取出し行数> ::=

  <単純値指定>

<最初の取出し率> ::=

  <単純値指定> PERCENT

構文規則

1) <問合せ式>を QE とする。

2)  QE が<データ変更差分表>を単純に含むならば,QE に含まれる<問合せ式本体>は,<問合せ指定>

でなければならない。

3) <WITH 句>が指定されるならば,次による。

a) <WITH 句> WC が RECURSIVE を直に含むならば,WC,それの<WITH リスト>及びそれの<WITH

リスト要素

>は,潜在的に再帰的  (potentially recursive)  という。そうでなければ,それらは,再帰

的でない  (non-recursive)  という。

b)  潜在的に再帰的な<WITH リスト要素>は,<データ変更差分表>を一般に含んではならない。

c) <WITH リスト要素>  WLE が<データ変更差分表>を一般に含むならば,WLE 中の<データ変更差

分表

>の実現値は,ただ一つでなければならない。

d) <WITH リスト要素>の個数を とする。各 i,1 ≤ i < に対して,各 ji < j ≤ に対する 番目の

<WITH リスト要素>は,番目の<WITH リスト要素>に直に含まれる<問合せ名>と等価な<問合せ

>を直に含んではならない。

e) <WITH 句>が再帰的でないならば,1 から までの範囲の全ての に対して,番目の<WITH リス

ト要素

WLEi に直に含まれる<問合せ名> WQN の有効範囲は,全ての<WITH リスト要素> WLEk

に単純に含まれる

<問合せ式>,及び QE に直に含まれる<問合せ式本体>とする。ここで,の範

囲は,i+1 から までとする。WQN を直に含むこの有効範囲中に含まれる<表名又は問合せ名>は,

有効範囲中の問合せ名  (query name in scope)  とする。

f) <WITH 句>が潜在的に再帰的ならば,1 から までの範囲の全ての に対して,番目の<WITH リ

スト要素

>  WLEi に直に含まれる<問合せ名>  WQN の有効範囲は,全ての<WITH リスト要素>

WLEk に単純に含まれる<問合せ式>,及び<問合せ式>に直に含まれる<問合せ式本体>とする。こ
こで,の範囲は,1 から までとする。WQN を直に含むこの有効範囲中に含まれる<表名又は

問合せ名

>は,有効範囲中の問合せ名  とする。

g)  どの<WITH リスト要素> WLE に対しても,

WLE に単純に含まれる<問合せ式>を WQE とし,

WQE

によって定義される表を WQT とする。

i)

WQT のいずれかの二つの列が等価な名前をもつか,又は WLE が潜在的に再帰的ならば,WLE

は,

<WITH 列リスト>を指定しなければならない。WLE が<WITH 列リスト> WCL を指定する

ならば,次による。

1)  等価な<列名>を WCL 中で 2 回以上指定してはならない。

2)  WCL 中の<列名>の個数は,WQT の次数と同じでなければならない。

ii)  WQT 中の文字列型のどの列も,宣言型照合順をもたなければならない。

h)  潜在的に再帰的である<WITH リスト>  WL の問合せ名依存グラフ  (query name dependency graph)

QNDG は,有向グラフとし,1 から,WL に単純に含まれる<問合せ名>の個数までの範囲の に対

して,次のとおりとする。

i)

各ノードは,WL の<WITH リスト要素> WLEi に直に含まれる<問合せ名> WQNi を表現する。


330

X 3005-2:2015 (ISO/IEC 9075-2:2011)

ii)  ノード WQNi からノード WQNj への各アークは,WLEi に単純に含まれる<問合せ式>に含まれ

<問合せ名>によって WQNj が参照されることを表現する。WQNi は,WQNj に直に依存する

(depend immediately)  という。

i)

個の要素をもつ潜在的に再帰的である<WITH リスト>  WL に対して,1 から までの範囲の i

に対して,WL の 番目の<WITH リスト要素>を WLEi とし,WLEi に直に含まれる<問合せ名>を
WQNi とし,WLEi に単純に含まれる<問合せ式>を WQEi とし,WQEi によって定義される表を

WQTi とし,WL の問合せ名依存グラフを QNDG とする。

i)

QNDG が少なくとも一つのサイクルを含むならば,WL は,再帰的  (recursive)  という。

場合:

1)  QNDG が WQNi からそれ自体へのアークを含むならば,WLEiWQNi 及び WQTi は,再帰的

という。WQNi は,WQEi の層  (stratum)  に属するという。

2)  QNDG が,kで,WQNi,…,WQNk から成るサイクルを含むならば,WQNi,…,WQNk

は,

再帰的で,かつ,互いに相互再帰的  (mutually recursive)  であるといい,WQTi,…,WQTk

は,

再帰的で,かつ,互いに相互再帰的  であるといい,WLEi,…,WLEk は,再帰的で,

かつ,互いに

相互再帰的  であるという。

から までの範囲の各 に対して,WQNj は,WQEi,…,及び WQEk の層に属するという。

3)  与えられた層の WQEi,…,WQEk の中で,WQEj という,次のような少なくとも一つの<問

合せ式

>が存在しなければならない。

A)  WQEj が,UNION を直に含む<問合せ式本体>である。

B)  WQNi,…,WQNk のいずれかを参照する<問合せ名>を含まない一つのオペランドを WQEj

がもつ。このオペランドは,WQEj の再帰的でないオペランド  (non-recursive operand)  とい
う。

C)  WQEj は,アンカ式  (anchor expression)  といい,WQNj は,アンカ名  (anchor name)  という。

D)  WQNi,…,WQNk 以外のノードを含まない QNDG の部分グラフを CCCG とする。どのア

ンカ名 WQNj に対しても,WQEj に含まれる<問合せ名>によって参照されるこれらの問合
せ名 WQNl へのアークを取り除く。残っているグラフ SCCGP は,サイクルを含んではな
らない。

ii)  WLEi が再帰的ならば,次による。

1)  場合:

A)  WQEi の層に属する高々一つの WQNk を WQEi が含むならば,WLEi は,線形再帰  (linearly 

recursive)  とする。

B)  そうでなければ,WQEi は,WQNk 及び WQNl を参照する二つの<問合せ名>を含み,それ

らの両方が WQEi の層に属する。 
場合:

I)

次の各条件を満たすならば,WLEi は,線形再帰  とする。

1)  WQNk 及び WQNl を参照する両方の<問合せ名>を含む<表参照リスト>を WQEi が含ま

ない。

2) 1 番目の<表参照>及び 2 番目の<表参照>,又は<表参照>及び<表因子>が,それぞれ,

TR1 及び TR2 で,かつ,TR1 及び TR2 が,それぞれ,WQNk 及び WQNl を参照する<
問合せ名

>を含むような<結合表>を WQEi が含まない。


331

X 3005-2:2015 (ISO/IEC 9075-2:2011)

3)  WQNk を含む<FROM 句>を直に含み,かつ,WQNl を参照する<問合せ名>を含む<問

合せ式

>を含む<WHERE 句>を直に含む<表式>を WQEi が含まない。

II)  そうでなければ,WLEi は,非線形再帰  (non-lenearly recursive)  という。

2)  WQEi の層に属する<問合せ名>の個数を とする。1 から までの範囲の に対して,次に

よる。

A)  WQEi は,WQNj を参照する<問合せ名>を含み,かつ,EXCEPT の右オペランドが WQNj

を含む

EXCEPT を直に含む<問合せ式本体>を含んではならない。

B)  WQEi は,WQNj を参照する<問合せ名>を含む<値式>を直に含む一つ以上の<SQL 引数>を

含む

<SQL 引数リスト>をもつ<ルーチン呼出し>を含んではならない。

C)  WQEi は,WQEi である<問合せ式本体>に直に含まれる<問合せ項>を構成する<問合せ一次

>を構成する<単純表>を構成する<問合せ指定>に直に含まれる<表式>に直に含まれる

<FROM 句>に直に含まれる<表参照>に直に含まれる<表一次子>に直に含まれる<導出表>

<問合せ式>  TSQ が単純に含まれない限り,WQNj を参照する<問合せ名>を含む TSQ 

含んではならない。

D)  WQEi は,WQNj を参照する<問合せ名>を含む<表式> TE を<問合せ指定> QS が直に含み,

かつ,次のいずれかが真であるような QS を含んではならない。

I)

QS が<選択リスト> SL を直に含むか又は TE が<HAVING 句> HC を直に含み,かつ,SL

又は TE が<集合関数指定>を含む。

II)  QS が,<ウィンドウ関数>を含む<選択リスト> SL を直に含む。

注記 243  <ウィンドウ関数>が<ORDER BY 句>に含まれるならば,<ウィンドウ関数>

<選択副リスト>に移動するこの細分箇条中の構文上の変換がこの規則の適

用前に実効的に適用される。

E)  WQEi は,WQNj を参照する<問合せ名>を含み,かつ,INTERSECT ALL 又は EXCEPT ALL

を単純に含む

<問合せ式本体>を含んではならない。

F)  WQEi は,次の<修飾付き結合> QJ を含んではならない。

I) FULL を指定する<結合型>,及び WQNj を参照する<問合せ名>を含む<表参照>又は<分

割結合表

>を直に含む QJ

II) LEFT を指定する<結合型>,及び WQNj を参照する<問合せ名>を含み,かつ,その<結合

>に続く<表参照>又は<分割結合表>を直に含む QJ

III) RIGHT を指定する<結合型>,及び WQNj を参照する<問合せ名>を含み,かつ,その<結

合型

>に先行する<表参照>又は<分割結合表>を直に含む QJ

G)  WQEi は,次の<自然結合> QJ を含んではならない。

I) FULL を指定する<結合型>,及び WQNj を参照する<問合せ名>を含む<表参照>,<表因

>又は<分割結合表>を直に含む QJ

II) LEFT を指定する<結合型>,及び WQNj を参照する<問合せ名>を含み,かつ,その<結合

>に続く<表因子>又は<分割結合表>を直に含む QJ

III) RIGHT を指定する<結合型>,及び WQN

j

を参照する

<問合せ名>を含み,かつ,その<結

合型

>に先行する<表参照>又は<分割結合表>を直に含む QJ

iii)  WLEi が再帰的ならば,WLEi は,線形再帰でなければならない。

iv)  次の全てが真ならば,WLEi は,展開可能  (expandable)  という。


332

X 3005-2:2015 (ISO/IEC 9075-2:2011)

1)  WLEi が再帰的である。

2)  WLEi が線形再帰である。

3)  WQEi が,UNION 又は UNION ALL を直に含む<問合せ式本体>である。WQEi に直に含まれ

<問合せ式本体>を WQEBi とする。WQEBi に直に含まれる<問合せ式本体>及び<問合せ項>

を QELi 及び QTRi とする。WQNi は,QELi に含まれてはならず,QTRi は,<問合せ指定>
でなければならない。

4)  WQNi が相互再帰的ではない。

j) <WITH リスト要素> WLE が展開可能でないならば,WLE は,<SEARCH 又は CYCLE 句>を直に

含んではならない。

4) <問合せ式>によって指定される表を とする。

5) <明示表>

TABLE <表名又は問合せ名>

は,次の

<問合せ指定>と等価とする。

 SELECT * FROM <表名又は問合せ名>

6) UNION

ALL,UNION DISTINCT,EXCEPT ALL,EXCEPT DISTINCT,INTERSECT ALL 又は

INTERSECT DISTINCT を集合演算子  (set operator)  とする。

7) UNION,

EXCEPT 又は INTERSECT が指定され,ALL も DISTINCT も指定されないならば,DISTINCT

が暗に想定される。

8) <問合せ式> QE1 が<結果 OFFSET 句>又は<FETCH FIRST 句>を指定しないで,かつ,QE1 の<問合

せ式本体

>に単純に含まれるどの<問合せ式>又は<問合せ指定> QE2 に対しても,次の全てが真なら

ば,QE1 は,単純に更新可能  (simply updatable)  とする。

a) UNION

ALL,UNION DISTINCT,EXCEPT ALL 又は EXCEPT DISTINCT を指定する<問合せ式本

>を介在しないで,QE1 が QE2 を含む。

b) INTERSECT を指定する<問合せ項>を介在しないで,QE1 が QE2 を含む。

c)

QE2 が単純に更新可能である。

9) <問合せ式> QE1 が<結果 OFFSET 句>又は<FETCH FIRST 句>を指定しないで,かつ,QE1 に単純に

含まれるどの

<単純表> QE2 に対しても,次の全てが真ならば,QE1 は,更新可能  (updatable)  とす

る。

a)  QE2 が<表値構成子>でない。

b) UNION

DISTINCT,EXCEPT ALL 又は EXCEPT DISTINCT を指定する<問合せ式本体>を介在しな

いで,QE1 が QE2 を含む。

c) UNION

ALL を指定する<問合せ式本体> QEB を QE1 が単純に含むならば,次の条件を満たす。

i) <問合せ式本体> LO の末端で一般に基となるどの表も,<問合せ項> RO の末端で一般に基とな

る表でないような,LO 及び RO を QEB が直に含む。

ii)  QEB のどの列に対しても,LO 及び RO によって識別される表中の基となる列が,それぞれ,

両方とも更新可能であるか又は更新可能でないかのいずれかである。

d) INTERSECT を指定する<問合せ項>を介在しないで,QE1 が QE2 を含む。

e)

QE2 が更新可能である。

10) <WITH リスト要素> WLE に直に含まれる<問合せ名>によって指定される表が更新可能  であること

は,WLE に単純に含まれる<問合せ式>が更新可能であることと同値とする。


333

X 3005-2:2015 (ISO/IEC 9075-2:2011)

11) <WITH リスト要素> WLE に直に含まれる<問合せ名>によって指定される表が単純に更新可能  であ

ることは,WLE に単純に含まれる<問合せ式>が単純に更新可能であることと同値とする。

12) <問合せ式> QE1 が<結果 OFFSET 句>又は<FETCH FIRST 句>を指定しないで,かつ,QE1 の<問合

せ式本体

>が,次のうちの一つである<問合せ一次子>ならば,QE1 は,挿入可能  (insertable-into)  と

する。

a)  挿入可能な<問合せ指定>。

b)  挿入可能な表を識別する<表名又は問合せ名>を含む<明示表>。

c) <左括弧> <問合せ式本体> <右括弧>という形式から成り,括弧で囲まれた<問合せ式本体>がこの

条件を再帰的に満たす。

13) <WITH リスト要素>  WLE に単純に含まれる<問合せ式>が挿入可能ならば,WLE に直に含まれる<

問合せ名

>によって指定される表は,挿入可能  とする。

14)  QE に含まれるどの<単純表> ST に対しても,次による。

場合:

a)  ST が<問合せ指定> QS ならば,ST の各列の列記述子は,QS の対応する列の列記述子と同じとす

る。

b)  ST が<明示表> ET ならば,ST の各列の列記述子は,ET に含まれる<表名又は問合せ名>によって

識別される表の対応する列の列記述子と同じとする。

c)

そうでなければ,ST の各列の列記述子は,ST に直に含まれる<表値構成子>の対応する列の列記

述子と同じとする。

15)  QE に含まれるどの<問合せ一次子> QP に対しても,次による。

場合:

a)  QP が<単純表> ST ならば,QP の各列の列記述子は,ST の対応する列の列記述子と同じとする。

b)  そうでなければ,QP の各列の列記述子は,QP に直に含まれる<問合せ式本体>の対応する列の列

記述子と同じとする。

16) <問合せ項>又は<問合せ式本体>中に集合演算子が指定されるならば,次による。

a) <問合せ項>又は<問合せ式本体>の 1 番目のオペランド,2 番目のオペランド及び結果を,それぞ

れ,T1T2 及び TR とする。

b)  T1 及び T2 の実効的な名前を,それぞれ,TN1 及び TN2 とする。

c)

集合演算子が

UNION DISTINCT,EXCEPT ALL,EXCEPT DISTINCT,INTERSECT ALL 又は

INTERSECT DISTINCT ならば,T1 及び T2 の各列は,グループ化操作のオペランドとする。“9.12

グループ化操作”の構文規則及び適合性規則を適用する。

17) <問合せ項>又は<問合せ式本体>中に集合演算子が指定されるならば,集合演算子を OP とする。

場合:

a) CORRESPONDING が指定されるならば,次による。

i)

T1 の列のうちで,等価な<列名>は,2 回以上指定してはならず,T2 </