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

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

1)

目  次

ページ

序文

1

1  適用範囲

1

2  引用規格

2

2.1  JIS 及び ISO 規格

2

2.2  その他の国際規格

3

3  定義,表記法及び規約

4

3.1  定義

4

3.1.1  JIS X 0221 [ISO10646]  からの定義

4

3.1.2  [ISO14651]  からの定義

4

3.1.3  [Unicode]  からの定義

4

3.1.4  JIS X 0301 [ISO8601]  からの定義

5

3.1.5  第 部  [ISO9075-1]  からの定義

5

3.1.6  第 部で規定する定義

6

3.2  表記法

12

3.3  規約

12

3.3.1  用語の使用

12

3.3.1.1  その他の用語

12

4  概念

13

4.1  データ型

13

4.1.1  データ型の一般的な導入

13

4.1.2  既定義型の名前

13

4.1.3  ホスト言語データ型

15

4.1.4  データ型の用語

15

4.1.5  異なることの特性

17

4.2  文字列

17

4.2.1  文字列の導入

17

4.2.2  文字列の比較

18

4.2.3  文字列を含む演算

19

4.2.3.1  正規表現構文

19

4.2.3.2  文字列に作用し文字列を戻す演算子

19

4.2.3.3  文字列を含む他の演算子

21

4.2.3.4  長大オブジェクト文字列を含む演算

22

4.2.4  文字レパートリ

22

4.2.5  文字符号化形式

24

4.2.6  照合順

24


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

2)

ページ

4.2.7  文字集合

25

4.2.8  国際文字集合

26

4.3  進オクテット列

27

4.3.1  進オクテット列の導入

27

4.3.2  進オクテット列の比較

27

4.3.3  進オクテット列を含む演算

27

4.3.3.1  進オクテット列に作用し,進オクテット列を戻す演算子

27

4.3.3.2  進オクテット列を含む他の演算子

27

4.4  数

28

4.4.1  数の導入

28

4.4.2  数の性質

28

4.4.3  数を含む演算

29

4.5  ブール型

30

4.5.1  ブール型の導入

30

4.5.2  ブール値の比較及び代入

30

4.5.3  ブール値を含む演算

30

4.5.3.1  ブール値を戻すブール値の演算

30

4.5.3.2  ブール値を含む他の演算子

31

4.6  日時及び時間隔

31

4.6.1  日時及び時間隔の導入

31

4.6.2  日時

31

4.6.3  時間隔

33

4.6.4  日時及び時間隔を含む演算

35

4.7  利用者定義型

35

4.7.1  利用者定義型の導入

35

4.7.2  個別型

36

4.7.3  構造型

36

4.7.3.1  構造型の導入

36

4.7.3.2  観測関数及び変異関数

36

4.7.3.3  構成子

36

4.7.3.4  下位型及び上位型

37

4.7.4  メソッド

38

4.7.5  利用者定義型の比較及び代入

39

4.7.6  利用者定義型のための変換

39

4.7.7  利用者定義型記述子

40

4.8  行型

41

4.9  参照型

41

4.9.1  参照型の導入

41

4.9.2  参照を含む演算

42


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

3)

ページ

4.10  集まり型

42

4.10.1  集まり型の導入

42

4.10.2  配列

43

4.10.3  マルチ集合

43

4.10.4  集まりの比較及び代入

44

4.10.5  配列を含む演算

44

4.10.5.1  配列値に作用し,配列要素を戻す演算子

44

4.10.5.2  配列値に作用し,配列値を戻す演算子

44

4.10.5.3  配列値に作用し,数を戻す演算子

44

4.10.6  マルチ集合を含む演算

44

4.10.6.1  マルチ集合に作用し,マルチ集合要素を戻す演算子

44

4.10.6.2  マルチ集合に作用し,マルチ集合を戻す演算子

44

4.10.6.3  マルチ集合に作用し,数を戻す演算子

45

4.11  データ変換

45

4.12  定義域

46

4.13  列,フィールド及び属性

46

4.14  期間

48

4.14.1  期間の導入

48

4.14.2  期間を含む演算

48

4.15  表

49

4.15.1  表の導入

49

4.15.2  実表

49

4.15.2.1  通常永続実表

49

4.15.2.2  システムバージョン表

49

4.15.2.3  一時表

49

4.15.3  導出表

50

4.15.4  過渡表

51

4.15.5  表の一意識別

51

4.15.6  表更新可能性

51

4.15.7  表記述子

52

4.15.8  表間の関係

53

4.15.9  参照可能表,下位表及び上位表

53

4.15.10  表を含む演算

54

4.15.11  識別列

56

4.15.12  実列及び生成列

56

4.15.13  グループ表

57

4.15.14  ウィンドウ表

57

4.16  データ分析操作(表を含む)

58

4.16.1  データ分析操作の導入

58


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

4)

ページ

4.16.2  グループ関数

59

4.16.3  ウィンドウ関数

59

4.16.4  集約関数

61

4.17  決定論

63

4.18  整合性制約

64

4.18.1  整合性制約の概要

64

4.18.2  制約の検査

64

4.18.3  表制約

65

4.18.3.1  表制約の導入

65

4.18.3.2  一意性制約

65

4.18.3.3  参照制約

65

4.18.3.4  表検査制約

68

4.18.4  定義域制約

68

4.18.5  表明

68

4.19  関数従属性

68

4.19.1  関数従属性の規則及び表記法の概要

68

4.19.2  一般規則及び定義

69

4.19.3  実表中の知られている関数従属性

70

4.19.4  ビュー表中の知られている関数従属性

71

4.19.5  遷移表中の知られている関数従属性

71

4.19.6  <表値構成子>中の知られている関数従属性

71

4.19.7  <結合表>中の知られている関数従属性

71

4.19.8  <表一次子>中の知られている関数従属性

73

4.19.9  <表因子>中の知られている関数従属性

73

4.19.10  <表参照>中の知られている関数従属性

74

4.19.11  <FROM 句>の結果中の知られている関数従属性

74

4.19.12  <WHERE 句>の結果中の知られている関数従属性

74

4.19.13  <GROUP BY 句>の結果中の知られている関数従属性

74

4.19.14  <HAVING 句>の結果中の知られている関数従属性

75

4.19.15  <問合せ指定>中の知られている関数従属性

75

4.19.16  <問合せ式>中の知られている関数従属性

75

4.20  候補キー

76

4.21  SQL スキーマ

77

4.22  順序数生成子

78

4.22.1  順序数生成子の一般記述

78

4.22.2  順序数生成子を含む演算

79

4.23  SQL クライアントモジュール

79

4.24  埋込み構文

80

4.25  動的 SQL の概念

81


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

5)

ページ

4.25.1  動的 SQL の概要

81

4.25.2  動的 SQL 文及び記述子領域

82

4.26  SQL の直接起動

83

4.27  外部呼出し手続

83

4.28  SQL 呼出しルーチン

83

4.28.1  SQL 呼出しルーチンの概要

83

4.28.2  SQL 呼出しルーチンの性質

85

4.28.3  SQL 呼出しルーチンの実行

87

4.28.4  ルーチン記述子

87

4.28.5  SQL 呼出し手続によって戻される結果集合

89

4.29  SQL パス

90

4.30  ホストパラメタ

91

4.30.1  ホストパラメタの概要

91

4.30.2  状態パラメタ

91

4.30.3  データパラメタ

91

4.30.4  標識パラメタ

91

4.30.5  位置付け子

92

4.31  診断領域

92

4.32  ホスト言語

93

4.33  カーソル

94

4.33.1  カーソルの一般記述

94

4.33.2  カーソルの操作及びカーソルを用いる操作

98

4.34  SQL 

99

4.34.1  SQL 文の種類

99

4.34.2  機能によって分類された SQL 

100

4.34.2.1  SQL スキーマ文

100

4.34.2.2  SQL データ文

101

4.34.2.3  SQL データ変更文

102

4.34.2.4  SQL トランザクション文

102

4.34.2.5  SQL コネクション文

102

4.34.2.6  SQL 制御文

102

4.34.2.7  SQL セション文

102

4.34.2.8  SQL 診断文

103

4.34.2.9  動的 SQL 

103

4.34.2.10  SQL 埋込み例外宣言

103

4.34.3  SQL 文及び SQL データアクセス指示

103

4.34.4  SQL 文及びトランザクション状態

104

4.34.5  SQL 文の基本単位性及び文実行文脈

106

4.34.6  埋込み可能な SQL 

106


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

6)

ページ

4.34.7  準備可能及び即時実行可能な SQL 

108

4.34.8  直接実行可能な SQL 

109

4.35  基本安全保護モデル

110

4.35.1  認可識別子

110

4.35.1.1  SQL セション認可識別子

110

4.35.1.2  SQL クライアントモジュール認可識別子

111

4.35.1.3  SQL スキーマ認可識別子

111

4.35.2  権限

111

4.35.3  役割

113

4.35.4  安全保護モデル定義

114

4.36  SQL トランザクション

114

4.36.1  SQL トランザクションの一般記述

114

4.36.2  保存点

115

4.36.3  SQL トランザクションの特性

115

4.36.4  SQL トランザクションの隔離性水準

116

4.36.5  暗黙ロールバック

118

4.36.6  SQL トランザクション中の SQL 文の効果

118

4.36.7  全体トランザクション

118

4.37  SQL コネクション

120

4.38  SQL セション

121

4.38.1  SQL セションの一般記述

121

4.38.2  SQL セションの識別

121

4.38.3  SQL セション特性

122

4.38.4  SQL セション文脈管理

124

4.38.5  実行文脈

125

4.38.6  ルーチン実行文脈

125

4.39  トリガ

126

4.39.1  トリガの一般記述

126

4.39.2  トリガ実行

127

4.40  クライアントサーバ処理

129

5  語彙要素

130

5.1  <SQL 終端文字>

130

5.2  <トークン>及び<分離符号>

133

5.3  <定数>

143

5.4  名前及び識別子

151

6  スカラ式

161

6.1  <データ型>

161

6.2  <フィールド定義>

172

6.3  <値式一次子>

173


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

7)

ページ

6.4  <値指定>及び<相手指定>

174

6.5  <文脈型付き値指定>

179

6.6  <識別子鎖>

180

6.7  <列参照>

183

6.8  <SQL パラメタ参照>

185

6.9  <集合関数指定>

186

6.10  <ウィンドウ関数>

187

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

194

6.12  <CASE 式>

196

6.13  <CAST 指定>

199

6.14  <次値式>

212

6.15  <フィールド参照>

213

6.16  <下位型扱い>

214

6.17  <メソッド呼出し>

215

6.18  <静的メソッド呼出し>

216

6.19  <NEW 指定>

217

6.20  <属性又はメソッド参照>

218

6.21  <内参照演算>

218

6.22  <メソッド参照>

219

6.23  <参照解決>

220

6.24  <配列要素参照>

221

6.25  <マルチ集合要素参照>

221

6.26  <値式>

222

6.27  <数値式>

224

6.28  <数値関数>

226

6.29  <データ列値式>

236

6.30  <データ列値関数>

239

6.31  <日時値式>

253

6.32  <日時値関数>

255

6.33  <時間隔値式>

257

6.34  <時間隔値関数>

260

6.35  <ブール値式>

261

6.36  <配列値式>

264

6.37  <配列値関数>

265

6.38  <配列値構成子>

266

6.39  <マルチ集合値式>

267

6.40  <マルチ集合値関数>

269

6.41  <マルチ集合値構成子>

270

7  問合せ式

271


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

8)

ページ

7.1  <行値構成子>

271

7.2  <行値式>

274

7.3  <表値構成子>

275

7.4  <表式>

276

7.5  <FROM 句>

276

7.6  <表参照>

277

7.7  <結合表>

289

7.8  <WHERE 句>

298

7.9  <GROUP BY 句>

299

7.10  <HAVING 句>

307

7.11  <WINDOW 句>

308

7.12  <問合せ指定>

319

7.13  <問合せ式>

327

7.14  <SEARCH 又は CYCLE 句>

343

7.15  <副問合せ>

346

8  述語

347

8.1  <述語>

347

8.2  <比較述語>

348

8.3  <BETWEEN 述語>

354

8.4  <IN 述語>

355

8.5  <LIKE 述語>

356

8.6  <SIMILAR 述語>

360

8.7  <LIKE_REGEX 述語>

365

8.8  <NULL 述語>

366

8.9  <限定比較述語>

367

8.10  <EXISTS 述語>

368

8.11  <UNIQUE 述語>

368

8.12  <NORMALIZED 述語>

369

8.13  <MATCH 述語>

370

8.14  <OVERLAPS 述語>

371

8.15  <DISTINCT 述語>

373

8.16  <MEMBER 述語>

375

8.17  <SUBMULTISET 述語>

376

8.18  <SET 述語>

377

8.19  <型述語>

378

8.20  <期間述語>

379

8.21  <探索条件>

383

9  その他の共通規則

383

9.1  取出し代入

383


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

9)

ページ

9.2  格納代入

388

9.3  ホスト言語から SQL サーバへの値の受渡し

392

9.4  SQL サーバからホスト言語への値の受渡し

395

9.5  データ型組合せの結果

398

9.6  当該ルーチン決定

401

9.7  型優先順序リスト決定

402

9.8  ホストパラメタモード決定

404

9.9  型名決定

405

9.10  同一値の決定

406

9.11  等値性演算

408

9.12  グループ化操作

409

9.13  マルチ集合要素グループ化操作

410

9.14  順序付け操作

411

9.15  照合順決定

412

9.16  配列戻し関数の実行

413

9.17  マルチ集合戻し関数の実行

416

9.18  XQuery 正規表現照合

416

9.19  XQuery 正規表現置換

419

9.20  データ型の同一性

420

9.21  FROM-SQL 関数の決定

420

9.22  置換メソッドのための FROM-SQL 関数の決定

421

9.23  TO-SQL 関数の決定

422

9.24  置換メソッドのための TO-SQL 関数の決定

422

9.25  順序数生成子の次値の生成

423

9.26  順序数生成子の作成

423

9.27  順序数生成子の変更

425

9.28  ビューの階層的な<問合せ式>の生成

427

9.29  ビュー権限の決定

428

9.30  ビュー構成要素権限の決定

429

10  その他の共通要素

432

10.1  <時間隔修飾子>

433

10.2  <LANGUAGE 句>

435

10.3  <パス指定>

436

10.4  <ルーチン呼出し>

437

10.5  <文字集合指定>

458

10.6  <特定ルーチン指示子>

459

10.7  <COLLATE 句>

462

10.8  <制約名定義>及び<制約特性>

462

10.9  <集約関数>

463


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

10)

ページ

10.10  <ソート指定リスト>

474

11  スキーマ定義及びスキーマ操作

476

11.1  <スキーマ定義>

476

11.2  <スキーマ削除文>

478

11.3  <表定義>

480

11.4  <列定義>

490

11.5  <DEFAULT 句>

495

11.6  <表制約定義>

498

11.7  <一意性制約定義>

499

11.8  <参照制約定義>

501

11.9  <検査制約定義>

506

11.10  <表変更文>

507

11.11  <列定義追加>

508

11.12  <列定義変更>

509

11.13  <列 DEFAULT 句設定>

510

11.14  <列 DEFAULT 句削除>

511

11.15  <列 NOT NULL 句設定>

511

11.16  <列 NOT NULL 句削除>

512

11.17  <列 SCOPE 句追加>

512

11.18  <列 SCOPE 句削除>

513

11.19  <列データ型句変更>

514

11.20  <識別列指定変更>

516

11.21  <IDENTITY 特性句削除>

517

11.22  <列生成式句削除>

518

11.23  <列定義削除>

518

11.24  <表制約定義追加>

520

11.25  <表制約定義変更>

520

11.26  <表制約定義削除>

521

11.27  <表期間定義追加>

523

11.28  <表期間定義削除>

525

11.29  <SYSTEM VERSIONING 句追加>

528

11.30  <SYSTEM VERSIONING 句削除>

529

11.31  <表削除文>

530

11.32  <ビュー定義>

532

11.33  <ビュー削除文>

541

11.34  <定義域定義>

544

11.35  <定義域変更文>

545

11.36  <定義域 DEFAULT 句設定>

546

11.37  <定義域 DEFAULT 句削除>

546


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

11)

ページ

11.38  <定義域制約定義追加>

547

11.39  <定義域制約定義削除>

547

11.40  <定義域削除文>

548

11.41  <文字集合定義>

549

11.42  <文字集合削除文>

550

11.43  <照合順定義>

551

11.44  <照合順削除文>

552

11.45  <文字変換定義>

553

11.46  <文字変換削除文>

555

11.47  <表明定義>

556

11.48  <表明削除文>

557

11.49  <トリガ定義>

559

11.50  <トリガ削除文>

563

11.51  <利用者定義型定義>

566

11.52  <属性定義>

580

11.53  <型変更文>

582

11.54  <属性定義追加>

582

11.55  <属性定義削除>

584

11.56  <原メソッド指定追加>

585

11.57  <置換メソッド指定追加>

589

11.58  <メソッド指定削除>

592

11.59  <データ型削除文>

595

11.60  <SQL 呼出しルーチン>

597

11.61  <ルーチン変更文>

620

11.62  <ルーチン削除文>

622

11.63  <利用者定義型変換定義>

623

11.64  <利用者定義型変換削除文>

625

11.65  <利用者定義順序付け定義>

626

11.66  <利用者定義順序付け削除文>

629

11.67  <変換定義>

630

11.68  <変換変更文>

632

11.69  <変換要素リスト追加>

633

11.70  <変換要素リスト削除>

634

11.71  <変換削除文>

636

11.72  <順序数生成子定義>

637

11.73  <順序数生成子変更文>

639

11.74  <順序数生成子削除文>

640

12  アクセス制御

641

12.1  <GRANT 文>

641


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

12)

ページ

12.2  <GRANT 権限文>

645

12.3  <権限>

647

12.4  <役割定義>

650

12.5  <GRANT 役割文>

650

12.6  <役割削除文>

651

12.7  <REVOKE 文>

652

12.8  権限付与者決定

667

13  SQL クライアントモジュール

668

13.1  <SQL クライアントモジュール定義>

668

13.2  <モジュール名句>

672

13.3  <外部呼出し手続>

672

13.4  <SQL 手続文>

689

13.5  データ型対応

696

14  データ操作

705

14.1  <カーソル宣言>

705

14.2  <カーソル特性>

705

14.3  <カーソル指定>

707

14.4  <OPEN 文>

709

14.5  <FETCH 文>

709

14.6  <CLOSE 文>

712

14.7  <SELECT 文:単一行>

713

14.8  <DELETE 文:位置付け>

716

14.9  <DELETE 文:探索>

717

14.10  <TRUNCATE TABLE 文>

720

14.11  <INSERT 文>

721

14.12  <MERGE 文>

726

14.13  <UPDATE 文:位置付け>

734

14.14  <UPDATE 文:探索>

735

14.15  <設定句リスト>

739

14.16  <一時表宣言>

743

14.17  <FREE LOCATOR 文>

744

14.18  <HOLD LOCATOR 文>

744

15  その他のデータ操作規則

745

15.1  カーソルを開くことの効果

745

15.2  結果集合を受け取ることの効果

747

15.3  カーソルの現在行の決定

748

15.4  カーソルを閉じることの効果

750

15.5  位置付け削除の効果

750

15.6  位置付け更新の効果

752


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

13)

ページ

15.7  実表からの行の削除の効果

754

15.8  導出表からの行の削除の効果

756

15.9  ビュー表からの行の削除の効果

757

15.10  実表への表の挿入の効果

758

15.11  導出表への表の挿入の効果

759

15.12  ビュー表への表の挿入の効果

761

15.13  実表中の行の置換えの効果

762

15.14  導出表中の行の置換えの効果

765

15.15  ビュー表中の行の置換えの効果

767

15.16  BEFORE トリガの実行

768

15.17  参照動作の実行

769

15.18  AFTER トリガの実行

773

15.19  トリガの実行

774

16  制御文

776

16.1  <CALL 文>

776

16.2  <RETURN 文>

776

17  トランザクション管理

777

17.1  <START TRANSACTION 文>

777

17.2  <SET TRANSACTION 文>

778

17.3  <トランザクション特性>

779

17.4  <SET CONSTRAINTS MODE 文>

781

17.5  <SAVEPOINT 文>

781

17.6  <RELEASE SAVEPOINT 文>

782

17.7  <COMMIT 文>

782

17.8  <ROLLBACK 文>

784

18  コネクション管理

786

18.1  <CONNECT 文>

786

18.2  <SET CONNECTION 文>

788

18.3  <DISCONNECT 文>

789

19  セション管理

790

19.1  <SET SESSION CHARACTERISTICS 文>

790

19.2  <セション利用者識別子設定文>

791

19.3  <SET ROLE 文>

791

19.4  <地方時刻帯設定文>

792

19.5  <SET CATALOG 文>

793

19.6  <SET SCHEMA 文>

793

19.7  <SET NAMES 文>

794

19.8  <SET PATH 文>

795

19.9  <SET TRANSFORM GROUP 文>

795


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

14)

ページ

19.10  <セション照合順設定文>

796

20  動的 SQL

797

20.1  SQL 記述子領域の記述

797

20.2  <ALLOCATE DESCRIPTOR 文>

804

20.3  <DEALLOCATE DESCRIPTOR 文>

805

20.4  <GET DESCRIPTOR 文>

805

20.5  <SET DESCRIPTOR 文>

808

20.6  <PREPARE 文>

812

20.7  <カーソル属性の並び>

822

20.8  <DEALLOCATE PREPARE 文>

822

20.9  <記述文>

823

20.10  <入力 USING 句>

828

20.11  <出力 USING 句>

831

20.12  <EXECUTE 文>

835

20.13  <EXECUTE IMMEDIATE 文>

836

20.14  <動的カーソル宣言>

837

20.15  <拡張動的カーソル割当て文>

837

20.16  <受取りカーソル割当て文>

839

20.17  <動的 OPEN 文>

840

20.18  <動的 FETCH 文>

841

20.19  <動的単一行 SELECT 文>

842

20.20  <動的 CLOSE 文>

842

20.21  <動的 DELETE 文:位置付け>

843

20.22  <動的 UPDATE 文:位置付け>

843

20.23  <準備可能動的 DELETE 文:位置付け>

844

20.24  <準備可能動的カーソル名>

846

20.25  <準備可能動的 UPDATE 文:位置付け>

847

21  埋込み SQL

848

21.1  <SQL 埋込みホストプログラム>

848

21.2  <埋込み例外宣言>

858

21.3  <SQL 埋込み Ada プログラム>

861

21.4  <SQL 埋込み プログラム>

868

21.5  <SQL 埋込み COBOL プログラム>

877

21.6  <SQL 埋込み Fortran プログラム>

883

21.7  <SQL 埋込み MUMPS プログラム>

889

21.8  <SQL 埋込み Pascal プログラム>

892

21.9  <SQL 埋込み PL/I プログラム>

897

22  SQL の直接起動

904

22.1  <直接 SQL 文>

904


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

15)

ページ

22.2  <直接 SELECT 文:複数行>

907

23  診断管理

907

23.1  <GET DIAGNOSTICS 文>

907

23.2  診断領域スタックに対する押込み及び取出し

919

24  状態コード

920

24.1  SQLSTATE

920

24.2  遠隔データベースアクセスの SQLSTATE クラス

925

25  適合性

926

25.1  SQL/Foundation に対する適合性の主張

926

25.2  SQL/Foundation に対するその他の適合性要件

927

25.3  SQL/Foundation の前提機能の関係

927

附属書 A(参考)SQL 適合性の要約

930

附属書 B(参考)処理系定義要素

992

附属書 C(参考)処理系依存要素

1009

附属書 D(参考)削除予定機能

1017

附属書 E(参考)ISO/IEC 9075:2008 との非互換性

1018

附属書 F(参考)SQL の機能の分類

1020

附属書 G(参考)JIS X 3005 (ISO/IEC 9075)  規格群のこの版で取り込まれていない欠陥報告

1037

参考文献

1038


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

16)

まえがき

この規格は,工業標準化法に基づき,日本工業標準調査会の審議を経て,経済産業大臣が改正した日本

工業規格である。

これによって,JIS X 3005-2:2010 は改正され,この規格に置き換えられた。

この規格は,著作権法で保護対象となっている著作物である。

この規格の一部が,特許権,出願公開後の特許出願又は実用新案権に抵触する可能性があることに注意

を喚起する。経済産業大臣及び日本工業標準調査会は,このような特許権,出願公開後の特許出願及び実

用新案権に関わる確認について,責任はもたない。

JIS X 3005 の規格群には,次に示す部編成がある。

JIS X 3005-1  第 1 部:枠組 (SQL/Framework)

JIS X 3005-2  第 2 部:基本機能 (SQL/Foundation)

JIS X 3005-13  第 13 部:Java プログラム言語を用いる SQL ルーチン及び型 (SQL/JRT)

JIS X 3005-14  第 14 部:XML 関連仕様 (SQL/XML)

注記

  この規格群に対応する国際規格 ISO/IEC  9075 には,上記の部のほかに,2003 年に第 2 部から

分離して制定された ISO/IEC  9075-11,Information technology-Database languages-SQL-Part

11: Information and Definition Schemas (SQL/Schemata),すなわち,データベース言語 SQL  第 11

部:情報スキーマ及び定義スキーマ

 (SQL/ Schemata) もある。


日本工業規格

JIS

 X

3005-2

2015

(ISO/IEC 9075-2

2011

)

データベース言語 SQL

第 2 部:基本機能 (SQL/Foundation)

Information technology-Database languages-SQL-

Part 2: Foundation (SQL/Foundation)

序文

この規格は,

2011 年に第 4 版として発行された ISO/IEC  9075-2 を基に,技術的内容及び構成を変更す

ることなく作成した日本工業規格である。

なお,この規格で点線の下線を施してある参考事項は,対応国際規格にはない事項である。

1

適用範囲

この規格では,

SQL データのデータ構造及び基本操作を規定する。SQL データの作成,アクセス,保守,

制御及び保護の機能を提供する。

この規格は,次に示すデータベース言語の構文及び意味を規定する。

 SQL データの構造及び整合性制約 (integrity constraints) の指定及び変更。

 SQL データ及びカーソルに関する操作の宣言及び呼出し。

  データベース言語手続の宣言。

  特定のプログラム言語(ホスト言語)で他の部分が書かれた翻訳単位中への SQL 文の埋込み。

  ホスト言語中の等価な翻訳単位の導出。その等価な翻訳単位中で,各埋込み SQL 文は,ホスト言語の

一つ以上の文に置き換えられ,そのうちの幾つかの文は,実行されるとき,

SQL 文の実行と等価な効

果をもつ

SQL 外部呼出し手続を呼び出す。

 SQL 文の直接起動。

 SQL 文の動的な準備及び実行の提供。

この規格は,

SQL 処理系 (SQL-implementation) 間でのデータ定義及び翻訳単位の可搬性の手段を提供す

る。

この規格は,

SQL 処理系間の相互接続の手段を提供する。

この規格の処理系は,データベース設計・データ管理・性能最適化のための様々な道具はもちろん,適

用業務プログラム言語・エンドユーザ問合せ言語・報告書作成システム・データ辞書システム・プログラ

ムライブラリシステム・分散通信システムを提供する環境中に存在してもよい。

注記

  この規格の対応国際規格及びその対応の程度を表す記号を,次に示す。

ISO/IEC  9075-2:2011,Information technology-Database languages-SQL-Part 2: Foundation

(SQL/Foundation)(IDT)

なお,対応の程度を表す記号“

IDT”は,ISO/IEC Guide 21-1 に基づき,“一致している”こ


2

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

とを示す。

2

引用規格

次に掲げる規格は,この規格に引用されることによって,この規格の規定の一部を構成する。これらの

引用規格のうちで,西暦年を付記してあるものは,記載の年の版を適用し,その後の改正版(追補を含む。

は適用しない。西暦年の付記がない引用規格は,その最新版(追補を含む。)を適用する。

2.1

JIS 及び ISO 規格

[ISO1539]

JIS X 3001-1:2009  プログラム言語 Fortran-第 1 部:基底言語

注記

  対応国際規格:ISO/IEC 1539-1:2004,Information technology-Programming languages-Fortran

Part 1: Base language(IDT)

ISO/IEC 1539-1:2004/Cor 1:2006

ISO/IEC 1539-1:2004/Cor 2:2007

ISO/IEC 1539-1:2004/Cor 3:2008

ISO/IEC 1539-1:2004/Cor 4:2009

注記

  [ISO1539]  のような,各引用規格の前に付加されている角括弧で囲んだ記号は,引用規格を

後で参照するために用いる記号である。

[ISO1989]

JIS X 3002:2011  電子計算機プログラム言語 COBOL

注記

  対応国際規格:ISO/IEC 1989:2002,Information technology-Programming languages-COBOL

IDT)及び ISO/IEC 1989:2002/Cor 1:2006(IDT)

ISO/IEC 1989:2002/Cor 2:2006

ISO/IEC 1989:2002/Cor 3:2009

[ISO6160]

ISO 6160:1979,Programming languages-PL/1 (Endorsement of ANSI X3.53-1976)

[ISO7185]

JIS X 3008:1994  プログラム言語 Pascal

注記

  対応国際規格:ISO/IEC  7185:1990,Information technology-Programming languages-Pascal

IDT)

[ISO8601]

ISO  8601,Data elements and interchange formats-Information interchange-Representation of dates and

times

注記

  JIS  X  0301:2002  情報交換のためのデータ要素及び交換形式-日付及び時刻の表記が,ISO

8601:2000 と対応(MOD)している。

[ISO8652]

ISO/IEC 8652:1995,Information technology-Programming languages-Ada

注記

  ISO/IEC 8652:1995 と一致(IDT)していた JIS X 3009:2002  電子計算機プログラム言語 Ada

は,

2012 年 1 月に廃止された。

ISO/IEC 8652:1995/Cor.1:2001

[ISO8859-1]


3

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

ISO/IEC  8859-1,Information technology-8-bit single-byte coded graphic character sets-Part 1: Latin

alphabet No. 1

[ISO9075-1]

JIS X 3005-1:2014  データベース言語 SQL  第 1 部:枠組 (SQL/Framework)

注記

  対応国際規格:ISO/IEC 9075-1:2011,Information technology-Database languages-SQL-Part

1: Framework (SQL/Framework)(IDT)

[ISO9075-11]

ISO/IEC  9075-11:2011,Information technology-Database languages-SQL-Part 11: Information and

Definition Schemas (SQL/Schemata)

[ISO9579]

ISO/IEC 9579,Information technology-Remote database access for SQL with security enhancement

[ISO9899]

JIS X 3010:2003  プログラム言語 C

注記

  対応国際規格:ISO/IEC 9899:1999,Programming languages-C(IDT)

ISO/IEC 9899:1999/Cor 1:2001

ISO/IEC 9899:1999/Cor 2:2004

ISO/IEC 9899:1999/Cor 3:2007

[ISO10206]

ISO/IEC 10206:1991,Information technology-Programming languages-Extended Pascal

[ISO10646]

JIS X 0221  国際符号化文字集合 (UCS)

注記

  対応国際規格:ISO/IEC 10646,Information technology-Universal Multi-Octet Coded Character

Set (UCS)

注記

  JIS X 0221:2014 が,ISO/IEC 10646:2012 と一致(IDT)している。

[ISO11756]

ISO/IEC 11756:1999,Information technology-Programming languages-M

注記

  JIS  X  3011:1995  プログラム言語 MUMPS が,この国際規格の前の版 ISO  11756:1992,

Information technology-Programming languages-MUMPS と対応(MOD)している。

[ISO14651]

ISO/IEC  14651 , Information technology - International string ordering and comparison - Method for

comparing character strings and description of the common template tailorable ordering

2.2

その他の国際規格

[Unicode]

The Unicode Consortium, The Unicode Standard. (Information about the latest version of the Unicode standard

can be found by using the "Latest Unicode Version" link on the "Enumerated Versions of The Unicode

Standard" page.)

http://www.unicode.org/versions/enumeratedversions.html

[Unicode10]

Davis, Mark and Whistler, Ken. Unicode Technical Standard #10, Unicode Collation Algorithm, The Unicode

Consortium.


4

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

http://www.unicode.org/reports/tr10/

[Unicode15]

Davis, Mark and Durst, Martin, Unicode Standard Annex #15: Unicode Normalization Forms, The Unicode

Consortium.

http://www.unicode.org/reports/tr15/

[Unicode18]

Davis, Mark, Unicode Technical Standard #18: Unicode Regular Expressions, The Unicode Consortium.

http://www.unicode.org/reports/tr18/

[XQueryFO]

(W3C Recommendation) XQuery 1.0 and XPath 2.0 Functions and Operators, World Wide Web Consortium.

http://www.w3.org/TR/xpath-functions/

3

定義,表記法及び規約

この箇条は,ISO/IEC 9075-3 の“3  定義,表記法及び規約”によって修正される。

この箇条は,ISO/IEC 9075-4 の“3  定義,表記法及び規約”によって修正される。

この箇条は,ISO/IEC 9075-10 の“3  定義,表記法及び規約”によって修正される。

この箇条は,ISO/IEC 9075-11 の“3  定義,表記法及び規約”によって修正される。

この箇条は,ISO/IEC 9075-13 の“3  定義,表記法及び規約”によって修正される。

この箇条は,ISO/IEC 9075-14 の“3  定義,表記法及び規約”によって修正される。

3.1

定義

この細分箇条は,ISO/IEC 9075-3 の“3.1  定義”によって修正される。 

この細分箇条は,ISO/IEC 9075-9 の“3.1  定義”によって修正される。 

この細分箇条は,ISO/IEC 9075-10 の“3.1  定義”によって修正される。 

この細分箇条は,ISO/IEC 9075-13 の“3.1  定義”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“3.1  定義”によって修正される。 

3.1.1

JIS X 0221 [ISO10646]  からの定義

この規格では,JIS X 0221 [ISO10646]  で定義されている次の用語を用いる。

3.1.1.1

文字

 (character)

注記 2  これは,[Unicode]  で規定する抽象文字  (abstract character)  と同一である。JIS  X  3005

(ISO/IEC  9075)  規格群では,関連する文字レパートリが UCS のとき,ある文字は,一つの

符号位置によって表現されている  (that which is represented by one code point)  と考えることが

できる。

3.1.1.2

レパートリ

 (repertoire)

3.1.2

[ISO14651]  からの定義

この規格では,

[ISO14651]  で定義されている次の用語を用いる。

3.1.2.1

照合順

 (collation)

3.1.3

[Unicode]  からの定義


5

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

この規格では,

[Unicode]  で定義されている次の用語を用いる。

3.1.3.1

文字符号化形式

  (character encoding form)

3.1.3.2

符号位置

 (code point)

3.1.3.3

符号単位

 (code unit)

3.1.3.4

制御文字

 (control character)

3.1.3.5

非文字

 (noncharacter)

3.1.3.6

正規化

 (normalization)

3.1.3.7

符号変換

 (transcoding)

3.1.4

JIS X 0301 [ISO8601]  からの定義

この規格では,JIS X 0301 [ISO8601]  で定義されている次の用語を用いる。

3.1.4.1

協定世界時,UTC (Coordinated Universal Time)

3.1.4.2

日付(JIS X 0301 [ISO8601]  中での日付,暦)  [ date (date, calendar in [ISO8601])]

3.1.5

第 部  [ISO9075-1]  からの定義

この規格では,第

1 部  [ISO9075-1]  で定義されている次の用語を用いる。

3.1.5.1

基本単位

 (atomic)

3.1.5.2

 (column)

3.1.5.3

翻訳単位

 (compilation unit)

3.1.5.4

データ型

 (data type)

3.1.5.5

記述子

 (descriptor)

3.1.5.6

(ある

SQL オブジェクトの名前の)完全修飾付き  [ fully qualified (of a name of some SQL object)]

3.1.5.7

識別子

 (identifier)

3.1.5.8

識別

 (identify)

3.1.5.9


6

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

処理系定義

 (implementation-defined)

3.1.5.10

処理系依存

 (implementation-dependent)

3.1.5.11

(値の)実現値

  [ instance (of value)]

3.1.5.12

ナル値

 (null value)

3.1.5.13

(“

x オブジェクト”などの)オブジェクト  [ object (as in 'x object')]

3.1.5.14

永続

 (persistent)

3.1.5.15

(オブジェクトの)特性

  [ property (of an object)]

3.1.5.16

 (row)

3.1.5.17

(規格の)適用範囲

  [ scope (of a standard)]

3.1.5.18

(名前又は宣言の)有効範囲

  [ scope (of a name or a declaration)]

3.1.5.19

(参照型の)有効範囲

  [ scope (of a reference type)]

3.1.5.20

並び

 (sequence)

3.1.5.21

格納場所

 (site)

3.1.5.22

SQL コネクション (SQL-connection)

3.1.5.23

SQL 環境 (SQL-environment)

3.1.5.24

SQL 処理系 (SQL-implementation)

3.1.5.25

SQL セション (SQL-session)

3.1.5.26

SQL 文 (SQL-statement)

3.1.5.27

 (table)

3.1.6

第 部で規定する定義

この規格では,他の規格からの定義に加えて,次の用語を定義する。

3.1.6.1


7

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

(対にされたデータ型が)代入可能

  [assignable (of data types, taken pairwise)]

あるデータ型 T1 の値を特定のデータ型 T2 の格納場所に代入することを許すデータ型 T1 の特性。ここ

で,T1 及び T2 は,同じデータ型であってもよい。

3.1.6.2

代入

 (assignment)

相手  (target)  として知られている]格納場所 の値が[代入元  (source)  として知られている]与えら

れた値 と同一になることを確実にする効果をもつ操作。

注記 3  代入は,しばしば,“には,が設定される  (T is set to S)”又は“には,の値が設定さ

れる

  (the value of T is set to S)”という句を用いて示される。

3.1.6.3

属性

 (attribute)

構造型の構成要素。

注記 4  構造型 中の各値 は,の各属性 に対して,ただ一つの属性値をもつ。属性の特性は,

属性記述子によって指定される。属性の値は,その属性の観測関数の呼出し A (V)  の結果と

して取り出してもよい。

3.1.6.4

(集まりの)基数

  [cardinality (of collection)]

その集まり中の要素の個数。

注記 5  それらの要素は,必ずしも異なる値をもつ必要はない。この概念を適用するオブジェクトに

は,表,及び集まり型の値を含む。

3.1.6.5

(値の対が)比較可能

  [comparable (of a pair of values)]

8.2 <比較述語>”の規則に従って,比較できること。

注記 6  一つのデータ型の値は,全てとは限らないが,たいていの場合,ある値を別の値と比較する

ことができる(個々のデータ型の比較可能性の規定については,“4.2  文字列”から“4.10  集

まり型”までを参照。)

3.1.6.6

構成関数

 (constructor function)

どの構造型に対しても,ただ一つが暗に指定される零項

SQL 呼出し関数。

注記 7  データ型 に対する構成関数の呼出しは,値 がナル値でなく,かつ,に対して定義され

たどの観測関数 に対しても,O  (V)  の呼出しが に対応する属性の既定値を戻すような,

の最特定型の値 を戻す。

3.1.6.7

(値を示す式,又は,例えば,パラメタ,列若しくは変数のような,値を示すために参照できる任意のも

のの)宣言型

  [declared type (of an expression denoting a value or anything that can be referenced to denote a value,

such as, for example, a parameter, column, or variable)]

その式の評価の結果の全ての値に共通する一意なデータ型。

3.1.6.8

(比較可能な値の対が)異なる

  [distinct (of a pair of comparable values)]

ある与えられた文脈内で区別することができる。


8

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

注記 8  非公式には,二つの値は,どちらもナルでなく,かつ,値が等しくないならば,異なる。ナ

ル値とナルでない値とは,異なる。二つのナル値は,異ならない(

4.1.5  異なることの特性”,

及び“8.15 <DISTINCT 述語>”の一般規則参照。)。

3.1.6.9

個別型

 (distinct type)

既定義型又は集まり型から導出される利用者定義型。

3.1.6.10

重複

 (duplicates)

マルチ集合の二つ以上の異ならない要素。

3.1.6.11

(演算子,関数及び手続の)項  [dyadic (of operators, functions, and procedures)]

ただ二つのオペランド又はパラメタをもつこと。

注記 9  この規格での 2 項演算子の例としては,左のオペランドからの右のオペランドの減算を指定

する“

-”がある。2 項関数の例としては,POSITION がある。

3.1.6.12

(集まり型の)要素型

  [element type (of a collection type)]

集まり型 CT の定義で指定する宣言型 DT

注記 10  型 CT の全ての値の全ての要素の宣言型は,DT である。

3.1.6.13

(比較可能な値の対が)等しい

  [equal (of a pair of comparable values)]

<比較演算子>が<等号演算子>である<比較述語>中で引数として渡されるならば,真  (True)  を生じる(連

体修飾)(

8.2 <比較述語>”参照。)。

3.1.6.14

外部ルーチン

 (external routine)

SQL 以外のプログラム言語で書かれたプログラムを識別する外部本体参照であるルーチン本体をもつ

SQL 呼出しルーチン。

3.1.6.15

固定長

 (fixed-length)

型が文字列型又は

2 進オクテット列型である格納場所の宣言型の特性で,それぞれ,格納場所の文字単

位又はオクテット単位での長さとして知られているただ一つの文字数又はオクテット数を含むようにそれ

らの格納場所の値を制約する特性。

3.1.6.16

(値の対が)同一

  [identical (of a pair of values)]

JIS X 3005 (ISO/IEC 9075)  規格群中で規定するどのような方法によっても,それらの間のどんな違いも

検知できないという意味で,区別できないこと。

注記 11  完全な定義については,“9.10  同一値の決定”参照。

3.1.6.17

(利用者定義型の)インタフェース

  [interface (of a user-defined type)]

パラメタ又は結果の少なくとも一つの宣言型がその利用者定義型である全ての関数から成る集合。

3.1.6.18


9

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

(演算子,関数及び手続の)単項

  [monadic (of operators, functions, and procedures)]

ただ一つのオペランド又はパラメタをもつこと。

注記 12  この規格での単項算術演算子の例としては,オペランドの符号の反転を指定する“-”がある。

単項関数の例としては,引数の文字単位での長さを指定する

CHARACTER_LENGTH がある。

3.1.6.19

(値の)最特定型

  [most specific type (of a value)]

その値の全てのデータ型が上位型となる一意なデータ型。

3.1.6.20

変異関数

 (mutator function)

構造型の属性の定義によって暗に定義される

2 項型保持 SQL 呼出し関数で,呼び出すと,それに関連付

けられている属性の値を修正する。

3.1.6.21

項演算子 (n-adic operator)

可変個のオペランド(非公式には,個のオペランド)をもつ演算子。

注記 13  この規格での 項演算子の例としては,COALESCE がある。

3.1.6.22

(関数及び手続の)零項

  [niladic (of functions and procedures)]

パラメタがないこと。

3.1.6.23

観測関数

 (observer function)

構造型の属性に関連付けられる単項

SQL 呼出し関数で,呼び出すと,それに関連付けられている属性の

値を戻す。

注記 14  観測関数は,属性の定義によって暗に定義される。

3.1.6.24

冗長な重複

 (redundant duplicates)

重複する値又は行の集まりの一つを除いた全てのもの。

3.1.6.25

REF 値 (REF value)

ある格納場所を参照する値。

3.1.6.26

参照型

 (reference type)

一つの特定のデータ型の格納場所を全ての値が参照する可能性のあるデータ型。

3.1.6.27

被参照型

 (referenced type)

特定の参照型の値によって参照される格納場所の値の宣言型。

3.1.6.28

被参照値

 (referenced value)

REF 値によって参照される格納場所の値。

3.1.6.29

結果データ型

  (result data type)


10

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

SQL 呼出し関数の結果の宣言型。

3.1.6.30

結果集合

 (result set)

<カーソル指定>によって指定された行の並びであって,カーソルを開くことによって存在するようにな

り,そのカーソルが移動する範囲になるもの。

3.1.6.31

結果集合並び

  (result set sequence)

戻り結果集合の並び。

3.1.6.32

結果 SQL パラメタ (result SQL parameter)

SQL パラメタで,それをパラメタとしてもつ SQL 呼出し関数の結果の最特定型を,この SQL パラメタ

の値の最特定型が決定するもの。

3.1.6.33

戻り結果集合

 (returned result set)

SQL 呼出し手続の実行中に作成される結果集合で,その実行が終了するとき,破壊されないもの。

注記 15  そのような結果集合は,それを存在させるようにしたカーソル以外のカーソル(受取りカー

ソル)を用いてアクセスすることができる。

3.1.6.34

保存点

 (savepoint)

SQL トランザクション内の点で,保存点名によって識別され,その SQL トランザクションをそこまで戻

すことができる点。

3.1.6.35

SQL 呼出しルーチンの)署名  [signature (of an SQL-invoked routine)]

SQL 呼出しルーチンの名前,そのルーチンの各 SQL パラメタの位置及び宣言型,並びにそのルーチンが

SQL 呼出し関数か又は SQL 呼出し手続かを示す標識。

3.1.6.36

SQL 引数 (SQL argument)

SQL 呼出しルーチンの呼出しでの SQL パラメタを置き換える値を示す式。

3.1.6.37

SQL 呼出しルーチン (SQL-invoked routine)

SQL 内からだけ呼び出すことが許されるルーチン。

3.1.6.38

SQL パラメタ (SQL parameter)

SQL 呼出しルーチンの署名の部分として宣言するパラメタ。

3.1.6.39

SQL ルーチン (SQL routine)

ルーチン本体が

SQL で書かれた SQL 呼出しルーチン。

3.1.6.40

構造型

 (structured type)

属性の集合として指定する利用者定義型。


11

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

3.1.6.41

(行型の)下位フィールド

  [subfield (of a row type)]

行型 RT のフィールドか,又は RT の下位フィールドであるフィールドの宣言型である行型 RT2 のフィ

ールド。

3.1.6.42

(データ型の)下位型

  [subtype (of a data type)]

データ型 T2 の全ての値がデータ型 T1 の値でもあるようなデータ型 T2

注記 16  T1 と T2 とが互換でないならば,T2 は,T1 の真下位型  (proper subtype)。“互換”は,“4.1.4  デ

ータ型の用語”で定義している。上位型も参照。

3.1.6.43

(データ型の)上位型

  [supertype (of a data type)]

データ型 T2 の全ての値がデータ型 T1 の値でもあるようなデータ型 T1

注記 17  T1 と T2 とが互換でないならば,T1 は,T2 の真上位型  (proper supertype)。

“互換”は,“4.1.4

データ型の用語”で定義している。下位型も参照。

3.1.6.44

文字変換

 (transliteration)

一つの文字集合中の文字から同じか又は異なる文字集合の文字へ文字を変換する方法。

3.1.6.45

型保持関数

 (type-preserving function)

SQL 呼出し関数で,そのパラメタの一つが結果 SQL パラメタであるもの。

注記 18  型保持関数の呼出しによって戻される値の最特定型は,結果 SQL パラメタを置き換える SQL

引数値の最特定型と同一である。

3.1.6.46

利用者定義型

 (user-defined type)

利用者定義のインタフェースをもつデータ型。

3.1.6.47

可変長

 (variable-length)

型が文字列型又は

2 進オクテット列型である格納場所の宣言型の特性で,0 と,それぞれ,格納場所の

文字単位又はオクテット単位での最大長として知られている最大数との間の任意の文字数又はオクテット

数をそれらの格納場所の値が含むことを許す特性。

3.1.6.48

空白類

 (white space)

字形

 (glyph) をもたない一つ以上の文字の連続する並び。

注記 19  空白類は,SQL テキスト中の二つのトークン間に用いることが常に許され,主として,SQL

テキスト中の他のものから

<非区切りトークン>を区切るために用いる。

3.1.6.49

WITH RETURN カーソル (with-return cursor)

開かれるとき,戻り結果集合となることができる結果集合を作成するカーソル。

注記 20  <カーソル宣言>,<動的カーソル宣言>及び<拡張動的カーソル割当て文>の WITH RETURN

選択肢が,

WITH RETURN カーソルを指定する。WITH RETURN は,動的カーソルとして開


12

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

かれるとき,被準備文が

WITH RETURN カーソルを作成することを示すために,<PREPARE

>中の<属性変数>の内容中で指定してもよい。

3.1.6.50

XQuery 取り込み部分文字列  (XQuery captured substring)

[XQueryFO]で規定される取り込み部分文字列。

3.1.6.51

XQuery オプションフラグ  (XQuery option flag)

[XQueryFO]で規定される fn:matches の$flags 引数の正しい値。

3.1.6.52

XQuery 正規表現  (XQuery regular expression)

[XQueryFO]で規定される正規表現。

3.1.6.53

XQuery 正規表現括弧付き部分表現  (XQuery regular expression parenthesized sub-expression)

[XQueryFO]で規定される正規表現の括弧付き部分表現。

3.1.6.54

XQuery 置換文字列  (XQuery replacement string)

[XQueryFO]で規定される fn:replace の$replacement 引数の正しい値。

3.2

表記法

この細分箇条は,ISO/IEC 9075-14 中の“3.2  表記法”によって修正される。

この規格で用いる表記法は,第

1 部  [ISO9075-1]で定義する。

3.3

規約

この細分箇条は,ISO/IEC 9075-3 の“3.2  規約”によって修正される。 

この細分箇条は,ISO/IEC 9075-4 の“3.1  規約”によって修正される。 

この細分箇条は,ISO/IEC 9075-10 の“3.2  規約”によって修正される。 

この細分箇条は,ISO/IEC 9075-11 の“3.1  規約”によって修正される。 

この細分箇条は,ISO/IEC 9075-13 の“3.2  規約”によって修正される。 

この規格で用いる規約は,次を加え,第

1 部  [ISO9075-1]  で定義する。

3.3.1

用語の使用

この細分箇条は,ISO/IEC 9075-4 の“3.1.1  用語の使用”によって修正される。 

この細分箇条は,ISO/IEC 9075-10 の“3.2.1  用語の使用”によって修正される。 

3.3.1.1

その他の用語

この細分箇条は,ISO/IEC 9075-4 の“3.1.1.1  その他の用語”によって修正される。 

この細分箇条は,ISO/IEC 9075-10 の“3.2.1.1  その他の用語”によって修正される。 

SQL 文 S1 が,実行された<外部呼出し手続>又は<SQL 呼出しルーチン>に含まれる SQL 文ならば,S1

は,SQL 文の実行の直接の結果  (direct result of executing an SQL-statement)  として実行されるという。

SQL 文 S1 が,実行された<外部呼出し手続>に含まれる<EXECUTE IMMEDIATE 文>によって参照され

<SQL 文変数>の値か,又は S1 が,<PREPARE 文>によって<SQL 文名>と関連付けられた<SQL 文変数>

の値で,かつ,その同じ

<SQL 文名>が,実行された<外部呼出し手続>に含まれる<EXECUTE 文>によって

参照されるならば,S1 は,SQL 文の実行の直接の結果として実行されるという。


13

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

4

概念

この箇条は,ISO/IEC 9075-3 の“4  概念”によって修正される。

この箇条は,ISO/IEC 9075-4 の“4  概念”によって修正される。

この箇条は,ISO/IEC 9075-9 の“4  概念”によって修正される。

この箇条は,ISO/IEC 9075-10 の“4  概念”によって修正される。

この箇条は,ISO/IEC 9075-11 の“4  概念”によって修正される。

この箇条は,ISO/IEC 9075-13 の“4  概念”によって修正される。

この箇条は,ISO/IEC 9075-14 の“4  概念”によって修正される。

4.1

データ型

4.1.1

データ型の一般的な導入

データ型

 (data type) は,表現可能な値の集合とする。全ての表現可能な値は,少なくとも一つのデータ

型に属し,幾つかは,複数のデータ型に属する。データ型の値の物理的な表現は,処理系依存とする。

値 のデータ型のうちのただ一つの型,すなわち,の最特定型は,の全てのデータ型の下位型とす

る。<値式>は,の評価の可能な全ての結果に共通するただ一つの宣言型をもつ。SQL パラメタ,列,

フィールド,属性,変数など,名前によって参照することができる項目も,宣言型をもつ。

SQL は,既定義データ型  (predefined data type),構成型  (constructed type)  及び利用者定義型  (user-defined 

type)  の 3 種類のデータ型を提供する。既定義データ型は,この規格ではそう呼ばないが,ときには,

“組

込みデータ型

  (built-in data type)”とも呼ばれる。利用者定義型は,規格,処理系又は適用業務によって定

義することができる。

構成型は,

SQL のデータ型構成子 ARRAY,MULTISET,REF 及び ROW のうちの一つを用いて指定する。

構成型は,

ARRAY,MULTISET,REF 又は ROW のどれで指定したかによって,それぞれ,配列型,マル

チ集合型,参照型又は行型のいずれかとする。配列型及びマルチ集合型は,一般に

集まり型  (collection type)

として知られている。

全ての既定義データ型は,それ自体の下位型とし,他のデータ型の下位型ではない。結果として,全て

の既定義データ型は,それ自体の上位型とし,他のデータ型の上位型ではない。既定義データ型は,

4.2  文

字列”から“4.6  日時及び時間隔”までの各細分箇条で個別に規定する。

行型,参照型及び集まり型は,それぞれ“4.8  行型”,“4.9  参照型”及び“4.10  集まり型”で規定する。

利用者定義型は,

個別型  (distinct type)  又は構造型  (structured type)  のいずれかとする。利用者定義型は,

4.7  利用者定義型”で規定する。

4.1.2

既定義型の名前

この細分箇条は,ISO/IEC 9075-9 の“4.1.1  既定義型の名前”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“4.1.1  既定義型の名前”によって修正される。 

09

14

 SQL では,次の<キーワード>によって既定義データ型の名前を定義する。

CHARACTER

CHARACTER VARYING

CHARACTER LARGE OBJECT

BINARY

BINARY VARYING

BINARY LARGE OBJECT

NUMERIC


14

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

DECIMAL

SMALLINT

INTEGER

BIGINT

FLOAT

REAL

DOUBLE PRECISION

BOOLEAN

DATE

TIME

TIMESTAMP

INTERVAL

これらの名前は,“9.7  型優先順序リスト決定”で規定する型優先順序リスト  (type precedence list)  を構

成する

型指示子  (type designator)  中で用いる。

09

14

  次のように参照する。

  データ型 CHARACTER, CHARACTER VARYING 及び CHARACTER LARGE OBJECT は,まとめて文

字列型  (character string type)  として参照し,文字列型の値は,文字列  (character string)  として知られ

ている。

  データ型 BINARY,BINARY VARYING 及び BINARY LARGE OBJECT は,進オクテット列型  (binary 

string type)  として参照し,2 進オクテット列型の値は,進オクテット列  (binary string)  として参照す

る。

  データ型 CHARACTER LARGE OBJECT 及び BINARY LARGE OBJECT は,まとめて長大オブジェク

トデータ列型  (large object string type)  として参照し,長大オブジェクトデータ列型の値は,長大オブ

ジェクトデータ列  (large object string)  として参照する。

  文字列型及び 2 進オクテット列型は,まとめてデータ列型  (string type)  として参照し,データ列型の

値は,

データ列  (string)  として参照する。

  データ型 NUMERIC, DECIMAL, SMALLINT,INTEGER 及び BIGINT は,まとめて真数型  (exact numeric 

type)  として参照する。

  データ型 FLOAT, REAL 及び DOUBLE PRECISION は,まとめて概数型  (approximate numeric type)  と

して参照する。

  真数型及び概数型は,まとめて数型  (numeric type)  として参照する。数型の値は,数  (number)  とし

て参照する。

  データ型 TIME WITHOUT TIME ZONE 及び TIME WITH TIME ZONE は,まとめて時刻型  (time type)

として(強調が必要なときは,時刻帯付き時刻又は時刻帯なし時刻として)参照する。

  データ型 TIMESTAMP WITHOUT TIME ZONE 及び TIMESTAMP WITH TIME ZONE は,まとめて時刻

印型  (timestamp type)  として(強調が必要なときは,時刻帯付き時刻印又は時刻帯なし時刻印として)

参照する。

  データ型 DATE,TIME 及び TIMESTAMP は,まとめて日時型  (datetime type)  として参照する。

  日時型の値は,日時  (datetime)  として参照する。


15

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

  データ型 INTERVAL は,時間隔型  (interval type)  として参照する。時間隔型の値は,時間隔  (interval)

と呼ぶ。

各データ型は,関連付けられたデータ型記述子をもつ。データ型記述子の内容は,それが記述する特定

のデータ型によって決められる。データ型記述子は,データ型の識別,及びそのデータ型の値を特徴づけ

るために必要な全ての情報を含む。

6.1 <データ型>”で各データ型の意味特性を記述する。

4.1.3

ホスト言語データ型

この細分箇条は,ISO/IEC 9075-13 の“4.7.1  ホスト言語データ型”によって修正される。 

13

  各ホスト言語は,それ自体のデータ型をもち,データ型を記述するために類似の名前を用いるかもし

れないが,それらは,

SQL のデータ型とは別の異なるデータ型である。ホスト言語のデータ型への SQL

データ型の対応付けは,“11.60 <SQL 呼出しルーチン>”及び“21.1 <SQL 埋込みホストプログラム>”で記

述する。全ての

SQL データ型が全てのホスト言語中に対応するデータ型をもつわけではない。

4.1.4

データ型の用語

この細分箇条は,ISO/IEC 9075-9 の“4.1.2  データ型の用語”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“4.1.2  データ型の用語”によって修正される。 

宣言型 DT の構成要素  (constituent)  の概念は,次のように再帰的に定義する。

  DT は,DT の構成要素とする。

  DT が行型ならば,DT の各フィールドの宣言型は,DT の構成要素とする。

  DT が集まり型ならば,DT の要素型は,DT の構成要素とする。

  DT の構成要素のどの構成要素も,DT の構成要素とする。

次の条件のいずれか一つが真ならば,データ型 TY は,利用者定義型 UDT に用途依存  (usage-dependent)

とする。

  TY が UDT である。

  TY が参照型で,かつ,その被参照型が UDT である。

  TY が行型で,かつ,TY のいずれかのフィールドの宣言型が UDT に用途依存である。

  TY が集まり型で,かつ,TY の宣言要素型が UDT に用途依存である。

次のいずれかが真ならば,構造型 ST は,データ型 DT を直接基にする  (directly based on)。

  DT が ST のいずれかの属性の宣言型である。

  DT が ST の直接上位型である。

  DT が ST の直接下位型である。

  DT が ST と互換である。

データ型 DT が集まり型 CT の要素型ならば,CT は,DT を直接基にする。

データ型 DT が,行型 RT の記述子中に記述子が含まれるいずれかのフィールドの宣言型(又は,いず

れかのフィールドの定義域のデータ型)ならば,RT は,DT を直接基にする。

データ型 DT1 がデータ型 DT2 と互換か,DT1 が DT2 を直接基にするか,又は DT2 を基にするあるデー

タ型を DT1 が直接基にするならば,DT1 は,DT2 を基にする  (based on)。

二つのデータ型 T1 及び T2 は,T1 が T2 に代入可能で,T2 が T1 に代入可能で,かつ,それらの記述子


16

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

が同じデータ型名を含むならば,

互換  (compatible)  であるという。それらが行型ならば,更にそれらの対

応するフィールドの宣言型が対ごとに互換でなければならない。それらが集まり型ならば,更にそれらの

要素型が互換でなければならない。それらが参照型ならば,更にそれらの被参照型が互換でなければなら

ない。

注記 21  データ型“CHARACTER(n) CHARACTER SET CS1”及び“CHARACTER(m) CHARACTER SET

CS2”は,CS1CS2 のとき,同じデータ型名(CHARACTER)を含む記述子をもつが,相互に

代入可能ではない。したがって,これらは,互換ではない。

既定義データ型の値の順序付け及び比較には,それらの既定義データ型についての知識だけが要求され

る。しかし,構成型又は利用者定義型の値を比較し順序付けることを可能にするためには,追加情報が要

求される。ある型集合 に対して,ある型 の値を比較し順序付けるために,中の少なくとも一つの型

の順序付けについての情報が最初に要求されるならば,型 は,順序付けという。順序付けの定義は,

幾つかの S(すなわち,幾つかの型集合)に対して要求されるが,考えられるそのような全ての集合に対

しては,要求されない。

順序付けの一般的な定義は,次による。

型を とし,型集合を とする。次のいずれか一つが真ならば,は,順序付け  (S-ordered)  とする。

  が の要素である。

  が行型で,かつ,のいずれかのフィールドの宣言型が 順序付けである。

  が集まり型で,かつ,の要素型が 順序付けである。

  が構造型で,その構造型の比較形式が STATE で,かつ,のいずれかの属性の宣言型が 順序付け

である。

  が利用者定義型で,その利用者定義型の比較形式が MAP で,かつ,その<写像関数指定>によって

識別される

SQL 呼出し関数の戻り型が 順序付けである。

  が参照型で,その参照型が導出表現をもち,かつ,その<導出表現>によって列挙されるいずれかの

属性の宣言型が 順序付けである。

09

14

 順序付けの概念は,次の定義中で適用する。

  型 が 順序付けで,が長大オブジェクト型の集合ならば,は,LOB 順序付け  (LOB-ordered)  と

する。

  型 が 順序付けで,が配列型の集合ならば,は,配列順序付け  (array-ordered)  とする。

  型 が 順序付けで,が,元型が配列型である個別型の集合ならば,は,配列順序付け  とする。

  型 が 順序付けで,がマルチ集合型の集合ならば,は,マルチ集合順序付け  (multiset-ordered)  と

する。

  型 が 順序付けで,が,元型がマルチ集合型である個別型の集合ならば,は,マルチ集合順序

付け  とする。

  型 が 順序付けで,が行型の集合ならば,は,行順序付け  (row-ordered)  とする。

  型 が 順序付けで,が参照型の集合ならば,は,参照順序付け  (reference-ordered)  とする。

  型 が 順序付けで,が,EQUALS ONLY 比較形式をもつ個別型の集合ならば,は,DT-EC 順序

付け  (DT-EC-ordered)  とする[DT-EC は,“個別型等値性比較  (distinct type-equality comparison)”を意

味する。]

  型 が 順序付けで,が,FULL 比較形式をもつ個別型の集合ならば,は,DT-FC 順序付け


17

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

(DT-FC-ordered)  とする。

  型 が 順序付けで,が,比較形式をもたない個別型の集合ならば,は,DT-NC 順序付け

(DT-NC-ordered)  とする。

  型 が 順序付けで,が,EQUALS ONLY 比較形式をもつ構造型の集合ならば,は,ST-EC 順序

付け  (ST-EC-ordered)  とする。

  型 が 順序付けで,が,FULL 比較形式をもつ構造型の集合ならば,は,ST-FC 順序付け

(ST-FC-ordered)  とする。

  型 が 順序付けで,が,比較形式をもたない構造型の集合ならば,は,ST-NC 順序付け

(ST-NC-ordered)  とする。

  型 が ST-EC 順序付けか,ST-FC 順序付けか,又は ST-NC 順序付けのいずれかならば,は,ST 

序付け  (ST-ordered)  とする。

  型 が DT-EC 順序付けか,又は ST-EC 順序付けのいずれかならば,は,UDT-EC 順序付け

(UDT-EC-ordered)  とする[UDT は,“利用者定義型 (user-defined type)”を意味する。]。

  型 が DT-FC 順序付けか,又は ST-FC 順序付けのいずれかならば,は,UDT-FC 順序付け

(UDT-FC-ordered)  とする。

  型 が DT-NC 順序付けか,又は ST-NC 順序付けのいずれかならば,は,UDT-NC 順序付け

(UDT-NC-ordered)  とする。

4.1.5

異なることの特性

与えられた文脈内で二つの比較可能な値を区別することが可能ならば,それらは,異なる。

二つのナル値は,異ならない。

ナル値とナルでない値とは,異なる。

8.15 <DISTINCT 述語>”の一般規則が真  (True)  を戻すならば,二つのナルでない値は,異なる。

比較可能な二つの値が異なるかどうかの評価の結果は,決して

不定  (Unknown)  にはならない。比較可能

でない二つの値(例えば,比較型をもたない利用者定義型の値)が異なるかどうかの評価の結果は,定義

しない。

4.2

文字列

この細分箇条は,ISO/IEC 9075-10 の“4.2  文字列”によって修正される。 

4.2.1

文字列の導入

文字列は,文字の並びとする。文字列中の全ての文字は,単一の文字集合からの文字とする。文字列は,

長さをもち,その長さは,並び中の文字の個数とする。長さは,

0 又は正の整数とする。

文字列型  (character string type)  は,文字列型記述子によって記述される。文字列型記述子は,次の項目

を含む。

  特定の文字列データ型の名前(CHARACTER,CHARACTER VARYING 又は CHARACTER LARGE

OBJECT 。 NATIONAL CHARACTER , NATIONAL CHARACTER VARYING 及 び NATIONAL

CHARACTER LARGE OBJECT は , そ れ ぞ れ , CHARACTER , CHARACTER VARYING 及 び

CHARACTER LARGE OBJECT として表現される。)

  文字列型の文字単位での長さ又は最大長。

  文字列型の文字集合のカタログ名,スキーマ名及び文字集合名。

  文字列型の照合順のカタログ名,スキーマ名及び照合順名。


18

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

文字長大オブジェクト型  (character large object type)  は,特定の文字列型の名前が CHARACTER LARGE

OBJECT である文字列型とする。文字長大オブジェクト型の値は,長大オブジェクト文字列とする。

文字列型の文字集合は,陽に指定しても,暗に想定されてもよい。

<キーワード>の NATIONAL CHARACTER は,処理系定義の文字集合をもつ文字列型を指定するために

用いる。特殊な構文(

N’文字列’)は,その文字集合の定数を表現するために提供される。

二つの例外があるが,文字列の式は,文字集合が同じ文字列型の格納場所にだけ代入可能とする。それ

らの例外は,

4.2.8  国際文字集合”で規定する場合,及び処理系定義としてもよいようなその他の場合と

する。格納代入で,切捨てによって

<空白>でない文字が失われることになるならば,例外条件が引き起こ

される。取出し代入,又は

<CAST 指定>の評価で,切捨てによって文字が失われることになるならば,警

告条件が引き起こされる。

文字集合は,次の三つに分類される。各国規格又は国際規格によって定義される文字集合,

SQL 処理系

によって定義される文字集合,及び適用業務によって定義される文字集合。

国際文字集合  (Universal 

Character Set) (UCS)  として知られていて,[ISO10646]  及び  [Unicode]  で規定している文字集合,及びそ

れらの扱いは,“4.2.8  国際文字集合”で記述している。どの文字集合も,(U+0020 と等価な)<空白>文字

を含む。適用業務は,文字集合に新しい名前を割り当てることによって,最初の二つの分類のうちの一つ

から文字集合を定義する。それらの文字集合は,適用業務によって選ばれたどのスキーマ中にも

 “備わっ

ている

 (reside)”ものとして定義できる。規格又は SQL 処理系によって定義された文字集合は,各カタロ

グ中の(

INFORMATION_SCHEMA と名付けられた)情報スキーマ中に備わっており,規格によって定義

された照合順,並びに

SQL 処理系によって定義された照合順,文字変換及び符号変換も同様とする。

注記 22  情報スキーマは,[ISO9075-11]  で規定している。

4.2.2

文字列の比較

二つの文字列が比較可能であることは,それらが同じ文字集合をもつか,又はそれらのそれぞれの文字

集合の両方に適用可能な少なくとも一つの照合順が存在する(これは,文字集合が同じレパートリを共有

するときに限り,あり得る。)かのいずれかであることと同値とする。

照合順  (collation)  は,“二つの文字列が互いに未満,超える又は等しいの関係のうちのただ一つである

ことを決定する方法”として,

[ISO14651]  で規定されている。SQL 環境中で知られている各照合順は,一

つ以上の文字集合に適用可能とし,各文字集合に対して,一つ以上の照合順が適用可能で,それらの照合

順のうちの一つが

文字集合照合順  (character set collation)  として関連付けられる。

宣言型が文字列型ならば,その宣言型をもつものは,その文字列型の文字集合に適用可能な照合順と関

連付けることができる。これは,

宣言型照合順  (declared type collation)  として知られている。文字列型で

あるどの宣言型も,照合順起源をもち,それは,

なし  (none),暗黙  (implicit)  又は明示  (explicit)  のいずれ

かとする。

<データ型>によって陽又は暗に指定される宣言型照合順をもつ宣言型の照合順起源は,暗黙と

する。宣言型照合順をもつ宣言型の照合順起源が

暗黙でないならば,それは,明示とする。宣言型照合順

をもたない文字列型の式の照合順起源は,

なしとする。

文字列比較を陽又は暗に含む演算は,

文字比較演算  (character comparison operation)  とする。文字比較

演算のオペランドの少なくとも一つは,宣言型照合順をもたなければならない。

SQL 処理系に知られている幾つか又は全ての文字集合に対して,SQL セション照合順があってもよい

(“4.38 SQL セション”参照。)。

特定の文字比較で用いる照合順は,“9.15  照合順決定”で規定する。


19

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

二つの文字列式の比較は,比較のために用いる照合順に依存する(

9.15  照合順決定”参照)。長さが等

しくない値が比較されるとき,比較のための照合順が

NO PAD 特性をもち,短い方の値が長い方の値の先

頭部分と等しいならば,短い方の値は,長い方の値未満とみなす。比較のための照合順が

PAD SPACE 特

性をもつならば,その比較のために,短い方の値は,右側に

<空白>を連結することによって長い方の長さ

まで実効的に拡張される。

どの文字集合に対しても,少なくとも一つの照合順がある。

4.2.3

文字列を含む演算

4.2.3.1

正規表現構文

この規格は,正規表現のための二つの構文,

POSIX に基づく正規表現構文及び XQuery 正規表現構文を

利用する。

POSIX に基づく正規表現構文は,[POSIX]  で規定している構文と類似しているが,“8.6 <SIMILAR 述語

>”の一般規則で規定として定義している。

XQuery 正規表現構文は,[XQueryFO]  で規定として定義している。

4.2.3.2

文字列に作用し文字列を戻す演算子

<連結演算子>は,与えられた順序で文字列オペランドを結合した文字列を戻す演算子 || とする。

<文字部分列関数>は,数値で与えられた開始位置及び数値で与えられた長さに従って,与えられた文字

列から取り出した文字列を戻す

3 項関数 SUBSTRING とする。

<正規表現部分列関数>は,キーワード SIMILAR 及び UESCAPE で区別される 3 項関数 SUBSTRING と

する。その関数は,三つのパラメタ,すなわち,元の文字列,パターン文字列及びエスケープ文字をもつ。

その関数は,

POSIX に基づく正規表現を用いたパターン照合によって元の文字列から取り出した結果の文

字列を戻す。

  第 1 段階 (Step 1) :エスケープ文字の長さは,正確に 1 文字とする。図 1“<正規表現部分列関数>の

演算”で示すように,エスケープ文字は,パターン文字列を(R1R2 及び R3 として識別される)三

つの部分パターンに分割するために用いる

<2 重引用符>の二つの実現値に先行する

  第 2 段階 (Step 2) :元の文字列 が次の述語を満たさないならば,結果は,ナル値とする。

'S' SIMILAR TO 'R1' || 'R2' || 'R3'

  第 3 段階 (Step 3) :そうでなければ,次の条件を満たす最小で最初の の部分文字列に S1 がなるよ

うに,を二つの部分文字列 S1 及び S23 に分割する。

'S1' SIMILAR TO 'R1' AND

'S23' SIMILAR TO '(' || 'R2' || 'R3' || ')'

  第 4 段階 (Step 4) :次に,次の条件を満たす最小で最後の部分文字列に S3 がなるように,S23 を二つ

の部分文字列 S2 及び S3 に分割する。

'S2' SIMILAR TO 'R2' AND 'S3' SIMILAR TO 'R3'

<正規表現部分列関数>の結果は,S2 とする。


20

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

図 1-<正規表現部分列関数>の演算

<SUBSTRING_REGEX 関数>は,XQuery 正規表現パターンに対して文字列を探索し,一致する部分文字

列の一つの実現値を戻す関数

SUBSTRING_REGEX とする。

<TRANSLATE_REGEX 関数>は,XQuery 正規表現パターンに対して文字列を探索し,XQuery 置換文字

列 を 用 い て ,

XQuery 正規表 現パターン の一つ又は 全ての実現 値を置き換 えた文字列 を戻す関 数

TRANSLATE_REGEX とする。

<文字 OVERLAY 関数>は,数値で与えられた開始位置及び数値で与えられた長さで指定される部分文字

列を(置換文字列と呼ばれる)別の文字列に置き換えることによって,文字列引数を修正する関数

OVERLAY とする。部分文字列の長さが 0 のときは,その関数によって戻される文字列は,元の文字列か

ら何も取り除かれず,開始位置で元の文字列に置換文字列を挿入した結果とする。

<大文字小文字変換>は,与えられた文字列中の全ての小文字及びタイトル文字  (title case character)  を大

文字に変換する

 (UPPER) か,又は全ての大文字及びタイトル文字を小文字に変換する (LOWER) 関数の

組とする。小文字は,

Unicode 一般カテゴリクラス  (Unicode General Category class)“Ll”(lower-case letter)  中

の文字とする。大文字は,

Unicode 一般カテゴリクラス“Lu”(upper-case letter)  中の文字とする。タイトル

文字は,

Unicode 一般カテゴリクラス“Lt”(title-case letter)  中の文字とする。

注記 23  大文字小文字の対応は,必ずしも 1 対 1 とは限らない。大文字小文字変換の結果は,元の文字


21

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

列と文字単位で異なる長さの文字列であってもよい。例えば,

U+00DF,“ß”,Latin Small Letter

Sharp S は,大文字に変換したとき,“SS”になる。

<符号変換>は,与えられた文字列 S1 から導出される文字列 S2 を戻すために組込み提供の符号変換を呼

び出す関数とする。この規格で強制はされないが,S2 は,S1 と正確に同じ文字の並びであるが,異なる

文字符号化形式に従って符号化されていることを意図している。典型的な利用法は,文字列を

2 オクテッ

UCS から 1 オクテット Latin1 に,又はその逆に変換することであってもよい。

<TRIM 関数>は,第 1 引数の文字列から先行及び/又は後続する詰め込み文字を取り除いた文字列を戻

す関数とする。第

2 引数は,取り除くべき詰め込み文字が,先行する詰め込み文字か,後続する詰め込み

文字か,又はそれらの両方かを示す。第

3 引数は,取り除くべき詰め込み文字を指定する。

<文字文字変換>は,与えられた文字列の各文字を,必ずしも異ならない二つの文字集合の間の多対 1 又

1 対 1 の対応付けに従って変換する関数とする。この対応付けは,関数の部分として指定されるのでは

なく,

<変換名>で識別される外部関数とする。

文字集合のどの組に対しても,

<文字文字変換>によって呼び出してもよい 0 個以上の文字変換がある。

文字変換は,文字変換記述子によって記述される。文字変換記述子は,次の項目を含む。

  文字変換の名前。

  文字変換元の文字集合の名前。

  文字変換先の文字集合の名前。

  文字変換を実行する SQL 呼出しルーチンの特定名。

4.2.3.3

文字列を含む他の演算子

<LENGTH 式>は,関数の選択によって文字単位又はオクテット単位で,与えられた文字列の長さを真数

値で戻す。

<POSITION 式>は,ある文字列 S1 が別の文字列 S2 の中に現れるならば,その最初の位置を決定する。

S1 の長さが 0 ならば,S2 のどの値に対しても結果の位置は,1 とする。S1 が S2 中に現れないならば,0

が戻される。

<POSITION 式>の宣言型は,真数とする。

<LIKE 述語>は,三つの文字列に対して作用し,ブール値を戻す 3 項演算子 LIKE(又は逆の NOT LIKE)

を用いる。

LIKE は,文字列が,与えられた“パターン (pattern)”(これも文字列)と“一致する (match)”

かどうかを決定する。文字

<パーセント>及び<下線文字>は,それらがパターン中に現れるとき特殊な意味

をもつ。省略可能な第

3 引数は,“エスケープ文字”として知られ,<パーセント>,<下線文字>又は“エ

スケープ文字

 (escape character)”自体が特殊な意味なしでパターン中に必要なときに用いるただ一つの文

字を含む文字列とする。

<SIMILAR 述語>は,三つの文字列に対して作用し,ブール値を戻す 3 項演算子 SIMILAR(又は逆の NOT

SIMILAR)を用いる。SIMILAR は,POSIX に基づく正規表現を用いて,文字列が,与えられた“パター

ン”(これも文字列)と“一致する”かどうかを決定する。そのパターンは,“正規表現

 (regular expression)”

の形式でのパターンとする。この正規表現中では,幾つかの文字(

<左角括弧>,<右角括弧>,<左括弧>,

<右括弧>,<垂直棒>,<サーカムフレックス>,<負符号>,<正符号>,<アスタリスク>,<下線文字>,<

パーセント

>,<疑問符>,<左波括弧>)は,特殊な意味をもつ。省略可能な第 3 引数には,特殊文字又は

“エスケープ文字”自体が特殊な意味なしでパターン中に必要なときに用いる“エスケープ文字”を指定

する。

<POSITION_REGEX 式>は,XQuery 正規表現パターンに対して文字列を探索し,一致した部分文字列の


22

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

一つ実現値の開始位置を示す整数,又は

1 に終了位置を加えた整数を戻す関数 POSITION_REGEX とする。

<LIKE_REGEX 述語>は,XQuery 正規表現照合を実行する述語 LIKE_REGEX とする。

4.2.3.4

長大オブジェクト文字列を含む演算

長大オブジェクト文字列には,全てのデータ列演算を行うことができない。しかし,長大オブジェクト

文字列には,次の演算を行うことができる。

 <NULL 述語>。

 <LIKE 述語>。

 <SIMILAR 述語>。

 <POSITION 式>。

  <等号演算子>又は<不等号演算子>の<比較述語>。

  <等号演算子>又は<不等号演算子>の<限定比較述語>。

これらの制約の結果として,長大オブジェクト文字列は,(他の場所の中でも)次の場所では用いること

ができない。

  上記及び<EXISTS 述語>以外の述語。

  <一般集合関数>。

 <GROUP

BY 句>。

 <ORDER

BY 句>。

  <一意性制約定義>。

  <参照制約定義>。

 DISTINCT の<集合限定子>をもつ<問合せ指定>の<選択リスト>。

 UNION,INTERSECT 及び EXCEPT。

  <結合表>を構成するときの照合に用いる列。

  “4.2.3.2  文字列に作用し文字列を戻す演算子”及び“4.2.3.3  文字列を含む他の演算子”内で記述して

いる全ての演算が長大オブジェクト文字列に対して提供される。

4.2.4

文字レパートリ

SQL 処理系は,一つ以上の文字レパートリを提供する。これらの文字レパートリは,規格によって定義

されてもよいし,処理系定義であってもよい。

文字レパートリは,文字レパートリ記述子によって記述される。文字レパートリ記述子は,次の項目を

含む。

  文字レパートリの名前。

  文字レパートリの既定照合順の名前。

次の文字レパートリ名を,JIS X 3005 (ISO/IEC 9075)  規格群の部分として規定する。

 SQL_CHARACTER は,“5.1 <SQL 終端文字>”で規定する 88 個の<SQL 言語文字>から成る文字レパ

ートリとする。既定照合順の名前は,

SQL_CHARACTER とする。

 GRAPHIC_IRV は,[ISO646]  で規定している国際基準版 (International Reference Version) (IRV) の 95

個の図形文字の部分集合から成る文字レパートリとする。そのレパートリは,

SQL_CHARACTER の

レパートリを真に包含する集合とする。既定照合順の名前は,

GRAPHIC_IRV とする。

 LATIN1 は,[ISO8859-1]  で規定している文字レパートリとする。既定照合順の名前は,LATIN1 とす


23

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

る。

 ISO8BIT は,[ISO8859-1]  で規定している文字レパートリと,[ISO6429]  で規定している“制御文字”

とを組み合わせることによって構成される文字レパートリとする。このレパートリは,それぞれが正

確に

8 ビットから成り,数値 0 に対応する文字を除く全ての制御文字及び全ての図形文字を含むよう

255 個の全ての文字から成る。既定照合順の名前は,ISO 8 BIT とする。

 UCS は,[Unicode]  及び JIS X 0221 [ISO10646]  によって規定される国際文字集合 (Universal Character

Set)  のレパートリとする。既定照合順の名前が UCS_BASIC か又は UNICODE かは,処理系定義とす

る。

 SQL_TEXT は,全ての<SQL 言語文字>と,SQL 処理系によって提供される全ての文字集合中の全て

の文字とを含み,国際文字集合のレパートリの処理系定義の部分集合である文字レパートリとする。

既定照合順の名前は,

SQL_TEXT とする。

 SQL_IDENTIFIER は,<SQL 言語文字>,及び<通常識別子>で用いるために SQL 処理系が提供する他

の全ての文字から成る処理系定義の文字レパートリとする。既定照合順の名前は,

SQL_IDENTIFIER

とする。

各文字レパートリは,空白類(“3.1.6  第 2 部で規定する定義”参照)として定義される一つ以上の文字

を含む。

空白類は,

Unicode 一般カテゴリクラス  (Unicode General Category class)“Zs”,“Z1”及び“Zp”中の文

字に加えて,次の文字のいずれかとする。

 U+0009,

Horizontal

Tabulation

 U+000A,

Line

Feed

  U+000B, Vertical Tabulation

 U+000C,

Form

Feed

  U+000D, Carriage Return

  U+0085, Next Line

注記 24  この規格の規定は,どの文字集合も U+0020(<空白>)を除くこれらの文字のいずれかと等価な

文字を含むことを要求しない。しかし,空白類のこの定義の参照によって,これらのうちのい

ずれかと等価な全ての文字を空白類文字として認識しなければならないことを要求する。

Unicode 一般カテゴリクラス“Zs”,“Z1”及び“Zp”は,それぞれ,空白分離符号 (space separator),行

分離符号

 (line separator) 及び段落分離符号 (paragraph separator) である Unicode 文字に割り当てられる。

Unicode 一般カテゴリクラス“Z1”の要素の文字は,U+2028 (Line Separator)  だけである。Unicode 一般

カテゴリクラス“

Zp”の要素の文字は,U+2029 (Paragraph Separator) だけである。Unicode 一般カテゴリ

クラス“

Zs”の要素の文字は,U+0020 (Space),U+00A0 (No-Break Space),U+1680 (Ogham Space Mark),

U+180E (Mongolian Vowel Separator),U+2000 (En Quad),U+2001 (Em Quad),U+2002 (En Space),U+2003 (Em

Space),U+2004 (Three-Per-Em Space),U+2005 (Four-Per-Em Space),U+2006 (Six-Per-Em Space),U+2007

(Figure Space),U+2008 (Punctuation Space),U+2009 (Thin Space),U+200A (Hair Space),U+202F (Narrow

No-Break Space),U+205F (Space, Medium Mathematical)  及び U+3000 (Ideographic Space)  である。

注記 25 Unicode 一般カテゴリクラス“Zs”,“Z1”及び/又は“Zp”が修正され,新しい文字が追加さ

れるか又は文字が取り除かれるならば,そのとき,この規格への適合性に影響を与えることな


24

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

く,

SQL 処理系は,これらの修正を実装してもよい。

4.2.5

文字符号化形式

SQL 処理系は,提供する各文字レパートリに対して,一つ以上の文字符号化形式を提供する。これらの

文字符号化形式は,規格によって定義されてもよいし,処理系定義であってもよい。

文字符号化形式は,文字符号化形式記述子によって記述される。文字符号化形式記述子は,次の項目を

含む。

  文字符号化形式の名前。

  文字符号化形式を適用可能な文字レパートリの名前。

次の文字符号化形式名を,JIS X 3005 (ISO/IEC 9075)  規格群の部分として規定する。

 SQL_CHARACTER は,処理系定義の文字符号化形式とする。これは,SQL_CHARACTER 文字レパー

トリに適用可能とする。

 GRAPHIC_IRV は,各文字の符号化表現が  [ISO646]  で規定される文字符号化形式とする。これは,

GRAPHIC_IRV 文字レパートリに適用可能とする。

 LATIN1 は,[ISO8859-1]  で規定される文字符号化形式とする。これは,LATIN1 文字レパートリに適

用可能とする。

 ISO8BIT は,[ISO8859-1]  で規定され,[ISO6429]  で補われた文字符号化形式とする。LATIN1 の文字

に制限すると,

LATIN1 と同じ文字符号化形式とする。これは,ISO 8 BIT 文字レパートリに適用可能

とする。

 UTF32 は,JIS X 0221 [ISO10646]  で規定され,各文字が 4 オクテットで符号化される文字符号化形式

とする。これは,

UCS 文字レパートリに適用可能とする。

 UTF16 は,JIS X 0221 [ISO10646]  で規定され,各文字が 2 又は 4 オクテットで符号化される文字符号

化形式とする。これは,

UCS 文字レパートリに適用可能とする。

 UTF8 は,JIS X 0221 [ISO10646]  で規定され,各文字が 1~4 オクテットで符号化される文字符号化形

式とする。これは,

UCS 文字レパートリに適用可能とする。

 SQL_TEXT は,処理系定義の文字符号化形式とする。これは,SQL_TEXT 文字レパートリに適用可能

とする。

 SQL_IDENTIFIER は,処理系定義の文字符号化形式とする。これは,SQL_IDENTIFIER 文字レパート

リに適用可能とする。

SQL 処理系が特定の文字レパートリに対して二つ以上の文字符号化形式を提供するならば,その文字レ

パートリの文字符号化形式の優先順序を規定しなければならない。

UCS 文字レパートリに適用可能で,こ

の規格で規定する文字符号化形式の優先順序は,次による。

UTF8 < UTF16 < UTF32

4.2.6

照合順

SQL 処理系は,提供する各文字レパートリに対して,一つ以上の照合順を提供し,提供する各文字集合

に対して,一つ以上の照合順を提供する。照合順は,照合順記述子によって記述される。照合順記述子は,

次の項目を含む。

  照合順の名前。

  照合順を適用可能な文字レパートリの名前。


25

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

  照合順を適用可能な文字集合の名前のリスト。

  照合順が NO PAD 特性をもつか,又は PAD SPACE 特性をもつか。

次の照合順名を,JIS X 3005 (ISO/IEC 9075)  規格群の部分として規定する。

 SQL_CHARACTER は,処理系定義の照合順とする。これは,SQL_CHARACTER 文字レパートリに適

用可能とする。

 GRAPHIC_IRV は,[ISO646]  で定義される符号位置を符号なし整数として扱うことによって順序付け

が決定される照合順とする。これは,

GRAPHIC_IRV 文字レパートリに適用可能とする。

 LATIN1 は,[ISO8859-1]  で定義される符号位置を符号なし整数として扱うことによって順序付けが決

定される照合順とする。これは,

LATIN1 文字レパートリに適用可能とする。

 ISO8BIT は,[ISO8859-1]  で定義される符号位置を符号なし整数として扱うことによって順序付けが

決定される照合順とする。

LATIN1 の文字に制限すると,LATIN1 と同じ照合順になる。これは,ISO 8

BIT 文字レパートリに適用可能とする。

 UCS_BASIC は,文字列中の文字の分類された Unicode スカラ値によって順序付けが完全に決定される

照合順とする。これは,

UCS 文字レパートリに適用可能とする。どの文字レパートリも,UCS レパー

トリの部分集合なので,

UCS_BASIC 照合順は,どの文字集合にも潜在的に適用可能とする。

注記 26  文字の Unicode スカラ値は,符号なし整数として扱われるその文字の符号位置である。

 UNICODE は,[Unicode10]  で規定されているとおり,既定 Unicode 照合順要素表 (Default Unicode

Collation Element Table)  を用いて Unicode 照合順アルゴリズム (Unicode Collation Algorithm) を適用す

ることによって,順序付けが決定される照合順とする。これは,

UCS 文字レパートリに適用可能とす

る。どの文字レパートリも,

UCS レパートリの部分集合なので,UNICODE 照合順は,どの文字集合

にも潜在的に適用可能とする。

 SQL_TEXT は,処理系定義の照合順とする。これは,SQL_TEXT 文字レパートリに適用可能とする。

 SQL_IDENTIFIER は,処理系定義の照合順とする。これは,SQL_IDENTIFIER 文字レパートリに適用

可能とする。

SQL 処理系が提供する照合順は,規格定義照合順を含めて,処理系定義とする。

4.2.7

文字集合

この細分箇条は,ISO/IEC 9075-10 の“4.2.2  文字集合”によって修正される。 

規格,

SQL 処理系又は利用者によって定義される文字集合名を SQL の<文字集合指定>によって参照す

ることができる。

文字集合は,文字集合記述子によって記述される。文字集合記述子は,次の項目を含む。

  文字集合の名前。

  文字集合の文字レパートリの名前。

  文字集合の文字符号化形式の名前。

  文字集合の既定照合順の名前。

10

  次の文字集合名を,JIS X 3005 (ISO/IEC 9075)  規格群の部分として規定する。

10

 SQL_CHARACTER は,レパートリが SQL_CHARACTER で,文字符号化形式が SQL_CHARACTER

である文字集合とする。既定照合順の名前は,

SQL_CHARACTER とする。

 GRAPHIC_IRV は,レパートリが GRAPHIC_IRV で,文字符号化形式が GRAPHIC_IRV である文字集


26

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

合とする。既定照合順の名前は,

GRAPHIC_IRV とする。

 ASCII_GRAPHIC は,GRAPHIC_IRV の同義語とする。

 LATIN1 は,レパートリが LATIN1 で,文字符号化形式が LATIN1 である文字集合とする。既定照合順

の名前は,

LATIN1 とする。

 ISO8BIT は,レパートリが ISO8BIT で,文字符号化形式が ISO8BIT である文字集合とする。既定照合

順の名前は,

ISO8BIT とする。

 ASCII_FULL は,ISO8BIT の同義語とする。

 UTF32 は,レパートリが UCS で,文字符号化形式が UTF32 である文字集合とする。既定照合順の名

前が

UCS_BASIC か又は UNICODE かは,処理系定義とする。

 UTF16 は,レパートリが UCS で,文字符号化形式が UTF16 である文字集合とする。既定照合順の名

前が

UCS_BASIC か又は UNICODE かは,処理系定義とする。

 UTF8 は,レパートリが UCS で,文字符号化形式が UTF8 である文字集合とする。既定照合順の名前

UCS_BASIC か又は UNICODE かは,処理系定義とする。

 SQL_TEXT は,レパートリが SQL_TEXT で,文字符号化形式が SQL_TEXT である文字集合とする。

既定照合順の名前は,

SQL_TEXT とする。

 SQL_IDENTIFIER は,レパートリが SQL_IDENTIFIER で,文字符号化形式が SQL_IDENTIFIER であ

る文字集合とする。既定照合順の名前は,

SQL_IDENTIFIER とする。

最特定型が文字集合 CS をもつ文字列式の評価の結果は,CS の文字レパートリから取り出される文字か

ら成るように制約される。

表 1-文字集合の概要

文字集合 

文字レパートリ 

文字符号化形式 

照合順 

同義語 

GRAPHIC_IRV GRAPHIC_IRV GRAPHIC_IRV GRAPHIC_IRV

ASCII_GRAPHIC

ISO8BIT ISO8BIT ISO8BIT ISO8BIT

ASCII_FULL

LATIN1 LATIN1 LATIN1 LATIN1

SQL_CHARACTER SQL_CHARACTER SQL_CHARACTER

SQL_CHARACTER

SQL_TEXT SQL_TEXT SQL_TEXT SQL_TEXT

SQL_IDENTIFIER SQL_IDENTIFIER SQL_IDENTIFIER SQL_IDENTIFIER

UTF16 UCS  UTF16 UCS_BASIC 又は UNICODE  
UTF32 UCS  UTF32 UCS_BASIC 又は UNICODE  
UTF8 UCS  UTF8 UCS_BASIC 又は UNICODE  
注記 27 SQL 処理系は,追加の文字集合を提供してもよく,この規格で規定する文字集合に対して追加の文字符号化

形式及び照合順を提供してもよい。

4.2.8

国際文字集合

UCS 文字列  (UCS string)  は,文字レパートリが UCS で,文字符号化形式が UTF8,UTF16 又は UTF32

のうちの一つである文字列とする。どの二つの

UCS 文字列も,比較可能とする。

SQL 処理系は,全ての UCS 文字列が,[Unicode15]  で規定されている正規化形式 C (Normalization Form C)

(NFC),正規化形式 D (Normalization Form D) (NFD),正規化形式 KC (Normalization Form KC) (NFKC)  又は

正規化形式

KD (Normalization Form KD) (NFKD) のうちの一つで正規化されていると仮定してもよい。

<NORMALIZED 述語>は,特定の UCS 文字列が適合する正規化形式を確かめるために用いてもよい。適用

業務は,特定の

<正規形式>にするために,<NORMALIZE 関数>を用いてもよい。<NORMALIZE 関数>及


27

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

<NORMALIZED 述語>を除いて,非正規化 UCS 文字列に関するどの操作の結果も,処理系定義とする。

ある文字集合から別の文字集合への

UCS 文字列の変換は,自動的に行われる。

UCS 文字列中の非文字の検知は,例外条件を引き起こさせる。割り当てられていない符号位置の検知は,

行われない。

4.3

進オクテット列

4.3.1

進オクテット列の導入

2 進オクテット列 (binary string) は,それに関連付けられる文字集合も照合順ももたないオクテットの並

びとする。

2 進オクテット列型は,2 進オクテット列型記述子によって記述される。2 進オクテット列型記述子は,

次の項目を含む。

  データ型の名前 (BINARY,BINARY VARYING 又は BINARY LARGE OBJECT)。

  2 進オクテット列型のオクテット単位での長さ又は最大長。

2 進オクテット列は,2 進オクテット列型の格納場所にだけ代入可能とする。格納代入で,切捨てによっ

0 でないオクテットが失われることになるならば,例外条件が引き起こされる。取出し代入で,切捨て

によってオクテットが失われることになるならば,警告条件が引き起こされる。

4.3.2

進オクテット列の比較

全ての

2 進オクテット列の値は,比較可能とする。長大オブジェクト 2 進オクテット列の値が比較され

るとき,等しいとみなされるためには,それらは,(オクテット単位で)正確に同じ長さをもたなければな

らない。長大オブジェクト

2 進オクテット列の値は,等値性のためだけに比較することができる。

長大オブジェクト

2 進オクテット列値以外の 2 進オクテット列値に対して,等価でない二つの 2 進オク

テット列値を比較するとき,後続する

X’00’を意味があるとみなすかどうかは,処理系定義とする。

4.3.3

進オクテット列を含む演算

4.3.3.1

進オクテット列に作用し,進オクテット列を戻す演算子

<2 進オクテット連結>は,与えられた順序で 2 進オクテット列オペランドを結合した 2 進オクテット列

を戻す演算子

  ∥  とする。

<2 進オクテット部分列関数>は,引数及び戻り値が全て 2 進オクテット列であることを除いて,<文字部

分列関数

>と同一の構文及び意味をもつ 3 項関数とする。

<2 進オクテット OVERLAY 関数>は,第 1 引数,第 2 引数及び戻り値が全て 2 進オクテット列であるこ

とを除いて,

<文字 OVERLAY 関数>と同一の構文及び意味をもつ関数とする。

<2 進オクテット TRIM 関数>は,引数及び戻り値が全て 2 進オクテット列であることを除いて,<TRIM

関数

>と同一の構文及び意味をもつ関数とする。

4.3.3.2

進オクテット列を含む他の演算子

<LENGTH 式>は,与えられた 2 進オクテット列のオクテット単位での長さを真数値として戻す。

<POSITION 式>は,2 進オクテット列に適用されるとき,そのオペランドが 2 進オクテット列であるこ

とを除いて,文字列での対応する演算と同一の構文及び意味をもつ。

<LIKE 述語>は,2 進オクテット列に適用されるとき,そのオペランドが 2 進オクテット列であることを

除いて,文字列に関する対応する演算と同一の構文及び意味をもつ。

長大オブジェクト

2 進オクテット列は,次の演算中で用いることができない。

  <等号演算子>又は<不等号演算子>の<比較述語>,<等号演算子>又は<不等号演算子>の<限定比較述


28

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

>,及び<EXISTS 述語>以外の述語。

  <一般集合関数>。

 <GROUP

BY 句>。

 <ORDER

BY 句>。

  <一意性制約定義>。

  <参照制約定義>。

 DISTINCT の<集合限定子>をもつ<問合せ指定>の<選択リスト>。

 UNION,INTERSECT 及び EXCEPT。

  <結合表>を構成するときの照合に用いる列。

4.4

4.4.1

数の導入

数は,真数値か又は概数値のいずれかとする。どの二つの数も,比較可能とする。

数型は,数型記述子によって記述される。数型記述子は,次の項目を含む。

  特定の数型の名前(NUMERIC,DECIMAL,SMALLINT,INTEGER,BIGINT,FLOAT,REAL 又は

DOUBLE PRECISION)。

  数型の実装上の精度。

  真数型に対して,数型の実装上の位取り。

  精度(及び位取り)が 10 進で表現されるか又は 2 進で表現されるかを示す標識。

  宣言で用いられた数型の名前(ただし,INT 又は DEC が指定されたならば,それに対応する完全な名

前。

)。

  あるならば,数型の陽に宣言された精度。

  真数型に対して,あるならば,数型の陽に宣言された位取り。

精度又は位取りが陽に指定されないならば,記述子の対応する要素は,ナル値を実効的に含む。

6.1 <データ型>”の構文規則で許される同じ精度,位取り及び基数を幾つかの<真数型>がもつならば,

SQL 処理系は,それらの<真数型>を等価であるとみなすことができる。二つ以上の<真数型>が等価である

とき,

SQL 処理系は,<真数型>のその等価な種類を表現する標準形  (normal form)  として,これらの等価

<真数型>のうちの一つを選択する。標準形は,数型記述子中の真数型の名前を決定する。

同様に,

SQL 処理系は,“6.1 <データ型>”の構文規則で許される幾つかの<概数型>を等価であるとみな

すことができる。その場合,

SQL 処理系は,<概数型>のそれぞれの等価な種類を表現するために標準形を

選択し,標準形は,概数型の名前を決定する。

どの数型も,最小値は,

0 より小さく,最大値は,0 より大きい。

4.4.2

数の性質

真数型は,精度 及び位取り をもつ。は,特定の基数 で有効桁数を決定する正の整数とする。こ

こで,は,2 又は 10 のいずれかとする。は,負でない整数とする。位取り の真数型のどの値も,式

n×10

-S

の値とする。ここで,は,-R

P

 ≤ n < R

P

であるような整数とする。

注記 28  その範囲中の全ての値が,必ずしもその型の値である必要はない。

概数値は,仮数及び指数から成る。仮数は,符号付き数値とし,指数は,仮数の大きさを指定する符号

付き整数とする。概数値は,精度をもつ。精度は,仮数の有効

2 進桁数を指定する正の整数とする。概数

値は,指数によって決定される因子を,仮数に乗じた値とする。


29

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

<概数定数>  ANL は,(<仮数>と呼ばれる)<真数定数>,文字’E’又は’e’,及び(<指数>と呼ばれる)符

号付き整数から成る。が<仮数>の値で,が<指数>の値ならば,M *10

E

は,ANL の見掛けの値  (apparent 

value)  とする。ANL の実際の値は,処理系定義の規則に従った ANL の見掛けの値の近似とする。

数は,数型の格納場所にだけ代入可能とする。ある数の代入で,その最上位有効桁が失われることにな

るならば,例外条件が引き起こされる。最下位有効桁が失われるならば,例外条件を引き起こさないで,

処理系定義の丸め又は切捨てが発生する。算術の規則は,“6.27 <数値式>”で規定する。

真数値又は概数値が真数値の格納場所に代入されるときはいつでも,丸め又は切捨て後に上位有効桁を

保持するその値の近似が相手の宣言型で表現される。値は,相手の精度及び位取りをもつように変換され

る。切り捨てるか又は丸めるかの選択は,処理系定義とする。

<真数型>  に対する数値 の切捨てによって得られる近似は,中の次のような値 とする。が V

より

0 に近くなく,かつ,と との間に 中の値が存在しない。

<真数型> に対する数値 の丸めによって得られる近似は,中の次のような値 とする。と数値 V

との差の絶対値が 中の二つの連続する数値間の差の絶対値の半分以下である。そのような値 が二つ以

上あるならば,どれをとるかは,処理系定義とする。

与えられた真数型中の最小値と最大値との間の全ての数値は,最小値及び最大値を含めて,その型に対

する丸め又は切捨てによって得られる近似をもつ。他のどの数値がそのような近似をもつかは,処理系定

義とする。

<概数型> に対する数値 の切捨て又は丸めによって得られる近似は,中の次のような値 とする。

数値 と との間にある数値で,とは異なる数値が 中に存在しない。

そのような値 が二つ以上あるならば,どれをとるかは,処理系定義とする。与えられた概数型に対し

てどの数値が丸め又は切捨てによって得られる近似をもつかは,処理系定義とする。

真数値又は概数値が概数値の格納場所に代入されるときはいつでも,その値の近似が相手の宣言型で表

現される。値は,相手の精度をもつように変換される。

数の演算は,

6.27  <数値式>”で規定する場合を除いて,処理系定義の制限の範囲内で,算術の通常の

規則に従って実行される。

4.4.3

数を含む演算

通常の算術演算子の和,差,積,商,単項プラス及び単項マイナスと同様に,数を戻す次の関数がある。

 <POSITION 式>(“4.2.3  文字列を含む演算”及び“4.3.3  2 進オクテット列を含む演算”参照)は,引

数として二つのデータ列をとり,整数を戻す。

 <LENGTH 式>(“4.2.3  文字列を含む演算”及び“4.3.3 2 進オクテット列を含む演算”参照)は,デー

タ列の引数に作用し,整数を戻す。

 <EXTRACT 式>(“4.6.4  日時及び時間隔を含む演算”参照)は,日時又は時間隔の引数に作用し,真

数を戻す。

  <基数式>(“4.10.5  配列を含む演算”及び“4.10.6  マルチ集合を含む演算”参照)は,集まりの引数

に作用し,整数を戻す。

  <最大基数式>(“4.10.5  配列を含む演算”参照)は,配列の引数に作用し,整数を戻す。

  <絶対値式>は,数の引数に作用し,同じ最特定型でその絶対値を戻す。

  <剰余式>は,位取りが 0 の二つの真数の引数に作用し,第 1 引数を第 2 引数で除した剰余(余り)を

位取り

0 の真数として戻す。

  <自然対数>は,引数の自然対数を計算する。


30

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

  <指数関数>は,指数関数を計算,すなわち,e(自然対数の底)を引数でべき乗する。

  <べき関数>は,第 1 引数を第 2 引数でべき乗する。

  <平方根>は,引数の平方根を計算する。

  <下限関数>は,引数以下の最大の整数を計算する。

  <上限関数>は,引数以上の最小の整数を計算する。

  <幅バケット関数>は,四つの引数をもち,第 2 引数と第 3 引数との間の数の範囲の均等幅の区間に最

初の引数を当てはめることによって,

0 と最後の引数に 1 を加えた値との間の整数を戻す関数とする。

2 引数と第 3 引数との間の範囲外の値には,0 か又は最後の引数に 1 を加えた値が割り当てられる。

注記 29  図 2“WIDTH_BUCKET の意味の図解”で<幅バケット関数>の意味を示す。

図 2WIDTH_BUCKET の意味の図解

4.5

ブール型

4.5.1

ブール型の導入

ブールデータ型は,異なる真理値の

真  (True)  及び偽  (False)  を含む。NOT NULL 制約によって禁止さ

れない限り,ブールデータ型は,ナル値として,真理値の

不定  (Unknown)  も提供する。この規定では,ブ

ールデータ型のナル値と,

SQL の<述語>,<探索条件>又は<ブール値式>の結果の真理値である不定  とを

区別しない。それらは,正確に同じものを意味するため,交換可能なものとして用いてもよい。

ブールデータ型は,ブールデータ型記述子によって記述される。ブールデータ型記述子は,次の項目を

含む。

  ブールデータ型の名前 (BOOLEAN)

4.5.2

ブール値の比較及び代入

全てのブール値及び

SQL 真理値は,比較可能とし,ブール型の格納場所に代入可能とする。真  の値は,

偽  の値よりも大きい。ナル値を含むどの比較も,不定  の真理値も,不定  の結果を戻す。真  及び偽  の値

は,ブールデータ型をもつどの格納場所に代入してもよい。

不定  又はナル値の代入は,相手のナル可能特

性に従う。

4.5.3

ブール値を含む演算

4.5.3.1

ブール値を戻すブール値の演算

単項ブール演算子

NOT,並びに 2 項ブール演算子 AND 及び OR は,ブール値のオペランドをとり,ブ

ール値の結果を戻す(表 11“AND ブール演算子のための真理値表”及び表 12“OR ブール演算子のための

真理値表”参照)。


31

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

4.5.3.2

ブール値を含む他の演算子

SQL のどの<述語>,<探索条件>及び<ブール値式>も,ブール値の結果を戻す演算子とみなしてもよい。

4.6

日時及び時間隔

4.6.1

日時及び時間隔の導入

日時データ型は,日時データ型記述子によって記述される。時間隔データ型は,時間隔データ型記述子

によって記述される。

日時データ型記述子は,次の項目を含む。

  特定の日時データ型の名前(DATE,TIME WITHOUT TIME ZONE,TIMESTAMP WITHOUT TIME

ZONE,TIME WITH TIME ZONE 又は TIMESTAMP WITH TIME ZONE)。

  TIME WITHOUT TIME ZONE,TIMESTAMP WITHOUT TIME ZONE,TIME WITH TIME ZONE 又は

TIMESTAMP WITH TIME ZONE 型ならば,<時刻小数秒精度>の値。

時間隔データ型記述子は,次の項目を含む。

  時間隔データ型の名前 (INTERVAL)。

  時間隔データ型が年月時間隔か又は日時刻時間隔かを示す標識。

  時間隔データ型の精度を記述する<時間隔修飾子>。

時間隔データ型の値は,常に符号付きとする。

どの日時データ型又は時間隔データ型も,暗に想定される

位置単位での長さ  (length in positions)  をもつ。

ある日時データ型又は時間隔データ型 DT の値を で示す。DT の位置単位での長さは,全ての に対し

て一定とする。位置単位での長さは,与えられた日時データ型又は時間隔データ型の任意の値を表現する

ためにとられる文字集合

SQL_TEXT での文字の個数とする。

日時型又は時間隔型 に対する日時又は時間隔の値 の丸めによって得られる近似は,中の次のよう

な値 とする。と数値 との間の差の絶対値が 中の二つの連続する日時又は時間隔の値の間の差の絶

対値の半分以下である。そのような値 が二つ以上あるならば,どれをとるかは,処理系定義とする。

注記 30  この規格で結合を規定するどのホスト言語にも,この規格で規定する日時及び時間隔のデータ

型に対応するデータ型はない。それらの言語の一つで書かれた適用業務プログラムが

SQL 処理

系からホスト言語プログラムにこれらのデータ型の値を受け渡さなければならないときには,

そのホスト言語が対応するデータ型をもつ,あるデータ型の値にそれらの値を変換しなければ

ならない。ある文字列型の値にこれらのデータ型の値を変換するために,

<CAST 指定>の規則

が典型的に用いられる。このような値をホストプログラムから

SQL 処理系に受け渡すときも,

同様の解決が必要となる。

4.6.2

日時

表 2“日時値中のフィールド”は,日時値を構成できるフィールドを規定する。日時値は,これらのフ

ィールドの部分集合から成る。示された全てのフィールドが部分集合中に必要なわけではないが,最初に

含まれる

<基本日時フィールド>と最後に含まれる<基本日時フィールド>との間の表中に現れる全てのフ

ィールドも,含まれなければならない。

<時刻帯フィールド>のいずれかが部分集合に含まれるならば,そ

れらの両方が含まれなければならない。


32

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

表 2-日時値中のフィールド

キーワード 

意味 

YEAR

MONTH

年の中の月

DAY

月の中の日

HOUR

日の中の時

MINUTE

時の中の分

SECOND

分の中の秒及び場合によって小数秒

TIMEZONE_HOUR

時刻帯時差の時の値

TIMEZONE_MINUTE

時刻帯時差の分の値

<基本日時フィールド>には,有効順序がある。その順序は,最上位有効から最下位有効へ,YEAR,MONTH,

DAY,HOUR,MINUTE 及び SECOND の順とする。

SECOND 以外の<基本日時フィールド>は,グレゴリオ暦を用いた日付の自然な規則に従った負でない整

数値を含む。しかし,

SECOND は,秒値中の小数点以下の小数の桁数を示す負でない真数値の<時刻小数

秒精度

>をもつように定義することができる。

この規格では,

3 種類の日時データ型を規定する。

 DATE  -  <基本日時フィールド> YEAR,MONTH 及び DAY を含む。

 TIME  -  <基本日時フィールド> HOUR,MINUTE 及び SECOND を含む。

 TIMESTAMP  -  <基本日時フィールド> YEAR,MONTH,DAY,HOUR,MINUTE 及び SECOND

を含む。

日時型の項目は,それらが同じ

<基本日時フィールド>をもつときに限り,比較可能とする。

WITH TIME ZONE を指定する日時データ型は,時刻帯付き日時  (datetime with time zone)  のデータ型と

するが,

WITHOUT TIME ZONE を指定する日時型は,時刻帯なし日時  (datetime without time zone)  のデー

タ型とする。

地球上の表面は,時刻帯と呼ばれる地域に分割され,その中では,全ての正確な時計が

地方時刻  (local 

time)  として知られている同じ時刻を示す。地方時刻は,UTC(協定世界時)に時刻帯時差  (time zone 

displacement)  を加えた時刻と等しい。その時刻帯時差は, INTERVAL'-14:00' HOUR TO MINUTE と

INTERVAL'+14:00' HOUR TO MINUTE との間の範囲の時間隔の値とする。この時刻帯時差は,時刻帯の中

全体で一定であり,夏時間を適用するところでは夏時間の最初及び最後に変更される。

データ型

TIME WITHOUT TIME ZONE 又は TIMESTAMP WITHOUT TIME ZONE の日時値は,地方時刻

を表してもよい。これに対して,データ型

TIME WITH TIME ZONE 又は TIMESTAMP WITH TIME ZONE

の日時値は,

UTC を表す。

UTC は,恒星時との一致を図るために,秒の省略又は“うるう秒 (leap second)”の挿入によって調整さ

れる。これによって,非常にまれ(希)ではあるが,特定の分が厳密には

59 秒,61 秒又は 62 秒含むこと

がある。

SQL 処理系がうるう秒を提供するかどうか,及びそれが日時及び時間隔の算術演算の結果に反映

されるかどうかは,処理系定義とする。

利用者の便宜のため,時刻帯付き日時値が時刻帯なし日時値から暗に導出されるべきときに(例えば,

単純な代入操作において)はいつでも,

SQL は,時刻帯なし日時値を地方時刻として想定し,UTC を求め

るために,その日時値から

SQL セションの現行既定時刻帯時差を差し引いて,その結果とその時刻帯時差

を関連付ける。


33

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

逆に,時刻帯なし日時値が時刻帯付き日時値から暗に導出されるべきときにはいつでも,

SQL は,時刻

帯付き日時値を

UTC として想定し,地方時刻を求めるために,その日時値に時刻帯時差を加えて,その結

果は,時刻帯時差なしで,地方時刻とする。

<CAST 指定>によって実装される上記の原理は,表 3“日時データ型の変換”にまとめた様々な日時デ

ータ型の間のデータ型変換になる。

表 3-日時データ型の変換

変換相手 

DATE

TIME

WITHOUT

TIME ZONE

TIME WITH

TIME ZONE

TIMESTAMP

WITHOUT

TIME ZONE

TIMESTAMP

WITH

TIME ZONE

  変換

DATE

自明

 

提供されない

 

提供されない

 

年月日を複写。時分
秒に

0 を設定。

SV

TSw/oTZ

TSw/TZ

TIME

WITHOUT

TIMEZONE

提供されない

 

自明

 

TV.UTC = 
  SV-STZD

24 を法とする)。

TV.TZ=STZD

CURRENT_DATE か
ら 日 付 フ ィ ー ル ド
に,SV から時刻フ
ィールドに複写。

SV

TSw/oTZ

TSw/TZ

TIME WITH

TIMEZONE

提供されない

 

SV.UTC+SV.TZ 

24 を法とする)

自明

 

SV

TSw/TZ

TSw/oTZ

CURRENT_DATE
から日付フィール
ドに,SV から時刻
及び時刻帯フィー
ルドに複写。

TIMESTAMP

WITHOUT

TIMEZONE

SV か ら 日 付
フィールドを
複写

SV から時刻フィ
ールドを複写

SV

TSw/TZ

TIMEw/TZ

自明

 

TV.UTC = 
  SV-STZD ;

TV.TZ=STZD

TIMESTAMP

WITH

TIMEZONE

SV

TSw/oTZ

DATE

SV

TSw/oTZ

TIMEw/oTZ

SV から時刻及び
時 刻 帯 フ ィ ー ル
ドを複写

SV.UTC + SV.TZ

自明

 

ここで,記号の意味は,次のとおりとする。

SV

変換元の値。

TV

変換相手の値。

UTC

SV 又は TV の UTC 構成要素(変換元又は変換相手が時刻帯をもつ場合)

TZ

SV 又は TV の時刻帯時差(変換元又は変換相手が時刻帯をもつ場合)

STZD SQL セションの既定時刻帯時差。 

矢印の前の型から後の型への型変換を意味する。

TIMEw/TZ

TIME WITH TIME ZONE。

TIMEw/oTZ TIME

WITHOUT TIME ZONE。

TSw/TZ TIMESTAMP

WITH

TIME

ZONE。

TSw/oTZ TIMESTAMP

WITHOUT TIME ZONE。

代入元及び代入相手が両方とも

DATE 型,(WITH TIME ZONE 若しくは WITHOUT TIME ZONE が,指

定されるか若しくは暗に想定されるかどうかにかかわらず,

)両方とも

TIME 型,又は(WITH TIME ZONE

若しくは

WITHOUT TIME ZONE が,指定されるか若しくは暗に想定されるかどうかにかかわらず,)両方

とも

TIMESTAMP 型のときに限り,日時は,格納場所に代入可能とする。

4.6.3

時間隔

時間隔

 (interval) には,2 種類ある。1 種類は,年月  (year-month)  時間隔と呼ばれ,陽に指定されるか又

は暗に想定される時間隔精度をもち,

YEAR 及び MONTH 以外のフィールドを含まないが,YEAR 及び


34

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

MONTH の両方を含む必要はない。もう 1 種類は,日時刻  (day-time)  時間隔と呼ばれ,陽に指定されるか

又は暗に想定される時間隔精度をもち,

YEAR 又は MONTH 以外の任意のフィールドを含む。

表 4“年月 INTERVAL の値中のフィールド”が年月時間隔を構成するフィールドを規定する。年月時間

隔は,これらのフィールドの連続する部分集合から成る。

表 4-年月 INTERVAL の値中のフィールド

キーワード 

意味 

YEAR

年数

MONTH

月数

表 5“日時刻 INTERVAL の値中のフィールド”が日時刻時間隔を構成するフィールドを規定する。日時

刻時間隔は,これらのフィールドの連続する部分集合から成る。

表 5-日時刻 INTERVAL の値中のフィールド

キーワード 

意味 

DAY

日数

HOUR

時数

MINUTE

分数

SECOND

秒数及び場合によって小数秒数

時間隔のいずれかの型の値を構成するフィールドの実際の部分集合は,

<時間隔修飾子>によって定義さ

れ,この部分集合がその値の精度として知られている。

時間隔型の値の中で,最初のフィールドは,関連付けられた

<時間隔修飾子>の<時間隔先行フィールド

精度

>によってだけ制約される。表 6“INTERVAL の値中のフィールドに対する正しい値”が後に続くフィ

ールドの値に対する制約を規定する。

表 6INTERVAL の値中のフィールドに対する正しい値

キーワード INTERVAL フィールドの正しい値 

YEAR <時間隔先行フィールド精度>によるものを除き制約なし 
MONTH

(年の中の)月数

 (0-11)

DAY <時間隔先行フィールド精度>によるものを除き制約なし 
HOUR

(日の中の)時数

 (0-23)

MINUTE

(時の中の)分数

 (0-59)

SECOND

(分の中の)秒数

 (0-59.999...)

SECOND 以外の時間隔フィールドの値は,整数とし,最初のフィールドでないとき,その精度は,2 と

する。しかし,

SECOND は,秒数値中の小数点以下の小数の桁数を示す<時間隔小数秒精度>をもつように

定義することができる。最初のフィールドでないとき,

SECOND の小数点より上位の精度は,2 とする。

時間隔型の項目を構成するフィールドは,グレゴリオ暦の定義によっても制約される。

年月時間隔は,他の年月時間隔とだけ比較可能とする。二つの年月時間隔が異なる時間隔精度をもつな

らば,それらの間のどの演算のためにも,一方の年月時間隔の最上位有効フィールド若しくは一方の年月

時間隔の最下位有効フィールドのいずれか,又はその両方に新しい

<基本日時フィールド>を追加すること

によって同じ精度に実効的に変換される。新しい最下位有効

<基本日時フィールド>には,値 0 が代入され

る。新しい最上位有効日時フィールドを追加する必要があるとき,関連する値は,グレゴリオ暦の日付及


35

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

び時刻の自然な規則に従う方法で新しい精度に実効的に変換される。

日時刻時間隔は,他の日時刻時間隔とだけ比較可能とする。二つの日時刻時間隔が異なる時間隔精度を

もつならば,それらの間のどの演算のためにも,一方の日時刻時間隔の最上位有効フィールド若しくは一

方の日時刻時間隔の最下位有効フィールドのいずれか,又はその両方に新しい

<基本日時フィールド>を追

加することによって同じ精度に実効的に変換される。新しい最下位有効

<基本日時フィールド>には,値 0

が代入される。新しい最上位有効日時フィールドを追加する必要があるとき,関連する値は,グレゴリオ

暦の日付及び時刻の自然な規則に従う方法で新しい精度に実効的に変換される。

4.6.4

日時及び時間隔を含む演算

表 7“日時及び時間隔を含む有効な演算子”は,日時及び時間隔のオペランドを含む算術式の宣言型を

規定する。

表 7-日時及び時間隔を含む有効な演算子

第 オペランド 

演算子 

第 オペランド

結果の型 

日時

日時

時間隔

日時

+又は-

時間隔

日時

時間隔

日時

日時

時間隔

+又は-

時間隔

時間隔

時間隔

*又は/

時間隔

数値

 *

時間隔

時間隔

日時型又は時間隔型の値を含む算術演算は,日付及び時刻の自然な規則に従い,グレゴリオ暦に従った

正しい日時又は時間隔の結果をもたらす。

日時型の値を含む演算は,日時値が比較可能であることを要求する。時間隔型の値を含む演算は,時間

隔値が比較可能であることを要求する。

日時及び時間隔を含む演算は,日時オペランドの時刻帯を保存する。日時オペランドが時刻帯時差を含

まないならば,結果は,時刻帯時差をもたない。

<OVERLAPS 述語>は,演算子 OVERLAPS を用いて,二つの時間上の期間が時刻で重なっているかどう

かを決定する。時間上の期間は,

(始まり及び終わりの)日時の組,又は始まりの日時及び時間隔のいずれ

かとして指定する。期間の長さが

0 より大きいならば,その期間は,下端点以上で,かつ,上端点未満の

全ての時点から成る。期間の長さが

0 と等しいならば,その期間は,下端点の単一の時点から成る。二つ

の期間が少なくとも一つの時点を共有するならば,それらの期間は,重なる。

<EXTRACT 式>は,日時又は時間隔に作用し,日時又は時間隔の一つの構成要素の値を表現する真数値

を戻す。

<時間隔絶対値関数>は,時間隔の引数に作用し,それと同じ最特定型で絶対値を戻す。

4.7

利用者定義型

4.7.1

利用者定義型の導入

この細分箇条は,ISO/IEC 9075-13 の“4.8.1  利用者定義型の導入”によって修正される。 

13

  利用者定義型 (user-defined type) は,スキーマオブジェクトとし,<利用者定義型名>によって識別さ

れる。利用者定義型の定義は,その型の値の表現を指定する。利用者定義型は,

個別型  (distinct type)  又は

構造型  (structured type)  のいずれかとする。個別型の表現は,元型  (source type)  として知られている単一

の既定義型又は集まり型とする。構造型の表現は,属性定義のリストから成る。属性定義は,利用者定義

型の表現を定義するというが,実際には,これらは,利用者定義型のインタフェースの部分となる幾つか


36

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

の関数(観測関数及び変異関数)を暗に定義する。利用者定義型の値の物理的な表現は,処理系依存とす

る。

利用者定義型の定義は,その利用者定義型の SQL 呼出しメソッド  (SQL-invoked method)  又は単にメソッ

ド  (method)  を識別する一つ以上の<メソッド指定>から成る<メソッド指定リスト>を含んでもよい。

4.7.2

個別型

個別型の定義は,その型の名前及びその型の元型の名前を指定する。

個別型の定義は,

FINAL を指定してもよい。指定しなければ,FINAL が暗に想定される。その結果とし

て,個別型の定義は,

<下位型句>を指定してはならない。

個別型 DT の定義は,DT の値をその型の元型 ST の値に変換する SQL 呼出し関数 F1ST の値を DT 

値に変換する

SQL 呼出し関数 F2,及び F1  を FROM-SQL 関数とし,F2  を TO-SQL 関数とする変換 TR

を暗に作成する。

元型が集まり型 CT である個別型 DT は,CT の要素型  (element type)  である要素型をもつという。DT 

値は,その値中の要素の個数である

基数  (cardinality)  をもつ。元型が配列型 AT である個別型は,AT の最

大基数である

最大基数  (maximum cardinality)  をもつという。

4.7.3

構造型

4.7.3.1

構造型の導入

構造型の定義は,その型の名前及び

<属性定義>のリストを指定する。各<属性定義>は,属性の名前,属

性のデータ型,及び属性の省略可能な既定値を指定する。

構造型の定義は,

INSTANTIABLE 又は NOT INSTANTIABLE を指定してもよい。指定しなければ,

INSTANTIABLE が暗に想定される。構造型 ST の定義が NOT INSTANTIABLE を指定するならば,ST のど

の値の最特定型も,必然的に ST の真下位型のいずれかとなる。

構造型の定義は,

FINAL 又は NOT FINAL のいずれかを指定しなければならない。構造型の定義が FINAL

を指定するならば,

<下位型句>又は NOT INSTANTIABLE のいずれも指定してはならない。

4.7.3.2

観測関数及び変異関数

どの構造型のどの属性にも,ただ一つの暗に定義される観測関数,及びただ一つの暗に定義される変異

関数が対応している。これらは,両方とも

SQL 呼出し関数とする。さらに,変異関数は,型保持関数とす

る。

構造型 の属性の名前を とし,のデータ型を AT とする。この属性のための観測関数の署名は,

FUNCTION A(T)  とし,その結果データ型は,AT とする。この属性のための変異関数の署名は,FUNCTION

A(T RESULT, AT)  とし,その結果データ型は,とする。

データ型 の値を とし,データ型 AT の値を AV とする。呼出し A (VAV)  は,“A (MV)  が AV と同一”

で,かつ,のどの属性 A' (A'A)  に対しても“A' (MV)  が A' (V)と同一”であるような MV を戻す。MV

の最特定型は,の最特定型とする。

4.7.3.3

構成子

各構造型 ST に,一つの暗に定義される構成関数  (constructor function)  が関連付けられることは,ST 

実現値生成可

 (instantiable) であることと同値とする。

構造型 の名前を TN とする。のための構成関数の署名は,TN ( ) とし,その結果データ型は,

する。呼出し TN ( )  は,ナルでなく,かつ,のどの属性 に対しても,A (V)  が の既定値を戻すよう

な,値 を戻す。の最特定型は,とする。

実現値生成可の,どの構造型 ST に対しても,0 個以上の SQL 呼出し構成メソッドを指定することがで


37

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

きる。それらのメソッドの名前は,それらを指定する型の名前と等価でなければならない。

注記 31 SQL 呼出し構成メソッドは,オーバロードできない原メソッドである。SQL 呼出し構成メソッ

ドと

SQL 呼出し通常関数とが等価な関数名をもち,メソッドの拡張パラメタリストと関数のパ

ラメタリストの最初のパラメタとの型が同じで,(あるならば,)残りの対応するパラメタの型

が“9.20  データ型の同一性”の構文規則に従って同一であるような SQL 呼出し構成メソッドと

SQL 呼出し通常関数とが存在してもよい。

4.7.3.4

下位型及び上位型

<利用者定義型定義>の<下位型句>の結果として,Ta が Tb の下位型であるような互換でない二つの構造

型 Ta と Tb とが存在してもよい(“11.51 <利用者定義型定義>”参照)。

型 Ta が型 Tb の真下位型であり,Tb の真下位型で,かつ,Ta の真上位型であるような型 Tc が存在しな

いならば,Ta は,Tb の直接下位型  (direct subtype)  とする。

次のうちの一つが当てはまるならば,型 Ta は,型 Tb の下位型とする。

  Ta と Tb とが互換である。

  Ta が Tb の直接下位型である。

  Ta がある型 Tc の下位型で,かつ,Tc が Tb の直接下位型である。

同様に,Ta が Tb の直接下位型であるような特定の場合には,Tb は,Ta の上位型で,かつ,Ta の直接

上位型とする。

Ta が Tb の下位型で,かつ,Ta と Tb とが互換でないならば,Ta は,Tb の真下位型とし,Tb は,Ta 

真上位型とする。型は,それ自体の真上位型ではあり得ない。

真上位型をもたない型は,

最上位型  (maximal supertype)  とする。真下位型をもたない型は,末端の型

(leaf type)  とする。

最上位型を Ta とし,Ta の下位型を とする。(Ta 自体を含む)Ta の全ての下位型の集合を,又は(等

価的に)Ta の下位型族  (subtype family)  と呼ぶ。下位型族が二つ以上の最上位型をもつことは許されない。

型 の全ての値は,あるならば,の直接上位型の値とする。型 の値 は,MST が の下位型で,

かつ,が MST のどの真下位型の値でもないような,ただ一つの最特定型 MST をもつ。値の最特定型は,

末端の型である必要はない。例えば,ある型構造は,二つの下位型として

STUDENT 及び EMPLOYEE を

もつ型

PERSON から成るが,STUDENT は,二つの直接下位型 UG_STUDENT 及び PG_STUDENT をもつ

かもしれない。

STUDENT のための構成関数の呼出し STUDENT ( ) は,最特定型が末端の型ではない

STUDENT の値を戻す。

Ta が型 Tb の下位型ならば,Tb の値が要求されるところではどこでも,Ta の値を用いることができる。

詳細には,Ta の値を,型 Tb の列に格納すること,データ型 Tb の入力 SQL パラメタのための引数として
代用すること,及び結果データ型が Tb である SQL 呼出し関数の呼出しの戻り値にすることができる。

型 が型集合 中の全ての型の上位型で,かつ,中の全ての型の上位型であるどの型に対しても下位

型であるならば,は,の最小共通上位型  (minimal common supertype)  であるという。

注記 32  下位型族は,ただ一つの最上位型をもつので,二つの型が共通の下位型をもつならば,それら

は,最小共通上位型も,もたなければならない。したがって,同じ下位型族から導出されるど

の型集合に対しても,その集合中の全ての型の最小共通上位型である要素がその族の中に存在

する。

構造型 ST が実現値生成不可 (not instantiable) と定義されているならば,ST のどの値の最特定型も,必


38

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

然的に ST の真下位型となる。

利用者定義型 UDT の定義が FINAL を指定するか又は暗に想定されるならば,UDT は,真下位型をもた

ない。結果として,UDT のどの値の最特定型も,必然的に UDT となる。

ある型の直接下位型を利用者が定義するためには,その利用者は,その型に関する

UNDER 権限をもた

なければならない。型は,二つ以上の直接下位型をもつことができる。利用者定義型又は参照型は,高々

一つの直接上位型をもつことができる。

型 のための<利用者定義型定義>は,の直接上位型があるならば,それの構成要素への参照を含むこ

とができる。直接上位型の表現の構成要素がその下位型の表現に実効的に複写される。

4.7.4

メソッド

利用者定義型 のメソッドは,の原メソッド  (original method of)  か又は の置換メソッド  (overriding 

method of)  のいずれかとする。原メソッドは,<原メソッド指定>によって指定するが,置換メソッドは,<

置換メソッド指定

>によって指定する。

<原メソッド指定>は,次の項目を指定する。

  <メソッド名>。

  <特定メソッド名>。

 <SQL パラメタ宣言リスト>。

  <戻りデータ型>。

  (あるならば,)<結果 CAST FROM 型>。

  メソッドが型保持かどうか。

 <LANGUAGE 句>。

  言語が SQL でないならば,<パラメタ様式>。

 STATIC 又は CONSTRUCTOR が指定されたかどうか。

  メソッドが決定的であるかどうか。

  メソッドが SQL データを潜在的に修正するか,SQL データを潜在的に読むか,SQL を潜在的に含む

か,又は

SQL を潜在的に含まないかどうか。

  いずれかの引数がナル値のときにはいつでもメソッドの実際の呼出しなしでそのメソッドがナル値と

評価されるべきかどうか。

<置換メソッド指定>は,次の項目を指定する。

  <メソッド名>。

  <特定メソッド名>。

 <SQL パラメタ宣言リスト>。

  <戻りデータ型>。

<置換メソッド指定>に対して,同じ<メソッド名>及び<SQL パラメタ宣言リスト>をもつ<原メソッド

指定

>が,その利用者定義型の真上位型に存在しなければならない。スキーマ中のどの SQL 呼出しメソッ

ドも,そのスキーマ中に存在する利用者定義型に関連付けられるただ一つの

<原メソッド指定>又は<置換

メソッド指定

>に対応しなければならない。

メソッド は,次のうちの一つを満たすならば,型 T1 のメソッド  (method of type T1)  とする。

  が T1 の原メソッドである。


39

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

  が T1 の置換メソッドである。

  T1 の真上位型 T2 が存在し,が T2 の原メソッド又は置換メソッドで,かつ,と同じ<メソッド名

>及び<SQL パラメタ宣言リスト>をもつ次のようなメソッド M3 が存在しない。M3 は,T2 が T3 の真

上位型で,かつ,T3 が T1 の上位型であるような T3 の原メソッド又は置換メソッドである。

4.7.5

利用者定義型の比較及び代入

この細分箇条は,ISO/IEC 9075-13 の“4.8.3  利用者定義型の比較及び代入”によって修正される。 

次の全ての条件を満たす利用者定義型 Tb を,利用者定義型 Ta の比較型  (comparison type)  とする。 
1)  Tb の型指示子が Ta の型優先順序リスト中にある。

2)  Tb の利用者定義型記述子が EQUALS 又は FULL の順序付け形式を含む。

3)  Ta の型優先順序リスト中で Tb の型指示子に型指示子が先行し,かつ,EQUAL 又は FULL の順序

付け形式を記述子が含むような型 Tc が存在しない。

このような型 Tb が存在しないならば,Ta は,比較型をもたない。 
利用者定義型 Ta の比較型の利用者定義型記述子に含まれる順序付け形式を,Ta の比較形式  (comparison 

form)  とする。

利用者定義型 Ta の比較型の利用者定義型記述子に含まれる順序付けカテゴリを,Ta の比較カテゴリ

(comparison category)  とする。

13

  利用者定義型 Ta の比較型の利用者定義型記述子に含まれる順序付け関数を,Ta の比較関数

(comparison function)  とする。

13

  最特定型が利用者定義型 T1 及び T2 である二つの値 V1 と V2 とが比較可能であることは,T1 及び T2

が同じ下位型族の中に存在し,かつ,それらが,それぞれ,ある比較型 CT1 及び CT2 をもつことと同値と

する。CT1 及び CT2 は,T1 及び T2 の比較形式及び比較カテゴリが同じであるように制約し,それらの全

ての上位型の比較形式及び比較カテゴリと同じであるように制約する。比較カテゴリが

STATE 又は

RELATIVE のいずれかならば,T1 及び T2 は,同じ比較関数をもつように制約される。比較カテゴリが

MAP ならば,それらは,同じ比較関数をもつように制約されない。

注記 33  明示的な型変換関数又は属性比較は,両方の値を同じ下位型族の値にするために,又は利用者

定義型の属性の比較を行うために用いることができる。

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

適当な利用者定義の型変換関数が存在しないならば,宣言型が利用者定義型 UDT1 である式 が,宣言

型が利用者定義型 UDT2 である格納場所 に代入可能であることは,UDT1 が UDT2 の下位型であること

と同値とする。の への代入の効果は,の値が,の評価によって得られる になることとする。S

の宣言型が UDT2 のままであるのに対して,の最特定型は,UDT1 自体であるかもしれない UDT1 の下

位型とする。

11.51  <利用者定義型定義>”の一般規則によって暗に想定される型変換関数が作成されるので,元型

が SDT である個別型を宣言型としてもつ式は,SDT を宣言型としてもつどの格納場所にも代入可能とする。

同様に,既定義型 SDT を宣言型としてもつ式は,元型が SDT である個別型を宣言型としてもつどの格納

場所にも代入可能とする。

4.7.6

利用者定義型のための変換

変換  (transform)  は,利用者定義型の値が SQL 環境からホスト言語に渡されるか又はその逆に渡される

ときに,自動的に呼び出される

SQL 呼出し関数とする。

変換は,利用者定義型に関連付けられる。変換は,

変換関数  (transform function)  と呼ばれる SQL 呼出し


40

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

関数を二つまで含む

変換グループ  (transform group)  のリストを識別し,それぞれの変換グループは,グル

ープ名によって識別される。変換グループのグループ名は,変換に対してどの二つの変換グループも同じ

グループ名をもたないような

<識別子>とする。二つの変換関数は,次による。

  FROM-SQL 関数  この SQL 呼出し関数は,利用者定義型の値がホスト言語プログラム又は外部ルー

チンに渡されるときにはいつでも呼び出され,利用者定義型の値を

SQL 既定義型の値に写像する。

  TO-SQL 関数  この SQL 呼出し関数は,利用者定義型の値がホスト言語プログラム又は外部ルーチン

によって与えられるときにはいつでも呼び出され,

SQL 既定義型の値を利用者定義型の値に写像する。

変換は,

<変換定義>によって定義される。変換は,変換記述子  (transform descriptor)  によって記述され

る。変換記述子は,空であるかもしれない

変換グループ記述子  (transform group descriptor)  のリストを含

む。ここで,各変換グループ記述子は,次の項目を含む。

  変換グループのグループ名。

  あるならば,変換グループに関連付けられた FROM-SQL 関数の特定名。

  あるならば,変換グループに関連付けられた TO-SQL 関数の特定名。

4.7.7

利用者定義型記述子

この細分箇条は,ISO/IEC 9075-13 の“4.8.2  利用者定義型記述子”によって修正される。 

13

  利用者定義型は,利用者定義型記述子によって記述される。利用者定義型記述子は,次の項目を含む。

  利用者定義型の名前(<利用者定義型名>)。これは,型優先順序リスト中で用いるその型の型指示子

とする(

9.7  型優先順位リスト決定”参照)。

  利用者定義型が構造型か又は個別型かを示す標識。

  利用者定義型のための順序付け形式(EQUALS,FULL 又は NONE)。

13

  利用者定義型のための順序付けカテゴリ(RELATIVE,MAP 又は STATE)。

  順序付けカテゴリに依存して,順序付け関数を識別する<特定ルーチン指示子>。

  利用者定義型が別の利用者定義型の直接下位型ならば,その利用者定義型の名前。

  利用者定義型が個別型ならば,元型の記述子。そうでなければ,利用者定義型の全ての原定義属性及

び全ての継承属性の属性記述子。

  利用者定義型が実現値生成可か又は実現値生成不可かを示す標識。

  利用者定義型が終端か又は終端でないかを示す標識。

13

  利用者定義型の変換記述子。

  利用者定義型が構造型ならば,次の項目。

  構造型の参照している型が,利用者定義表現をもつか,導出表現をもつか,又はシステム定義表現

をもつか。

  利用者定義表現が指定されるならば,構造型の参照している型の表現型の型記述子。導出表現が指

定されるならば,属性のリスト。

注記 35  参照型の“利用者定義表現”,“導出表現”及び“システム定義表現”は,“4.9  参照型”で定

義している。

  <メソッド指定リスト>が指定されるならば,<メソッド指定リスト>に含まれる各<メソッド指定>に対

して次の項目を含む

メソッド指定記述子  (method specification descriptor)。

  <メソッド名>。

  <特定メソッド名>。


41

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

  <メソッド指定>が<原メソッド指定>か又は<置換メソッド指定>かを示す標識。

  <メソッド指定>が<原メソッド指定>ならば,STATIC 又は CONSTRUCTOR が指定されたどうかを

示す標識

  パラメタ名 SELF をもつ暗に想定される第 1 パラメタを含むように拡張された<SQL パラメタ宣言リ

スト

>。

 <SQL パラメタ宣言リスト>中の全ての<SQL パラメタ宣言>に対して,あるならば,<位置付け子標

>。

  <戻りデータ型>。

  あるならば,<結果 CAST FROM 型>。

  あるならば,<RETURNS 句>に含まれる<位置付け子標識>。

  <言語名>。

  <言語名>が SQL でないならば,<パラメタ様式>。

  メソッドが決定的かどうかを示す標識

  メソッドが SQL データを潜在的に修正するか,SQL データを潜在的に読むか,SQL を潜在的に含

むか又は

SQL を潜在的に含まないかを示す標識。

  いずれかの引数がナル値のときにメソッドを呼び出さないほうがよいかどうかを示す標識。

  作成時刻印。

  最終変更時刻印。

注記 36  <メソッド名>,<SQL パラメタ宣言リスト>及び<戻りデータ型>以外の<置換メソッド指定>

の特性は,対応する

<原メソッド指定>の特性と同じである。

4.8

行型

行型は,

フィールド  (field)  と呼ばれる(<フィールド名> <データ型>)対の並びとする。行型は,行型

記述子によって記述される。行型記述子は,行型の全てのフィールドのフィールド記述子から成る。

表の行の最特定型は,行型とする。この場合,行の各列は,その列と同じ順序位置をもつ行型のフィー

ルドに対応する。

行型 RT2 がデータ型 RT1 の下位型であることは,RT1 及び RT2 が同じ次数の行型であり,かつ,対応

するフィールド定義のどの 番目の組,RT1 中の FD1n と RT2 中の FD2n とにおいても,<フィールド名>
が等しく,FD2n の<データ型>が FD1n の<データ型>の下位型であることと同値とする。

行型 RT1 の値が行型 RT2 の格納場所に代入可能であることは,RT1 の次数が RT2 の次数と同じで,か

つ,RT1 中のどのフィールドも,RT2 中の同じ順序位置のフィールドに代入可能であることと同値とする。

行型 RT1 の値が行型 RT2 の値と比較可能であることは,RT1 の次数が RT2 の次数と同じで,かつ,RT1

中のどのフィールドも,RT2 中の同じ順序位置のフィールドと比較可能であることと同値とする。

4.9

参照型

4.9.1

参照型の導入

REF 値  (REF value)  は,参照可能表  (referenceable table)(

4.15.9  参照可能表,下位表及び上位表”参照)

中の行を参照する値とする。参照可能表は,必然的に,

型付き表  (typed table)  でもある(すなわち,関連

付けられた構造型をもち,その構造型からその表の行型が導出される。

)。

ある構造型 が与えられると,を基に定義される型付き表中の行を参照できる REF 値は,参照型

(reference type)  として知られるあるデータ型 RT を集合的に形作る。RT は,の参照している型  (referencing 

type)  とし,は,RT の被参照型  (referenced type)  とする。


42

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

の名前を TN とする。RT の型指示子は,REF(TN)  とする。

二つの参照型の宣言型の被参照型が共通の上位型をもつならば,それらの参照型の値は,比較可能とす

る。

宣言型が参照型 RT1 である式 が,宣言型が参照型 RT2 である格納場所 に代入可能であることは,

RT1 の被参照型が RT2 の被参照型の下位型であることと同値とする。

の への代入の効果は,

の値が,

の評価によって得られる になることとする。の宣言型が RT2 のままであるのに対して,の最特定

型は,RT1 自体であるかもしれない RT1 の下位型とする。

REF 値によって占められる格納場所 RS は,RS での値に関する<参照解決> RR の呼出しの効果を決定す

有効範囲  (scope)  をもつかもしれない。有効範囲は,表名 STN として指定し,いつでも STN によって

識別される表 ST 中の全ての行から成る。ST は,RR のための有効範囲化された表  (scoped table)  とする。

RS の有効範囲は,RS の宣言型中で指定される。RS の宣言型中で有効範囲が指定されないならば,<参照

解決

>は,利用可能でない。

参照型は,参照型記述子によって記述される。RT に対する参照型記述子は,次の項目を含む。

  RT の型指示子。

  あるならば,RT の有効範囲である参照可能表の名前

ホスト変数中では,

REF 値は,オクテットの値として実体化される。ここで,は,処理系定義とす

る。

参照型 RT2 がデータ型 RT1 の下位型  (subtype)  である[等価的に,RT1 が RT2 の上位型  (supertype)  で

ある]ことは,RT1 が参照型で,かつ,RT2 の被参照型が RT1 の被参照型の下位型であることと同値とす

る。

参照型 RT のどの値も,RT の全ての上位型の値とする。型 RT の値 は,型 MST が RT の下位型で,か

つ,が MST のどの真下位型の値でもないようなただ一つの最特定型 MST をもつ。

参照型の被参照型が,

<利用者定義表現>を指定する<利用者定義型定義>によって定義されるならば,そ

の参照型は,

利用者定義表現  (user-defined representation)  をもつ。参照型の被参照型が,<導出表現>を指

定する

<利用者定義型定義>によって定義されるならば,その参照型は,導出表現  (derived representation)  を

もつ。参照型が利用者定義表現又は導出表現をもたないならば,その参照型は,

システム定義表現

(system-defined representation)  をもつ。

4.9.2

参照を含む演算

REF 値を受け取り,その REF 値によって識別される格納場所の列中に格納される値を戻す演算が提供さ

れる(

6.21 <内参照演算>”参照)。REF 値がどの格納場所も識別しないならば,おそらくかつて識別され

ていた格納場所が破壊されたために,ナル値が戻される。

REF 値を受け取り,被参照型の値を戻す演算が提供される。戻されるその値は,その REF 値によって識

別される格納場所の列の値から構成される(“6.23 <参照解決>”参照)。REF 値を受け取り,被参照型の値

に関する

SQL 呼出しメソッドの呼出しによって得られる値を戻す演算も提供される。被参照型のその値は,

その

REF 値によって識別される格納場所の列の値から構成される(“6.22 <メソッド参照>”参照)。

4.10  集まり型

4.10.1  集まり型の導入

集まり  (collection)  は,それぞれの値がデータ型 DT の値である 0 個以上の要素  (element)  から成る複合

値とする。集まり の要素が DT の値ならば,は,DT の集まりという。中の要素の個数は,の基数


43

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

(cardinality)  とする。“要素”という用語は,この規格では,これ以上定義しない。“集まり”という用語は,

総称で,いろいろな種類の集まりを包含し,それらのそれぞれに関連して,個別に,この規格で基本的な

型構成子及び演算子を定義する。この規格は,

2 種類の集まり型,配列及びマルチ集合を提供する。

特定の

<集まり型> CT は,キーワード KC(ARRAY 又は MULTISET のいずれか)を特定のデータ型 EDT

と組み合わせることによって指定する

<データ型>とする。それに加えて,配列に対しては,省略可能な最

大基数を指定してもよい。CT の可能などの値のどの要素も,EDT の値とし,より具体的には,EDT の下

位型の値であることも許される。EDT を CT の要素型  (element type)  と呼ぶ。KC は,CT の全ての値の種

類である

ARRAY 又は MULTISET のような集まりの種類を指定し,これによって,CT の値を演算するた

め又は CT の値を戻すために利用可能な演算子を決定する。

EDT の型指示子を EDTN とする。CT の型指示子は,EDTN KC とする。

集まり型記述子  (collection type descriptor)  は,集まり型を記述する。CT に対する集まり型記述子は,次

の項目を含む。

  CT の型指示子。

  CT の要素型の記述子。

  CT の集まりの種類,ARRAY 又は MULTISET を示す標識。

  CT が配列型ならば,CT の最大要素数。

集まり型 CT2 がデータ型 CT1 の下位型である(等価的に,CT1 が CT2 の上位型である)ことは,CT1

が CT2 と同じ種類の集まりで,かつ,CT2 の要素型が CT1 の要素型の下位型であることと同値とする。

4.10.2  配列

配列  (array)  は,集まり とし,その中の各要素が 中でただ一つの順序位置に関連付けられる。

の基数ならば,要素の順序位置 は,1 ≤ p ≤ の範囲の整数とする。したがって,EDT が の要素型な

らば,を 1 から までの範囲の整数の EDT への関数とみなすことができる。

配列の格納場所 AS は,最大基数 をもつ。AS を占めている配列の基数 は,を超えないように制約

される。

配列型  (array type)  は,<集まり型>とする。AT が要素型 EDT をもつ配列型ならば,AT のどの値も,EDT

の配列とする。

EDT の配列を A1 及び A2 とする。A1 と A2 とが同一であることは,A1 と A2 とが同じ基数 をもち,

1 ≤ i ≤ の範囲の全ての に対して,A1 中の順序位置 の要素が A2 中の順序位置 の要素と同一であるこ

とと同値とする。

4.10.3  マルチ集合

マルチ集合は,順序付けられていない集まりとする。マルチ集合は,順序付けられていないので,マル

チ集合の個々の要素を参照するための順序位置はない。

マルチ集合型は,

<集まり型>とする。MT が要素型 EDT をもつマルチ集合型ならば,MT のどの値も,

EDT のマルチ集合とする。

EDT のマルチ集合を M1 及び M2 とする。M1 と M2 とが同一であることは,M1 と M2 とが同じ基数 n

をもち,M1 の各要素 に対して,自体を含めて と同一である M1 の要素の数が,と同一である M2

の要素の数と等しいことと同値とする。

M1 の基数を n1 とし,M2 の基数を n2 とする。M1 の各要素 に対して,自体を含めて と異ならな

い M1 の要素の個数が,と異ならない M2 の要素の個数以下ならば,M1 は,M2 の部分マルチ集合とす


44

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

る。

4.10.4  集まりの比較及び代入

二つの集まりが比較可能であることは,それらが同じ種類の集まり(

ARRAY 又は MULTISET)で,か

つ,それらの要素型が比較可能であることと同値とする。

集まり型 CT1 の値が集まり型 CT2 の格納場所に代入可能であることは,CT1 が CT2 と同じ種類の集ま

り(

ARRAY 又は MULTISET)で,かつ,CT1 の要素型が CT2 の要素型に代入可能であることと同値とす

る。

配列型は,定義された

要素順序  (element order)  をもつ。比較は,配列の要素順序によって定義される。

要素順序は,比較される配列からの対応する要素の対を定義する。配列の要素順序は,その要素の順序位

置によって暗に定義される。

二つの配列 及び の比較の場合には,それらの要素が要素順序で対にされて比較される。C = が真

であることは,及び が同じ基数をもち,要素の全ての対が等しいことと同値とする。

比較可能な要素型の二つのマルチ集合 と とが同じ基数 をもち,かつ,全ての に対して,CEj = DEj

となるような,の要素の列挙 CEj,1 ≤ j ≤ N,及び の要素の列挙 DEj,1 ≤ j ≤ が存在するならば,そ
れらのマルチ集合 と とは,等しい。

4.10.5  配列を含む演算

4.10.5.1  配列値に作用し,配列要素を戻す演算子

<配列要素参照>は,配列内の指定された位置の配列要素を戻す演算とする。

4.10.5.2  配列値に作用し,配列値を戻す演算子

<配列連結>は,与えられた順序で配列値のオペランドを結合することによって作られる配列値を戻す演

算とする。

<TRIM_ARRAY 関数>は,1 番目の入力引数(配列値)から最後の 個の要素を取り除くことによって

導出される配列値を戻す演算とする。ここで,は,2 番目の入力引数の値とする。

4.10.5.3  配列値に作用し,数を戻す演算子

<基数式>は,配列の基数を戻す演算とする。

<最大基数式>は,与えられた配列の宣言型の最大基数を真数値として戻す。

4.10.6  マルチ集合を含む演算

4.10.6.1  マルチ集合に作用し,マルチ集合要素を戻す演算子

<マルチ集合要素参照>は,マルチ集合が一つの要素だけをもつならば,マルチ集合の要素の値を戻す演

算とする。

4.10.6.2  マルチ集合に作用し,マルチ集合を戻す演算子

<マルチ集合 SET 関数>は,マルチ集合から重複を取り除くことによって得られるマルチ集合を戻す演算

とする。

MULTISET UNION は,二つのマルチ集合の和集合を計算する演算子とする。重複を残すか又は重複を排

除するかのいずれかを,

ALL 又は DISTINCT を用いて指定する 2 種類がある。

MULTISET INTERSECT は,二つのマルチ集合の共通部分を計算する演算子とする。ALL 及び DISTINCT

2 種類がある。ALL を指定する演算子は,各値の実現値の個数がいずれかのオペランド中の各値の実現

値の最小の方の個数と同じ個数のその値の実現値を結果にする。

DISTINCT を指定する演算子は,結果か

ら重複を取り除く。

MULTISET EXCEPT は,二つのマルチ集合のマルチ差集合を計算する演算子とする。ALL 及び DISTINCT


45

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

2 種類がある。ALL を指定する演算子は,最初のオペランド中のある値の実現値の個数から 2 番目のオ

ペランド中のその値の実現値の個数を減じた数と等しい個数のその値の実現値を結果にする。

DISTINCT

を指定する演算子は,結果から重複を取り除く。

4.10.6.3  マルチ集合に作用し,数を戻す演算子

<基数式>は,マルチ集合の基数を戻す演算とする。

4.11  データ変換

この細分箇条は,ISO/IEC 9075-14 の“4.3  データ変換”によって修正される。 

式,

FETCH 操作,単一行 SELECT 操作,挿入,削除及び更新において,暗黙の型変換が発生すること

がある。陽な型変換は,

CAST 演算子を用いることによって指定できる。

陽に指定するデータ変換

 (data conversion) は,CAST 演算子  (CAST operator)  によって指定できる。CAST

演算子は,“6.13 <CAST 指定>”の構文規則及び一般規則に従って,変換元データ型の値をどのように相手

データ型の値に変換するかを定義する。既定義データ型間及び構成型間のデータ変換は,この規格の規則

で規定する。利用者定義型と別のデータ型との間のデータ変換は,利用者定義型変換

 (user-defined cast) に

よって定義する。

14

  利用者定義型変換は,宣言型が変換元データ型と同じ一つの SQL パラメタをもち,かつ,相手デー

タ型である結果データ型をもつ,

型変換関数  (cast function)  と呼ばれる SQL 呼出し関数を識別する。型変

換関数の結果データ型の相手に値が代入されるときにはいつでも暗に呼び出されるように,その型変換関

数を随意に指定してもよい。このような型変換関数を,

暗に呼出し可能な  (implicitly invocable)  型変換関

数と呼ぶ。

利用者定義型変換は,

<利用者定義型変換定義>によって定義される。利用者定義型変換は,次の項目を

含む利用者定義型変換記述子をもつ。

  変換元データ型の名前。

  相手データ型の名前。

  型変換関数である SQL 呼出し関数の特定名。

  型変換関数が暗に呼出し可能かどうかを示す標識。

宣言型 TV の値 が,宣言型 TT の相手 に代入されるとき,利用者定義の型変換関数 UDCF が適切な

利用者定義の型変換関数  (appropriate user-defined cast function)  であるということは,次の全てが真である

ことと同値とする。

  UDCF が暗に呼出し可能であることを UDCF の記述子が示す。

  UDCF の唯一の SQL パラメタ の宣言型 DTP の型指示子が TV の型優先順序リスト中にある。

  UDCF の結果データ型が TT である。

  TV の型優先順位リスト中で DTP に優先する宣言型 TQ の SQL パラメタ をもつ,他のどの利用者定

義の型変換関数 UDCQ も,を に代入するための適切な利用者定義の型変換関数ではない。

<SQL 手続文> が適切な利用者定義の型変換関数 UDCF に依存している  (dependent on)  ということは,

次の全てが真であることと同値とする。

  が<SELECT 文:単一行>,<INSERT 文>,<UPDATE 文:位置付け>,<UPDATE 文:探索>又は<MERGE

>である。

  の実行の間に実行される格納代入又は取出し代入の操作の間に UDCF が呼び出され,かつ,の実


46

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

行の間に呼び出される

SQL 呼出し関数の呼出しの間に UDCF が実行されない。

4.12  定義域

定義域

 (domain) は,とり得る値の集合とする。定義域は,スキーマ中で定義され,<定義域名>によっ

て識別される。定義域の目的は,様々な操作によって実表の列中に正しい値の集合が格納できるように制

約することとする。

定義域定義は,データ型を指定する。その定義域の正しい値を更に制限する

<定義域制約>も指定しても

よく,陽に指定された値がない場合に用いるための値,すなわち,列の既定値を指定する

<DEFAULT 句>

も指定してもよい。

定義域は,定義域記述子によって記述される。定義域記述子は,次の項目から成る。

  定義域の名前。

  定義域のデータ型のデータ型記述子。

  あるならば,定義域の<既定値選択肢>の値。

  あるならば,定義域の定義域制約の定義域制約記述子。

4.13  列,フィールド及び属性

この細分箇条は,ISO/IEC 9075-9 の“4.9  列,フィールド及び属性”によって修正される。 

列  (column),フィールド  (field)  及び属性  (attribute)  という用語は,それぞれ,表,行型及び構造型の

構造上の構成要素を,類似した方法で参照する。表の構造が一つ以上の列から成るのと同様に,行型の構

造は,一つ以上のフィールドから成り,構造型の構造は,一つ以上の属性から成る。列,フィールド又は

属性かどうかにかかわらず,どの構造の要素も,主として,宣言型と対にされた名前とする。構造の要素

は,順序付けられる。同じ構造中の異なる位置にある要素は,同じ宣言型をもつことができる。構文規則

は,異なる順序位置の二つの要素が等価な名前をもつことを禁止することがある(特に,

<SQL スキーマ

>によって定義されるとき)。等価な名前をもつ二つの要素が許されるとき,要素の名前は,曖昧になり,

名前によってどちらかの要素を参照しようとすると,構文誤りを引き起こす。構造の要素は,名前によっ

て互いに区別されるが,幾つかの環境では,(手近の目的のための)二つの構造の互換性は,同じ順序位置

の要素の各対の宣言型を考慮することによってだけ決定される。

表(

4.15  表”参照)は,一つ以上の列に関して定義され,0 行以上の行から成る。列は,名前及び宣言

型をもつ。表中の各行は,各列に対してただ一つの値をもつ。行中の各値は,対応する列の宣言型の値と

する。列は,

更新可能  (updatable)  か又は更新可能でない  (not updatable)  かのいずれかとする。

注記 37  宣言型は,ナル値,及びその宣言型の真下位型の値を含む。

どの列も,その列の値がナル値であり得るかどうかを示す

ナル可能性特性  (nullability characteristic)  を

もつ。ナル可能性特性は,

ナル可能でないことが分かる  (known not nullable)  か又は潜在的にナル可能

(possibly nullable)  かのいずれかとする。

実表 の列を とする。がナル可能でないことが分かる  ということは,次のうちの少なくとも一つ

が真であることと同値とする。

  強制で,かつ,遅延可能でない少なくとも一つの制約 NNC が存在し,に対する容易にナルでないこ

とが分かる条件を示す

<ブール値式>である<探索条件>をその制約が単純に含む。

  遅延可能でない定義域制約をもつ定義域を が基にし,VALUE に対する容易にナルでないことが分

かる条件を示す

<ブール値式>である<探索条件>を単純に含む。

  が,PRIMARY KEY である遅延可能でない一意性制約の一意列である。


47

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

  が の自己参照列である。

  何らかの追加の処理系定義の規則によって,<探索条件>“C  IS  NULL”が の行に適用されるとき,

決して

真になり得ないということを SQL 処理系が導き出すことができる。

注記 38  “ナル可能でないことが分かる”及び“ナルでないことが分かる条件”という概念は,SQL

処理系が採用してもよいそのような追加規則の例である。

SQL 処理系がこれらの規則(及び,

場合によっては,他の規則)を採用するならば,

SQL 処理系は,機能 T101“拡張ナル可能性

決定”の提供を主張してもよい。

導出表の列のナル可能性特性は,

7.7 <結合表>”,“7.12 <問合せ指定>”及び“7.13 <問合せ式>”の構文

規則によって規定する。

列 は,列記述子によって記述される。列記述子は,次の項目を含む。

  列の名前。

  列の名前が処理系依存の名前かどうか。

  列が定義域を基にするならば,その定義域の名前。そうでなければ,の宣言型のデータ型記述子。

  あるならば,の<既定値選択肢>の値。

  のナル可能性特性。

  を含む表内での の順序位置。

  が更新可能かどうかを示す標識。

  が実表の自己参照列かどうかを示す標識。

  が識別列かどうかを示す標識。

  が識別列ならば,値が常時生成されるか,既定生成されるかを示す標識。

  が識別列ならば,の開始値  (start value)  を含む の内部順序数生成子の記述子。

注記 39  識別列,及び“開始値”の意味は,“4.15.11  識別列”で記述している。

  が生成列かどうかを示す標識。

  が生成列ならば,の生成式。

注記 40  生成列,及び“生成式”の意味は,“4.15.12  実列及び生成列”で記述している。

  がシステム時刻期間開始列かどうかを示す標識。

  がシステム時刻期間終了列かどうかを示す標識。

  がシステム時刻期間開始列又はシステム時刻期間終了列ならば,値が常時生成されるかどうかを示

す標識。

  が実表の列ならば,NOT NULL として定義されたかどうかを示す標識,及びそうであるならば,関

連付けられる表制約定義の制約名。

注記 41  この標識及び関連付けられる制約名は,定義のためだけに存在し,情報スキーマ中の

COLUMNS ビュー中に露出しない。

属性 は,属性記述子によって記述される。属性記述子は,次の項目を含む。

  属性の名前。

  の宣言型のデータ型記述子。

  を含む構造型内での の順序位置。

  暗に想定されるか又は陽に指定される の<属性既定値>の値。


48

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

  を定義する<利用者定義型定義>によって定義される構造型の名前

フィールド は,フィールド記述子によって記述される。フィールド記述子は,次の項目を含む。

  フィールドの名前。

  の宣言型のデータ型記述子。

  を単純に含む行型内での の順序位置。

4.14  期間

4.14.1  期間の導入

与えられた表に対する期間定義は,その表に対して定義された列名の対に期間名を関連付ける。期間定

義 PD をもつ表 に対して,期間名を PN とし,PD 中に指定された 1 番目の列名を STARTPD 中に指定

された

2 番目の列名を END とする。START を の PN 期間開始列  (period start column)  と呼ぶ。END を T

の PN 期間終了列  (period end column)  と呼ぶ。START 及び END によって識別される列は,両方とも,日

時データ型で,かつ,ナル可能でないことが分からなければならない。さらに,START 及び END の宣言

型は,同一でなければならない。

中のどの行も,START 列の値を PN 期間開始値  (period start value)  としてもち,END 列の値を PN 

間終了値  (period end value)  としてもつ PN 期間値  (period value)  に関連付けられるとみなされる。行 

PN 期間値は,START の値以上で,かつ,END の値未満の型 DT の全ての値の集合とする。ここで,DT

は,START の宣言型とする。期間 PN をもつ表 に対して,与えられた行 の PN 期間終了値が の PN

期間開始値より大きいことを保証する制約が暗に想定される。

期間は,

期間記述子  (period descriptor)  によって記述される。期間記述子は,次の項目を含む。

  期間の名前。

  期間開始列の名前。

  期間終了列の名前。

  期間名が<適用業務時刻期間名>ならば,暗に想定される期間制約の名前。

表 の表記述子が,期間名 PN を含む期間記述子を含むならば,その期間記述子は,の PN 期間記述

子としても参照される。期間名が

SYSTEM_TIME の期間は,システム時刻期間  (system-time period)  とし

ても知られ,対応する期間記述子は,

システム時刻期間記述子  (system-time period descriptor)  としても知

られる。期間名が

SYSTEM_TIME でない期間は,適用業務時刻期間  (application-time period)  としても知ら

れ,対応する期間記述子は,

適用業務時刻期間記述子  (application -time period descriptor)  としても知られ

る。

期間 PN をもつ表 中の任意の二つの行を R1 及び R2 とする。R1 の PN 期間開始値を S1 とし,R1 

PN 期間終了値を E1 とし,R2 の PN 期間開始値を S2 とし,R2 の PN 期間終了値を E2 とする。R1 の PN

期間値が R2 の PN 期間値と重なる  (overlap)  ということは,(S1 < E2 AND E1 > S2)  と同値とする。

4.14.2  期間を含む演算

<期間 OVERLAPS 述語>は,二つの期間が重なるかどうか,すなわち,少なくとも一つの値を共通にも

つかどうかを検査する。

<期間 EQUALS 述語>は,二つの期間が同じ期間開始値及び期間終了値をもつかどうかを検査する。

<期間 CONTAINS 述語>は,期間が日時値又は別の期間を含むかどうか,すなわち,1 番目の期間が,そ

れぞれ,日時値又は

2 番目の期間に含まれる全ての値を含むかどうかを検査する。


49

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

<期間 PRECEDES 述語>は,期間が別の期間に先行するかどうか,すなわち,1 番目の期間に含まれる全

ての値が

2 番目の期間の開始値未満であるかどうかを検査する。

<期間 SUCCEEDS 述語>は,期間が別の期間に後続するかどうか,すなわち,1 番目の期間に含まれる全

ての値が

2 番目の期間の終了値以上かどうかを検査する。

<期間 IMMEDIATELY PRECEDES 述語>は,期間が別の期間に直に先行するかどうか,すなわち,1 番目

の期間の終了値が

2 番目の期間の開始値と等しいかどうかを検査する。

<期間 IMMEDIATELY SUCCEEDS 述語>は,期間が別の期間に直に後続するかどうか,すなわち,1 番目

の期間の開始値が

2 番目の期間の終了値と等しいかどうかを検査する。

4.15  表

この細分箇条は,ISO/IEC 9075-4 の“4.2  表”によって修正される。 

この細分箇条は,ISO/IEC 9075-9 の“4.10  表”によって修正される。 

4.15.1  表の導入

表は,

0 個以上の行の集まりとし,各行は,一つ以上の列値の並びとする。行の最特定型は,行型とす

る。与えられた表のどの行も,その表の

行型  (row type)  と呼ばれる同じ行型をもつ。表中のどの行の 

目のフィールドの値も,その表中のその行の 番目の列の値とする。行は,表に挿入でき,表から削除で

きるデータの最小単位とする。

表の次数,及びその表の各行の次数は,その表の列の個数とする。表中の行の個数は,その表の基数と

する。基数が

0 である表を,空  (empty)  であるという。

表は,実表,導出表又は過渡表のいずれかとする。

4.15.2  実表

この細分箇条は,ISO/IEC 9075-4 の“4.2.1  実表”によって修正される。 

09

  実表は,永続実表又は一時表のいずれかとする。

永続実表は,通常永続実表又はシステムバージョン表のいずれかとする。

通常実表は,通常永続実表又は一時表のいずれかとする。

4.15.2.1  通常永続実表

通常永続実表は,

TEMPORARY も WITH SYSTEM VERSIONING も指定しない<表定義>によって定義さ

れる名前付きの表とする。

4.15.2.2  システムバージョン表

システムバージョン表は,

PERIOD SYSTEM_TIME を指定し,かつ,WITH SYSTEM VERSIONING を指

定する

<表定義>によって定義される名前付きの表とする。

システムバージョン表の列は,

システム時刻期間開始列  (system-time period start column)  及びシステム時

刻期間終了列  (system-time period end column)  を含む。どの時点においても,システム時刻期間終了列のデ

ータ型によって提供される最高値がその列に設定されている全ての行は,

現在システム行  (current system 

row)  として知られる。他の全ての行は,履歴システム行  (historical system row)  として知られる。

4.15.2.3  一時表

この細分箇条は,ISO/IEC 9075-4 の“4.2.1.1  一時表”によって修正される。 

一時表は,大域一時表,作成局所一時表,又は宣言局所一時表のいずれかとする。

大域一時表は,

GLOBAL TEMPORARY を指定する<表定義>によって定義される名前付きの表とする。

大域一時表は,

SQL セション中で参照されるときにだけ,実効的に実体化される。大域一時表を参照する

各セションは,その大域一時表に対して異なる実現値(言い換えると,その

SQL セションに対してだけ可


50

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

視の行のマルチ集合)を実体化させる。すなわち,大域一時表の

<表名>によって参照される行のマルチ集

合は,

SQL セション間で共有することはできない。

作成局所一時表は,

LOCAL TEMPORARY を指定する<表定義>によって定義される名前付きの表とする。

作成局所一時表は,

SQL セション中で参照されるときにだけ,実効的に実体化される。作成局所一時表を

参照する各

SQL セション中の各 SQL クライアントモジュールは,その作成局所一時表に対して異なる実

現値(言い換えると,その

SQL セション中のその SQL クライアントモジュールに対してだけ可視の行の

マルチ集合)を実体化させる。すなわち,作成局所一時表の

<表名>によって参照される行のマルチ集合は,

SQL セション間でも,一つのセション中で実行する SQL クライアントモジュール間でも,共有することは

できない。

大域一時表又は作成局所一時表の定義は,スキーマ中に現れる。

SQL 言語中で,大域一時表又は作成局

所一時表の名前及び名前の有効範囲を,永続実表のそれらと区別することはできない。

宣言局所一時表は,

<一時表宣言>によって定義される名前付きの表とする。

SQL クライアントモジュールの宣言局所一時表は,<SQL クライアントモジュール定義>中で定義された,

宣言局所一時表とする。

SQL クライアントモジュールの宣言局所一時表は,<一時表宣言>を含む<SQL ク

ライアントモジュール定義

>中の任意の<外部呼出し手続>が実行される最初の時点に,実効的に実体化さ

れ,その

SQL セションに対して存続する。SQL クライアントモジュールの宣言局所一時表を参照する各

SQL セション中の各 SQL クライアントモジュールは,その宣言局所一時表に対して異なる実現値(言い換

えると,その

SQL セション中のその SQL クライアントモジュールに対してだけ可視の行のマルチ集合)

を実体化させる。すなわち,

SQL クライアントモジュールの宣言局所一時表の<表名>によって参照される

行のマルチ集合は,

SQL セション間でも,SQL セション中で実行する SQL クライアントモジュール間で

も,共有することはできない。

宣言局所一時表への全ての参照は,“

MODULE.”によって修飾する。

一時表の実体は,その表が実体化された

SQL セションの終了を越えて存続することはない。一時表は,

SQL セションの開始時点で実効的に空になる。SQL セション S1 内で作成された一時表も,作成後は実効

的に空になる。

WITH DATA を指定する<AS 副問合せ句>が指定されるならば,S1 内の一時表の実体は,

11.3 <表定義>”の一般規則で規定するとおりに初期化される。

4.15.3  導出表

導出表は,

<結合表>,<データ変更差分表>,<問合せ式>又は<表式>のような式の評価によって,一つ以

上の別の表から直接又は間接的に導出される表とする。

<問合せ式>は,省略可能な<ORDER BY 句>を含む

ことができる。

<問合せ式>によって指定される表の行の順序付けは,<ORDER BY 句>を直に含む<問合せ

>に対してだけ保証される。

<問合せ式>は,導出表の先頭から指定した個数の行を取り除くことによって導出表の基数を限定できる

<結果 OFFSET 句>を任意に含むこともできる。<問合せ式>が<ORDER BY 句>及び<結果 OFFSET 句>の両

方を含むならば,導出表の行は,

<ORDER BY 句>に従って最初に並べ替えられ,その後,<問合せ式>によ

って生成された結果の先頭から

<結果 OFFSET 句>で指定した個数の行を削除することによって限定される。

<問合せ式>の評価の結果の基数が,<結果 OFFSET 句>によって指定された変位値未満ならば,導出表は,

空とする。

<問合せ式>は,導出表の基数を限定できる<FETCH FIRST 句>を任意に含むこともできる。<問合せ式>

<ORDER BY 句>及び<FETCH FIRST 句>の両方を含むならば,導出表の行は,<ORDER BY 句>に従って

最初に並べ替えられ,その後に

<FETCH FIRST 句>で指定した行数に限定される。<FETCH FIRST 句>は,


51

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

この限定行数を正確な行数又は百分率のどちらで指定してもよい。さらに,

WITH TIES を指定するならば,

保持された行と同位の行も結果中に保持される。

<問合せ式>は,<結果 OFFSET 句>及び<FETCH FIRST 句

>の両方を含んでもよく,その場合には,<結果 OFFSET 句>が最初に適用され,その後に<FETCH FIRST

>が適用される。<問合せ式>の評価の結果の基数が,<FETCH FIRST 句>によって指定された限定行数未

満ならば,

<FETCH FIRST 句>は,導出表に対してどんな効果も与えない。

ビュー表は,

<ビュー定義>によって定義される名前付きの導出表とする。ビュー表は,ビュー  (view)  と

もいう。実表及びビューは,

<表名>によって識別される。完全修飾付きの形式で,実表及びビューの両方

に対して同じ

<表名>を用いることはできない。

ビューの元の<問合せ式> OQE,及び OQE に含まれる<問合せ指定>,<表値構成子>,<明示表>又は<

問合せ式

>を,のビュー構成要素  (view component)  という。

4.15.4  過渡表

過渡表は,

<問合せ式>の評価又はトリガの実行の間に暗に現れてもよい名前付きの表とする。過渡表は,

<問合せ式>の評価の間に現れるならば,<問合せ名>によって識別され,トリガの実行の間に現れるならば,

<遷移表名>によって識別される。このような過渡表は,<問合せ式>を含む SQL 文を実行している間,又

はトリガを実行している間だけ存在する。

4.15.5  表の一意識別

この細分箇条は,ISO/IEC 9075-4 の“4.2.2  表の一意識別”によって修正される。 

永続実表,大域一時表,作成局所一時表,又は

SQL クライアントモジュールの宣言局所一時表の<表名>

は,次のとおりに,行の特定のマルチ集合を識別するために用いる。

  永続実表の<表名>は,行のマルチ集合を一意に識別する。

  大域一時表の<表名>は,SQL セション識別子とともに,行のマルチ集合を一意に識別する。

  作成局所一時表の<表名>は,SQL セション識別子及び SQL クライアントモジュール名とともに,行

のマルチ集合を一意に識別する。

04

 SQL クライアントモジュールの宣言局所一時表の<表名>は,SQL セション識別子及び SQL クライ

アントモジュール名とともに,行のマルチ集合を一意に識別する。

4.15.6  表更新可能性

表は,

更新可能  (updatable)  か,更新可能でない  (not updatable)  かのいずれかとする。更新可能な表は,

少なくとも一つの

更新可能な列  (updatable column)  をもつ。全ての実表は,更新可能とし,実表のどの列

も,更新可能とする。導出表及び過渡表は,更新可能か又は更新可能でないかのいずれかとする。“7.6  <

表参照

>”の構文規則が,導出表 が更新可能かどうか,及び のどの列が更新可能かを決定する。ビュ

ーを定義する導出表が更新可能ならば,そのビューは,

更新可能とする。ビューを定義する導出表の列が

更新可能ならば,そのビューの対応する列は,

更新可能とする。更新 INSTEAD OF トリガがビューに対し

て定義されているならば,そのビューは,

トリガ更新可能  (trigger updatable)  とする。削除 INSTEAD OF

トリガがビューに対して定義されているならば,そのビューは,

トリガ削除可能  (trigger deletable)  とする。

実現値生成不可の利用者定義型から導出されていない行型をもつ全ての実表も含めて,幾つかの更新可

能な表は,

挿入可能  (insertable-into)  でもある。過渡表は,挿入可能ではない。“7.6  <表参照>”の構文規

則が,導出表 が挿入可能かどうかを決定する。ビューを定義する導出表が挿入可能ならば,そのビュー

は,

挿入可能とする。挿入 INSTEAD OF トリガがビューに対して定義されているならば,そのビューは,

トリガ挿入可能  (trigger insertable-into)  とする。

表 が更新可能か又はトリガ更新可能ならば,に対する更新操作は,制約しているアクセス規則及び


52

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

適合性規則次第で許される。表 が更新可能か又はトリガ削除可能ならば,に対する削除操作は,制約

しているアクセス規則及び適合性規則次第で許される。表 が挿入可能か又はトリガ挿入可能ならば,T

に対する挿入操作は,制約しているアクセス規則及び適合性規則次第で許される。

4.15.7  表記述子

この細分箇条は,ISO/IEC 9075-9 の“4.10.2  表記述子”によって修正される。 

09

  表は,表記述子によって記述される。表記述子は,過渡表記述子,実表記述子,ビュー記述子,又は

(ビューでない導出表の対する)導出表記述子のいずれかとする。

どの表記述子も,次の項目を含む。

  表中の各列の列記述子。

  あるならば,その表に関連付けられた構造型の名前。

  表が挿入可能かどうかを示す標識。

  表が参照可能表かどうかを示す標識,及び自己参照列がシステム生成自己参照列か,利用者生成自己

参照列か又は導出自己参照列かを示す標識。

  あるならば,直接上位表の名前。

  空かもしれない,直接下位表の名前のリスト。

過渡表記述子は,過渡表を記述する。表記述子の構成要素に加えて,過渡表記述子は,次の項目を含む。

  <問合せ式>に含まれる<WITH リスト要素>によって過渡表が定義されるならば,<問合せ名>。<トリ

ガ定義

>によって過渡表が定義されるならば,<遷移表名>。

実表記述子は,実表を記述する。表記述子の構成要素に加えて,実表記述子は,次の項目を含む。

  実表の名前。

  表が,通常永続実表か,システムバージョン表か,大域一時表か,作成局所一時表か又は宣言局所一

時表かを示す標識。

  表に対して定義された各期間の記述子。

  実表が大域一時表,作成局所一時表又は宣言局所一時表ならば,ON COMMIT PRESERVE ROWS が指

定されたか,又は

ON COMMIT DELETE ROWS が指定若しくは想定されたかを示す標識。

  表に対して指定された各表制約の記述子。

  “4.19  関数従属性”の規則に従った関数従属性の空でない集合。

  “4.20  候補キー”の規則に従った候補キーの空でない集合。

  “4.19  関数従属性”の規則に従った,主キーを補足的に示すかもしれないし,示さないかもしれない

優先候補キー。

導出表記述子は,導出表を記述する。表記述子の構成要素に加えて,導出表記述子は,次の項目を含む。

  その表がどのように導出されるべきかを定義する<問合せ式>(導出表記述子がビュー記述子内に含ま

れるとき,これは,ビューの階層的な

<問合せ式>として知られ,下位行をもつかもしれないビューの

行を見つけるために用いる。)

  導出表が更新可能かどうかを示す標識。

  導出表が単純に更新可能かどうかを示す標識。

ビュー記述子は,ビューを記述する。導出表記述子の構成要素に加えて,ビュー記述子は,次の項目を


53

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

含む。

  ビューの名前。

  ビューが CHECK OPTION をもつかどうかを示す標識。もつならば,CASCADED として適用されるの

か又は

LOCAL として適用されるのかを示す標識。

  ビューの元の<問合せ式>(この<問合せ式>は,下位行をもたないビューの行を見つけるために用い

る。

)。

  ビューの利用者指定の<問合せ式>。

注記 42  利用者指定の<問合せ式>は,参照型が導出表現をもつ参照可能ビューを除いて,元の<問合

せ式

>と同一である(“11.32 <ビュー定義>”の一般規則参照。)。

  ビューがトリガ更新可能かどうかを示す標識。

  ビューがトリガ挿入可能かどうかを示す標識。

  ビューがトリガ削除可能かどうかを示す標識。

4.15.8  表間の関係

この細分箇条は,ISO/IEC 9075-9 の“4.10.3  表間の関係”によって修正される。 

単純に基となる表  (simply underlying table),基となる表  (underlying table),末端で基となる表  (leaf 

underlying table) , 一般に基となる表   (generally underlying table)  及び 末端で一般に基となる表   (leaf 

generally underlying table)  という用語は,導出表又はカーソルと他の表との間の関係を定義する。

導出表の単純に基となる表は,“7.12 <問合せ指定>”及び“7.13 <問合せ式>”の構文規則で規定する。<

表名又は問合せ名

>は,単純に基となる表をもたない。カーソルの単純に基となる表は,そのカーソルの結

果集合記述子に含まれる

<カーソル指定>(又は,元祖カーソルに対しては,カーソル宣言記述子に含まれ

<カーソル指定>)とする。

導出表又はカーソルの基となる表は,その導出表又はカーソルの単純に基となる表,及びその導出表又

はカーソルの単純に基となる表の基となる表とする。

導出表又はカーソルの末端で基となる表は,それ自体がどの基となる表ももたない,導出表又はカーソ

ルの基となる表とする。

09

  導出表又はカーソルの一般に基となる表は,その導出表又はカーソルの基となる表,及び導出表又は

カーソルの基となる

<表名又は問合せ名> TORQN の各表に対して,次のとおりに定義される TORQN の一

般に基となる表とする。

09

 TORQN が実表を識別するか又は TORQN が<遷移表名>ならば,TORQN は,一般に基となる表をも

たない。

  TORQN が<問合せ名>ならば,TORQN の一般に基となる表は,TORQN によって識別される<WITH

リスト要素

>の<問合せ式本体> QEB,及び QEB の一般に基となる表とする。

  TORQN がビューを識別するならば,TORQN の一般に基となる表は,のビュー記述子に含まれる

階層的な

<問合せ式> QEV,及び QEV の一般に基となる表とする。

導出表又はカーソルの末端で一般に基となる表は,それ自体がどの一般に基となる表ももたない,導出

表又はカーソルの一般に基となる表とする。

4.15.9  参照可能表,下位表及び上位表

構造型 ST から導出される行型をもつ表 RT を型付き表  (typed table)  と呼ぶ。実表又はビューだけが型付

き表であることができる。型付き表は,名前及び宣言型が ST の各属性に対応する列,並びに RT の自己参


54

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

照列であるもう一つの列 REFC をもつ。REFC の<列名>を REFCN とする。REFC の宣言型は,必然的に

REF(ST)  であり,REFC のナル可能性特性は,ナル可能でないことが分かる  (known not nullable)  とする。

RT が実表ならば,表制約“UNIQUE(REFCN)”が RT の定義中で暗に想定される。型付き表を参照可能表

(referenceable table)  と呼ぶ。自己参照列は,更新できない。その値は,参照可能表への行の挿入の間に決

定される。システム生成自己参照列及び導出自己参照列の値は,参照可能表に行が挿入されるときに,自

動的に生成される。利用者生成自己参照列の値は,参照可能表に挿入されるべき候補行の部分として与え

る。

表 Ta が別の表 Tb の直接下位表  (direct subtable)  であることは,Ta の<表定義>又は<ビュー定義>に含ま

れる

<下位表句>に Tb の<表名>が含まれることと同値とする。Ta 及び Tb は両方とも,構造型を基にして

作成されなければならず,Ta の構造型は,Tb の構造型の直接下位型でなければならない。

表 Ta が表 Tb の下位表  (subtable)  であることは,次のいずれかが真であることと同値とする。 
1)  Ta と Tb とが名前付きの同じ表である。

2)  Ta が Tb の直接下位表である。

3)  Ta が Tc の直接下位表で,かつ,Tc が Tb の下位表であるような表 Tc が存在する。

表 は,それ自体の下位表の一つとみなされる。それ自体を除く の下位表を の真下位表  (proper 

subtable)  と呼ぶ。表は,真下位表としてそれ自体をもってはならない。

表 Ta が表 Tb の下位表ならば,Tb を Ta の上位表  (supertable)  と呼ぶ。Ta が Tb の直接下位表ならば,

Tb を Ta の直接上位表  (direct supertable)  と呼ぶ。他のどの表の下位表でもない表は,最上位表  (maximal 

supertable)  と呼ぶ。

最上位表を Ta とし,Ta の下位表を とする。Ta の全ての(Ta 自体も含む)下位表の集合は,又は

(等価的に)Ta の下位表族  (subtable family)  と呼ぶ。どの下位表族も,ただ一つの最上位表をもつ。

末端の表  (leaf table)  は,どの真下位表ももたない表とする。

構造型 STa の下位表 Ta の列で,STa の継承属性に対応する列を,継承列  (inherited column)  と呼ぶ。Ta

の列で,STa の原定義属性に対応する列を,原定義列  (originally-defined column)  と呼ぶ。

TA の下位表を TB とする。<問合せ指定>“SELECT * FROM TA”中の<選択リスト>“*”によって暗に

想定される

<値式>の並びを SLA とする。TB の値中のどの行 RB に対しても,RA が<行副問合せ>“SELECT

SLA FROM VALUES RRB”の結果であるようなただ一つの行 RA が TA の値中に存在する。ここで,RRB

は,値が RB である<行値構成子>とする。RA を,RB の TA 中の上位行  (superrow)  と呼び,RB を,RA 

TB 中の下位行  (subrow)  と呼ぶ。TA が実表ならば,上位行と下位行との間の 1 対 1 対応が,TA の上位表

に対して指定されるべき一意性制約の要件によって保証される。TA がビューならば,このような 1 対 1

対応は,TA の末端で一般に基となる表に対して指定されるべき一意性制約の要件によって保証される。

利用者が下位表の定義中で表を利用するためには,その利用者は,その表に関する

UNDER 権限をもた

なければならない。表は,二つ以上の真下位表をもつことができる。同様に,表は,二つ以上の真上位表

をもつことができる。

4.15.10

表を含む演算

表値は,

<問合せ式>によって演算され,<問合せ式>によって戻される。<問合せ式>の構文は,表値を演

算し,表値を戻す様々な内部演算子を含む。特に,どの

<問合せ式>も,一つ以上の表値を演算し,単一の

表値を戻す少なくとも一つの

<FROM 句>を実効的に含む。<FROM 句>によって演算される表値は,<表参

>によって指定される。


55

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

表 を含む演算は,処理系依存の順序で各行を次々に参照しながら の行の範囲を移動する範囲変数

(range variable)  RV を定義してもよい。したがって,RV への各参照は,のただ一つの行を参照する。T

は,RV に関連付けられた表  (table associated with)  という。

<表参照>中で,被参照表の真下位表中の下位行を結果行から除くために,ONLY を指定することができ

る。

<表参照>中で,<標本方法>及び<標本率>に依存して結果行の部分集合を戻すように,<標本句>を指定す

ることができる。

<標本句>が<REPEATABLE 句>を含むならば,処理系定義の幾つかの条件を満たすとい

う条件で,その

<表参照>の繰返し実行は,与えられた<繰返し引数>に対して同一行をもつ結果表を戻す。

SQL データ変更文によって指定される幾つかの表更新操作は,適用可能なアクセス規則及び適合性規則

に従って,更新可能表及びトリガ更新可能表に関して利用できる。更新可能表 又はトリガ更新可能表 T

の値は,に対して操作する最も最近実行された SQL データ変更文(“4.34.2  機能によって分類された SQL

文”参照)の結果によって決定される。実表 又は導出表 に対する SQL データ変更文は,(自体に対

する)

一次的な効果  (primary effect)  及び 0 個以上の(必ずしも に対してではない)二次的な効果

(secondary effect)  をもつ。がシステムバージョン表ならば,効果は,現在システム行に対応する行の部分

集合に制限される。

ビュー表に対する

SQL データ変更文の効果は,“15.9  ビュー表からの行の削除の効果”,

15.12  ビュー表への表の挿入の効果”及び“15.15  ビュー表中の行の置換えの効果”の一般規則で規定す

る。

通常実表 又は導出表 に対する<DELETE 文:位置付け>の一次的な効果は,からただ一つの指定さ

れた行を削除することとする。通常実表 又は導出表 に対する<DELETE 文:探索>の一次的な効果は,

から 0 行以上の行を削除することとする。

システムバージョン表 に対する<DELETE 文:位置付け>又は<DELETE 文:探索>の一次的な効果は,

<DELETE 文:位置付け>又は<DELETE 文:探索>を実行する SQL トランザクションのトランザクション

時刻印の値をシステム時刻期間終了列に設定した行に,それぞれ,ただ一つの指定された行又は

0 行以上

の行を置き換えることとする。

加えて,実表 に対する FOR PORTION OF を指定した<DELETE 文:探索>の一次的な効果は,から

削除される各行に対して,

0 行,1 行又は 2 行の新しい行を に挿入することとする。

通常実表 に対する<TRUNCATE TABLE 文>の一次的な効果は,に対して指定されたどのトリガの実

行も引き起こさないで,から全ての行を削除することとする。

通常実表 又は導出表 に対する<UPDATE 文:位置付け>の一次的な効果は,中のただ一つの指定さ

れた行を,ある指定された行に置き換えることとする。通常実表 又は導出表 に対する<UPDATE 文:

探索

>の一次的な効果は,中の 0 行以上の行を置き換えることとする。

システムバージョン表 に対する<UPDATE 文:位置付け>の一次的な効果は,ある指定された行のシス

テム時刻期間開始列に

<UPDATE 文:位置付け>を実行する SQL トランザクションのトランザクション時

刻印の値 VT を設定し,かつ,システム時刻期間終了列にシステム時刻期間終了列の宣言型によって提供

される最大値を設定した行に,中のただ一つの指定された行 を置き換えて,それに続けて,システム

時刻期間終了列に値 VT を設定した更新前の の写しを挿入することとする。

システムバージョン表 に対する<UPDATE 文:探索>の一次的な効果は,置き換えるべき各候補行 

対して,ある指定された行のシステム時刻期間開始列に

<UPDATE 文:探索>を実行する SQL トランザク

ションのトランザクション時刻印の値 VT を設定し,かつ,システム時刻期間終了列にシステム時刻期間

終了列の宣言型によって提供される最大値を設定した行に,を置き換えて,それに続けて,システム時


56

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

刻期間終了列に値 VT を設定した更新前の の写しを挿入することとする。

加えて,実表 に対する FOR PORTION OF を指定した<UPDATE 文:探索>の一次的な効果は,中の

置き換えられる各行に対して,

0 行,1 行又は 2 行の新しい行を に挿入することとする。

通常実表 又は導出表 に対する<INSERT 文>の一次的な効果は,指定された表中に含まれる 0 行以上

のそれぞれの行を に挿入することとする。

システムバージョン表 に対する<INSERT 文>の一次的な効果は,指定された表中に含まれる 0 行以上

のそれぞれの行のシステム時刻期間開始列に

<INSERT 文>を実行する SQL トランザクションのトランザク

ション時刻印の値を設定し,かつ,システム時刻期間終了列にシステム時刻期間終了列の宣言型によって

提供される最大値を設定した行を,に挿入することとする。

通常実表 又は導出表 に対する<MERGE 文>の一次的な効果は,から 0 行以上の行を削除すること,

中の 0 行以上の行を指定された行に置き換えること,及び/又は 0 行以上の指定された行を に挿入す

ることとする。

システムバージョン表 に対する<MERGE 文>の一次的な効果は,この細分箇条の 7 番目の段落で記述

したとおりに,中の 0 行以上の行を削除すること,この細分箇条の 12 番目の段落で記述したとおりに,

中の 0 行以上の行を指定された行に置き換えること,及び/又はこの細分箇条の 15 番目の段落で記述し

たとおりに,

0 行以上の指定された行を に挿入することとする。

それぞれの表更新操作は,実表 又は導出表 に適用されるとき,様々な二次的な効果をもつことがあ

る。このような二次的な効果は,一次的な効果の変更及び取消しを含む。二次的な効果は,次の存在から

生じるかもしれない。

  値が二次的な効果の影響を受けるかもしれない 自体を除く の基となる表。

  <ビュー定義>に WITH CASCADED CHECK OPTION を指定しない更新可能なビュー。

  結果として の基となる表を含む整合性制約によって参照される表に対する二次的な効果となるかも

しれないそのような制約に関して指定される波及動作。

  値が に対する更新操作によって影響を受けるかもしれない の真下位表及び真上位表。

  以外の更新可能な表に対する表更新操作を指定するかもしれない の基となる表に対して指定され

るトリガ。

4.15.11

識別列

実表 BT の列は,一つ以下の識別列  (identity column)  を任意に含むことができる。識別列の宣言型は,

位取り

0 の真数型,例えば INTEGER,又は元型が位取り 0 の真数型である個別型のいずれかとする。識別

列は,

開始値  (start value),増分  (increment),最大値  (maximum value),最小値  (minimum value)  及び周期

選択肢  (cycle option)  をもつ。識別列は,内部順序数生成子 SG に関連付けられる。BT の識別列を IC とす

る。

行 が BT への挿入のために提供されるとき,が IC に対応する列を含まないならば,SG を SEQUENCE

として,“9.25  順序数生成子の次値の生成”の一般規則を適用する。それらの一般規則の適用によって戻

される RESULT を とする。IC に対する値は,とする。識別列の定義は,GENERATED ALWAYS 又は

GENERATED BY DEFAULT を指定してもよい。

注記 43  “開始値”,“増分”,“最大値”,“最小値”及び“周期選択肢”は,“4.22  順序数生成子”で定

義している。

注記 44  識別列に関連付けられる内部順序数生成子の概念は,この規格での定義のためだけに用いる。

4.15.12

実列及び生成列

実表の列は,

実列  (base column)  又は生成列  (generated column)  のいずれかとする。実列は,生成列でな


57

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

い列とする。生成列は,

<値式>である生成式  (generation expression)  の評価によって値が決定される列と

し,その

<値式>の宣言型が暗にその列の宣言型になる。生成式は,それが属する実表の実列を参照するこ

とができるが,他の

SQL データへのアクセスはできない。したがって,行 中の生成列に対応するフィー

ルドの値は,の 0 個以上の他のフィールドの値によって決定される。

生成列 GC は,その生成式中の<列参照>によって参照される各列に依存し,そのようなそれぞれの被参

照列は,GC のパラメタ列  (parametric column)  とする。

4.15.13

グループ表

グループ表  (grouped table)  は,<GROUP BY 句>の評価の間に導出されるグループの集合とする。グル

ープ は,どのグループ化列 GC に対しても,ある行中の GC の値が GV と異ならないならば,各行中の

GC の値が GV である行の集まりとする。さらに,R1 が,グループ表 GT のグループ G1 中の行で,かつ,

R2 が,どのグループ化列 GC に対しても,R1 中の GC の値が R2 中の GC の値と異ならないような GT 

の行ならば,R2 は,G1 中にある。GT 中のどの行も,ただ一つのグループ中にある。グループを表とみな

してもよい。集合関数は,グループに対して作用する。

4.15.14

ウィンドウ表

ウィンドウ表  (windowed table)  は,一つ以上のウィンドウを伴う表とする。ウィンドウ  (window)  は,<

表式

>に関連付けられた過渡データ構造とする。ウィンドウは,<ウィンドウ定義>によって陽に定義され

るか,又は

<句内ウィンドウ指定>によって暗に定義される。暗に定義されたウィンドウは,処理系依存の

ウィンドウ名をもつ。ウィンドウは,

<ウィンドウ関数>の定義中で用いる行の集まりであるウィンドウ区

画及びウィンドウ枠を指定するために用いる。

どのウィンドウも,

<表式>の行のウィンドウ分割  (window partitioning)  を定義する。ウィンドウ分割は,

列のリストによって指定する。ウィンドウ分割は,グループ表のグループの形成と類似している。しかし,

グループ表とは異なり,各行は,

<表式>の結果中に保持される。行 のウィンドウ区画  (window partition)

は,ウィンドウ分割句中に列挙される全ての列に対して,と異ならない行 R2 の集まりとする。ウィン

ドウ分割句は,省略可能とする。省略されるならば,結果中の全ての行から成る単一のウィンドウ区画が

存在する。

<表式>がグループ化され,ウィンドウももつならば,ウィンドウ区画が行のグループではなく<導出表>

の行から成るように,グループ化を

<導出表>に分離する構文上の変換が存在する。

ウィンドウは,ウィンドウによって定義される各ウィンドウ区画内の行の

ウィンドウ順序付け  (window 

ordering)  を定義してもよい。ウィンドウ区画内の行のウィンドウ順序付けは,<値式>及びそれに続く(昇

順のための)

ASC 又は(降順のための)DESC のリストによって指定する。さらに,各<値式>の順序付け

られた並び中でナル値が全てのナルでない値の前に現れるのが望ましいか又は後に現れるのが望ましいか

を示すために,

NULLS FIRST 又は NULLS LAST を指定してもよい。

ウィンドウ順序付けグループ  (window ordering group)  は,ウィンドウ区画中の,ウィンドウ順序付けに

従って同位の行の最大集合とする。ウィンドウ順序付けグループ内の行の順序付けは,処理系依存とする

が,ウィンドウ区画のウィンドウ順序付けグループを全順序付けすることは,次のとおり可能である。

WOG1 及び WOG2 が,

同じウィンドウ区画 に含まれる二つのウィンドウ順序付けグループならば,WOG1

が WOG2 に先行するということは,WOG1 のある行が WOG2 のある行に先行することと同値とする。

任意に,ウィンドウは,各行 に対してウィンドウ枠  (window frame)  を定義してもよい。ウィンドウ枠

は,常に現在行と関連して定義される。ウィンドウ枠は,最大四つの次の構文要素によって指定する。

  <ソートキー>の値に対する増減によって現在行から前方若しくは後方に変位させることによってウ


58

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

ィンドウ枠の論理的な定義を示すための

RANGE,現在行を含むウィンドウ順序付けグループから(<

ソートキー

>によって定義される)ウィンドウ順序付けグループの個数を前方若しくは後方に数えるこ

とによってウィンドウ枠の論理的な定義を示すための

GROUPS,又は現在行から前方若しくは後方に

行を数えることによってウィンドウ枠の物理的な定義を示すための

ROWS の選択。

  開始行。これは,のウィンドウ区画の最初の行,現在行,又は現在行からの論理的若しくは物理的

な変位によって決定される任意の行であってもよい。

  終了行。これは,のウィンドウ区画の最後の行,現在行,又は現在行からの論理的若しくは物理的

な変位によって決定される任意の行であってもよい。

  (開始行の前又は終了行の後にあることによって既に除外されていないならば,)現在行及び/又はそ

の同位行を除外するかどうかを示す

<ウィンドウ枠除外>。

ウィンドウは,次の項目を含む

ウィンドウ構造記述子  (window structure descriptor)  によって記述される。

  ウィンドウ名。

  任意に,順序付けウィンドウ名。すなわち,順序付けウィンドウ  (ordering window)  と呼ばれ,現在の

ウィンドウの分割及び順序付けを定義するために用いる別のウィンドウの名前。

  ウィンドウ分割句。すなわち,現在の<ウィンドウ指定>中,又は順序付けウィンドウのウィンドウ記

述子中のいずれかで指定されているならば,

<ウィンドウ区画句>。

  ウィンドウ順序付け句。すなわち,現在の<ウィンドウ指定>中,又は順序付けウィンドウのウィンド

ウ記述子中のいずれかで指定されているならば,

<ウィンドウ順序句>。

  あるならば,ウィンドウ枠付け句。すなわち,<ウィンドウ枠句>。

一般的に,二つの

<ウィンドウ関数>は,独立して計算され,それらが同じデータ及び同じ<ソート指定

リスト

>を用いるとしても,それぞれが独自にデータの並べ替えを実行する。並べ替えは,半順序を指定し

てもよいので,

<ウィンドウ関数>の計算は,全順序ではない点で必然的に非決定的とする。それにもかか

わらず,例えば,二つの移動集約が正確に同じ順序で区画の行を移動するような同じ順序付けを用いて二

つの

<ウィンドウ関数>が計算されることを利用者が望むかもしれない。次のいずれかが真ならば,二つの

<ウィンドウ関数>は,それらの行の(潜在的に非決定的な)同じウィンドウ順序付けを用いて計算される。

  <ウィンドウ関数>が同じウィンドウ構造記述子を識別する。

  <ウィンドウ関数>のウィンドウ構造記述子がウィンドウ分割句をもち,それらのウィンドウ分割句が

同じ個数の列参照から成り,出現順に対応するそれらの列参照の対が等価である。かつ,それらのウ

ィンドウ構造記述子が同じ個数の

<ソートキー>のウィンドウ順序付け句をもち,それらの<ソートキ

>が全て列参照であり,出現順に対応するそれらの列参照の対が等価であり,対応する<ソート指定

>の対が,等価な<照合順名>を指定する<COLLATE 句>,同じ<順序付け指定>(ASC 又は DESC),及

び同じ

<ナル順序付け>(NULLS FIRST 又は NULLS LAST)を指定するか又は暗に想定する。

  一方の<ウィンドウ関数>のウィンドウ構造記述子が他方の<ウィンドウ関数>の順序付けウィンドウ

であるか,又は両方のウィンドウ構造記述子が同じ順序付けウィンドウを識別する。

4.16  データ分析操作(表を含む)

この細分箇条は,ISO/IEC 9075-14 の“4.4  データ分析操作(表を含む)”によって修正される。 

4.16.1  データ分析操作の導入

データ分析関数は,

<表式>の結果中の多数の行から導出される値を戻す関数とする。データ分析関数を


59

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

呼び出してもよいのは,

<問合せ指定>,<SELECT 文:単一行>又は単純表問合せの一部としてだけで,か

つ,この後に示す幾つかの文脈の場合だけとする。データ分析関数は,次のうちの一つとする。

  グループ表に対して呼び出され,グループ表のグループからグループ化操作又は集約関数を計算する

グループ関数。

  ウィンドウ表に対して呼び出され,ウィンドウ表の各行に対して値を計算するウィンドウ関数。

4.16.2  グループ関数

グループ関数は,

<問合せ指定>又は<SELECT 文:単一行>の<選択リスト>,<HAVING 句>又は<WINDOW

>中にだけ現れてもよい。

グループ関数は,次のうちの一つとする。

  グループ化操作  (grouping operation)。

  グループ集約関数  (group aggregate function)。

グループ化操作は,

GROUPING(<列参照>)  という形式から成る。そのような呼出しの結果は,CUBE,

ROLLUP 又は GROUPING SET を含むグループ化問合せの実行の間,値がその<列参照>による集約の結果

である行の場合は,

1 とし,そうでなければ,0 とする。

4.16.3  ウィンドウ関数

ウィンドウ関数は,ウィンドウ表のウィンドウ構造記述子によって定義されたとおりに,与えられた行

に対する結果がその行のウィンドウ枠から導出される関数とする。ウィンドウ関数は,

<問合せ指定>若し

くは

<SELECT 文:単一行>の<選択リスト>中,又は単純表問合せである<問合せ式>に単純に含まれる

<ORDER BY 句>中にだけ現れてもよい。

ウィンドウ関数は,次のうちの一つとする。

  順位関数。

  分布関数。

  行番号関数。

  ウィンドウ集約関数。

 NTILE 関数。

 LEAD 関数。

 LAG 関数。

 FIRST_VALUE 関数。

 LAST_VALUE 関数。

 NTH_VALUE 関数。

順位関数は,ウィンドウ構造記述子によって指定されたそれらの行のウィンドウ順序付けに従って,同

じウィンドウ構造記述子によって定義されたとおりの行 のウィンドウ区画内での の順位を計算する。

それらのウィンドウ区画内のウィンドウ順序付けに関して互いに異ならない行には,同じ順位が割り当て

られる。キーワード

RANK 及び DENSE_RANK によって指定する 2 種類の順位がある。

 RANK が指定されるならば,行 の順位は,に先行し,かつ,の同位行でない行の個数に 1 を加

えた値として定義される。

注記 45  これは,ウィンドウ順序付けに関して二つ以上の行が異ならないならば,連続した順位の番

号付け中に

1 以上の隔たりがあることを意味する。


60

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

 DENSE_RANK が指定されるならば,行 の順位は,に先行する行及び を含む行で,ウィンドウ

順序付けに関して異なる行の個数として定義される。

注記 46  これは,各ウィンドウ区画中で,行の連続した順位の番号付け中に隔たりがないことを意味

する。

分布関数は,ウィンドウ構造記述子によって定義された行 のウィンドウ区画内での の相対順位を計

算し,

その相対順位を

0.0 と 1.0 との間の概数比として表す。キーワード PERCENT_RANK 及び CUME_DIST

によって指定する

2 種類の相対順位がある。

 PERCENT_RANK が指定されるならば,行 の相対順位は,(RK-1)/(NR-1)  として定義される。ここ

で,RK は,の RANK と定義し,NR は,のウィンドウ区画内の行の個数と定義する。

 CUME_DIST が指定されるならば,行 の相対順位は,NP/NR として定義される。ここで,NP は,R

のウィンドウ区画のウィンドウ順序付けで に先行するか又は と同位の行の個数と定義し,NR は,

のウィンドウ区画内の行の個数と定義する。

ROW_NUMBER 関数は,ウィンドウのウィンドウ順序付けに従って,そのウィンドウ区画内での,最初

の行を

1 として開始するその行の連続した行番号を計算する。

ウィンドウ集約関数は,グループ表のグループではなく,行のウィンドウ枠に対して集約するという点

を除いて,グループ集約関数と同じ集約値(

COUNT, SUM, AVG など)を計算する。仮説集合関数は,ウ

ィンドウ集約関数としては許されない。

ウィンドウ集約関数 WAF の集約化引数は,<入れ子ウィンドウ関数>を含んでもよい。<入れ子ウィンド

ウ関数

>には,<入れ子 ROW_NUMBER 関数>及び<VALUE_OF 式 AT 行>の二つがある。<入れ子ウィンド

ウ関数

>は,両方とも,特定の行を示すキーワードである<行マーカ>を用いる。<入れ子ウィンドウ関数>

を評価する特定の行を とする。によって決定されるウィンドウ枠を とし,を含むウィンドウ区画

を とする。<行マーカ>は,次のとおりとする。

  の最初の行を示す BEGIN_PARTITION。

  の最初の行を示す BEGIN_FRAME。

  の最後の行を示す END_ FRAME。

  の最後の行を示す END_PARTITION。

  行 を示す CURRENT_ROW。

  WAF の評価の間に の最初の行から最後の行まで変動する 内の行を示す FRAME_PARTITION。

<入れ子 ROW_NUMBER 関数>は,<行マーカ>のウィンドウ区画での行番号を戻す(ウィンドウ区画内

の行は,ウィンドウ順序付けに従って

1 から始まる連続した番号が付けられる。)。

<VALUE_OF 式 AT 行>は,<行マーカ>に省略可能な変位を加えるか又は差し引くことによって示される

行に対して

<値式>を評価する。<行マーカ>と加えるか又は差し引く変位とを組み合わせた結果が,ウィン

ドウ区画の外側になるならば,

<VALUE_OF 式 AT 行>の値は,省略可能な引数の値か,又はこの引数が省

力された場合のナル値とする。

NTILE 関数は,位取り 0 の真数値 として評価される<単純値指定>又は<動的パラメタ指定>を引数とし

てとり,ウィンドウ構造記述子によって定義される のウィンドウ区画内の各行 に対して,1 から 

での範囲の位取り

0 の真数値を計算する。

LEAD 関数及び LAG 関数は,それぞれ,<値式> VE,<真数定数> OFFSET 及び<値式> DEFAULT の三


61

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

つの引数をとる。ウィンドウ構造記述子によって定義される行 のウィンドウ区画 内の各 に対して,

LAG 関数は,内で の OFFSET 行前にある行に対して評価した VE の値を戻し,LEAD 関数は,内で

の OFFSET 行後にある行に対して評価した VE の値を戻す。DEFAULT の値は,

LAG 関数に対して)P

内で の OFFSET 行前に対応する行がないか,又は(LEAD 関数に対して)内で の OFFSET 行後に

対応する行がないならば,結果として戻される。さらに,VE がナル値と評価される 内の行を保持する

か又は取り除くかを示すために,

RESPECT NULLS 又は IGNORE NULLS を指定できる。

FIRST_VALUE 関数及び LAST_VALUE 関数は,引数として任意の<値式> VE をとり,ウィンドウ表の各

行 に対して,ウィンドウ構造記述子によって定義される のウィンドウ枠の最初の行(FIRST_VALUE

関数の場合)

,又は のウィンドウ枠の最後の行(LAST_VALUE 関数の場合)に対して評価した VE の値

を戻す。さらに,VE がナル値と評価される行を保持するか又は取り除くかを示すために,RESPECT NULLS

又は

IGNORE NULLS を指定できる。

NTH_VALUE 関数は,任意の<値式> VE,及び位取り 0 の真数値 として評価される<単純値指定>又は<

動的パラメタ指定

>を引数としてとり,ウィンドウ表の各行 に対して,ウィンドウ構造記述子によって

定義される のウィンドウ枠の最初の行(FROM FIRST が指定されるか又は暗に想定されるとき)又は最

後の行(

FROM LAST が指定されるとき)から 番目の行に対して評価した VE の値を戻す。さらに,VE

がナル値と評価される行を保持するか又は取り除くかを示すために,

RESPECT NULLS 又は IGNORE

NULLS を指定できる。

4.16.4  集約関数

この細分箇条は,ISO/IEC 9075-14 の“4.4.1  集約関数”によって修正される。 

集約関数は,次のうちの一つによって定義される行の集約から結果が導出される関数とする。

  グループ表のグループ化。この場合,集約関数は,グループ集約関数又は集合関数とし,各グループ

に対して,そのグループ中の全ての行を含む一つの集約がある。

  特定のウィンドウ構造記述子に関連するウィンドウ表の行 のウィンドウ枠。この場合,集約関数は,

ウィンドウ集約関数とし,その集約は,ウィンドウ構造記述子によって定義されるとおりの のウィ

ンドウ枠中の全ての行から成る。

任意に,

<FILTER 句>によって指定する<探索条件>を満たす行だけを保持して,集約中の行の集まりを

ろ(濾)過してもよい。

集約関数

COUNT(*)  の結果は,集約中の行の個数とする。

他のどの集約関数も,

単項グループ集約関数  (unary group aggregate function),項グループ集約関数

(binary group aggregate function),逆分布関数  (inverse distribution function)  又は仮説集合関数  (hypothetical 

set function)  として分類してもよい。

どの単項集約関数も,引数として任意の

<値式>をとる。ほとんどの単項集約関数は,DISTINCT 又は ALL

のいずれかで任意に限定することができる。集約中の行でも,次の行は,集約される行から取り除かれる。

 DISTINCT が指定されるならば,冗長な重複行。

  <値式>がナル値と評価される全ての行。

集約される行がないならば,

COUNT の結果は,0 とし,他のどの集約関数の結果も,ナル値とする。

14

  そうでなければ,(すなわち,少なくとも一つの行が集約されるならば,)集約関数の結果は,次によ

る。


62

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

 COUNT

<値式>が指定されるならば,集約される行の個数。

 SUM が指定されるならば,集約される各行に対して評価される<値式>の合計。

 AVG が指定されるならば,集約される各行に対して評価される<値式>の平均。

 MAX が指定されるならば,集約される各行に対して評価される<値式>の最大値。

 MIN が指定されるならば,集約される各行に対して評価される<値式>の最小値。

 EVERY が指定されるならば,集約される全ての行に対して<値式>が真  (True)  と評価されるならば,

真,そうでなければ,偽  (False)。

 ANY 又は SOME が指定されるならば,集約される少なくとも一つの行に対して<値式>が真  と評価さ

れるならば,

真,そうでなければ,偽。

 VAR_POP が指定されるならば,集約される各行に対して評価される<値式>の母集団分散で,集約さ

れる行の

<値式>の平均からの<値式>の差の 2 乗和をその行数で除した値として定義される。

 VAR_SAMP が指定されるならば,集約される各行に対して評価される<値式>の標本分散で,集約さ

れる行の

<値式>の平均からの<値式>の差の 2 乗和をその行数から 1 を減じた値で除した値として定義

される。

 STDDEV_POP が指定されるならば,集約される各行に対して評価される<値式>の母集団標準偏差で,

母集団分散の平方根として定義される。

 STDDEV_SAMP が指定されるならば,集約される各行に対して評価される<値式>の標本標準偏差で,

標本分散の平方根として定義される。

 ARRAY_AGG が指定されるならば,集約される各行に対して評価される<値式>から形成される一つの

要素をもつ配列値。

VAR_POP,VAR_SAMP,STDDEV_POP 又は STDDEV_SAMP に対しては,DISTINCT も ALL も指定す

ることが許されない。これらの関数を計算するとき,冗長な重複行は,集約される行から取り除かれない。

2 項集約関数は,<従属変数式>及び<独立変数式>の 1 対の引数をとり,それらは,両方とも<数値式>と

する。どちらかの引数がナル値と評価されるどの行も,集約される行から取り除かれる。集約される行が

ないならば,

REGR_COUNT の結果は,0 とし,他の 2 項集約関数は,ナル値になる。そうでなければ,

計算が行われ,その結果は,次のとおりとする。

 REGR_COUNT が指定されるならば,集約される行の個数。

 COVAR_POP が指定されるならば,母集団共分散で,集約される行の<従属変数式>のその平均からの

差に

<独立変数式>のその平均からの差を乗じた積の合計を行数で除した値として定義される。

 COVAR_SAMP が指定されるならば,標本共分散で,集約される行の<従属変数式>のその平均からの

差に

<独立変数式>のその平均からの差を乗じた積の合計を行数から 1 を減じた値で除した値として定

義される。

 CORR が指定されるならば,相関係数で,母集団共分散を<独立変数式>の母集団標準偏差と<従属変

数式

>の母集団標準偏差との積で除した比率として定義される。

 REGR_R2 が指定されるならば,相関係数の 2 乗。

 REGR_SLOPE が指定されるならば,(<独立変数式>,<従属変数式>)の対によって決定される最小 2

乗線形方程式の傾き。

 REGR_INTERCEPT が指定されるならば,(<独立変数式>,<従属変数式>)の対によって決定される最

2 乗線形方程式の y 切片。


63

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

 REGR_SXX が指定されるならば,<独立変数式>の 2 乗の合計。

 REGR_SYY が指定されるならば,<従属変数式>の 2 乗の合計。

 REGR_SXY が指定されるならば,<従属変数式>に<独立変数式>を乗じた積の合計。

 REGR_AVGX が指定されるならば,<独立変数式>の平均。

 REGR_AVGY が指定されるならば,<従属変数式>の平均。

二つの逆分布関数

PERCENTILE_CONT 及び PERCENTILE_DISC がある。逆分布関数は,両方とも,引

数,及び値式の順序付けを指定する。引数の値は,

0 以上で,かつ,1 以下であるのが望ましい。値式は,

集約される各行に対して評価され,ナル値が捨てられ,残っている行が順序付けられる。その計算は,次

によって決定する。

 PERCENTILE_CONT が指定されるならば,集約される行の総数に対する割合として扱われる引数によ

って示される連続した行の対を考えて,これらの行に対して値式を評価して値を内挿する。

 PERCENTILE_DISC が指定されるならば,ウィンドウ順序付けとして指定された値式の順序付けを用

いて,

CUME_DIST ウィンドウ関数のウィンドウ区画として集約される行の集まりを扱って,累積分

布値が引数以上の最初の値式を戻す。

仮説集合関数は,ウィンドウ関数

RANK,DENSE_RANK,PERCENT_RANK 及び CUME_DIST と関連

があり,異なる構文をもつが,同じ名前を用いる。これらの関数は,引数 A,及び値式 VE の順序付けを

とる。VE は,集約される全ての行に対して評価される。値のこの集まりは,によって拡張される。結果

の集まりは,ウィンドウ順序付けがその値式の順序付けである対応するウィンドウ関数のウィンドウ区画

として扱われる。仮説集合関数の結果は,集まりに を加えた,仮説“行 (row)”に対する同じ名前のウ

ィンドウ関数の値とする。

4.17  決定論

一般的に,操作が同一の入力値で繰り返されたとき,確実に同一の結果を計算するならば,その操作は,

決定的  (deterministic)  とする。SQL 呼出しルーチンに対しては,引数リスト中の値を入力とみなす。そう

でなければ,

SQL データ,及びそれらをアクセスするための権限の集合を入力とみなす。行の順序付けで

の違いは,処理系依存の振る舞いを規定する一般規則によって許されるとおり,決定論の議論に対して意

味があるとはみなさない。

注記 47  トランザクション隔離性水準,特に SERIALIZABLE 以外のトランザクション隔離性水準は,決

定論に重大な影響を与える。しかし,

(行又はページにロックをかけるというような)実装技術

を公に要求しないでその影響を明確に規定することが難しく,異なる

SQL 処理系のほとんどが

全く異なる方法でこの問題を確かに解決しているので,この規格では,この影響を扱わない。

操作が決定的であると認識することは,難しい作業であり,この規格では,一般的に要求しない。

SQL

呼出しルーチンは,ルーチンが

DETERMINISTIC であると宣言されるならば,決定的とみなす。すなわち,

SQL 処理系は,ルーチンが決定的であることを SQL 呼出しルーチンの定義者が正しく宣言したと信用する。

他の操作に対しては,この規格では,操作が決定的であるとしてラベル付けしない。その代わりに,幾つ

かの操作を“潜在的に非決定的”として識別する。

<値式>,<表参照>,<表一次子>,<問合せ指定>,<問

合せ式

>及び<SQL 手続文>に関連した他の細分箇条で,特定の定義を見つけることができる。

幾つかの

<ブール値式>は,“回顧決定的”として識別される。回顧決定的な<ブール値式>は,ある時点

真  (True)  ならば,同一の権限の集合をもつ任意の利用者によって同一の SQL データに対して再評価さ


64

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

れるとき,それ以降の全ての時点で

真  になるという特性をもつ。正確な定義は,“6.35 <ブール値式>”で

見つかる。

4.18  整合性制約

4.18.1  整合性制約の概要

整合性制約

 (integrity constraint) は,一般的に制約として単純に参照され,実表中の値を制約することに

よって

SQL データの正しい状態を定義する。制約は,制約記述子によって記述される。制約は,表制約,

定義域制約又は表明のいずれかとし,それぞれ,表制約記述子,定義域制約記述子又は表明記述子によっ

て記述される。各制約記述子は,次の項目を含む。

  制約の名前。

  適用可能な<探索条件>。

注記 48  記述子に含まれる適用可能な<探索条件>は,実行することによって制約記述子を生じる SQL

文に含まれるかもしれない

<探索条件>である必要はない。幾つかの場合には,与えられた<

探索条件

>からそれを導出するが,その SQL 文の一般規則が,制約記述子に含まれるべき適

用可能な

<探索条件>を規定する。例えば,表制約の構文は,その表の行に対する万能の限定

が暗に想定されることを許す。記述子に含まれる適用可能な

<探索条件>中で,全ての種類の

制約の一様な扱いを許すために,その万能の限定が陽に行われる。

  制約が遅延可能かどうかを示す標識。

  初期制約モードが遅延  (deferred)  か又は即時  (immediate)  かを示す標識。

どの整合性制約も,回顧決定的ではない

<探索条件>を用いて定義してはならない。

4.18.2  制約の検査

どの制約も,

遅延可能  (deferrable)  か又は遅延可能でない  (non-deferrable)  かのいずれかとする。SQL

トランザクション内で,どの制約も,制約モードをもつ。制約が遅延可能でないならば,その制約モード

は,常に

即時  (immediate)  とする。そうでなければ,即時又は遅延  (deferred)  のいずれかとする。どの制

約も,各

SQL トランザクションの開始時点及びその制約の定義直後のその制約の制約モードを指定する初

期制約モードをもつ。制約が遅延可能ならば,

<SET CONSTRAINT MODE 文>を実行することによって,

(即時から遅延に,又は遅延から即時に,)その制約モードを変更してもよい。

表制約は,

強制  (enforced)  か,又は強制でない  (not enforced)  かのいずれかとする。定義域制約及び表

明は,常に強制とする。

強制制約の検査は,現行

SQL トランザクション内の制約モードに依存する。SQL 文が実行されるときは

いつでも,その実行が影響を与えた結果として生じる

SQL データ及びスキーマの変更の後のある時点で,

制約が満たされるかどうかを調べるために,モードが即時であるどの強制制約も検査される。制約が

満た

される  (satisfied)  ということは,その記述子に含まれる適用可能な<探索条件>が真  (True)  又は不定

(Unknown)  と評価されることと同値とする。いずれかの強制制約が満たされないならば,その文の実行の

結果として生じる

SQL データ又はスキーマのどの変更も取り消される(“13.4 <SQL 手続文>”の一般規則

参照)

注記 49  これは,異なる SQL 文の実行の直接の結果又は間接の結果として実行される SQL 文を含む。

それは,制約モードへの即時の設定を陽に含むか又は暗に含む効果をもつ文も含む。

<SET CONSTRAINT MODE 文>の実行によって陽に設定するか,又は現行 SQL トランザクションの最後

に暗に設定するかのいずれかで,制約モードに即時を設定することができる。


65

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

<COMMIT 文>が実行されるとき,全ての強制制約が実効的に検査され,いずれかの強制制約が満たされ

ないならば,例外条件が引き起こされ,その

SQL トランザクションは,暗に想定される<ROLLBACK 文>

によって終了する。

制約の検査とは対照的に,参照制約によって指定される参照動作は,決して遅延しない。

4.18.3  表制約

4.18.3.1  表制約の導入

表制約  (table constraint)  は,実表記述子に記述子が含まれる制約とする。特定の実表に関連付けること

は,その表の行に対する万能の限定が暗に想定される便利な構文的簡略表現が許される。

表制約は,一意性制約,参照制約又は表検査制約のいずれかとする。表制約は,表制約記述子によって

記述される。

制約記述子の構成要素に加えて,表制約記述子は,次の項目を含む。

  制約が強制か又は強制でないかを示す標識。

注記 50  一意性制約は,常に強制である。表検査制約又は参照制約は,強制又は強制でないのいずれ

かであり得る。

表制約記述子は,それぞれ,一意性制約記述子,参照制約記述子又は表検査制約記述子のいずれかとす

る。

下位表の全ての行がその上位表の全ての行中に対応する上位行をもつとみなされるという事実によって,

実表 に対して指定されるどの表制約も,暗に の全ての下位表に関する制約とする。

4.18.3.2  一意性制約

表制約記述子の構成要素に加えて,一意性制約記述子は,次の項目を含む。

 PRIMARY

KEY で定義されたか,又は UNIQUE で定義されたかを示す標識。

  <一意列リスト>中に指定された一意列  (unique column)  の名前及び位置。

 <WITHOUT

OVERLAPS 指定>が指定されるならば,指定された期間の名前。

一意性制約が

PRIMARY KEY で定義されたことを示す一意性制約記述子を実表 の表記述子が含むなら

ば,その一意性制約の列は,の主キー  (primary key)  を構成する。主キーをもつ表は,真上位表をもつこ

とができない。

表 に対して,<WITHOUT OVERLAPS 指定>を含まない一意性制約が満たされるということは,一意列

中にナルでない同じ値をもつような の二つの行 R1 及び R2 が存在しないことと同値とする。表 の一意

性制約 UC が<WITHOUT OVERLAPS 指定>  WOS を含むならば,WOS に含まれる<適用業務時刻期間名>

を ATPN とする。UC が満たされるということは,一意列中にナルでない同じ値をもち,かつ,の二つの

行 R1 及び R2 の ATPN 期間値が重なるような R1 及び R2 が存在しないことと同値とする。さらに,一意

性制約が

PRIMARY KEY で定義されたならば,それは,指定された列中のどの値もナル値でないことを要

求する。

4.18.3.3  参照制約

表制約記述子の構成要素に加えて,参照制約記述子は,次の項目を含む。

  <参照列>中に指定された参照列  (referencing column)  の名前のリスト。

  <被参照表及び列>中に指定された被参照表  (referenced table)。

  <被参照表及び列>中に指定された被参照列  (referenced column)  の名前のリスト。


66

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

  <参照 PERIOD 指定>が指定されるならば,指定された期間の名前。

  <一致型>及び<参照被トリガ動作>。

<一致型>の選択は,MATCH SIMPLE,MATCH PARTIAL 及び MATCH FULL とする。MATCH SIMPLE

は,既定値とする。参照列が一つだけ(したがって,被参照列も一つだけ)ならば,これらの選択の間に

意味上の違いはない。全ての参照列がナル可能でないならば,これらの選択の間に意味上の違いはない。

参照列が二つ以上であり,それらの少なくとも一つがナル可能で,かつ,

<参照 PERIOD 指定>が指定され

ないならば,各

<一致型>は,次の意味をもつ。

 MATCH

SIMPLE:  少なくとも一つの参照列がナルならば,参照表の行は,制約検査を通過する。全

ての参照列がナルでないならば,行が制約検査を通過することは,全ての参照列と一致する被参照表

の行が存在することと同値とする。

 MATCH PARTIAL:  全ての参照列がナルならば,参照表の行は,制約検査を通過する。少なくとも

一つの参照列がナルでないならば,行が制約検査を通過することは,全てのナルでない参照列と一致

する被参照表の行が存在することと同値とする。

 MATCH

FULL:  全ての参照列がナルならば,参照表の行は,制約検査を通過する。全ての参照列が

ナルでないならば,行が制約検査を通過することは,全ての参照列と一致する被参照表の行が存在す

ることと同値とする。ある参照列がナルで,かつ,別の参照列がナルでないならば,参照表の行は,

制約検査に違反する。

参照列が二つ以上であり,それらの少なくとも一つがナル可能で,かつ,

<参照 PERIOD 指定>が指定さ

れるならば,

<参照 PERIOD 指定>に含まれる<適用業務時刻期間名>を CATPN とし,<被参照 PERIOD 指

>に含まれる<適用業務時刻期間名>を PATPN とする。各<一致型>は,次の意味をもつ。

 MATCH

SIMPLE:  少なくとも一つの参照列がナルならば,参照表の行は,制約検査を通過する。全

ての参照列がナルでないならば,参照表の行 が制約検査を通過することは,被参照表の行の空でな

い集合 中の各行が の全ての参照列と一致し,かつ,の CATPN 期間値が 中の行の PATPN 期間

値の和集合の部分集合であるような が存在することと同値とする。

 MATCH PARTIAL:  全ての参照列がナルならば,参照表の行は,制約検査を通過する。少なくとも

一つの参照列がナルでないならば,参照表の行 が制約検査を通過することは,被参照表の行の空で

ない集合 中の各行が の全てのナルでない参照列と一致し,かつ,の CATPN 期間値が 中の行

の PATPN 期間値の和集合の部分集合であるような が存在することと同値とする。

 MATCH

FULL:  全ての参照列がナルならば,参照表の行は,制約検査を通過する。全ての参照列が

ナルでないならば,参照表の行 が制約検査を通過することは,被参照表の行の空でない集合 中の

各行が の全ての参照列と一致し,かつ,の CATPN 期間値が 中の行の PATPN 期間値の和集合の

部分集合であるような が存在することと同値とする。ある参照列がナルで,かつ,別の参照列がナ

ルでないならば,参照表の行は,制約検査に違反する。

注記 51  <参照 PERIOD 指定>が指定される場合には,参照表中の与えられた行 に対して,対応する

行が被参照表中に二つ以上存在しても,

の CATPN 期間値中の与えられた任意の時点では,

高々一つの対応する行が被参照表中に存在する。

参照列の名前のリスト及び被参照列の名前のリストの順序付けは,処理系定義とするが,対応する列の

名前は,各リスト中の対応する位置を占めなければならない。


67

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

表制約が参照制約の場合には,その表は,

参照表  (referencing table)  として参照される。参照制約の被参

照列  は,被参照表  のいずれかの一意性制約の一意列  でなければならない。<参照 PERIOD 指定>が指定

されるならば,被参照表の一意列を定義する一意性制約は,

<WITHOUT OVERLAPS 指定>を指定しなけれ

ばならない。

参照表は,被参照表と同じ表でもよい。

NO ACTION を含まない<更新規則>は,参照更新動作  (referential update action)  を指定する。NO ACTION

を含まない

<削除規則>は,参照削除動作  (referential delete action)  を指定する。参照更新動作及び参照削除

動作を,まとめて

参照動作  (referential action)  と呼ぶ。参照動作は,参照制約の検査の部分ではなく,そ

の前に実行される。参照制約を遅延させることは,その制約の

<探索条件>(<MATCH 述語>)の検査を遅

延させるが,参照制約の参照動作は,遅延させない。

注記 52  例えば,ON UPDATE CASCADE のような参照更新動作が指定されるならば,参照制約が遅延で

あっても,被参照表に対するどの

UPDATE 操作も,その UPDATE 操作の部分として参照表に波

及する。したがって,その参照制約は,

UPDATE 文によって違反にはなり得ない。一方,ON

UPDATE SET DEFAULT は,参照列にその既定値が設定された後に一致する行が存在しないなら

ば,参照制約の違反になり得る。さらに,参照表に関する

INSERT 操作及び UPDATE 操作には,

参照制約のどんな自動的な実行も伴わない。そのような制約の違反は,

COMMIT 時又はその前

に,参照制約が最終的に検査されるときに検出される。

<更新規則>のための選択肢は,次による。

 ON

UPDATE

CASCADE:  被参照表中の被参照列に対するどの変更も,参照表の一致行中の対応する

参照列に対して同じ変更を引き起こす。

  ON UPDATE SET NULL:  被参照表中の被参照列に対するどの変更も,参照表の一致行中の対応する

参照列にナルを設定させる。

  ON UPDATE SET DEFAULT:  被参照表中の被参照列に対するどの変更も,参照表の一致行中の対応

する参照列にその既定値を設定させる。

 ON

UPDATE

RESTRICT:  一致行が存在するならば,被参照表中の被参照列に対するどの変更も禁止

される。

 ON

UPDATE

NO

ACTION(既定値)

:  参照更新動作がない。参照制約は,制約検査だけを指定する。

注記 53  制約検査が遅延でなくても,ON UPDATE RESTRICT は,ON UPDATE NO ACTION よりも厳し

い条件である。

ON UPDATE RESTRICT は,一致行が存在するならば,特定の行の更新を禁止

する。

ON UPDATE NO ACTION は,更新されるべき行の集合が完全に処理されるまで,その制

約検査を実行しない。

<削除規則>のための選択肢は,次による。

 ON

DELETE

CASCADE:  被参照表の行が削除されるならば,参照表中の全ての一致行が削除される。

  ON DELETE SET NULL:  被参照表の行が削除されるならば,参照表の全ての一致行中の全ての参照

列にナルが設定される。

  ON DELETE SET DEFAULT:  被参照表の行が削除されるならば,参照表の全ての一致行中の全ての

参照列にその列の既定値が設定される。

 ON

DELETE

RESTRICT:  参照表中に一致行をもつならば,被参照表の行の削除が禁止される。

 ON

DELETE

NO

ACTION(既定値)

:  参照削除動作がない。参照制約は,制約検査だけを指定する。


68

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

注記 54  参照制約が遅延でなくても,ON DELETE RESTRICT は,ON DELETE NO ACTION よりも厳し

い条件である。

ON DELETE RESTRICT は,一致行が存在するならば,特定の行の削除を禁止す

る。

ON DELETE NO ACTION は,削除されるべき行の集合が完全に処理されるまで,その制約

検査を実行しない。

4.18.3.4  表検査制約

表検査制約が満たされるということは,それが適用される表の全ての行に対して指定された

<探索条件>

真  (True)  又は不定  (Unknown)  と評価されることと同値とする。

注記 55  その結果として,空の表は,それに適用される全ての表検査制約を満たす。

4.18.4  定義域制約

定義域制約は,定義域に対して指定される制約とする。この制約は,その定義域を基にする全ての列,

及びその定義域に型変換する全ての値に適用される。

定義域制約は,定義域制約記述子によって記述される。制約記述子の構成要素に加えて,定義域制約記

述子は,次の項目を含む。

  定義域制約用途の<探索条件>を生成するためのテンプレートの<探索条件>。

  空であるかもしれない定義域制約用途の集合。

定義域制約用途記述子

  (domain constraint usage descriptor)  は,<データ型又は定義域名>が<定義域名>で

ある

<列定義>の評価によって暗に作成される。がそのような列で,がその<定義域名>によって識別さ

れる定義域ならば,に対して定義されるどの定義域制約 DC も,中の各値が DC を満たすという意味

の定義域制約用途を暗に想定する。

表制約記述子の構成要素に加えて,定義域制約用途記述子は,次の項目を含む。

  適用可能な列の名前。

  中の各値が DC を満たすかどうかを評価する適用可能な<探索条件>。

定義域制約が

SQL データによって満たされるということは,その定義域を基にする という名前の列を

もつどの表 に対しても,適切な定義域制約用途中に記録されている適用可能な<探索条件>が真  (True)  又

不定  (Unknown)  と評価されることと同値とする。

定義域制約が

<CAST 指定>の結果によって満たされるということは,指定されたテンプレートの<探索条

>中の<一般値指定> VALUE の各実現値をその<CAST 指定>の結果で置き換えた<探索条件>が真  又は不

定  と評価されることと同値とする。

4.18.5  表明

表明は,記述子がどの表記述子にも含まれない独立スキーマ構成要素である制約とする。

4.19  関数従属性

この細分箇条は,ISO/IEC 9075-9 の“4.11  関数従属性”によって修正される。 

4.19.1  関数従属性の規則及び表記法の概要

この細分箇条は,ISO/IEC 9075-9 の“4.11.1  関数従属性の規則及び表記法の概要”によって修正される。 

09

  この細分箇条では,関数従属性  (functional dependency)  を定義し,実表及び<問合せ式>中の関数従属

性及び候補キーを決定するために,規格に適合する処理系が従わなければならない規則の最小の集合を規

定する。

この細分箇条で示したところでは,この細分箇条中の規則に,処理系定義の規則を自由に追加してもよ


69

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

い。

任意の表を とする。の全ての列から成る集合を CT とし,必ずしも共通要素をもたないわけではな

く,かつ,空であるかもしれない,CT の任意の部分集合を 及び とする。

の全ての可能な値に対して,中のどの列に対しても異ならない任意の二つの行が,中のどの列に

対しても異ならないならば,真になるという,中の に対する の関数従属性を“T : A  ↦ B”[“

で,は,を決定する (in T,  A determines B)”又は“中で が に関数従属である  (B is functionally

dependent on A in T)”と読む。]で示す。表 が文脈から分かるとき,略記“A  ↦ B”を用いてもよい。

X  ↦ が表 中の関数従属性ならば,は,中の の決定子  (determinant)  とする。

中の任意の二つの関数従属性を A  ↦ 及び C  ↦ とする。次の関数従属性も,中の関数従属性であ

る。

  A UNION (C DIFFERENCE B)  ↦   B UNION D

  C UNION (A DIFFERENCE D)  ↦   B UNION D

注記 56  ここで,“UNION”は,和集合を示し,“DIFFERENCE”は,差集合を示す。

これら二つの規則を,関数従属性の

推論規則  (rules of deduction)  と呼ぶ。

どの表にも,関連する空でない関数従属性の集合がある。

任意の に対して X  ↦ であるので,関数従属性の集合は,空ではない。この形式の関数従属性には,

が の部分集合のとき,X  ↦ というような公理的な関数従属性がある。が の部分集合でないなら

ば,X  ↦ は,公理的でない関数従属性とする。

4.19.2  一般規則及び定義

次の細分箇条では,列 C2 を参照する列参照(又は,列参照である<値式>)によって列 C1 が指定され,

表 QT が C2 の修飾する表ならば,C1 を,QT の C2 の対応物  (counterpart)  とする。C1 が,修飾する表 QT1

の C2 の対応物で,かつ,C2 が,修飾する表 QT2 の C3 の対応物ならば,C1 は,QT2 の C3 の対応物とす

る。

対応物の概念は,次に示すとおりに,列の集合に自然に一般化される。S1 及び S2 が列の集合で,S1 

各要素が S2 の対応する要素の対応物であるような 1 対 1 対応が S1 と S2 との間にあるならば,S1 は,S2

の対応物とする。

次の細分箇条は,

知られている関数従属性  (known functional dependency)  の概念を再帰的に定義する。こ

れは,表とその表の列から成る二つの集合との間の

3 項関係とする。この関係は,表中の関数従属性が SQL

処理系に知られていることを表す。全ての公理的な関数従属性は,知られている関数従属性とする。さら

に,関数従属性の推論規則を用いて,知られている関数従属性から推論することができるどの関数従属性

も,知られている関数従属性とする。

次の細分箇条は,(“は,BUC 集合”のように,ここで,は,列の集合とする。)表の列の集合であ

る“BUC 集合  (BUC-set)”の概念も再帰的に定義する。

注記 57  再帰の開始点が,実表の遅延可能でない一意性制約を構成するナルでないことが分かる列の集

合なので,“

BUC”は,“実表一意性制約  (Base table Unique Constraint)”に対する頭字語である。

BUC 集合の概念は,BUC 集合に対する次の推論規則で閉じている。S1 及び S2 が列の集合で,S1 が S2

の部分集合で,S1  ↦ S2 で,かつ,S2 が BUC 集合ならば,S1 も,BUC 集合とする。

注記 58 BUC 集合は,空であるかもしれず,その場合には,表中に高々一つの行がある。この場合は,

BUC 集合のない表と区別する。


70

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

BUC 集合 の全ての列が BT 中に対応物をもち,かつ,の列の可能などの値に対しても,それらの列

中にそれらの値をもつ高々一つの行が BT 中に存在するような関連する実表 BT を,表 の列から成るど

BUC 集合 も,もたなければならないという条件で,SQL 処理系は,BUC 集合を決定するための追加

の規則を定義してもよい。

次の細分箇条は,(“は,BPK 集合”のように,ここで は,列の集合とする。)表の列の集合である

BPK 集合  (BPK-set)”の概念も再帰的に定義する。どの BPK 集合も,BUC 集合とする。

注記 59  再帰の開始点が,実表の遅延可能でない主キー制約を構成するナルでないことが分かる列の集

合なので,“

BPK”は“実表主キー  (Base table Primary Key)”に対する頭字語である。

BPK 集合の概念は,BPK 集合に対する次の推論規則で閉じている。S1 及び S2 が列の集合で,S1 が S2

の部分集合で,S1  ↦ S2 で,かつ,S2 が BPK 集合ならば,S1 も,BPK 集合とする。

注記 60 BUC 集合と同様に,BPK 集合も,空であるかもしれない。

全ての

BPK 集合 が BUC 集合で,かつ,の全ての要素が,関連する実表 BT の主キー中の列に対応

物をもつという条件で,

SQL 処理系は,BPK 集合を決定するための追加の規則を定義してもよい。

知られている関数従属性,

BUC 集合及び BPK 集合を決定するための規則を用いる前に,全ての適用可

能な構文変換(例えば,

*,CUBE 又は ROLLUP を取り除くこと)が適用されなければならない。

次の細分箇条では,次に示すとおりに再帰的に定義される,

<探索条件>  SC の AND 構成要素

(AND-component)  の概念を用いる。

  SC が<ブールテスト> BT ならば,SC の AND 構成要素は,BT だけとする。

  SC が<ブール因子> BF ならば,SC の AND 構成要素は,BF だけとする。

  SC が“P AND Q”という形式の<ブール項>ならば,SC の AND 構成要素は,の AND 構成要素及び

の AND 構成要素とする。

  SC が OR を指定する<ブール値式> BVE ならば,SC の AND 構成要素は,BVE だけとする。

SC の AND 構成要素を AC とし,ここで,AC は,<比較演算子>が<等号演算子>の<比較述語>とする。

AC のオペランドである二つの<行値述語オペランド>を RVE1 及び RVE2 とする。RVE1 及び RVE2 の両方

とも,

<行値構成子述語オペランド>であると仮定する。RVE1 の次数を とする。1 ≤ i ≤ の各 に対して,

RVE1 及び RVE2 の 番目の<共通値式>,<ブール述語オペランド>又は<行値構成子要素>を,それぞれ,

RVEC1i 及び RVEC2i とする。<比較述語>“RVEC1iRVEC2i”を,SC の等値性 AND 構成要素  (equality 

AND-component)  と呼ぶ。

4.19.3  実表中の知られている関数従属性

実表を とし,の全ての列から成る集合を CT とする。

の列の集合 S1 が の一意性制約 UC 中に列挙される列の集合で,UC が PRIMARY KEY を指定し,か

つ,UC が遅延可能でないならば,S1 は,BPK 集合  とする。

の列の集合 S1 が の一意性制約 UC 中に列挙される列の集合で,UC が遅延可能ではなく,かつ,S1

のどの要素も,ナルでないことが分かるならば,S1 は,BUC 集合  とする。

BUC 集合であるような UCL が の列の集合ならば,UCL  ↦ CT は,中の知られている関数従属性  と

する。

GC が の生成列ならば,D  ↦ GC は,中の知られている関数従属性  とする。ここで,は,GC 

パラメタ列の集合とする。

中のその他の知られている関数従属性を処理系定義の規則が決定してもよい。


71

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

4.19.4  ビュー表中の知られている関数従属性

ビュー表を とし,の全ての列から成る集合を CT とする。

場合:

  が参照可能ビューならば,の自己参照列を SRC とする。は,BPK 集合をもたず,の BUC 集

合は,

{SRC}だけとし,{SRC}  ↦ CT は,中の知られている関数従属性とする。

注記 61  この知られている関数従属性は,の下位表が作成されても,有効なまま残る。

  そうでなければ,の元の<問合せ式>を QE とする。QE の BPK 集合の 中の各対応物は,の BPK

集合とする。QE の BUC 集合の 中の各対応物は,の BUC 集合とする。S1  ↦ S2 が QE の知られ

ている関数従属性であり,CS1 が 中の S1 の対応物で,かつ,CS2 が 中の S2 の対応物ならば,CS1

↦ CS2 は,の知られている関数従属性とする。

4.19.5  遷移表中の知られている関数従属性

AFTER トリガ TR 中で定義される遷移表を TT とし,TR の当該表を とする。TT の BPK 集合,BUC

集合及び知られている関数従属性は,の BPK 集合,BUC 集合及び知られている関数従属性と同じとす

る。

4.19.6  <表値構成子>中の知られている関数従属性

<表値構成子>の結果を とし,の全ての列から成る集合を CR とする。

処理系定義の規則によって決定される場合を除いて,の列のどの集合も,BPK 集合でも,BUC 集合で

もない。

全ての公理的な関数従属性は,

<表値構成子>の知られている関数従属性  とする。さらに,(例えば,<

表値構成子

>の実際の値を検査することによって,)処理系定義の知られている関数従属性があってもよい。

4.19.7  <結合表>中の知られている関数従属性

<結合表> JT の 1 番目及び 2 番目の<表参照>によって識別される表を T1 及び T2 とする。JT の結果であ

る表を とする。JT の結果の列の集合を CT とする。

のどの列も,ある対応物を T1 又は T2 のいずれかの中にもつ。NATURAL が指定されるか,又は<結

合指定

>が<名前付き列結合>ならば,の幾つかの列は,T1 及び T2 の両方中に対応物をもってもよい。

の列の集合 が BPK 集合である対応物を T1 又は T2 中にもち,のどの要素も,ナルでないことが分

かり,かつ,S  ↦ CT が の知られている関数従属性  ならば,は,BPK 集合  とする。

の列の集合 が BUC 集合である対応物を T1 又は T2 中にもち,のどの要素も,ナルでないことが分

かり,かつ,S  ↦ CT が の知られている関数従属性  ならば,は,BUC 集合  とする。

注記 62  <結合表>中の知られている関数従属性に対する次の規則は,相互に排反ではない。知られてい

る関数従属性の集合は,前に示した推論規則も含めて,全ての適用可能な規則によって生成さ

れるこれらの従属性の和集合である。

A  ↦ が T1 中の知られている関数従属性で,CA が 中の の対応物で,かつ,CB が 中の の対応

物ならば,次の条件のうちの一つが真のとき,CA  ↦ CB は,中の知られている関数従属性とする。

 CROSS,INNER 又は LEFT が指定される。

 RIGHT 又は FULL が指定され,かつ,次の条件のうちの少なくとも一つが真である。

  中の少なくとも一つの列がナル可能でないことが分かる。

  中の全ての列が結合分割列である。

A  ↦ が T2 中の知られている関数従属性で,CA が 中の の対応物で,かつ,CB が 中の の対応


72

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

物ならば,次の条件のうちの一つが真のとき,CA  ↦ CB は,中の知られている関数従属性とする。

 CROSS,INNER 又は RIGHT が指定される。

 LEFT 又は FULL が指定され,かつ,次の条件のうちの少なくとも一つが真である。

  中の少なくとも一つの列がナル可能でないことが分かる。

  中の全ての列が結合分割列である。

<結合条件>が指定され,AP がその<探索条件>の等値性 AND 構成要素で,AP の一方の比較オペランド

が列参照 CR で,かつ,AP の他方の比較オペランドが<定数>ならば,中の CR の対応物を CRC とする。

空集合を

 {}で示す。次の条件のいずれかが真ならば,{}  ↦ {CRC}  は,中の知られている関数従属性と

する。

 INNER が指定される。

 LEFT が指定され,かつ,CR が T1 中の列への列参照である。

 RIGHT が指定され,かつ,CR が T2 中の列への列参照である。

注記 63  他方の比較オペランドが列参照を含まない決定的な式ならば,SQL 処理系は,知られている関

数従属性として,

{}  ↦ {CRC}  も認識することを選択してもよい。

<結合条件>が指定され,AP がその<探索条件>の等値性 AND 構成要素で,AP の一方の比較オペランド

が列参照 CRA で,かつ,AP の他方の比較オペランドが列参照 CRB ならば,中の CRA 及び CRB の対応

物を CRAC 及び CRBC とする。次の条件のいずれかが真ならば,{CRAC}  ↦ {CRBC}  は,中の知られて

いる関数従属性とする。

 INNER が指定される。

 LEFT が指定され,かつ,CRA が T1 中の列への列参照である。

 RIGHT が指定され,かつ,CRA が T2 中の列への列参照である。

注記 64 SQL 処理系は,知られている関数従属性として,次の関数従属性も認識することを選択しても

よい。CRA がナル可能でないことが分かり,CRA が T1 の列で,かつ,RIGHT 又は FULL が指

定されるか,又は CRA がナル可能でないことが分かり,CRA が T2 の列で,かつ,LEFT 又は

FULL が指定されるならば,{CRAC}  ↦ {CRBC}。

注記 65  一方の比較オペランドが同様な条件で列参照 CRA1,...,CRAN の決定的な式である場合,SQL

処理系は,

{CRA1,...,CRAN}  ↦ {CRBC}  という形式の類似の,知られている関数従属性も認

識することを選択してもよい。

NATURAL が指定されるか,又は<名前付き列結合>を直に含む<結合指定>が指定されるならば,1 から

までの範囲の に対して,対応する結合列の列名を CI,...,CN とする。次の<探索条件>を SC とする。

TN1.C1 = TN2.C1 )

AND

. . .

AND

TN1.CN = TN2.CN )

7.7  <結合表>”の構文規則で定義する<選択リスト>を SLCC 及び SL とする。<結合型>を JT とする。

表 T1 及び T2 の露出する<表名又は問合せ名>又は<相関名>を,それぞれ,TN1 及び TN2 とする。次の<

問合せ式

>の結果を IR とする。


73

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

SELECT SLCCTN1.*, TN2.*

FROM TN1 JT JOIN TN2

     ON SC

IR の追加の知られている関数従属性  として,次の関数従属性が認識される。

 INNER 又は LEFT が指定されるならば,1 から までの範囲の全ての に対して,{COALESCE (TN1.Ci

TN2.Ci )}  ↦ {TN1.Ci }。

 INNER 又は RIGHT が指定されるならば,1 から までの範囲の全ての に対して,{COALESCE (TN1.Ci

TN2.Ci )}  ↦ {TN2.Ci }。

の知られている関数従属性  は,次の導出表の知られている関数従属性とする。

SELECT SL FROM IR

4.19.8  <表一次子>中の知られている関数従属性

<表一次子>  TP の結果を とする。の BPK 集合,BUC 集合及び知られている関数従属性は,次のと

おりに決定される。

場合:

  TP が,<表名又は問合せ名>  TQN,又は<表名又は問合せ名>  TQN を含む<ONLY 指定>を直に含むな

らば,TQN の BPK 集合及び BUC 集合の対応物は,それぞれ,の BPK 集合及び BUC 集合とする。

A  ↦ が TQN の結果中の知られている関数従属性で,かつ,AC 及び BC が,それぞれ,及び 

対応物ならば,AC  ↦ BC は,中の知られている関数従属性  とする。

  TP が<導出表>又は<横参照導出表> DT を直に含むならば,DT の BPK 集合及び BUC 集合の対応物は,

それぞれ,の BPK 集合及び BUC 集合とする。A  ↦ が DT の結果中の知られている関数従属性で,

かつ,AC 及び BC が,それぞれ,及び の対応物ならば,AC  ↦ BC は,中の知られている関数

従属性  とする。

  TP が<集まり導出表> CDT を直に含み,WITH ORDINALITY が指定されるならば,添え字列 (ordinality

column)  の列名を OC とし,CDT の全ての列の列名から成る集合を CT とする。{OC}  は,BPK 集合

で,かつ,

BUC 集合とし,{OC}  ↦ CT は,知られている関数従属性  とする。WITH ORDINALITY が

指定されないならば,これらの規則は,どの

BPK 集合も,BUC 集合も,公理的でない知られている

関数従属性も識別しない。

  TP が<表関数導出表>を直に含むならば,これらの規則は,どの BPK 集合も,BUC 集合も,公理的で

ない知られている関数従属性も識別しない。

  TP が<データ変更差分表>を直に含むならば,TP に単純に含まれる<データ変更文>の<相手表>又は<

挿入相手

>を TT とする。TT の BPK 集合及び BUC 集合の対応物は,それぞれ,の BPK 集合及び BUC

集合とする。A  ↦ が TT の結果中の知られている関数従属性で,かつ,AC 及び BC が,それぞれ,

及び の対応物ならば,AC  ↦ BC は,中の知られている関数従属性  とする。

  TP が<括弧付き結合表>を直に含むならば,TP に単純に含まれる<結合表>を JT とする。JT の BPK

集合及び

BUC 集合の対応物は,それぞれ,の BPK 集合及び BUC 集合とする。A  ↦ が JT の結果

中の知られている関数従属性で,かつ,AC 及び BC が,それぞれ,及び の対応物ならば,AC  ↦

BC は,中の知られている関数従属性  とする。

4.19.9  <表因子>中の知られている関数従属性

<表因子> TF の結果を とする。TF に直に含まれる<表一次子>の結果を とする。の BPK 集合及び


74

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

BUC 集合の対応物は,それぞれ,の BPK 集合及び BUC 集合とする。A  ↦ が 中の関数従属性で,か

つ,AC 及び BC が,それぞれ,及び の対応物ならば,AC  ↦ BC は,中の知られている関数従属性  と

する。

4.19.10

<表参照>中の知られている関数従属性

<表参照>  TR の結果を とする。の BPK 集合,BUC 集合及び関数従属性は,次のとおりに決定され

る。

場合:

  TR が<表因子> TF を直に含むならば,TF の BPK 集合及び BUC 集合の対応物は,それぞれ,の BPK

集合及び

BUC 集合とする。A  ↦ が TF の結果中の関数従属性で,かつ,AC 及び BC が,それぞれ,

及び の対応物ならば,AC  ↦ BC は,中の知られている関数従属性  とする。

  TR が<結合表> JT を直に含むならば,JT の BPK 集合及び BUC 集合の対応物は,それぞれ,の BPK

集合及び

BUC 集合とする。A  ↦ が JT の結果中の関数従属性で,かつ,AC 及び BC が,それぞれ,

及び の対応物ならば,AC  ↦ BC は,中の知られている関数従属性  とする。

4.19.11

<FROM 句>の結果中の知られている関数従属性

<FROM 句> FC の結果を とする。

FC 中に<表参照> TR が一つだけ存在するならば,

TR の BPK 集合及び BUC 集合の対応物は,

それぞれ,

FC の BPK 集合及び BUC 集合とする。そうでなければ,これらの規則は,FC の結果中のどの BPK 集合

も,

BUC 集合も識別しない。

が FC の<表参照リスト>に直に含まれる<表参照>ならば,中の全ての知られている関数従属性は,R

中の

知られている関数従属性  とする。

4.19.12

<WHERE 句>の結果中の知られている関数従属性

<WHERE 句>のオペランドである表を とする。<WHERE 句>の結果を とする。中の列の集合 

全ての要素が TR 中に対応物をもち,TR 中の の対応物が BUC 集合で,かつ,CR が の全ての列の集

合であるとき,S  ↦ CR であるような<表参照>  TR が存在するならば,は,BUC 集合  とする。さらに,

の対応物が BPK 集合ならば,は,BPK 集合  とする。

A  ↦ が 中の知られている関数従属性ならば,中に対応物をもつ の列の集合を AC とし,中に

対応物をもつ の列の集合を BC とする。AC  ↦ BC は,中の知られている関数従属性  とする。

AP が,<WHERE 句>に単純に含まれる<探索条件>の等値性 AND 構成要素で,AP の一方の比較オペラ

ンドが列参照 CR で,かつ,AP の他方の比較オペランドが<定数>ならば,中の CR の対応物を CRC 

する。

{}  ↦ {CRC}は,中の知られている関数従属性  とする。ここで,{}は,空集合を示す。

注記 66  他方の比較オペランドが列参照を含まない決定的な式ならば,SQL 処理系は,知られている関

数従属性として,

{}  ↦ {CRC}も認識することを選択してもよい。

AP が,<WHERE 句>に単純に含まれる<探索条件>の等値性 AND 構成要素で,AP の一方の比較オペラ

ンドが列参照 CRA で,かつ,AP の他方の比較オペランドが列参照 CRB ならば,中の CRA 及び CRB 

対応物を CRAC 及び CRBC とする。{CRBC}  ↦ {CRAC}及び{CRAC}  ↦ {CRBC}は,中の知られている

関数従属性  とする。

注記 67  一方の比較オペランドが列参照 CRA1,...,CRAN を含む決定的な式で,かつ,他方の比較オペ

ランドが列参照 CRB ならば,SQL 処理系は,{CRA1,...,CRAN}  ↦ {CRBC}という形式の知ら
れている関数従属性も認識することを選択してもよい。

4.19.13

<GROUP BY 句>の結果中の知られている関数従属性


75

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

<GROUP BY 句>のオペランドである表を T1 とし,<GROUP BY 句>の結果を とする。

ROLLUP,CUBE 及び GROUPING SETS を取り除くための全ての構文変換を適用した後に,<GROUP BY

>の<グループ化列参照リスト>によって指定される列の集合を とする。

の列は,の任意の特定の行中に,の列を組み合わせたその行の値と関連する T1 の行の部分集合を

何らかの形で示す値をもつ追加の列 CI,及び の列とする。

のどの要素も,ナルでないことが分かる列への列参照ならば,は,の BUC 集合  とする。が T1

の列の

BPK 集合の部分集合ならば,は,の BPK 集合とする。

G  ↦ CI は,中の知られている関数従属性  とする。

注記 68  に関連して指定される全ての<集合関数指定>は,必然的に CI の関数である。SFVC がそのよ

うな

<集合関数指定>の結果を含む列を示すならば,CI  ↦ SFVC が成り立ち,結果として,G  ↦

SFVC は,SFVC を含む表中の知られている関数従属性  ということになる。

4.19.14

<HAVING 句>の結果中の知られている関数従属性

<HAVING 句>のオペランドである表を T1 とし,<HAVING 句>に単純に含まれる<探索条件>を SC とし,

<HAVING 句>の結果を とする。

が の列の集合で,かつ,T1 中の の対応物が BPK 集合ならば,は,BPK 集合  とする。T1 中の S

の対応物が

BUC 集合ならば,は,BUC 集合  とする。

次の

<問合せ式>中のどの知られている関数従属性も,中の知られている関数従属性  とする。

SELECT * FROM T1 WHERE SC

4.19.15

<問合せ指定>中の知られている関数従属性

<問合せ指定> QS に単純に含まれる<表式>を とし,<問合せ指定>の結果を とする。

<問合せ指定>の<選択リスト>を SL とする。

次のとおりに,

<選択リスト>に含まれる<値式>から生じる列を右側に拡張した を T1 とする。列参照

ではない

<値式> VE が T1 中の計算された列 CC を指定する。T1 中のどの行に対しても,CC 中の値は,VE

の結果とする。

のどの要素も,SL 中で<アスタリスク>を用いて生じるか,又は SL に単純に含まれる<値式>としての

列参照の指定によって生じるような の列の集合を とする。は,及び T1 中に対応物をもつ。中の

の対応物が BPK 集合ならば,は,BPK 集合  とする。中の の対応物が BUC 集合又は BPK 集合な

らば,は,BUC 集合  とする。

A  ↦ が 中の知られている関数従属性ならば,A  ↦ は,T1 中の知られている関数従属性  とする。

<選択リスト>中の潜在的に非決定的でない<値式> VE によって指定される列を CC とする。

修飾する問合せが QS である列参照であり,かつ,<集合関数指定>の集約化引数中に含まれない VE 

オペランドを,OP1OP2,...とする。

集約問合せが QS である<集合関数指定>を VE が含まないならば,{OP1OP2,...}  ↦ CC は,T1 中の知

られている関数従属性  とする。

集約問合せが QS である<集合関数指定>を VE が含むならば,のグループ化列の集合を{G1,...}とする。

{G1,...,OP1OP2,...}  ↦ CC は,T1 中の知られている関数従属性  とする。

T1 中の知られている関数従属性を C  ↦ とする。の全ての列が 中に対応物をもつならば,中に

対応物をもつ のそれらの列から成る集合を DR とする。C  ↦ DR は,中の知られている関数従属性  と

する。

4.19.16

<問合せ式>中の知られている関数従属性


76

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

<WITH 句>が指定され,かつ,RECURSIVE が指定されないならば,<WITH リスト>中の<問合せ名>に

よって識別される表の BPK 集合,BUC 集合及び知られている関数従属性  は,それぞれ,対応する<問合

せ式

>の BPK 集合,BUC 集合及び知られている関数従属性と同じとする。RECURSIVE が指定されるなら

ば,

BPK 集合,BUC 集合及び公理的でない知られている関数従属性は,処理系定義とする。

<単純表>である<問合せ一次子>である<問合せ項>である<問合せ式>は,この箇条内の先行する細分箇条

での規定に含まれる。

<問合せ式>が UNION,EXCEPT 又は INTERSECT を指定するならば,左側及び右側のオペランドの表を

T1 及び T2 とし,その結果を とする。の全ての列から成る集合を CR とする。

の各列が T1 中に対応物をもち,T2 中に対応物をもつ。

場合:

 EXCEPT が指定されるならば,の列の集合 の T1 中の対応物が BPK 集合ならば,は,BPK 集合  と

する。T1 中の の対応物が BUC 集合ならば,は,BUC 集合  とする。

 UNION が指定されるならば,BPK 集合も,BUC 集合も,存在しない。

 INTERSECT が指定されるならば,の列の集合 の T1 及び T2 中の対応物のいずれかが BPK 集合な

らば,は,BPK 集合  とする。T1 及び T2 中の の対応物のいずれかが BUC 集合ならば,は,BUC

集合  とする。

場合:

 UNION が指定されるならば,処理系定義の規則によって決定される全ての関数従属性は別として,

T1 又は T2 中の公理的でないどの関数従属性も,中の知られている関数従属性ではない。

 EXCEPT が指定されるならば,T1 中の全ての知られている関数従属性は,中の知られている関数従

属性  とする。

 INTERSECT が指定されるならば,T1 中の全ての知られている関数従属性,及び T2 中の全ての知ら

れている関数従属性は,中の知られている関数従属性  とする。

注記 69  その他の知られている関数従属性が処理系定義の規則に従って決定されてもよい。

4.20  候補キー

CT が表 の全ての列から成り,中の関数従属性 CK  ↦ CT が成り立ち,関数従属性 CK1  ↦ CT が成り

立つような CK の真部分集合 CK1 が 中に存在しないならば,CK は,の候補キー  (candidate key)  とす

る。CT のどの真部分集合も候補キーでないならば,CT が候補キーなので,候補キーの集合 SCK は,空で

はない。

注記 70  候補キーは,(列の)集合なので,したがって,SCK は,(列の)集合の集合である。

候補キーCK が BUC 集合か,又は がグループ化表で,かつ,CK が のグループ化列の集合の部分集

合ならば,CK は,強い候補キー  (strong candidate key)  とする。強い候補キーの集合を SSCK とする。

が SCK の要素で,かつ,が BPK 集合  であるような の集合を PCK とする。

場合:

  PCK が空でないならば,主キー  (primary key)  は,次のとおりに PCK から選ばれる。PCK がただ一つ

の要素をもつならば,その要素は,主キーとする。そうでなければ,この後に示す“最左側規則

 (left-most

rule)”に従って,PCK の最も左側の要素が選ばれる。主キーは,優先候補キー  (preferred candidate key)

でもある。


77

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

  そうでなければ,主キーがなく,優先候補キーは,次のとおりに選ばれる。

場合:

  SSCK がただ一つの要素をもつならば,それが優先候補キーとする。そうでなければ,SSCK が二つ

以上の要素をもつならば,この後に示す“最左側規則”に従って,SSCK の最も左側の要素が選ば

れる。

  そうでなければ,SCK がただ一つの要素をもつならば,それが優先候補キーとする。そうでなけれ

ば,この後に示す“最左側規則”に従って,SCK の最も左側の要素が選ばれる。

  “最左側規則”は,次による。

  この規則は,この規格の他の箇所で規定しているとおりの,表の列の順序を用いる。

の列の二つの集合の最も左側を決定するために,最初に,各集合をその要素の列番号の順序で

リストにし,短い方のリストを長い方のリストの長さになるまで

0 で拡張する。それから,それぞ

れの順序付けられたリストの左側から始めて,各リスト中の同じ位置からの,列番号が等しくない

要素の対が見つかるまで先へ進む。この対の要素のより小さい番号を含むリストを,の列の二つ

の集合の最も左側として識別する。

の列の三つ以上の集合の最も左側を決定するために,任意の二つの集合の最も左側を取り,そ

れから,残りの集合の一つとそれとを対にして,最も左側を取り,残りの集合がなくなるまで続け

る。

4.21  SQL スキーマ

この細分箇条は,ISO/IEC 9075-4 の“4.3 SQL スキーマ”によって修正される。 

この細分箇条は,ISO/IEC 9075-9 の“4.12 SQL スキーマ”によって修正される。 

04

 SQL スキーマは,次の項目を含む永続記述子とする。

 SQL スキーマの名前。

 SQL スキーマの所有者の<認可識別子>。

 SQL スキーマに対する既定文字集合の名前。

 SQL スキーマに対する SQL 呼出しルーチンのための SQL パスを定義する<スキーマパス指定>。

 SQL スキーマの全ての構成要素の記述子。

この規格では,“スキーマ”という用語は,

SQL スキーマの意味でだけ用いる。記述子によって記述さ

れる永続オブジェクトは,スキーマの

<認可識別子>によって,所有され  (owned by)  る,又は作成され

(created by)  たという。構成要素の各記述子は,次のうちの一つとする。

  定義域記述子。

  実表記述子。

  ビュー記述子。

  制約記述子。

  トリガ記述子。

  権限記述子。

  文字集合記述子。

  照合順記述子。

  文字変換記述子。


78

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

  利用者定義型記述子。

  ルーチン記述子。

  順序数生成子記述子。

スキーマは,最初に,

<スキーマ定義>を用いて作成され,その後,<SQL スキーマ文>の実行によって時

間の経過とともに徐々に修正されてもよい。

<スキーマ名>は,カタログ内で一意とする。

<スキーマ名>は,カタログを識別する<カタログ名>によって陽に修飾されるか又は暗に修飾される。

09

  実表及びビューは,<表名>によって識別される。<表名>は,<スキーマ名>,それに続く<ピリオド>,

及びそれに続く

<識別子>から成る。<スキーマ名>は,<表名>によって識別される実表又はビューの表記述

子を含むスキーマを識別する。異なるスキーマ中で定義される実表及びビューの

<表名>は,等価な<識別

>をもつことができる。

注記 71  <識別子>の等価性は,“5.2 <トークン>及び<分離符号>”で定義している。

<表名>の参照が<スキーマ名>を陽に含まないならば,特定の<スキーマ名>が暗に想定される。そのよう

<表名>に関連付けられる特定の<スキーマ名>は,<表名>が現れる文脈に依存し,<スキーマ修飾付き名

>の規則に従う。

<ルーチン呼出し>に含まれる SQL 呼出しルーチンの参照が<スキーマ名>を陽に含まないならば,SQL

呼出しルーチンは,スキーマの

SQL パスから選択される。

<SQL スキーマ文>を含むスキーマ  (containing schema)  は,その SQL 文によって作成又は操作されるオ

ブジェクトの名前に暗に含まれるか又は陽に含まれる

<スキーマ名>によって識別されるスキーマとして

定義される。

4.22  順序数生成子

4.22.1  順序数生成子の一般記述

順序数生成子  (sequence generator)  は,連続する真数値を一つずつ生成するための機構とする。順序数生

成子は,

外部順序数生成子  (external sequence generator)  又は内部順序数生成子  (internal sequence generator)

のいずれかとする。外部順序数生成子が名前付きのスキーマオブジェクトであるのに対して,内部順序数

生成子は,別のスキーマオブジェクトの構成要素とする。順序数生成子は,位取り

0 の真数型でなければ

ならないデータ型,最小値,最大値,開始値,増分及び周期選択肢をもつ。

順序数生成子の指定は,データ型,最小値,最大値,開始値,増分及び周期選択肢の指定を任意に含む

ことができる。

順序数生成子が負の増分に関連付けられるならば,それは,

降順順序数生成子  (descending sequence 

generator)  とし,そうでなければ,昇順順序数生成子  (ascending sequence generator)  とする。

順序数生成子は,時刻とともに変化する

現在基底値  (current base value)  をもち,それは,順序数生成子

のデータ型の値とする。順序数生成子は,(現在基底値

N *  増分)として表現できる最小値と最大値との

間の可能な全ての値から成る周期をもつ。ここで,は,負でない数とする。

順序数生成子が作成されるとき,その現在基底値は,開始値で初期化される。その後,現在基底値には,

昇順順序数生成子に対して周期中の未発行の最小値が,又は降順順序数生成子に対して周期中の未発行の

最大値が設定される。

順序数生成子が生成された後はいつでも,その現在基底値には,

<順序数生成子変更文>によって,その

データ型の任意の値を設定することができる。

順序数生成子の現在基底値の変更は,

SQL トランザクションによって制御されない。したがって,SQL


79

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

トランザクションのコミット及びロールバックは,順序数生成子の現在基底値にどんな効果も与えない。

順序数生成子は,順序数生成子記述子によって記述される。順序数生成子記述子は,次の項目を含む。

  外部順序数生成子に対しては,スキーマ修飾付き順序数生成子名であり,内部順序数生成子に対して

は,長さ

0 の文字列である順序数生成子名。

  順序数生成子に関連付けられたデータ型のデータ型記述子。

  順序数生成子の開始値。

  順序数生成子の最小値。

  順序数生成子の最大値。

  順序数生成子の増分。

  順序数生成子の周期選択肢。

  順序数生成子の現在基底値。

4.22.2  順序数生成子を含む演算

<次値式>が順序数生成子 SG に適用されるとき,SG は,に SG の増分を乗じた値を SG の現在基底値

に加えた値として表現できるような,SG の現行周期から取り出された値 を発行する。ここで,は,

負でない数とする。

このようにして,順序数生成子は,通常,その周期中の全ての値を発行し,これらの値は,(増分の符号

に依存して)増加又は減少の順序になるが,その一般的な順序付け内に,分離された順序付けられた値の

下位グループが発生してもよい。

順序数生成子の周期が使い尽くされる(すなわち,基準に合致する値を発行できない)ならば,現在基

底値に,(SG が昇順順序数生成子ならば,)SG の最小値,又は(SG が降順順序数生成子ならば,)SG 

最大値が設定され,新しい周期が作成される。

新しい周期が作成され,SG の記述子が NO CYCLE を含むならば,例外条件が引き起こされる。

単一の

SQL 文内に同じ順序数生成子を指定する<次値式>が複数出現するならば,それらの全ての<次値

>は,その SQL 文によって処理される各行に対して同じ値を戻す。

4.23  SQL クライアントモジュール

SQL クライアントモジュール  (SQL-client module)  は,SQL 環境のオブジェクトとし,それは,外部呼出

し手続及び幾つかの記述子を含むことができる。

SQL クライアントモジュールは,(SQL クライアントモ

ジュールの利用のために必要な権限の付与及び剝奪を含んでもよい)処理系定義の機構によって,作成さ

れ,破壊される。

SQL クライアントモジュールは,SQL クライアントを含む SQL 環境中に存在する。

SQL クライアントモジュール が,<モジュール認可識別子> MAI を含む<SQL クライアントモジュール

定義

>によって定義されるならば,の所有者は,MAI とする。そうでなければ,は,所有者をもたない。

SQL クライアントモジュールは,<SQL クライアントモジュール定義>によって指定することができる

(“13.1 <SQL クライアントモジュール定義>”参照)。

SQL クライアントモジュールは,次の項目を含む。

  あるならば,SQL クライアントモジュールの名前。

  モジュールに含まれる外部呼出し手続を呼び出すことができる翻訳単位のホスト言語の名前。

  あるならば,<モジュール認可識別子>。

 <PREPARE 文>又は<EXECUTE IMMEDIATE 文>を含む SQL クライアントモジュール中の外部呼出し

手続の呼出しの結果として生じる被準備文の実行に対して,

<モジュール認可識別子>を適用しなけれ


80

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

ばならないかどうかを示す標識。

  <外部呼出し手続>,<一時表宣言>及び<カーソル宣言>に対する構文規則の適用で用いるための SQL

クライアントモジュールの既定値。

  <スキーマ名>,又はそれがない場合には,<モジュール認可識別子>のいずれかによって指定され,

<外部呼出し手続>から外部呼出し手続を導出するときに,既定の<スキーマ名>として用いるための

スキーマの名前。

  あるならば,次の名前を修飾するために用いる SQL パス。

 SQL クライアントモジュールに含まれる<ルーチン呼出し>に直に含まれる修飾なしの<ルーチン

>。

 SQL クライアントモジュールに含まれる<パス解決利用者定義型名>に直に含まれる修飾なしの<

利用者定義型名

>。

 SQL クライアントモジュールのための一つ以上の文字集合に対する照合順をそれぞれが指定する 0

個以上の SQL クライアントモジュール照合順  (SQL-client module collation)  の名前。

  指定されるならば,<SQL クライアントモジュール定義>を表現するために用いる文字集合の名前。

注記 72  <モジュール文字集合指定>は,SQL クライアントモジュールに含まれる SQL 言語に関して

どんな効果もなく,JIS X 3005:1995 (ISO/IEC 9075:1992)  との互換性のためにだけ存在する。

SQL クライアントモジュールの文字集合を文書化するために用いてもよい。

  次に示すモジュール内容。

  0 個以上の一時表記述子。

  0 個以上のカーソル宣言記述子。

  一つ以上の外部呼出し手続。

翻訳単位は,一つ以上のサブプログラムから成り得る実行可能コードの断片とする。

SQL クライアント

モジュールは,その実行の間,翻訳単位に関連付けられる。単一の

SQL クライアントモジュールが複数の

翻訳単位に関連付けられてもよいし,複数の

SQL クライアントモジュールが単一の翻訳単位に関連付けら

れてもよい。ある処理系定義の文の実行に対する可能な要件を含めて,この関連付けを指定する方法は,

処理系定義とする。同じ又は異なるプログラム言語で書かれた別の翻訳単位を,その翻訳単位が呼び出し

てもよい又は制御を移してもよいかどうかは,処理系定義とする。

4.24  埋込み構文

この細分箇条は,ISO/IEC 9075-10 の“4.1  埋込み構文”によって修正される。 

10

 <SQL 埋込みホストプログラム>は,ホスト言語テキスト及び SQL テキストから成る翻訳単位とする。

ホスト言語テキストは,特定のプログラム言語の要件に適合する。

SQL テキストは,この規格で定義する

とおりの,一つ以上の

<埋込み SQL 文>,及び省略可能な一つ以上の<埋込み SQL 宣言節>から成らなけれ

ばならない。これによって,データベース適用業務は,翻訳単位中に

SQL 文が直接埋め込まれる複合形態

で表現することができる。そのような複合翻訳単位は,次のものと等価なものとして定義される。

  外部呼出し手続及び宣言を含む SQL クライアントモジュール。

  各 SQL 文が SQL クライアントモジュール中の外部呼出し手続の呼出しに置き換えられ,そのような

SQL 文に含まれる宣言がホスト言語中の宣言に適切に変換されたホスト言語の翻訳単位。

<SQL 埋込みホストプログラム>が<埋込み認可宣言>を含むならば,それは,<SQL 埋込みホストプログ


81

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

ラム

>中の最初の文又は宣言でなければならない。<埋込み認可宣言>は,<外部呼出し手続>の手続又はサ

ブルーチンの呼出しに置き換えられないが,取り除かれ,

<SQL クライアントモジュール定義>の<モジュ

ール認可句

>に関連付けられた構文に置き換えられる。

処理系は,

SQL 文を置き換えるために生成されるホスト言語及びホスト言語環境の要素の名前のために,

<SQL 埋込みホストプログラム>中の名前空間の一部を予約してもよい。これには,手続,サブルーチン,

クラス及びホスト言語環境中のその他の資源の名前,並びにそれらの手続又はサブルーチンの呼出しを提

供するために必要なものとして生成されるかもしれないプログラム変数及び分岐ラベルのための名前が含

まれる。このような予約がなされるかどうか,及びこのような予約がなされるならば,その詳細は,処理

系定義とする。

4.25  動的 SQL の概念

4.25.1  動的 SQL の概要

多くの場合,実行すべき

SQL 文は,<SQL クライアントモジュール定義>中に,又は埋込み構文を用い

て翻訳単位中に書くことができる。他の場合には,

SQL 文は,プログラムを書くときには分からず,プロ

グラムの実行中に生成される。

SQL 文の動的実行は,一般的に,異なる二つの方法で行うことができる。実行のために文を準備する

(prepare)  ことができ,その後,1 回以上実行することができる。その文をもはや実行する必要がないとき,

<DEALLOCATE PREPARE 文>を用いて解放する  (release)  ことができる。代わりに,1 回だけ実行する必

要がある文は,準備段階なしで実行することができる。すなわち,

即時実行する  (execute immediately)  こ

とができる(全ての

SQL 文を即時実行できるわけではない。)。

被準備文が実行されるとき,それが所有者をもつならば,定義者の権利の下で実行される。そうでなけ

れば,呼出し元の権利の下で実行される。

多くの

SQL 文は,(<SQL クライアントモジュール定義>中の<外部呼出し手続>に含まれる<SQL 手続文>

中のホストパラメタ,又は

<SQL 埋込みホストプログラム>に含まれる<埋込み SQL 文>中のホスト変数と

して,

SQL 文の静的実行で現れる)“パラメタ (parameter)”を用いて書くことができる。動的に実行され

SQL 文では,それらのパラメタは,動的パラメタ(<動的パラメタ指定>)と呼ばれ,SQL 言語では,<

疑問符

> (?)  で表現する。

多くの場合,動的実行のために

SQL 文を生成する適用業務では,その文中で用いる動的パラメタのそれ

ぞれに要求される特性(例えば,

<データ型>,<長さ>,<精度>,<位取り>など)が詳細に分かっている。

同様に,適用業務は,その文の実行によって戻される値の特性も詳細に分かっているかもしれない。しか

し,他の場合には,要求される詳細までは,これらの情報について分からないかもしれない。すなわち,

幾つかの場合には,適用業務が情報スキーマからその情報を突き止めることもできるが,他の場合(例え

ば,戻される値が,表中の列から単純に取り出されるのではなく,計算によって導出されるとき,又は動

的パラメタが用いられるとき)には,この情報は,実行のために文を準備する文脈以外では,一般に入手

できない。

注記 73  情報スキーマは,[ISO9075-11]  で定義している。

適用業務に必要な情報を提供するために,

SQL は,被準備文を記述する  (describe)  ように,適用業務が

SQL サーバに要求することを可能にしている。文の記述は,入力動的パラメタの個数及びそれらのデータ

型の情報を識別する[

入力を記述する  (describe input)]か,又は出力動的パラメタ若しくは戻されるべき

値の個数及びそれらのデータ型の情報を識別する[

出力を記述する  (describe output)]。文の記述は,既に

示した

SQL 記述子領域中に格納される。


82

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

全てではないが多くの

<SQL 文>は,動的に準備し,実行することができる。

注記 74  動的に準備し,実行してもよい文の完全なリストは,“4.34.7  準備可能及び即時実行可能な SQL

文”で定義している。

幾つかの“設定文

 (set statements)”(<SET CATALOG 文>,<SET SCHEMA 文>,<SET NAMES 文>及び

<SET PATH 文>)は,準備若しくは即時実行されるか,又は直接起動される他の SQL 文に適用される既定

の情報(それぞれ,カタログ名,スキーマ名,文字集合及び

SQL パス)を設定する以外のどんな効果もな

い。

<準備可能文>の準備又は即時実行によって引き起こされる構文誤り及びアクセス規則違反は,その文が

<PREPARE 文>によって)準備されるとき,又は(<EXECUTE 文>又は<EXECUTE IMMEDIATE 文>によ

って)実行されるときに発見される。そのような違反は,例外条件の引起しによって示される。

入力動的パラメタを記述するとき,入力動的パラメタの個数は,この規格の構文規則中で定義されるど

の構文上の変換よりも前の

SQL 文中の<動的パラメタ指定>の個数とする。準備された SQL 文を実行する

とき,実効的に複製された入力動的パラメタの全ての実現値には,その入力動的パラメタに与えられた同

じ値が設定される。

4.25.2  動的 SQL 文及び記述子領域

<EXECUTE IMMEDIATE 文>は,SQL 文の 1 回の準備及び実行のために用いることができる。<PREPARE

>は,生成した SQL 文をその後の実行のために準備するために用いる。<DEALLOCATE PREPARE 文>

は,

<PREPARE 文>によって準備された SQL 文を解放するために用いる。被準備文のための入力動的パラ

メタの記述は,

<入力 DESCRIBE 文>の実行によって得ることができる。<動的 SELECT 文>又は<動的単一

SELECT 文>の結果列の記述は,<出力 DESCRIBE 文>の実行によって得ることができる。<動的 SELECT

>でも<動的単一行 SELECT 文>でもない文の出力動的パラメタの記述は,<出力 DESCRIBE 文>の実行

によって得ることができる。

<動的 SELECT 文>以外の文に対しては,プログラムが書かれたときにそのように書かれたかのように,

被準備文にパラメタを関連付けて,それを実行するために,

<EXECUTE 文>を用いる。<動的 SELECT 文>

に対しては,

<動的カーソル宣言>によって,準備された<カーソル指定>が宣言動的カーソルに関連付けら

れるか,又は

<拡張動的カーソル割当て文>によって,準備された<カーソル指定>が拡張動的カーソルに関

連付けられる。

<動的 OPEN 文>によって,動的カーソルを開くことができ,動的パラメタをその動的カー

ソルに関連付けることができる。開いている動的カーソルに関する操作は,“4.33.2  カーソルの操作及びカ

ーソルを用いる操作”に示す。

被準備文の入力動的パラメタ及び出力動的パラメタ,並びに

<動的 FETCH 文>の結果又は準備された<

動的単一行

SELECT 文>の実行の結果として得られる値のためのインタフェースは,動的パラメタ若しく

は埋込み変数のリスト,又は

SQL 記述子領域のどちらであってもよい。SQL 記述子領域は,一つ以上の項

目記述子領域,及びそれらの項目記述子領域の個数のためのフィールド

COUNT を含むヘッダから成る。

SQL 記述子領域のヘッダは,“20.1 SQL 記述子領域の記述”の表 23“SQL 記述子領域のヘッダ中で用いる

<キーワード>のデータ型”中のフィールドから成る。各項目記述子領域は,“20.1 SQL 記述子領域の記述”

の表 24“SQL 項目記述子領域中で用いる<キーワード>のデータ型”で規定するフィールドから成る。SQL

記述子領域は,

<ALLOCATE DESCRIPTOR 文>,<DEALLOCATE DESCRIPTOR 文>,<SET DESCRIPTOR

>及び<GET DESCRIPTOR 文>を通じて,システムによって割り当てられ,維持される。

動的

SQL オブジェクトを参照するために,2 種類の識別子,すなわち,拡張名  (extended name)  及び非

拡張名  (non-extended name)  を用いる。拡張名は,パラメタ又は変数に代入された<識別子>とし,それが


83

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

識別するオブジェクトは,そのパラメタ又は変数を参照することによって間接的に参照される。非拡張名

は,単なる

<識別子>とし,それが識別するオブジェクトは,SQL 文中でその<識別子>を直接用いることに

よって参照される。

SQL 記述子領域,動的文及び動的カーソルは,非拡張名又は拡張名のいずれかによって識別することが

できる。

二つの拡張名は,先行する

<空白>及び後続する<空白>を取り除いたそれらの値が,“5.2 <トークン>及び

<分離符号>”中の<識別子>の比較規則に従って等価であるならば,等価とする。

拡張名の

有効範囲  (scope)  は,大域  (global)  又は局所  (local)  のいずれかとし,それが識別するオブジ

ェクトが生成された実行時文脈によって決定される。

大域拡張名 GEN の有効範囲は,SQL セションとする。すなわち,GEN は,それが識別するオブジェク

ト が存在する間,その SQL セション中で実行されるどの SQL 文でも,を参照するために用いること

ができる。

局所拡張名 LEN の有効範囲は,LEN によって識別されるオブジェクト が生成されるときに実行され

ている外部呼出し手続を含む

SQL クライアントモジュール とする。すなわち,LEN は,が存在する

間,中の外部呼出し手続によって同じ SQL セション中で実行されるどの SQL 文でも,を参照するた

めに用いることができる。

非拡張名の有効範囲は,それを定義する

SQL 文を含む<SQL クライアントモジュール定義>とする。

注記 75  非拡張名の名前空間は,拡張名の名前空間とは違う。

外部呼出し手続,

SQL 呼出しルーチン又はトリガ動作 中の<PREPARE 文>の実行の結果として生じる

被準備文を PRP とする。次の場合には,PRP は,所有者をもたない。

  が,安全保護特性が INVOKED の SQL 呼出しルーチンである。

  が,所有者をもたないか又は FOR STATRIC ONLY が指定された SQL クライアントモジュールに含

まれる外部呼出し手続である。

そうでなければ,PRP の所有者は,の所有者とする。

4.26  SQL の直接起動

SQL の直接起動は,<直接 SQL 文>として知られている直接 SQL 文を実行するための機構とする。SQL

の直接起動では,

<直接 SQL 文>の起動方法,<直接 SQL 文>の実行の結果として生じる条件を引き起こす

方法,

<直接 SQL 文>の実行の結果として生じる診断情報をアクセスする方法,及びそれらの結果を戻す方

法は,処理系定義とする。

4.27  外部呼出し手続

外部呼出し手続は,

SQL 文から成り,ホスト言語の翻訳単位から呼び出すことができる。ホスト言語は,

外部呼出し手続を含む

SQL クライアントモジュールの<LANGUAGE 句>によって指定される。

4.28  SQL 呼出しルーチン

4.28.1  SQL 呼出しルーチンの概要

この細分箇条は,ISO/IEC 9075-4 の“4.4.1 SQL 呼出しルーチンの概要”によって修正される。 

この細分箇条は,ISO/IEC 9075-13 の“4.2.1 SQL 呼出しルーチンの概要”によって修正される。 

SQL 呼出しルーチン  (SQL-invoked routine)  は,SQL 呼出し手続又は SQL 呼出し関数とする。SQL 呼出

しルーチンは,少なくとも,ルーチン名,

0 個以上の SQL パラメタ,及びルーチン本体から成る。

04

 SQL 呼出しルーチンは,SQL スキーマの要素とし,スキーマレベルルーチン  (schema-level routine)  と


84

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

呼ぶ。

利用者定義型 UDT を作成した<利用者定義型定義>の実行の間に SQL 呼出しルーチン SR が作成される

か,又は

<属性定義追加>を指定する<型変更文>の実行の間に SR が作成されるならば,SR は,UDT に依

存している  (dependent)  という。利用者定義型に依存している SQL 呼出しルーチンは,<ルーチン変更文>

によって修正することができず,

<ルーチン削除文>によって破壊することができない。それは,<データ

型削除文

>によって暗に破壊される。

SQL 呼出し手続  (SQL-invoked procedure)  は,SQL の<CALL 文>から呼び出される SQL 呼出しルーチン

とする。

SQL 呼出し手続は,入力 SQL パラメタ,出力 SQL パラメタ,及び入力 SQL パラメタと出力 SQL

パラメタとの両方である

SQL パラメタ(以下,入出力 SQL パラメタと呼ぶ。)をもってもよい。出力 SQL

パラメタではない入力

SQL パラメタに既定値を関連付けてもよい。SQL 呼出し手続の形式は,<SQL 呼出

し手続

>によって規定する(“11.60 <SQL 呼出しルーチン>”参照。)。

SQL 呼出し手続が呼び出されるときに新しい保存点水準を確立して,実行されたルーチン本体から戻る

ときにそれを破壊することを要求するように,

SQL 呼出し手続を随意に指定してもよい。保存点を取らな

い代替手段は,

OLD SAVEPOINT LEVEL で直接指定することもできる。SQL 呼出し関数が呼び出されると

きは,新しい保存点水準が常に確立される。保存点水準は,

4.36.2  保存点”に記述している。

SQL 呼出し関数  (SQL-invoked function)  は,その呼出しが値を戻す SQL 呼出しルーチンとする。SQL 呼

出し関数のどのパラメタも,入力

SQL パラメタとし,そのうちの一つが結果 SQL パラメタを示してもよ

い。

SQL 呼出し関数の形式は,<SQL 呼出し関数>によって規定する(“11.60 <SQL 呼出しルーチン>”参

照。

)。

SQL 呼出し関数は,型保持関数  (type-preserving function)  であってもよい。型保持関数は,結果 SQL

パラメタをもつ

SQL 呼出し関数とする。型保持関数の呼出しのナルでない結果の最特定型は,その関数の

結果

SQL パラメタを置き換える引数の値の最特定型と互換でなければならない。

SQL 呼出しメソッド  (SQL-invoked method)  は,<メソッド指定指示子>によって指定される SQL 呼出し

関数とする(

11.60 <SQL 呼出しルーチン>”参照)。3 種類の SQL 呼出しメソッド,すなわち,SQL 呼出

し構成メソッド  (SQL-invoked constructor method),インスタンス SQL 呼出しメソッド  (instance SQL-invoked 

method)  及び静的 SQL 呼出しメソッド  (static SQL-invoked method)  がある。全ての SQL 呼出しメソッドが

利用者定義型に関連付けられ,その利用者定義型は,その

メソッドの型  (type of the method)  としても知ら

れている。

SQL 呼出しメソッドの<メソッド特性>は,そのメソッドの型の<利用者定義型定義>に含まれる

<メソッド指定>によって指定される。インスタンス SQL 呼出しメソッド及び SQL 呼出し構成メソッドは,

両方とも,次の条件を満たす。

  当該パラメタ  (subject parameter)  と呼ばれる最初のパラメタが,利用者定義型の宣言型をもつ。当該

パラメタの型がそのメソッドの型である。当該パラメタ以外のパラメタは,

付加的なパラメタ

(additional parameter)  と呼ぶ。

  メソッドの記述子がその当該パラメタのデータ型の記述子と同じスキーマ中にある。

SQL 呼出し構成メソッドは,さらに,次の条件も満たす。

  <メソッド名>が,そのメソッドの型の利用者定義型記述子に含まれる<利用者定義型名>に単純に含ま

れる

<被修飾識別子>と等価である。

13

  静的 SQL 呼出しメソッドは,次の条件を満たす。

  メソッドが当該パラメタをもたない。メソッドにパラメタがあるならば,その最初のパラメタが他の


85

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

どのパラメタとも異なって扱われない。

  メソッドの記述子がそのメソッドの構造型の記述子と同じスキーマ中にある。この型(又はこの型の

いずれかの下位型)の名前が,メソッドが呼び出されるべきときに,そのメソッドの名前とともに常

に指定される。

SQL 呼出しメソッドでない SQL 呼出し関数は,SQL 呼出し通常関数  (SQL-invoked regular function)  とす

る。

SQL 呼出し通常関数は,<関数指定>によって指定される(“11.60 <SQL 呼出しルーチン>”参照)。

ナル呼出し関数  (null-call function)  は,その入力引数のいずれかがナル値ならば,ナル値を戻すように

定義される

SQL 呼出し関数とする。ナル呼出し関数は,<ナル呼出し句>に“RETURNS NULL ON NULL

INPUT”を指定する SQL 呼出し関数とする。

4.28.2  SQL 呼出しルーチンの性質

この細分箇条は,ISO/IEC 9075-13 の“4.2.2 SQL 呼出しルーチンの性質”によって修正される。 

SQL 呼出しルーチンは,SQL ルーチン  (SQL routine)  であっても,外部ルーチン  (external routine)  であ

ってもよい。

SQL ルーチンは,<LANGUAGE 句>に SQL を指定する SQL 呼出しルーチンとする。SQL ル

ーチンの

<ルーチン本体>は,<SQL 手続文>とする。<ルーチン本体>を形成する<SQL 手続文>は,<SQL コ

ネクション文

>と,<SAVEPOINT 文>,<RELEASE SAVEPOINT 文>,又は<SAVEPOINT 句>を指定する

<ROLLBACK 文>以外の<SQL トランザクション文>とを除いて,<SQL 制御文>を含むどの SQL 文であっ

てもよい。

13

  外部ルーチンは,<LANGUAGE 句>に SQL を指定しないルーチンとする。外部ルーチンの<ルーチン

本体

>は,SQL 以外のいずれかのプログラム言語で書かれているプログラムを<外部ルーチン名>が識別す

<外部本体参照>とする。<外部ルーチン名>によって識別されるプログラムは,<SQL コネクション文>,

又は

<SAVEPOINT 文>,<RELEASE SAVEPOINT 文>,若しくは<SAVEPOINT 句>を指定する<ROLLBACK

>以外の<SQL トランザクション文>を実行してはならない。

SQL 呼出しルーチンは,SQL 呼出しルーチンの特定名  (specific name)  と呼ばれる<特定名>によって一意

に識別される。

13

 SQL 呼出しルーチンは,それらの形式によって呼出し方法が異なる。SQL 呼出し手続は,<CALL 文>

によって呼び出される。

SQL 呼出し通常関数は,<ルーチン呼出し>によって呼び出される。インスタンス

SQL 呼出しメソッドは,<メソッド呼出し>によって呼び出されるが,SQL 呼出し構成メソッドは,<NEW

指定

>によって呼び出され,静的 SQL 呼出しメソッドは,<静的メソッド呼出し>によって呼び出される。

SQL 呼出しルーチンの呼出しは,SQL 呼出しルーチンの<ルーチン名>を指定し,その SQL 呼出しルーチ

ンの

<SQL パラメタ宣言>に対応する引数値の並びを与える。引数値の並びは,位置又は引数名のいずれか

によって渡すことができる。呼出しの

当該ルーチン  (subject routine)  は,<ルーチン呼出し>によって呼び

出されてもよい

SQL 呼出しルーチンとする。<ルーチン呼出し>の当該ルーチンの選択後に,SQL 引数が

評価され,実行される

SQL 呼出しルーチンが選択される。当該ルーチンがインスタンス SQL 呼出しメソ

ッドならば,実行される

SQL 呼出しルーチンが当該ルーチンの置換メソッドの集合から選択される(“置

換メソッドの集合”という用語は,

10.4  <ルーチン呼出し>”の一般規則で定義している。)。選択される

置換メソッドは,当該パラメタの宣言型の型指示子が,当該パラメタに対応する

SQL 引数の値の最特定型

の型優先順序リスト中で,他のどの置換メソッドの当該パラメタの宣言型の型指示子よりも先行する当該

パラメタをもつ置換メソッドとする(“10.4  <ルーチン呼出し>”の一般規則参照。)。当該ルーチンが SQL

呼出しメソッドでないならば,実行される

SQL 呼出しルーチンは,その当該ルーチンとする。実行のため


86

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

SQL 呼出しルーチンの選択後に,DEFAULT を指定しない SQL 引数の値がその SQL 呼出しルーチンの

対応する

SQL パラメタに代入され,SQL 引数が与えられないか又は対応する SQL 引数が DEFAULT を指

定する

SQL 呼出しルーチンの SQL パラメタには,既定値が代入される。その後,そのルーチンの<ルーチ

ン本体

>が実行される。SQL 呼出しルーチンが SQL ルーチンならば,<ルーチン本体>は,<SQL 手続文>

の一般規則に従って実行される

<SQL 手続文>とする。SQL 呼出しルーチンが外部ルーチンならば,<ルー

チン本体

>は,SQL 以外のいずれかのプログラム言語で書かれ,そのホスト言語の規則に従って実行され

るプログラムを識別する。

SQL 呼出しルーチンの<ルーチン本体>は,常に,その SQL 呼出しルーチンを呼び出した SQL セション

と同じ

SQL セションの下で実行される。<ルーチン本体>の実行前に,現行 SQL セションのための新しい

文脈が作成され,現行の文脈の値は,保存される。

<ルーチン本体>の実行が完了すると,現行 SQL セショ

ンの元の文脈が復元される。

13

 SQL 呼出しルーチンが外部ルーチンならば,<ルーチン本体>の実行前に,実効的 SQL パラメタリス

トが構成される。実効的

SQL パラメタリストは,SQL 呼出しルーチンのパラメタ受渡し様式に依存して異

なる項目をもつ。実効的

SQL パラメタリスト中の各項目の値は,“10.4 <ルーチン呼出し>”の一般規則に

従って設定され,“13.5  データ型対応”の規則に従って<ルーチン本体>によって識別されるプログラムに

渡される。そのプログラムの実行後,

SQL 呼出しルーチンのパラメタ受渡し様式が SQL ならば,SQL 処

理系は,出力パラメタ(があるならば,出力パラメタ)の値,プログラムから戻される値(があるならば,

その値),

SQLSTATE の値,及びメッセージテキスト(があるならば,そのメッセージテキスト)の値を,

プログラムによって実効的

SQL パラメタリストに代入される値から得る。SQL 呼出しルーチンのパラメタ

受渡し様式が

GENERAL ならば,そのような値は,処理系定義の方法で得られる。

異なる

SQL 呼出しルーチンが等価な<ルーチン名>をもってもよい。同じスキーマ中のどの二つの SQL

呼出し関数も,同じ署名をもつことは許されない。同じスキーマ中のどの二つの

SQL 呼出し手続も,同じ

名前及び同じパラメタ数をもつことは許されない。当該ルーチン決定は,

<ルーチン名>及び<SQL 引数リ

スト

>を指定して与えられる<ルーチン呼出し>に対して,その当該ルーチンを選ぶための過程とする。SQL

呼出し関数のための当該ルーチン決定は,

SQL 呼出し関数の呼出しに対する全ての引数(すなわち,当該

ルーチン決定の時点で型が分かっていない

<動的パラメタ指定>ではない全ての引数)の最特定型を左から

右への順序で考慮する。引数の最特定型とパラメタの宣言型とが正確に一致しない場合,最も近い一致を

決定するために型優先順序リストを用いる(“9.6  当該ルーチン決定”参照。)。

<ルーチン呼出し>がビューの元の<問合せ式>,検査制約若しくは表明の<探索条件>,トリガの<被トリ

ガ動作

>,又は<SQL 呼出しルーチン>に含まれるならば,その呼出しに対する当該ルーチンは,ビューが

作成される時点,検査制約が定義される時点,表明が作成される時点,トリガが作成される時点,又は

SQL

呼出しルーチンが作成される時点で決定される。

<ルーチン呼出し>がビューの階層的な<問合せ式>に含

まれるならば,その呼出しに対する当該ルーチンは,元の

<問合せ式>が<ルーチン呼出し>を含む の下位

ビューSV が作成される時点で決定される。当該ルーチンが SQL 呼出し手続,SQL 呼出し通常関数又は静

SQL 呼出しメソッドならば,ビューが利用されるとき,検査制約若しくは表明が評価されるとき,トリ

ガが実行されるとき,又は

SQL 呼出しルーチンが呼び出されるときはいつも,同じ SQL 呼出しルーチン

が実行される。当該ルーチンがインスタンス

SQL 呼出しメソッドならば,ビューが利用されるとき,検査

制約若しくは表明が評価されるとき,トリガが実行されるとき,又は

SQL 呼出しルーチンが呼び出される

たびに,当該パラメタに対応する

SQL 引数の評価の結果として得られる値の最特定型に基づいて,実行さ

れる

SQL 呼出しルーチンが決定される(“10.4 <ルーチン呼出し>”の一般規則を参照。)。


87

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

SQL ルーチンの<ルーチン本体>中の全ての<識別子鎖>は,SQL ルーチンが作成される時点で,基底及び

基底の指示対象を識別するために解決される。このようにして,

SQL ルーチンが呼び出されるときはいつ

も,同じ列及び同じ

SQL パラメタが参照される。

SQL 呼出しルーチンは,決定的  (deterministic)  又は潜在的に非決定的  (possibly non-deterministic)  のいず

れかとする。決定的な

SQL 呼出し関数は,与えられた SQL 引数値のリストに対して,常に同一の戻り値

を戻す。決定的な

SQL 呼出し手続は,与えられた SQL 引数値のリストに対して,出力及び入出力 SQL パ

ラメタに常に同一の値を戻す。

SQL 呼出しルーチンが同一の SQL 引数値のリストで呼び出されるとき,同

一でない結果を生じるかもしれないならば,その

SQL 呼出しルーチンは,潜在的に非決定的とする。

外部ルーチンは,SQL を潜在的に含まない  (does not possibly contain SQL)  か,SQL を潜在的に含む

(possibly contains SQL)  か,SQL データを潜在的に読む  (possibly read SQL-data)  か,又は SQL データを潜

在的に修正する  (possibly modify SQL-data)。SQL を潜在的に含むか,SQL データを潜在的に読むか,又は

SQL データを潜在的に修正する外部ルーチンだけが,呼び出されている間に SQL 文を実行してもよい。

SQL データを潜在的に読むか,又は SQL データを潜在的に修正する SQL 呼出しルーチンだけが,呼び出

されている間に

SQL データを読んでもよい。SQL データを潜在的に修正する SQL 呼出しルーチンだけが,

呼び出されている間に

SQL データを修正してもよい。

SQL 呼出しルーチンは,ルーチン認可識別子  (routine authorization identifier)  をもち,それは,SQL 呼出

しルーチンが作成される時点でその

SQL 呼出しルーチンを含むスキーマの所有者の(直接的又は間接的

に)認可識別子とする。

4.28.3  SQL 呼出しルーチンの実行

この細分箇条は,ISO/IEC 9075-4 の“4.2.2 SQL 呼出しルーチンの実行”によって修正される。 

SQL 呼出しルーチンが呼び出されると,<ルーチン本体>が実行される前に,現行の SQL セション文脈

の写しがスタックに押し込まれ,幾つかの値が修正される(“10.4  <ルーチン呼出し>”の一般規則参照)。

認可スタックの扱いは,“4.35.1.1 SQL セション認可識別子”に記述している。

04

 SQL 呼出しルーチンは,ルーチン SQL パス  (routine SQL-path)  をもち,それは,SQL 呼出しルーチン

を含む

SQL スキーマ,現行 SQL セション,又は SQL 呼出しルーチンを含む SQL クライアントモジュール

から継承される。

外部ルーチンである

SQL 呼出しルーチンは,外部ルーチン SQL パス  (external routine SQL-path)  ももち,

それは,外部ルーチンのルーチン本体によって識別される外部プログラム中に含まれる

<SQL クライアン

トモジュール定義

>の<モジュールパス指定>があるならば,その<モジュールパス指定>から導出される。

その

<SQL クライアントモジュール定義>が<モジュールパス指定>を指定しないならば,外部ルーチン SQL

パスは,処理系定義の

SQL パスとする。現行 SQL セション中で準備される<準備可能文>,又は<直接 SQL

>に<ルーチン呼出し>が含まれるならば,<ルーチン名>が<スキーマ名>を含まない<ルーチン呼出し>の

当該ルーチンの探索順序を決定するために,

SQL ルーチン及び外部ルーチンの両方に対して,現行 SQL

セションの

SQL パスが用いられる。現行 SQL セション中で準備される<準備可能文>にも,<直接 SQL 文>

にも,

<ルーチン呼出し>が含まれないならば,<ルーチン名>が<スキーマ名>を含まない<ルーチン呼出し>

の当該ルーチンの探索順序を決定するために,

SQL ルーチンは,ルーチン SQL パスを用いる。現行 SQL

セション中で準備される

<準備可能文>にも,<直接 SQL 文>にも,<ルーチン呼出し>が含まれないならば,

<ルーチン名>が<スキーマ名>を含まない<ルーチン呼出し>の当該ルーチンの探索順序を決定するために,

外部ルーチンは,外部ルーチン

SQL パスを用いる。

4.28.4  ルーチン記述子


88

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

この細分箇条は,ISO/IEC 9075-4 の“4.4.3  ルーチン記述子”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“4.5.1  ルーチン記述子”によって修正される。 

04

 SQL 呼出しルーチンは,ルーチン記述子  (routine descriptor)  によって記述される。ルーチン記述子は,

次の項目を含む。

 SQL 呼出しルーチンのルーチン名。

 SQL 呼出しルーチンの特定名。

 SQL 呼出しルーチンのルーチン認可識別子。

 SQL 呼出しルーチンのルーチン SQL パス。

 SQL 呼出しルーチンの本体を書いている言語の名前。

 SQL 呼出しルーチンの各 SQL パラメタに対して,次の項目。

  指定されているならば,<SQL パラメタ名>。

  <データ型>。

  順序位置。

 SQL パラメタが入力 SQL パラメタか,出力 SQL パラメタか又は入出力 SQL パラメタかを示す標識。

 SQL パラメタが既定値をもつかどうかを示す標識,及びもつならば,<パラメタ既定値>。

 SQL 呼出しルーチンが SQL 呼出し関数か又は SQL 呼出し手続かを示す標識。

 SQL 呼出しルーチンが SQL 呼出し手続ならば,戻り結果集合の最大個数。

 SQL 呼出しルーチンが決定的か又は潜在的に非決定的かを示す標識。

 SQL 呼出しルーチンが SQL データを潜在的に修正するか,SQL データを潜在的に読むか,SQL を潜

在的に含むか又は

SQL を潜在的に含まないかを示す標識。

 SQL 呼出しルーチンが SQL 呼出し関数ならば,次の項目。

 SQL 呼出し関数の<戻りデータ型>。

  <戻りデータ型>が<位置付け子標識>を単純に含むならば,戻り値が位置付け子であることを示す標

識。

 SQL 呼出し関数が型保持関数かどうかを示す標識。

 SQL 呼出し関数が変異関数かどうかを示す標識。

 SQL 呼出し関数が型保持関数ならば,どのパラメタが結果パラメタかを示す標識。

 SQL 呼出し関数がナル呼出し関数かどうかを示す標識。

 SQL 呼出し関数が SQL 呼出しメソッドかどうかを示す標識。

  作成時刻印。

  最終変更時刻印。

 SQL 呼出しルーチンが SQL ルーチンならば,次の項目。

 SQL 呼出しルーチンの SQL ルーチン本体。

 SQL ルーチンの SQL 安全保護特性。

 SQL 呼出しルーチンが外部ルーチンならば,次の項目。

  外部ルーチンの外部ルーチン名。

  外部ルーチンの<パラメタ様式>。

  外部ルーチンが<結果型変換>を指定するならば,それが<結果型変換>を指定することを示す標識及

<結果型変換>中に指定される<データ型>。<結果型変換>が<位置付け子標識>を含むならば,<結

果型変換

>中に指定される<データ型>が位置付け子標識をもつことを示す標識。


89

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

  外部ルーチンの外部安全保護特性。

  外部ルーチンの外部ルーチン SQL パス。

  外部ルーチンの実効的 SQL パラメタリスト。

  関連付けられた FROM-SQL 関数 FSF がある全ての SQL パラメタに対して,FSF の特定名。

  関連付けられた TO-SQL 関数 TSF がある全ての SQL パラメタに対して,TSF の特定名。

 SQL 呼出しルーチンが外部関数で,かつ,その結果に関連付けられた TO-SQL 関数 TRF があるな

らば,TRF の特定名。

 <SQL パラメタ宣言>が<位置付け子標識>を含む全ての SQL パラメタに対して,SQL パラメタが位

置付け子パラメタであることを示す標識。

 SQL 呼出しルーチンを含むスキーマのスキーマ名。

 SQL 呼出しルーチンが SQL 呼出しメソッドならば,次の項目。

  対応するメソッド指定記述子を含む記述子をもつ利用者定義型の名前。

 STATIC が指定されたかどうかを示す標識。

  ルーチンがスキーマレベルルーチンかどうかを示す標識。

 SQL 呼出しルーチンが利用者定義型に依存しているかどうかを示す標識。

 SQL 呼出しルーチンが呼び出されたときに,新しい保存点水準を確立することを要求するかどうかを

示す標識。

4.28.5  SQL 呼出し手続によって戻される結果集合

この細分箇条は,ISO/IEC 9075-3 の“4.5.1 SQL 呼出し手続によって戻される結果集合”によって修正さ

れる。

SQL 呼出し手続 SIP1 の呼出しは,結果集合並び RSS を生じさせるかもしれない。RSS は,SIP1 によっ

て開かれ,SIP1 が終了するときに開いたままになっている WITH RETURN カーソルの結果集合から成り,

それらの結果集合は,SIP1 の実行中に作成される順序で並べられる。

注記 76  SIP1 の実行中に同じカーソルが 2 回以上開かれるならば,問題になっている結果集合が先に開

いて作成されたものと同一であっても,結果集合を作成するとみなされるのは,最後に開いた

ものである。

RSS は,<受取りカーソル割当て文>を実行することによって,SIP1 の呼出し元 INV が受取りカーソル

を通して利用可能とする。SIP1 が SQL 呼出し手続 SIP2 によって呼び出されるならば,INV は,SIP2 

する。SIP1 が外部呼出し手続 EIP によって呼び出されるならば,INV は,EIP を含む SQL クライアント

モジュールとする。RSS 自体を呼出し元 INV に戻してもよいかどうかは,処理系定義とする。

注記 77  例えば,SIP1 を呼び出す SQL 呼出し手続 SIP3 を呼び出す<CALL 文>を外部呼出し手続 EIP 

実行するならば,SIP3 が EIP に制御を戻すか,又は SIP3 が戻る前に SIP3 による SIP1 の別の

呼出しが与えられるまで,SIP1 によって戻される結果集合並び RSS は,SIP3 が利用可能であ

る。RSS 中の任意の特定のカーソル を SIP3 が EIP に戻してよいかどうかは,処理系定義で

ある。

INV による SIP1 の呼出しは,INV による SIP1 の以前の呼出しによって生じたかもしれない既存の結果

集合並びを破壊する。INV が終了するとき,INV が利用可能な全ての結果集合並びが破壊される。

戻り結果集合は,

構成行  (constituent row)  と呼ばれる行の並び,及び初期カーソル位置  (initial cursor 

position)  を含む。結果集合の全ての行は,結果集合の行型  (row type)  と呼ばれる同じ行型とする。結果集

合の

次数  (degree)  は,結果集合の行型中の列の個数とする。結果集合中の行の個数は,その結果集合の基


90

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

数  (cardinality)  とする。

RSS 中の各戻り結果集合 RS の構成行及び初期カーソル位置は,SIP1 が INV に戻るときに決定される。

RS に対する WITH RETURN カーソル がスクロール可能ならば,RS の構成行は,SIP1 が終了するとき

に存在するとおりの の結果集合の行とする。そうでなければ,その構成行は,の現在カーソル位置に

先行する行が除外されることを除いて,スクロール可能カーソルと同じとする。がスクロール可能なら

ば,RS の初期カーソル位置は,SIP1 が終了するときの の位置とする。そうでなければ,RS の初期カー

ソル位置は,最初の行の前とする。

注記 78  SIP1 が終了するときに存在するとおりの の結果集合は,例えば,SIP1 が終了する前に,

<DELETE 文:位置付け>又は<UPDATE 文:位置付け>が SIP1 によって実行されるならば,C

が開かれたときに生成されたものとは異なるかもしれない。

結果集合並びを形成するかもしれない戻り結果集合の最大個数は,SIP1 を定義する<SQL 呼出しルーチ

>に含まれる<戻り結果集合特性>によって指定される。SIP1 が戻るときに開いたままである WITH

RETURN カーソルの実際の個数が,<戻り結果集合特性>中で指定される戻り結果集合の最大個数を超える

ならば,警告条件が引き起こされる。その最大個数を超える位置にある結果集合が戻されるかどうかは,

処理系依存とする。

03

  結果集合は,結果集合記述子によって記述される。結果集合記述子  (result set descriptor)  は,次の項

目を含む。

  <カーソル指定>。

  行の並び。

  行の並び内の位置(行の前,行の上又は最後の行の後)。

  操作上の特性。

  操作上の感度特性(SENSITIVE,INSENSITIVE 又は ASENSITIVE のいずれか)。

  操作上のスクロール可能性特性(SCROLL 又は NO SCROLL のいずれか)。

  操作上の保持可能性特性(WITH HOLD 又は WITHOUT HOLD のいずれか)。

  操作上の戻り可能性特性(WITH RETURN 又は WITHOUT RETURN のいずれか)。

  操作上の保持可能性特性が WITH HOLD で,かつ,位置が行の上ならば,最後の<COMMIT 文>以降

<FETCH 文>又は<動的 FETCH 文>が発行されたかどうかを示す標識。

4.29  SQL パス

この細分箇条は,ISO/IEC 9075-4 の“4.5 SQL パス”によって修正される。 

SQL パス (SQL-path) は,次のうちのいずれかのための探索順序を決定する一つ以上の<スキーマ>のリ

ストとする。

  <ルーチン名>が<スキーマ名>を含まない<ルーチン呼出し>の当該ルーチン。

  <パス解決利用者定義型名>が<スキーマ名>を含まないときの利用者定義型。

04

 CURRENT_PATH によって指定される値は,現行 SQL セションの SQL パスの値とする。<ルーチン呼

出し

>が,<EXECUTE IMMEDIATE 文>か若しくは<PREPARE 文>のいずれかによって現行 SQL セション中

で準備される

<準備可能文>に含まれるか,又は直接起動される<直接 SQL 文>に含まれるとき,<スキーマ

>を含まない<ルーチン名>をもつ<ルーチン呼出し>の当該ルーチンを探すために,この SQL パスが用い

られる。

SQL スキーマの定義には,<ルーチン呼出し>が<スキーマ定義>に含まれるときに,<スキーマ名>

を含まない

<ルーチン名>をもつ<ルーチン呼出し>の当該ルーチンを探すために用いる SQL パスを指定す


91

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

る。

4.30  ホストパラメタ

4.30.1  ホストパラメタの概要

ホストパラメタ

 (host parameter) は,<ホストパラメタ宣言>によって,<外部呼出し手続>中で宣言され

る。ホストパラメタは,

<外部呼出し手続>の呼出し中で対応する引数の値を受け取るか又は与えるかのい

ずれかとする。

<ホストパラメタ宣言>は,それに対応する引数のホスト言語の型に対応付ける,ホストパラメタの値の

<データ型>を指定する。標識パラメタを用いなければ,ホストパラメタは,ナルではあり得ない。

4.30.2  状態パラメタ

この細分箇条は,ISO/IEC 9075-4 の“4.6.1  状態パラメタ”によって修正される。 

SQLSTATE ホストパラメタは,状態パラメタ (status parameter) とする。その値には,<外部呼出し手続>

の呼出しが正常に終了したか,又は

<外部呼出し手続>の実行中に例外条件が引き起こされたかのいずれか

を示す状態コードが設定される。

<外部呼出し手続>は,SQLSTATE ホストパラメタを指定しなければならない。SQLSTATE ホストパラメ

タは,文字列のホストパラメタとし,それに対する例外値は,“24  状態コード”で規定する。

ある条件が引き起こされ,その条件が引き起こされたことに関連する効果以外に,文がどんな効果もも

たない(すなわち,終了条件でない)ならば,その条件を

例外条件  (exception condition)  又は例外  (exception)

という。ある条件が引き起こされ,その条件が引き起こされたことに関連する効果以外の効果を文がもつ

ことが許される[

成功終了  (successful completion),警告  (warning)  又はデータなし  (no data)  の SQLSTATE

クラスコードに対応する。

]ならば,その条件を

終了条件  (completion condition)  という。

<SQL 手続文>の実行中に,例外条件又は終了条件が引き起こされてもよい。<SQL 手続文>が終了すると

き,条件のうちの一つが有効な条件になる。有効な条件が例外条件ならば,有効な例外条件と呼ぶ。有効

な条件が終了条件ならば,有効な終了条件と呼ぶ。

終了条件

警告  は,概して,その効果が正しいが,それらの効果について利用者に警告する理由がある終

了として定義される。それは,この規格で規定する条件だけでなく,処理系定義の条件に対しても,引き

起こされる。終了条件

データなし  は,特別な意味をもち,空の結果を示すために用いる。終了条件成功終

了  は,警告  にもデータなし  にも対応しない終了条件を示すものとして定義される。これは,SQLSTATE

サブクラスが警告性のない処理系定義の情報を提供する条件を含む。

戻されるべき状態パラメタ値を選択するために,トランザクションロールバックのための例外条件は,

文の失敗のための例外条件よりも優先される。同様に,終了条件

データなし  は,終了条件警告  よりも優

先され,終了条件

警告  は,終了条件成功終了  よりも優先される。全ての例外条件は,全ての終了条件よ

りも優先される。

SQLSTATE に代入される値は,これらの優先順序の要件に従わなければならない。

4.30.3  データパラメタ

データパラメタ

 (data parameter) は,ホストプログラムと SQL 処理系との間で交換されるデータの値を

受け取るか又は与えるために用いるホストパラメタとする。

4.30.4  標識パラメタ

標識パラメタ

 (indicator parameter) は,他のホストパラメタの直後に続けて指定する整数のホストパラメ

タとする。その主な用途は,他のホストパラメタが受け取るか又は与える値がナル値かどうか示すことと

する。標識ホストパラメタは,他の標識ホストパラメタの直後に続けることはできない。

標識パラメタの別の用途は,ホストプログラムと

SQL 処理系との間で受け渡される間に,ホストパラメ


92

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

タ又はホスト変数の中で,データ列データの切捨てが発生したかどうかを示すこととする。ナルでないデ

ータ列の値が受け渡され,相手の長さが代入元の値全体を受け取るのに十分ならば,標識パラメタ又は標

識変数には,切捨てが発生しなかったことを示すために,

0 が設定される。しかし,相手の長さが不十分

ならば,標識パラメタ又は標識変数には,切捨てが発生したこと,及び代入元の値の文字又はオクテット

の適切な単位での本来の長さを示すために,代入元の値の(文字又はオクテットの適切な単位での)長さ

が設定される。

4.30.5  位置付け子

ホストパラメタ,ホスト変数,外部ルーチンの

SQL パラメタ,又は外部関数によって戻される値は,

AS LOCATOR を指定することによって,位置付け子  (locator)  であることを指定してもよい。位置付け子

は,

SQL データではなく,SQL データの実現値を参照するために用いることができる SQL セションオブ

ジェクトとする。位置付け子は,長大オブジェクト位置付け子,利用者定義型位置付け子,配列位置付け

子又はマルチ集合位置付け子のいずれかとする。

長大オブジェクト位置付け子は,次のいずれかとする。

  値が長大オブジェクト 2 進オクテット列を識別する 2 進オクテット長大オブジェクト位置付け子。

  値が長大オブジェクト文字列を識別する文字長大オブジェクト位置付け子。

  値が長大オブジェクト各国文字列を識別する各国文字長大オブジェクト位置付け子。

利用者定義型位置付け子は,位置付け子指定によって指定される利用者定義型の値を識別する。配列位

置付け子は,位置付け子指定によって指定される配列型の値を識別する。マルチ集合位置付け子は,位置

付け子指定によって指定されるマルチ集合型の値を識別する。

2 進オクテット長大オブジェクト型,文字長大オブジェクト型,利用者定義型,配列型又はマルチ集合

型の格納場所の値が,対応する型の位置付け子に代入されるとき,処理系依存の

4 オクテットの整数値が

生成され,その相手に代入される。位置付け子の値は,対応する型の値を一意に識別する。

位置付け子は,

有効  (valid)  又は無効  (invalid)  のいずれかであってもよい。さらに,位置付け子として

指定されるホストパラメタ又はホスト変数は,

保持可能位置付け子  (holdable locator)  であることを指定し

てもよい。位置付け子が最初に作成されるとき,有効というマークが付けられ,適用可能ならば,保持可

能でないというマークが付けられる。位置付け子を指定する

<HOLD LOCATOR 文>は,その位置付け子を

保持可能にするために,明確に,その位置付け子が作成された

SQL トランザクションが終了する前に実行

しなければならない。

保持可能でない位置付け子は,陽に無効にされるということがない限り,位置付け子が生成されたトラ

ンザクションが終了するまで,有効のままとする。保持可能でない位置付け子は,

<FREE LOCATOR 文>

が実行されるか,又はその位置付け子の生成よりも前に確立された保存点を識別する

<SAVEPOINT 句>を

指定する

<ROLLBACK 文>が実行されるときはいつも,無効になる。無効な位置付け子にアクセスすると,

例外条件が引き起こされることになる。

保持可能な位置付け子は,それが生成された

SQL トランザクションの終了を越えて,有効のままであっ

てもよい。保持可能な位置付け子は,その位置付け子を識別する

<FREE LOCATOR 文>が実行されるか,

又はその位置付け子が生成された

SQL トランザクション若しくは後続のいずれかの SQL トランザクショ

ンがロールバックされるときはいつも,無効になる。

SQL セションの終了時に有効のままである全ての位

置付け子は,その

SQL セションが終了するときに,無効というマークが付けられる。

4.31  診断領域


93

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

この細分箇条は,ISO/IEC 9075-4 の“4.7  診断領域”によって修正される。 

診断領域

 (diagnostics area) は,SQL 文が実行されたときに,終了条件及び例外条件の情報が格納される

場所とする。

SQL セションに関連付けられる診断領域は,その SQL セションの診断領域スタック

(diagnostics area stack)  を形成する。定義のために,このスタック中の診断領域には,1 から始まる連続し

た番号が付けられているものとみなす。JIS  X  3005-1  [ISO9075-1]  の“4.2.3.1 SQL クライアント”で示す

とおり,もう一つの診断領域が

SQL クライアントによって維持される。

診断領域スタックに関する二つの操作を,定義のためだけに,この規格で規定する。診断領域スタック

押し込むこと  (pushing)  は,新しい 1 番目の診断領域を実効的に作成し,スタック中の既存の全ての診

断領域の順序位置を

1 ずつ増加させることとする。新しい 1 番目の診断領域の内容は,最初は,古い(現

2 番目の)ものの内容の写しとする。診断領域スタックから取り出すこと  (popping)  は,スタック中の

1 番目の診断領域を実効的に破壊し,残りの全ての診断領域の順序位置を 1 ずつ減少させることとする。

診断領域スタック中の診断領域の最大数は,処理系依存とする。

各診断領域は,

文領域  (statement area),及び一つ以上の条件領域  (condition area)  の並びから成り,条件

領域のそれぞれは,特定の任意の時点で,

占有  (occupied)  されるか又は空き  (vacant)  であるかのいずれ

かとする。条件領域のそれぞれが空きのとき,診断領域は,

空  (empty)  とする。診断領域を空にすること

(emptying)  は,この状態をもたらす。文領域は,名前付きの文情報項目  (statement information item)  の集ま

りから成る。条件領域は,名前付きの

条件情報項目  (condition information item)  の集まりから成る。

文情報項目は,条件が引き起こされるときに実行されている最も内側の

SQL 文についての情報を与える。

条件情報項目は,その条件自体についての情報を与える。文情報項目及び条件情報項目の名前及びデータ

型は,表 30“<GET DIAGNOSTICS 文>で用いるための<文情報項目名>”及び表 31“<GET DIAGNOSTICS

>で用いるための<条件情報項目名>”で規定する。それらの意味は,“23.1 <GET DIAGNOSTICS 文>”の

一般規則で規定する。

<SQL 診断文>でない任意の<SQL 手続文>の実行の開始時に,1 番目の診断領域が空にされる。処理系は,

この診断領域中の空きの条件領域に,

SQLSTATE によって通知される終了条件又は例外条件についての情

報を格納する。別の条件が引き起こされるならば,これらの条件によって条件領域が更に占有されること

になる範囲は,処理系定義とする。

<SQL 診断文>を含む<外部呼出し手続>は,SQLSTATE によってその文の終了条件又は例外条件を示すコ

ードを戻すが,必ずしも空きの条件領域が占有されることになるとは限らない。

診断領域ごとの条件領域の個数は,

条件領域限界  (condition area limit)  として参照する。SQL エージェ

ントは,

<SET TRANSACTION 文>で条件領域限界を設定してもよい。SQL エージェントが条件領域限界を

指定しないならば,条件領域限界は,処理系依存とするが,少なくとも一つの条件領域がなければならな

い。

SQL 処理系は,存在する条件領域よりも少ない条件についての情報をこの領域に格納してもよい。診

断領域中の

1 番目の条件領域が常に SQLSTATE 値で指定される条件に対応することを除いて,診断領域に

格納される条件についての情報の順序は,処理系依存とする。

<GET DIAGNOSTICS 文>は,1 番目の診断領域内での順序位置によって条件領域を参照し,占有された

条件領域から情報を得るために用いる。

4.32  ホスト言語

この規格では,

ホスト言語  (host language)  と呼ばれる幾つかの特定のプログラム言語で書かれたプログ

ラムから

<外部呼出し手続>が呼び出されるときの,SQL クライアントモジュール中のそれらの<外部呼出

し手続

>の動作を規定する。“PLN プログラム  (PLN program)”という用語は,“2  引用規格”で特定される


94

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

そのホスト言語の規定に適合するプログラムを参照する。ここで,PLN は,ホスト言語の名前とする。

この規格では,

SQL 言語を埋め込まなければ,いずれかの特定の同じプログラム言語の規格に適合する

プログラム中に,

SQL 言語を埋め込むことを可能にするための機構を規定する。

注記 79 SQL と Java プログラム言語との間のインタフェースは,[ISO9075-10]  及び  [ISO9075-13]  で定

義している。

多くの

SQL データ型とほとんどのホスト言語のデータ型との間に明白な対応付けがあるが,これは,全

ての

SQL データ型に対してでも,全てのホスト言語に対してでもない。

プログラム言語とのインタフェースをとるために,データ型

DATE,TIME,TIMESTAMP 及び INTERVAL

は,それらのプログラム言語の文字列から,又はそれらのプログラム言語の文字列に,

<CAST 指定>を用

いて変換しなければならない。プログラム言語規格が将来進化して,これらの四つの

SQL データ型に対応

するデータ型を提供することを期待する。その後,それらの対応するデータ型の利用可能性を反映するた

めに,この規格を改正することになる。

データ型

CHARACTER,CHARACTER VARYING 及び CHARACTER LARGE OBJECT も,プログラム言

語の文字列に対応付けられる。しかし,プログラム言語で利用可能な機能は,

SQL で利用可能な機能と同

じ能力を提供しないので,文字データを交換する特定の形式に関して,ホストプログラムと

SQL との間の

取決めがなければならない。この取決めのための明確な構文は,この規格で規定する。

標準プログラム言語

C 及び COBOL に対しては,BOOLEAN 値をホスト言語の整数変数に対応付ける。

標準プログラム言語

ADA,Fortran,PASCAL 及び PL/I に対しては,BOOLEAN 変数が直接提供される。

プログラム言語とのインタフェースのために,データ型

ARRAY は,位置付け子(“4.30.5  位置付け子”

参照)に変換しなければならない。

プログラム言語とのインタフェースのために,データ型

MULTISET は,位置付け子(“4.30.5  位置付け

子”参照)に変換しなければならない。

プログラム言語とのインタフェースのために,利用者定義型は,位置付け子(

4.30.5  位置付け子”参照)

で操作するか,又はホスト言語への定義された対応付けがある別の

SQL データ型に変換(“4.7.6  利用者定

義型のための変換”参照)しなければならない。

4.33  カーソル

4.33.1  カーソルの一般記述

この細分箇条は,ISO/IEC 9075-3 の“4.6.1  カーソルの一般記述”によって修正される。 

この細分箇条は,ISO/IEC 9075-4 の“4.9.1  カーソルの一般記述”によって修正される。 

カーソル

 (cursor) は,表の行を 1 行ずつ処理する(例えば,ホストプログラム言語に戻す)ための機構

とする。

04

  カーソルは,<カーソル宣言>,<動的カーソル宣言>,<拡張動的カーソル割当て文>又は<受取りカー

ソル割当て文

>によって指定する。<カーソル宣言>によって指定されるカーソルは,元祖カーソル  (standing 

cursor)  とする。<動的カーソル宣言>によって指定されるカーソルは,宣言動的カーソル  (declared dynamic 

cursor)  とする。<拡張動的カーソル割当て文>によって指定されるカーソルは,

拡張動的カーソル  (extended 

dynamic cursor)  とする。拡張動的カーソルは,その拡張名が大域ならば,大域  (global)  とする。そうでな

ければ,拡張動的カーソルは,

局所  (local)  とする。<受取りカーソル割当て文>によって指定されるカー

ソルは,

受取りカーソル  (received cursor)  とする。動的カーソル  (dynamic cursor)  は,宣言動的カーソル,

拡張動的カーソル又は受取りカーソルのいずれかとする。

03

04

  宣言カーソル  (declared cursor)  は,元祖カーソル,宣言動的カーソル又は受取りカーソルのいずれ


95

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

かとする。宣言カーソルは,

<カーソル名>をもつ。<カーソル宣言>,<動的カーソル宣言>又は<受取りカ

ーソル割当て文

>は,<SQL クライアントモジュール定義>の<モジュール内容>に直に含まれる。<カーソル

>の有効範囲は,それを含む最も内側の<SQL クライアントモジュール定義>  に含まれるどの<SQL ス

キーマ文

>も除く とする。

どのカーソルにも,関連付けられたカーソル宣言がある。宣言カーソルに対して,カーソル宣言は,そ

のカーソルの

<カーソル宣言>,<動的カーソル宣言>又は<受取りカーソル割当て文>によって指定される。

拡張動的カーソルに対して,カーソル宣言は,

<拡張動的カーソル割当て文>によって暗に作成される。

03

04

  カーソル宣言は,カーソル宣言記述子によって記述される。カーソル宣言記述子  (cursor declaration 

descriptor)  は,次の項目を含む。

03

  カーソルの種類(元祖カーソル,宣言動的カーソル,拡張動的カーソル又は受取りカーソル)。

04

  カーソルの出所。

  カーソルが宣言カーソル又は局所拡張動的カーソルならば,SQL クライアントモジュールを示す標

識。

  そうでなければ,SQL セション識別子。

03

  カーソルの名前。

  カーソルが宣言カーソルならば,<カーソル名>。

03

  そうでなければ,拡張名及びその有効範囲(GLOBAL 又は LOCAL)。

03

  カーソルの起源。

  カーソルが元祖カーソルならば,<カーソル宣言>に含まれる<カーソル指定>。

  カーソルが宣言動的カーソルならば,<動的カーソル宣言>に含まれる<文名>。

  カーソルが拡張動的カーソルならば,拡張文名によって指定される被準備文。

03

  カーソルが受取りカーソルならば,そのカーソルの<特定ルーチン指示子>。

  カーソルの宣言特性。

  カーソルの宣言感度特性(SENSITIVE,INSENSITIVE 又は ASENSITIVE のいずれか)。

  カーソルの宣言スクロール可能性特性(SCROLL 又は NO SCROLL のいずれか)。

  カーソルの宣言保持可能性特性(WITH HOLD 又は WITHOUT HOLD のいずれか)。

  カーソルの宣言戻り可能性特性(WITH RETURN 又は WITHOUT RETURN のいずれか)。

カーソル宣言記述子は,カーソルの種類,出所及び名前の組合せによって識別される。

カーソルは,カーソル実現値記述子によって記述される。

カーソル実現値記述子  (cursor instance 

descriptor)  は,次の項目を含む。

  カーソル宣言記述子。

 SQL セション識別子。

  カーソルの状態(開いているか又は閉じているかのいずれか)。

  カーソルが開いているならば,そのカーソルの結果集合記述子。

カーソル実現値記述子は,それのカーソル宣言記述子及び

SQL セション識別子によって識別される。

“宣言

 (declaration)”又は“実現値 (instance)”のいずれによっても修飾しない“カーソル (cursor)”と

いう用語は,カーソル実現値記述子を参照する。

<SQL クライアントモジュール定義>中のどの<カーソル宣言>に対しても,カーソル宣言記述子は,SQL


96

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

クライアントモジュールに含まれ,

SQL クライアントモジュールと同じ時点で,実効的に作成され,破壊

される。元祖カーソルに対するカーソル実現値記述子は,その

SQL クライアントモジュールの外部呼出し

手続が呼び出されるときに実効的に作成される。そのカーソル実現値記述子は,

SQL セションの終了時に

破壊される。

<SQL クライアントモジュール定義>中のどの<動的宣言カーソル>に対しても,カーソル宣言記述子は,

SQL クライアントモジュールに含まれ,SQL クライアントモジュールと同じ時点で,実効的に作成され,

破壊される。宣言動的カーソルに対するカーソル実現値記述子は,その

SQL クライアントモジュールの外

部呼出し手続が呼び出されるときに実効的に作成され,宣言動的カーソルが基にする被準備文を解放する

<DEALLOCATE PREPARE 文>が実行されるときに破壊される。そのカーソル実現値記述子は,(より前に

破壊されていないならば,

SQL セションの終了時にも破壊される。

拡張動的カーソル(すなわち,そのカーソル宣言記述子及びカーソル実現値記述子の両方)は,

<拡張動

的カーソル割当て文

>が SQL セション内で実行されるときに実効的に作成され,その SQL セションが終了

するとき,又は拡張動的カーソルが基にする被準備文を解放する

<DEALLOCATE PREPARE 文>が実行され

るときに破壊される。

<SQL クライアントモジュール定義>中のどの<受取りカーソル割当て文>に対しても,カーソル宣言記述

子は,

SQL クライアントモジュールに含まれ,SQL クライアントモジュールと同じ時点で,実効的に作成

され,破壊される。受取りカーソルに対するカーソル実現値記述子は,

<受取りカーソル割当て文>が SQL

セション内で実行されるときに実効的に作成され,その

SQL セションが終了するときに破壊される。

カーソル実現値記述子は,開いている状態にあるか,又は閉じている状態にあるかのいずれかとする。

カーソルの最初の状態は,閉じている状態とする。元祖カーソルは,

<OPEN 文>によって開いている状態

になり,

<CLOSE 文>又は<ROLLBACK 文>によって閉じている状態に戻る。宣言動的カーソルは,<動的

OPEN 文>によって開いている状態になり,<動的 CLOSE 文>によって閉じている状態に戻る。拡張動的カ

ーソルは,

<動的 OPEN 文>によって開いている状態になり,<動的 CLOSE 文>によって閉じている状態に

戻る。受取りカーソルは,

<受取りカーソル割当て文>によって開いている状態になり,<動的 CLOSE 文>

によって結果集合並び中の次の結果集合に進められる。結果集合並び中の最後の結果集合が処理された後,

受取りカーソルは,

<動的 CLOSE 文>によって閉じている状態になる。受取りカーソルが開いている間に,

それが関連付けられている

SQL 呼出し手続が再び呼び出されるときにも,受取りカーソルは,閉じている

状態になる。保持可能カーソルとして定義されなかった開いているカーソルは,

<COMMIT 文>によっても

閉じられる(受取りカーソルの場合,受取りカーソルの現在の結果集合が保持可能でないならば,

<COMMIT 文>によって,結果集合並び中に次の結果集合があるときには,その結果集合に関して受取りカ

ーソルが開かれる。

)。

開いている状態のカーソルは,結果集合,及びその結果集合の順序付けに対する位置を識別する。カー

ソルの

<カーソル指定>が<ORDER BY 句>を単純に含まないか,又は行の順序を完全に指定しない<ORDER

BY 句>を単純に含むならば,結果集合の行は,<ORDER BY 句>が順序を指定する範囲でだけ定義される

順序をもち,その他の順序は,処理系依存とする。

注記 80  “結果集合”の定義は,“3.1.6  第 2 部で規定する定義”で与えられる。

カーソルの順序付けが

<ORDER BY 句>によって定義されないとき,二つの行の相対位置は,処理系依存

とする。カーソルの順序付けが

<ORDER BY 句>によって部分的に決定されるとき,二つの行の相対位置は,

<ORDER BY 句>によってだけ決定される。<ORDER BY 句>を評価して,二つの行が等しい値をもつなら

ば,それらの行の相対位置は,処理系依存とする。


97

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

結果集合の

<カーソル指定>が<ORDER BY 句>を単純に含むカーソルは,順序付けられたカーソル

(ordered cursor)  とする。

カーソルは,

更新可能  (updatable)  か又は更新可能でない  (not updatable)  かのいずれかとする。受取り

カーソルは,更新可能でない。他の種類のカーソルに対しては,カーソルの結果集合記述子の

<カーソル指

>に FOR UPDATE OF が含まれるか,又はカーソルによって識別される<カーソル指定> CS が,単純に更

新可能な

<問合せ指定>で,CS に FOR READ ONLY が含まれないで,カーソルが順序付けられていなくて,

かつ,カーソルがスクロール可能でないならば,そのカーソルは,

更新可能とする。そうでなければ,そ

のカーソルは,

更新可能でない。更新及び削除の操作は,アクセス規則の制約に従って,更新可能なカー

ソルに対して許される。

開いている状態にあるカーソルの位置は,ある行の前,ある行の上,又は最後の行の後のいずれかとす

る。カーソルが行の上にあるならば,その行は,カーソルの現在行とする。カーソルは,結果集合の行の

並びが空であっても,その結果集合の最初の行の前又は最後の行の後にあってもよい。カーソルが最初に

開かれるとき,カーソルの位置は,最初の行の前とする。

カーソル宣言記述子及び結果集合記述子には,四つの特性,すなわち,感度特性(

SENSITIVE,

INSENSITIVE 又は ASENSITIVE のいずれか),スクロール可能性特性(SCROLL 又は NO SCROLL のいず

れか)

,保持可能性特性(

WITH HOLD 又は WITHOUT HOLD のいずれか)及び戻り可能性特性(WITH

RETURN 又は WITHOUT RETURN)がある。その四つの宣言カーソル特性には,それぞれ,<カーソル宣

>,<動的カーソル宣言>又は<拡張動的カーソル割当て文>に含まれる<カーソル特性>の陽に指定される

か又は暗に想定される

<カーソル感度>,<カーソルスクロール可能性>,<カーソル保持可能性>及び<カー

ソル戻り可能性

>が設定される。受取りカーソルに対する宣言カーソル特性は,ASENSITIVE,NO SCROLL,

WITHOUT HOLD 及び WITHOUT RETURN とする。

カーソルが開かれるとき,四つの宣言カーソル特性が,結果集合記述子の操作上の特性に写される。宣

言動的カーソル又は拡張動的カーソルの場合には,そのカーソルの

<カーソル指定>である被準備文の陽に

指定された

<カーソル属性の並び>によって指定されたとおりに,操作上の特性が修正される。受取りカー

ソルの場合には,操作上の感度特性,操作上のスクロール可能性特性及び操作上の保持可能性特性には,

結果集合を作成した

SQL 呼出し手続によって確立されたそれらの値が保存され,操作上の戻り可能性特性

は,処理系定義とする。

操作上の感度特性が

SENSITIVE のカーソルは,敏感  (sensitive)  であるという。操作上の感度特性が

INSENSITIVE のカーソルは,鈍感  (insensitive)  であるという。操作上の感度特性が ASENSITIVE のカーソ

ルは,

処理依存感度  (asensitive)  であるという。

操作上のスクロール可能性特性が

SCROLL のカーソルは,スクロール可能  (scrollable)  であるという。

操作上の保持可能性特性が

WITH HOLD のカーソルは,保持可能  (holdable)  であるという。

操作上の戻り可能性特性が

WITH RETURN のカーソルは,WITH RETURN (with-return)  カーソルである

という。

新しい

SQL トランザクションが開始されるとき,開いている状態のまま保持された保持可能カーソルは,

その位置を維持する。しかし,保持可能カーソルが元祖カーソルならば,

<UPDATE 文:位置付け>又は

<DELETE 文:位置付け>が,新しい SQL トランザクション中でその元祖カーソルを参照する前に,その元

祖カーソルに対して

<FETCH 文>を発行しなければならない(そうでなければ,例外条件が引き起こされ

る。

)。保持可能カーソルが動的カーソルならば,

<動的 UPDATE 文:位置付け>,<動的 DELETE 文:位置

付け

>,<準備可能動的 UPDATE 文:位置付け>又は<準備可能動的 DELETE 文:位置付け>が,新しい SQL


98

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

トランザクション中でその動的カーソルを参照する前に,その動的カーソルに対して

<動的 FETCH 文>を

発行しなければならない(そうでなければ,例外条件が引き起こされる。

)。

元祖カーソルの次の様相,すなわち,順序付けられているかどうか,更新可能であるかどうか,基とな

る表,感度特性,スクロール可能性特性,保持可能性特性及び戻り可能性特性は,そのカーソル宣言記述

子中の

<カーソル指定>から決定することができる。したがって,元祖カーソルのこれらの様相に関する用

語は,例えば,構文規則,アクセス規則,適合性規則中のカーソル宣言記述子にも適用してもよい。

4.33.2  カーソルの操作及びカーソルを用いる操作

<FETCH 文>は,元祖カーソルのもつ順序付けでの指定された行の上に,開いている元祖カーソルを位置

付けて,その行の列の値を取り出す。

<UPDATE 文:位置付け>は,元祖カーソルの現在行を更新する。

<DELETE 文:位置付け>は,元祖カーソルの現在行を削除する。

<動的 FETCH 文>は,動的カーソルのもつ順序付けでの指定された行の上に,開いている動的カーソル

を位置付けて,その行の列の値を取り出す。

<動的 UPDATE 文:位置付け>は,動的カーソルの現在行を更

新する。

<動的 DELETE 文:位置付け>は,動的カーソルの現在行を削除する。<準備可能動的 DELETE 文:

位置付け

>は,文の正確な形式が実行時まで分からないときに,動的カーソルによって行を削除するために

用いる。

<準備可能動的 UPDATE 文:位置付け>は,文の正確な形式が実行時まで分からないときに,動的

カーソルによって行を更新するために用いる。

位置付け DELETE 文  (positioned delete statement)  は,<DELETE 文:位置付け>,<動的 DELETE 文:位

置付け

>又は<準備可能動的 DELETE 文:位置付け>の SQL 文とする。

位置付け UPDATE 文  (positioned update statement)  は,<UPDATE 文:位置付け>,<動的 UPDATE 文:位

置付け

>又は<準備可能動的 UPDATE 文:位置付け>の SQL 文とする。

カーソルを識別する

SQL 文の実行中に誤りが発生するならば,陽に定義されている場合を除いて,その

カーソルの位置又は状態に与える影響があるならば,それは,処理系依存とする。

カーソルを識別する

SQL 文の実行中に終了条件が引き起こされるならば,その開いているカーソルを識

別するどの特定の

SQL 文に終了条件が戻されるかは,処理系依存とする。

次の段落は,カーソルの操作上の感度特性に関する問題を議論するために用いる幾つかの用語を定義す

る。

SQL データの変更がカーソル CR に対して独立  (independent)  であるということは,CR で位置付けられ

<UPDATE 文:位置付け>又は<DELETE 文:位置付け>によってその変更がなされないことと同値とする。

SQL データの変更が CR に対して著しい  (significant)  ということは,その変更が CR に対して独立で,

CR が開かれる前にその変更がコミットされたならば,CR の結果集合記述子中の行の並びが何らかの点で

異なる原因となることと同値とする。

SQL データの変更が CR に対して可視  (visible)  であるということは,CR の結果集合記述子の行の並び

SR に行を挿入するか,SR から行を削除するか,SR の行の列の値を変更するか,又は SR の行を再び順序

付けることによって,その変更が SR に影響を与えることと同値とする。

カーソルが開いており,そのカーソルを開いた

SQL トランザクションが SQL データに著しい変更を行

うならば,そのカーソルが閉じられる前に,そのカーソルに対してその変更が可視であるかどうかは,次

のとおりに決定される。

  カーソルが鈍感ならば,著しい変更は,可視ではない。

  カーソルが敏感ならば,著しい変更は,可視とする。

  カーソルが処理依存感度ならば,著しい変更の可視性は,処理系依存とする。


99

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

保持可能カーソルが

SQL トランザクション の間に開かれており,後続 SQL トランザクションに対し

てそのカーソルが開いている状態のまま保持されるならば,

T,又はそのカーソルが開いている状態のま

ま保持されるいずれかの後続

SQL トランザクションによって)SQL データに対して行われた著しい変更が,

そのカーソルが閉じられる前に,後続

SQL トランザクション中のそのカーソルに対して可視であるかどう

かは,次のとおりに決定される。

  カーソルが鈍感ならば,著しい変更は,可視ではない。

  カーソルが敏感ならば,著しい変更の可視性は,処理系定義とする。

  カーソルが処理依存感度ならば,著しい変更の可視性は,処理系依存とする。

CR が WITH RETURN カーソルならば,CR の結果集合記述子に含まれる<カーソル指定>は,戻り結果

集合を定義する。

WITH RETURN カーソルが SQL 呼出し手続中で宣言され,その手続から呼出し元に制御

が戻るときに開いている状態にあるならば,その

WITH RETURN カーソルは,それを生成する手続の呼出

し元がアクセスできる戻り結果集合を生成する。

注記 81  “戻り結果集合”及び“WITH RETURN カーソル”の定義は,“3.1.6  第 2 部で規定する定義”

で与えられる。

4.34  SQL 

4.34.1  SQL 文の種類

この細分箇条は,ISO/IEC 9075-4 の“4.10.1 SQL 文の種類”によって修正される。 

SQL 文は,JIS X 3005 (ISO/IEC 9075)  規格群の各規格で規定する形式及び構文規則に適合する文字列と

する。ほとんどの

SQL 文は,SQL クライアントモジュール中で,実行のために準備し,実行することがで

きる。この場合には,

SQL クライアントモジュールが作成されるときにそれらが準備され,それらを含む

外部呼出し手続が呼び出されるときに実行される(“4.23 SQL クライアントモジュール”参照)。

ほとんどの

SQL 文は,その他の方法でも,実行のために準備し,実行することができる。それらの方法

は,次による。

 SQL 埋込みホストプログラム中。この場合には,SQL 埋込みホストプログラムが前処理されるときに,

それらが準備される(

4.24  埋込み構文”参照)。

  動的 SQL 文を用いることによって準備し,実行する方法(それらの動的 SQL 文自体は,SQL クライ

アントモジュール又は

SQL 埋込みホストプログラム中で実行される。“4.25  動的 SQL の概念”参照)。

  直接起動。この場合には,実行前に,それらが実効的に即時準備される(“4.26 SQL の直接起動”参

照)。

この規格では,少なくとも次の六つの方法で

SQL 文を分類する。

  永続オブジェクト,すなわち,SQL データ,SQL クライアントモジュール及びスキーマであっても,

SQL セション及び他の SQL 文のような過渡オブジェクトであっても,SQL オブジェクトに与える効

果による分類。

 SQL トランザクションを開始するかどうか,又は SQL トランザクションが動作中でないときに実行で

きるか若しくは実行しなければならないかどうかによる分類。

 SQL データを潜在的に読むか,又は SQL データを潜在的に修正するかどうかによる分類。

  埋め込んでもよいかどうかによる分類。

  動的に準備し,実行してもよいかどうかによる分類。


100

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

  直接実行してもよいかどうかによる分類。

この規格は,これらの分類項目のいずれかに入る追加の処理系定義の文を

SQL 処理系が提供することを

許す。それら文の分類は,処理系定義なので,この細分箇条でそれらの文についてこれ以上言及しない。

SQL 文の主要な種類は,次のとおりとする。

 SQL スキーマ文。

 SQL データ文。

 SQL トランザクション文。

 SQL 制御文。

 SQL コネクション文。

 SQL セション文。

 SQL 診断文。

  動的 SQL 文。

 SQL 埋込み例外宣言。

4.34.2  機能によって分類された SQL 

4.34.2.1  SQL スキーマ文

この細分箇条は,ISO/IEC 9075-4 の“4.10.2.1 SQL スキーマ文”によって修正される。 

この細分箇条は,ISO/IEC 9075-9 の“4.13.1.1 SQL スキーマ文”によって修正される。 

次の

SQL 文は,SQL スキーマ文とする。

  <スキーマ定義>。

  <スキーマ削除文>。

  <定義域定義>。

  <定義域削除文>。

  <表定義>。

  <表削除文>。

  <ビュー定義>。

  <ビュー削除文>。

  <表明定義>。

  <表明削除文>。

  <表変更文>。

  <定義域変更文>。

 <GRANT 権限文>。

 <REVOKE 文>。

  <文字集合定義>。

  <文字集合削除文>。

  <照合順定義>。

  <照合順削除文>。

  <文字変換定義>。

  <文字変換削除文>。

  <トリガ定義>。


101

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

  <トリガ削除文>。

  <利用者定義型定義>。

  <型変更文>。

  <データ型削除文>。

  <利用者定義順序付け定義>。

  <利用者定義順序付け削除文>。

  <利用者定義型変換定義>。

  <利用者定義型変換削除文>。

  <変換定義>。

  <変換変更文>。

  <変換削除文>。

  <スキーマルーチン>。

  <ルーチン変更文>。

  <ルーチン削除文>。

  <順序数生成子定義>。

  <順序数生成子変更文>。

  <順序数生成子削除文>。

  <役割定義>。

 <GRANT 役割文>。

  <役割削除文>。

4.34.2.2  SQL データ文

次の

SQL 文は,SQL データ文とする。

  <一時表宣言>。

  (<データ変更差分表>を含まない)<カーソル宣言>。

 <OPEN 文>。

 <CLOSE 文>。

 <FETCH 文>。

  (<データ変更差分表>を含まない)<SELECT 文:単一行>。

 <FREE

LOCATOR 文>。

 <HOLD

LOCATOR 文>。

  <動的カーソル宣言>。

  <拡張動的カーソル割当て文>。

  <受取りカーソル割当て文>。

  <動的 SELECT 文>。

  <動的 OPEN 文>。

  <動的 CLOSE 文>。

  <動的 FETCH 文>。

  (<データ変更差分表>を含まない)<直接 SELECT 文:複数行>。

  (<データ変更差分表>を含まない)<動的単一行 SELECT 文>。

  全ての SQL データ変更文。


102

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

4.34.2.3  SQL データ変更文

次の

SQL 文は,SQL データ変更文とする。

 <INSERT 文>。

 <DELETE 文:探索>。

 <DELETE 文:位置付け>。

 <UPDATE 文:探索>。

 <UPDATE 文:位置付け>。

 <MERGE 文>。

 <TRUNCATE

TABLE 文>。

  (<データ変更差分表>を含む)<カーソル宣言>。

  (<データ変更差分表>を含む)<SELECT 文:単一行>。

  <動的 DELETE 文:位置付け>。

  <準備可能動的 DELETE 文:位置付け>。

  <動的 UPDATE 文:位置付け>。

  <準備可能動的 UPDATE 文:位置付け>。

  (<データ変更差分表>を含む)<直接 SELECT 文:複数行>。

  (<データ変更差分表>を含む)<動的単一行 SELECT 文>。

4.34.2.4  SQL トランザクション文

次の

SQL 文は,SQL トランザクション文とする。

 <START

TRANSACTION 文>。

 <SET

TRANSACTION 文>。

  <SET CONSTRAINTS MODE 文>。

 <COMMIT 文>。

 <ROLLBACK 文>。

 <SAVEPOINT 文>。

 <RELEASE

SAVEPOINT 文>。

4.34.2.5  SQL コネクション文

次の

SQL 文は,SQL コネクション文とする。

 <CONNECT 文>。

 <SET

CONNECTION 文>。

 <DISCONNECT 文>。

4.34.2.6  SQL 制御文

この細分箇条は,ISO/IEC 9075-4 の“4.10.2.2 SQL 制御文”によって修正される。 

次の

SQL 文は,SQL 制御文とする。

 <CALL 文>。

 <RETURN 文>。

4.34.2.7  SQL セション文

この細分箇条は,ISO/IEC 9075-9 の“4.13.1.2 SQL セション文”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“4.6.1.1 SQL セション文”によって修正される。 

次の

SQL 文は,SQL セション文とする。


103

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

  <SET SESSION CHARACTERISTICS 文>。

  <セション利用者識別子設定文>。

 <SET

ROLE 文>。

  <地方時刻帯設定文>。

 <SET

CATALOG 文>。

 <SET

SCHEMA 文>。

 <SET

NAMES 文>。

 <SET

PATH 文>。

 <SET

TRANSFORM

GROUP 文>。

  <セション照合順設定文>。

4.34.2.8  SQL 診断文

この細分箇条は,ISO/IEC 9075-4 の“4.10.2.4 SQL 診断文”によって修正される。 

次の

SQL 文は,SQL 診断文とする。

 <GET

DIAGNOSTICS 文>。

4.34.2.9  動的 SQL 

次の

SQL 文は,動的 SQL 文とする。

 <EXECUTE

IMMEDIATE 文>。

 <ALLOCATE

DESCRIPTOR 文>。

 <DEALLOCATE

DESCRIPTOR 文>。

 <GET

DESCRIPTOR 文>。

 <SET

DESCRIPTOR 文>。

 <PREPARE 文>。

 <DEALLOCATE

PREPARE 文>。

  <入力 DESCRIBE 文>。

  <出力 DESCRIBE 文>。

 <EXECUTE 文>。

4.34.2.10

SQL 埋込み例外宣言

次の

SQL 文は,SQL 埋込み例外宣言とする。

  <埋込み例外宣言>。

4.34.3  SQL 文及び SQL データアクセス指示

幾つかの

SQL 文は,SQL データを潜在的に読む  (possibly read SQL-data) SQL 文,又は SQL データを潜

在的に修正する  (possibly modify SQL-data) SQL 文のいずれかとして分類してもよい。与えられた SQL 文は,

高々一つのそのような種類に属する。

次の

SQL 文は,SQL データを潜在的に読む。

 SQL データ変更文,<FREE LOCATOR 文>及び<HOLD LOCATOR 文>以外の SQL データ文。

  <問合せ式>を含む SQL 文で,かつ,SQL データを潜在的に修正する SQL 文ではない SQL 文。

 SQL データを潜在的に修正する当該ルーチンがなく,SQL データを潜在的に読む当該ルーチンが少な

くとも一つはある

<ルーチン呼出し>を含む SQL 文。

次の

SQL 文は,SQL データを潜在的に修正する。


104

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

 SQL スキーマ文。

 SQL データ変更文。

 SQL データを潜在的に修正する当該ルーチンが少なくとも一つはある<ルーチン呼出し>を含む SQL

文。

  <データ変更差分表>を含む SQL 文。

注記 82  先行する細別中の最後の項目は,この規格中では冗長であるが,この規格群の他の規格,特に,

4 部では,冗長ではない。

4.34.4  SQL 文及びトランザクション状態

この細分箇条は,ISO/IEC 9075-4 の“4.10.3 SQL 文及びトランザクション状態”によって修正される。 

次の

SQL 文は,トランザクション開始 SQL 文とする。すなわち,現行 SQL トランザクションがなく,

かつ,この種類の

SQL 文が実行されるならば,通常,その SQL 文の実行が進行する前に,SQL トランザ

クションが開始される。

  全ての SQL スキーマ文。

  次の SQL トランザクション文。

 <START

TRANSACTION 文>。

 <SAVEPOINT 文>。

 <COMMIT 文>。

 <ROLLBACK 文>。

  次の SQL データ文。

 <OPEN 文>。

 <CLOSE 文>。

 <FETCH 文>。

 <SELECT 文:単一行>。

 <INSERT 文>。

 <DELETE 文:探索>。

 <DELETE 文:位置付け>。

 <UPDATE 文:探索>。

 <UPDATE 文:位置付け>。

 <MERGE 文>。

 <TRUNCATE

TABLE 文>。

  <拡張動的カーソル割当て文>。

  <受取りカーソル割当て文>。

  <動的 OPEN 文>。

  <動的 CLOSE 文>。

  <動的 FETCH 文>。

  <直接 SELECT 文:複数行>。

  <動的単一行 SELECT 文>。

  <動的 DELETE 文:位置付け>。

  <準備可能動的 DELETE 文:位置付け>。

  <動的 UPDATE 文:位置付け>。


105

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

  <準備可能動的 UPDATE 文:位置付け>。

 <FREE

LOCATOR 文>。

 <HOLD

LOCATOR 文>。

  次の動的 SQL 文。

  <入力 DESCRIBE 文>。

  <出力 DESCRIBE 文>。

 <ALLOCATE

DESCRIPTOR 文>。

 <DEALLOCATE

DESCRIPTOR 文>。

 <GET

DESCRIPTOR 文>。

 <SET

DESCRIPTOR 文>。

 <DEALLOCATE

PREPARE 文>。

<START TRANSACTION 文>を除いて,トランザクション開始 SQL 文が実行されるとき,現行 SQL トラ

ンザクションが存在しないならば,どのトランザクション開始

SQL 文も,SQL トランザクションを暗に開

始する。その場合,

SQL トランザクションを開始する SQL 文の実行は,開始される SQL トランザクショ

ンに含まれる。

<START TRANSACTION 文>の場合には,SQL トランザクションの開始は,その SQL 文自

体の実行の一次的な効果とする。

<PREPARE 文>がトランザクションを開始するかどうかは,<PREPARE 文>が実行される時点の,その文

によって参照される

<SQL 文変数>の内容に依存する。<EXECUTE IMMEDIATE 文>がトランザクションを

開始するかどうかは,

<EXECUTE IMMEDIATE 文>が実行される時点の,その文によって参照される<SQL

文変数

>の内容に依存する。<EXECUTE 文>がトランザクションを開始するかどうかは,<EXECUTE 文>

によって参照される被準備文が準備された時点の,

<PREPARE 文>によって参照される<SQL 文変数>の内

容に依存する。それぞれの場合に,

<SQL 文変数>の内容が<START TRANSACTION 文>以外のトランザク

ション開始

SQL 文であったならば,<PREPARE 文>,<EXECUTE IMMEDIATE 文>又は<EXECUTE 文>は,

トランザクション開始文として扱われる。そうでなければ,それは,トランザクション開始文として扱わ

れない。

次の

SQL 文は,トランザクション開始 SQL 文ではない。すなわち,この種類の SQL 文が実行されても,

SQL トランザクションの存在又は非存在に影響を与えない。

 <START TRANSACTION 文>,<SAVEPOINT 文>,<COMMIT 文>及び<ROLLBACK 文>を除く全ての

SQL トランザクション文。

  全ての SQL コネクション文。

  全ての SQL セション文。

  全ての SQL 診断文。

 SQL 埋込み例外宣言。

  次の SQL データ文。

  <一時表宣言>。

  <カーソル宣言>。

  <動的カーソル宣言>。

  <動的 SELECT 文>。


106

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

次の

SQL 文は,潜在的なトランザクション開始 SQL 文とする。

 <RETURN 文>。

 <CALL 文>。

<SQL 制御文>が<問合せ式>の評価を引き起こし,現行 SQL トランザクションが存在しないならば,

<問合せ式>の評価の前に SQL トランザクションが開始される。

4.34.5  SQL 文の基本単位性及び文実行文脈

この細分箇条は,ISO/IEC 9075-4 の“4.10.4 SQL 文の基本単位性及び文実行文脈”によって修正される。 

幾つかの

SQL 制御文及び幾つかの SQL トランザクション文以外の全ての SQL 文の実行は,回復に関し

て基本単位とする。そのような

SQL 文を基本単位の SQL 文  (atomic SQL-statement)  と呼ぶ。基本単位の

SQL 文ではない SQL 文を基本単位でない SQL 文  (non-atomic SQL statement)  と呼ぶ。

次の

SQL 文は,基本単位でない SQL 文とする。

 <CALL 文>。

 <EXECUTE 文>。

 <EXECUTE

IMMEDIATE 文>。

 <COMMIT 文>。

 <RETURN 文>。

 <ROLLBACK 文>。

 <SAVEPOINT 文>。

その他の全ての

SQL 文は,基本単位の SQL 文とする。

文実行文脈は,

基本単位  (atomic)  か又は基本単位でない  (non-atomic)  かのいずれかとする。

基本単位でない

SQL 文の実行によって生じる文実行文脈は,基本単位でない実行文脈  (non-atomic 

execution context)  とする。

基本単位の

SQL 文の実行によって生じる文実行文脈は,基本単位の実行文脈  (atomic execution context)

とする。

一つの実行文脈内で,別の実行文脈が動作中になってもよい。この後者の実行文脈を,前者

より新しい

実行文脈  (more recent execution context)  という。実行文脈 EC より新しい実行文脈が存在しないならば,

EC は,最も新しい実行文脈  (most recent execution context)  という。

基本単位の実行文脈 AEC より新しい基本単位の実行文脈が存在しないならば,AEC は,最も新しい基

本単位の実行文脈  (most recent atomic execution context)  とする。

SQL トランザクションは,基本単位の実行文脈内で,陽に終了させることができない。基本単位の SQL

文の実行が不成功ならば,

SQL 文によってなされた SQL データ又はスキーマに対する変更は,取り消され

る。

4.34.6  埋込み可能な SQL 

この細分箇条は,ISO/IEC 9075-4 の“4.10.5  埋込み可能な SQL 文”によって修正される。 

次の

SQL 文は,SQL 埋込みホストプログラム中に埋込み可能とし,<SQL クライアントモジュール定義

>中の<外部呼出し手続>中の<SQL 手続文>であってもよい。

  全ての SQL スキーマ文。

  全ての SQL トランザクション文。


107

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

  全ての SQL コネクション文。

  全ての SQL セション文。

  全ての動的 SQL 文。

  全ての SQL 診断文。

  次の SQL データ文。

  <拡張動的カーソル割当て文>。

  <受取りカーソル割当て文>。

 <OPEN 文>。

  <動的 OPEN 文>。

 <CLOSE 文>。

  <動的 CLOSE 文>。

 <FETCH 文>。

  <動的 FETCH 文>。

 <SELECT 文:単一行>。

 <INSERT 文>。

 <DELETE 文:探索>。

 <DELETE 文:位置付け>。

  <動的 DELETE 文:位置付け>。

 <UPDATE 文:探索>。

 <UPDATE 文:位置付け>。

 <MERGE 文>。

 <TRUNCATE

TABLE 文>。

  <動的 UPDATE 文:位置付け>。

 <HOLD

LOCATOR 文>。

 <FREE

LOCATOR 文>。

  次の SQL 制御文。

 <CALL 文>。

 <RETURN 文>。

次の

SQL 文は,SQL 埋込みホストプログラム中に埋込み可能とし,<SQL クライアントモジュール定義

>中に現れてもよいが,<外部呼出し手続>中に現れてはならない。

  <一時表宣言>。

  <カーソル宣言>。

  <動的カーソル宣言>。

次の

SQL 文は,SQL 埋込みホストプログラム中に埋込み可能とするが,<SQL クライアントモジュール

定義

>中に現れてはならない。

 SQL 埋込み例外宣言。

したがって,次の

SQL データ文は,SQL 埋込みホストプログラム中に埋込み可能ではなく,<SQL クラ


108

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

イアントモジュール定義

>中に現れてはならないし,<SQL クライアントモジュール定義>中の<外部呼出し

手続

>中の<SQL 手続文>であってもならない。

  <動的 SELECT 文>。

  <動的単一行 SELECT 文>。

  <直接 SELECT 文:複数行>。

  <準備可能動的 DELETE 文:位置付け>。

  <準備可能動的 UPDATE 文:位置付け>。

4.34.7  準備可能及び即時実行可能な SQL 

この細分箇条は,ISO/IEC 9075-4 の“4.10.6  準備可能及び即時実行可能な SQL 文”によって修正される。 

次の

SQL 文は,準備可能とする。

  全ての SQL スキーマ文。

  全ての SQL トランザクション文。

  全ての SQL セション文。

  次の SQL データ文。

 <DELETE 文:探索>。

  <動的 SELECT 文>。

  <動的単一行 SELECT 文>。

 <INSERT 文>。

 <UPDATE 文:探索>。

 <TRUNCATE

TABLE 文>。

 <MERGE 文>。

  <準備可能動的 DELETE 文:位置付け>。

  <準備可能動的 UPDATE 文:位置付け>。

  <準備可能処理系定義文>。

 <HOLD

LOCATOR 文>。

 <FREE

LOCATOR 文>。

  次の SQL 制御文。

 <CALL 文>。

したがって,次の

SQL 文は,準備可能でない。

  全ての SQL コネクション文。

  全ての動的 SQL 文。

  全ての SQL 診断文。

 SQL 埋込み例外宣言。

  次の SQL データ文。

  <拡張動的カーソル割当て文>。

  <受取りカーソル割当て文>。

 <OPEN 文>。

  <動的 OPEN 文>。

 <CLOSE 文>。


109

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

  <動的 CLOSE 文>。

 <FETCH 文>。

  <動的 FETCH 文>。

 <SELECT 文:単一行>。

 <DELETE 文:位置付け>。

  <動的 DELETE 文:位置付け>。

 <UPDATE 文:位置付け>。

  <動的 UPDATE 文:位置付け>。

  <直接 SELECT 文:複数行>。

  <一時表宣言>。

  <カーソル宣言>。

  <動的カーソル宣言>。

  次の SQL 制御文。

 <RETURN 文>。

次の文を除いて,準備可能などの

SQL 文も,即時実行することができる。

  <動的 SELECT 文>。

  <動的単一行 SELECT 文>。

4.34.8  直接実行可能な SQL 

この細分箇条は,ISO/IEC 9075-4 の“4.10.7  直接実行可能な SQL 文”によって修正される。 

次の

SQL 文は,直接実行してもよい。

  全ての SQL スキーマ文。

  全ての SQL トランザクション文。

  全ての SQL コネクション文。

  全ての SQL セション文。

  次の SQL データ文。

  <一時表宣言>。

  <直接 SELECT 文:複数行>。

 <INSERT 文>。

 <DELETE 文:探索>。

 <UPDATE 文:探索>。

 <TRUNCATE

TABLE 文>。

 <MERGE 文>。

  次の SQL 制御文。

 <CALL 文>。

 <RETURN 文>。

したがって,次の

SQL 文は,直接実行してはならない。

  全ての動的 SQL 文。

  全ての SQL 診断文。


110

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

 SQL 埋込み例外宣言。

  次の SQL データ文。

  <カーソル宣言>。

  <動的カーソル宣言>。

  <拡張動的カーソル割当て文>。

  <受取りカーソル割当て文>。

 <OPEN 文>。

  <動的 OPEN 文>。

 <CLOSE 文>。

  <動的 CLOSE 文>。

 <FETCH 文>。

  <動的 FETCH 文>。

 <SELECT 文:単一行>。

  <動的 SELECT 文>。

  <動的単一行 SELECT 文>。

 <DELETE 文:位置付け>。

  <動的 DELETE 文:位置付け>。

  <準備可能動的 DELETE 文:位置付け>。

 <UPDATE 文:位置付け>。

  <動的 UPDATE 文:位置付け>。

  <準備可能動的 UPDATE 文:位置付け>。

 <FREE

LOCATOR 文>。

 <HOLD

LOCATOR 文>。

4.35  基本安全保護モデル

4.35.1  認可識別子

認可識別子は,権限の集合を識別する。認可識別子は,利用者識別子又は役割名のいずれかとする。利

用者識別子は,

SQL 処理系の利用者を表現する。オペレーティングシステム利用者への利用者識別子のど

んな対応付けも,処理系定義とする。役割名は,役割を表現する。

4.35.1.1  SQL セション認可識別子

SQL セションは,SQL セション利用者識別子  (SQL-session user identifier)  と呼ばれる利用者識別子をも

つ。

SQL セションが開始されるとき,そのセションが<CONNECT 文>を用いて開始されない限り,SQL セ

ション利用者識別子は,処理系定義の方法で決定される。

SQL セション利用者識別子の値は,決してナル

値であってはならない。

SQL セション利用者識別子は,SESSION_USER を用いることによって決定するこ

とができる。

SQL セション文脈は,時刻とともに変化するセルの並びを含み,そのセルの並びは,認可スタック

(authorization stack)  として知られ,その認可スタックの各セルは,利用者識別子,役割名,又はその両方

のいずれかを含む。このスタックは,“後入れ先出し方式

 (last-in, first-out)”の規律を用いて維持され,最

上部セルだけが実効的に可視となる。

SQL セションが開始されるとき,<CONNECT 文>が陽に又は暗に実

行されることによって,SQL セション利用者識別子  (SQL-session user identifier)  として知られている利用


111

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

者識別子だけを含む一つのセルで認可スタックが初期化される。SQL セション役割名  (SQL-session role 

name)  として知られている役割名は,その後に追加されてもよい。

外部呼出し手続,

SQL 呼出しルーチン,被トリガ動作,被準備文又は直接実行される文を とする。E

が呼出されるとき,最上部セルの写しが認可スタックに押し込まれる。の呼出しが定義者の権利の下に

あるならば,最上部セルの内容は,の所有者の認可識別子で置き換えられる。の実行が完了すると,

最上部セルが取り除かれる。

現行

SQL セション文脈の認可スタック中の最上部セルの内容は,各 SQL 文の実行のための権限を決定

する。このセル中に,利用者識別子があるならば,その利用者識別子は,

現行利用者識別子  (current user 

identifier)  として知られ,役割名があるならば,その役割名は,現行役割名  (current role name)  として知ら

れている。それらは,それぞれ,

CURRENT_USER 及び CURRENT_ROLE を用いて決定されてもよい。

与えられた時点に,現行利用者識別子又は現行役割名が存在しなくてもよいが,少なくとも一方又は他

方が常に存在する。

注記 83 PUBLIC に付与された権限は,SQL 環境中の全ての<認可識別子>に対して利用可能である。

<セション利用者識別子設定文>は,現行利用者識別子及び SQL セション利用者識別子の値を変更する。

<SET ROLE 文>は,現行役割名の値を変更する。

現行認可識別子  (current authorization identifier)  という用語は,認可スタックの最上部セル中の認可識別

子を示す。

4.35.1.2  SQL クライアントモジュール認可識別子

<SQL クライアントモジュール定義>が<モジュール認可識別子> MAI を含むならば,MAI は,対応する

SQL クライアントモジュール の所有者とし,中の各外部呼出し手続の実行のために現行認可識別子

として用いられる。が所有者をもたないならば,中の各外部呼出し手続の実行のために,SQL セショ

ンの現行利用者識別子及び現行役割名が,それぞれ,現行利用者識別子及び現行役割名として用いられる。

4.35.1.3  SQL スキーマ認可識別子

どのスキーマも,

<スキーマ定義>  SD からスキーマの作成時点に決定される所有者をもつ。その所有者

は,次による。

場合:

  SD が<スキーマ認可識別子> SAI を単純に含むならば,SAI とする。

  SD が<モジュール認可識別子> MAI を含む<SQL クライアントモジュール定義>に単純に含まれるなら

ば,MAI とする。

  そうでなければ,SQL セション利用者識別子とする。

4.35.2  権限

この細分箇条は,ISO/IEC 9075-4 の“4.11.1  権限”によって修正される。 

この細分箇条は,ISO/IEC 9075-9 の“4.14.1  権限”によって修正される。 

この細分箇条は,ISO/IEC 9075-13 の“4.10  権限”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“4.7.1  権限”によって修正される。 

04

09

13

14

  権限は,指定されたオブジェクトに対して,指定された<認可識別子>によって実行されるべき,

与えられた種類の

<動作>を認可する。そのオブジェクトは,次のうちのいずれかとする。

  実表。

  ビュー。


112

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

  ビュー構成要素。

  列。

  定義域。

  文字集合。

  照合順。

  文字変換。

  利用者定義型。

  表/メソッド対。

 SQL 呼出しルーチン。

  順序数生成子。

各権限は,

権限記述子  (privilege descriptor)  によって表現される。権限記述子は,次の項目を含む。

  権限が付与されるオブジェクトの識別。

  権限の権限付与者の<認可識別子>。

  権限の権限受領者の<認可識別子>。

  権限が許す<動作>の識別。

  権限が付与可能かどうかを示す標識。

  権限に WITH HIERARCHY OPTION が指定されたかどうかを示す標識。

指定することができる

<動作>は,次の動作とする。

 INSERT

 INSERT(<列名リスト>)

 UPDATE

 UPDATE(<列名リスト>)

 DELETE

 SELECT

 SELECT(<列名リスト>)

 SELECT(<権限メソッドリスト>)

 REFERENCES

 REFERENCES(<列名リスト>)

 USAGE

 UNDER

 TRIGGER

 EXECUTE

INSERT,UPDATE,DELETE,SELECT,TRIGGER 又は REFERENCES の<動作>をもつ権限記述子は,

表権限記述子  (table privilege descriptor)  と呼ばれ,その権限記述子によって識別される表又はビュー構成

要素に関する権限の存在を識別する。表権限記述子がビュー構成要素を識別するならば,その権限記述子

ビュー構成要素表権限記述子  (view component table previlege descriptor)  と呼ぶ。

SELECT(<列名リスト>),INSERT(<列名リスト>),UPDATE(<列名リスト>)又は REFERENCES(<

列名リスト

>)の<動作>をもつ権限記述子は,列権限記述子  (column privilege descriptor)  と呼ばれ,その権


113

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

限記述子によって識別される表又はビュー構成要素の列に関する権限の存在を識別する。列権限記述子が

ビュー構成要素を識別するならば,その権限記述子を

ビュー構成要素列権限記述子  (view component column 

previlege descriptor)  と呼ぶ。

SELECT(<権限メソッドリスト>)の<動作>をもつ権限記述子は,表/メソッド権限記述子  (table/method 

privilege descriptor)  と呼ばれ,その権限記述子によって識別される表の構造型のメソッドに関する権限の

存在を識別する。

表権限記述子は,(

<動作>が DELETE でない限り,)<動作>によって識別される権限が,その表にその後

追加される全ての列に関して,その権限付与者によって,その権限受領者に自動的に付与されることを指

定する。

09

13

14

 USAGE の<動作>をもつ権限記述子は,USAGE 権限記述子  (usage privilege descriptor)  と呼ばれ,

次の種類のいずれかのオブジェクトに関する権限を記述する。

  定義域。

  利用者定義型。

  文字集合。

  照合順。

  文字変換。

  順序数生成子。

UNDER の<動作>をもつ権限記述子は,UNDER 権限記述子  (under privilege descriptor)  と呼ばれ,その

権限記述子によって識別される構造型に関する権限の存在を識別する。

EXECUTE の<動作>をもつ権限記述子は,EXECUTE 権限記述子  (execute privilege descriptor)  と呼ばれ,

その権限記述子によって識別される

SQL 呼出しルーチンに関する権限の存在を識別する。

付与可能な権限は,

<GRANT 権限文>によって付与されてもよい権限とする。<GRANT 権限文>の WITH

GRANT OPTION は,権限の受領者を識別する<認可識別子>が(権限付与者として振る舞って,)その権限

を他の利用者に付与してもよいかどうかを指定する。

オブジェクトの所有者のための権限を表現する権限記述子は,特別な付与者の値“

_SYSTEM”をもつ。

この値は,オブジェクトの所有者に適用する全ての権限に対して情報スキーマ中に反映される。

注記 84  情報スキーマは,[ISO9075-11]  で定義している。

与えられたスキーマ

<利用者識別子>又はスキーマ<役割名>によって所有されるスキーマは,別の<認可

識別子

>(権限受領者)に付与された権限を記述する権限記述子を含んでもよい。付与された権限は,現行

スキーマ中で定義されたオブジェクトに適用される。

直接

SQL 文は,常に,呼出し元の権利の下で実行される。

ビュー権限依存記述子  (view privilege dependency descriptor)  は,支援権限記述子  (supporting privilege 

descriptor)  及び従属権限記述子  (dependent privilege descriptor)  と呼ばれる二つの権限記述子を含む記述子

とする。ビュー権限依存記述子は,ビュー又はビューの列の

INSERT,UPDATE 又は DELETE 権限が別の

権限に直接依存していることを記録する。

4.35.3  役割

役割名によって識別される役割は,利用者のように,権限及び別の役割の潜在的な権限受領者及び権限

付与者とする。さらに,利用者のように,役割は,スキーマ及びその他のオブジェクトを所有することも

できる。


114

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

役割は,

<役割定義>を実行することによって作成され,<役割削除文>を実行することによって破壊され

る。

役割は,

<GRANT 役割文>を実行することによって一つ以上の認可識別子に付与され,このようにして,

その役割の全ての権限を権限受領者に与えることになる。認可識別子 に役割を付与することを(に対

する)

役割認可  (role authorization)  と呼ぶ。

役割名 をもつ役割の権限は,権限受領者が の権限の集合と,に対する役割認可によって定義され

る役割名の権限の集合との和集合とする。役割認可の循環は,禁止されている。

役割 に対する<GRANT 役割文>の WITH ADMIN OPTION は,各権限受領者が別の権限受領者に 

付与してもよいこと,別の権限受領者から を剝奪してもよいこと,及び を破壊してもよいことを指定

する。

各役割認可は,

役割認可記述子  (role authorization descriptor)  によって記述される。役割認可記述子は,

次の項目を含む。

  役割の役割名。

  権限付与者の認可識別子。

  権限受領者の認可識別子。

  役割認可が付与可能かどうかを示す標識。

4.35.4  安全保護モデル定義

役割名が で,かつ,権限受領者が PUBLIC 若しくは認可識別子 A,又は に適用可能な役割である役

割認可記述子が存在するならば,役割 は,認可識別子 に適用可能  (applicable for)  とする。

権限 の権限受領者が PUBLIC 若しくは認可識別子 A,又は に適用可能な役割ならば,権限 は,認

可識別子 に適用可能  とする。

注記 85  “に適用可能 (applicable for)”は,永続オブジェクト間の永続的な関係である。したがって,そ

れは,どの

SQL セションにも全く依存しない。

認可識別子が現行利用者識別子,現行役割名,又は現行役割名に適用可能な役割名ならば,その認可識

別子が

与えられた  (enabled)  とする。

与えられた認可識別子に権限 が適用可能ならば,権限 は,現行  (current)  とする。

注記 86  “与えられた”及び“現行”は,現行 SQL セション文脈の(過渡)要素に適用される。

4.36  SQL トランザクション

4.36.1  SQL トランザクションの一般記述

SQL トランザクション  (SQL-transaction) (トランザクション)は,回復に関しての基本単位である SQL

文の実行の並びとする。これらの操作は,一つ以上の翻訳単位及び

SQL クライアントモジュールによって

実行される。

SQL トランザクションを構成する操作は,SQL の直接起動によって実行してもよい。

SQL スキーマ文の実行と同じ SQL トランザクション内に,SQL データ文の実行が存在してもよいかど

うかは,処理系定義とする。同じ

SQL トランザクション内に存在してもよいならば,どの開いているカー

ソル又は遅延制約に与える効果も,処理系定義とする。処理系定義の制限,要件及び条件を追加してもよ

い。そのようないずれかの制限,要件又は条件に違反するならば,処理系定義の例外条件,又は処理系定

義のサブクラスコードをもつ終了条件

  警告  (warning)  が引き起こされる。

SQL スキーマ文の動的実行と同じ SQL トランザクション内に,<SQL 動的データ文>の動的実行が存在

してもよいかどうかは,処理系定義とする。同じ

SQL トランザクション内に存在してもよいならば,どの

開いているカーソル,準備された動的文,又は遅延制約に与える効果も,処理系定義とする。処理系定義


115

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

の制限,要件及び条件を追加してもよい。そのようないずれかの制限,要件又は条件に違反するならば,

処理系定義の例外条件,又は処理系定義のサブクラスコードをもつ終了条件

  警告  が引き起こされる。

SQL トランザクションの SQL 文を実行する各 SQL クライアントモジュールは,その SQL トランザクシ

ョンに関連付けられる。

SQL トランザクションの SQL 文を実行する SQL の各直接起動は,その SQL トラ

ンザクションに関連付けられる。現在動作中の

SQL トランザクションが存在しないとき,トランザクショ

ン開始

<直接 SQL 文>を実行することになる SQL の直接起動によって,SQL トランザクションが開始され

る。現在動作中の

SQL トランザクションがなく,トランザクション開始  (transaction-initiating) SQL 文を実

行することになる

<外部呼出し手続>が呼び出されるとき,SQL トランザクションが開始される。SQL トラ

ンザクションは,

<COMMIT 文>又は<ROLLBACK 文>によって終了する。SQL トランザクションが

<COMMIT 文>の実行の成功によって終了するならば,その SQL トランザクションによってなされた SQL

データ又はスキーマに対する全ての変更が永続化され,全ての並行

SQL トランザクション及び後続の SQL

トランザクションに対してアクセス可能となる。

SQL トランザクションが<ROLLBACK 文>によって終了

するか又は

<COMMIT 文>の実行の失敗によって終了するならば,その SQL トランザクションによってな

された

SQL データ又はスキーマに対する全ての変更は,取り消される。コミットされた変更を取り消すこ

とはできない。

<COMMIT 文>の実行が試みられるが,幾つかの例外条件が引き起こされるならば,その

SQL トランザクションによってなされた SQL データ又はスキーマに対する変更が取り消されるか又は永

続化されるかは,不定とする。

4.36.2  保存点

SQL トランザクションは,保存点 (savepoint) を用いて,部分的にロールバックしてもよい。<SAVEPOINT

>が実行されるときに,保存点及びその<保存点名>が SQL トランザクション内に確立される。

SQL トランザクションは,一つ以上の保存点水準  (savepoint level)  をもち,そのうちのただ一つの保存

点水準は,

現行保存点水準  (current savepoint level)  とする。新しい保存点水準  (new savepoint levelNSL 

確立されるとき,現行保存点水準 CSL が現行ではなくなり,NSL が現行になるというように,SQL トラ

ンザクションの保存点水準は,入れ子になる。NSL が破壊され  (destroyed)  るとき,CSL が再び現行にな

る。

動作中の

SQL トランザクションが存在しないときでも,SQL セション SS 中に保存点水準が存在し,SQL

トランザクションが SS 中で開始されるとき,この保存点水準が現行の保存点水準のまま残る。

保存点 SP は,ただ一つの保存点水準,すなわち,SP が確立されるときに現行である保存点水準に存在

する。

<ROLLBACK 文>が保存点 SS を参照するならば,SS の確立に後続する SQL データ又はスキーマに対す

る全ての変更が取り消され,SS が確立された後に確立された全ての保存点が破壊される。

注記 87 SQL トランザクションは,SS を確立した<SAVEPOINT 文>の実行直後の状態に実効的に回復さ

れる。

保存点水準 SPL に存在する保存点は,SPL が破壊されるときに破壊される。現行保存点水準中の保存点

SS の保存点名を指定する<RELEASE SAVEPOINT 文>が実行されるとき,SS,及び SS が確立された後に確

立された全ての保存点が破壊される。保存点は,その名前を指定する

<SAVEPOINT 文>を実行することに

よって,保存点水準内で同じ名前をもつ別の保存点に置き換えてもよい。

診断領域の内容,

SQL 記述子領域の内容,及び被準備文の状態に,<保存点指定子>を参照する

<ROLLBACK 文>が影響を与えるかどうか,又はどのように影響を与えるかは,処理系定義とする。

4.36.3  SQL トランザクションの特性


116

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

この細分箇条は,ISO/IEC 9075-9 の“4.15.1 SQL トランザクションの特性”によって修正される。 

SQL トランザクションは,各整合性制約に対して,制約モード  (constraint mode)  をもつ。SQL トランザ

クション中の整合性制約に対する制約モードは,“4.18  整合性制約”で規定する。

09

 SQL トランザクションは,読込み専用  (read-only)  又は読み書き可能  (read-write)  のいずれかのトラン

ザクションアクセスモード  (transaction access mode)  をもつ。トランザクションアクセスモードは,SQL

トランザクションの開始前に

<SET TRANSACTION 文>によって陽に設定してもよいし,SQL トランザクシ

ョンを開始する

<START TRANSACTION 文>を用いて陽に設定してもよい。そうでなければ,トランザク

ションアクセスモードには,各

SQL トランザクションが始まる前に,SQL セションの既定トランザクショ

ンアクセスモードが暗に設定される。

<SET SESSION CHARACTERISTICS 文>によって SQL セションの既

定トランザクションアクセスモードが設定されていなかったならば,その

SQL セションの既定トランザク

ションアクセスモードは,

読み書き可能  とする。読込み専用  という用語は,ビュー表及び永続実表に対

してだけ適用する。

SQL トランザクションは,条件領域限界  (condition area limit)  をもち,その条件領域限界は,この SQL

トランザクション中で一つの

SQL 文を実行している間に診断領域中に格納できる条件の最大数を指定す

る正の整数とする。

SQL トランザクションは,処理系定義の時刻印型の値であるトランザクション時刻印  (transaction 

timestamp)  をもち,その値は,この SQL トランザクション中の SQL データ変更文の実行によって修正さ

れる行があるならば,それらの行のシステム時刻期間開始列及びシステム時刻期間終了列の値を設定する

ために用いる。トランザクション時刻印は,そのトランザクション中でいずれかの

SQL データ変更文が実

行される前に

SQL 処理系によって設定され,一度設定されると,その SQL トランザクションの間,変更

されないでそのままとする。

異なる

SQL エージェントによって開始され,同じ SQL データ又はスキーマをアクセスし,かつ,時刻

で重なり合う

SQL トランザクションは,並行 SQL トランザクション  (concurrent SQL-transaction)  とする。

4.36.4  SQL トランザクションの隔離性水準

SQL トランザクションは,READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 又は

SERIALIZABLE のトランザクション隔離性水準  (transaction isolation level)  をもつ。SQL トランザクショ

ンのトランザクション隔離性水準は,その

SQL トランザクション中の SQL データ又はスキーマに関する

操作が,並行

SQL トランザクション中の SQL データ又はスキーマに関する操作に,影響を受ける度合い

及び影響を与える可能性のある度合いを定義する。

SQL セション内の前の SQL トランザクションからいず

れかのカーソルが開いている状態で保持されるときには,その

SQL トランザクションのトランザクション

隔離性水準は,既定で,前の

SQL トランザクションのトランザクション隔離性水準とする。開いている状

態で保持されているカーソルが存在しないか,又はこれが

SQL セション内の最初の SQL トランザクショ

ンならば,トランザクション隔離性水準は,既定で

SERIALIZABLE とする。トランザクション隔離性水準

は,

SQL トランザクションの開始前の<SET TRANSACTION 文>によって,又は SQL トランザクションを

開始する

<START TRANSACTION 文>を用いることによって,陽に設定することができる。トランザクシ

ョン隔離性水準が陽に設定されないならば,各

SQL トランザクションが始まる前に,その SQL セション

の既定トランザクション隔離性水準が暗に設定される。

<SET SESSION CHARACTERISTICS 文>によって

SQL セションの既定トランザクション隔離性水準が設定されていなかったならば,SQL セションの既定ト

ランザクション隔離性水準は,

SERIALIZABLE とする。

SQL トランザクションの開始後及びその終了前の<SET TRANSACTION 文>の実行は,禁止されている。


117

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

SQL トランザクションの開始前に<SET TRANSACTION 文>を実行して,その<SET TRANSACTION 文>の

実行後に開始される単一の

SQL トランザクションのトランザクションアクセスモード,トランザクション

隔離性水準及び条件領域限界を設定する。

SQL トランザクションの開始前に複数の<SET TRANSACTION

>が実行されるならば,そのような最後の文が,その SQL トランザクションに対して実効的な設定を行

う文とする。それらの動作は,累積しない。

トランザクション隔離性水準

SERIALIZABLE の並行 SQL トランザクションの実行は,直列化可能

(serializable)  であることが保証される。直列化可能な実行とは,並行実行中の SQL トランザクションの操

作の実行によって,これらの同じ

SQL トランザクションの,ある直列実行と同じ効果を生じる実行と定義

する。直列実行とは,次の

SQL トランザクションが開始する前に各 SQL トランザクションが完了する実

行とする。

トランザクション隔離性水準は,並行

SQL トランザクションの実行中に発生し得る現象の種類を指定す

る。次の現象があり得る。

1)  P1

“汚れのある読出し

 (Dirty read)”]:SQL トランザクション T1 が行を修正する。その後,T1 

COMMIT を実行する前に,SQL トランザクション T2 がその行を読む。その後,T1 が ROLLBACK

を実行するならば,T2 は,コミットされておらず,したがって,存在しなかったとみなされるかも

しれない行を読んだことになる。

2)  P2

“繰返し不可能読出し

 (Non-repeatable read)”]

SQL トランザクション T1 が行を読む。その後,

SQL トランザクション T2 がその行を修正又は削除し,COMMIT を実行する。その後,T1 がその行

を再び読もうとするならば,修正された値を受け取るか又はその行が削除されたことを知るかもし

れない。

3)  P3

“幻

 (Phantom)”]:ある<探索条件>を満たす行の集合 を SQL トランザクション T1 が読む。

その後,

SQL トランザクション T1 が用いた<探索条件>を満たす一つ以上の行を生成する SQL 文を,

SQL トランザクション T2 が実行する。その後,SQL トランザクション T1 が同じ<探索条件>で最

初の読込みを繰り返すならば,異なる行の集まりを得ることになる。

四つのトランザクション隔離性水準は,各

SQL トランザクションが完全に実行されるか又は全く実行さ

れないかのいずれかであること,及びどの更新も失われないことを保証する。トランザクション隔離性水

準は,現象 P1P2 及び P3 に関して異なる。表 8“SQL トランザクション隔離性水準及び三つの現象”は,

与えられたトランザクション隔離性水準で,発生し得る現象,及び発生し得ない現象を規定する。

03

  表 8SQL トランザクション隔離性水準及び三つの現象

水準 

P1

P2

P3

READ UNCOMMITTED

発生し得る

発生し得る

発生し得る

READ COMMITTED

発生し得ない

発生し得る

発生し得る

REPEATABLE READ

発生し得ない

発生し得ない

発生し得る

SERIALIZABLE

発生し得ない

発生し得ない

発生し得ない

注記 88  トランザクション隔離性水準 SERIALIZABLE で実行する SQL トランザクションに

対するこれらの現象の排除は,そのようなトランザクションが直列化可能であるこ
との要件の結果である。

SQL セション中の SQL トランザクションによってなされる SQL データ又はスキーマの変更は,同じ SQL

セション中のその

SQL トランザクション,及びトランザクション隔離性水準 READ UNCOMMITTED の別


118

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

SQL トランザクション又は別の SQL セション中の同じ SQL トランザクションによって知られてもよい

が,前者の

SQL トランザクションが<COMMIT 文>によって終了するまでは,トランザクション隔離性水

READ COMMITTED,REPEATABLE READ 又は SERIALIZABLE の別の SQL トランザクションによっ

て知られることはあり得ない。

SQL トランザクションのトランザクション隔離性水準にかかわらず,SQL 文の実行のために行われるス

キーマ定義の暗黙の読込み,整合性制約の検査,及び参照制約に関連付けられた参照動作の実行の間に,

現象 P1P2 及び P3 が発生してはならない。暗に読み込まれるスキーマ定義は,処理系依存とする。これ

は,その

SQL トランザクションのトランザクション隔離性水準で実行され,陽に指定される,情報スキー

マ中の表からの行の読込みには,影響を与えない。

注記 89  情報スキーマは,[ISO9075-11]  で定義している。

4.36.5  暗黙ロールバック

二つ以上の並行

SQL トランザクションの直列化可能性を保証できないことを SQL 処理系が検知したと

き,

SQL 処理系によって<ROLLBACK 文>の実行が暗に開始されてもよい。この誤りが発生すると,例外

条件:

トランザクションロールバック  (transaction rollback)  -  直列化失敗  (serialization failure)  が引き起

こされる。

回復不可能な誤りを

SQL 処理系が検知したときに,SQL 処理系によって<ROLLBACK 文>の実行が暗に

開始されてもよい。このような誤りが発生すると,処理系定義のサブクラスコードをもつ例外条件:

トラ

ンザクションロールバック  が引き起こされる。

現行

SQL コネクションの喪失を SQL 処理系が検知したとき,<ROLLBACK 文>の実行が暗に開始されて

もよい(

4.37 SQL コネクション”参照)。

4.36.6  SQL トランザクション中の SQL 文の効果

SQL トランザクション内での SQL 文の実行は,その SQL 文の一般規則,“11.8 <参照制約定義>”の一般

規則,

11.49  <トリガ定義>”の一般規則,及び“11.60 <SQL 呼出しルーチン>”の一般規則で規定する効

果以外には,

SQL データ又はスキーマにどんな効果も与えない。直列化可能な実行に加えて,これは,次

の効果を除いて,トランザクション隔離性水準

SERIALIZABLE の SQL トランザクション内で,全ての読

出し操作が繰返し可能であることを意味する。

1)  その SQL トランザクション自体によって陽になされた SQL データ又はスキーマの変更及びその変

更内容による効果。

2)  外部呼出し手続に与えられる SQL パラメタ値の違いによる効果。

3) CURRENT_DATE 及び CURRENT_USER のような時刻とともに変化するシステム変数の参照による

効果。

4.36.7  全体トランザクション

幾つかの環境(例えば,遠隔データベースアクセス)では,

SQL トランザクションは,SQL エージェン

ト以外のエージェントによって制御される全体トランザクションの部分であり得る。全体トランザクショ

ンは,異なる資源管理系を含んでもよく,

SQL 処理系は,単にそのような管理系の一つにすぎない。その

ような環境では,全体トランザクションは,その別エージェントによって終了させられなければならない。

言い換えると,その別エージェントは,全体トランザクションの順序立った終了を調整するために,

SQL

(の

COMMIT 又は ROLLBACK)とは異なるインタフェースによって SQL 処理系と交信してもよい。SQL

トランザクションが

SQL エージェント以外のエージェントによって制御される全体トランザクションの

部分であり,

SQL 処理系によって<ROLLBACK 文>が暗に開始されるならば,SQL 処理系は,その全体ト


119

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

ランザクションを終了させるために,その別エージェントと交信する。そのようなエージェントと

SQL 処

理系との間のインタフェースの規定は,この規格の適用範囲外とする。しかし,

SQL トランザクションの

意味は,次に定義する意味と同じであることに注意することが重要である。

 SQL エージェント以外のエージェントが,SQL 処理系に対して,SQL トランザクションをロールバッ

クすることを要求すると,

17.8 <ROLLBACK 文>”の一般規則が実行される。

  そのようなエージェントが SQL 処理系に対して,SQL トランザクションをコミットすることを要求す

ると,

17.7 <COMMIT 文>”の一般規則が実行される。全体トランザクションの順序立った終了を保

証するために,このコミット操作は,適用業務から見えない幾つかのフェーズで処理してもよい。こ

のとき,“17.7 <COMMIT 文>”の全ての一般規則が単一のフェーズで実行される必要はない。

しかし,そのような環境中でも,

SQL エージェントは,SQL トランザクションモデルに特有な[読込み

専用  (read-only)  又は読み書き可能  (read-write),トランザクション隔離性水準及び制約モードのような]

特性を設定するために,

SQL サーバと直接交信する。

二つ以上の

SQL サーバに影響を与える SQL トランザクションが提供されるかどうかは,処理系定義と

する。そのような

SQL トランザクションが提供されるならば,単一の SQL サーバに影響を与える各 SQL

トランザクションの部分を,

分岐トランザクション  (branch transaction),又は SQL トランザクションの分

岐と呼ぶ。そのような

SQL トランザクションが提供されるならば,それらは,一般的に,全て同じ特性(制

約モードだけでなく,トランザクションアクセスモード,条件領域限界及びトランザクション隔離性水準)

をもつ。しかし,

SET LOCAL TRANSACTION 文を用いて,一つの SQL サーバでそのような SQL トラン

ザクションの幾つかの特性を変更することができる。

SET LOCAL TRANSACTION 文がトランザクション

開始

SQL 文の前に SQL サーバで実行されるならば,その SQL サーバで SQL トランザクションのその分岐

(branch)  の特性を設定してもよい。

SQL トランザクションの分岐の特性は,その SQL トランザクションの特性によって,全体的に制限され

る。

 SQL トランザクションが読み書き可能ならば,その SQL トランザクションの分岐は,読み書き可能又

は読込み専用であってもよい。

SQL トランザクションが読込み専用ならば,その SQL トランザクショ

ンの分岐は,読込み専用でなければならない。

 SQL トランザクションが READ UNCOMMITTED のトランザクション隔離性水準をもつならば,その

SQL トランザクションの分岐は,READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ

又は

SERIALIZABLE のトランザクション隔離性水準をもってもよい。

SQL トランザクションが READ COMMITTED のトランザクション隔離性水準をもつならば,その

SQL トランザクションの分岐は,READ COMMITTED,REPEATABLE READ 又は SERIALIZABLE の

トランザクション隔離性水準をもたなければならない。

SQL トランザクションが REPEATABLE READ のトランザクション隔離性水準をもつならば,その

SQL トランザクションの分岐は,REPEATABLE READ 又は SERIALIZABLE のトランザクション隔離

性水準をもたなければならない。

SQL トランザクションが SERIALIZABLE のトランザクション隔離性水準をもつならば,その SQL

トランザクションの分岐は,

SERIALIZABLE のトランザクション隔離性水準をもたなければならない。

 SQL トランザクションの分岐の条件領域限界は,その SQL トランザクションの条件領域限界と常に同

じとする。

SET LOCAL TRANSACTION は,条件領域限界を指定してはならない。


120

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

全体トランザクションの部分でない

SQL トランザクションは,<COMMIT 文>及び<ROLLBACK 文>の

実行によって終了する。それらの文が

AND CHAIN を指定するならば,それらは,さらに,各整合性制約

の制約モードがその既定のモード[

遅延  (deferred)  又は即時  (immediate)]に戻ることを除いて,終了した

ばかりの

SQL トランザクションと同じ特性をもつ新しい SQL トランザクションを開始する。

4.37  SQL コネクション

SQL コネクション  (SQL-connection)  は,SQL クライアントと SQL サーバとの間のアソシエーションと

する。

SQL コネクションは,<SQL サーバ名>を用いて目的の SQL サーバを識別する<CONNECT 文>によ

って確立され,名前付けられてもよい。

<コネクション名>は,値が<識別子>である<単純値指定>として指

定される。二つの

<コネクション名>は,それらの値の先行する<空白>及び後続の<空白>を除いた値が,

5.2 <トークン>及び<分離符号>”中の<識別子>の比較に対する規則に従って等価ならば,同じ SQL コネ

クションを識別する。

SQL サーバにアクセスし,SQL セションを作成するために必要な,SQL サーバの位

置,同一性及び通信プロトコルを決定するために,

SQL 処理系がどのように<SQL サーバ名>を用いるかは,

処理系定義とする。

SQL トランザクションを開始するか又は要求する SQL 文が SQL コネクションによってその SQL サーバ

で実行されたならば,その

SQL コネクションは,現行 SQL トランザクションの間,動作中 SQL コネクシ

ョン  (active SQL-connection)  とする。

SQL コネクションは,現行  (current)  又は休眠  (dormant)  のいずれかとする。最も新しく暗に実行され

たか若しくは陽に実行した

<CONNECT 文>又は最も新しく実行された<SET CONNECTION 文>によって確

立された

SQL コネクションが終了していないならば,その SQL コネクションは,現行 SQL コネクション

(current SQL-connection)  とする。そうでなければ,現行 SQL コネクションは,存在しない。現行コネクシ

ョンでない既存の

SQL コネクションは,休眠 SQL コネクション  (dormant SQL-connection)  とする。

SQL 処理系は,どの SQL 文の実行中でも,現行 SQL コネクションの喪失を検知してもよい。そのよう

なコネクションの失敗が検知されると,例外条件:

トランザクションロールバック  (transaction rollback)  -

文終了不明  (statement completion unknown)  が引き起こされる。この例外条件は,その文のために SQL サー

バ中で実行される動作の結果が

SQL エージェントに分からないことを示す。

同様に,

SQL 処理系は,<COMMIT 文>の実行中に,現行 SQL コネクションの喪失を検知してもよい。

そのようなコネクションの失敗が検知されると,例外条件:

コネクション例外  (connection exception)  -  ト

ランザクション解決不明  (transaction resolution unknown)  が引き起こされる。この例外条件は,その SQL

トランザクションがコミットを成功したのか,ロールバックしたのか,又は動作中のままであるのかを,

SQL 処理系が確かめることができないことを示す。

利用者は,

<CONNECT 文>を実行することによって,SQL エージェントに関連付けられた SQL クライ

アントと特定の

SQL サーバとの間の SQL コネクションを開始してもよい。そうでなければ,<外部呼出し

手続

>が呼び出され,現行である SQL コネクションがないとき,SQL クライアントと処理系定義の既定 SQL

サーバとの間の

SQL コネクションが開始される。処理系定義の既定 SQL サーバに関連付けられる SQL コ

ネ ク シ ョ ン を

既 定 SQL コ ネ ク シ ョ ン   (default SQL-connection)  と 呼 ぶ 。 SQL コ ネ ク シ ョ ン は ,

<DISCONNECT 文>を実行することによって終了するか,若しくは最後の動作中の SQL クライアントモジ

ュール内の

<外部呼出し手続>の最後の呼出しに続いて終了するか,又は SQL の直接起動による<直接 SQL

>の最後の実行によって終了するかのいずれかとする。<外部呼出し手続>の呼出しが,最後の動作中の

SQL クライアントモジュール内の最後の呼出しかどうかを,SQL 処理系が決定するための機構及び規則,


121

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

並びに

SQL の直接起動が<直接 SQL 文>の最後の実行かどうかを SQL 処理系が決定するための機構及び規

則は,処理系定義とする。

SQL 処理系は,少なくとも一つの SQL コネクションを提供しなければならず,SQL 処理系によって選

ばれる結合時点に

SQL サーバが識別されることを要求してもよい。SQL 処理系が二つ以上の並行 SQL コ

ネクションを許すならば,

SQL エージェントは,二つ以上の SQL サーバと接続し,<SET CONNECTION

>を実行することによって,SQL サーバを選択してもよい。

4.38  SQL セション

4.38.1  SQL セションの一般記述

この細分箇条は,ISO/IEC 9075-4 の“4.12.1 SQL セションの一般記述”によって修正される。 

SQL セション  (SQL-session)  は,単一 SQL エージェントからの単一利用者か,又は SQL の直接起動か

のいずれかによって呼び出される連続した

SQL 文の並びの実行にまたがる。SQL セション中のどの一つの

時点でも,この並び中のただ一つの

SQL 文が実行されており,それを実行文  (executing statement)  という。

幾つかの場合には,実行文 ES は,ES の直接の結果として,連続した SQL 文の入れ子になった並びを実

行する。その間,これらのうちのただ一つの

SQL 文も,実行文とし,同様に,更に入れ子になった並びの

実行を次々と無制限に含んでいくかもしれない。実行文 ES の直接の結果として実行される文がないよう

な ES を,SQL セションの最も内側の実行文  (innermost executing statement)  と呼ぶ。

SQL セションは,SQL コネクションに関連付けられる。既定 SQL コネクションに関連付けられる SQL

セションを

既定 SQL セション  (default SQL-session)  と呼ぶ。SQL セションは,現行  (current)  又は休眠

(dormant)  のいずれかとする。現行 SQL セション  (current SQL-session)  は,現行 SQL コネクションに関連

付けられた

SQL セションとする。休眠 SQL セション  (dormant SQL-session)  は,休眠 SQL コネクションに

関連付けられた

SQL セションとする。

SQL セション内で,SQL クライアントモジュールの宣言局所一時表は,<SQL クライアントモジュール

定義

>に含まれる<一時表宣言>によって実効的に作成される。SQL クライアントモジュールの宣言局所一

時表は,それらを宣言した

SQL クライアントモジュール中の<外部呼出し手続>の呼出しによってだけアク

セス可能とする。

SQL クライアントモジュールの宣言局所一時表の定義は,その SQL セションが終了する

まで永続する。

SQL セション内で,2 進オクテット長大オブジェクト位置付け子,文字長大オブジェクト位置付け子,

利用者定義型位置付け子,配列位置付け子又はマルチ集合位置付け子として指定されるホストパラメタ,

ホスト変数,又は外部ルーチンの

SQL パラメタに,それぞれ,2 進オクテット長大オブジェクト型,文字

長大オブジェクト型,利用者定義型,配列型又はマルチ集合型の値が代入されるとき,位置付け子が実効

的に作成される。これらの位置付け子は,

SQL セション文脈の部分とする。位置付け子は,有効か又は無

効かのいずれかであってもよい。

SQL セションの終了時に有効のままである全ての位置付け子は,その SQL

セションが終了するときに,無効というマークが付けられる。位置付け子であるホスト変数は,保持

可能

(holdable)  でも,保持可能でない  (nonholdable)  でもよい。

4.38.2  SQL セションの識別

SQL セションは,処理系依存の一意な SQL セション識別子をもつ。この SQL セション識別子は,他の

どの並行

SQL セションの SQL セション識別子とも異なる。SQL セション識別子は,SQL セション内の大

域一時表,作成局所一時表又は宣言局所一時表の実現値を含む処理系定義のスキーマを実効的に定義する

ために用いられる。

SQL セションは,<CONNECT 文>の実行が成功した結果として開始され,<CONNECT 文>は,その


122

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

<CONNECT 文>に含まれる暗に想定されるか又は陽に指定される<コネクション利用者名>の値を,最初の

SQL セション利用者識別子として設定する。

SQL セションは,最初は,SQL セション役割名をもたない。

SQL セションは,原時刻帯時差及び現行既定時刻帯時差をもち,それらは,データ型 INTERVAL HOUR

TO MINUTE の値とする。原時刻帯時差及び現行既定時刻帯時差の両方に,同じ処理系定義の値が最初に

設定される。現行既定時刻帯時差は,

<地方時刻帯設定文>の実行の成功によって後で変更することができ

る。原時刻帯時差は,変更できない。現行既定時刻帯時差に原時刻帯時差と等しい値を設定することもで

きる。

SQL セションは,既定カタログ名をもち,その既定カタログ名は,<準備可能文>が<EXECUTE

IMMEDIATE 文>若しくは<PREPARE 文>のいずれかによって現行 SQL セション中で準備されるときにその

<準備可能文>に含まれるか,又は<直接 SQL 文>が直接起動されるときにその<直接 SQL 文>に含まれる修

飾なし

<スキーマ名>を実効的に修飾するために用いる。既定カタログ名には,処理系定義の値が最初に設

定されるが,

<SET CATALOG 文>又は<SET SCHEMA 文>の実行の成功によって後で変更することができる。

SQL セションの既定カタログ名は,<一般値指定>の CURRENT_CATALOG を用いて決定してもよい。

SQL セションは,既定の修飾なしスキーマ名をもち,その既定の修飾なしスキーマ名は,<準備可能文>

<EXECUTE IMMEDIATE 文>若しくは<PREPARE 文>のいずれかによって現行 SQL セション中で準備さ

れるときにその

<準備可能文>に含まれるか,又は<直接 SQL 文>が直接起動されるときにその<直接 SQL

>に含まれる修飾なしの<スキーマ修飾付き名前>を実効的に修飾するために用いる。既定の修飾なしス

キーマ名には,処理系定義の値が最初に設定されるが,

<SET SCHEMA 文>の実行の成功によって後で変更

することができる。

SQL セションの既定の修飾なしスキーマ名は,<一般値指定>の CURRENT_SCHEMA

を用いて決定してもよい。

4.38.3  SQL セション特性

この細分箇条は,ISO/IEC 9075-9 の“4.16.1 SQL セション特性”によって修正される。 

この細分箇条は,ISO/IEC 9075-14 の“4.8.1 SQL セション特性”によって修正される。 

SQL セションは,SQL パスをもち,その SQL パスは,<準備可能文>が<EXECUTE IMMEDIATE 文>若

しくは

<PREPARE 文>のいずれかによって現行 SQL セション中で準備されるときにその<準備可能文>に含

まれるか,又は

<直接 SQL 文>が直接起動されるときにその<直接 SQL 文>に含まれる<ルーチン呼出し>に

直に含まれる修飾なし

<ルーチン名>を実効的に修飾するために用いる。SQL パスには,処理系定義の値が

最初に設定されるが,

<SET PATH 文>の実行の成功によって後で変更することができる。

SQL パスを定義するテキストは,<一般値指定>の CURRENT_PATH を用いて参照することができる。

SQL セションは,既定変換グループ名,及び利用者定義型名と変換グループ名との一つ以上の対をもち,

その対は,

<準備可能文>が<EXECUTE IMMEDIATE 文>若