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

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

(1) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

目 次 

ページ 

序文 ··································································································································· 1 

1 適用範囲 ························································································································· 1 

2 引用規格 ························································································································· 1 

2.1 JIS及びISO規格 ··········································································································· 1 

2.2 その他の国際規格 ·········································································································· 2 

3 定義,表記法及び規約 ······································································································· 2 

3.1 定義 ···························································································································· 3 

3.1.1 [Java]からの定義 ········································································································· 3 

3.1.2 [JVM]からの定義 ········································································································· 3 

3.1.3 第13部での定義 ·········································································································· 3 

3.2 規約 ···························································································································· 5 

3.2.1 組込み手続の規定 ········································································································ 5 

3.2.2 配置記述子ファイルの規定 ···························································································· 5 

4 概念······························································································································· 6 

4.1 Javaプログラム言語 ······································································································· 6 

4.2 SQL呼出しルーチン ······································································································· 7 

4.2.1 SQL呼出しルーチンの概要···························································································· 7 

4.2.2 SQL呼出しルーチンの特性···························································································· 7 

4.3 Javaクラス名解決 ·········································································································· 9 

4.4 SQL結果集合 ················································································································ 9 

4.5 パラメタ対応付け ········································································································· 10 

4.6 処理されないJava例外 ·································································································· 11 

4.7 データ型 ····················································································································· 12 

4.7.1 既定義でなく,SQL以外のデータ型 ··············································································· 12 

4.8 利用者定義型 ··············································································································· 12 

4.8.1 利用者定義型の導入 ···································································································· 12 

4.8.2 利用者定義型記述子 ···································································································· 13 

4.8.3 利用者定義型の比較及び代入 ························································································ 14 

4.8.4 静的フィールドのアクセス ··························································································· 15 

4.8.5 SQLとJavaとの間のオブジェクトの変換 ······································································· 15 

4.8.5.1 SERIALIZABLE ······································································································ 15 

4.8.5.2 SQLDATA ··············································································································· 16 

4.8.5.3 可搬性の向上 ··········································································································· 16 

4.9 組込み手続 ·················································································································· 16 

4.10 権限 ·························································································································· 17 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 目次 

(2) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ページ 

4.11 JAR ·························································································································· 17 

4.11.1 配置記述子ファイル ··································································································· 18 

5 語い(彙)要素 ··············································································································· 18 

5.1 <トークン>及び<分離符号> ····························································································· 18 

5.2 名前及び識別子 ············································································································ 19 

6 スカラ式 ························································································································ 20 

6.1 <メソッド呼出し> ········································································································· 20 

6.2 <NEW指定> ················································································································ 20 

7 述語······························································································································ 21 

7.1 <比較述語> ·················································································································· 21 

8 その他の共通要素 ············································································································ 22 

8.1 <Javaパラメタ宣言リスト> ···························································································· 22 

8.2 <SQL Javaパス> ··········································································································· 22 

8.3 <ルーチン呼出し> ········································································································· 23 

8.4 <LANGUAGE句> ········································································································· 31 

8.5 配列戻し関数の実行 ······································································································ 31 

8.6 Javaルーチン署名決定 ··································································································· 37 

9 スキーマ定義及びスキーマ操作 ·························································································· 44 

9.1 <スキーマ削除文> ········································································································· 44 

9.2 表定義 ························································································································ 44 

9.3 <ビュー定義> ··············································································································· 45 

9.4 <利用者定義型定義> ······································································································ 45 

9.5 <属性定義> ·················································································································· 48 

9.6 <型変更文> ·················································································································· 51 

9.7 <データ型削除文> ········································································································· 51 

9.8 <SQL呼出しルーチン> ·································································································· 52 

9.9 <ルーチン変更文> ········································································································· 55 

9.10 <ルーチン削除文>········································································································ 55 

9.11 <利用者定義順序付け定義> ···························································································· 56 

9.12 <利用者定義順序付け削除文> ························································································· 56 

10 アクセス制御 ················································································································ 57 

10.1 <GRANT権限文> ········································································································ 57 

10.2 <権限> ······················································································································ 57 

10.3 <REVOKE文> ············································································································ 58 

11 組込み手続 ··················································································································· 59 

11.1 SQLJ.INSTALL̲JAR手続 ····························································································· 59 

11.2 SQLJ.REPLACE̲JAR手続···························································································· 60 

11.3 SQLJ.REMOVE̲JAR手続 ···························································································· 61 

11.4 SQLJ.ALTER̲JAVA̲PATH手続 ····················································································· 63 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 目次 

(3) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ページ 

12 Javaについて ··············································································································· 64 

12.1 この規格で提供するJavaの機能····················································································· 64 

12.1.1 パッケージjava.sql ···································································································· 64 

12.1.2 システム特性 ············································································································ 64 

12.2 配置記述子ファイル ····································································································· 64 

13 情報スキーマ ················································································································ 67 

13.1 JAR̲JAR̲USAGEビュー ····························································································· 67 

13.2 JARSビュー ··············································································································· 67 

13.3 METHOD̲SPECIFICATIONSビュー ·············································································· 68 

13.4 ROUTINE̲JAR̲USAGEビュー ····················································································· 68 

13.5 TYPE̲JAR̲USAGEビュー ··························································································· 69 

13.6 USER̲DEFINED̲TYPESビュー ···················································································· 70 

13.7 短い名前のビュー ········································································································ 70 

14 定義スキーマ ················································································································ 72 

14.1 JAR̲JAR̲USAGE実表 ································································································ 72 

14.2 JARS実表 ·················································································································· 73 

14.3 METHOD̲SPECIFICATIONS実表 ················································································· 74 

14.4 ROUTINE̲JAR̲USAGE実表 ························································································ 75 

14.5 ROUTINES実表·········································································································· 76 

14.6 TYPE̲JAR̲USAGE実表 ······························································································ 76 

14.7 USAGE̲PRIVILEGES実表 ··························································································· 77 

14.8 USER̲DEFINED̲TYPES実表 ······················································································· 77 

15 状態コード ··················································································································· 78 

15.1 受け取られていないJava例外に対するクラス及びサブクラスの値 ········································ 78 

15.2 SQLSTATE ················································································································ 79 

16 適合性 ························································································································· 79 

16.1 SQL/JRTに対する適合性の主張 ····················································································· 79 

16.2 SQL/JRTに対するその他の適合性要件 ············································································ 79 

16.3 SQL/JRTの前提機能の関係 ··························································································· 79 

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

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

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

附属書D(参考)SQLの機能の分類 ························································································ 90 

附属書E(参考)ルーチン入門 ······························································································ 91 

附属書F(参考)型入門 ······································································································· 121 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 目次 

(4) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

まえがき 

この規格は,工業標準化法第12条第1項の規定に基づき,財団法人日本規格協会(JSA)から,工業標準

原案を具して日本工業規格を制定すべきとの申し出があり,日本工業標準調査会の審議を経て,経済産業

大臣が制定した日本工業規格である。 

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

この規格の一部が,特許権,出願公開後の特許出願,実用新案権又は出願公開後の実用新案登録出願に

抵触する可能性があることに注意を喚起する。経済産業大臣及び日本工業標準調査会は,このような特許

権,出願公開後の特許出願,実用新案権又は出願公開後の実用新案登録出願に係る確認について,責任は

もたない。 

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

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

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

JIS X 3005-3 第3部:呼出しレベルインタフェース (SQL/CLI) 

JIS X 3005-4 第4部:永続格納モジュール (SQL/PSM) 

JIS X 3005-9 第9部:外部データ管理 (SQL/MED) 

JIS X 3005-10 第10部:オブジェクト言語結合 (SQL/OLB) 

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

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

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

日本工業規格          JIS 

X 3005-13:2007 

(ISO/IEC 9075-13:2003) 

データベース言語SQL 

第13部:Javaプログラム言語を用いる 

SQLルーチン及び型 (SQL/JRT) 

Information technology−Database languages−SQL− 

Part 13: SQL Routines and Types 

Using the JavaTM Programming Language (SQL/JRT) 

序文 

この規格は,2003年に第2版として発行されたISO/IEC 9075-13を基に,技術的内容及び対応国際規格

の構成を変更することなく作成した日本工業規格である。 

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

適用範囲 

この規格は,Javaプログラム言語で書かれた静的メソッドをSQL呼出しルーチンとして呼び出す機能,

及びJavaプログラム言語で定義されたクラスをSQL利用者定義構造型として用いる機能を規定する(Java

は,Sun Microsystems, Incの登録商標である。)。 

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

ISO/IEC 9075-13:2003,Information technology−Database languages−SQL−Part 13: SQL Routines 

and Types Using the JavaTM Programming Language (SQL/JRT) (IDT) 

なお,対応の程度を表す記号(IDT)は,ISO/IEC Guide 21に基づき,一致していることを示す。 

引用規格 

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

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

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

2.1 

JIS及びISO規格 

[Framework] 

ISO/IEC 9075-1:2003,Information technology−Database languages−SQL−Part 1: Framework 

(SQL/Framework) 

注記 JIS X 3005-1:2002 データベース言語SQL 第1部:枠組 (SQL/Framework) が,この国際規

格の前の版ISO/IEC 9075-1:1999と一致している。 

[Foundation] 

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

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

(SQL/Foundation) 

注記 JIS X 3005-2:2002 データベース言語SQL第2部:基本機能(SQL/Foundation)が,この国際

規格の前の版ISO/IEC 9075-2:1999と一致している。 

[OLB] 

ISO/IEC 9075-10:2003,Information technology−Database languages−SQL−Part 10: Object Language 

Bindings (SQL/OLB) 

注記 JIS X 3005-10:2003 データベース言語SQL 第10部:オブジェクト言語結合(SQL/OLB)が,

この国際規格の前の版ISO/IEC 9075-10:2000と一致している。 

[Schemata] 

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

Definition Schemas (SQL/Schemata) 

2.2 

その他の国際規格 

[Java] 

The Java™ Language Specification, Second Edition, Bill Joy (Editor), Guy Steele, James Gosling, and Gilad 

Bracha, Addison-Wesley, 2000, ISBN 0-201-31008-2. 

[JVM] 

The Java™ Virtual Machine Specification, Second Edition, Tim Lindholm and Frank Yellin, Addison-Wesley, 

1999, ISBN 0-201-43294-3. 

[J2SE] 

Java™ 2 Platform, Standard Edition, v1.3.1, API Specification, 

http://java.sun.com/j2se/1.3/docs/api/index.html. 

[Serialization] 

Java™ Object Serialization Specification, 

http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/serialTOC.doc.html. 

[JavaBeans] 

The JavaBeans™ 1.01 Specification, http://java.sun.com/products/javabeans/docs/spec.html. 

[JDBC] 

JDBC™ 3.0 Specification, Final Release, John Ellis & Linda Ho with Maydene Fisher, Sun Microsystems, Inc., 

October, 2001. 

[RFC2368] 

RFC 2368, The mailto URL schema, P. Hoffman, L. Masinter, J.Zawinski, July, 1998. 

http://www.ietf.org/rfc/rfc2368.txt 

[RFC2396] 

RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax, T. Berners-Lee, R. Fielding, L. Maxinter, 

August, 1998. http://www.ietf.org/rfc/rfc2396.txt 

定義,表記法及び規約 

この箇条は,ISO/IEC 9075-2の“3 定義,表記法及び規約”を修正する。 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

3.1 

定義 

この細分箇条は,ISO/IEC 9075-2の“3.1 定義”を修正する。 

3.1.1 

[Java]からの定義 

この規格に[Java]からの次の用語の定義を適用する。 

3.1.1.1 

ブロック (block) 

3.1.1.2 

クラス宣言 (class declaration) 

3.1.1.3 

クラスインスタンス (class instance) 

3.1.1.4 

クラス変数 (class variable) 

3.1.1.5 

フィールド (field) 

3.1.1.6 

インスタンス初期化子 (instance initializer) 

3.1.1.7 

インスタンス変数 (instance variable) 

3.1.1.8 

インタフェース (interface) 

3.1.1.9 

局所変数 (local variable) 

3.1.1.10 

入れ子になったクラス (nested class) 

3.1.1.11 

パッケージ (package) 

3.1.1.12 

静的初期化子 (static initializer) 

3.1.1.13 

サブパッケージ (subpackage) 

3.1.2 

[JVM]からの定義 

この規格に[JVM]からの次の用語の定義を適用する。 

3.1.2.1 

クラスファイル (class file) 

3.1.2.2 

Java仮想機械 (Java Virtual Machine) 

3.1.3 

第13部での定義 

この規格では,加えて次の用語の定義を適用する。 

3.1.3.1 

クラスファイル (class file) 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

Javaクラスのコンパイルされたバイトコードを含むファイル。 

3.1.3.2 

既定コネクション (default connection) 

データソースとしてURL“jdbc:default:connection”(URLの詳細については,[RFC2368]及び

[RFC2396]参照)で確立された現行SQL処理系,SQLセション,及びSQLトランザクションへのJDBC

コネクション。 

3.1.3.3 

配置記述子 (deployment descriptor) 

SQLJ.INSTALL̲JAR手続及びSQLJ.REMOVE̲JAR手続にそれぞれ対応する<組込み動作>及び<除去動作

>を指定し,配置記述子ファイル (deployment descriptor file) 中に含まれる一つ以上のSQL文。 

3.1.3.4 

配置記述子ファイル (deployment descriptor file) 

[J2SE]のjava.util.jar部で記述されるように,JARのマニフェスト項目で

SQLJDeploymentDescriptor: TRUEを指定したJAR中に含まれる配置記述子を含むテキストファイ

ル。 

3.1.3.5 

外部Javaデータ型 (external Java data type) 

<外部Java型句>を指定する<利用者定義型定義>で定義されたSQL利用者定義型。 

3.1.3.6 

外部Javaルーチン (external Java routine) 

LANGUAGE JAVAを指定し,かつ,PROCEDURE若しくはFUNCTIONのいずれかを指定する<SQL呼

出しルーチン>で定義される外部ルーチン,又は<外部Java型句>を指定する<利用者定義型定義>で定義さ

れる外部ルーチン。 

3.1.3.7 

組み込まれたJAR (installed JAR) 

SQL環境にその存在が既に登録され,SQLJ.INSTALL̲JAR手続又はSQLJ.REPLACE̲JAR手続のうち

の一つの実行によってSQL環境にその内容が複写されたJAR。 

3.1.3.8 

Javaアーカイブ (Java Archive),JAR 

[J2SE]のjava.util.jar部で記述されるように,0個以上のJavaのclass及びserファイルを含み,

0個以上の配置記述子ファイルを含むzip形式のファイル。JARは,Javaプログラムを配布する通常の方

法であり,あるSQL環境に対する外部Javaルーチン及び外部Javaデータ型の処理系を提供するこの規格

によって規定される仕組みである。 

3.1.3.9 

JVM 

[JVM]で規定されるJava仮想機械。 

3.1.3.10 

serファイル (ser file) 

[Serialization]で規定される形式でのJavaオブジェクトの表現を含むファイル。 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

3.1.3.11 

当該Javaクラス (subject Java class) 

そのクラスの当該Javaクラス名 (subject Java class name) 及びそれを含むJARの組合せによって一意に

識別されるJavaクラス。 

3.1.3.12 

当該Javaクラス名 (subject Java class name) 

Javaクラスの完全に修飾されたパッケージ及びクラス名。 

3.1.3.13 

システムクラス (system class) 

この規格に適合する処理系によって提供されるJavaクラスで,組み込まれたJAR中に含まれていなく

ても外部Javaルーチン又は外部Javaデータ型から参照することができるJavaクラス。 

3.2 

規約 

この細分箇条は,ISO/IEC 9075-2の“3.3 規約”を修正する。 

3.2.1 

組込み手続の規定 

組込み手続は,次によって規定する。 

− 機能: 手続の目的の短い説明。 

− 署名: SQLでの手続の署名の規定。署名の目的は,手続名,パラメタ名,及びパラメタ型を指定

することとする。これらの組込み手続を定義する方法は,処理系依存とする。 

− アクセス規則: 一般規則を成功裏に適用する以前に満たさなければならないスキーマオブジェク

トへのアクセスを支配する規則の自然言語での規定。 

− 一般規則: 手続呼出しの実行時の効果についての自然言語での規定。ある要素の効果の規定で一

つ以上の一般規則が用いられる場合,要求される効果は,最初の一般規則から始めて,ある規則が

規則の適用の順番の変更又は終了を指定するか暗に想定する場合を除き,規則の番号順に適用した

結果とする。適用される特定の規則によって指定されるか又は暗に想定される場合を除き,一般規

則の適用は,番号順で最後の規則が適用されたときに終了する。 

− 適合性規則: その要素が,SQLに適合するために,どのように提供されなければならないかの規

定。 

記法記号の適用範囲は,それらの記号が定義される細分箇条とする。細分箇条内で,署名,アクセス規

則又は一般規則中で定義された記号は,参照される前に定義されているとき,その他の規則中で参照する

ことができる。 

3.2.2 

配置記述子ファイルの規定 

配置記述子ファイルは,次によって規定する。 

− 機能: 配置記述子ファイルの短い説明。 

− モデル: 配置記述子ファイルがそれを含むJAR内で識別される方法についての短い説明。 

− 特性: 配置記述子ファイルの内容の構文についてのBNFでの規定。 

− 記述: 配置記述子ファイルの内容についての要求及び制限の規定。 

− 適合性規則: その要素が,SQLに適合するために,どのように提供されなければならないかの規

定。 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

概念 

この箇条は,ISO/IEC 9075-2の“4 概念”を修正する。 

4.1 

Javaプログラム言語 

Javaプログラム言語は,クラスベースのオブジェクト指向言語である。この規格では,次のJavaの概念

及び用語を用いる。 

クラス (class) は,Javaプログラムの基本構成要素であり,すべての実行可能なJavaコードは,Javaク

ラス定義に含まれる。クラスは,0個以上のフィールド,0個以上のメソッド,0個以上の入れ子になった

クラス,0個以上のインタフェース,0個以上のインスタンス初期化子,0個以上の静的初期化子及び0個

以上の構成子からなる,空であってもよい集合を指定するクラス宣言 (class declaration) で宣言する。 

変数の有効範囲は,クラス,クラスのインスタンス,又はそのクラスのメソッドである。静的 (static) と

宣言された変数の有効範囲は,クラスであり,その変数をクラス変数 (class variable) と呼ぶ。そのクラス

中で宣言されたその他の各変数の有効範囲は,そのクラスのインスタンスであり,そのような変数をイン

スタンス変数 (instance variable) と呼ぶ。クラスのクラス変数及びインスタンス変数をそのクラスのフィ

ールド (field) と呼ぶ。メソッド中で宣言された変数の有効範囲は,ブロック (block),又はそのメソッド

中で宣言されているJavaのfor文であり,その変数を局所変数 (local variable) と呼ぶ。 

クラスインスタンス (class instance) は,そのクラス中で宣言された各インスタンス変数及びそのクラス

のスーパクラス中で宣言された各インスタンス変数のインスタンスからなる。クラスインスタンスは,ク

ラス名によって,強く型付けされている。クラスインスタンスで利用可能な操作は,そのクラスに定義さ

れているものである。 

java.lang.Objectクラスを除いて,各クラスは,(高々)一つの他のクラスを拡張する (extend) と

宣言される。クラスで他のクラスを明示的に拡張すると宣言しないものは,暗にjava.lang.Objectを

拡張する。宣言されたクラスは,それが拡張するクラスの直接サブクラス (direct subclass) である。それ

が拡張するクラスは,宣言されたクラスの直接スーパクラス (direct superclass) である。 

クラスBがクラスAの直接サブクラスか,又はBが直接サブクラスであるクラスCが存在し,かつ,C

がAのサブクラスならば,Bは,Aのサブクラス (subclass) である。同様に,クラスBがクラスAの直接

スーパクラスか,又はBが直接スーパクラスであるクラスCが存在し,かつ,CがAのスーパクラスなら

ば,Bは,Aのスーパクラス (superclass) である。サブクラスは,そのスーパクラスのすべてのフィール

ド及びメソッドをもち,Bのスーパクラスのインスタンスが許されるところはどこでも,クラスBのイン

スタンスを用いてもよい。 

メソッド (method) は,実行可能ルーチンである。メソッドは,静的 (static) であると宣言することがで

きる。その場合,クラスメソッド (class method) と呼ぶ。そうでなければ,インスタンスメソッド (instance 

method) と呼ぶ。クラスメソッドは,クラス名又はそのクラスのインスタンス名のいずれかでメソッド名

を修飾することによって参照することができる。インスタンスメソッドは,そのクラスのインスタンスを

結果とするJava式で,又は,構成子の場合,“new”で,メソッド名を修飾することによって参照するこ

とができる。インスタンスメソッドのメソッド本体では,そのクラス変数,インスタンス変数及び局所変

数を参照することができる。 

メソッドのJavaメソッド署名 (Java method signature) は,メソッド名並びにパラメタの数及びそれらの

データ型からなる。 

パッケージ (package) は,0個以上のクラス,0個以上のインタフェース,及び0個以上のサブパッケー

ジ (subpackage) からなる(サブパッケージは,パッケージ内のパッケージである。)。各パッケージは,そ

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

れ自身の名前空間をもち,パッケージ中のクラスは,そのパッケージ外から参照できないクラスを含み,

同じパッケージ中の他のクラスを参照することができる。すべてのクラスは,明示的に指定した名前付き

のパッケージ又は名前なしの既定パッケージのいずれかであるただ一つのパッケージに属する。クラスは,

他の名前付きパッケージを参照し,そのパッケージのクラスをパッケージ修飾なしでクラス内で参照する

ために,Javaのimport文を指定することができる。 

クラス,フィールド又はメソッドは,公開 (public),非公開 (private),又は限定公開 (protected) として

宣言することができる。公開変数又は公開メソッドは,どのメソッドからでもアクセスできる。非公開変

数又は非公開メソッドは,同じクラス中のメソッドによってだけ参照することができる。限定公開変数又

は限定公開メソッドは,同じクラス又はサブクラスのメソッドによってだけ参照することができる。公開,

非公開又は限定公開として宣言されないメソッドは,同じパッケージ中のクラスによって宣言されたメソ

ッドからだけ呼び出すことができる。 

インタフェース (interface) は,メソッド署名の集合からなるJavaの構成要素である。インタフェースは,

0個以上のクラスによって実装される。クラスは,0個以上のインタフェースを実装すると宣言することが

でき,クラスは,その宣言されたすべてのインタフェースによって指定される署名付きのメソッドをもつ

必要がある。 

[J2SE]で規定されるJava直列可能 (Serializable) インタフェースjava.io.Serializableは,Javaイ

ンスタンスと,[J2SE]のjava.io.OutputStream部及びjava.io.InputStream部でそれぞれ規定さ

れるjava.io.OutputStream又はjava.io.InputStreamとの間の変換を定義し,Javaオブジェクト

のインスタンスの永続表現を書き出し,Javaオブジェクトのインスタンスの永続表現を読み出す。この変

換は,そのインスタンスの最特定クラスを識別し,そのインスタンスを再構成するために必要な情報を保

持する。 

[JDBC]及び[J2SE]で規定されるJava SQLDataインタフェースjava.sql.SQLDataは,Javaインスタ

ンスとSQL利用者定義型との間の変換を定義する。 

Javaクラスのソースは,通常,ファイル拡張子“java”のJavaファイル (Java file),例えば,myclass.java

中に格納される。Javaは,通常,Javaを提供するどのプラットフォームでも可搬なバイトコード命令セッ

トに翻訳される。そのようなバイトコードを含むファイルは,通常,ファイル拡張子“class”のクラスフ

ァイル (class file),例えば,myclass.class中に格納される。 

クラスファイルの集合は,Javaアーカイブ (Java archive) ファイル又は(通常,ファイル拡張子“.jar”

をもつ)JARに集めることができる。JARは,zip形式のファイルで,Javaクラスファイルの集合を含む。

JARは,Javaプログラムを配布する通常の方法である。 

4.2 

SQL呼出しルーチン 

この細分箇条は,ISO/IEC 9075-2の“4.27 SQL呼出しルーチン”を修正する。 

4.2.1 

SQL呼出しルーチンの概要 

この細分箇条は,ISO/IEC 9075-2の“4.27.1 SQL呼出しルーチンの概要”を修正する。 

【9番目の段落の最初のテキストを置き換える。】外部Javaルーチンであってもなくても,静的SQL呼

出しルーチンは,次の条件を満たす。 

4.2.2 

SQL呼出しルーチンの特性 

この細分箇条は,ISO/IEC 9075-2の“4.27.2 SQL呼出しルーチンの特性”を修正する。 

【第2段落の後に挿入する。】外部ルーチンには,見たところ同じで根本的に異なる二つの形式のものが

ある。主要な違いは,SQL呼出しルーチンの本体がJavaで書かれていることを,外部ルーチンのルーチン

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

記述子が指定するかどうかとする。SQL呼出しルーチンの本体がJavaで書かれているとき,外部ルーチン

は,外部Javaルーチン (external Java routine) とする。他の外部ルーチンとは,次の点が異なる。 

− 他の外部ルーチンでは,そのルーチンの実行可能形式 (executable form)(例えば,動的リンクライ

ブラリ又は何らかの実行時解釈形式)は,SQL環境のカタログの外部に存在する。外部Javaルーチ

ンの実行形式は,SQL環境のカタログ中にインストールされたJARとして存在する指定された当該

Javaルーチンによって提供される。 

− インストールされたJARは,完全に自己完結的(すなわち,それ自身の外部にあるJavaクラスへ

の参照がないもの)である必要はないので,当該JavaクラスがそのインストールされたJAR又は

他のインストールされたJAR中に含まれるクラスファイル中で定義されるクラスを参照すること

を許す機構が提供される。 

注記1 一度,外部Javaルーチンが作成されると,それを含むSQL環境によって実行されるSQL文

中でのその利用は,他の外部ルーチンのそれと同様である。 

【第4段落を置き換える。】SQL呼出しルーチンは,それらの形式によって呼出し方法が異なる。SQL

呼出し手続は,<CALL文>によって呼び出される。SQL呼出し通常関数は,<ルーチン呼出し>によって呼

び出される。インスタンスSQL呼出しメソッドは,<メソッド呼出し>によって呼び出される。一方,SQL

呼出し構成メソッドは,<NEW呼出し>によって呼び出され,静的SQL呼出しメソッドは,<静的メソッ

ド呼出し>によって呼び出される。SQL呼出しルーチンの呼出しは,SQL呼出しルーチンの<ルーチン名>

を指定し,そのSQL呼出しルーチンの<SQLパラメタ宣言>に対応する引数値の並びを与える。呼出しの

当該ルーチン (subject routine) は,<ルーチン呼出し>によって呼び出されてもよいSQL呼出しルーチンと

する。<ルーチン呼出し>の当該ルーチンの選択後,SQL引数は評価され,実行されるであろうSQL呼出

しルーチンが選択される。当該ルーチンが外部JavaルーチンでないインスタンスSQL呼出しメソッドな

らば,実行されるSQL呼出しルーチンが当該ルーチンの置換メソッドの集合から選択される。(置換メソ

ッドの集合は,ISO/IEC 9075-2の“10.4 <ルーチン呼出し>”の一般規則で規定される。)選択される置換

メソッドは,当該パラメタの宣言型の型指示子が,当該パラメタに対応するSQL引数の値の最特定型の型

優先順序リスト中で,他のどの置換メソッドの当該パラメタの宣言型の形指示子よりも優先される当該パ

ラメタをもつ置換メソッドとする(ISO/IEC 9075-2の“10.4 <ルーチン呼出し>”の一般規則参照。)。イン

スタンスSQL呼出しメソッドが外部Javaルーチンならば,“置換メソッドの集合”という語は,そのよう

なメソッドには,適用しない。置換メソッドによって提供される機能は,Java自身の機能と重複し,実行

される当該ルーチンは,他の置換メソッドが指定されない場合に呼び出されるものとなる。当該ルーチン

がSQL呼出しメソッドでなければ,実行されるSQL呼出しルーチンは,その当該ルーチンとする。実行

のためのSQL呼出しルーチンの選択後,SQL引数の値がSQL呼出しルーチンの対応するSQLパラメタに

代入され,その<ルーチン本体>が実行される。SQL呼出しルーチンがSQLルーチンならば,<ルーチン本

体>は,ISO/IEC 9075-2の“13.5 <SQL手続文>”の一般規則に従って実行される<SQL手続文>とする。SQL

呼出しルーチンが外部ルーチンならば,<ルーチン本体>は,SQL以外の標準プログラムで書かれた,その

プログラム言語の規則に従って実行されるプログラムを識別する。 

【第6段落を置き換える。】SQL呼出しルーチンが外部ルーチンならば,実効的なSQLパラメタリスト

が<ルーチン本体>の実行の前に作られる。実効的SQLパラメタリストは,SQL呼出しルーチンのパラメ

タ受渡し様式によって異なるエントリをもつ。実効的SQLパラメタリストの各エントリの値は,“8.3 <ル

ーチン呼出し>”の一般規則に従って設定される。SQL呼出しルーチンが外部Javaルーチンでないとき,

実効的なSQLパラメタリスト中の値は,ISO/IEC 9075-2の“13.6 データ型対応”の規則に従って<ルーチ

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ン本体>によって識別されるプログラムに受け渡される。SQL呼出しルーチンが外部Javaルーチンならば,

実効的SQLパラメタリスト中の値は,“4.5 パラメタ対応付け”の規則に従って<ルーチン本体>によって

識別されるプログラムに渡される。そのプログラムの実行後,SQL呼出しルーチンのパラメタ受渡し様式

がSQLならば,SQL処理系は,出力パラメタ(があるならば,出力パラメタ)の値,そのプログラムか

ら戻される値(があるならば,その値),例外データ項目の値,及びメッセージテキスト(があるならば,

そのメッセージテキスト)の値を,プログラムによって実効的なSQLパラメタリストに代入される値から

得る。SQL呼出しルーチンのパラメタ受渡し様式がJAVAならば,そのような値は,プログラムによって

実効的なSQLパラメタリストに代入される値,及び受け取られていないJava例外(があるならば,その

Java例外)から得られる。SQL呼出しルーチンのパラメタ受渡し様式がGENERALならば,そのような値

は,処理系定義の方法で得られる。 

4.3 

Javaクラス名解決 

典型的なJVMは,クラス名解決 (class name resolution),すなわち,CLASSPATHと呼ばれる環境変数に

基づく探索パス機構を提供する。見たことのないクラスへの参照にJVMが出会ったとき,そのクラスが見

つかるか又はリストの最後に到達するまで,クラスパス中に現れるディレクトリのリストのメンバ,及び

JARが順に調べられる。被参照クラスへの位置付けに失敗すると,実行時誤りとなり,それを検知する適

用業務プログラムをしばしば終了させることになる。 

JVMがSQL環境内に実効的に移るとき,JVMのクラス名解決を管理するという問題は,存在し続ける

が,大きな変更を伴う。Java適用業務作成者にクラス名解決のより大きな制御を与え,その制御に関連し

て追加された安全保護を与えるために,現行セションの環境変数(例えば,動的文に対する

CURRENT̲PATHなど)ではなく,Java適用業務プログラムを含んでいるJARの特性としてクラスパスの

ような機構を規定する。したがって,外部Javaルーチンが実行されている間に,見たことのないクラス参

照に出会ったならば,そのクラスは,現在実行中のクラスの定義を含んでいるJAR中で最初に探索され,

見つからないならば,そのJARに関連付けられたSQL-Javaパス(があるならば,それ)によって指定さ

れた方法で,そのクラスが探し出される。 

SQL-Javaパスは,JAR内のクラスが,システムクラスではないクラス又は同じJAR中にないクラスを

参照するとき,JVMがクラス名をどのようにして解決するかを指定する。SQLJ.ALTER̲JAVA̲PATHは,

SQL-JavaパスをJARに関連付けるために用いる。SQL-Javaパスは,(被参照項目,被参照JAR)対のリス

トとする。被参照項目は,クラス,パッケージ,又はJAR全体を指定するための“*”のいずれであって

もよい。SQL-Javaパスリストは,対が指定された順序で探索される。各(被参照項目,被参照JAR)対 (RI,

RJ)に対して,次による。 

− RIがクラス名ならば,そのクラスは,RJ中で定義されていなければならない。RJ中で定義されて

いなければ,例外条件が引き起こされる。 

− RIが解決されているクラスのパッケージならば,そのクラスは,RJ中で定義されていなければな

らない。RJ中で定義されていなければ,例外条件が引き起こされる。 

− RIが“*”で,かつ,そのクラスがRJ中で定義されているならば,その解決が用いられる。そうで

なければ,次に続く対が試される。 

4.4 

SQL結果集合 

Java適用業務プログラムには,カーソル又は結果集合が次の二つの形式で現れる。一つ目の形式は,JDBC 

ResultSetとして参照され,[JDBC]及び[J2SE]中で定義されるとおりのインタフェース

java.sql.ResultSetを実装するクラスのオブジェクトとする。二つ目の形式は,SQLJのIteratorとし

10 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

て参照され,ISO/IEC 9075-10で定義されるとおりのインタフェースsqlj.runtime. 

ResultSetIteratorを実装するクラスのオブジェクトとする。 

ISO/IEC 9075-2では,0個以上の動的結果集合を戻すSQL呼出し手続を宣言することができ,その動的

結果集合は,結果集合カーソル (result set cursor) として参照される。戻される結果集合カーソルにするた

めには,カーソル宣言は,WITH RETURNを指定しなければならず,SQL呼出し手続から抜ける時点で,

そのカーソルが開かれていなければならない。SQL呼出し手続である外部Javaルーチンは,同様に,0個

以上の動的結果集合を戻すように宣言することができるが,他の幾つかの点で,この規格の結果集合カー

ソルの扱いは,ISO/IEC 9075-2のそれとは異なる。 

Java適用業務プログラムでは,すべてのJDBC ResultSet及びSQLJ Iteratorが結果集合カーソルとして暗

に想定される。すなわち,それらの基となるカーソル宣言は,WITH RETURNを暗に想定する。この規格

では,戻される結果集合カーソルに実際にするためには,SQL呼出し手続から抜けるとき,対応するJDBC 

ResultSet又はSQLJ Iteratorの基となるカーソルが開かれているだけでは十分ではない。すなわち,出力パ

ラメタを表す当該JavaルーチンのパラメタにJDBC ResultSet又はSQLJ Iteratorが陽に代入されなければな

らない。“4.5 パラメタ対応付け”及び“8.3 <ルーチン呼出し>”で規定するとおりに,出力パラメタは,

SQLデータ型に対応付けできるJavaデータ型の1次元配列の最初の要素として当該Javaルーチンに表現

される。動的結果集合に対して,その配列は,インタフェースjava.sql.ResultSet又はインタフェー

スsqlj.runtime.ResultSetIteratorを実装するクラスからならなければならず,JDBC ResultSet

又はSQLJ Iteratorは,その配列の最初の要素に陽に代入されなければならず,かつ,そのJDBC ResultSet

又はSQLJ Iteratorは,閉じられていてはならない。 

結果集合カーソルがどのようにして戻される結果集合カーソルになるかというこの違いが,呼び出して

いる適用業務プログラムに対して可視ではないことに注意することは重要である。“8.3 <ルーチン呼出し

>”で規定するとおりに,呼び出している適用業務プログラムには,まさにISO/IEC 9075-2のように,カ

ーソルが開かれた順序で0個以上の動的結果集合が戻される。すなわち,当該Javaルーチン中のパラメタ

の順序は,呼び出している適用業務プログラムが戻される結果集合にアクセスする順序に影響を与えない。 

4.5 

パラメタ対応付け 

あるSQLデータ型をSTとし,あるJavaデータ型をJTとする。 

STとJTとが単純に対応付け可能 (simply mappable) とは,[JDBC]の“Java型に対応付けされるJDBC

型 (JDBC Types mapped to Java Types)”という表題のデータ型変換表 (Data type conversion tables),表B.1

のある行の最初の列及び2番目の列中に,それぞれ,ST及びJTが指定されていることと同値とする。Java

データ型JTは,STの対応するJavaデータ型 (corresponding Java data type) とする。 

STとJTとがオブジェクト対応付け可能 (object mappable) とは,[JDBC]の“JDBC型のJavaオブジェ

クト型への対応付け (Mapping from JDBC Types to Java ObjectTypes)”という表題のデータ型変換表 (Data 

type conversion tables),表B.3のある行の最初の列及び2番目の列中に,それぞれ,ST及びJTが指定され

ているか,又はSTの記述子がその型が外部Javaデータ型であることを示し,かつ,その記述子が<JAR

及びクラス名>中の<Javaクラス名>としてJTを指定していることと同値とする。 

STとJTとが出力対応付け可能 (output mappable) とは,次の条件を満たすことと同値とする。 

− JTが要素データ型JT2をもつ1次元配列型(すなわち,JT が“JT2 [ ]”)で,かつ,STがJT2に

単純に対応付け可能か,又はJT2にオブジェクト対応付け可能かのいずれか。 

− JTがjava.lang.StringBufferで,かつ,拡張されたSQLパラメタ宣言リスト中のそれに対応

するパラメタが保存領域データ項目。 

11 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

要素データ型STをもつSQL配列型とJTとが配列対応付け可能 (array mappable) とは,JTが要素デー

タ型JT2をもつ1次元配列型で,かつ,STがJT2に単純に対応付け可能か又はJT2にオブジェクト対応

付け可能かのいずれかであることと同値とする。 

STとJTとが対応付け可能 (mappable) とは,STとJTとが単純に対応付け可能か,オブジェクト対応

付け可能か,出力対応付け可能か,又は配列付け対応付け可能であることと同値とする。 

Javaデータ型が対応付け可能 (mappable) とは,それがいずれかのSQLデータ型と対応付け可能である

ことと同値とする。 

Javaクラスが結果集合指向 (result set oriented) とは,それが次のいずれかであることと同値とする。 

− Javaインタフェースjava.sql.ResultSetを実装するクラス。 

− Javaインタフェースsqlj.runtime.ResultSetIteratorを実装するクラス。 

注記2 これらのクラスは,ISO/IEC 9075-10で規定しているとおりの反復子宣言 (#sql iterator) 

によって生成される。 

Javaデータ型が結果集合対応付け可能 (result set mappable) とは,それが結果集合指向クラスである要素

型をもつ1次元配列型であることと同値とする。 

M個のパラメタをもつJavaメソッドが(SQLに)対応付け可能 (mappable) とは,0 ≤ N ≤ MのあるN

に対して,最初のN個のパラメタのデータ型が対応付け可能で,最後の(M−N)個のパラメタが結果集合対

応付け可能で,かつ,結果型が単純に対応付け可能か,オブジェクト対応付け可能か,又はvoidのいずれ

かであることと同値とする。 

JavaメソッドがSQL中で可視 (visible) とは,それが公開されていて,かつ,対応付け可能であること

と同値とする。さらに,SQL呼出し手続又はSQL呼出し通常関数の外部Javaルーチンとして用いられる

ならば,可視であるためには,Javaメソッドは,静的でなければならない。 

JavaクラスがSQL中で可視 (visible) とは,それが公開されていて,かつ,対応付け可能であることと

同値とする。 

[JDBC]は,JDBC型対応付け表で規定するJDBCのSQLのJavaデータ型への対応付けを含んでいる。

STがINFORMATION̲SCHEMA.USER̲DEFINED̲TYPESビュー中に現れる外部Javaデータ型ならば,ST

の記述子の<JAR及びクラス名>中の<Javaクラス名>をJTとする。JDBCのデータ型対応付け表を実効的

に拡張する。行(ST,JT)を表B.3“JDBC型のJavaオブジェクト型への対応付け (Mapping from JDBC Types 

to Java Object Types)”中に追加される行とみなし,行(JT,ST)を表B.4“Javaオブジェクト型のJDBC型

への対応付け (Mapping from Java Object Types to JDBC Types)”中に追加される行とみなす。 

4.6 

処理されないJava例外 

SQL中のJavaメソッドを実行している間に投げられるJava例外は,Java内で受け取るか,又は処理す

ることができる。すなわち,これが行われるならば,それらの例外は,SQL処理に影響を与えない。SQL

から呼び出されるJavaメソッドが完了するとき,受け取られていないすべてのJava例外は,SQL例外条

件としてSQL環境中に現れる。 

メッセージテキストは,Javaのthrow文中に指定されたJava例外中で指定してもよい。Java例外が

java.sql.SQLExceptionのインスタンスか又はその型の下位型ならば,SQLSTATE値も,指定しても

よい。その例外がSQLSTATE値を指定するならば,そのSQLSTATE値の最初の2文字は,“38”でなけれ

ばならない。その例外がSQLSTATE値を指定しないならば,受け取られていないJava例外に対して,既

定のSQL例外条件が引き起こされる(“15.1 受け取られていないJava例外に対するクラス及びサブクラス

の値”を参照)。 

12 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

JavaメソッドがSQL文を実行するとき,SQL文中で引き起こされるどの例外条件も,明確にJavaクラ

スJava.lang.Exceptionのjava.sql.SQLExceptionサブクラスであるJava例外として,Javaメソ

ッド中で引き起こされる。SQLから呼び出され,それ自体がSQL文を実行してその内側のSQL文からの

SQLExceptionを受け取るJavaメソッドは,可搬性のために,そのSQLExceptionを再び投げなければなら

ない。 

4.7 

データ型 

この細分箇条は,ISO/IEC 9075-2の“4.1 データ型”を修正する。 

4.7.1 

既定義でなく,SQL以外のデータ型 

この細分箇条は,ISO/IEC 9075-2の“4.1.3 既定義でなく,SQL以外のデータ型”を修正する。 

【6番目の段落を置き換える。】各ホスト言語は,それ自身のデータ型をもち,それらは,たとえそのデ

ータ型を記述するために類似の名前が用いられるとしても,SQLデータ型から分離され,区別される。SQL

データ型のホスト言語のデータ型への対応付けは,ISO/IEC 9075-2の“11.50 <SQL呼出しルーチン>”,

ISO/IEC 9075-2の“20.1 <SQL埋込みホストプログラム>”,及びISO/IEC 9075-10の“8.1 <SQL埋込みホ

ストプログラム>”で規定している。すべてのSQLデータ型がすべてのホスト言語において対応するデー

タ型をもつわけではない。 

4.8 

利用者定義型 

この細分箇条は,ISO/IEC 9075-2の“4.7 利用者定義型”を修正する。 

4.8.1 

利用者定義型の導入 

この細分箇条は,ISO/IEC 9075-2の“4.7.1 利用者定義型の導入”を修正する。 

【1番目の段落の後に挿入する。】利用者定義型は,外見上は類似しているが,基本的に異なる二つの形

式で現れる。それらの形式の重要な相違点は,利用者定義型に対するCREATE TYPE文が“JAVA”という

外部言語を指定するかどうかによる。JAVAという外部言語が指定されるとき,その利用者定義型は,外

部Javaデータ型 (external Java data type) とし,そのCREATE TYPE文は,利用者定義型の属性及びメソッ

ドの,当該Javaクラス (subject Java class) の公開された属性及びメソッドへの直接の対応付けを定義する。

これが外部Javaデータ型ではない利用者定義型との違いとなる。その違いは,次の点を含む。 

− 他のどの利用者定義型に対しても,基となるクラスとの関連において必要な条件はない。すなわち,

外部Javaデータ型ではない利用者定義型の各メソッドは,異なる言語で書くことができる(例えば,

あるメソッドは,SQLで書き,別のメソッドは,Fortranで書くことができる)。このような利用者

定義型は,Javaで書かれたメソッドをもつことができない。それに反して,外部Javaデータ型のす

べてのメソッドは,Javaで書き,JAVAというパラメタ様式を(暗に)もち,かつ,関連付けられ

たJavaクラス又はその上位クラスのうちのいずれかの中で定義しなければならない。 

− 他のどの利用者定義型に対しても,利用者定義型の属性とそれらの内容のどの外部表現との間にも

陽の関連がない。さらに,利用者定義型のメソッドと外部メソッドとの間の対応付けは,後に続く

CREATE METHOD文によってそのうち行われる。それに反して,外部Javaデータ型に対しては,

利用者定義型の属性及びメソッドと当該Javaクラスの公開された属性及びメソッドとの間の関連

がCREATE TYPE文によって指定される。 

− 外部Javaデータ型に対して,利用者定義型のインスタンスのSQL環境での表現をJavaクラスのイ

ンスタンスに変換するために用いる機構は,<インタフェースUSING句>中で指定する。このよう

な変換は,例えば,外部Javaデータ型がメソッド若しくは関数呼出しの(当該)パラメタとして指

定されたとき,又はメソッド若しくは関数呼出しから戻されるJavaオブジェクトが外部Javaデー

13 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

タ型として宣言された列中に格納されるときに実行される。<インタフェース指定>は,Java定義イ

ンタフェースjava.io.Serializableを指定するSERIALIZABLE(隔離性水準の

SERIALIZABLEと混同すべきではない),又はJDBC定義インタフェースjava.sql.SQLDataを

指定するSQLDATAのいずれかであってもよい。“9.4 <利用者定義型定義>”を参照。 

− 他のどの利用者定義型に対しても,静的属性の陽の提供がない。外部Javaデータ型に対しては,当

該Javaクラスの指定された静的属性に対して,観測メソッドを定義する<静的フィールドメソッド

指定>を<利用者定義型定義>が含むことを許す。 

Javaメソッドを実行している間に行われる静的属性への修正の有効範囲及び永続性は,処理系依

存とする。 

− 他のどの利用者定義型に対しても,SQLルーチンではないどのメソッドの処理系も,SQL環境の外

部に存在する。外部Javaデータ型に対しては,組み込まれたJAR (installed JAR) 中のSQL環境内

に存在する指定された当該Javaクラスによって,そのメソッドの処理系が与えられる。 

− 外部Javaデータ型は,構造型だけで,個別型であってはならない。 

− 外部Javaルーチンであるメソッドに対して,置換メソッドの指定は,提供されない。 

注記3 外部Javaデータ型が一度作成されると,それを含んでいるSQL処理系によって実行される

SQL文中でのその利用は,他の利用者定義型のそれと類似している。 

4.8.2 

利用者定義型記述子 

この細分箇条は,ISO/IEC 9075-2の“4.7.2 利用者定義型記述子”を修正する。 

【“COMPARABLE,”を挿入することによって,1番目の段落中の4番目のリスト項目を補う。】 

− 【1番目の段落中のリスト項目に挿入する。】利用者定義型が外部Javaデータ型かどうかを示す標

識。 

【1番目の段落の後に挿入する。】利用者定義型が外部Javaデータ型ならば,利用者定義型記述子は,

次の項目も含む。 

− 利用者定義型の<JAR及びクラス名>。 

− SERIALIZABLE又はSQLDATAの<インタフェース指定>。 

− 利用者定義型のすべての原定義属性及びすべての継承属性の属性記述子。 

− <メソッド指定リスト>が指定されるならば,<メソッド指定リスト>中に含まれる各<メソッド指定>

に対して,次の項目を含むメソッド指定記述子 (method specification descriptor)。 

・ <メソッド名>。 

・ <特定メソッド名>。 

・ <SQLパラメタ宣言リスト>。 

・ <戻りデータ型>,及びSELF AS RESULTの標識。 

・ あるならば,<結果CAST FROM型>。 

・ このメソッドに対応するJavaルーチンのパッケージ,クラス及び名前,並びに,指定されるなら

ば,その署名。 

・ STATIC又はCONSTRUCTORが指定されているかどうかを示す標識。 

・ STATICが指定されているならば,これが静的フィールドメソッドかどうかを示す標識。 

・ これが静的フィールドメソッドならば,静的フィールドの<Javaフィールド名>及びその静的フィ

ールドを宣言するクラスの<Javaクラス名>。 

・ メソッドが決定的かどうかを示す標識。 

14 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

・ メソッドがSQLデータを潜在的に修正するか,SQLデータを潜在的に読むか,SQLを潜在的に

含むか,又はSQLを潜在的に含まないかどうかを示す標識。 

・ いずれかの引数がナル値の場合にメソッドの値がナル値になるならば,メソッドを呼び出さない

のがよいかどうかを示す標識。 

利用者定義型が外部Javaデータ型でないならば,利用者定義型記述子は,次の項目も含む。 

− 利用者定義型が構造型か又は個別型かどうかを示す標識。 

− その表現が既定義データ型ならば,その型の記述子。そうでなければ,利用者定義型のすべての原

定義属性及びすべての継承属性の属性記述子。 

− <メソッド指定リスト>が指定されるならば,<メソッド指定リスト>中に含まれる各<メソッド指定>

に対して,次の項目を含むメソッド指定記述子 (method specification descriptor)。 

・ <メソッド名>。 

・ <特定メソッド名>。 

・ パラメタ名SELFをもち,暗に想定される最初のパラメタを含むように拡張された<SQLパラメタ

宣言リスト>。 

・ <言語名>。 

・ <言語名>がSQLでないならば,<パラメタ様式>。 

・ <戻りデータ型> 

・ あるならば,<結果CAST FROM型>。 

・ <メソッド指定>が<原メソッド指定>か又は<置換メソッド指定>かどうかを示す標識。 

・ <メソッド指定>が<原メソッド指定>ならば,STATIC又はCONSTRUCTORが指定されているか

どうかを示す標識。 

・ メソッドが決定的かどうかを示す標識。 

・ メソッドがSQLデータを潜在的に修正するか,SQLデータを潜在的に読むか,SQLを潜在的に

含むか,又はSQLを潜在的に含まないかどうかを示す標識。 

・ いずれかの引数がナル値の場合にメソッドの値がナル値になるならば,メソッドを呼び出さない

ほうがよいかどうかを示す標識。 

注記4 <メソッド名>,<SQLパラメタ宣言リスト>及び<戻りデータ型>以外の<置換メソッド指定>

の特徴は,対応する<原メソッド指定>に対する特徴と同じ。 

4.8.3 

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

この細分箇条は,ISO/IEC 9075-2の“4.7.6 利用者定義型の比較及び代入”を修正する。 

【5番目の段落を置き換える。】あるならば,利用者定義型Taの比較型の利用者定義型記述子中に含ま

れる順序付け関数をTaの比較関数 (comparison function) とする。 

【6番目の段落を置き換える。】最特定型が利用者定義型T1及びT2である二つの値V1とV2とが比較

可能であることは,T1及びT2が同じ下位型族中にあり,それらが,それぞれ,ある比較型CT1及びCT2

をもつことと同値とする。CT1及びCT2は,T1及びT2の比較形式及び比較カテゴリがそれらのすべての

上位型のものと同じになるように制約する。比較カテゴリがCOMPARABLEならば,T1及びT2に対して

比較関数を指定してはならない。比較カテゴリがSTATE又はRELATIVEならば,T1及びT2の比較関数

が等価であるように制約される。比較カテゴリがMAPならば,それらの比較関数が等価であるように制

約されない。 

15 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

4.8.4 

静的フィールドのアクセス 

Javaクラスのフィールドは,静的 (static) か又は静的でない (non-static) かのいずれかとして定義する

ことができる。Javaクラスの静的フィールドは,更に終端 (final) であることを指定し,それらを読込み

専用にすることができる。Javaでは,終端でないフィールドは,更新することが許される。 

SQLの<利用者定義型定義>は,属性がSTATICであることを指定するための機能を含まない。これは,

一つには,データベース環境で静的属性の有効範囲,永続性及びトランザクション特性を指定することの

難しさによる。しかし,外部Javaデータ型の<利用者定義型定義>は,Java静的フィールドの値に読込み専

用でアクセスするための機構を提供する。<静的フィールドメソッド指定>句は,パラメタなしのメソッド

のメソッド名を定義する。その<外部変数名句>は,当該Javaクラス,又は当該Javaクラスの上位クラス

の静的フィールドの名前を指定する。静的フィールドメソッドは,STATICメソッドに対する通常の方法

で呼び出され,指定されたJava静的フィールドの値を戻す。終端であるか終端でないかにかかわらず,SQL

は,Java静的フィールドの値を更新するための機構を提供しない。 

4.8.5 

SQLとJavaとの間のオブジェクトの変換 

SQL文によってデータベース中のJavaオブジェクトを操作する適用業務プログラム作成者又は末端利

用者が,変換を実行するために用いる特定の機構を知っている必要がないのに対して,Javaクラスそのも

のの開発者は,実装している特殊なJavaインタフェース(すなわち,java.io.Serializable又は

java.sql.SQLData)の形式でそれを行う準備をする必要がある。<利用者定義型定義>には,SQL文の

有効範囲中でSQLデータベースとJavaとの間のオブジェクト状態情報を変換するためのインタフェース

を指定する句を導入する。上述のとおり,SQLデータベース中に永続的に格納されたオブジェクトが属性

(又はフィールド)値を取り出すために若しくはそのオブジェクトのメソッドを呼び出すためにSQL文の

内側からアクセスされるとき,又はそのオブジェクトがメソッド呼出しでの入力引数として用いられると

きに,SQLからJavaへの変換を潜在的に行うことができる。新たに作成されるか若しくは修正されるオブ

ジェクト,又はメソッド呼出しの戻り値であるオブジェクトがデータベース中に永続的に格納される必要

があるときに,反対方向のJavaからSQLへの変換が要求されてもよい。 

この規格は,<外部Java型句>中でオブジェクト状態変換を指定するための次の選択肢を提供する。 

− <利用者定義型定義>がSERIALIZABLEの<インタフェース指定>を指定するならば,Javaインタフ

ェースjava.io.Serializableがオブジェクト状態変換のために用いられる。 

− <利用者定義型定義>がSQLDATAの<インタフェース指定>を指定するならば,[JDBC]及び[J2SE]

で規定しているJavaインタフェースjava.sql.SQLDataがオブジェクト状態変換のために用いら

れる。 

− <利用者定義型定義>が<インタフェース指定>を指定しないならば,オブジェクト状態変換のために,

Javaインタフェースjava.io.Serializableを用いるか,又はJavaインタフェース

java.sql.SQLDataを用いるかは,処理系定義とする。 

4.8.5.1 

SERIALIZABLE 

<利用者定義型定義>の<インタフェース指定>がSERIALIZABLEを指定するならば,オブジェクト状態

通信は,Javaインタフェースjava.io.Serializableを基にする。<利用者定義型定義>の<外部Java

クラス句>中で参照されるJavaクラスは,“implements java.io.Serializable”を指定しなければ

ならず,零項構成子を提供しなければならない。 

この場合には,永続的に格納され,SQL型のメソッドに利用可能になるSQLオブジェクト状態は,Java

直列化オブジェクト状態によって完全に定義される。SQL型に対して定義される属性は,対応するJava

16 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

クラスの公開フィールドに対応しなければならず,それらのフィールドは,各属性の<外部Java属性句>

中に列挙されなければならない。したがって,SQL属性は,SQL文の内側で可視にしたいオブジェクト状

態のそれらの部分へのアクセスを定義するが,オブジェクトの完全な状態を含まないかもしれない(その

オブジェクトは,Javaクラス中にその他のフィールドを含むかもしれない)。 

4.8.5.2 

SQLDATA 

<利用者定義型定義>の<インタフェース指定>がSQLDATAを指定するならば,オブジェクト状態通信は,

[JDBC]及び[J2SE]で規定しているJavaインタフェースjava.sql.SQLDataを基にする。<利用者定義型

定義>の<外部Javaクラス句>中で参照されるJavaクラスは,“implements java.sql.SQLData”を指

定しなければならず,零項構成子を提供しなければならない。 

この場合には,文中で定義される属性だけがSQLオブジェクト型の完全な状態を含む。Javaクラス中で

定義されるその他の公開属性又は非公開属性は,この規格で規定するオブジェクト状態の一部にはならな

い。Javaオブジェクト表現は,必要ならば,SQLオブジェクト属性と全く異なってもよい。例えば,Java

クラスが極座標を用いて位置形状の点を定義するのに対して,それに対応するSQL Point型は,直交座標

を用いて定義してもよい。Javaクラスの処理系によってなされるべきただ一つの要件は,

java.sql.SQLDataメソッドreadSQL及びwriteSQLの実装が,<利用者定義型定義>中で定義された

のと同じ順序で属性を読むこと及び書くこととする。 

可搬性を向上させるために,たとえSQLDATAの<インタフェース指定>が指定されたとしても,SQL属

性に対して<外部Java属性句>を指定することもできる。しかし,<外部Java属性句>は,SQL中での属性

アクセスを実装するためにも,SQLとJavaとの間でオブジェクトを変換するためにも必要ないので,この

場合には無視される。 

4.8.5.3 

可搬性の向上 

次の指針は,SERIALIZABLE及びSQLDATAの両方の選択肢を提供しなくてもよいこの規格の異なる実

装に対して,Javaクラスの最大の可搬性を提供する。 

− SQL型を実装するために用いるJavaクラスは,java.io.Serializable及び

java.sql.SQLDataの両方を実装するのがよい。 

− Javaクラスは,永続する必要があるか,又は公開Javaフィールドに対して維持されなければならな

い完全なオブジェクト状態を定義するのがよい。 

− SQL属性のEXTERNAL NAMEは,指定するのがよい。 

両方のインタフェースを提供しない処理系が提供するインタフェースを既定にできるように,<利用者

定義型定義>中の<インタフェースUSING句>を省略するのがよい。 

4.9 

組込み手続 

SQL環境中に外部Javaルーチン及び外部Javaデータ型を組み込むために導入されたスキーマオブジェ

クトの扱い,すなわち,JARの扱いにおいて,この規格は,この規格群の他の部と少し異なる。この規格

は,(例えば,)省略可能な句を用いて,それらに含まれる配置記述子を実行させるために,JARを追加又

は削除する新しいSQLスキーマ文を規定するのではなく,四つの組込み手続の組,及びそれらの手続が定

義される新しいスキーマを導入する。 

SQLJと名付けられた新しいスキーマは,INFORMATION̲SCHEMAと名付けられたスキーマのように,

この規格を実装するSQLシステムのすべてのカタログ中に存在し,この規格で規定する組込み手続のすべ

てを含むように定義される。 

この規格で規定する組込み手続は,次のとおりとする。 

17 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

− SQLシステム中の一組のJavaクラスをロードするためのSQLJ.INSTALL̲JAR。 

− SQLシステム中の一組のJavaクラスを取り替えるためのSQLJ.REPLACE̲JAR。 

− 前に組み込まれた一組のJavaクラスを削除するためのSQLJ.REMOVE̲JAR。 

− Javaクラス内の名前解決用のパスを指定するためのSQLJ.ALTER̲JAVA̲PATH。 

4.10 権限 

この細分箇条は,ISO/IEC 9075-2の“4.34.2 権限”を修正する。 

【“JAR,”を挿入することによって,1番目の段落中のリストを補う。】 

【2番目の段落の1番目の規定項目を置き換える。】 

− 記述子が記述する実表,ビュー,列,定義域,文字集合,照合順,文字変換,利用者定義型,表/

メソッド対,トリガ,SQL呼出しルーチンモジュール,順序数生成子又はJARの識別。 

【8番目の段落を置き換える。】USAGEの<動作>をもつ権限記述子は,USAGE権限記述子 (usage 

privilege descriptor) と呼ばれ,権限記述子によって識別される定義域,利用者定義型,文字集合,照合順,

文字変換,順序数生成子又はJARに関する権限の存在を識別する。 

【8番目の段落の後に挿入する。】この規格中で規定する機能に対する権限は,次のとおりとする。 

− SQLJ.INSTALL̲JAR,SQLJ.REPLACE̲JAR及びSQLJ.REMOVE̲JAR手続を呼び出すために必要な

権限は,処理系定義とする。 

注記5 これは,スキーマを作成するために必要な処理系定義の権限と類似している。 

− JARの所有者だけがSQLJ.ALTER̲JAVA̲PATH手続を呼び出すことが許され,その所有者は,パス

引数中で参照される各JARに関するUSAGE権限ももたなければならない。 

− 外部Javaルーチンを定義及び削除するための<SQL呼出しルーチン>及び<ルーチン削除文>の呼出

しは,SQLスキーマ文に対する通常のアクセス規則によって決定される。 

− SQL名によって参照されるJavaメソッドの呼出しは,SQLルーチン名に関する通常のEXECUTE

権限によって制御される。 

SQL名によって呼び出されるJavaメソッドを“定義者の権限”で実行するか又は“呼出し元の権

限”で実行するかどうか,すなわち,<SQL呼出しルーチン>を実行した利用者の利用者名で実行す

るか又は現行利用者の利用者名で実行するかどうかは,処理系定義とする。 

4.11 JAR 

JARは,一式のJava class及びserファイルを含み,配置記述子ファイルを任意に含むzip形式ファ

イルとする。組み込まれたJARは,外部Javaルーチン及び外部Javaデータ型の実装をSQL環境に提供す

る。 

JARは,SQL環境の外側に作成される。それらは,SQLJ.INSTALL̲JAR手続によって,SQL環境内に

写される。その後のSQL文又は手続は,SQL環境から取り除くこと,完全に置き換えること,又はSQL-Java

パスを変更すること以外のどんな方法でも組み込まれたJARを修正しない。特に,どのSQL操作も,JAR

へのクラスの追加,JARからのクラスの除去,又はJAR中のクラスの置換えを行わない。組み込まれたJAR

に対して“修正しない”というこの原則の理由は,JARがしばしば署名されること,及びSQL環境による

JARの修正によって正しくなくなるかもしれないマニフェスト (manifest) データをしばしば含むことによ

る。 

それぞれの組み込まれたJARは,JAR記述子 (JAR descriptor) によって表現される。JAR記述子は,次

の項目を含む。 

− JARのカタログ名,スキーマ名及びJAR識別子。 

18 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

− JARのSQL-Javaパス。 

4.11.1 配置記述子ファイル 

JARが組み込まれると,それに含まれているJavaクラスの静的メソッドがSQL呼出しルーチンとして

用いられる前に,外部Javaルーチンを定義する一つ以上の<SQL呼出しルーチン>を実行しなければなら

ず,それに含まれているクラスが利用者定義型として用いられる前に素早く,一つ以上の<利用者定義型

定義>を実行しなければならない。さらに,SQL呼出しルーチン及び利用者定義型を新しく作成するため

の権限を定義する<GRANT権限文>が必要になるかもしれない。もっと後で,JARが取り除かれるとき,<

ルーチン削除文>,<データ型削除文>及び<REVOKE文>を実行しなければならない。 

幾つかの処理系中にJARが組み込まれることになるならば,<SQL呼出しルーチン>,<利用者定義型定

義>,<利用者定義順序付け定義>,<GRANT権限文>,<ルーチン削除文>,<データ型削除文>,<利用者定

義順序付け削除文>及び<REVOKE文>は,各処理系に対してしばしば同じになる。繰り返される組込みの

自動化を助けるために,配置記述子ファイルは,この規格で規定するSQLスキーマ文の異形を含む。これ

らの文は,配置が要求されるとき,SQLJ.INSTALL̲JAR及びSQLJ.REMOVE̲JAR手続によって,それぞ

れ,実行される複文の組込み動作 (install actions) 及び除去動作 (remove actions) にグループ化される。さ

らに,組込み動作及び除去動作の仕立てのための指定を許す処理系定義の処理系ブロック (implementor 

block) を提供する。SQLスキーマ文は,それらが含んでいる<SQL呼出しルーチン>及び<利用者定義型定

義>中のJARを配置記述子ファイル内で参照するので,含んでいるJARに対するプレースホルダのJAR名

として,JAR名“thisjar”が用いられる。 

この規格は,SQLJ.INSTALL̲JAR及びSQLJ.REMOVE̲JAR手続の呼出しの間に配置を要求することに

よって,SQLスキーマ文の異形を実行するための新しい機構を提供する。適合するSQL処理系は,SQL

スキーマ文の実行の基礎をなす配置記述子(機能J531“配置”),又は直接起動若しくは埋込みSQL(機能

J511“コマンド”)のような別の規格の文実行機構のいずれかを提供することが要求される。すなわち,適

合するSQL処理系は,両方の機構を提供する必要はない。 

語い(彙)要素 

この箇条は,ISO/IEC 9075-2の“5 語い(彙)要素”を修正する。 

5.1 

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

この細分箇条は,ISO/IEC 9075-2の“5.2 <トークン>及び<分離符号>”を修正する。 

機能 

<トークン>及び<分離符号>(<token> and <separator>)は,SQL言語中の語い単位(トークン及び分離符号)

を指定する。 

形式 

<非予約語> ::= 

  !! ISO/IEC 9075-2中のすべての代替手段 

| COMPARABLE 

| INTERFACE 

| JAVA 

| SQLDATA 

<予約語> ::= 

  !! ISO/IEC 9075-2中のすべての代替手段 

19 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

| JAR 

構文規則 

追加の構文規則なし。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

追加の適合性規則なし。 

5.2 

名前及び識別子 

この細分箇条は,ISO/IEC 9075-2の“5.4 名前及び識別子”を修正する。 

機能 

名前及び識別子(Names and identifiers)は,名前を指定する。 

形式 

<JAR名> ::= [ <スキーマ名> <ピリオド> ] <JAR識別子> 

<JAR識別子> ::= <識別子> 

<Javaクラス名> ::= [ <パッケージ> <ピリオド> ] <クラス識別子> 

<JAR及びクラス名> ::= <JAR識別子> <コロン> <Javaクラス名> 

<修飾付きJavaフィールド名> ::= [<Javaクラス名> <ピリオド> ] <Javaフィールド名> 

<パッケージ> ::= <パッケージ識別子> [<ピリオド> <パッケージ識別子> ]... 

<パッケージ識別子> ::= <Java識別子> 

<クラス識別子> ::= <Java識別子> 

<Javaフィールド名> ::= <Java識別子> 

<Javaメソッド名> ::= <Java識別子> 

<Java識別子> ::= !! 構文規則参照 

構文規則 

1) 【この構文規則を挿入する。】<Java識別子>は,Javaの構文解析及び字句解析の規則に従って正し

い識別子でなければならない。 

注記6 Javaの構文解析及び字句解析の規則は,[Java]で規定されている。 

2) 【この構文規則を挿入する。】 提供される文字集合,並びに<パッケージ識別子>,<クラス識別子>,

<Javaフィールド名>及び<Javaメソッド名>の最大長は,処理系定義とする。 

3) 【構文規則 18)の後に挿入する。】二つの<JAR名>が等価であることは,それらが等価な<Java識別

子>及び暗に想定されるか又は陽に指定される等価な<スキーマ名>をもつことと同値とする。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【この一般規則を挿入する。】<JAR名>は,JARを識別する。 

2) 【この一般規則を挿入する。】<Java識別子>は,修飾なしJava名を表現する。 

3) 【この一般規則を挿入する。】<Javaクラス名>は,完全修飾付きJavaクラスを識別する。 

4) 【この一般規則を挿入する。】<パッケージ>は,完全修飾付きJavaパッケージを識別する。 

20 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

5) 【この一般規則を挿入する。】<パッケージ識別子>は,修飾なしパッケージ名を表現する。 

6) 【この一般規則を挿入する。】<クラス識別子>は,修飾なしJavaクラス名を表現する。 

7) 【この一般規則を挿入する。】<Javaフィールド名>は,Javaクラス内のフィールドの名前を表現す

る。 

8) 【この一般規則を挿入する。】<Javaメソッド名>は,Javaクラス内のメソッドの名前を表現する。 

適合性規則 

追加の適合性規則なし。 

スカラ式 

この箇条は,ISO/IEC 9075-2の“6 スカラ式”を修正する。 

6.1 

<メソッド呼出し> 

この細分箇条は,ISO/IEC 9075-2の“6.16 メソッド呼出し”を修正する。 

機能 

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

形式 

追加の形式項目なし。 

構文規則 

1) 【構文規則2)の後に挿入する。】UDTが外部Javaデータ型ならば,<メソッド呼出し>は,<直接呼

出し>を直に含まなければならない。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

追加の適合性規則なし。 

6.2 

<NEW指定> 

この細分箇条は,ISO/IEC 9075-2の“6.18 NEW指定”を修正する。 

機能 

<NEW指定>(<new specification>)は,構造型の新しく生成される値のメソッドを呼び出す。 

形式 

追加の形式項目なし。 

構文規則 

追加の構文規則なし。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【この一般規則を挿入する。】機能J571“NEW演算子”が提供されないならば,外部Javaデータ

型の構成子を呼び出すために用いる機構は,処理系定義とする。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J571“NEW演算子”なしでは,適合するSQL言語は,<NEW

21 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

指定>中に直に含まれる<ルーチン呼出し>中に直に含まれる<ルーチン名>RNの暗に想定されるか

又は陽に指定される<スキーマ名>によって識別されるスキーマが,利用者定義型名がRNであり,

型が外部Javaデータ型である利用者定義型を含む<NEW指定>を含んではならない。 

述語 

この箇条は,ISO/IEC 9075-2の“8 述語”を修正する。 

7.1 

<比較述語> 

この細分箇条は,ISO/IEC 9075-2の“8.2 比較述語”を修正する。 

機能 

<比較述語>(<comparison predicate>)は,二つの行値の比較を指定する。 

形式 

追加の形式項目なし。 

構文規則 

1) 注記7 【注記179を置き換える。】UDT1及びUDT2の両方の利用者定義型記述子に含まれる比較

形式及び比較カテゴリは,同じになるように制約され,かつ,それらのすべての上位型の

それと同じになるよう制約される。比較カテゴリがCOMPARABLEならば,T1及びT2に

対して比較関数が指定されてはならない。比較カテゴリがSTATE又はRELATIVEならば,

UDT1及びUDT2は,同じ比較関数をもつように制約される。比較カテゴリがMAPなら

ば,同じ比較関数をもつようには制約されない。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【一般規則 1) b) iv) 3)及びその部分規則の前に挿入する。】UDTxの比較カテゴリがCOMPARABLE

ならば,次による。 

a) 当該SQLデータ型は,外部Javaデータ型でなければならない。その外部Javaデータ型の当該Java

クラスをJCとする。 

注記8 “9.11 <利用者定義順序付け定義>”の構文規則は,JCがJavaインタフェース

java.lang.Comparableを実装することを要求する。インタフェース

java.lang.Comparableは,結果データ型がJavaintであり,名前がcompareToで

あるメソッドをもつJavaクラスを実装することを要求する。 

b) 関連付けられるJVMでのXの値をXJVとする。関連付けられるJVMでのYの値をYJVとする。 

c) X = Yの結果は,JVMが次のJavaブール式を実行するのと同じ結果とする。 

XJV.compareTo(YJV ) == 0 

d) X < Yの結果は,JVMが次のJavaブール式を実行するのと同じ結果とする。 

XJV.compareTo(YJV ) < 0 

e) X <> Yの結果は,JVMが次のJavaブール式を実行するのと同じ結果とする。 

XJV.compareTo(YJV ) != 0 

f) X > Yの結果は,JVMが次のJavaブール式を実行するのと同じ結果とする。 

XJV.compareTo(YJV ) > 0 

g) X <= Yの結果は,JVMが次のJavaブール式を実行するのと同じ結果とする。 

22 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

XJV.compareTo(YJV ) <= 0 

h) X >= Yの結果は,JVMが次のJavaブール式を実行するのと同じ結果とする。 

XJV.compareTo(YJV ) >= 0 

適合性規則 

追加の適合性規則なし。 

その他の共通要素 

この箇条は,ISO/IEC 9075-2の“10 その他の共通要素”を修正する。 

8.1 

<Javaパラメタ宣言リスト> 

機能 

<Javaパラメタ宣言リスト>(<Java parameter declaration list>)は,JavaメソッドのためのパラメタのJava

型を指定する。 

形式 

<Javaパラメタ宣言リスト> ::= <左括弧> [<Javaパラメタ> ] <右括弧> 

<Javaパラメタ> ::= <Javaデータ型> [ { <コンマ> <Javaデータ型> }... ] 

<Javaデータ型> ::= !! 構文規則参照 

構文規則 

1) <Javaデータ型>は,“4.5 パラメタ対応付け”で規定するとおり,対応付け可能か,又は結果集合対

応付け可能なJavaデータ型とする。<Javaデータ型>の名前では,大文字と小文字とが区別され,パ

ッケージ名を含むならば,それで完全に修飾されなければならない。 

アクセス規則 

なし。 

一般規則 

なし。 

適合性規則 

1) 機能J631“Java署名”なしでは,適合するSQL言語は,“8.6 Javaルーチン署名決定”で決定され

る既定のJavaメソッド署名と等価でない<Javaパラメタ宣言リスト>を含んではならない。 

8.2 

<SQL Javaパス> 

機能 

<SQL Javaパス>(<SQL Java path>)は,組み込まれたJAR間にわたってJavaクラスの解決を制御する。 

形式 

<SQL Javaパス> ::= [ <パス要素> ... ] 

<パス要素> ::= <左括弧> <被参照クラス> <コンマ> <解決JAR> <右括弧> 

<被参照クラス> ::= 

  [ <パッケージ> <ピリオド> ] <アスタリスク> 

| [<パッケージ> <ピリオド> ] <クラス識別子> 

<解決JAR> ::= <JAR名> 

構文規則 

なし。 

アクセス規則 

23 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

なし。 

一般規則 

1) JAR J中のJavaクラスCJがSQL処理系中で実行されるとき,SQLJ.ALTER̲JAVA̲PATH手続の呼

出しによってJと関連付けられる<SQL Javaパス>をPとする。 

2) システムクラスでなく,かつ,Jに含まれない,名前CNのクラスへの,CJ中のどの静的又は動的

な参照も,次のとおり解決される。 

P中の(<パス要素>があるならば,)各<パス要素>PEに対して,それらが指定される順序で,次

による。 

a) PE中に含まれる<被参照クラス>及び<解決JAR>を,それぞれ,RC及びRJとする。RJによって

参照されるJARをJRとする。 

b) RJが組み込まれたJARの名前でないならば,例外条件:Java例外−パス中のJAR名が正しくな

い (invalid JAR name in path) が引き起こされる。 

注記9 例外を引き起こしたSQLJ.ALTER̲JAVA̲PATHの呼出しに対して取られる処理系定義

の動作が,SQL Javaパス中の不正な<JAR名>を残すことになる場合にだけ,この例外が

起きる可能性がある。 

c) RCがCNと等価ならば,次による。 

i) 

CNがJR中のクラスCの名前ならば,CNは,クラスCに決まる。 

ii) CNがJR中のクラスCの名前でないならば,例外条件:Java例外−クラス名が解決されてい

ない (unresolved class name) が引き起こされる。 

d) RCが<アスタリスク>を単純に含み,かつ,<パッケージ>を単純に含むならば,指定された<パッ

ケージ>をPKGとし,CNの<クラス識別子>をCIとする。CNの<Javaクラス名>がPKG.CIなら

ば,次による。 

i) 

CNがJR中のクラスCの名前ならば,CNは,クラスCに決まる。 

ii) CNがJR中のクラスCの名前でないならば,例外条件:Java例外−クラス名が解決されてい

ない (unresolved class name) が引き起こされる。 

e) RCが<アスタリスク>を単純に含み,かつ,<パッケージ>を単純に含まないならば,次による。 

i) 

CNがJR中のクラスCの名前ならば,CNは,クラスCに決まる。 

ii) CNがJR中のクラスの名前でないならば,CNは,考慮される<パス要素>によって解決されず,

P中の次の<パス要素>が考慮される。 

3) P中のすべての<パス要素>が考慮された後にCNが決まっていないならば,例外条件:Java例外−

クラス名が解決されていない (unresolved class name) が引き起こされる。 

適合性規則 

1) 機能J601“SQL-Javaパス”なしでは,適合するSQL言語は,<SQL Javaパス>を含んではならない。 

8.3 

<ルーチン呼出し> 

この細分箇条は,ISO/IEC 9075-2の“10.4 <ルーチン呼出し>”を修正する。 

機能 

<ルーチン呼出し>は,SQL呼出しルーチンを呼び出す。 

形式 

追加の形式項目なし。 

構文規則 

24 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

1) 【この構文規則を挿入する。】SRが外部Javaルーチンならば,次による。 

a) <SQL引数リスト>に直に含まれる<SQL引数>は,<一般化式>を直に含んではならない。 

b) <Javaパラメタ宣言リスト>の妥当性確認が処理系定義で<ルーチン呼出し>によって実行される

ならば,“8.6 Javaルーチン署名決定”の構文規則が,<ルーチン呼出し>,0のメソッド指定指標,

及び当該ルーチンSRに適用される。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【一般規則 3) b) i)の後に挿入する。】Rが外部Javaルーチンならば,宣言型Tiの処理系定義のナル

でない値をCPViとする。 

2) 【一般規則4)の前に挿入する。】Rが静的フィールドメソッドでない外部Javaルーチンならば,R

の当該Javaメソッド (subject Java method) をPとする。 

注記10 外部Javaルーチンの当該Javaメソッドは,“8.6 Javaルーチン署名決定”で規定する。 

3) 【一般規則4)の最初の段落を置き換える。】Rが外部Javaルーチンでない外部ルーチンならば,次

による。 

4) 【一般規則5) d) ii)の最初の段落を置き換える。】Rが静的フィールドメソッドでないならば,次に

よる。 

5) 【一般規則8) d)の前に挿入する。】RがPARAMETER STYLE JAVAを指定するならば,次による。 

場合: 

a) Rが配列戻し外部関数又はマルチ集合戻し外部関数であるSQL呼出しルーチンならば,Rの実効

的なSQLパラメタリストESPLは,次のとおりに設定される。 

i) 

Rが戻す配列の要素型又はマルチ集合の要素型が行型ならば,要素型の次数をFRNとする。そ

うでなければ,1をFRNとする。 

ii) 1からPNまでの各iに対して,ESPLのi番目の項目にCPViが設定される。 

iii) PN+1からPN+FRNまでの各iに対して,ESPLのi番目の項目に結果データ項目 (result data 

item) が設定される。 

iv) iがPN+FRN+1ならば,ESPLのi番目の項目には退避領域データ項目が設定され,iが

PN+FRN+2ならば,ESPLのi番目の項目には,呼出しデータ項目 (call type data item) が設定

される。 

v) 退避領域データ項目(すなわち,SQL引数値リストのPN+FRN+1番目の項目)の値には,ナ

ルを設定し,呼出しデータ項目(すなわち,SQL引数値リストのPN+FRN+2番目の項目)に

は,−1を設定する。 

注記11 退避領域データ項目の初期化は,“8.5 配列戻し関数の実行”で行われる。ここでは,ナ

ルが設定される。 

b) そうでなければ,1からPNまでの各iに対して,CPViの値のリストを,Rの実効的なSQLパラ

メタリストESPLとする。 

6) 【一般規則8) f) ii) 1)の最初の段落を置き換える。】Rが外部Javaルーチンではなく,かつ,Rが配

列戻し外部関数でもマルチ集合戻し外部関数でもなければ,Pは,そのパラメタ名がPNiであり,

かつ,値が次のとおりに設定されたEN個のパラメタPDiのリストとともに実行される。 

7) 【一般規則8) f) ii) 2)の前に挿入する。】Rが外部Javaルーチンで,かつ,Rが配列戻し外部関数又

25 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

はマルチ集合戻し外部関数でもなければ,Pは,次のとおりに決定される方法によって,値が次の

とおりに設定されたパラメタPDiのリストとともに実行される。 

a) Rのルーチン記述子をSRDとする。 

b) RがSQL呼出しメソッドであることをSRDが示すならば,その記述子がSRの対応するメソッド

指定記述子MSDを含む利用者定義型をSRUDTとし,SRUDTの当該JavaクラスをJCLSNとす

る。 

c) 場合: 

i) 

RがSQL呼出しメソッドであることをSRDが示し,かつ,Rが静的フィールドメソッドであ

ることをMSDが示すならば,次による。 

1) Rの当該静的フィールドをJSFとする。 

注記12 SQL呼出しメソッドの“当該静的フィールド”は,“8.6 Javaルーチン署名決定”で規定

される。 

2) Rの実行的戻りデータ型をERTとする。 

注記13 “実効的戻りデータ型は,ISO/IEC 9075-2の“10.4 <ルーチン呼出し>”の構文規則で規

定される。 

3) 場合: 

A) ERTが利用者定義型ならば,次による。 

I) JSFの値の最特定JavaクラスをSJCEとし,その当該JavaクラスがSJCEであり,かつ,

利用者定義型がERT又はERTのサブクラスである利用者定義型をSTUとする。 

II) STUの利用者定義型記述子によって指定された<インタフェース指定>をUISとする。 

場合: 

1) UISがSERIALIZABLEならば,次による。 

a) 当該JavaクラスSJCEのwriteObject()メソッドが,JSFのJava値を利用者定義

型STUのSQL値SSFVに変換するために実行される。 

b) writeObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記14 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で規定するように,

記述子の当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのwriteObject()メソ

ッドを定義する。 

2) UISがSQLDATAならば,次による。 

a) 当該JavaクラスSJCEのwriteSQL()メソッドが,JSFのJava値を利用者定義型

STUのSQL値SSFVに変換するために実行される。 

b) writeSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記15 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で規定するように,記述

子の当該Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフ

ェースjava.sql.SQLDataを実装し,インタフェースのwriteSQL()メソッ

ドを定義する。 

B) そうでなければ,SSFVの値がJSFの値に設定される。 

4) ISO/IEC 9075-2の“9.2 <格納代入>”の規則に従って,宣言形ERTの相手にSSFVを代入し

た結果を<ルーチン呼出し>の結果とする。この細分箇条のこれ以降の一般規則は,適用さ

26 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

れない。 

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

1) Pのために宣言されたJavaパラメタのデータ型をPの宣言に現れた順に順序付けたリストを

JPDLとする。 

注記16 Javaパラメタが配列クラスとして宣言されるならば,JPDLには,その情報が反映

される。 

2) RがSQL呼出しメソッドであることをSRDが示し,かつ,Rがインスタンスメソッド又は

構成メソッドであることをMSDが示すならば,次のとおりに当該パラメタをJPDLの前に

付ける。 

場合: 

A) JPDLが一つ以上のJavaデータ型を含むならば,JCLSNをJPDLの前に付ける。 

B) そうでなければ,JPDLをJCLSNで置き換える。 

3) JPDLのi番目のデータ型をJPiとする。 

4) 1からENまでの各iに対して,JPiが配列クラスならば,JPiの構成要素型をJPiとする。 

注記17 Java配列の構成要素型は,[Java]で規定している。 

5) 1からENまでの各iに対して,ESPiがSQLナル値,かつ,JPiがboolean,byte,short,

int,long,float又はdoubleならば,例外条件:外部ルーチン呼出し例外−ナル値は許

されない (external routine invocation exception−null value not allowed) が引き起こされる。 

6) 1からENまでの各iに対して, 

場合: 

A) ESPiの宣言型の値が利用者定義型ならば,UをESPiの最特定型とし,Uの利用者定義型

記述子によって指定される<インタフェース指定>をUISとし,Uの当該JavaクラスをSJCU

とする。 

場合: 

I) UISがSERIALIZABLEならば,次による。 

1) 当該JavaクラスSJCEのreadObject()メソッドが,ESPiの値をPDiの値であるJava

オブジェクトに変換するために実行される。 

2) readObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記18 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で規定するように,U

の当該Javaクラスは,[J2SE]で規定とおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのreadObject()メソッ

ドを定義する。 

II) UISがSQLDATAならば,次による。 

1) 当該JavaクラスSJCEのreadSQL()メソッドが,ESPiの値をPDiの値であるJava

オブジェクトに変換するために実行される。 

2) readSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記19 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で規定するように,Uの当

該Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのreadSQL()メソッドを定義す

る。 

27 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

B) そうでなければ,Javaデータ型JPiのPDiの値には,ESPiの値が設定される。 

7) 1からENまでの各iに対して,Piが出力SQLパラメタ又は入出力SQLパラメタならば,次

による。 

A) [Java]で規定するように初期化された長さ1で,かつ,データ型JPiのJava配列をPADi

とする。 

注記20 PADiは,Java式new JPi [1]の実行によって実効的に作成されたJavaオブジェクトで

ある。 

B) Piが入出力パラメタならば,PADi [0]には,PDiが設定される。 

C) PDiは,PADiに置き換えられる。 

8) JPDL内のJavaデータ型の数をJPENとする。 

9) JPENがENより大きいならば,DYNAMIC RESULT SETパラメタのためのJavaパラメタを

次のとおり準備する。 

EN+1からJPENまでの各iに対して, 

A) [Java]で規定するように初期化された長さ1で,かつ,データ型JPiのJava配列をPADi

とする。 

注記21 PADiは,Java式new JPi [1]の実行によって実効的に作成されたJavaオブジェクトで

ある。 

B) PDiの値には,PADiの値が設定される。 

10) 当該Javaクラス名,当該Javaメソッド名及びRの実効的戻りデータ型を,それぞれ,JCLSN,

JMN及びERTとする。当該Javaクラスの当該Javaメソッドの呼出しは,次による。 

場合: 

A) RがSQL呼出し手続ならば,次による。 

I) JPENが0より大きいならば,次のJava文を実効的に実行する。 

JCLSN.JMN ( PD1, ..., PDJPEN ) ; 

II) JPENが0ならば,次のJava文を実効的に実行する。 

JCLSN.JMN ( ) ; 

B) Rが,ルーチン記述子がSTATICを示すSQL呼出し手続又はSQL呼出し通常関数ならば,

次による。 

I) ERTが利用者定義型ならば,ERTの当該Javaクラス及び当該Javaクラス名をそれぞれ,

SJCE及びSJCENとする。 

II) ERTが利用者定義型でないならば,当該JavaメソッドのJava戻りデータ型をSJCENと

する。 

III) JPENが0より大きいならば,次のJava文を実効的に実行する。 

SJCEN tempU = JCLSN.JMN ( PD1, ..., PDJPEN ) ; 

IV) JPENが0ならば,次のJava文を実効的に実行する。 

SJCEN tempU = JCLSN.JMN ( ) ; 

C) RがSQL呼出し構成メソッドならば,次による。 

I) JPENが1より大きいならば,次のJava文を実効的に実行する。 

JCLSN PD1 = new JCLSN ( PD2, ..., PDJPEN ) ; 

II) JPENが1ならば,次のJava文を実効的に実行する。 

28 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

JCLSN PD1 = new JCLSN ( ) ; 

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

I) ERTが利用者定義型ならば,ERTの当該Javaクラス及び当該Javaクラス名を,それぞ

れ,SJCE及びSJCENとする。 

II) ERTが利用者定義型でないならば,当該JavaメソッドのJava戻りデータ型をSJCENと

する。 

III) JPENが1より大きいならば,次のJava文を実効的に実行する。 

SJCEN tempU = PD1 . JMN ( PD2 , ..., PDJPEN ) ; 

IV) JPENが1ならば,次のJava文を実効的に実行する。 

SJCEN tempU = PD1 . JMN ( ) ; 

注記22 Java文SJCEN tempU = PD1 . JMN ( PD2 , ..., PDJPEN ) ; ,又はJava

文SJCEN tempU = PD1 . JMN ( ) ; のいずれかによって実効的に実行される

Javaメソッドは,[Java]で規定されるとおり,インスタンスメソッドを置換する

ためのJavaの規則に従って,PD1の値に基づいて決定される。 

8) 【一般規則8) f) ii) 4)の後に挿入する。】Rが外部Javaルーチンならば,Pの実行終了前にクラス変

数に加えられた変更の有効範囲及び永続性は,処理系依存とする。 

9) 【一般規則8) f) ii) 11)を置き換える。】言語がADA(それぞれC,COBOL,FORTRAN,JAVA,M,

PASCAL,PLI)を指定し,かつ,Pが標準適合Adaプログラム(それぞれC,COBOL,Fortran,Java,

M,Pascal,PL/Iプログラム)でないならば,Pの実行結果は,処理系依存とする。 

10) 【一般規則8) g) i)の前に挿入する。】Rが外部Javaルーチンで,かつ,受け取られていないJava例

外EでPの実行が終了するならば,“15.1 受け取られていないJava例外に対するクラス及びサブク

ラスの値”で規定する例外条件が引き起こされ,これ以上この細分箇条の一般規則は,適用されな

い。 

11) 【一般規則8) g) ii)の最初の文を置き換える。】Rが外部Javaルーチンならば,1からENまでの各i

に対して,ESPiの値には,PDiの値が設定される。 

12) 【一般規則8) h) i) 3)の後に挿入する。】Rが型保持関数でない外部Javaルーチンならば,Rの実効

的戻りデータ型をERTとする。Pの戻り値tempUは,次のとおりに処理される。 

a) 場合: 

i) 

ERTが利用者定義型ならば,次による。 

1) tempUの値の最特定JavaクラスをSJCEとし,その当該JavaクラスがSJCEであり,その利

用者定義型がERT又はERTのサブクラスである利用者定義型をSTUとする。 

2) STUの利用者定義型記述によって指定された<インタフェース指定>をUISとする。 

3) 場合: 

A) UISがSERIALIZABLEならば,次による。 

I) 

当該JavaクラスSJCEのwriteObject()メソッドが,tempUのJava値を利用者定義型

STUのSQL値SSFVに変換するために実行される。 

II) writeObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記23 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で規定するように,記

述子の当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのwriteObject()メソッド

29 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

を定義する。 

B) UISがSQLDATAならば,次による。 

I) 

当該JavaクラスSJCEのwriteSQL()メソッドが,tempUのJava値を利用者定義型STU

のSQL値SSFVに変換するために実行される。 

II) writeSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記24 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で規定するように,記述子の

当該Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのwriteSQL()メソッドを定義す

る。 

ii) そうでなければ,SSFVの値には,tempUの値が設定される。 

b) SSFVをRVとする。 

13) 【一般規則8) h) i) 3)の後に挿入する。】Rが型保持関数である外部Javaルーチンならば,Rの実効

的戻りデータ型をERTとする。Pの戻り値PD1は,次のとおりに処理される。 

a) PD1の値の最特定JavaクラスをSJCEとし,その当該JavaクラスがSJCEで,かつ,その利用者

定義型がERT又はERTのサブクラスである利用者定義型をSTUとする。 

b) STUの利用者定義型記述によって指定された<インタフェース指定>をUISとする。 

場合: 

i) 

UISがSERIALIZABLEならば,次による。 

1) 当該JavaクラスSJCEのwriteObject()メソッドが,PD1のJava値を利用者定義型STU

のSQL値SSFVに変換するために実行される。 

2) writeObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記25 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で規定するように,記述子

の当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのwriteObject()メソッドを定

義する。 

ii) UISがSQLDATAならば,次による。 

1) 当該JavaクラスSJCEのwriteSQL()メソッドが,PD1のJava値を利用者定義型STUのSQL

値SSFVに変換するために実行される。 

2) writeSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記26 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で規定するように,記述子の当該

Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのwriteSQL()メソッドを定義する。 

c) SSFVをRVとする。 

14) 【一般規則8) i) ii)の後に挿入する。】RがPARAMETER STYLE JAVAを指定するならば,出力SQL

パラメタ又は入出力SQLパラメタである各パラメタは,次のとおりに処理される。 

a) Rのi番目のSQLパラメタをPiとし,Piの宣言型をTiとする。 

b) EPViには,PDi [0]の値が設定される。 

場合: 

i) 

Tiが利用者定義型ならば,次による。 

1) EPViの値の最特定JavaクラスをSJCEとし,その当該JavaクラスがSJCEであり,その利

30 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

用者定義型がTi,又はTiのサブクラスである利用者定義型をSTUとする。 

2) STUの利用者定義型記述子で指定される<インタフェース指定>をUISとする。 

場合: 

A) UISがSERIALIZABLEならば,次による。 

I) 

当該JavaクラスSJCEのwriteObject()メソッドが,EPViのJava値を利用者定義型

STUのSQL値CPViに変換するために実行される。 

II) writeObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記27 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で規定するように,記

述子の当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのwriteObject()メソッド

を定義する。 

B) UISがSQLDATAならば,次による。 

I) 

当該JavaクラスSJCEのwriteSQL()メソッドが,EPViのJava値を利用者定義型STU

のSQL値CPViに変換するために実行される。 

II) writeSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記28 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で規定するように,記述子の

当該Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのwriteSQL()メソッドを定義す

る。 

ii) そうでなければ,CPViには,EPViが設定される。 

15) 【一般規則10) b)を置き換える。】Rが外部Javaルーチンでないならば,制御がINVに戻ったとき

に開いたままの当該ルーチンの本体で宣言された結果集合カーソルの実際の数をOPNとする。 

16) 【一般規則10) b)の後に挿入する。】Rが外部Javaルーチンならば,結果集合対応付け可能パラメタ

のために上記で生成されたJPEN-EN個の各配列の最初の要素を含む集合をRSNとし,Javaナル値

でないRSNの要素をRSとし,RSの要素数をOPNとする。 

17) 【一般規則10) d)の前に挿入する。】Rが外部Javaルーチンならば,次による。 

a) RSの要素を作成したJDBCコネクションオブジェクトが閉じているならば,その効果は,処理系

定義とする。 

b) RSの要素が現行SQLシステム及びSQLセションへの接続によって戻されたオブジェクトでない

ならば,その効果は,処理系定義とする。 

18) 【一般規則10) d)を置き換える。】Rが外部Javaルーチンでないならば,PRがINVに戻ったときに

開いたままの結果集合カーソルの順序付けられた集合をFRCとする。1 ≤ i ≤ RNTに対して,FRC

のi番目のカーソルをFRCiとし,FRCiを識別する<カーソル名>をFRCNiとし,FRCiの結果集

合をRCSiとする。 

19) 【一般規則10) d)の後に挿入する。】Rが外部Javaルーチンならば,開いたままのRSの要素のSQL

で開かれた順での写しをFRCとする。1 ≤ i ≤ RNTに対して,FRCのi番目のカーソルをFRCiとし,

FRCiを識別する<カーソル名>をFRCNiとし,FRCiの結果集合をRCSiとする。 

20) 【一般規則10) h)を置き換える。】Rが外部Javaルーチンでないならば,終了条件:警告−動的結果

集合が戻された (warning-dynamic result sets returned) が引き起こされる。 

21) 【一般規則10) h)の後に挿入する。】Rが外部Javaルーチンならば,RS中の各RSiに対して,RSi

31 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

を閉じ,RSiを作成した文オブジェクトを閉じる。 

22) 【一般規則11)の前に挿入する。】Rが外部Javaルーチンならば,Pの呼出しがJDBCで規定すると

おりに更新行数を戻すかどうかは,処理系定義とする。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J611“参照”なしでは,適合するSQL言語は,<参照値式>を

含んではならない。 

2) 【この適合性規則を挿入する。】機能J611“参照”なしでは,適合するSQL言語は,<右矢印>を含

んではならない。 

8.4 

<LANGUAGE句> 

この細分箇条は,ISO/IEC 9075-2の“10.2 <LANGUAGE句>”を修正する。 

機能 

<LANGUAGE句>は,標準プログラム言語を指定する。 

形式 

<言語名> ::= 

  !! ISO/IEC 9075-2中のすべての代替手段 

| JAVA 

構文規則 

追加の構文規則なし。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【一般規則1)を置き換える。】[Java]で標準が規定されているJAVA言語を除いて,<LANGUAGE句

>で指定された標準プログラム言語は,<言語名>のキーワードで識別される国際規格(又は一致す

るJIS)で定義される。ISO/IEC 9075-2の表15“標準プログラム言語”は,その<言語名>と国際規

格との関係を規定する。 

適合性規則 

追加の適合性規則なし。 

8.5 

配列戻し関数の実行 

この細分箇条は,ISO/IEC 9075-2の“9.14 配列戻し関数の実行”を修正する。 

機能 

配列値を戻す外部関数の実行を定義する。 

構文規則 

追加の構文規則なし。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【一般規則6)を置き換える。】場合: 

a) Pが外部Javaルーチンならば,EN-FRN-2をPN及びNとする。 

b) そうでなければ,Pの静的SQL引数リスト中の値の数をPN及びNとする。 

2) 【一般規則8)の先頭段落を置き換える。】Pが外部Javaルーチンではなく,呼出し型データ項目が

32 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

(“open call”を示す)-1の値をもつならば,Pは,そのパラメタ名がPNiであり,かつ,値が

次のとおりに設定されたEN個のパラメタPDiのリストとともに実行される。 

3) 【一般規則9)の前に挿入する。】Pが外部Javaルーチンで,かつ,呼出し型データ項目が(“open 

call”を示す)-1の値をもつならば,Pは,値が次のとおりに設定されたEN個のパラメタPDi

のリストとともに実行される。 

a) Pのために宣言されたJavaパラメタのデータ型をPの宣言に現れた順に順序付けたリストを

JPDLとする。 

注記29 Javaパラメタが配列クラスとして宣言されるならば,JPDLには,その情報が反映され

る。 

b) JPDLのi番目のJavaデータ型をJPDTiとする。 

c) PN+1からPN+FRNまでのiに対して,JPDTiの構成要素型をJPiとする。 

注記30 Java配列の構成要素型は,[Java]で規定されている。 

d) 1からPNまでのiに対して,ESPiの値がSQLナル値で,かつ,JPDTiがboolean,byte,short,

int,long,float又はdoubleのいずれかならば,例外条件:外部ルーチン呼出し例外−ナ

ル値は許されない (external routine invocation exception−null value not allowed) が引き起こされる。 

e) 1からPNまでのiに対して,次による。 

場合: 

i) 

ESPiが利用者定義型ならば,UをESPiの最特定型とし,Uの利用者定義型記述子によって指

定される<インタフェース指定>をUISとし,Uの当該JavaクラスをSJCUとする。 

場合: 

1) UISがSERIALIZABLEならば,次による。 

A) SJCUのメソッドreadObject()が実行され,ESPiの値をJavaオブジェクトPDiの値に

変換する。 

B) readObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記31 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で記述されるとおり,U

の当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのreadObject()メソッドを

定義する。 

2) UISがSQLDATAならば,次による。 

A) SJCUのメソッドreadSQL()が実行され,ESPiの値をJavaオブジェクトPDiの値に変換

する。 

B) readSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記32 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で記述されるとおり,Uの当該

Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのreadSQL()メソッドを定義する。 

ii) そうでなければ,PDiの値には,ESPiの値が設定される。 

f) PN+1からPN+FRNまでのiに対して,次による。 

i) 

[Java]で規定するように初期化された長さ1で,かつ,データ型JPiのJava配列をPADiとする。 

注記33 PADiは,Java式new JPi [1]の実行によって実効的に作成されたJavaオブジェクトである。 

ii) PDiは,PADiで置き換えられる。 

33 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

g) 退避領域データ項目に対して,EN-1と等しいiに対して,次による。 

i) 

場合: 

1) Javaデータ型JPDTiがjava.lang.Stringの配列クラスならば,[Java]で規定するように

初期化されたjava.lang.Stringの長さ1のJava配列をPADiとする。 

注記34 PADiは,Java式new java.lang.String[1]の実行によって実効的に生成されるJava

オブジェクトである。 

2) そうでなければ,退避領域データ項目の処理系定義の長さのjava.lang.StringBuffer

を生成する。処理系定義の長さをLNとし,Java式new java.lang.StringBuffer(LN)

の実行によって実効的に生成されるJavaオブジェクトをPADiとする。それから,PADiを

LN個のナル文字 (null character) (U+0000)で初期化する。 

ii) PDiは,PADiで置き換えられる。 

h) 呼出し型データ項目に対して,ENと等しいiに対して,PDiの値には,(“open call”を示す)

-1の値が設定される。 

i) 

Pの当該Javaクラス名及び当該Javaメソッド名を,それぞれ,JCLSN及びJMNとする。次のJava

式が実効的に実行される。 

JCLSN.JMN( PD1, ..., PDEN ); 

4) 【一般規則9) a)を置き換える。】Pが外部Javaルーチンではなく,かつ,例外データ項目の値が(終

了条件 成功終了 (successful completion) に対応する)ʼ00000ʼか,又はPが外部Javaルーチンでは

なく,かつ,例外データ項目の値の最初の2文字が(終了条件 部分条件付き警告 (warning) に対

応する)“01”ならば,呼出し型データ項目には,(fetch callを示す)0を設定する。 

5) 【一般規則9) b)の前に挿入する。】Pが外部Javaルーチンで,かつ,Pの前の呼出しが処理されて

いないJava例外(unhandled Java exception)で終了しなかったならば,呼出し型データ項目には,

(fetch callを示す)0を設定する。 

6) 【一般規則9) b)の先頭段落を置き換える。】Pが外部Javaルーチンではなく,かつ,例外データ項

目の値が(終了条件 データなし (no data) に対応する)ʼ02000ʼならば,次による。 

7) 【一般規則9) c)の前に挿入する。】Pが外部Javaルーチンであり,クラスjava.sql.SQLException,

又はそのようなクラスのサブクラスのインスタンスである処理されていないJava例外で,Pの前の

呼出しが終了し,かつ,そのインスタンスに対するメソッドgetSQLState()の呼出しの結果が,

(終了条件 データなし (no data) に対応する)ʼ02000ʼの値をもつjava.lang.Stringならば,

次による。 

a) PN+1からPN+FRNまでのiに対して,Javaクラスである各JPiが,PDiの最初の要素 ([0]) 中に

Javaナルである関連する値をもつならば,ARにナル値を設定する。 

b) 呼出し型データ項目に(“close call”を示す)1を設定する。 

8) 【一般規則10) a)の先頭段落を置き換える。】Pが外部Javaルーチンでないならば,パラメタ名が

PNiで,かつ,値が次のとおりに設定されたEN個のパラメタPDiのリストとともに,Pが実行さ

れる。 

9) 【一般規則10) b)の前に挿入する。】Pが外部Javaルーチンならば,値が次のとおりに設定された

EN個のパラメタPDiのリストとともに,Pが実行される。 

a) 1からPNまでのiに対して,次による。 

場合: 

34 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

i) 

ESPiが利用者定義型ならば,UをESPiの最特定型とし,Uの利用者定義型記述子によって指

定される<インタフェース指定>をUISとし,Uの当該JavaクラスをSJCUとする。 

場合: 

1) UISがSERIALIZABLEならば,次による。 

A) SJCUのメソッドreadObject()が実行され,ESPiの値をJavaオブジェクトPDiの値に

変換する。 

B) readObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記35 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で記述されるとおり,U

の当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのreadObject()メソッドを

定義する。 

2) UISがSQLDATAならば,次による。 

A) SJCUのメソッドreadSQL( )が実行され,ESPiの値をJavaオブジェクトPDiの値に変

換する。 

B) readSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記36 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で記述されるとおり,Uの当該

Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのreadSQL()メソッドを定義する。 

ii) そうでなければ,PDiの値には,ESPiの値が設定される。 

b) PN+1からPN+FRNまでのiに対して,次による。 

i) 

[Java]で規定するように初期化された長さ1で,かつ,データ型JPiのJava配列をPADiとする。 

注記37 PADiは,Java式new JPi [1]の実行によって実効的に作成されたJavaオブジェクトであ

る。 

ii) PDiは,PADiで置き換えられる。 

c) 退避領域データ項目に対して,EN-1と等しいiに対して,次による。 

i) 

場合: 

1) Javaデータ型JPiがjava.lang.Stringの配列クラスならば,Pの前の実行によって戻さ

れたjava.lang.Stringの値を含む,java.lang.Stringの長さ1のJava配列をPADi

とする。 

2) そうでなければ,Pの前に実行によって戻されたjava.lang.StringBufferの値を含む

長さLNのjava.lang.StringBufferをPADiとする。 

ii) PDiは,PADiで置き換えられる。 

d) 呼出し型データ項目に対して,ENと等しいiに対して,PDiの値には,(“fetch call”を示

す)値0が設定される。 

e) Pの当該Javaクラス名及び当該Javaメソッド名を,それぞれ,JCLSN及びJMNとする。次のJava

式が実効的に実行される。 

JCLSN.JMN( PD1, ..., PDEN ); 

10) 【一般規則10) b) i)の先頭段落を置き換える。】Pが外部Javaルーチンではなく,かつ,例外データ

項目の値が(終了条件 成功終了 (successful completion) に対応する)ʼ00000ʼ若しくは最初の2文

字が(終了条件 部分条件付き警告 (warning) に対応する)“01”か,又はPが外部Javaルーチン

35 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

で,かつ,Pの前の呼出しが処理されていないJava例外で終了しなかったならば,次による。 

11) 【一般規則10) b) i) 3) A)を置き換える。】Pが外部Javaルーチンではなく,かつ,(PN+FRN)+N+1

から(PN+FRN)+N+FRNまでのiに対して,各PDi(すなわち,結果データ項目に対応するSQL標

識引数)が負ならば,ナル値をARのE番目の要素とする。 

12) 【一般規則10) b) i) 3) A)の後に挿入する。】Pが外部Javaルーチンで,かつ,PN+1からPN+FRN

までのiに対して,Javaクラスである各JPiが,PDiの最初の要素 ([0]) 中にJavaナルである関連

する値をもつならば,ナル値をARのE番目の要素とする。 

13) 【一般規則10) b) i) 3) B) I)を置き換える。】Pが外部Javaルーチンではなく,FRNが1ならば,結

果データ項目の値をARのE番目の要素とする。 

14) 【一般規則10) b) i) 3) B) I)の後に挿入する。】Pが外部Javaルーチンならば,結果データ項目に対し

て,PN+1からPN+FRNまでのiに対して,次による。 

a) 場合: 

i) 

ESPiが利用者定義型ならば,次による。 

1) ESPiの値の最特定型をESTiとする。 

2) PDi [0]の値の最特定JavaクラスをSJCEとし,当該JavaクラスがSJCEであり,利用者定義

型がESTi又はESTiのサブクラスである利用者定義型をSTUとする。 

3) STUの利用者定義型記述子によって指定される<インタフェース指定>をUISとする。 

4) 場合: 

A) UISがSERIALIZABLEならば,次による。 

I) SJCEのメソッドwriteObject()が実行され,PDi [0]の値を利用者定義型STUの値SCi

へ変換する。 

II) writeObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記38 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で記述されるとおり,

記述子の当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのwriteObject()メソッド

を定義する。 

B) UISがSQLDATAならば,次による。 

I) SJCEのメソッドwriteSQL()が実行され,PDi [0]の値を利用者定義型STUの値SCiへ

変換する。 

II) writeSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記39 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で記述されるとおり,記述子

の当該Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのwriteSQL()メソッドを定義す

る。 

ii) そうでなければ,SCiの値には,PDi [0]の値が設定される。 

b) 場合: 

i) 

FRNが1ならば,SCiをARのE番目の要素とする。 

ii) そうでなければ,次の<行値式>の値をARのE番目の要素とする: 

ROW ( SV1, ..., SVFRN ) 

15) 【一般規則10) b) ii)の先頭段落を置き換える。】Pが外部Javaルーチンではなく,かつ,例外データ

36 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

項目の値が(終了条件 データなし (no data) に対応する)ʼ02000ʼか,又はPが外部Javaルーチン

であり,クラスjava.sql.SQLException,又はそのようなクラスのサブクラスのインスタンス

である処理されていないJava例外で,Pの前の呼出しが終了し,かつ,そのインスタンスに対する

メソッドgetSQLState()の呼出しの結果が,(終了条件 データなし (no data) に対応す

る)ʼ02000ʼの値をもつjava.lang.Stringならば,次による。 

16) 【一般規則11)の先頭段落を置き換える。】Pが外部Javaルーチンではなく,呼出し型データ項目が

(“close call”を示す)1の値をもつならば,Pは,そのパラメタ名がPNiであり,かつ,値が

次のとおりに設定されるEN個のパラメタPDiのリストとともに実行される。 

17) 【一般規則11)の後に挿入する。】Pが外部Javaルーチンで,かつ,呼出し型データ項目が(“close 

call”を示す)1の値をもつならば,Pは,値が次のとおりに設定されるEN個のパラメタPDiの

リストとともに実行される。 

a) 1からPNまでのiに対して,次による。 

場合: 

i) 

ESPiが利用者定義型ならば,UをESPiの最特定型とし,Uの利用者定義型記述子によって指

定される<インタフェース指定>をUISとし,Uの当該JavaクラスをSJCUとする。 

場合: 

1) UISがSERIALIZABLEならば,次による。 

A) SJCUのメソッドreadObject()が実行され,ESPiの値をJavaオブジェクトPDiの値に

変換する。 

B) readObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記40 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で記述されるとおり,U

の当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのreadObject()メソッドを

定義する。 

2) UISがSQLDATAならば,次による。 

A) SJCUのメソッドreadSQL()が実行され,ESPiの値をJavaオブジェクトPDiの値に変換

する。 

B) readSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記41 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で記述されるとおり,Uの当該

Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのreadSQL()メソッドを定義する。 

ii) そうでなければ,PDiの値には,ESPiの値が設定される。 

b) PN+1からPN+FRNまでのiに対して,次による。 

i) 

[Java]で規定するように初期化された長さ1で,かつ,データ型JPiのJava配列をPADiとする。 

注記42 PADiは,Java式new JPi [1]の実行によって実効的に作成されたJavaオブジェクトである。 

ii) PDiは,PADiで置き換えられる。 

c) 退避領域データ項目に対して,EN-1と等しいiに対して,次による。 

i) 

場合: 

1) Javaデータ型JPiがjava.lang.Stringの配列クラスならば,Pの前の実行によって戻さ

れたjava.lang.Stringの値を含む,java.lang.Stringの長さ1のJava配列をPADi

37 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

とする。 

2) そうでなければ,Pの前に実行によって戻されたjava.lang.StringBufferの値を含む

長さLNのjava.lang.StringBufferをPADiとする。 

ii) PDiは,PADiで置き換えられる。 

d) 呼出し型データ項目に対して,ENと等しいiに対して,PDiの値には,(“close call”を示

す)値1が設定される。 

e) Pの当該Javaクラス名及び当該Javaメソッド名を,それぞれ,JCLSN及びJMNとする。次のJava

式が実効的に実行される。 

JCLSN.JMN( PD1, ..., PDEN ); 

適合性規則 

追加の適合性規則なし。 

8.6 

Javaルーチン署名決定 

機能 

Javaルーチン署名決定(Java routine signature determination)は,Javaメソッドの署名が陽に指定されないな

らば,それがどのように決定されるのか,及び外部Javaルーチン若しくは外部Javaデータ型を作成した

ときに指定された情報,又はSQLルーチンを呼び出すときに適用可能な記述子の内容のいずれかに基づい

て,どのように有効化されるのかに関する規則を規定する。 

構文規則 

1) この細分箇条の適用において指定される構文要素,メソッド指定指標及び(あるならば,)当該ルー

チンを,それぞれ,CNTXT,i及びSRとする。 

2) この細分箇条の後の規則で必要な情報は,次のとおり,この細分箇条が実行される文脈に基づいて

集められる。 

場合: 

a) CNTXTが<SQL呼出ルーチン>を指定するならば,次による。 

i) 

<外部Java参照文字列>中に含まれる<JAR名>,<Javaクラス名>,<Javaメソッド名>及び<Java

パラメタ宣言リスト>を,それぞれ,JN,JCLSN,JMN及びJPDLとする。 

ii) <SQLパラメタ宣言リスト>をSPDLとする。 

iii) <SQL呼出ルーチン>が<スキーマ手続>を含むならば,次による。 

1) DYNAMIC RESULT SETS Nが0より大きいNに対して指定されるならば,NをDRSNとす

る。 

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

iv) <SQL呼出ルーチン>が<スキーマ関数>を含み,<SQL呼出ルーチン>が配列戻し外部関数又は

マルチ集合戻し外部関数を指定するならば,次による。 

1) <パラメタモード>OUTである<SQLパラメタ宣言>のコンマで区切られたリストを指定する

結果データ領域パラメタリストをRDPLとする。それらの<パラメタ型>は,“9.8 < SQL呼出

しルーチン>”で規定するとおりに,PN+1からPN+FRNまでの実効的なSQLパラメタリス

ト項目の<パラメタ型>として定義される。 

2) RDPLに,<コンマ>,並びに<データ型>が処理系定義の長さ及び文字集合SQL̲TEXTの文

字列であり,<パラメタモード>INOUTである<SQLパラメタ宣言>を追加する。 

3) RDPLに,<コンマ>,及び<データ型>が位取り0の真数型であり,<パラメタモード>INであ

38 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

る<SQLパラメタ宣言>を追加する。 

4) 入力パラメタ,結果データ項目パラメタ,並びに退避領域データ項目及び呼出し型データ項

目を含む<SQLパラメタ宣言リスト>を作成するために,SPDLに<コンマ>及びRPDLを追加

する。 

b) CNTXTが<利用者定義型定義>を指定するならば,次による。 

i) 

<利用者定義型定義>をUDTDとし,UDTD中に直に含まれる<利用者定義型本体>をUDTBと

し,UDTB中に直に含まれる<スキーマ解決利用者定義型名>をUDTNとする。 

ii) UDTB中に含まれる<外部Java型句>中に含まれる<JAR名>及び<Javaクラス名>を,それぞれ,

JN及びJCLSNとする。 

iii) “4.5 パラメタ対応付け”で規定するパラメタの対応付けのために,UDTDによって定義され

る利用者定義型の記述子がSQLセション中で既に適用可能であるものとして,この細分箇条の

残りの規則が実行される。その記述子は,名前UDTNをもち,外部Javaデータ型であり,UDTD

中に指定された<JAR及びクラス名>をもつ型を記述する。 

iv) UDTBによって含まれる<メソッド指定リスト>中のi番目の<メソッド指定>をMSiとする。 

v) MSiのRETURNS句中で指定されたSQL<データ型>をSRTとする。 

vi) 0をDRSNとする。 

vii) MSiが<静的フィールドメソッド指定>を直に含むならば,次による。 

1) MSiの<修飾付きJavaフィールド名>をQJFNとする。 

2) QJFN中に含まれる<Javaフィールド名>中に含まれる<Java識別子>をFIとする。 

3) QJFNが<Javaクラス名>を指定するならば,そのクラス名をSFCとする。そうでなければ,

JCLSNをSFCとする。 

4) 次の<SQLパラメタ宣言リスト>をSPDLとする。 

( ) 

viii) MSiが<静的フィールドメソッド指定>を直に含まないならば,次による。 

1) MSi中に含まれる<Javaメソッド及びパラメタ宣言>中に含まれる<Javaメソッド名>及び

<Javaパラメタ宣言リスト>を,それぞれ,JMN及びJPDLとする。 

2) MSiの拡張されたSQLパラメタ宣言リストNPLiをSPDLとする。 

3) MSiが配列戻し外部関数又はマルチ集合戻し外部関数を指定するならば,次による。 

A) <パラメタモード>OUTである<SQLパラメタ宣言>のコンマで区切られたリストを指定す

る結果データ領域パラメタリストをRDPLとする。それらの<パラメタ型>は,“9.8 <SQL

呼出しルーチン>”で規定するとおりに,PN+1からPN+FRNまでの実効的なSQLパラメ

タリスト項目の<パラメタ型>として定義される。 

B) RDPLに,<コンマ>,並びに<データ型>が処理系定義の長さ及び文字集合SQL̲TEXTの文

字列であり,<パラメタモード>INOUTである<SQLパラメタ宣言>を追加する。 

C) RDPLに,<コンマ>,及び<データ型>が位取り0の真数型であり,<パラメタモード>INで

ある<SQLパラメタ宣言>を追加する。 

D) 拡張されたSQLパラメタリスト,結果データ項目パラメタ,並びに退避領域データ項目及

び呼出し型データ項目を含む<SQLパラメタ宣言リスト>を作成するために,SPDLに<コ

ンマ>及びRPDLを追加する。 

c) そうでなければ,記述子が適用できる。 

39 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

i) 

SRのルーチン記述子をSRDとする。 

ii) SQL呼出しルーチンがSQL呼出しメソッドであることをSRDが示すならば,次による。 

1) 記述子がSRの対応するメソッド指定記述子MSDを含む利用者定義型をSRUDTとし,

SRUDTの利用者定義型記述子をSRUDTDとする。 

2) SRUDTDの<JAR及びクラス名>によって含まれる<JAR名>及び<javaクラス名>を,それぞ

れ,JN及びJCLSNとする。 

3) MSD中に指定されたSQLの<戻りデータ型>をSRTとする。 

4) 0をDRSNとする。 

5) MSDが静的フィールドメソッドであることを示すならば,次による。 

A) MSDの<Javaフィールド名>中に含まれる<Java識別子>をFIとする。 

B) MSDの<Javaクラス名>をSFCとする。 

C) 次の<SQLパラメタ宣言リスト>をSPDLとする。 

( ) 

6) MSDが静的フィールドメソッドではないことを示すならば,次による。 

A) MSD中に含まれるJavaルーチンのパッケージ,クラス及び名前から構成されるJavaメソ

ッド名,並びにMSD中に含まれる署名に含まれるJavaパラメタ宣言リストを,それぞれ,

JMN及びJPDLとする。 

B) MSDの拡張されたSQLパラメタ宣言リストをSPDLとする。 

iii) SQL呼出しルーチンがSQL呼出し手続又はSQL呼出し通常関数であることをSRDが示すなら

ば,次による。 

1) SRDの<外部ルーチン名>中に含まれる<外部Java参照文字列>中に含まれる<JAR名>,<Java

クラス名>,<Javaメソッド名>及び<Javaパラメタ宣言リスト>を,それぞれ,JN,JCLSN,

JMN及びJPDLとする。 

2) SRD中に含まれるSQL呼出しルーチンのSQLパラメタからなり,指定されるならば,<SQL

パラメタ名>,<データ型>,順序位置,及びSQLパラメタが入力SQLパラメタか,出力SQL

パラメタか,又は入出力SQLパラメタかを示す標識の記述子リストで指定されるSQLパラ

メタ宣言リストをSPDLとする。 

3) SQL呼出しルーチンがSQL呼出し手続ならば,SRDによって示される動的結果集合の最大

値をDRSNとする。そうでなければ,0をDRSNとする。 

4) SQL呼出しルーチンが,配列戻し外部関数又はマルチ集合戻し外部関数ではないSQL呼出し

通常関数ならば,MSD中で指定されたSQLの<戻りデータ型>をSRTとする。そうでなけれ

ば,“void”をSRTとする。 

5) SQL呼出しルーチンが,配列戻し外部関数又はマルチ集合戻し外部関数であるSQL呼出し通

常関数ならば,次による。 

A) <パラメタモード>OUTである<SQLパラメタ宣言>のコンマで区切られたリストを指定す

る結果データ領域パラメタリストをRDPLとする。それらの<パラメタ型>は,“9.8 <SQL

呼出しルーチン>”で規定するとおりに,PN+1からPN+FRNまでの実効的なSQLパラメ

タリスト項目の<パラメタ型>として定義される。 

B) RDPLに,<コンマ>,並びに<データ型>が処理系定義の長さ及び文字集合SQL̲TEXTの文

字列であり,<パラメタモード>INOUTである<SQLパラメタ宣言>を追加する。 

40 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

C) RDPLに,<コンマ>,及び<データ型>が位取り0の真数型であり,<パラメタモード>INで

ある<SQLパラメタ宣言>を追加する。 

D) 入力パラメタ,結果データ項目パラメタ,並びに退避領域データ項目及び呼出し型データ

項目を含む<SQLパラメタ宣言リスト>を作成するために,SPDLに<コンマ>及びRPDLを

追加する。 

3) 場合: 

a) JMNが“main”で,かつ,CNTXTが<利用者定義型定義>を指定しないか又は<メソッド呼出し

>を含まないかならば,次による。 

i) 

CNTXTが<SQL呼出しルーチン>を指定するならば,<スキーマ手続>を含まなければならず,<

動的結果集合特性>を含んではならない。 

ii) CNTXTが<ルーチン呼出し>を含むならば,<CALL文>を含まなければならない。 

iii) Javaパラメタ宣言リストJPDLが指定されるならば,次のとおりでなければならない。 

(java.lang.String[]) 

iv) Javaパラメタ宣言リストが指定されないならば,次の指定をJPDLとする。 

(java.lang.String[]) 

v) SPDLは,次のいずれかを指定しなければならない。 

1) SQLのCHARACTER型のARRAY又はCHARACTER VARYING型のARRAYである単一パ

ラメタ。実行時に,このパラメタは,次のJava配列として渡される。 

java.lang.String 

注記43 この<SQLパラメタ宣言>は,SQLシステムが機能S201“配列に関するSQLルーチン”

を提供するときに限り,指定してもよい。 

2) それぞれがCHARACTER型又はCHARACTER VARYING型である0個以上のパラメタ。実

行時に,これらのパラメタは,(潜在的に0個の要素をもつ)java.lang.StringのJava

配列として渡される。 

vi) JAR JN中でメソッド名が“main”であり,Javaパラメタデータ型リストがJPDLであるクラ

スJCLSNの可視のJavaメソッドの集合をJCSとする。 

注記44 “可視”は,“4.5 パラメタ対応付け”で規定している。 

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

i) 

SPDL中の<SQLパラメタ宣言>の数,及びJPDL中の<Javaデータ型>の数を,それぞれ,SPN

及びJPNとする。 

ii) JPDLが<SQLパラメタ宣言リスト>を指定するならば,次による。 

1) iが0より大きく,MSiがINSTANCE若しくはCONSTRUCTORを指定するか,又はSQL呼

出しルーチンがSQL呼出しメソッドであることをSRDが示し,それがインスタンスメソッ

ド若しくは構成子であることをMSDが示すかならば,次のとおり,必要な当該パラメタを

Javaパラメタ宣言リストJPDLの前に付ける。 

場合: 

A) JPDLが一つ以上の<Javaデータ型>を含むならば,次の指定を,JPDL中に直に含まれる

<Javaパラメタ>中に直に含まれる<Javaデータ型>の前に付ける。 

JCLSN , 

B) そうでなければ,JPDLを次の<SQLパラメタ宣言リスト>で置き換える。 

41 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

( JCLSN ) 

2) SPDL中の各<SQLパラメタ宣言>SPに対して,SPの<データ型>をSTとし,JPDL中の対応

する<Javaデータ型>をJTとする。 

A) SPがINを指定するか,又は<パラメタモード>を陽に指示しないならば,次による。 

I) SPがSQL配列でないならば,JT及びSTは,単純に対応付け可能か又はオブジェクト

対応付け可能でなければならない。 

II) SPがSQL配列ならば,JT及びSTは,配列対応付け可能でなければならない。 

B) SPがOUT又はINOUTを指定するならば,次による。 

場合: 

I) SPDLが退避領域データ項目で拡張され,かつ,SPがリスト中のSPN-1番目の項目(退

避領域データ項目)ならば,JT及びSTが出力対応付け可能か,又はJTがクラス

java.lang.StringBufferを指定するかのいずれかでなければならない。 

II) そうでなければ,JT及びSTは,出力対応付け可能でなければならない。 

注記45 “単純に対応付け可能”,“オブジェクト対応付け可能”及び“配列対応付け可能”

は,“4.5 パラメタ対応付け”で規定している。 

3) 場合: 

A) DRSNが0より大きいならば,JPNは,SPNより大きくなければならず,順序位置がSPN

より大きいJPDL中の各<Javaデータ型>は,結果集合対応付け可能でなければならない。 

B) そうでなければ,JPNは,SPNと等価でなければならない。 

iii) Javaパラメタ宣言リストが指定されないならば,SPDLからJavaパラメタ宣言リストJPDLの

最初のSPN個の要素を次のとおりに決定する。 

1) <パラメタモード>がINか又は<パラメタモード>を陽に指定しないSPDLの各パラメタSPに

対して,SPがSQL配列でないならば,SPの<パラメタ型>の対応するJavaデータ型をSPの

対応するJavaパラメタデータ型とする。SPがSQL配列ならば,SPの<パラメタ型>の対応

するJavaデータ型をJTとし,JTの配列,すなわち,JT[]をSPの対応するJavaパラメタ

データ型とする。 

注記46 SPの“対応するJavaデータ型”は,“4.5 パラメタ対応付け”で規定している。 

2) <パラメタモード>がINOUT又はOUTのSPDLの各パラメタSPに対して,SPの<パラメタ

型>の対応するJavaデータ型をJTとし,JTの配列,すなわち,JT[]をSPの対応するJava

パラメタデータ型とする。 

3) JPDLの<Javaパラメタ>は,SPDLの対応するJavaパラメタデータ型のリストとする。 

注記47 JPDLは,パラメタ名を指定しない。すなわち,Javaメソッドのパラメタ名は,SQLパ

ラメタ名と一致しなくてもよい。 

iv) <静的フィールドメソッド指定>の当該Javaフィールド,又は候補可視のJavaメソッドの集合

は,次のとおり決定される。 

場合: 

1) CNTXTが<SQL呼出しルーチン>を指定するか,又はSQL呼出しルーチンがSQL呼出し手

続又はSQL呼出し通常関数であることをSRDが示すならば,次による。 

A) DRSNが0より大きいならば,次による。 

I) SPDL中の<SQLパラメタ宣言>の数,及びJPDL中の<Javaデータ型>の数を,それぞれ,

42 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

SPN及びJPNとする。 

II) SPNがJPNと等価ならば,JPDLは,もともと指定されなかった。メソッド名がJMN

で,最初のSPN個のパラメタデータ型がJPDLのデータ型で,ある正のKに対して,最

後のK個のパラメタデータ型が結果集合対応付け可能であるJAR JN中のクラスJCLSN

の可視のJavaメソッドの集合をJCSとする。 

III) SPNがJPNより小さいならば,JPDLは,もともと指定された。メソッド名がJMNで,

Javaパラメタデータ型リストがJPDLであるJAR JN中のクラスJCLSNの可視のJava

メソッドの集合をJCSとする。 

B) DRSNが0ならば,メソッド名がJMNで,Javaパラメタデータ型リストがJPDLである

JAR JN中のクラスJCLSNの可視のJavaメソッドの集合をJCSとする。 

2) CNTXTが<利用者定義型定義>を指定するか,又はSQL呼出しルーチンがSQL呼出しメソッ

ドであることをSRDが示すならば,次による。 

A) iが0より大きく,MSiが<静的フィールドメソッド指定>を含むか,又はMSDが静的フィ

ールドメソッドであることを示すかのいずれかならば,次による。 

I) FIは,SFCのフィールドの名前でなければならない。そのフィールドをJSFとする。 

II) JSFは,公開静的フィールドでなければならない。 

III) JSFのJavaデータ型をJFTとする。 

IV) SRT及びJFTは,単純に対応付け可能か又はオブジェクト対応付け可能でなければなら

ない。 

注記48 “単純に対応付け可能”及び“オブジェクト対応付け可能”は,“4.5 パラメタ対応

付け”で規定している。 

V) JSFは,MSiによって定義されるSQL呼出しメソッドの当該静的フィールドとする。 

注記49 当該Javaクラスは,対応する属性及びメソッドが指定されないフィールド及びメソ

ッド(公開public及び非公開private)を含んでもよい。 

B) iが0より大きく,MSiが<静的フィールドメソッド指定>を直に含まないか,又はMSDが

静的フィールドメソッドではないことを示すかのいずれかならば,次による。 

I) 

場合: 

1) iが0より大きく,MSiがINSTANCE若しくはCONSTRUCTORを指定しているか,

又はMSDがインスタンスメソッド若しくは構成子であることを示すならば,JPDLは,

このメソッドに対する拡張されたJavaパラメタ宣言リストを含む。拡張されていない

Javaパラメタ宣言リストUAJPDLを生成するために,次のとおりに,Javaパラメタ宣

言リストJPDLから当該パラメタを取り除く。 

場合: 

a) JPDLが二つ以上の<Javaデータ型>を含むならば,最初の<Javaデータ型>JCLSN及

びそれに関連する“,”を除くすべてのJPDLをUAJPDLに複写する。 

b) そうでなければ,UAJPDLには,次の<Javaパラメタ宣言リスト>を設定する。 

( ) 

2) そうでなければ,JPDLをUAJPDLに複写する。 

II) “The Java Language Specification, Second Edition”で規定しているJavaオーバロード解

決を用いて,メソッド名がJMNで,Javaパラメタデータ型リストがUAJPDLであるJAR 

43 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

JN中のクラスJCLSN又はそのクラスの上位型の可視のJavaメソッドの集合をJCSとす

る。 

注記50 “可視”は,“4.5 パラメタ対応付け”で規定している。 

III) iが0より大きく,MSiがSTATICを指定するか,又はSTATICが指定されたことをMSD

が示すならば,静的ではないすべてのJavaメソッドをJCSから取り除く。そうでなけれ

ば,すべての静的JavaメソッドをJCSから取り除く。 

IV) iが0より大きく,MSiがCONSTRUCTORを指定するか,又はCONSTRUCTORが指定

されたことをMSDが示すならば,構成子ではないすべてのJavaメソッドをJCSから取

り除く。そうでなければ,構成子であるすべてのJavaメソッドをJCSから取り除く。 

4) 当該Javaメソッドは,次のとおり決定される。 

場合: 

a) CNTXTが<SQL呼出しルーチン>を指定するか,又はSQL呼出しルーチンがSQL呼出し手続又

はSQL呼出し通常関数であることをSRDが示すならば,次による。 

i) 

JCSは,ただ一つのJavaメソッドを含まなければならない。そのJavaメソッドをJMとする。

SQL呼出しルーチンは,JMと関連付けられる。 

ii) JMは,SQL呼出しルーチンの当該Javaメソッドとする。 

b) CNTXTが<利用者定義型定義>を指定するか,又はSQL呼出しルーチンがSQL呼出しメソッドで

あることをSRDが示すとき,iが0より大きく,MSiが<静的フィールドメソッド指定>を直に含

まないか,又はMSDが静的フィールドメソッドではないことを示すならば,次による。 

i) 

JCSは,ただ一つのJavaメソッドを含まなければならない。そのJavaメソッドをJMとする。

<Javaメソッド名>は,<メソッド名>の対応するJavaメソッド名 (corresponding Java method 

name) として参照される。 

ii) JMは,SQL呼出しメソッドの当該Javaメソッド (subject Java method) とする。 

5) SQL呼出しルーチンの結果データ型は,次のとおりに有効化される。 

場合: 

a) CNTXTが<SQL呼出しルーチン>を指定するか,又はSQL呼出しルーチンがSQL呼出し手続若

しくはSQL呼出し通常関数であることをSRDが示すならば,JMのJava戻りデータ型をJRTと

する。 

i) 

JMがSQL呼出し手続ならば,JRTは,voidでなければならない。 

ii) JMが配列戻し外部関数又はマルチ集合戻し外部関数ではないSQL呼出し通常関数ならば,JRT

及びSRTは,単純に対応付け可能か又はオブジェクト対応付け可能でなければならない。 

iii) JMが配列戻し外部関数又はマルチ集合戻し外部関数ならば,JRTは,voidでなければならな

い。 

b) CNTXTが<利用者定義型定義>を指定するか,又はSQL呼出しルーチンがSQL呼出しメソッドで

あることをSRDが示すとき,iが0より大きく,MSiが<静的フィールドメソッド指定>を直に含

まないか,又はMSDが静的フィールドメソッドではないことを示すならば,JMのJava戻りデ

ータ型をJRTとする。SELF AS RESULTが指示されないならば,JRT及びSRTは,単純に対応付

け可能か又はオブジェクト対応付け可能でなければならない。 

注記51 “単純に対応付け可能”及び“オブジェクト対応付け可能”は,“4.5 パラメタ対応付け”

で規定している。 

44 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

c) そうでなければ,当該静的フィールドのJavaデータ型をJRTとする。JRT及びSRTは,単純に

対応付け可能か又はオブジェクト対応付け可能でなければならない。 

アクセス規則 

なし。 

一般規則 

なし。 

適合性規則 

なし。 

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

この箇条は,ISO/IEC 9075-2の“11 スキーマ定義及びスキーマ操作”を修正する。 

9.1 

<スキーマ削除文> 

この細分箇条は,ISO/IEC 9075-2の“11.2 <スキーマ削除文>”を修正する。 

機能 

<スキーマ削除文> (<drop schema statement>) は,スキーマを破壊する。 

形式 

追加の形式項目なし。 

構文規則 

【“JAR,”を追加することによって構文規則3)を補う。】 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【一般規則1)の前に挿入する。】SQL処理系が機能J531“配置”を提供するならば,次による。 

a) S中に含まれる任意のJARの記述子中に含まれる修飾付き<JAR名>を含む<文字列定数>を,JNS

とする。 

b) 次の<CALL文>が実効的に実行される。 

CALL SQLJ.REMOVE̲JAR ( JNS, 1 ); 

2) 【一般規則13)の後に挿入する。】SQL処理系が機能J531“配置”を提供しないならば,次による。 

a) S中に含まれる任意のJARの記述子中に含まれる修飾付き<JAR名>を含む<文字列定数>を,JNS

とする。 

b) 次の<CALL文>が実効的に実行される。 

CALL SQLJ.REMOVE̲JAR ( JNS, 0 ); 

適合性規則 

追加の適合性規則なし。 

9.2 

表定義 

この細分箇条は,ISO/IEC 9075-2の“11.3 <表定義>”を修正する。 

機能 

表定義 (<table definition>) は,永続実表,作成される局所一時表,又は大域一時表を定義する。 

形式 

追加の形式項目なし。 

45 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

構文規則 

1) 【構文規則7) e)の後に挿入する。】STは,記述子がSERIALIZABLEの<インタフェース指定>を指

定する外部Javaデータ型であってはならない。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

追加の適合性規則なし。 

9.3 

<ビュー定義> 

この細分箇条は,ISO/IEC 9075-2の“11.22 <ビュー定義>”を修正する。 

機能 

<ビュー定義> (<view definition>) は,ビュー表を定義する。 

形式 

追加の形式項目なし。 

構文規則 

1) 【構文規則21) c)の後に挿入する。】STは,記述子がSERIALIZABLEの<インタフェース指定>を指

定する外部Javaデータ型であってはならない。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

追加の適合性規則なし。 

9.4 

<利用者定義型定義> 

この細分箇条は,ISO/IEC 9075-2の“11.41 <利用者定義型定義>”を修正する。 

機能 

<利用者定義型定義> (<user-defined type definition>) は,利用者定義型を定義する。 

形式 

<利用者定義型本体> ::= 

<スキーマ解決利用者定義型名> [ <下位型句> ] 

[ <外部Java型句> ] 

[ AS <表現> ] 

[ <利用者定義型選択肢リスト> ] [ <メソッド指定リスト> ] 

<外部Java型句> ::= 

<外部Javaクラス句> LANGUAGE JAVA <インタフェースUSING句> 

<インタフェースUSING句> ::= [ USING <インタフェース指定> ] 

<インタフェース指定> ::= 

SQLDATA 

| SERIALIZABLE 

46 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

<メソッド指定> ::= 

  !! ISO/IEC 9075-2中のすべての代替手段 

| <静的フィールドメソッド指定> 

<メソッド特性> ::= 

  !! ISO/IEC 9075-2中のすべての代替手段 

| <外部Javaメソッド句> 

<静的フィールドメソッド指定> ::= 

STATIC METHOD <メソッド名> <左括弧> <右括弧> 

<静的メソッドRETURNS句> [ SPECIFIC <特定メソッド名> ] 

<外部変数名句> 

<静的メソッドRETURNS句> ::= 

RETURNS <データ型> 

<外部変数名句> ::= 

EXTERNAL VARIABLE NAME <文字列定数> 

<外部Javaクラス句> ::= 

EXTERNAL NAME <文字列定数> 

<外部Javaメソッド句> ::= 

EXTERNAL NAME <文字列定数> 

<Javaメソッド及びパラメタ宣言> ::= 

<Javaメソッド名> [ <Javaパラメタ宣言リスト> ] 

構文規則 

1) 【構文規則3)の後に挿入する。】<外部Java型句>が指定されるならば,UDTは,外部Javaデータ

型 (external Java data type) とする。 

2) 【構文規則8) j) ii)を置き換える。】<下位型句>中に直に含まれる<上位型名>は,ある構造型SSTの

記述子を識別しなければならない。UDTは,SSTの直接下位型とし,SSTは,UDTの直接上位型

とする。UDTが外部Javaデータ型ならば,SSTは,外部Javaデータ型でなければならず,UDTの

当該Javaクラスは,SSTの当該Javaクラスの直接サブクラスでなければならない。UDTが外部Java

データ型でないならば,SSTは,外部Javaデータ型であってはならない。 

3) 【構文規則9)の前に挿入する。】<外部Java型句>が指定されているならば,次による。 

a) <外部Javaクラス句>中に直に含まれる<文字列定数>の値をVJCとする。VJCは,<JAR及びク

ラス名>の形式及び構文規則に適合しなければならない。<JAR及びクラス名>を直に含んでいる

<JAR識別子>によって識別されるJAR中の<Javaクラス名>によって識別されるJavaクラスは,

UDTの当該Javaクラス (subject Java class) とする。 

注記52 UDTの当該Javaクラスは,他の外部Javaデータ型の当該Javaクラスであってもよい。

そのような各外部Javaデータ型は,他のそのようなデータ型とは異なる。 

b) UDTの当該Javaクラスは,publicクラスでなければならず,Javaインタフェース

java.io.Serializable若しくはJavaインタフェースjava.sql.SQLData,又はそれらの両

方を実装しなければならない。 

c) <インタフェースUSING句>が陽に指定されないならば,処理系定義の<インタフェース指定>が

暗に想定される。 

47 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

d) SERIALIZABLEが指定されるならば,当該Javaクラスは,Javaインタフェース

java.io.Serializable

を実装しなければならない。メソッド

java.io.Serializable.writeObject()がJavaオブジェクトをSQL表現に変換するために

実効的に用いられ,メソッドjava.io.Serializable.readObject()がSQL表現をJavaオ

ブジェクトに変換するために実効的に用いられる。 

e) SQLDATAが指定されるならば,当該Javaクラスは,[JDBC]及び[J2SE]で規定しているとおりに,

Javaインタフェースjava.sql.SQLDataを実装しなければならない。メソッド

java.sql.SQLData.writeSQL()がJavaオブジェクトをSQL表現に変換するために実効的に

用いられ,メソッドjava.sql.SQLData.readSQL()がSQL表現をJavaオブジェクトに変換す

るために実効的に用いられる。 

f) 

<置換メソッド指定>は,指定してはならない。 

g) <既定義型>である<表現>は,指定してはならない。 

h) SELF AS LOCATORは,指定してはならない。 

i) 

<位置付け子標識>は,指定してはならない。 

4) 【構文規則9)の前に挿入する。】<外部Java型句>が指定されないならば,次による。 

a) <メソッド指定>は,<静的フィールドメソッド指定>を指定してはならない。 

b) <メソッド特性>は,<外部Javaメソッド句>を指定してはならない。 

c) <メソッド特性>中に直に含まれる<LANGUAGE句>は,JAVAを指定してはならない。 

5) 【構文規則9) a)の後に挿入する。】UDTが外部Javaデータ型ならば,陽に指定されるか又は暗に想

定される<Javaパラメタ宣言リスト>の妥当性確認が,<利用者定義型定義>によって実行されるか,

又は対応するSQL呼出しメソッドが呼び出されるときに実行されるかは,処理系定義とする。 

6) 【構文規則9) b) iii) 6)の後に挿入する。】UDTが外部Javaデータ型ならば,MSiの<Javaメソッド名

>中に直に含まれる<Java識別子>は,UDTの<JAR及びクラス名>中に直に含まれる<クラス識別子>

中に直に含まれる<Java識別子>と等価でなければならない。 

7) 【構文規則9) b) ix) 4) B)の後に挿入する。】UDTは,外部Javaデータ型であってはならない。 

8) 【構文規則9) b) x) 3)の後に挿入する。】UDTは,外部Javaデータ型であってはならない。 

9) 【構文規則9) b) xiii)の後に挿入する。】MSiが<静的メソッドフィールド指定>を指定するならば,

次による。 

a) MSiは,静的フィールドメソッド (static field method) を指定する。 

b) <静的メソッドフィールド指定>中に単純に含まれる<文字列定数>の値をVSFとする。VSFは,<

修飾付きJavaフィールド名>の形式及び構文規則に適合しなければならない。 

注記53 <静的メソッドフィールド指定>は,<修飾付きJavaフィールド名>によって指定される

Java静的フィールドの値を戻す利用者定義型の静的メソッドを定義する。これは,当該

Javaクラス又は当該Javaクラスのスーパクラスの静的フィールドにアクセスする読込み

専用のSQLで提供する略記である。 

10) 【構文規則9) b) xiv) 1)を置き換える。】MSiの<メソッド特性>は,高々一つの<LANGUAGE句>,

高々一つの<PARAMETER STYLE句>,高々一つの<決定的特性>,高々一つの<SQLデータアクセ

ス指示>,及び高々一つの<ナル呼出し句>を含まなければならない。UDTが外部Javaデータ型なら

ば,各属性の観測関数及び変異関数のために生成された暗に想定される<原メソッド指定>を除いて,

MSiの<メソッド特性>は,<メソッド特性>の<LANGUAGE句>又は<PARAMETER STYLE句>を含

48 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

んではならず,ただ一つの<外部Javaメソッド句>を含まなければならない。外部Javaデータ型に

対しては,<LANGUAGE句>及び<PARAMETER STYLE句>の両方がJAVAを暗に指定する。 

11) 【構文規則9) b) xiv) 1)の後に挿入する。】UDTが外部Javaデータ型ならば,<外部Javaメソッド句

>中に直に含まれる<文字列定数>の値をVMPとする。VMPは,<Javaメソッド及びパラメタ宣言>

の形式及び構文規則に適合しなければならない。 

12) 【構文規則9) b) xiv) 2)を置き換える。】UDTが外部Javaデータ型ではなく,<LANGUAGE句>が指

定されないならば,LANGUAGE SQLが暗に想定される。 

13) 【構文規則9) b) xiv) 6) B) I)を置き換える。】<パラメタ様式>が指定されず,UDTが外部Javaデー

タ型でないならば,PARAMETER STYLE SQLが暗に想定される。 

14) 【構文規則9) b) xv)の後に挿入する。】UDTが外部Javaデータ型で,かつ,<Javaパラメタ宣言リス

ト>の妥当性確認が処理系定義で<利用者定義型定義>によって実行されるならば,“8.6 Javaルーチ

ン署名決定”の構文規則が,<利用者定義型定義>,メソッド指定指標i,及び当該ルーチンなしで

適用される。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【一般規則1) g) vii)を置き換える。】<言語名>がSQL又はJAVAならば,陽に指定されるか又は暗

に想定される<パラメタ様式>。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,<外部Java

型句>を含み,かつ,<記述子ファイル>中に含まれない<利用者定義型定義>を含んではならない。 

2) 【この適合性規則を挿入する。】機能J591“オーバロード”なしでは,適合するSQL言語は,同じ

<利用者定義型定義>中の他のいずれかの<メソッド指定>の<メソッド名>と等価である<メソッド名

>を含む<メソッド指定>を含んではならない。 

3) 【この適合性規則を挿入する。】機能J641“静的フィールド”なしでは,適合するSQL言語は,<

静的フィールドメソッド指定>を含んではならない。 

4) 【この適合性規則を挿入する。】機能J541“SERIALIZABLE”なしでは,適合するSQL言語は,

SERIALIZABLEを含む<インタフェース指定>を含んではならない。 

5) 【この適合性規則を挿入する。】機能J551“SQLDATA”なしでは,適合するSQL言語は,SQLDATA

を含む<インタフェース指定>を含んではならない。 

6) 【この適合性規則を挿入する。】機能J622“外部Java型”なしでは,適合するSQL言語は,<外部

Java型句>を含む<利用者定義型定義>を含んではならない。 

9.5 

<属性定義> 

この細分箇条は,ISO/IEC 9075-2の“11.42 <属性定義>”を修正する。 

機能 

<属性定義>(<attribute definition>) は,構造型の属性を定義する。 

形式 

<属性定義> ::= 

<属性名> <データ型> 

[ <参照有効範囲検査> ] [ <属性既定値> ] 

49 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

[ <COLLATE句> ] [ <外部Java属性句> ] 

<外部Java属性句> ::= EXTERNAL NAME <文字列定数> 

構文規則 

1) 【構文規則1)の後に挿入する。】外部Javaデータ型でないか又は<型変更文>中に含まれない<利用

者定義型定義>中に<属性定義>が含まれるならば,<属性定義>は,<外部Java属性句>を指定しては

ならない。 

2) 【構文規則1)の後に挿入する。】<インタフェース指定>がSERIALIZABLEである外部Javaデータ

型を指定する<利用者定義型定義>中に<属性定義>が含まれるならば,<属性定義>は,<外部Java属

性句>を指定しなければならない。 

3) 【構文規則1)の後に挿入する。】<外部Java属性句>が指定されるならば,<属性定義>中に直に含ま

れる<文字列定数>の値をVFNとする。VFNは,<Javaフィールド名>の形式及び構文規則に適合し

なければならない。VFNの<Javaフィールド名>値は,<属性名>の対応するJavaフィールド名 

(corresponding Java field name) として参照される。 

4) 【構文規則1)の後に挿入する。】外部Javaデータ型を指定する<利用者定義型定義>中に<属性定義>

が含まれるならば,<参照有効範囲検査>,<属性既定値>及び<COLLATE句>を指定してはならない。 

5) 【構文規則1)の後に挿入する。】外部Javaデータ型を指定する<利用者定義型定義>中に<属性定義>

が含まれ,かつ,<属性定義>中に指定される<データ型>が構造型STならば,STは,外部Javaデ

ータ型でなければならない。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【一般規則3) e)の後に挿入する。】<属性定義>が<外部Java属性句>を含むならば,<属性名>の対応

するJavaフィールド名。 

2) 【一般規則4)を置き換える。】SQL呼出しメソッドOFが作成され,その署名及び結果データ型は,

Aの観測関数の原メソッド指定の記述子中で与えられるとおりとする。UDT中の値をVとする。 

場合: 

a) VがSQLナル値ならば,OFの呼出しV.AN()は,次の結果を戻す。 

CAST (NULL AS DT) 

b) UDTが,その記述子の<インタフェース指定>がSERIALIZABLEを指定する外部Javaデータ型で

ないならば,V.AN()は,V中のAの値を戻す。 

c) UDTが,その記述子の<インタフェース指定>がSERIALIZABLEを指定する外部Javaデータ型な

らば,Vの当該JavaクラスSJCEのreadObject()メソッドが,JavaオブジェクトをVの値か

ら得るために実効的に用いられ,<属性定義>によって含まれる<Javaフィールド名>中に指定され

る属性に対応するJavaフィールドがアクセスされる。そのJava値,及びその値の最特定Javaク

ラスを,それぞれ,JV,JCLSとする。 

場合: 

i) 

DTが利用者定義型ならば,次による。 

1) 当該JavaクラスがJCLSで,利用者定義型がDT,又はDTのサブクラスである利用者定義型

をSTUとする。 

2) STUの利用者定義型記述子によって指定される<インタフェース指定>をUISとする。 

50 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

3) 場合: 

A) UISがSERIALIZABLEならば,次による。 

I) 

当該JavaクラスJCLSのwriteObject()メソッドが,Java値JVを利用者定義型STU

のSQL値SVに変換するために実行される。 

II) writeObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記54 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で記述されるとおり,

記述子の当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのwriteObject()メソッド

を定義する。 

B) UISがSQLDATAならば,次による。 

I) 

当該JavaクラスJCLSのwriteSQL()メソッドが,Java値JVを利用者定義型STUの

SQL値SVに変換するために実行される。 

II) writeSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記55 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で記述されるとおり,記述子

の当該Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのwriteSQL()メソッドを定義す

る。 

C) そうでなければ,SVの値には,JVの値が設定される。 

4) V.AN()は,SVの値を戻す。 

3) 【一般規則5)を置き換える。】SQL呼出しメソッドMFが作成され,その署名及び結果データ型は,

Aの変異関数の原メソッド指定の記述子中に与えられるとおりとする。UDT中の値をVとし,DT

中の値をAVとする。 

場合: 

a) VがSQLナル値ならば,MFの呼出しV.AN(AV)は,例外条件:データ例外 (data exception )−変

異関数でナルインスタンスが用いられた (null instance used in mutator function) が引き起こされる。 

b) UDTが,その記述子の<インタフェース指定>がSERIALIZABLEを指定する外部Javaデータ型で

ないならば,呼出しV.AN(AV)は,V2.AN()=AVであり,UDTの他のすべての観測関数ANXに

対して,V2.ANX()=V.ANX()であるようなV2を戻す。 

c) UDTが,その記述子の<インタフェース指定>がSERIALIZABLEを指定する外部Javaデータ型な

らば,Vの当該JavaクラスSJCEのreadObject()メソッドが,JavaオブジェクトをVの値か

ら得るために実効的に用いられる。AVの最特定型,MSTの当該Javaクラス,及びreadObject()

から得られるJavaオブジェクトを,それぞれ,MST,JCLS,Jtempとする。 

i) 

場合: 

1) MSTが利用者定義型ならば,次による。 

A) MSTの利用者定義型記述子によって指定される<インタフェース指定>をUISとする。 

B) 場合: 

I) UISがSERIALIZABLEならば,次による。 

1) 当該JavaクラスJCLSのreadObject()メソッドが,AVの値をJavaオブジェクト

JVに変換するために実行される。 

2) readObject()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

51 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

注記56 UISがSERIALIZABLEならば,“9.4 <利用者定義型定義>”で記述されるとおり,

Uの当該Javaクラスは,[J2SE]で規定するとおりにJavaインタフェース

java.io.Serializableを実装し,インタフェースのreadObject()メソッ

ドを定義する。 

II) UISがSQLDATAならば,次による。 

1) 当該JavaクラスJCLSのreadSQL()メソッドが,AVの値をJavaオブジェクトJVに

変換するために実行される。 

2) readSQL()に関する当該Javaクラスの実装の実行方法は,処理系定義とする。 

注記57 UISがSQLDATAならば,“9.4 <利用者定義型定義>”で記述されるとおり,Uの

当該Javaクラスは,[JDBC]及び[J2SE]で規定するとおりにJavaインタフェース

java.sql.SQLDataを実装し,インタフェースのreadSQL()メソッドを定義す

る。 

2) そうでなければ,JVの値には,AVの値が設定される。 

ii) <属性定義>によって含まれる<Javaフィールド名>中に指定される属性に対応するJtempのJava

フィールドには,JVの値が代入される。 

iii) VのwriteObject()メソッドの当該JavaクラスSJCEが,Java値JtempからSQL値V2を得

るために実効的に用いられる。 

iv) 呼出しV.AN(AV)は,V2を戻す。 

適合性規則 

追加の適合性規則なし。 

9.6 

<型変更文> 

この細分箇条は,ISO/IEC 9075-2の“11.43 <型変更文>”を修正する。 

機能 

<型変更文> (<alter type statement>) は,利用者定義型の定義を変更する。 

形式 

追加の形式項目なし。 

構文規則 

1) 【構文規則1)の後に挿入する。】Dは,外部Javaデータ型であってはならない。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

追加の適合性規則なし。 

9.7 

<データ型削除文> 

この細分箇条は,ISO/IEC 9075-2の“11.49 <データ型削除文>”を修正する。 

機能 

<データ型削除文> (<drop data type statement>) は,利用者定義型を破壊する。 

形式 

追加の形式項目なし。 

52 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

構文規則 

追加の構文規則なし。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,外部Java

データ型を識別する<スキーマ解決利用者定義型名>を含み,かつ,<記述子ファイル>中に含まれな

い<データ型削除文>を含んではならない。 

2) 【この適合性規則を挿入する。】機能J622“外部Java型”なしでは,適合するSQL言語は,外部

Javaデータ型を識別する<スキーマ解決利用者定義型名>を含む<データ型削除文>を含んではなら

ない。 

9.8 

<SQL呼出しルーチン> 

この細分箇条は,ISO/IEC 9075-2の“11.50 <SQL呼出しルーチン>”を修正する。 

機能 

<SQL呼出しルーチン> (<SQL-invoked routine>) は,SQL呼出しルーチンを定義する。 

形式 

<パラメタ様式> ::= 

  !! ISO/IEC 9075-2中のすべての代替手段 

| Java 

<外部Java参照文字列>::= 

<JAR及びクラス名><ピリオド><Javaメソッド名> 

[<Javaパラメタ宣言リスト>] 

構文規則 

1) 【構文規則3)の後に挿入する。】<SQL呼出しルーチン>がLANGUAGE JAVAを指定するならば,

<SQL呼出し関数>中に指定される<SQLパラメタ宣言>は,RESULTを指定してはならない。 

2) 【構文規則3)の後に挿入する。】<SQL呼出しルーチン>がLANGUAGE JAVAを指定するならば,

<SQL呼出し関数>中に含まれる<RETURNS句>も,<SQL呼出し関数>又は<SQL呼出し手続>中に

含まれるどの<SQLパラメタ宣言>も,<位置付け子標識>を含んではならない。 

3) 【構文規則3)の後に挿入する。】<SQL呼出しルーチン>がLANGUAGE JAVAを指定するならば,<

変換グループ指定>を指定してはならない。 

4) 【構文規則3)の後に挿入する。】<最大動的結果集合数>の最大値は,処理系定義とする。 

5) 【構文規則5) b) i)を置き換える。】<メソッド指定指示子>中に直に含まれる<スキーマ解決利用者定

義型名>をUDTNとする。UDTNによって識別される利用者定義型をUDTとする。UDTは,外部

Javaデータ型であってはならない。 

6) 【構文規則6) a)を置き換える。】<ルーチン特性>は高々一つの<LANGUAGE句>,高々一つの

<PARAMETER STYLE句>,高々一つの<特定名>,高々一つの<決定的特性>,高々一つの<SQLデ

ータアクセス指示>,高々一つの<ナル呼出し句>,高々一つの<動的結果集合特性>を含まなければ

ならない。LANGUAGE JAVAが指定されるならば,<PARAMETER STYLE句>は,<パラメタ様式

53 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

>JAVAを指定しなければならない。 

7) 【構文規則6) i)を置き換える。】LANGUAGE SQLを指定するか又は暗に想定する<SQL呼出しルー

チン>は,SQLルーチン (SQL routine) と呼ばれる。LANGUAGE SQLを指定しない<SQL呼出しル

ーチン>は,外部ルーチン (external routine) と呼ばれる。LANGUAGE JAVAを指定する外部ルーチ

ンは,外部Javaルーチン (external Java routine) と呼ばれる。 

8) 【構文規則6) i)の後に挿入する。】Rが外部Javaルーチンならば,<外部本体参照>中に直に含まれ

る<外部ルーチン名>は,<文字列定数>を指定しなければならない。その<文字列定数>の値をVと

する。Vは,<外部Java参照文字列>の形式及び構文規則に適合しなければならない。 

注記58 Rは,<SQL呼出しルーチン>によって指定されるSQL呼出しルーチンであると,ISO/IEC 

9075-2で規定している。 

9) 【構文規則6) i)の後に挿入する。】Rが外部Javaルーチンならば,<Javaメソッド名>は,<Jar名>

によって指定されるJAR中の<Javaクラス名>によって指定されるクラス中の一つ以上のJavaメソ

ッドの名前とする。<Javaクラス名>と<Javaメソッド名>との組合せは,完全修飾付きJavaクラス

名及びメソッド名を表現する。メソッド名は,クラスのメソッド,又はクラスのスーパクラスのメ

ソッドを参照することができる。 

10) 【構文規則6) x) ii)を置き換える。】Rが外部Javaルーチンではない配列戻し外部関数又はマルチ集

合戻し外部関数ならば,PARAMETER STYLE SQLが陽に指定されるか又は暗に想定されなければ

ならない。 

11) 【構文規則6) x) iii)の最初の段落を置き換える。】Rが外部のJavaルーチンでないならば,次による。 

場合: 

12) 【構文規則20) e)の前に挿入する。】PARAMETER STYLE JAVAが指定されるならば,次による。 

a) 場合: 

i) 

Rが配列戻し外部関数又はマルチ集合戻し外部関数で,戻される配列の要素型又は戻されるマ

ルチ集合の要素型が行型ならば,要素型の次数をFRNとする。 

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

b) Rが配列戻し外部関数又はマルチ集合戻し外部関数ならば,2をAREFとする。そうでなければ,

0をAREFとする。 

c) RがSQL呼出し関数ならば,次のとおり,PN+FRN+AREF個のSQLパラメタのリストを実効的

なSQLパラメタリスト (effective SQL parameter list) とする。: 

i) 

1からPNまでのiに対して,i番目の実効的なSQLパラメタリスト項目は,i番目の<SQLパラ

メタ宣言>とする。 

ii) 場合: 

1) FRNが1ならば,実効的なSQLパラメタリスト項目PN+FRNは,<パラメタモード> OUT

をもつ。その<パラメタの型>PTは,次のとおりに定義される。 

A) <結果型変換>が指定されるならば,<結果CAST FROM型>をRTとする。そうでなければ,

<戻りデータ型>をRTとする。 

B) Rが配列戻し外部関数又はマルチ集合戻し外部関数ならば,RTの要素型をPTとする。 

C) Rが配列戻し外部関数でもマルチ集合戻し外部関数でもないならば,PTは,RTとする。 

2) そうでなければ,PN+1からPN+FRNのiに対して,i番目の実効的なSQLパラメタリスト

項目は,次のとおり定義される。 

54 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

A) その<パラメタモード>は,OUTとする。 

B) <戻りデータ型>の要素型の (i-PN) 番目のフィールドのデータ型をRFTi-PNとする。i番目

の実効的なSQLパラメタリスト項目の<パラメタの型>PTiは,RFTi-PNとする。 

iii) Rが配列戻し外部関数又はマルチ集合戻し外部関数ならば,次による。 

1) 実効的なSQLパラメタリスト項目 (PN+FRN)+1は,<データ型>が処理系定義の長さ及び文

字集合SQL̲TEXTの文字列であり,<パラメタモード>INOUTのSQLパラメタとする。 

2) 実効的なSQLパラメタ型リスト項目 (PN+FRN)+2は,<データ型>が位取り0の真数型であ

り,<パラメタモード>INのSQLパラメタとする。 

d) RがSQL呼出し手続ならば,PN個のSQLパラメタのリストを実効的なSQLパラメタリストと

する。1からPNまでのiに対して,i番目の実効的なSQLパラメタリスト項目は,i番目の<SQL

パラメタ宣言>とする。 

13) 【構文規則20) g)を置き換える。】<LANGUAGE句>がJAVAを指定しないならば,実効的なSQLパ

ラメタリスト項目のどの<データ型>も,ホストデータ型列中の対応する行が“なし”ではないSQL

データ型列中にリストされたデータ型を指定しなければならない。 

14) 【構文規則21)の前に挿入する。】 

注記59 LANGUAGE JAVAが指定されるときのパラメタの型対応のための規則は,“4.5 パラメタ

対応付け”で規定している。 

15) 【構文規則21)の前に挿入する。】Rが外部Javaルーチンならば,陽に指定されるか又は暗に想定さ

れる<Javaパラメタ宣言リスト>の妥当性確認が,<SQL呼出しルーチン>によって実行されるか,又

はそのSQL呼出しルーチンが呼び出されるときに実行されるかは,処理系定義とする。 

16) 【構文規則21)の前に挿入する。】Rが外部Javaルーチンで,かつ,<Javaパラメタ宣言リスト>の妥

当性確認が処理系定義で<SQL呼出しルーチン>によって実行されるならば,“8.6 Javaルーチン署

名決定”の構文規則が,<SQL呼出しルーチン>,0のメソッド指定指標,及び当該ルーチンなしで

適用される。 

アクセス規則 

1) 【アクセス規則1)の後に挿入する。】Rが外部Javaルーチンならば,Aに対する適用可能な権限は,

<外部Java参照文字列>中で参照されるJARに関するUSAGE権限を含まなければならない。 

注記60 R及びAへの参照は,ISO/IEC 9075-2の“11.50 <SQL呼出しルーチン>”の構文規則で規

定している。 

一般規則 

1) 【一般規則3) l) ii)を置き換える。】ルーチン記述子は,パラメタ受渡し様式がPARAMETER STYLE 

JAVAか,PARAMETER STYLE SQLか又はPARAMETER STYLE GENERALかどうかの標識を含む。 

2) 【一般規則6) a) i)の最初のテキストを置き換える。】Rが外部Javaルーチンではなく,かつ,Rの

記述子中の<SQLデータアクセス指示>がMODIFIES SQL DATA,READ SQL DATA又はCONTAINS 

SQLならば,次による。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,JAVAを

含む<言語名>を含み,かつ,<記述子ファイル>中に含まれない<SQL呼出しルーチン>を含んではな

らない。 

2) 【この適合性規則を挿入する。】機能J581“出力パラメタ”なしでは,適合するSQL言語は,JAVA

55 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

を含む<言語名>を含み,かつ,OUT又はINOUTのいずれかを含む<パラメタモード>を含む<SQL

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

3) 【この適合性規則を挿入する。】機能J521“JDBCデータ型”なしでは,適合するSQL言語は,い

ずれかのSQLデータ型に対応するJavaデータ型ではない<Javaデータ型>を含んではならない。 

4) 【この適合性規則を挿入する。】機能J621“外部Javaルーチン”なしでは,適合するSQL言語は,

JAVAを含む<言語名>を含む<SQL呼出しルーチン>を含んではならない。 

9.9 

<ルーチン変更文> 

この細分箇条は,ISO/IEC 9075-2の“11.51 <ルーチン変更文>”を修正する。 

機能 

<ルーチン変更文> (<alter routine statement>) は,SQL呼出しルーチンの特性を変更する。 

形式 

追加の形式項目なし。 

構文規則 

1) 【構文規則1)の後に挿入する。】SRは,外部Javaルーチンであってはならない。 

注記61 SRは,<ルーチン変更文>によって識別されるSQL呼出しルーチンとして定義されている。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

追加の適合性規則なし。 

9.10 <ルーチン削除文> 

この細分箇条は,ISO/IEC 9075-2の“11.52 <ルーチン削除文>”を修正する。 

機能 

<ルーチン削除文> (<drop routine statement>) は,SQL呼出しルーチンを破壊する。 

形式 

追加の形式項目なし。 

構文規則 

1) 【この構文規則を挿入する。】SRが外部Javaルーチンで,かつ,<ルーチン削除文>が<記述子ファ

イル>中に含まれるならば,<ルーチン削除文>は,PROCEDURE又はFUNCTIONの<ルーチン型>

を指定しなければならない。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,外部Java

ルーチンを識別する<特定ルーチン指示子>を含み,かつ,<記述子ファイル>中に含まれない<ルー

チン削除文>を含んではならない。 

2) 【この適合性規則を挿入する。】機能J621“外部Javaルーチン”なしでは,適合するSQL言語は,

56 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

外部Javaルーチンを識別する<特定ルーチン指示子>を含む<ルーチン削除文>を含んではならない。 

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

この細分箇条は,ISO/IEC 9075-2の“11.55 <利用者定義順序付け定義>”を修正する。 

機能 

<利用者定義順序付け定義> (<user-defined ordering definition>) は,利用者定義型のための利用者定義順序

付けを定義する。 

形式 

<順序付けカテゴリ> ::= 

  !! ISO/IEC 9075-2中のすべての代替手段 

| <比較可能カテゴリ> 

<比較可能カテゴリ>::=RELATIVE WITH COMPARABLE INTERFACE 

構文規則 

1) 【構文規則4)を置き換える。】<比較可能カテゴリ>,<相対的カテゴリ>,又は<状態カテゴリ>が指

定されるならば,UDTは,最上位型でなければならない。 

2) 【構文規則6)の前に挿入する。】<比較可能カテゴリ>が指定されるならば,UDTは,外部Javaデー

タ型でなければならない。その外部Javaデータ型の当該JavaクラスをJCとする。JCは,Javaイ

ンタフェースjava.lang.Comparableを実装しなければならない。 

3) 【構文規則6) b)の最初の段落を置き換える。】<比較可能カテゴリ>が指定されないならば,次によ

る。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【一般規則3) c)の前に挿入する。】<比較可能カテゴリ>が指定されるならば,UDTの利用者定義型

記述子中の順序付けカテゴリには,COMPATIBLEが設定される。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J622“外部Java型”なしでは,適合するSQL言語は,外部

Javaデータ型を識別する<スキーマ解決利用者定義型名>を含む<利用者定義順序付け定義>を含ん

ではならない。 

2) 【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,外部Java

データ型を識別する<スキーマ解決利用者定義型名>を含み,かつ,<記述子ファイル>中に含まれな

い<利用者定義順序付け定義>を含んではならない。 

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

この細分箇条は,ISO/IEC 9075-2の“11.56 <利用者定義順序付け削除文>”を修正する。 

機能 

<利用者定義順序付け削除文> (<drop user-defined ordering statement>) は,利用者定義順序付けメソッドを

破壊する。 

形式 

追加の形式項目なし。 

構文規則 

追加の構文規則なし。 

57 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J622“外部Java型”なしでは,適合するSQL言語は,外部

Javaデータ型を識別する<スキーマ解決利用者定義型名>を含む<利用者定義順序付け削除文>を含

んではならない。 

2) 【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,外部Java

データ型を識別する<スキーマ解決利用者定義型名>を含み,かつ,<記述子ファイル>中に含まれな

い<利用者定義順序付け削除文>を含んではならない。 

10 アクセス制御 

この箇条は,ISO/IEC 9075-2の“12 アクセス制御”を修正する。 

10.1 <GRANT権限文> 

この細分箇条は,ISO/IEC 9075-2の“12.2 <GRANT権限文>”を修正する。 

機能 

<GRANT権限文> (<grant privilege statement>) は,権限を定義する。 

形式 

追加の形式項目なし。 

構文規則 

追加の構文規則なし。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,<JAR名>

を直に含む<対象名>を含み,かつ,<記述子ファイル>中に含まれない<GRANT権限文>を含んでは

ならない。 

10.2 <権限> 

この細分箇条は,ISO/IEC 9075-2の“12.3 <権限>”を修正する。 

機能 

<権限> (<privileges>) は,権限を指定する。 

形式 

<対象名> ::= 

!! ISO/IEC 9075-2中のすべての代替手段 

| JAR<JAR名> 

構文規則 

1) 【構文規則3)を置き換える。】<対象名>が<定義域名>,<照合順名>,<文字集合名>,<文字変換名>,

58 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

<スキーマ解決利用者定義型名>,<順序数生成子名>又は<JAR名>を指定するならば,<権限>は

USAGEを指定しなければならない。そうでなければ,USAGEを指定してはならない。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

追加の一般規則なし。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J561“JAR権限”なしでは,適合するSQL言語は,<JAR名>

を直に含む<対象名>を含んではならない。 

10.3 <REVOKE文> 

この細分箇条は,ISO/IEC 9075-2の“12.7 <REVOKE文>”を修正する。 

機能 

<REVOKE文> (<revoke statement>) は,権限及び役割認可を破壊する。 

形式 

追加の形式項目なし。 

構文規則 

1) 【構文規則10) a) iii) 4)を置き換える。】P及びDは,両方ともUSAGE権限記述子とする。Pの動作,

及び識別される定義域,文字集合,照合順,文字変換,利用者定義型,順序数生成子又はJARは,

それぞれ,Dの動作,及び識別される定義域,文字集合,照合順,文字変換,利用者定義型,順序

数生成子又はJARと同じとする。 

2) 【構文規則29) b)の後に挿入する。】DTが外部Javaデータ型で,かつ,REVOKE破壊動作のために,

DTの記述子の<JAR及びクラス名>中に<JAR名>が含まれるJARに関する適用可能なUSAGE権限

をA1がもたなくなる。 

3) 【構文規則33)の後に挿入する。】S1中に含まれる任意のJAR記述子をJRとする。REVOKE破壊

動作のために,JRのSQL-Javaパス中に含まれる<解決JAR>中に名前が含まれるJARに関する適用

可能なUSAGE権限をA1がもたなくなるならば,JRは,影響を受ける (impacted) という。 

4) 【構文規則34) r)の後に挿入する。】RDが外部Javaルーチンならば,RDの記述子の<外部ルーチン

名>中に含まれる<外部Java参照文字列>中に<JAR名>が含まれるJARに関するUSAGE権限。 

5) 【構文規則36)の後に挿入する。】RESTRICTが指定されるならば,JARは,影響を受けてはならな

い。 

アクセス規則 

追加のアクセス規則なし。 

一般規則 

1) 【一般規則16)の後に挿入する。】<REVOKE文>の<対象名>によって識別されるオブジェクトが

<JAR名>を指定するならば,<JAR名>によって識別されるJARをJとする。影響を受けるどのJAR

記述子JRに対しても,直に含まれる<解決JAR>がJであるJRのSQL-Javaパス中に含まれる各<

パス要素>PE対して,JAR記述子JRのSQL-Javaパスが,PEを含まないように修正される。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,<JAR名>

を直に含む<対象名>を含み,かつ,<記述子ファイル>中に含まれない<REVOKE文>を含んではな

59 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

らない。 

11 組込み手続 

11.1 SQLJ.INSTALL̲JAR手続 

機能 

SQLJ.INSTALL̲JAR手続 (SQLJ.INSTALL̲JAR procedure) は,現行SQLカタログ及びスキーマに一連の

Javaクラスを組み込む。 

署名 

SQLJ.INSTALL̲JAR ( 

url IN 

CHARACTER VARYING (L ), 

jar IN 

CHARACTER VARYING (L ), 

deploy 

IN 

INTEGER ) 

ここで,Lは,処理系定義の整数値とする。 

アクセス規則 

1) SQLJ.INSTALL̲JAR手続を呼び出すために必要な権限は,処理系定義とする。 

一般規則 

1) SQLJ.INSTALL̲JAR手続は,SQLトランザクション内でSQLスキーマ文を実行するための処理系

定義の規則に従う。SQLJ.INSTALL̲JARの呼出しが例外条件を引き起こすならば,組込み動作に

対する効果は,処理系定義とする。 

2) 正しいurlパラメタの値は,処理系定義とし,形式が処理系定義であるURLを含んでもよい。url

パラメタの値が処理系定義の制限に適合しないで,正しいJARを識別しないならば,例外条件:Java 

DDL−URL が正しくない (invalid URL) が引き起こされる。 

3) jarパラメタの値をJとする。次の値をTJとする。 

TRIM ( BOTH ' ' FROM J ) 

TJが<JAR名>の形式及び構文規則に適合しないならば,例外条件:Java DDL−JAR名が正しく

ない (invalid JAR name) が引き起こされる。 

4) TJによって指定される<JAR名>中に指定され,陽に修飾されるか又は修飾が暗に想定される<JAR 

識別子>をJNとする。 

5) 名前がJNである組み込まれたJARが存在するならば,例外条件:Java DDL−JAR名が正しくない 

が引き起こされる。 

6) JARは,組み込まれ,名前JNと関連付けられる。JAR中に含まれる可視のJavaクラス及び可視で

ないJavaクラスの両方,並びに他の項目を含む,JARのすべての内容が組み込まれる。このJAR

は,それぞれの新しいクラスの関連付けられたJAR (associated JAR) となる。可視でないJavaクラ

ス及びその他の項目は,他のJavaメソッドによって参照することができる。 

7) jarパラメタの暗に想定されるか又は陽に指定される<スキーマ名>によって識別されるスキーマ

を所有する<認可識別子>に対して,jarパラメタによって識別されるJARに関するUSAGE権限を

定義する権限記述子が作成される。権限記述子に対する権限付与者には,特別な付与者の値

“̲SYSTEM”が設定される。この権限は,付与可能とする。 

8) deployパラメタの値が0ではなく,かつ,JARが一つ以上の配置記述子ファイルを含むならば,

これらのインスタンスによって想定される組込み動作は,配置記述子ファイルがマニフェスト中に

60 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

現れる順序で実行される。 

注記62 配置記述子ファイル及びそれらの組込み動作は,“4.11.1 配置記述子ファイル”で規定して

いる。 

適合性規則 

1) 機能J531“配置”なしでは,適合するSQL言語は,deployパラメタに0でない値を指定する

SQLJ.INSTALL̲JAR手続の呼出しを含んではならない。 

11.2 SQLJ.REPLACE̲JAR手続 

機能 

SQLJ.REPLACE̲JAR手続 (SQLJ.REPLACE̲JAR procedure) は,組み込まれたJARを置き換える。 

署名 

SQLJ.REPLACE̲JAR ( 

url IN 

CHARACTER VARYING (L ), 

jar IN 

CHARACTER VARYING (L ) ) 

ここで,Lは,処理系定義の整数値とする。 

アクセス規則 

1) SQLJ.INSTALL̲JAR手続を呼び出すために必要な権限は,処理系定義とする。 

2) 現行利用者は,jarパラメタの値によって指定されるJARの所有者でなければならない。 

一般規則 

1) SQLJ.REPLACE̲JAR手続は,SQLトランザクション内でSQLスキーマ文を実行するための処理系

定義の規則に従う。 

2) 正しいurlパラメタの値は,処理系定義とし,形式が処理系定義であるURLを含んでもよい。url

の値が正しいJARを識別するならば,そのJAR中のクラスを新しいクラス (new class) と呼ぶ。url

パラメタの値が正しいJARを識別しないならば,例外条件:Java DDL−URL が正しくない (invalid 

URL) が引き起こされる。 

3) jarパラメタの値をJとする。次の値をTJとする。 

TRIM ( BOTH ' ' FROM J ) 

TJが<JAR名>の形式及び構文規則に適合しないならば,例外条件:Java DDL−JAR名が正しく

ない (invalid JAR name) が引き起こされる。 

4) TJによって指定される<JAR名>中に指定され,陽に修飾されるか又は修飾が暗に想定される<JAR 

識別子>をJNとする。 

5) <JAR名> JNをもつ組み込まれたJARが存在するならば,そのJARを古いJAR (old JAR) と呼ぶ。

古いJAR中のクラスを古いクラス (old class) と呼ぶ。<JAR名> JNをもつ組み込まれたJARが存

在しないならば,例外条件:Java DDL−組み込まれていないJARの置換えを試みた (attempt to 

replace uninstalled JAR) が引き起こされる。JAR名の等価性は,ISO/IEC 9075-2 の“5.1 <トークン>

及び<分離符号>”で規定するとおりに,識別子の等価性のための規則によって決定される。 

6) 完全修飾付きクラス名が新しいクラスの名前である古いクラスを,一致する古いクラス (matching 

old class) とし,完全修飾付きクラス名が古いクラスの名前である新しいクラスを,一致する新しい

クラス (matching new class) とする。一致する古いクラスではない古いクラスを,一致しない古いク

ラス (unmatched old class) とし,一致する新しいクラスではない新しいクラスを,一致しない新し

いクラス (unmatched new class) とする。 

61 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

7) あるJARのJAR名と直に含まれる<JAR名>とが等価である<外部Java参照文字列>を記述子の<外

部ルーチン名>が指定するルーチンを,そのJARの従属SQLルーチン (dependent SQL routine) とす

る。 

8) 古いJARの任意の従属SQLルーチンが,一致しない古いクラス中のメソッドを参照するならば,

例外条件:Java DDL−クラスの削除が正しくない (invalid class deletion) が引き起こされる。 

注記63 この規則は,外部Javaルーチンによって参照されるクラスの削除を禁止する。しかし,こ

の禁止は,他のJavaクラスによって間接的にだけ参照されるクラスの削除を妨げない。 

9) 一致する古いクラス中のメソッドを参照する古いJARの各従属SQLルーチンに対して,SQLルー

チンを作成した<SQL呼出しルーチン>をCSとする。CSが,対応する新しいルーチンに対して正し

い<SQL呼出しルーチン>でないならば,例外条件:Java DDL−置換えが正しくない (invalid 

replacement) が引き起こされる。 

10) あるJAR中に含まれるJavaクラスを当該Javaクラスとしてもつ外部Javaデータ型を,そのJARの

従属SQL型 (dependent SQL type) とする。 

注記64 “当該Javaクラス”は,“9.4 <利用者定義型定義>”で規定している。 

11) 指定されたJARの任意の従属SQL型が存在し,それが一致しない古いクラスならば,例外条件:

Java DDL−クラスの削除が正しくないが引き起こされる。 

注記65 この規則は,外部Javaルーチンによって参照されるクラスの削除を禁止する。しかし,こ

の禁止は,他のJavaクラスによって間接的にだけ参照されるクラスの削除を妨げない。 

12) 各従属SQL型に対して,SQL型を作成した<利用者定義型定義>をCTとする。CTが,対応する新

しいクラスに対して正しい<利用者定義型定義>でないならば,例外条件:Java DDL−置換えが正し

くないが引き起こされる。 

13) 古いJAR,並びにそれに含まれるすべての可視の古いクラス及び可視でない古いクラスが削除され

る。 

14) 新しいJAR,並びに可視の新しいクラス及び可視でない新しいクラスが組み込まれ,指定された

<JAR名>と関連付けられる。そのJARは,それぞれの新しいクラスの関連付けられたJAR (associated 

JAR) となる。JAR中に含まれる可視のJavaクラス及び可視でないJavaクラスの両方,並びに他の

項目を含む,新しいJARのすべての内容が組み込まれる。可視でないJavaクラス及び他の項目は,

他のJavaメソッドによって参照することができる。 

15) 実装が置き換えられたSQLルーチン又は構造型を用いる現在実行中のSQL文に対する

SQLJ.REPLACE̲JARの効果は,処理系依存とする。 

適合性規則 

なし。 

11.3 SQLJ.REMOVE̲JAR手続 

機能 

SQLJ.REMOVE̲JAR手続 (SQLJ.REMOVE̲JAR procedure) は,組み込まれたJAR及びそのクラスを除去

する。 

署名 

SQLJ.INSTALL̲JAR ( 

jar   IN 

CHARACTER VARYING (L ), 

undeploy IN INTEGER ) 

62 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ここで,Lは,処理系定義の整数値とする。 

アクセス規則 

1) SQLJ.REMOVE̲JAR手続を呼び出すために必要な権限は,処理系定義とする。 

2) 現行利用者は,jarパラメタの値によって指定されるJARの所有者でなければならない。 

一般規則 

1) SQLJ.REMOVE̲JAR手続は,SQLトランザクション内でSQLスキーマ文を実行するための処理系

定義の規則に従う。SQLJ.REMOVE̲JARの呼出しが例外条件を引き起こすならば,除去動作に対す

る効果は,処理系定義とする。 

2) jarパラメタの値をJとする。次の値をTJとする。 

TRIM ( BOTH ' ' FROM J ) 

TJが<JAR名>の形式及び構文規則に適合しないならば,例外条件:Java DDL−JAR名が正しく

ない (invalid JAR name) が引き起こされる。 

3) TJによって指定される<JAR名>中に指定され,陽に修飾されるか又は修飾が暗に想定される<JAR 

識別子>をJNとする。 

4) <JAR名> JNをもつ組み込まれたJARが存在するならば,そのJARを古いJAR (old JAR) と呼ぶ。

古いJAR中のクラスを古いクラス (old class) と呼ぶ。<JAR名> JNをもつ組み込まれたJARが存

在しないならば,例外条件:Java DDL−組み込まれていないJARの除去を試みた (attempt to remove 

uninstalled JAR) が引き起こされる。JAR名の等価性は,ISO/IEC 9075-2の“5.2 <トークン>及び<

分離符号>”で規定するとおりに,識別子の等価性のための規則によって決定される。 

5) undeployパラメタの値が0ではなく,かつ,JARが一つ以上の配置記述子ファイルを含むならば,

これらのインスタンスによって暗に想定される除去動作は,配置記述子ファイルがマニフェスト中

に現れる順序の逆の順序で実行される。 

注記66 配置記述子ファイル及びそれらの除去動作は,“4.11.1 配置記述子ファイル”で規定してい

る。 

注記67 これらの動作は,次の段階で指定される条件の検証に先立って実行される。 

6) あるJARのJAR名と直に含まれる<JAR名>とが等価である<外部Java参照文字列>を記述子の<外

部ルーチン名>が指定するルーチンを,そのJARの従属SQLルーチン (dependent SQL routine) とす

る。 

7) 指定されたJARの任意の従属SQLルーチンが存在するならば,例外条件:Java DDL−クラスの削

除が正しくない (invalid class deletion) が引き起こされる。 

注記68 この規則は,外部Javaルーチンによって参照されるクラスの削除を禁止する。しかし,こ

の禁止は,他のJavaクラスによって間接的にだけ参照されるクラスの削除を妨げない。 

8) あるJAR中に含まれるJavaクラスを当該Javaクラスとしてもつ外部Javaデータ型を,そのJARの

従属SQL型 (dependent SQL type) とする。 

注記69 “当該Javaクラス”は,“9.4 <利用者定義型定義>”で規定している。 

9) 指定されたJARの任意の従属SQL型が存在するならば,例外条件:Java DDL−クラスの削除が正

しくない が引き起こされる。 

注記70 この規則は,外部Javaルーチンによって参照されるクラスの削除を禁止する。しかし,こ

の禁止は,他のJavaクラスによって間接的にだけ参照されるクラスの削除を妨げない。 

10) 指定されたJAR,並びにそれに含まれるすべての可視のクラス及び可視でないクラスが削除される。 

63 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

11) 指定されたJARに関するUSAGE権限が,それをもつすべての利用者からはく(剥)奪される。 

12) 実装が除去されたSQLルーチン又は構造型を用いる現在実行中のSQL文に対する

SQLJ.REMOVE̲JARの効果は,処理系依存とする。 

適合性規則 

1) 機能J531“配置”なしでは,適合するSQL言語は,undeployパラメタに0でない値を指定する

SQLJ.REMOVE̲JAR手続の呼出しを含んではならない。 

11.4 SQLJ.ALTER̲JAVA̲PATH手続 

機能 

SQLJ.ALTER̲JAVA̲PATH手続 (SQLJ.ALTER̲JAVA̲PATH procedure) は,JARのSQL-Javaパスを変更す

る。 

署名 

SQLJ.ALTER̲JAVA̲PATH ( 

jar   IN 

CHARACTER VARYING (L ), 

path   IN 

CHARACTER VARYING (L ) ) 

ここで,Lは,処理系定義の整数値とする。 

アクセス規則 

1) SQLJ.ALTER̲JAVA̲PATH手続を呼び出すために必要な権限は,処理系定義とする。 

2) 現行利用者は,jarパラメタの値によって指定されるJARの所有者でなければならない。 

3) 現行利用者は,pathパラメタ中で参照される各JARに関するUSAGE権限がもたなければならな

い。 

一般規則 

1) SQLJ.ALTER̲JAVA̲PATH手続は,SQLトランザクション内でSQLスキーマ文を実行するための

処理系定義の規則に従う。 

2) jarパラメタの値をJとする。次の値をTJとする。 

TRIM ( BOTH ' ' FROM J ) 

TJが<JAR名>の形式及び構文規則に適合しないならば,例外条件:Java DDL−JAR名が正しく

ない (invalid JAR name) が引き起こされる。 

3) TJによって指定される<JAR名>中に指定され,陽に修飾されるか又は修飾が暗に想定される<JAR 

識別子>をJNとする。 

4) SQLJ.ALTER̲JAVA̲PATH手続が呼び出されるとき,呼出し時点の現行カタログ及び現行スキーマ

は,pathパラメタの<解決JAR>中のそれぞれの省略された<カタログ名>及び<スキーマ名>のため

の既定値とする。これらの既定値は,後で規定するとおり,pathパラメタの後続するどの利用に

も適用される。 

5) pathパラメタの値が<SQL Javaパス>の形式に適合しないならば,例外条件:Java DDL−パス名が

正しくない (invalid path name) が引き起こされる。 

注記71 pathパラメタは,空又は空白文字列であってもよい。 

6) JNで示されるJARと関連付けられた現行パス(があるならば,それ)を置き換えて,pathパラメ

タの値は,そのJARと関連付けられたパスになる。 

7) SQLJ.ALTER̲JAVA̲PATH手続の呼出しが例外条件を引き起こすならば,JARと関連付けられたパ

スに対する効果は,処理系定義とする。 

background image

64 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

8) 既に準備されたか又は現在実行中のSQL文に対するSQLJ.ALTER̲JAVA̲PATHの効果は,処理系

依存とする。 

適合性規則 

1) 機能J601“SQL-Javaパス”なしでは,適合するSQL言語は,SQLJ.ALTER̲JAVA̲PATH手続の呼

出しを含んではならない。 

12 Javaについて 

12.1 この規格で提供するJavaの機能 

12.1.1 パッケージjava.sql 

この規格を実装するSQLシステムは,パッケージjava.sqlを提供し,それは,JDBCドライバ,及び

そのパッケージによって必要とされるすべてのクラスとする。この規格を実装するSQLシステムが提供す

る他のJavaパッケージについては,処理系定義とする。 

この規格を実装するSQLシステムでは,パッケージjava.sqlは,既定コネクション (default connection) 

を提供する。SQLルーチンとして呼び出されるJavaメソッドに対する既定コネクションは,次の特性をも

つ。 

− 既定コネクションは,データベースへの効率的なアクセスを提供するために先行して割り当てられ

る。 

− 既定コネクションは,現行セション及び現行トランザクション中に含まれる。 

− 既定コネクションの認可識別子は,現行認可識別子とする。 

− 既定コネクションのJDBC AUTO COMMITの設定は,偽 (false) とする。 

java.sqlによって提供されるその他のデータ源のURLは,処理系定義とする。 

12.1.2 システム特性 

この規格を実装するSQLシステムは,java.lang.SystemのgetPropertyメソッドによって利用す

るための次のシステム特性を提供する。 

表1−システム特性 

キー 

関連する値の説明 

sqlj.defaultconneciton 

JavaメソッドがSQL処理系中で実行しているならば,文字列
“jdbc:default:connection”1) 

sqlj.runtime 

実行時文脈クラスのクラス名2) 

注1) そうでなければ,ナル値。 
注2) このクラスは,クラスsqlj.runtime.RuntimeContextのサブクラスとする。名前が戻されるクラ

スのgetDefaultContex()メソッドでは,“12.1.1パッケージjava.sql”で規定している既定コネク
ションを戻す。 

12.2 配置記述子ファイル 

機能 

配置記述子ファイル (Deployment descriptor files) は,SQLJ.INSTAfLL̲JAR及びSQLJ.REMOVE̲JAR手

続によって実行される動作の情報を与える。 

モデル 

配置記述子ファイルは,JAR中に含まれるテキストファイルで,そのJARのマニフェスト中で次の特性

65 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

を指定する。 

Name: file̲name 

SQLJDeploymentDescriptor: TRUE 

特性 

配置記述子ファイル中に含まれるテキストは,次の形式でなければならない。 

<記述子ファイル> ::= 

SQLActions <左角括弧> <右角括弧> <等号演算子> 

{ [ <2重引用符> <アクショングループ> <2重引用符> 

[ <コンマ> <2重引用符> <アクショングループ> <2重引用符> ] ] } 

<アクショングループ> ::= 

  <組込み動作> 

| <除去動作> 

<組込み動作> ::= 

BEGIN INSTALL [ <コマンド> <セミコロン> ]... END INSTALL 

<除去動作> ::= 

BEGIN REMOVE [ <コマンド> <セミコロン> ]... END REMOVE 

<コマンド> ::= 

  <SQL文> 

| <処理系ブロック> 

<SQL文> ::= !! 記述参照 

<処理系ブロック> ::= 

BEGIN <処理系名> <SQLトークン>... END <処理系名> 

<処理系名> ::= <識別子> 

<SQLトークン> ::= !! 記述参照 

記述 

1) <記述子ファイル>は,高々一つの<組込み動作>及び高々一つの<除去動作>を含まなければならない。 

2) (あるならば,)<組込み動作>,及び(あるならば,)<除去動作>中に指定される<コマンド>は,そ

れぞれ,配置記述子ファイルの組込み動作 (install action) 及び除去動作 (remove action) を指定する。 

3) <組込み動作>中で指定する<SQL文>は,次のいずれかでなければならない。 

a) <LANGUAGE句>にJAVAを指定する<SQL呼出しルーチン>。それらの文によって作成される手

続及び関数は,配置記述子ファイルの配置ルーチン (deployed routine) と呼ぶ。 

b) 配置ルーチンに関するEXECUTE権限を指定する<GRANT権限文>。 

c) <外部Java型句>を指定する<利用者定義型定義>。それらの文によって作成される型は,配置記述

子ファイルの配置型 (deployed type) と呼ぶ。 

d) 配置型に関するUSAGE権限を指定する<GRANT権限文>。 

e) 配置型の順序付けを指定する<利用者定義順序付け定義>。 

4) 配置記述子ファイルがSQLJ.INSTALL̲JAR手続の呼出しによって実行されるとき,任意の<外部

ルーチン名>の<JAR名>又は<組込み動作>中の<SQL呼出しルーチン>が<JAR名>“thisjar”なら

ば,その実行のために,SQLJ.INSTALL̲JAR手続のjarパラメタで“thisjar”が実効的に置き

換えられる。 

66 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

5) <除去動作>中で指定する<SQL文>は,次のいずれかでなければならない。 

a) 配置ルーチンに対する<ルーチン削除文>。 

b) 配置ルーチンに関するEXECUTE権限の<REVOKE文>。 

c) 配置型に対する<データ型削除文>。 

d) 配置型に関するUSGAE権限の<REVOKE文>。 

e) 配置型の順序付けを指定する<利用者定義順序付け削除文>。 

6) <組込み動作>(<除去動作>)中に指定されるとき,<処理系ブロック>は,処理系定義の組込み動作

(除去動作)を指定する。 

7) <SQLトークン>は,ISO/IEC 9075-2の“5.2 <トークン>及び<分離符号>”中の“<トークン>”とい

う用語で規定するSQL語い単位とする。すなわち,<処理系ブロック>中の注釈,引用符及び2重引

用符は,SQLトークン規約に従う。 

8) <処理系名>は,処理系定義のSQL識別子とする。BEGINキーワードに続けて指定する<処理系名>

と,ENDキーワードに続けて指定する<処理系名>とは,等価でなければならない。 

9) <組込み動作>(<除去動作>)中に含まれる<処理系名>をもつ<処理系ブロック>を組込み動作(除去

動作)として解釈するかどうかは,処理系定義とする。すなわち,処理系は,他の処理系によって

指定される組込み動作(除去動作)を実行してもよいし,しなくてもよい。 

注記72 配置記述子ファイルの形式は,索引付き特性を提供する特性ファイルのより一般的な概念

に対応する。したがって,配置記述子ファイルは,[JavaBeans]中で規定しているとおりに,

索引付き特性SQLActionsをもつJava Beansをインスタンス化するためにSQL処理系に

よって用いることができる。結果のJava Beansのインスタンスを普通のJava Beansツール

で仕立てることができる。例えば,SQLActions特性中に格納されているルーチン記述子

を変更することによって,SQL手続又は許可を変更することができる。そして,SQLシス

テムは,JARの改訂版中で用いる配置記述子ファイルの修正版を生成するために,仕立て

られたJava Beansのインスタンスを用いることができる。 

適合性規則 

1) 機能J531“配置”なしでは,適合するSQL言語は,<利用者定義型定義>を含む<SQL文>を含んで

はならない。 

2) 機能J531“配置”なしでは,適合するSQL言語は,<データ型削除文>を含む<SQL文>を含んでは

ならない。 

3) 機能J531“配置”なしでは,適合するSQL言語は,<SQL呼出しルーチン>を含む<SQL文>を含ん

ではならない。 

4) 機能J531“配置”なしでは,適合するSQL言語は,<ルーチン削除文>を含む<SQL文>を含んでは

ならない。 

5) 機能J531“配置”なしでは,適合するSQL言語は,<利用者定義順序付け定義>を含む<SQL文>を

含んではならない。 

6) 機能J531“配置”なしでは,適合するSQL言語は,<利用者定義順序付け削除文>を含む<SQL文>

を含んではならない。 

7) 機能J531“配置”なしでは,適合するSQL言語は,<GRANT権限文>を含む<SQL文>を含んでは

ならない。 

8) 機能J531“配置”なしでは,適合するSQL言語は,<REVOKE文>を含む<SQL文>を含んではなら

67 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ない。 

13 情報スキーマ 

この箇条は,ISO/IEC 9075-11の“5 情報スキーマ”を修正する。 

13.1 JAR̲JAR̲USAGEビュー 

機能 

JAR̲JAR̲USAGEビュー (JAR̲JAR̲USAGE view) は,このカタログ中で定義されるJARが依存してい

る特定の利用者又は役割によって所有される各JARを識別する。 

定義 

CREATE VIEW JAR̲JAR̲USAGE AS 

 SELECT SPECIFIC̲CATALOG, SPECIFIC̲SCHEMA, SPECIFIC̲NAME, 

   JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME 

 FROM ( DEFINITION̲SCHEMA.JAR̲JAR̲USAGE JJU 

   JOIN 

     DEFINITION̲SCHEMA.JARS J 

   USING ( JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME ) ) 

  JOIN 

    DEFINITION̲SCHEMA.SCHEMATA S 

  ON ( ( JJU.PATH̲JAR̲CATALOG, JJU.PATH̲JAR̲SCHEMA ) 

    = ( S.CATALOG̲NAME, S.SCHEMA̲NAME ) ) 

 WHERE ( SCHEMA̲OWNER = CURRENT̲USER 

    OR 

     SCHEMA̲OWNER IN 

     ( SELECT ROLE̲NAME 

      FROM ENABLED̲ROLES ) ) 

   AND 

    JAR̲CATALOG = 

    ( SELECT CATALOG̲NAME 

     FROM INFORMATION̲SCHEMA̲CATALOG̲NAME ) ; 

GRANT SELECT ON TABLE JAR̲JAR̲USAGE 

  TO PUBLIC WITH GRANT OPTION; 

適合性規則 

1) 機能J652“SQL/JRT USAGE表”なしでは,適合するSQL言語は,INFORMATION̲SCHEMA . 

JAR̲JAR̲USAGE.を参照してはならない。 

13.2 JARSビュー 

機能 

JARSビュー (JARS view) は,現行利用者にアクセス可能なこのカタログ中で定義される組み込まれた

JARを識別する。 

定義 

CREATE VIEW JARS AS 

68 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 SELECT JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME 

 FROM DEFINITION̲SCHEMA.JARS 

 WHERE ( JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME, 'JAR' ) IN 

  ( SELECT OBJECT̲CATALOG, OBJECT̲SCHEMA, OBJECT̲NAME, OBJECT̲TYPE 

   FROM DEFINITION̲SCHEMA.USAGE̲PRIVILEGES 

   WHERE GRANTEE IN  

      ( 'PUBLIC', CURRENT̲USER ) 

     OR 

      GRANTEE IN 

      ( SELECT ROLE̲NAME 

       

FROM ENABLED̲ROLES ) ) 

    AND 

     JAR̲CATALOG = 

     ( SELECT CATALOG̲NAME 

      FROM INFORMATION̲SCHEMA̲CATALOG̲NAME ) ; 

GRANT SELECT ON TABLE JARS 

  TO PUBLIC WITH GRANT OPTION; 

適合性規則 

1) 機能J651“SQL/JRT情報スキーマ“なしでは,適合するSQL言語は,INFORMATION̲SCHEMA . JARS

を参照してはならない。 

13.3 METHOD̲SPECIFICATIONSビュー 

この細分箇条は,ISO/IEC 9075-11の“5.33 METHOD̲SPECIFICATIONSビュー”を修正する。 

機能 

METHOD̲SPECIFICATIONSビュー (METHOD̲SPECIFICATIONS view) は,特定の利用者又は役割にア

クセス可能なカタログ中のメソッドを識別する。 

定義 

【ISO/IEC 9075-11中に列EXTERNAL̲NAME及びIS̲FIELDを追加する。】<ビュー定義>の最も外側の

<選択リスト>の最後に,“, EXTERNAL̲NAME, IS̲FIELD”を追加する。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . METHOD̲SPECIFICATIONS . EXTERNAL̲NAMEを参照してはな

らない。 

2) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . METHOD̲SPECIFICATIONS . IS̲FIELDを参照してはならない。 

13.4 ROUTINE̲JAR̲USAGEビュー 

機能 

ROUTINE̲JAR̲USAGEビュー (ROUTINE̲JAR̲USAGE view) は,このカタログ中で定義される外部

Javaルーチンが依存している特定の利用者又は役割によって所有されるJARを識別する。 

定義 

CREATE VIEW ROUTINE̲JAR̲USAGE AS 

69 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 SELECT SPECIFIC̲CATALOG, SPECIFIC̲SCHEMA, SPECIFIC̲NAME, 

   JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME 

 FROM ( DEFINITION̲SCHEMA.ROUTINE̲JAR̲USAGE 

   JOIN 

     DEFINITION̲SCHEMA.ROUTINES 

   USING ( SPECIFIC̲CATALOG, SPECIFIC̲SCHEMA, SPECIFIC̲NAME ) ) 

  JOIN 

    DEFINITION̲SCHEMA.SCHEMATA S 

  ON ( ( JAR̲CATALOG, JAR̲SCHEMA ) = 

   ( S.CATALOG̲NAME, S.SCHEMA̲NAME ) ) 

 WHERE ( SCHEMA̲OWNER = CURRENT̲USER 

   OR 

    SCHEMA̲OWNER IN 

     ( SELECT ROLE̲NAME 

      FROM ENABLED̲ROLES ) ) 

  AND 

   SPECIFIC̲CATALOG = 

   ( SELECT CATALOG̲NAME 

    FROM INFORMATION̲SCHEMA̲CATALOG̲NAME ) ; 

GRANT SELECT ON TABLE ROUTINE̲JAR̲USAGE 

  TO PUBLIC WITH GRANT OPTION; 

適合性規則 

1) 機能J652“SQL/JRT USAGE表”なしでは,適合するSQL言語は,INFORMATION̲SCHEMA . 

ROUTINE̲JAR̲USAGEを参照してはならない。 

13.5 TYPE̲JAR̲USAGEビュー 

機能 

TYPE̲JAR̲USAGEビュー (TYPE̲JAR̲USAGE view) は,このカタログ中で定義される外部Javaデー

タ型が依存している特定の利用者又は役割によって所有されるJARを識別する。 

定義 

CREATE VIEW TYPE̲JAR̲USAGE AS 

 SELECT USER̲DEFINED̲TYPE̲CATALOG AS UDT̲CATALOG, 

   USER̲DEFINED̲TYPE̲SCHEMA AS UDT̲SCHEMA, 

   USER̲DEFINED̲TYPE̲NAME AS UDT̲NAME, 

   JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME 

 FROM ( DEFINITION̲SCHEMA.TYPE̲JAR̲USAGE 

   JOIN 

    DEFINITION̲SCHEMA.USER̲DEFINED̲TYPES 

   USING ( USER̲DEFINED̲TYPE̲CATALOG, USER̲DEFINED̲TYPE̲SCHEMA, 

     USER̲DEFINED̲TYPE̲NAME ) ) 

  JOIN 

70 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

   DEFINITION̲SCHEMA.SCHEMATA S 

  ON ( ( JAR̲CATALOG, JAR̲SCHEMA ) = 

   ( S.CATALOG̲NAME, S.SCHEMA̲NAME ) ) 

 WHERE ( SCHEMA̲OWNER = CURRENT̲USER 

   OR 

    SCHEMA̲OWNER IN 

    ( SELECT ROLE̲NAME 

     FROM ENABLED̲ROLES ) ) 

  AND 

   USER̲DEFINED̲TYPE̲CATALOG = 

   ( SELECT CATALOG̲NAME 

    FROM INFORMATION̲SCHEMA̲CATALOG̲NAME ) ; 

GRANT SELECT ON TABLE TYPE̲JAR̲USAGE 

  TO PUBLIC WITH GRANT OPTION; 

適合性規則 

1) 機能J652“SQL/JRT USAGE表”なしでは,適合するSQL言語は,INFORMATION̲SCHEMA . 

TYPE̲JAR̲USAGEを参照してはならない。 

13.6 USER̲DEFINED̲TYPESビュー 

この細分箇条は,ISO/IEC 9075-11の“5.72 USER̲DEFINED̲TYPESビュー”を修正する。 

機能 

USER̲DEFINED̲TYPESビュー (USER̲DEFINED̲TYPES view) は,特定の利用者又は役割にアクセス

可能なこのカタログ中で定義される利用者定義型を識別する。 

定義 

【ISO/IEC 9075-11のUSER̲DEFINED̲TYPESビューに列を追加する。】<ビュー定義>の最も外側の<選

択リスト>の最後に,“, EXTERNAL̲NAME, EXTERNAL̲LANGUAGE, JAVA̲INTERFACE”を追加する。 

適合性規則 

1) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . UDT̲S . EXTERNAL̲NAMEを参照してはならない。 

2) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . UDT̲S . EXTERNAL̲LANGUAGEを参照してはならない。 

3) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . UDT̲S . JAVA̲INTERFACEを参照してはならない。 

13.7 短い名前のビュー 

この細分箇条は,ISO/IEC 9075-11の“5.77 短い名前のビュー”を修正する。 

機能 

短い名前のビュー (Short name views) は,機能F391“長い識別子”を必要としない識別子だけを用いる

代替ビューを提供する。 

定義 

【ISO/IEC 9075-11のビューMETHOD̲SPECSを置き換える。】 

CREATE VIEW METHOD̲SPECS 

71 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

    ( SPECIFIC̲CATALOG, SPECIFIC̲SCHEMA, SPECIFIC̲NAME, 

    UDT̲CATALOG, UDT̲SCHEMA, UDT̲NAME, 

    METHOD̲NAME, IS̲STATIC, IS̲OVERRIDING, 

    IS̲CONSTRUCTOR, DATA̲TYPE, CHAR̲MAX̲LENGTH, 

    CHAR̲OCTET̲LENGTH, CHAR̲SET̲CATALOG, CHAR̲SET̲SCHEMA, 

    CHARACTER̲SET̲NAME, COLLATION̲CATALOG, COLLATION̲SCHEMA, 

    COLLATION̲NAME, NUMERIC̲PRECISION, NUMERIC̲PREC̲RADIX, 

    NUMERIC̲SCALE, DATETIME̲PRECISION, INTERVAL̲TYPE, 

    INTERVAL̲PRECISION, RETURN̲UDT̲CATALOG, RETURN̲UDT̲SCHEMA, 

    RETURN̲UDT̲NAME, SCOPE̲CATALOG, SCOPE̲SCHEMA, 

    SCOPE̲NAME, MAX̲CARDINALITY, DTD̲IDENTIFIER, 

    METHOD̲LANGUAGE, PARAMETER̲STYLE, IS̲DETERMINISTIC, 

    SQL̲DATA̲ACCESS, IS̲NULL̲CALL, TO̲SQL̲SPEC̲CAT, 

    TO̲SQL̲SPEC̲SCHEMA, TO̲SQL̲SPEC̲NAME, AS̲LOCATOR, 

    EXTERNAL̲NAME, IS̲FIELD, CREATED, 

    LAST̲ALTERED ) AS 

 SELECT SPECIFIC̲CATALOG, SPECIFIC̲SCHEMA, SPECIFIC̲NAME, 

    USER̲DEFINED̲TYPE̲CATALOG, USER̲DEFINED̲TYPE̲SCHEMA, USER̲DEFINED̲TYPE̲NAME, 

    METHOD̲NAME, IS̲STATIC, IS̲OVERRIDING, 

    IS̲CONSTRUCTOR, DATA̲TYPE, CHARACTER̲MAXIMUM̲LENGTH, 

    CHARACTER̲OCTET̲LENGTH, CHARACTER̲SET̲CATALOG, CHARACTER̲SET̲SCHEMA, 

    CHARACTER̲SET̲NAME, COLLATION̲CATALOG, COLLATION̲SCHEMA, 

    COLLATION̲NAME, NUMERIC̲PRECISION, NUMERIC̲PRECISION̲RADIX, 

    NUMERIC̲SCALE, DATETIME̲PRECISION, INTERVAL̲TYPE, 

    INTERVAL̲PRECISION, RETURN̲UDT̲CATALOG, RETURN̲UDT̲SCHEMA, 

    RETURN̲UDT̲NAME, SCOPE̲CATALOG, SCOPE̲SCHEMA, 

    SCOPE̲NAME, MAXIMUM̲CARDINALITY, DTD̲IDENTIFIER, 

    METHOD̲LANGUAGE, PARAMETER̲STYLE, IS̲DETERMINISTIC, 

    SQL̲DATA̲ACCESS, IS̲NULL̲CALL, TO̲SQL̲SPECIFIC̲CATALOG, 

    TO̲SQL̲SPECIFIC̲SCHEMA, TO̲SQL̲SPECIFIC̲NAME, AS̲LOCATOR, 

    EXTERNAL̲NAME, IS̲FIELD, CREATED, 

    LAST̲ALTERED 

 FROM INFORMATION̲SCHEMA.METHOD̲SPECIFICATIONS; 

【ISO/IEC 9075-11中のビューUDT̲Sを置き換える。】 

CREATE VIEW UDT̲S 

    ( UDT̲CATALOG, UDT̲SCHEMA, UDT̲NAME, 

    UDT̲CATEGORY, IS̲INSTANTIABLE, IS̲FINAL, 

    ORDERING̲FORM, ORDERING̲CATEGORY, ORDERING̲ROUT̲CAT, 

    ORDERING̲ROUT̲SCH, ORDERING̲ROUT̲NAME, REFERENCE̲TYPE, 

    DATA̲TYPE, CHAR̲MAX̲LENGTH, CHAR̲OCTET̲LENGTH, 

72 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

    CHAR̲SET̲CATALOG, CHAR̲SET̲SCHEMA, CHARACTER̲SET̲NAME, 

    COLLATION̲CATALOG, COLLATION̲SCHEMA, COLLATION̲NAME, 

    NUMERIC̲PRECISION, NUMERIC̲PREC̲RADIX, NUMERIC̲SCALE, 

    DATETIME̲PRECISION, INTERVAL̲TYPE, INTERVAL̲PRECISION, 

    SOURCE̲DTD̲ID, REF̲DTD̲IDENTIFIER, EXTERNAL̲NAME, 

    EXTERNAL̲LANGUAGE, JAVA̲INTERFACE ) AS 

 SELECT USER̲DEFINED̲TYPE̲CATALOG, USER̲DEFINED̲TYPE̲SCHEMA, USER̲DEFINED̲TYPE̲NAME, 

    CATEGORY, IS̲INSTANTIABLE, IS̲FINAL, 

    ORDERING̲FORM, ORDERING̲CATEGORY, ORDERING̲ROUTINE̲CATALOG, 

    ORDERING̲ROUTINE̲SCHEMA, ORDERING̲ROUTINE̲NAME, REFERENCE̲TYPE, 

    DATA̲TYPE, CHARACTER̲MAXIMUM̲LENGTH, CHARACTER̲OCTET̲LENGTH, 

    CHARACTER̲SET̲CATALOG, CHARACTER̲SET̲SCHEMA, CHARACTER̲SET̲NAME, 

    COLLATION̲CATALOG, COLLATION̲SCHEMA, COLLATION̲NAME, 

    NUMERIC̲PRECISION, NUMERIC̲PRECISION̲RADIX, NUMERIC̲SCALE, 

    DATETIME̲PRECISION, INTERVAL̲TYPE, INTERVAL̲PRECISION, 

    SOURCE̲DTD̲IDENTIFIER, REF̲DTD̲IDENTIFIER, EXTERNAL̲NAME, 

    EXTERNAL̲LANGUAGE, JAVA̲INTERFACE 

 FROM INFORMATION̲SCHEMA.USER̲DEFINED̲TYPES; 

適合性規則 

1) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . METHOD̲SPECS . EXTERNAL̲NAMEを参照してはならない。 

2) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . METHOD̲SPECS . IS̲FIELDを参照してはならない。 

3) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . UDT̲S . EXTERNAL̲NAMEを参照してはならない。 

4) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . UDT̲S . EXTERNAL̲LANGUAGEを参照してはならない。 

5) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL言語

は,INFORMATION̲SCHEMA . UDT̲S . JAVA̲INTERFACEを参照してはならない。 

14 定義スキーマ 

この細分箇条は,ISO/IEC 9075-11の“6 定義スキーマ”を修正する。 

14.1 JAR̲JAR̲USAGE実表 

機能 

JAR̲JAR̲USAGE実表は,JARのSQL-Javaパス中に含まれる各JARに対して一つの行をもつ。 

定義 

CREATE TABLE JAR̲JAR̲USAGE ( 

 JAR̲CATALOG INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲SCHEMA INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲NAME INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

73 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 PATH̲JAR̲CATALOG INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 PATH̲JAR̲SCHEMA INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 PATH̲JAR̲NAME INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 CONSTRAINT JAR̲JAR̲USAGE̲PRIMARY̲KEY 

  PRIMARY KEY ( JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME, 

   PATH̲JAR̲CATALOG, PATH̲JAR̲SCHEMA, PATH̲JAR̲NAME ), 

  CONSTRAINT JAR̲JAR̲USAGE̲CHECK̲REFERENCES̲JARS 

   CHECK ( PATH̲JAR̲CATALOG NOT IN 

    ( SELECT CATALOG̲NAME 

    FROM SCHEMATA ) 

    OR 

    ( PATH̲JAR̲CATALOG, PATH̲JAR̲SCHEMA, PATH̲JAR̲NAME ) IN 

    ( SELECT JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME 

    FROM JARS ) ), 

 CONSTRAINT JAR̲JAR̲USAGE̲FOREIGN̲KEY̲JARS 

  FOREIGN KEY ( JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME ) 

   REFERENCES JARS 

 ) 

記述 

1) JAR̲JAR̲USAGE実表は,JAR J に関連付けられた<SQL Javaパス>中に含まれる<JAR名>によっ

て識別される各JAR JPに対して一つの行をもつ。 

2) JAR̲CATALOG,JAR̲SCHEMA及びJAR̲NAMEの値は,それぞれ,記述されているJAR(J) の<JAR

名>の<カタログ名>,<修飾なしスキーマ名>及び<JAR識別子>とする。 

3) PATH̲JAR̲CATALOG,PATH̲JAR̲SCHEMA及びPATH̲JAR̲NAMEの値は,それぞれ,記述され

ているJAR Jに関連付けられた<SQL Javaパス>中のJAR(JP) の<JAR名>の<カタログ名>,<修飾な

しスキーマ名>及び<JAR識別子>とする。 

14.2 JARS実表 

機能 

JARS実表は,組み込まれた各JARに対して一つの行をもつ。 

定義 

CREATE TABLE JARS ( 

 JAR̲CATALOG INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲SCHEMA INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲NAME INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 CONSTRAINT JARS̲PRIMARY̲KEY 

  PRIMARY KEY ( JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME ), 

 CONSTRAINT JAR̲FOREIGN̲KEY̲SCHEMATA 

  FOREIGN KEY ( JAR̲CATALOG, JAR̲SCHEMA ) 

   REFERENCES SCHEMATA 

 ) 

74 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

記述 

1) JAR̲CATALOG,JAR̲SCHEMA及びJAR̲NAMEの値は,それぞれ,記述されているJARの<JAR

名>の<カタログ名>,<修飾なしスキーマ名>及び<JAR識別子>とする。 

14.3 METHOD̲SPECIFICATIONS実表 

この細分箇条は,ISO/IEC 9075-11の“6.30 METHOD̲SPECIFICATIONS実表”を修正する。 

機能 

METHOD̲SPECIFICATIONS実表は,各メソッド指定に対して一つの行をもつ。 

定義 

【ISO/IEC 9075-11中のCONSTRAINT METHOD̲SPECIFICATIONS̲LANGUAGE̲CHECKを置き換え

る。】 

 CONSTRAINT METHOD̲SPECIFICATIONS̲LANGUAGE̲CHECK 

  CHECK ( METHOD̲LANGUAGE IN 

   ( 'SQL', 'ADA', 'C', 'COBOL', 

   'FORTRAN', 'MUMPS', 'PASCAL','PLI', 'JAVA' ) ) 

【ISO/IEC 9075-11中に二つの列及び三つの制約を追加する。】METHOD̲SPECIFICATIONS実表の<表要

素リスト>に次の<表要素>を追加する。 

 EXTERNAL̲NAME INFORMATION̲SCHEMA.CHARACTER̲DATA, 

 IS̲FIELD INFORMATION̲SCHEMA.CHARACTER̲DATA 

 CONSTRAINT METHOD̲SPECIFICATIONS̲IS̲FIELD̲CHECK 

  CHECK ( IS̲FIELD IN ( 'YES', 'NO' ) ), 

 CONSTRAINT METHOD̲SPECIFICATIONS̲METHOD̲COMBINATIONS 

  CHECK ( ( ( METHOD̲LANGUAGE = 'JAVA' ) 

   AND 

   ( EXTERNAL̲NAME, IS̲FIELD ) IS NOT NULL ) 

   OR 

   ( ( METHOD̲LANGUAGE <> 'JAVA' ) 

   AND 

   ( ( EXTERNAL̲NAME, IS̲FIELD ) 

   IS NULL ) ) ), 

 CONSTRAINT METHOD̲SPECIFICATIONS̲FIELD̲COMBINATIONS 

  CHECK ( IS̲FIELD = 'NO' OR IS̲STATIC = 'YES' ) 

記述 

1) 【この記述を挿入する。】場合: 

a) 記述されているメソッドが外部Javaルーチンならば,EXTERNAL̲NAMEの値は,その外部Java

データ型に対して<外部Javaメソッド句>中に指定された<Javaメソッド及びパラメタ宣言>とす

る。 

b) 記述されているメソッドが外部Javaデータ型の静的フィールドならば,EXTERNAL̲NAMEの値

は,そのメソッドの<静的フィールドメソッド指定>中に指定された<修飾されるJavaフィールド

名>とする。 

c) そうでなければ,EXTERNAL̲NAMEの値は,ナル値とする。 

75 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

2) 【この記述を挿入する。】場合: 

a) 記述されているメソッドが外部Javaデータ型の静的フィールドならば,IS̲FIELDの値は,'YES'

とする。 

b) 記述されているメソッドが外部Javaデータ型ならば,IS̲FIELDの値は,'NO'とする。 

c) そうでなければ,IS̲FIELDの値は,ナル値とする。 

14.4 ROUTINE̲JAR̲USAGE実表 

機能 

ROUTINE̲JAR̲USAGE実表は,<外部Java参照文字列>でJARに名前を付けた各外部Javaルーチンに

対して一つの行をもつ。 

定義 

CREATE TABLE ROUTINE̲JAR̲USAGE ( 

 SPECIFIC̲CATALOG INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 SPECIFIC̲SCHEMA INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 SPECIFIC̲NAME INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲CATALOG INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲SCHEMA INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲NAME INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 CONSTRAINT ROUTINE̲JAR̲USAGE̲PRIMARY̲KEY 

  PRIMARY KEY ( SPECIFIC̲CATALOG, SPECIFIC̲SCHEMA, SPECIFIC̲NAME, 

   JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME ), 

 CONSTRAINT JAR̲JAR̲USAGE̲CHECK̲REFERENCES̲JARS 

  CHECK ( JAR̲CATALOG NOT IN 

   ( SELECT CATALOG̲NAME 

   FROM SCHEMATA ) 

   OR 

   ( JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME ) IN 

   ( SELECT JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME 

   FROM JARS ) ), 

 CONSTRAINT JAR̲JAR̲USAGE̲FOREIGN̲KEY̲ROUTINES 

  FOREIGN KEY (SPECIFIC̲CATALOG, SPECIFIC̲SCHEMA, SPECIFIC̲NAME ) 

   REFERENCES ROUTINES 

 ) 

記述 

1) ROUTINE̲JAR̲USAGE実表は,<外部Java参照文字列>でJARに名前を付けた各外部Javaルーチ

ンに対して一つの行をもつ。 

2) SPECIFIC̲CATALOG,SPECIFIC̲SCHEMA及びSPECIFIC̲NAMEの値は,それぞれ,記述されて

いる外部Javaルーチンの<特定名>の<カタログ名>,<修飾なしスキーマ名>及び<修飾される識別子

>とする。 

3) JAR̲CATALOG,JAR̲SCHEMA及びJAR̲NAMEの値は,それぞれ,外部Javaルーチンの<外部Java

参照文字列>中で参照されているJARの<JAR名>の<カタログ名>,<修飾なしスキーマ名>及び<JAR

76 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

識別子>とする。 

14.5 ROUTINES実表 

この細分箇条は,ISO/IEC 9075-11の“6.40 ROUTINES実表”を修正する。 

機能 

ROUTINES実表は,各SQL呼出しルーチンに対して一つの行をもつ。 

定義 

【ISO/IEC 9075-11中のCONSTRAINT EXTERNAL̲LANGUAGE̲CHECKを置き換える。】正しい

EXTERNAL̲LANGUAGE値の<IN値リスト>に,“, 'JAVA'”を追加する。 

記述 

追加の記述なし。 

14.6 TYPE̲JAR̲USAGE実表 

機能 

TYPE̲JAR̲USAGE実表は,各外部Javaデータ型に対して一つの行をもつ。 

定義 

CREATE TABLE TYPE̲JAR̲USAGE ( 

 USER̲DEFINED̲TYPE̲CATALOG INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 USER̲DEFINED̲TYPE̲SCHEMA INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 USER̲DEFINED̲TYPE̲NAME INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲CATALOG INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲SCHEMA INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 JAR̲NAME INFORMATION̲SCHEMA.SQL̲IDENTIFIER, 

 CONSTRAINT TYPE̲JAR̲USAGE̲PRIMARY̲KEY 

  PRIMARY KEY (USER̲DEFINED̲TYPE̲CATALOG, USER̲DEFINED̲TYPE̲SCHEMA, 

   USER̲DEFINED̲TYPE̲NAME, JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME), 

 CONSTRAINT TYPE̲JAR̲USAGE̲CHECK̲REFERENCES̲JARS 

  CHECK ( JAR̲CATALOG NOT IN 

   ( SELECT CATALOG̲NAME 

   FROM SCHEMATA ) 

   OR 

   ( JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME ) IN 

   ( SELECT JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME 

   FROM JARS ) ), 

 CONSTRAINT TYPE̲JAR̲USAGE̲FOREIGN̲KEY̲USER̲DEFINED̲TYPES 

  FOREIGN KEY (USER̲DEFINED̲TYPE̲CATALOG, USER̲DEFINED̲TYPE̲SCHEMA, 

   USER̲DEFINED̲TYPE̲NAME ) REFERENCES USER̲DEFINED̲TYPES 

 ) 

記述 

1) TYPE̲JAR̲USAGE実表は,各外部Javaデータ型に対して一つの行をもつ。 

2) USER̲DEFINED̲TYPE̲CATALOG,USER̲DEFINED̲TYPE̲SCHEMA及び 

USER̲DEFINED̲TYPE̲NAMEの値は,それぞれ,記述されている外部Javaデータ型の<利用者定

background image

77 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

義型名>の<カタログ名>,<修飾なしスキーマ名>及び<修飾される識別子>とする。 

3) JAR̲CATALOG,JAR̲SCHEMA及びJAR̲NAMEの値は,それぞれ,外部Javaデータ型の<外部Java

クラス句>中で参照されているJARの<JAR名>の<カタログ名>,<修飾なしスキーマ名>及び<JAR

識別子>とする。 

14.7 USAGE̲PRIVILEGES実表 

この細分箇条は,ISO/IEC 9075-11の“6.60 USAGE̲PRIVILEGES実表”を修正する。 

機能 

USAGE̲PRIVILEGES実表は,各USAGE権限記述子に対して一つの行をもつ。それは,USAGE権限記

述子の表現を実効的に含む。 

定義 

【ISO/IEC 9075-11中のCONSTRAINT USAGE̲PRIVILEGES̲OBJECT̲TYPE̲CHECKを置き換える。】

正しいOBJECT̲TYPE値の<IN値リスト>に,“, 'JAR'”を追加する。 

【ISO/IEC 9075-11中のCONSTRAINT USAGE̲PRIVILEGES̲CHECK̲REFERENCES̲OBJECTを置き換

える。】<IN述語>中に含まれる<問合せ式>の最後に次の指定を追加する。 

  UNION 

   SELECT JAR̲CATALOG, JAR̲SCHEMA, JAR̲NAME, 'JAR' 

   FROM JARS 

記述 

1) 【記述4)を補う。】 

JAR 

権限を適用する対象がJAR。 

14.8 USER̲DEFINED̲TYPES実表 

この細分箇条は,ISO/IEC 9075-11の“6.62 USER̲DEFINED̲TYPES実表”を修正する。 

機能 

USER̲DEFINED̲TYPES実表は,各利用者定義型に対して一つの行をもつ。 

定義 

【ISO/IEC 9075-11中のUSER̲DEFINED̲TYPES実表に三つの列を追加する。】 

【ISO/IEC 9075-11中にCONSTRAINT USER̲DEFINED̲TYPES̲COMBINATIONSを追加する。】 

USER̲DEFINED̲TYPES実表の<表要素リスト>に次の<表要素>を追加する。 

 EXTERNAL̲NAME INFORMATION̲SCHEMA.CHARACTER̲DATA, 

 EXTERNAL̲LANGUAGE INFORMATION̲SCHEMA.CHARACTER̲DATA 

  CONSTRAINT USER̲DEFINED̲TYPE̲EXTERNAL̲LANGUAGE̲CHECK 

   CHECK ( EXTERNAL̲LANGUAGE IN ( 'JAVA' ) ), 

 JAVA̲INTERFACE INFORMATION̲SCHEMA.CHARACTER̲DATA 

  CONSTRAINT USER̲DEFINED̲TYPE̲JAVA̲INTERFACE̲CHECK 

   CHECK ( JAVA̲INTERFACE IN ( 'SERIALIZABLE', 'SQLDATA' ) ), 

 CONSTRAINT USER̲DEFINED̲TYPES̲COMBINATIONS 

  CHECK ( ( ( EXTERNAL̲LANGUAGE = 'JAVA' ) AND 

   ( EXTERNAL̲NAME, JAVA̲INTERFACE ) IS NOT NULL ) 

   OR 

   ( ( EXTERNAL̲LANGUAGE, EXTERNAL̲NAME, JAVA̲INTERFACE ) 

background image

78 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

   IS NULL ) ) 

【ISO/IEC 9075-11中のCONSTRAINT  USER̲DEFINED̲TYPES̲ORDERING̲CATEGORY̲CHECKを

補う。】 

正しいORDERING̲CATEGORY値の<IN値リスト>に“, 'COMPARABLE'”を追加する。 

記述 

1) 【記述7)を補う。】 

COMPARABLE 

この型の二つの値は,java.lang.ComparableのcompareTo( )メソッドで比較してもよ
い。 

2) 【この記述を挿入する。】場合: 

a) 記述されている利用者定義型が外部Javaデータ型ならば,EXTERNAL̲NAMEの値は,その外部

Javaデータ型に対して<外部Javaクラス句>中に指定された<JAR及びクラス名>とする。 

b) そうでなければ,EXTERNAL̲NAMEの値は,ナル値とする。 

3) 【この記述を挿入する。】場合: 

a) 記述されている利用者定義型が外部Javaデータ型ならば,EXTERNAL̲LANGUAGEの値は,

'JAVA'とする。 

b) そうでなければ,EXTERNAL̲LANGUAGEの値は,ナル値とする。 

4) 【この記述を挿入する。】場合: 

a) 記述されている利用者定義型が外部Javaデータ型ならば,JAVA̲INTERFACEの値は,その外部

Javaデータ型に対して指定した<インタフェース指定>とする。 

b) そうでなければ,JAVA̲INTERFACEの値は,ナル値とする。 

15 状態コード 

この箇条は,ISO/IEC 9075-2の“23. 状態コード”を修正する。 

15.1 受け取られていないJava例外に対するクラス及びサブクラスの値 

Javaメソッドの実行が,受け取られていないJava例外Eで完了するときは,次による。 

1) Javaメソッド呼出しE.getMessage()の結果をEMとする。 

2) EMは,SQL例外と関連付けられるメッセージテキストとする。 

3) 場合: 

a) Eのクラスがjava.sql.SQLExceptionならば,Javaメソッド呼出しE.getSQLState()の結

果をSSとする。 

i) 

SSの長さが5以上で,SSの先頭の2文字が(外部ルーチン例外 (external routine exception) に

対応する)“38”で,かつ,3,4及び5番目の文字列が“000”でないならば,(外部ルーチン

例外に対応する)“38”をCとし,SSの3,4及び5番目の文字列をSCとする。 

ii) そうでなければ,(外部ルーチン呼出し例外 (external routine invocation exception) に対応する)

“39”をCとし,(不正なSQLSTATEが戻された (invalid SQLSTATE returned) に対応する)

“001”をSCとする。 

b) Eのクラスがjava.sql.SQLExceptionでないならば,(外部ルーチン例外に対応する)“38”

をCとし,(サブクラスなし (no subclass) に対応する)“000”をSCとする。 

4) C及びSCは,SQL例外に対するSQLSTATEのクラス及びサブクラスとする。 

background image

79 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

15.2 SQLSTATE 

この細分箇条は,ISO/IEC 9075-2の“23.1 SQLSTATE”を修正する。 

表2“SQLSTATEのクラス及びサブクラスの値”は,ISO/IEC 9075-2の表32“SQLSTATEのクラス及びサ

ブクラスの値”を修正する。 

表2−SQLSTATEのクラス及びサブクラスの値 

カテゴリ 

条件 

クラス 

部分条件 

サブクラス 

ISO/IEC 9075-2中のすべての

代替手段 

Java DDL1) 

46 

(サブクラスなし) 

000 

URLが正しくない 

001 

JAR名が正しくない 

002 

クラスの削除が正しくない 

003 

クラスの置換えが正しくない 

005 

組み込まれていないJARの置換えを試みた 

00A 

組み込まれていないJARの除去を試みた 

00B 

Java実行1) 

46 

(サブクラスなし) 

000 

パス中のJAR名が正しくない 

102 

クラス名が解決されていない 

103 

注1) 条件名“Java DDL”及び“Java実行”には,ISO/IEC 9075-10の条件名“OLB-特有誤り”と同じクラスコー

ドが与えられる。クラスコードに対する部分条件の値に重複はない。 

16 適合性 

16.1 SQL/JRTに対する適合性の主張 

ISO/IEC 9075-1の“8 適合性”の要件に加えて,この規格に対する適合性の主張は,次の適合性を主張

しなければならない。 

1) 次の少なくとも一つに対する適合性の主張。 

− 機能J621“外部Javaルーチン” 

− 機能J541“SERIALIZABLE” 

− 機能J551“SQLDATA” 

2) 次の少なくとも一つに対する適合性の主張。 

− 機能J511“コマンド” 

− 機能J531“配置” 

16.2 SQL/JRTに対するその他の適合性要件 

次の機能のうちの一つに対する適合性への各主張は,機能J511“コマンド”若しくは機能J531“配置”

又はその両方がそれを提供することを述べなければならない。 

− 機能J621“外部Javaルーチン” 

− 機能J622“外部Java型” 

− 機能J561“JAR権限” 

16.3 SQL/JRTの前提機能の関係 

background image

80 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

表3−SQL/JRTの前提機能の関係 

機能ID 

機能名 

前提機能ID 

前提機能名 

J541 

SERIALIZABLE 

J622 

外部Java型 

J551 

SQLDATA 

J622 

外部Java型 

81 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書A 

(参考) 

SQL適合性の要約 

この附属書は,ISO/IEC 9075-2の“附属書A SQL適合性の要約”を修正する。 

この附属書の内容は,機能ID及び細分箇条で順序付けて,すべての適合性規則を要約する。 

1) 機能J511“コマンド”に対する規定 

a) “9.4 <利用者定義型定義>” 

i) 

【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,<外

部Java型句>を含み,かつ,<記述子ファイル>中に含まれない<利用者定義型定義>を含んでは

ならない。 

b) “9.7 <データ型削除文>” 

i) 

【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,外部

Javaデータ型を識別する<スキーマ解決利用者定義型名>を含み,かつ,<記述子ファイル>中に

含まれない<データ型削除文>を含んではならない。 

c) “9.8 <SQL呼出しルーチン>” 

i) 

【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,JAVA

を含む<言語名>を含み,かつ,<記述子ファイル>中に含まれない<SQL呼出しルーチン>を含ん

ではならない。 

d) “9.10 <ルーチン削除文>” 

i) 

【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,外部

Javaルーチンを識別する<特定ルーチン指示子>を含み,かつ,<記述子ファイル>中に含まれな

い<ルーチン削除文>を含んではならない。 

e) “9.11 <利用者定義順序付け定義>” 

i) 

【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,外部

Javaデータ型を識別する<スキーマ解決利用者定義型名>を含み,かつ,<配置ファイル>中に含

まれない<利用者定義順序付け定義>を含んではならない。 

f) 

“9.12 <利用者定義順序付け削除文>” 

i) 

【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,外部

Javaデータ型を識別する<スキーマ解決利用者定義型名>を含み,かつ,<配置ファイル>中に含

まれない<利用者定義順序付け削除文>を含んではならない。 

g) “10.1 <GRANT権限文>” 

i) 

【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,<JAR

名>を直に含む<対象名>を含み,かつ,<記述子ファイル>中に含まれない<GRANT権限文>を

含んではならない。 

h) “10.3 <REVOKE文>” 

i) 

【この適合性規則を挿入する。】機能J511“コマンド”なしでは,適合するSQL言語は,<JAR

名>を直に含む<対象名>を含み,かつ,<記述子ファイル>中に含まれない<REVOKE文>を含ん

ではならない。 

82 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

2) 機能J521“JDBCデータ型”に対する規定 

a) “9.8 <SQL呼出しルーチン>” 

i) 

【この適合性規則を挿入する。】機能J521“JDBCデータ型”なしでは,適合するSQL言語は,

いずれかのSQLデータ型に対応するJavaデータ型ではない<Javaデータ型>を含んではならな

い。 

3) 機能J531“配置”に対する規定 

a) “11.1 SQLJ.INSTALL̲JAR手続” 

i) 

機能J531“配置”なしでは,適合するSQL言語は,deployパラメタに0でない値を指定する

SQLJ.INSTALL̲JAR手続の呼出しを含んではならない。 

b) “11.3 SQLJ.REMOVE̲JAR手続” 

i) 

機能J531“配置”なしでは,適合するSQL言語は,undeployパラメタに0でない値を指定

するSQLJ.REMOVE̲JAR手続の呼出しを含んではならない。 

c) “12.2 配置記述子ファイル” 

i) 

機能J531“配置”なしでは,適合するSQL言語は,<利用者定義型定義>を含む<SQL文>を含

んではならない。 

ii) 機能J531“配置”なしでは,適合するSQL言語は,<データ型削除文>を含む<SQL文>を含ん

ではならない。 

iii) 機能J531“配置”なしでは,適合するSQL言語は,<SQL呼出しルーチン>を含む<SQL文>を

含んではならない。 

iv) 機能J531“配置”なしでは,適合するSQL言語は,<ルーチン削除文>を含む<SQL文>を含ん

ではならない。 

v) 機能J531“配置”なしでは,適合するSQL言語は,<利用者定義順序付け定義>を含む<SQL文

>を含んではならない。 

vi) 機能J531“配置”なしでは,適合するSQL言語は,<利用者定義順序付け削除文>を含む<SQL

文>を含んではならない。 

vii) 機能J531“配置”なしでは,適合するSQL言語は,<GRANT権限文>を含む<SQL文>を含ん

ではならない。 

viii) 機能J531“配置”なしでは,適合するSQL言語は,<REVOKE文>を含む<SQL文>を含んでは

ならない。 

4) 機能J541“SERIALIZABLE”に対する規定 

a) “9.4 <利用者定義型定義>” 

i) 

【この適合性規則を挿入する。】機能J541“SERIALIZABLE”なしでは,適合するSQL言語は,

SERIALIZABLEを含む<インタフェース指定>を含んではならない。 

5) 機能J551“SQLDATA”に対する規定 

a) “9.4 <利用者定義型定義>” 

i) 

【この適合性規則を挿入する。】機能J551“SQLDATA”なしでは,適合するSQL言語は,

SQLDATAを含む<インタフェース指定>を含んではならない。 

6) 機能J561“JAR権限”に対する規定 

a) “10.2 <権限>” 

i) 

【この適合性規則を挿入する。】機能J561“JAR権限”なしでは,適合するSQL言語は,<JAR

83 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

名>を直に含む<対象名>を含んではならない。 

7) 機能J571“NEW指定”に対する規定 

a) “6.2 <NEW指定>” 

i) 

【この適合性規則を挿入する。】機能J571“NEW演算子”なしでは,適合するSQL言語は,

<NEW指定>中に直に含まれる<ルーチン呼出し>中に直に含まれる<ルーチン名>RNの暗に想

定されるか又は陽に指定される<スキーマ名>によって識別されるスキーマが,利用者定義型名

がRNであり,型が外部Javaデータ型である利用者定義型を含む<NEW指定>を含んではなら

ない。 

8) 機能J581“出力パラメタ”に対する規定 

a) “9.8 <SQL呼出しルーチン>” 

i) 

【この適合性規則を挿入する。】機能J581“出力パラメタ”なしでは,適合するSQL言語は,

JAVAを含む<言語名>を含み,かつ,OUT又はINOUTのいずれかを含む<パラメタモード>を

含む<SQL呼出しルーチン>を含んではならない。 

9) 機能J591“オーバロード”に対する規定 

a) “9.4 <利用者定義型定義>” 

i) 

【この適合性規則を挿入する。】機能J591“オーバロード”なしでは,適合するSQL言語は,

同じ<利用者定義型定義>中の他のいずれかの<メソッド指定>の<メソッド名>と等価である<メ

ソッド名>を含む<メソッド指定>を含んではならない。 

10) 機能J601“SQL-Javaパス”に対する規定 

a) “8.2 <SQL Javaパス>” 

i) 

機能J601“SQL-Javaパス”なしでは,適合するSQL言語は,<SQL Javaパス>を含んではなら

ない。 

b) “11.4 SQLJ.ALTER̲JAVA̲PATH手続” 

i) 

機能J601“SQL-Javaパス”なしでは,適合するSQL言語は,SQLJ.ALTER̲JAVA̲PATH手続

の呼出しを含んではならない。 

11) 機能J611“参照”に対する規定 

a) “8.3 <ルーチン呼出し>” 

i) 

【この適合性規則を挿入する。】機能J611“参照”なしでは,適合するSQL言語は,<参照式>

を含んではならない。 

ii) 【この適合性規則を挿入する。】機能J611“参照”なしでは,適合するSQL言語は,<右矢印>

を含んではならない。 

12) 機能J621“外部Javaルーチン”に対する規定 

a) “9.8 <SQL呼出しルーチン>” 

i) 

【この適合性規則を挿入する。】機能J621“外部Javaルーチン”なしでは,適合するSQL言語

は,JAVAを含む<言語名>を含む<SQL呼出しルーチン>を含んではならない。 

b) “9.10 <ルーチン削除文>” 

i) 

【この適合性規則を挿入する。】機能J621“外部Javaルーチン”なしでは,適合するSQL言語

は,外部Javaルーチンを識別する<特定ルーチン指示子>を含む<ルーチン削除文>を含んではな

らない。 

13) 機能J622“外部Java型”に対する規定 

84 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

a) “9.4 <利用者定義型定義>” 

i) 

【この適合性規則を挿入する。】機能J622“外部Java型”なしでは,適合するSQL言語は,<

外部Java型句>を含む<利用者定義型定義>を含んではならない。 

b) “9.7 <データ型削除文>” 

i) 

【この適合性規則を挿入する。】機能J622“外部Java型”なしでは,適合するSQL言語は,外

部Javaデータ型を識別する<スキーマ解決利用者定義型名>を含む<データ型削除文>を含んで

はならない。 

c) “9.11 <利用者定義順序付け定義>” 

i) 

【この適合性規則を挿入する。】機能J622“外部Java型”なしでは,適合するSQL言語は,外

部Javaデータ型を識別する<スキーマ解決利用者定義型名>を含む<利用者定義順序付け定義>

を含んではならない。 

d) “9.12 <利用者定義順序付け削除文>” 

i) 

【この適合性規則を挿入する。】機能J622“外部Java型”なしでは,適合するSQL言語は,外

部Javaデータ型を識別する<スキーマ解決利用者定義型名>を含む<利用者定義順序付け削除文

>を含んではならない。 

14) 機能J631“Java署名”に対する規定 

a) “8.1 <Javaパラメタ宣言リスト>” 

i) 

機能J631“Java署名”なしでは,適合するSQL言語は,“8.6 Javaルーチン署名の決定”で決

定される既定のJavaメソッド署名と等価でない<Javaパラメタ宣言リスト>を含んではならな

い。 

15) 機能J641“静的フィールド”に対する規定 

a) “9.4 <利用者定義型定義>” 

i) 

【この適合性規則を挿入する。】機能J641“静的フィールド”なしでは,適合するSQL言語は,

<静的フィールドメソッド指定>を含んではならない。 

16) 機能J651“SQL/JRT情報スキーマ”に対する規定 

a) “13.2 JARSビュー” 

i) 

機能J651“SQL/JRT情報スキーマ“なしでは,適合するSQL言語は,INFORMATION̲SCHEMA . 

JARSを参照してはならない。 

b) “13.3 METHOD̲SPECIFICATIONSビュー” 

i) 

【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . METHOD̲SPECIFICATIONS . EXTERNAL̲NAMEを参照

してはならない。 

ii) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . METHOD̲SPECIFICATIONS . IS̲FIELDを参照してはなら

ない。 

c) “13.6 USER̲DEFINED̲TYPESビュー” 

i) 

【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . UDT̲S . EXTERNAL̲NAMEを参照してはならない。 

ii) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . UDT̲S . EXTERNAL̲LANGUAGEを参照してはならない。 

85 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

iii) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . UDT̲S . JAVA̲INTERFACEを参照してはならない。 

d) “13.7 短い名前のビュー” 

i) 

【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . METHOD̲SPECS . EXTERNAL̲NAMEを参照してはなら

ない。 

ii) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . METHOD̲SPECS . IS̲FIELDを参照してはならない。 

iii) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . UDT̲S . EXTERNAL̲NAMEを参照してはならない。 

iv) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . UDT̲S . EXTERNAL̲LANGUAGEを参照してはならない。 

v) 【この適合性規則を挿入する。】機能J651“SQL/JRT情報スキーマ”なしでは,適合するSQL

言語は,INFORMATION̲SCHEMA . UDT̲S . JAVA̲INTERFACEを参照してはならない。 

17) 機能J652“SQL/JRT USAGE表”に対する規定 

a) “13.1 JAR̲JAR̲USAGEビュー” 

i) 

機能J652“SQL/JRT USAGE表”なしでは,適合するSQL言語は,INFORMATION̲SCHEMA . 

JAR̲JAR̲USAGE.を参照してはならない。 

b) “13.4 ROUTINE̲JAR̲USAGEビュー” 

i) 

機能J652“SQL/JRT USAGE表”なしでは,適合するSQL言語は,INFORMATION̲SCHEMA . 

ROUTINE̲JAR̲USAGEを参照してはならない。 

c) “13.5 TYPE̲JAR̲USAGEビュー” 

i) 

機能J652“SQL/JRT USAGE表”なしでは,適合するSQL言語は,INFORMATION̲SCHEMA . 

TYPE̲JAR̲USAGEを参照してはならない。 

86 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書B 

(参考) 

処理系定義要素 

この附属書は,ISO/IEC 9075-2の“附属書B 処理系定義要素”を修正する。 

この附属書は,この規格の本体で処理系定義として識別している機能を参照する。 

1) “4.8.5 SQLとJavaとの間のオブジェクトの変換” 

a) <利用者定義型定義>が<インタフェース指定>を指定しないならば,オブジェクト状態変換のため

に,Javaインタフェースjava.io.Serializableが用いるか,又はJavaインタフェース

java.sql.SQLDataが用いるかは,処理系定義とする。 

2) “4.10 権限” 

a) SQLJ.INSTALL̲JAR,SQLJ.REPLACE̲JAR及びSQLJ.REMOVE̲JAR手続を呼び出すために必要

な権限は,処理系定義とする。 

注記73 これは,スキーマを作成するために必要な処理系定義の権限と類似している。 

b) SQL名によって参照されるJavaメソッドの呼出しは,SQLルーチン名に関する通常のEXECUTE

権限によって制御される。SQL名によって呼び出されるJavaメソッドを“定義者の権限”で実行

するか又は“呼出し元の権限”で実行するかどうか,すなわち,<SQL呼出しルーチン>を実行

した利用者の利用者名で実行するか又は現行利用者の利用者名で実行するかどうかは,処理系定

義とする。 

3) “4.11.1 配置記述子ファイル” 

a) 組込み動作及び除去動作の仕立てのための指定を許す処理系定義の処理系ブロックを提供する。 

4) “5.2 名前及び識別子” 

a) 提供される文字集合,並びに<パッケージ識別子>,<クラス識別子>,<Javaフィールド名>及び

<Javaメソッド名>の最大長は,処理系定義とする。 

5) “6.2 NEW指定” 

a) 機能J571“NEW演算子”が提供されないならば,外部Javaデータ型の構成子を呼び出すために

用いる機構は,処理系定義とする。 

6) “8.3 <ルーチン呼出し>” 

a) <Javaパラメタ宣言リスト>の妥当性確認が処理系定義で<ルーチン呼出し>によって実行される

ならば,“8.6 Javaルーチン署名決定”の構文規則が,<ルーチン呼出し>,0のメソッド指定指標,

及び当該ルーチンSRに適用される。 

b) 外部Javaルーチンに対して,宣言型Tiの処理系定義のナルでない値をCPViとする。 

c) Java値をSQL値に変換するためのwriteObject()に関する当該Javaクラスの実装の実行方法

は,処理系定義とする。 

d) Java値をSQL値に変換するためのwriteSQL()に関する当該Javaクラスの実装の実行方法は,

処理系定義とする。 

e) SQL値をJavaオブジェクトに変換するためのreadObject()に関する当該Javaクラスの実装の

実行方法は,処理系定義とする。 

f) 

SQL値をJavaオブジェクトに変換するためのreadSQL()に関する当該Javaクラスの実装の実行

87 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

方法は,処理系定義とする。 

g) Rが外部Javaルーチンならば,RSの要素を作成したJDBCコネクションオブジェクトが閉じて

いるならば,その効果は,処理系定義とする。 

h) Rが外部Javaルーチンならば,RSの要素が現行SQLシステム及びSQLセションへの接続によっ

て戻されたオブジェクトでないならば,その効果は,処理系定義とする。 

i) 

Rが外部Javaルーチンならば,Pの呼出しがJDBCで規定するとおりに更新行数を戻すかどうか

は,処理系定義とする。 

7) “9.4 <利用者定義型定義>” 

a) <インタフェースUSING句>が陽に指定されないならば,処理系定義の<インタフェース指定>が

暗に想定される。 

b) UDTが外部Javaデータ型ならば,陽に指定されるか又は暗に想定される<Javaパラメタ宣言リス

ト>の妥当性確認が,<利用者定義型定義>によって実行されるか,又は対応するSQL呼出しメソ

ッドが呼び出されるときに実行されるかは,処理系定義とする。 

8) “9.5 <属性定義>” 

a) Java値をSQL値に変換するためのwriteObject() に関する当該Javaクラスの実装の実行方法

は,処理系定義とする。 

b) Java値をSQL値に変換するためのwriteSQL() に関する当該Javaクラスの実装の実行方法は,

処理系定義とする。 

c) SQL値をJavaオブジェクトに変換するためのreadObject() に関する当該Javaクラスの実装

の実行方法は,処理系定義とする。 

d) SQL値をJavaオブジェクトに変換するためのreadSQL() に関する当該Javaクラスの実装の実

行方法は,処理系定義とする。 

9) “9.8 <SQL呼出しルーチン>” 

a) <最大動的結果集合数>の最大値は,処理系定義とする。 

b) Rが外部Javaルーチンならば,陽に指定されるか又は暗に想定される<Javaパラメタ宣言リスト>

の妥当性確認が,<SQL呼出しルーチン>によって実行されるか,又はそのSQL呼出しルーチン

が呼び出されるときに実行されるかは,処理系定義とする。 

10) “11.1 SQLJ.INSTALL̲JAR手続” 

a) CHARACTER VARYINGパラメタの最大長は,処理系定義の整数値とする。 

b) SQLJ.INSTALL̲JAR手続を呼び出すために必要な権限は,処理系定義とする。 

c) SQLJ.INSTALL̲JAR手続は,SQLトランザクション内でSQLスキーマ文を実行するための処理

系定義の規則に従う。 

d) SQLJ.INSTALL̲JARの呼出しが例外条件を引き起こすならば,組込み動作に対する効果は,処

理系定義とする。 

e) 正しいurlパラメタの値は,処理系定義とし,形式が処理系定義であるURLを含んでもよい。

urlパラメタの値が処理系定義の制限に適合しないで,正しいJARを識別しないならば,例外条

件:Java DDL−URLが正しくない (invalid URL) が引き起こされる。 

11) “11.2 SQLJ.REPLACE̲JAR手続” 

a) CHARACTER VARYINGパラメタの最大長は,処理系定義の整数値とする。 

b) SQLJ.REPLACE̲JAR手続を呼び出すために必要な権限は,処理系定義とする。 

88 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

c) SQLJ.REPLACE̲JAR手続は,SQLトランザクション内でSQLスキーマ文を実行するための処理

系定義の規則に従う。 

d) 正しいurlパラメタの値は,処理系定義とし,形式が処理系定義であるURLを含んでもよい。

urlパラメタの値が処理系定義の制限に適合しないで,正しいJARを識別しないならば,例外条

件:Java DDL−URLが正しくない (invalid URL) が引き起こされる。 

12) “11.3 SQLJ.REMOVE̲JAR手続” 

a) CHARACTER VARYINGパラメタの最大長は,処理系定義の整数値とする。 

b) SQLJ.REMOVE̲JAR手続を呼び出すために必要な権限は,処理系定義とする。 

c) SQLJ.REMOVE̲JAR手続は,SQLトランザクション内でSQLスキーマ文を実行するための処理

系定義の規則に従う。 

d) SQLJ.REMOVE̲JARの呼出しが例外条件を引き起こすならば,除去動作に対する効果は,処理系

定義とする。 

13) “11.4 SQLJ.ALTER̲JAVA̲PATH手続” 

a) CHARACTER VARYINGパラメタの最大長は,処理系定義の整数値とする。 

b) SQLJ.ALTER̲JAVA̲PATH手続を呼び出すために必要な権限は,処理系定義とする。 

c) SQLJ.ALTER̲JAVA̲PATH手続は,SQLトランザクション内でSQLスキーマ文を実行するための

処理系定義の規則に従う。 

d) SQLJ.ALTER̲JAVA̲PATH手続の呼出しが例外条件を引き起こすならば,JARと関連付けられた

パスに対する効果は,処理系定義とする。 

14) “12.1.1 パッケージjava.sql” 

a) この規格を実装するSQLシステムは,パッケージjava.sqlを提供し,それは,JDBCドライバ,

及びそのパッケージによって必要とされるすべてのクラスとする。この規格を実装するSQLシス

テムが提供する他のJavaパッケージについては,処理系定義とする。 

b) この規格を実装するSQLシステムでは,パッケージjava.sqlは,既定コネクションを提供す

る。java.sqlによって提供されるその他のデータ源のURLは,処理系定義とする。 

15) “12.2 配置記述子ファイル” 

a) <処理系名>は,処理系定義のSQL識別子とする。 

b) <組込み動作>(<除去動作>)中に指定されるとき,<処理系ブロック>は,処理系定義の組込み動

作(除去動作)を指定する。 

c) <組込み動作>(<除去動作>)中に含まれる<処理系名>をもつ<処理系ブロック>を組込み動作(除

去動作)として解釈するかどうかは,処理系定義とする。すなわち,処理系は,他の処理系によ

って指定される組込み動作(除去動作)を実行してもよいし,しなくてもよい。 

89 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書C 
(参考) 

処理系依存要素 

この附属書は,ISO/IEC 9075-2の“附属書C処理系依存要素”を修正する。 

この附属書は,この規格で適合する処理系の動作が処理系依存と陽に述べる箇所を参照する。 

1) “3.2.1 組込み手続の規定” 

a) 組込み手続を定義する方法は,処理系依存とする。 

2) “4.8 利用者定義型” 

a) Javaメソッドを実行している間に行われる静的属性への修正の有効範囲及び永続性は,処理系依

存とする。 

3) “8.3 <ルーチン呼出し>” 

a) Rが外部Javaルーチンならば,Pの実行終了前にクラス変数に加えられた変更の有効範囲及び永

続性は,処理系依存とする。 

b) 言語がADA(それぞれC,COBOL,FORTRAN,JAVA,M,PASCAL,PLI)を指定し,かつ,P

が標準適合Adaプログラム(それぞれC,COBOL,Fortran,Java,M,Pascal,PL/Iプログラム)

でないならば,Pの実行結果は,処理系依存とする。 

4) “11.2 SQLJ.REPLACE̲JAR手続” 

a) 実装が置き換えられたSQLルーチン又は構造型を用いる現在実行中のSQL文に対する

SQLJ.REPLACE̲JARの効果は,処理系依存とする。 

5) “11.3 SQLJ.REMOVE̲JAR手続” 

a) 実装が除去されたSQLルーチン又は構造型を用いる現在実行中のSQL文に対する

SQLJ.REMOVE̲JARの効果は,処理系依存とする。 

6) “11.4 SQLJ.ALTER̲JAVA̲PATH手続” 

a) 既に準備されたか又は現在実行中のSQL文に対するSQLJ.ALTER̲JAVA̲PATHの効果は,処理

系依存とする。 

background image

90 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書D 
(参考) 

SQLの機能の分類 

この附属書は,この規格中で規定している機能の分類を記述する。 

表4“選択機能の機能分類”は,この規格で規定しているSQL言語の機能の分類を含む。 

この表では,最初の列は,表の行の位置を素早く示すために用いてもよい項番を含む。その他の点では,

これらの値は,役に立たず,不変ではない。すなわち,これらの値は,JIS X 3005 (ISO/IEC 9075) 規格群

の将来の版において,又は技術訂正票でさえも予告なく変更されることがある。 

この表の“機能ID”列は,表中に含まれる各機能及び各副機能の正式な識別を指定する。 

この表の“機能名”列は,機能IDの値に関連付けられている機能及び副機能の簡潔な記述を含む。 

表4−選択機能の機能分類 

機能ID 

機能名 

J511 

コマンド 

J521 

JDBCデータ型 

J531 

配置 

J541 

SERIALIZABLE 

J551 

SQLDATA 

J561 

JAR権限 

J571 

NEW演算子 

J581 

出力パラメタ 

J591 

オーバロード 

10 

J601 

SQL-Javaパス 

11 

J611 

参照 

12 

J621 

外部Javaルーチン 

13 

J622 

外部Java型 

14 

J631 

Java署名 

15 

J641 

静的フィールド 

16 

J651 

SQL/JRT情報スキーマ 

17 

J652 

SQL/JRT USAGE表 

表4“選択機能の機能分類”では,機能の定義は,提供していない。これらの機能の定義は,適合性規

則中にあり,更に,“附属書A SQL適合性の要約”中で要約している。 

91 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書E 

(参考) 

ルーチン入門 

E.1 

技術構成要素 

この規格は,次の仕様を含む。 

− 新しい組込み手続。 

・ SQLJ.INSTALL̲JAR−SQLシステム中に一組のJavaクラスをロードする。 

・ SQLJ.REPLACE̲JAR−SQLシステム中の一組のJavaクラスを取り替える。 

・ SQLJ.REMOVE̲JAR−前に組み込まれた一組のJavaクラスを削除する。 

・ SQLJ.ALTER̲JAVA̲PATH−Javaクラス内の名前解決用のパスを指定する。 

− 新しい組込みスキーマ。 

SQL/JRT機能を実装するSQLシステムのすべてのカタログ中に存在し,SQL/JRT機能のすべての

組込み手続を含むSQLJという名前の組込みスキーマを想定する。 

− 次のSQL文の拡張。 

・ CREATE PROCEDURE/FUNCTION−JavaメソッドのためのSQL名を指定する。 

・ DROP PROCEDURE/FUNCTION−JavaメソッドのSQL名を削除する。 

・ CREATE TYPE−JavaクラスのためのSQL名を指定する。 

・ DROP TYPE−JavaクラスのSQL名を削除する。 

・ GRANT−JavaのJARに関するUSAGE権限を付与する。 

・ REVOKE−JavaのJARに関するUSAGE権限を取り消す。 

− OUT及びINOUTパラメタの値を戻すための規約,及びSQL結果集合を戻すための規約。 

− 参照の新しい形式:データ型がJavaクラスで定義されている列のフィールド及びメソッドへの修飾

付き参照。 

− 情報スキーマ中の追加のビュー及び列。 

E.2 

概要 

この入門は,一連のJavaクラスの例を説明し,それらをどのように組み込むことができるかを示し,SQL

環境においてそれらの静的及び公開メソッドをSQL/JRT機能によってどのように参照することができる

かを説明する。 

Javaメソッドの例では,次の列をもつEMPSという名前のSQL表を仮定する。 

− NAME−従業員の名前。 

− ID−従業員の識別。 

− STATE−従業員の住む州。 

− SALES−従業員の売上げの総額。 

− JOBCODE−従業員の職務コード。 

表の定義は,次のとおりとする。 

CREATE TABLE emps ( 

   name     VARCHAR(50), 

92 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

   id       CHARACTER(5), 

   state    CHARACTER(20), 

   sales    DECIMAL (6,2), 

   jobcode  INTEGER ); 

例のクラス及びメソッドは,次のとおりとする。 

− Routines1.region−USの州コードと地域番号とを対応付けるJavaメソッド。このメソッドは,

内部でSQLを用いない。 

− Routines1.correctState−state(州)コードのつづり方を訂正するためのSQLのUPDATE文

を実行するJavaメソッド。古いつづり方及び新しいつづり方は,入力モードのパラメタで指定する。 

− Routines2.bestTwoEmps−売上げが上位2位までの従業員を決定し,二人の従業員の行の列を

出力モードのパラメタ値として戻すJavaメソッド。このメソッドは,内部でSQL結果集合を作成

し,処理する。 

− Routines3.orderedEmps−売上げの列によって順序付けられ,選択された従業員の行からなる

SQL結果集合を作成し,その結果集合をクライアントに戻す。 

− Over1.isOdd及びOver2.isOdd−オーバーロードの規則を説明するために考案されたJavaメソ

ッド。 

− Routines4.job1及びRoutines5.job2−職務コードの整数値に対応したデータ列値を戻すJava

メソッド。これらのメソッドは,ナルの引数の扱い方を説明する。 

− Routines6.job3−職務コードの整数値に対応したデータ列値を戻すもう一つのJavaメソッド。

このメソッドは,静的Java変数の振る舞いを説明する。 

特に断りのない限り,SQLを呼び出すメソッドは,JDBCを用いる。メソッドの一つは,JDBCを用い

る版及びSQL/OLBを用いる版の両方で示す。その他は,SQL/OLBのコードでも記述するかもしれない。 

すべてのクラスにおいて,import文,import java.sql.*; 及び java.math.*; が含まれると仮定

する。 

E.3 

Javaメソッドregion及びcorrectStatesの例 

この箇条は,二つの単純なメソッドをもつJavaクラスRoutines1の例を説明する。 

− int値の静的メソッドregionは,九つの州を三つの地理的な地域に分類し,正しい州に関連付け

られた地域を示す整数値を戻すか,又は正しくない州に対して例外を投げる。このメソッドは,SQL

では関数として呼び出される。 

− voidメソッドcorrectStatesは,state列のつづりの誤りを訂正するために,EMPS表を更新す

る。このメソッドは,SQLでは手続として呼び出される。 

public class Routines1 { 

 // 関数として呼び出されるintメソッド 

 public static int region(String s) throws SQLException { 

  if (s.equals("MN") || s.equals("VT") || s.equals("NH")) return 1; 

   else if (s.equals("FL") || s.equals("GA") || s.equals("AL")) return 2; 

   else if (s.equals("CA") || s.equals("AZ") || s.equals("NV")) return 3; 

   else throw new SQLException("Invalid state code", "38001"); 

 } 

93 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 // 格納手続として呼び出されるvoidメソッド 

 public static void correctStates (String oldSpelling, String newSpelling) 

   throws SQLException { 

  Connection conn = DriverManager.getConnection ("jdbc:default:connection"); 

  PreparedStatement stmt = conn.prepareStatement 

   ("UPDATE emps SET state = ? WHERE state = ?"); 

    stmt.setString(1, newSpelling); 

  stmt.setString(2, oldSpelling); 

  stmt.executeUpdate(); 

  stmt.close(); 

  conn.close(); 

  return; 

 } 

E.4 

region及びcorrectStatesのSQLへの組込み 

Routine1のようなJavaクラスのソースコードは,通常,一つ以上のJavaファイル(すなわち,ファ

イル拡張子が“java”のファイル)中にある。それらを(javacコンパイルコマンドを用いて,)コンパイ

ルするとき,結果コードは,一つ以上のクラスファイル(すなわち,ファイル拡張子が“class”のファイ

ル)中に置かれる。クラスファイルの集合は,典型的に,ZIPコード化されたファイルの集まりであるJava 

JARにまとめられる。 

SQLでJavaクラスを用いるためには,SQLJ.INSTALL̲JAR手続を呼び出して,それらを含むJARを

SQLシステムにロードする。SQLJ.INSTALL̲JAR手続は,指定されたJAR中に含まれるJavaクラスの

集まりを現行SQLカタログで利用できるようにするための新しい組込みSQL手続である。例えば,次の

ように,局所ファイル名が“~/classes/Routines1.jar”であるJARに上述のRoutines1クラスを

集めたと仮定する。 

SQLJ.INSTALL̲JAR('file:~/classes/Routines1.jar', 'routines1̲jar', 0) 

− SQLJ.INSTALL̲JAR手続の最初のパラメタは,与えられたJARのURLを指定する文字列である。

このパラメタは,決して大文字に変換されない。 

− SQLJ.INSTALL̲JAR手続の2番目のパラメタは,SQLシステムでのJARの名前として用いる文字

列である。JAR名は,SQLの修飾付きの名前であり,修飾付きの名前に対するSQL規約に従う。 

SQLJ.INSTALL̲JAR手続の2番目のパラメタとして指定するJAR名は,SQLシステム内のJAR

を識別する。すなわち,指定するJAR名は,SQLでだけ用いられ,JAR自体の内容とは何も関係し

ない。JAR名は,後述の箇条で記述する次の文脈で用いる。 

・ SQLJ.REMOVE̲JAR及びSQLJ.REPLACE̲JAR手続のパラメタとして。 

・ SQLのCREATE PROCEDURE/FUNCTION文中のJavaクラス名の修飾子として。 

・ 拡張されたSQLのGRANT及びREVOKE文のオペランドとして。 

・ SQLのCREATE TYPE文中のJavaクラス名の修飾子として。 

JAR名は,SQLシステムからJARを取得するための後続の機能で用いてもよい。 

− JARは,SQLJ.INSTALL̲JAR及びSQLJ.REMOVE̲JAR手続によって取られる暗に想定される動作

94 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

を指定する配置記述子 (deployment descriptor) を含むこともできる。SQLJ.INSTALL̲JAR手続の3

番目のパラメタは,JAR中の配置記述子によって指定する動作をSQLJ.INSTALL̲JAR手続に実行さ

せたいか又は実行させたくないかを指定する整数値(それぞれ,0でない値又は0の値で示す)で

ある。配置記述子は,“12.2 配置記述子ファイル”で更に記述している。 

INSTALL̲JAR手続の名前は,スキーマ名SQLJで修飾される。SQL/JRT機能のすべての組込み手続は,

その組込みスキーマ中に含まれるよう定義される。SQLJスキーマは,SQL/JRT機能を実装するSQLシス

テムの各カタログ中に存在すると仮定される。 

SQLJ.INSTALL̲JARの最初の二つのパラメタは,文字列であり,そのため,それらを定数で指定する

ならば,SQL区切り識別子に対して用いる2重引用符ではなく,引用符を用いる。 

SQLJ.INSTALL̲JAR手続の動作は,次のとおりである。 

− 最初のパラメタで指定されるJARを取得する。 

− それが含むクラスファイルを抜き出し,それらを現行SQLスキーマに組み込む。 

− JAR自体の写しを保持し,それを2番目のパラメタの値と関連付ける。 

− 3番目のパラメタが0でないならば,JARの配置記述子で指定される動作を実行する。 

SQLJ.INSTALL̲JAR手続でJARを組み込んだ後,次の細分箇条で記述するとおり,そのJAR中に含ま

れるクラスの静的メソッドをCREATE PROCEDURE/FUNCTION文で参照できる。 

E.5 

region及びcorrectStatesに対するSQL名の定義 

SQLでJavaメソッドを呼び出す前に,それに対するSQL名を定義しなければならない。SQLのCREATE 

PROCEDURE/FUNCTION文の新しい選択肢でこれを行う。例を次に示す。 

CREATE PROCEDURE correct̲states(old CHARACTER(20), new CHARACTER(20)) 

 MODIFIES SQL DATA 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines1̲jar:Routines1.correctStates'; 

CREATE FUNCTION region̲of(state CHARACTER(20)) RETURNS INTEGER 

 NO SQL 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines1̲jar:Routines1.region'; 

CREATE PROCEDURE文及びCREATE FUNCTION文は,SQL名,及びEXTERNAL NAMEに続けて指

定されるJavaメソッドに対するJavaメソッド署名を指定する。EXTERNAL NAMEに続けて指定されるメ

ソッド名の形式は,SQLJ.INSTALL̲JAR手続中で指定されたJAR名,それに続いて,パッケージ名(が

あるならば,そのパッケージ名)及びクラス名で完全に修飾されたJavaメソッド名からなる。 

correct̲statesに対するCREATE PROCEDURE文は,MODIFIES SQL DATAを指定する。これは,

指定されたJavaメソッドが(INSERT,UPDATE又はDELETE文によって,)SQL表のデータを修正する

ことを示す。region̲ofに対するCREATE FUNCTION文は,NO SQLを指定する。これは,指定された

JavaメソッドがSQL操作を実行しないことを示す。 

指定されたJavaメソッドがSQL表のデータを(SELECT文によって)読むが,SQLデータを修正しな

いことを示すREADS SQL DATA,及び,指定されたメソッドがSQL操作を呼び出すが,SQLデータを読

95 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

むことも修正することもしないことを示すCONTAINS SQLがほかに指定できる。代替手段CONTAINS 

SQLが既定値である。 

通常のSQL手続及び関数の名前として,CREATE PROCEDURE/FUNCTION文で定義するSQL手続及び

関数の名前を用いる。 

SELECT name, region̲of(state) AS region 

FROM emps 

WHERE region̲of(state) = 3; 

CALL correct̲states ('GEO', 'GA'); 

同じJavaメソッドに対して,複数のSQL名を定義することができる。 

CREATE PROCEDURE state̲correction(old CHARACTER(20), new CHARACTER(20)) 

 MODIFIES SQL DATA 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines1̲jar:Routines1.correctStates'; 

CREATE FUNCTION state̲region(state CHARACTER(20)) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines1̲jar:Routines1.region'; 

Javaメソッドに対する様々なSQL関数及び手続を等価的に用いることができる。 

SELECT name, state̲region(state) AS region 

FROM emps 

WHERE region̲of(state) = 2; 

CALL state̲correction ('ORE', 'OR'); 

SQL名は,通常の3部名であり,3部名の最初の二つの部は,CREATE PROCEDURE文及びCREATE 

FUNCTION文に対してSQLで定義されるとおり省略されている。 

CREATE PROCEDURE/FUNCTION文に対する他の考慮点は,パラメタデータ型の扱い,オーバロード

される名前,及び権限であり,後の細分箇条で議論する。 

E.6 

出力パラメタをもつJavaメソッドbestTwoEmps 

region及びcorrectStatesメソッドのパラメタは,すべて入力専用のパラメタである。これは,通

常のJavaパラメタの規約である。 

SQL手続は,OUT及びINOUTモードをもつパラメタも提供する。Java言語は,出力パラメタの概念を

直接もたない。したがって,SQL/JRTは,Javaメソッドのパラメタに対する出力値を戻すために配列を用

いる。すなわち,Integerパラメタで呼出し元に値を戻したいならば,そのパラメタの型にIntegerの

配列であるInteger[ ]を指定する。そのような配列は,ただ一つの要素を含み,メソッドが呼び出され

るときにパラメタの入力値がその要素中に含まれ,メソッドがその要素の値に望まれた出力値を設定する。 

96 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

次の箇条で示すように,Javaメソッドの出力パラメタに対して配列を用いることは,Javaメソッドにだ

け可視である。そのようなメソッドをSQL手続として呼び出すとき,パラメタとして通常のスカラデータ

項目を与える。SQLシステムは,これらのスカラデータ項目とJava配列との間の対応付けを暗に実行する。 

次のJavaメソッドは,Java中で出力パラメタをコーディングする方法を説明する。このメソッド

bestTwoEmpsは,パラメタ値を超える番号の地域で最高のsalesをもつ二人の従業員のname,id,

region及びsalesを戻す。すなわち,最初の八つのパラメタのそれぞれは,OUTパラメタであり,し

たがって,与えられた型の配列として宣言されている。 

BestTwoEmpsメソッドの次に示す版は,SQLをアクセスする文に対して,SQL/OLBを用いる。 

public class Routines2 { 

 public static void bestTwoEmps ( 

   String[ ] n1, String[ ] id1, int[ ] r1, BigDecimal[ ] s1, 

   String[ ] n2, String[ ] id2, int[ ] r2, BigDecimal[ ] s2, 

   int regionParm) throws SQLException { 

  #sql iterator ByNames (String name, String id, int region, BigDecimal sales); 

  n1[0]= "****"; n2[0]= "****"; id1[0]= ""; id2[0]= ""; 

  r1[0]=0; r2[0]=0; s1[0]= new BigDecimal(0); s2[0]= new BigDecimal(0); 

  ByNames r; 

  try { 

   #sql r = {SELECT name, id, region̲of(state) AS region, sales 

     FROM emp 

     WHERE region̲of(state) > :regionParm 

      AND sales IS NOT NULL 

     ORDER BY sales DESC}; 

   if (r.next()) { 

    n1[0] = r.name(); 

    id1[0] = r.id(); 

    r1[0] = r.region(); 

    s1[0] = r.sales(); 

   } 

   else return; 

   if (r.next()) { 

    n2[0] = r.name(); 

    id2[0] = r.id(); 

    r2[0] = r.region(); 

    s2[0] = r.sales(); 

   } 

   else return; 

  } finally r.close(); 

 } 

97 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

上記のJavaメソッドは,SQL操作のためにSQL/OLBを用いるので,SQLシステムへのコネクションを

陽に獲得する必要がないことに注意を要する。既定によって,SQL/OLBは,ルーチンを呼び出すSQL文

の文脈中でそのルーチン中に含まれるどのSQLをも実行する。 

比較のために,SQL/OLBの代わりにJDBCを用いるBestTwoEmpsメソッドの版を次に示す。 

public class Routines2 { 

 public static void bestTwoEmps ( 

   String[ ] n1, String[ ] id1, int[ ] r1, BigDecimal[ ] s1, 

   String[ ] n2, String[ ] id2, int[ ] r2, BigDecimal[ ] s2, 

   int regionParm) throws SQLException { 

  n1[0]= "****"; n2[0]= "****"; id1[0]= ""; id2[0]= ""; 

  r1[0]=0; r2[0]=0; s1[0]= new BigDecimal(0); s2[0]= new BigDecimal(0); 

  try { 

   Connection conn = DriverManager.getConnection 

     ("jdbc:default:connection"); 

   java.sql.PreparedStatement stmt = conn.prepareStatement 

     ("SELECT name, id, region̲of(state) AS region, sales 

     FROM emp 

     WHERE region̲of(state) > ? 

      AND sales IS NOT NULL 

     ORDER BY sales DESC"); 

   stmt.setInt(1, regionParm) 

   ResultSet r = stmt.executeQuery(); 

   if (r.next()) { 

    n1[0] = r.getString("name"); 

    id1[0] = r.getString("id"); 

    r1[0] = r.getInt("region"); 

    s1[0] = r.getBigDecimal("sales"); 

   } 

   elsereturn; 

   if (r.next()) { 

    n2[0] = r.getString("name"); 

    id2[0] = r.getString("id"); 

    r2[0] = r.getInt("region"); 

    s2[0] = r.getBigDecimal("sales"); 

   } 

   else return; 

  } finally { stmt.close() }; 

 } 

98 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

E.7 

bestTwoEmpsに対するCREATE PROCEDURE best2 

bestTwoEmpsメソッドをもつRoutines2クラスを含むJARに対するSQLJ.INSTALL̲JAR手続を呼

び出すことを仮定する。 

SQLJ.INSTALL̲JAR ('file:~/classes/Routines2.jar', 'routines2̲jar', 0) 

前で示したように,SQLでbestTwoEmpsのようなメソッドを呼び出すためには,CREATE PROCEDURE

文を用いて,それに対するSQL名を定義しなければならない。 

CREATE PROCEDURE best2 ( 

  OUT n1 CHARACTER VARYING(50), OUT id1 CHARACTER VARYING(5), OUT r1 INTEGER, 

  OUT s1 DECIMAL(6,2), 

  OUT n2 CHARACTER VARYING(50), OUT id2 CHARACTER VARYING(5), OUT r2 INTEGER, 

  OUT s2 DECIMAL(6,2), region INTEGER) 

 READS SQL DATA 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines2̲jar:Routines2.bestTwoEmps'; 

OUT又はINOUTを指定するパラメタに対して,対応するJavaパラメタは,対応するデータ型の配列で

なければならない。 

E.8 

best2手続の呼出し 

SQLシステムでRoutines2クラスを組み込み,best2に対するCREATE PROCEDURE文を実行した

後で,OUTパラメタに対する通常の規約を用いて,SQL格納手続であるかのようにbestTwoEmpsメソ

ッドを呼び出すことができる。このような呼出しは,埋込みSQL,CLI,ODBC又はJDBCで書くことが

できる。次は,JDBCを利用した呼出しの例である。 

java.sql.CallableStatement stmt = conn.prepareCall( 

  "{call best2(?,?,?,?,?,?,?,?,?)}"); 

 stmt.registerOutParameter(1, java.sql.Types.STRING); 

 stmt.registerOutParameter(2, java.sql.Types.STRING); 

 stmt.registerOutParameter(3, java.sql.Types.INTEGER); 

 stmt.registerOutParameter(4, java.sql.Types.DECIMAL); 

 stmt.registerOutParameter(5, java.sql.Types.STRING); 

 stmt.registerOutParameter(6, java.sql.Types.STRING); 

 stmt.registerOutParameter(7, java.sql.Types.INTEGER); 

 stmt.registerOutParameter(8, java.sql.Types.DECIMAL); 

 stmt.setInt(9, 3); 

99 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 stmt.executeUpdate(); 

 String n1 = stmt.getString(1); 

 String id1 = stmt.getString(2); 

 int r1 = stmt.getInt(3); 

 BigDecimal s1 = stmt.getBigDecimal(4); 

 String n2 = stmt.getString(5); 

 String id2 = stmt.getString(6); 

 int r2 = stmt.getInt(7); 

 BigDecimal s2 = stmt.getBigDecimal(8); 

E.9 

結果集合を戻すJavaメソッドorderedEmps 

SQL格納手続は,それらの出力としてSQL結果集合を生成することができる。(JDBC及びSQLで定義

されるとおり,)SQL結果集合は,SQL行の順序付けされた並びである。SQL結果集合は,通常の関数結

果値として処理されるのではなく,代わりに呼出し元指定の反復子又はカーソルに結合され,結果集合の

行を処理するためにその反復子又はカーソルが引き続いて用いられる。 

次のJavaメソッドorderedEmpsは,SQL結果集合を生成し,それからクライアントに結果集合を戻

す。orderedEmpsメソッドは,bestTwoEmpsメソッドと同じ方法で結果集合を内部的に生成すること

に注意を要する。しかし,bestTwoEmpsメソッドがbestTwoEmpsメソッド自体の中で結果集合を処理

するのに対して,このorderedEmpsメソッドは,SQL結果集合としてクライアントに結果集合を戻す。 

クライアントに結果集合を戻すJavaメソッドを書くために,JavaのResultSetクラス,又はSQL/OLB

反復子宣言(“#sql iterator...”)によって生成されるクラスのいずれかの単一要素の配列である付

加的なパラメタをもつメソッドを指定する。 

orderedEmps手続の次に示す版は,SQLサーバをアクセスするSQL/OLBを用いて,SQL/OLB反復子

SalesReportとして結果集合を戻す。 

// #sql public iterator SalesReport (String name, int region, BigDecimal sales); 

 public class Routines3 { 

  public static void orderedEmps (int regionParm, SalesReport[ ] rs) 

    throws SQLException { 

   #sql rs[0] = { SELECT name, region̲of(state) AS region, sales 

     FROM emp 

     WHERE region̲of(state) > :regionParm 

      AND sales IS NOT NULL 

     ORDER BY sales DESC }; 

   return; 

  } 

 } 

SalesReport反復子クラスは,Routines3の公開静的内部クラスであるかもしれない。しかし,上記

の例は,SalesReport反復子の公開定義を含むRoutines3と同じパッケージ中で,SalesReport.sqlj 

100 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

と名付けられた“*.sqlj”ファイルの存在を仮定する。すなわち,SalesReport.sqljは,次を含む。 

#sql public iterator SalesReport (String name, int region, BigDecimal sales); 

この例では,クラスRoutines3及び反復子SalesReportの両方がclassesと名付けられたパッケ

ージ中で定義されていると仮定する。 

比較のために,SQL/OLBの代わりにJDBCを用いて書かれたorderedEmpsを次に示す。 

public class Routines3 { 

 public static void orderedEmps(int regionParm, ResultSet[ ] rs) 

   throws SQLException { 

  Connection conn = DriverManager.getConnection ("jdbc:default:connection"); 

  java.sql.PreparedStatement stmt = conn.prepareStatement 

    ("SELECT name, region̲of(state) AS region, sales 

    FROM emp WHERE region̲of(state) > ? 

     AND sales IS NOT NULL 

    ORDER BY sales DESC"); 

  stmt.setInt (1, regionParm); 

  rs[0] = stmt.executeQuery(); 

  return; 

 } 

メソッドは,戻されるSQL結果集合を含むJavaのResultSetを参照するResultSet[]パラメタの最

初の要素を設定する。メソッドは,戻されるResultSetオブジェクト,又は結果集合を生成したJava文

オブジェクトのいずれも閉じることはない。SQLシステムは,それらのオブジェクトの両方を暗に閉じる。 

両方のパラメタに対して陽に引数を与えることによって,通常の方法でJava中でorderedEmpsのよう

なメソッドを呼び出すことができる。SQLの方法で処理される結果集合を生成する格納手続として,SQL

でそれを呼び出すこともできる。これがどのようにして行われるかは,次の二つの箇条で説明する。 

上記のorderedEmpsの例のそれぞれは,単一の結果集合パラメタrsをもち,そのパラメタで単一の

結果集合だけを戻すことができる。複数の結果集合パラメタを指定することもできる。“9.8 <SQL呼出し

ルーチン>”を参照。 

bestTwoEmpsの前の例と比較して,SQL/OLB反復子若しくはResultSet rs[0],又はJDBCの

PreparedStatementであるstmtを閉じるためのtry...finallyブロックがないことに注意を要する。格

納手続から戻される結果集合に対して,それを陽に閉じてはならず,これは,JDBCの場合,結果集合を

生成するために実行される文も陽に閉じてはならないことを意味する。 

E.10 orderedEmpsに対するCREATE PROCEDURE rankedEmps 

orderedEmpsメソッドをもつRoutines3クラスを含むJARに対するSQLJ.INSTALL̲JAR手続を呼

び出すと仮定する。 

101 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

SQLJ.INSTALL̲JAR( 'file:~/classes/Routines3.jar', 'routines3̲jar', 0) 

前のメソッドと同様に,SQL手続として呼び出す前に,orderedEmpsメソッドに対するSQL名を定義

する必要がある。上記のとおり,orderedEmpsメソッドを参照するEXTERNAL...LANGUAGE JAVAを指

定するCREATE PROCEDURE文で行う。次は,上記のorderedEmpsメソッドに対するCREATE 

PROCEDURE...DYNAMIC RESULT SETSの例である。 

CREATE PROCEDURE ranked̲emps (region INTEGER) 

 READS SQL DATA 

 DYNAMIC RESULT SETS 1 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines3̲jar:classes.Routines3.orderedEmps'; 

SQL結果集合を生成するJavaメソッドに対するCREATE PROCEDURE文は,次の特性をもつ。 

− DYNAMIC RESULT SETSは,手続が一つ以上の結果集合を生成することを示す。DYNAMIC 

RESULT SETSで指定される整数は,手続が生成する結果集合の最大数である。実行によってこの数

を超える結果集合が生成されるならば,警告が発行され,指定された数の結果集合だけが戻される。 

− SQL署名は,呼出し元が陽に与えるパラメタだけを指定する。 

− 指定されたJavaメソッドは,実際には一つ以上の追加の後続するパラメタをもち,そのデータ型は,

java.sql.ResultSet,又はsqlj.runtime.Result-SetIteratorの実装のいずれかのJava

配列でなければならない。 

上記のCREATE PROCEDURE文は,Routines3.orderedEmpsのSQL/OLBを基にした版,又はJDBC

を基にした版のいずれかを参照して用いるかもしれない。特定の実装を選ぶ必要があるとき,要求される

JavaメソッドのJavaメソッド署名を陽に示さなければならない。SQL/OLBを基にしたorderedEmpsに

対しては,次のとおりである。 

CREATE PROCEDURE ranked̲emps (region INTEGER) 

 READS SQL DATA 

 DYNAMIC RESULT SETS 1 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 

  'routines3̲jar:classes.Routines3.orderedEmps(int, classes.SalesReport[])'; 

JDBCを基にしたorderedEmpsに対しては,次のとおりである。 

CREATE PROCEDURE ranked̲emps (region INTEGER) 

 READS SQL DATA 

 DYNAMIC RESULT SETS 1 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 

102 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  'routines3̲jar:classes.Routines3.orderedEmps(int, java.sql.ResultSet[])'; 

上記のCREATE PROCEDURE ranked̲emps文中でのただ一つの相違点は,戻される動的結果集合の

Javaメソッド署名の記述中にある。両方の場合,完全修飾付きクラス名が,それぞれ,SQL/OLB反復子

(SalesReportがclassesと名付けられたパッケージ中にあることを思い出すこと)及びJDBC結果集

合に対して与えられる。 

次の箇条は,この手続の呼出し例を説明する。 

E.11 rankedEmps手続の呼出し 

SQLシステム中にRoutines3クラスを組み込み,rankedEmpsに対するCREATE PROCEDUREを実

行した後で,SQL格納手続であるかのようにrankedEmps手続を呼び出すことができる。そのような呼

出しは,SQL結果集合を処理するための機構を定義するいずれかの機能,すなわち,SQL/CLI,JDBC及

びSQL/OLBで書かれるかもしれない。次は,JDBCを用いたそのような呼出しの例である。 

java.sql.CallableStatement stmt = conn.prepareCall( "{call ranked̲emps(?)}"); 

 stmt.setInt(1, 3); 

 ResultSet rs = stmt.executeQuery(); 

 while (rs.next()) { 

  String name = rs.getString(1); 

  int region = rs.getInt(2); 

  BigDecimal sales = rs.getBigDecimal(3); 

  System.out.print("Name = " + name); 

  System.out.print("Region = " + region); 

  System.out.print("Sales = " + sales); 

  System.out.println(); 

ranked̲emps手続の呼出しは,CREATE PROCEDURE文中で宣言された単一のパラメタだけを与える

ことに注意を要する。SQLシステムは,適用可能なパラメタとして,ResultSetの空の配列又は

classes.SalesReportの空の配列を暗に与えて,Javaメソッドを呼び出す。そのJavaメソッドは,配

列パラメタに出力結果集合又は反復子を代入する。そして,Javaメソッドが完了するとき,SQLシステム

は,SQL結果集合としてその出力配列要素中の結果集合又は反復子を戻す。 

E.12 Javaメソッド名及びSQL名のオーバロード 

Javaメソッドに対してSQL名を指定するCREATE PROCEDURE/FUNCTION文を用いるとき,SQL名を

オーバロードすることができる。すなわち,複数のCREATE PROCEDURE/FUNCTION文で同じSQL名を

指定することができる。そのようなSQLのオーバロードの提供が選択機能であることに注意を要する。 

次のJavaクラス及びメソッドを考える。これらは,オーバロードを説明するためだけの意図で考案され

たルーチンであり,ルーチン本体は示していない。 

103 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

public class Over1 { 

 public static int isOdd (int i) {...}; 

 public static int isOdd (float f) {...}; 

 public static int testOdd (double d) {...}; 

public class Over2 { 

 public static int isOdd (java.sql.Timestamp t) {...}; 

 public static int oddDateTime (java.sql.Date d) {...}; 

 public static int oddDateTime (java.sql.Time t) {...}; 

isOddメソッド名は,Over1クラス中でオーバロードされ,oddDateTimeメソッド名は,Over2ク

ラス中でオーバロードされることに注意を要する。 

上記のクラスは,組み込まれたJAR ~/classes/Over.jar中にあると仮定する。 

SQLJ.INSTALL̲JAR ('file:~/classes/Over.jar', 'over̲jar', 0) 

SQLでこれらのメソッドを参照するためには,もちろん,CREATE FUNCTION文でそれらに対してSQL

名を指定する必要がある。これらのCREATE FUNCTION文は,オーバロードされるSQL名を指定するこ

とができる。SQL名のオーバロードは,Java名でのオーバロードとは完全に独立している。これは,次で

説明する。 

複数のCREATE PROCEDURE/FUNCTION文で同じJavaメソッドを指定することができることを思い出

す。 

CREATE FUNCTION odd (INTEGER) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over1.isOdd'; 

CREATE FUNCTION odd (REAL) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over1.isOdd'; 

CREATE FUNCTION odd (DOUBLE PRECISION) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over1.testOdd'; 

CREATE FUNCTION odd (TIMESTAMP) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over2.isOdd'; 

CREATE FUNCTION odd (DATE) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over2.oddDateTime'; 

CREATE FUNCTION odd (TIME) RETURNS INTEGER 

104 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over2.oddDateTime'; 

CREATE FUNCTION is̲odd (INTEGER) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over1.isOdd'; 

CREATE FUNCTION test̲odd (REAL) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over1.isOdd'; 

これらのCREATE FUNCTION文の次の特性に注意を要する。 

− SQL名oddは,Over1の二つのisOddメソッド及びtestOddメソッドに対して定義され,Over2

のisOddメソッド及び二つのoddDateTimeメソッドに対しても定義されている。すなわち,SQL

名oddは,オーバロードされるJava名とオーバロードされないJava名とに及ぶ (span)。 

− SQL名is̲odd及びtest̲oddは,Over1の二つのisOddメソッドでに対して定義されている。

すなわち,それらの二つの異なるSQL名は,同じJava名に対して定義されている。 

オーバロードを制御する規則は,ISO/IEC 9075-2の“11.50 <SQL呼出しルーチン>”及び“10.4 <ルーチ

ン呼出し>”で規定しているとおりのSQL言語の規則である。これは,次の規則を含む。 

− どのようなパラメタの組合せがオーバロードできるかを制御する規則。すなわち,次のCREATE文

の正当性(又は不当性)は,SQL言語の規則によって決定される。 

   CREATE FUNCTION is̲odd (INTEGER) RETURNS INTEGER... 

   CREATE FUNCTION is̲odd (SMALLINT) RETURNS INTEGER... 

   CREATE PROCEDURE is̲odd (SMALLINT) ... 

− オーバロードされるSQL名を用いた呼出しの解決を制御する規則。すなわち,あるデータ項目“x”

に対して“odd(x)”によって呼び出されるJavaメソッドの決定は,SQL言語の規則によって決定

される。 

上記のCREATE FUNCTION文のEXTERNAL NAMEでは,JavaメソッドのJAR名及びメソッド名だけ

を指定する。例えば,次のとおりである。 

CREATE FUNCTION odd (INTEGER) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over1.isOdd'; 

EXTERNAL NAMEでメソッドのJavaメソッド署名(すなわち,パラメタデータ型のリスト)を含める

こともできる。例えば,次のとおりである。 

CREATE FUNCTION odd (INTEGER) RETURNS INTEGER 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'over̲jar:Over1.isOdd (int)'; 

105 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

この細分箇条の前の方で示した八つの例のCREATE FUNCTION文のグループは,Javaメソッド署名を

必要とはしないが,明確化のために含めることができる。“E.14 CREATE文でのJavaメソッド署名”は,

Javaメソッド署名が必要とされる場合を記述する。 

E.13 Javaのmainメソッド 

[Java]は,mainと名付けられたメソッドに関して特別の要求をしていない。しかし,JVMは,クラス

名だけが与えられたときに呼び出すメソッドとして,次のJavaメソッド署名をもつmainと名付けられた

メソッドを認識する。 

public static void main (String[ ]); 

SQLのCREATE PROCEDURE...EXTERNAL文中でmainと名付けられたJavaメソッドを指定するなら

ば,そのJavaメソッドは,上記のJavaメソッド署名をもたなければならない。SQL手続の署名は,次の

いずれかであってもよい。 

− CHARACTER又はCHARACTER VARYINGの配列である単一のパラメタ。その配列は,String配列

パラメタとしてJavaメソッドに渡される。 

注記 このSQLメソッド署名は,SQLで配列データ型を提供するSQLシステムだけで用いるこ

とができる。 

− それぞれがCHARACTER又はCHARACTER VARYINGである0個以上のパラメタ。それらのN個

パラメタは,StringのN個の要素の単一の配列としてJavaメソッドに渡される。 

E.14 CREATE文でのJavaメソッド署名 

整数のパラメタをもち,jobcode値に対応する職務を示すStringを戻す次のメソッドjob1を考える。 

public class Routines4 { 

 // 関数として呼び出されるStringメソッド 

 public static String job1 (Integer jc) throws SQLException { 

  if (jc == 1) return "Admin"; 

  else if (jc == 2) return "Sales"; 

  else if (jc == 3) return "Clerk"; 

  else if (jc == null) return null; 

  else return "unknown jobcode"; 

 } 

後続するメソッドの変形を見越して,メソッド名の末尾に“1”を添えていることに注意を要する。 

SQLにこのクラスを組み込むことを仮定する。 

SQLJ.INSTALL̲JAR ('file:~/classes/Routines4.jar', 'routines4̲jar', 0) 

106 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

job1メソッドに対して定義されたSQL関数job̲of1を指定したいかもしれない。 

CREATE FUNCTION job̲of1(jc INTEGER) RETURNS CHARACTER VARYING(20) 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines4̲jar:Routines4.job1'; 

しかし,上記のこのCREATE文は正しくない。Javaメソッドjob1のパラメタのデータ型は,Javaの

Integer(java.lang.Integerの略)であり,SQLのjob̲of1関数の対応するパラメタに対してSQL

データ型INTEGERを指定していたことに注意を要する。しかし,SQLのCREATE PROCEDURE/FUNCTION

文の外部Java形式に対する詳細な規則(“9.8 <SQL呼出しルーチン>”参照)は,SQLのINTEGERパラメ

タに対する既定のJavaパラメタデータ型が,Javaのintデータ型であり,JavaのIntegerデータ型では

ないことを規定している。“E.15 ナル引数値及びRETURNS NULL句”で,JavaのintではなくJavaの

Integerをなぜ指定したいのかという理由を記述する。 

パラメタのデータ型がそれらの既定のJava型とは異なるJava型を含むJavaメソッドに対して,SQLの

CREATE PROCEDURE/FUNCTION文を指定したいならば,CREATE文のJavaメソッド署名中でそれらの

データ型を指定する。このJavaメソッド署名は,EXTERNAL NAMEに続けて指定するJavaメソッド名の

後に書く。例えば,job1メソッドに対する上記のCREATE文は,次のように書かれる。 

CREATE FUNCTION job̲of1(jc INTEGER) RETURNS CHARACTER VARYING(20) 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines4̲jar:Routines4.job1(java.lang.Integer)'; 

DYNAMIC RESULT SETS を指定するCREATE文のJavaメソッド署名中でデータ型を指定するならば,

そのJavaメソッド署名中の末尾に暗に想定される結果集合又は反復子のパラメタを含まなければならな

い。しかし,SQL署名中には,それらの末尾のパラメタを含めない。例えば,“E.10 orderedEmpsに対する

CREATE PROCEDURE rankedEmps”のCREATE文は,次のように書かれる。 

CREATE PROCEDURE ranked̲emps (region INTEGER) 

 READS SQL DATA 

 DYNAMIC RESULT SETS 1 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines3̲jar:Routines3.orderedEmps (int, java.sql.ResultSet[ ]); 

“9.8 <SQL呼出しルーチン>”を参照。 

E.15 ナル引数値及びRETURNS NULL句 

“E.14 CREATE文でのJavaメソッド署名”で定義した,Javaメソッドjob1及びそれに対応するSQL

関数job̲of1を考える。 

次のようなSQL文中でSQL関数job̲of1を呼び出すことができる。 

107 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

SELECT name, job̲of1(jobcode) 

FROM emps 

WHERE job̲of1(jobcode) <> 'Admin'; 

EMPS表の行がJOBCODE列中にナル値をもつと仮定する。job1メソッドのパラメタのJavaデータ型

がJavaのInteger(すなわち,Java.lang.Integer)であることに注意を要する。JavaのInteger デ

ータ型は,スカラデータ型ではなくクラスであり,その値は,数値及びナル参照値の両方を含む。データ

型がJavaクラスであるJavaパラメタにSQLのナル値が引数として受け渡されるとき,SQLのナル値は,

Javaのナル参照として受け渡される。Routines4.job1に示されるように,そのようなナル参照は,Java

メソッド内で試験することができる。 

さて,JavaクラスIntegerではなく,Javaスカラデータ型intをパラメタデータ型に指定する次の同

様のメソッドを考える。 

public class Routines5 { 

 // 関数として呼び出されるStringメソッド 

 public static String job2 (int jc) 

   throws SQLException { 

  if (jc == 1) return "Admin"; 

  else if (jc == 2) return "Sales"; 

  else if (jc == 3) return "Clerk"; 

  else return "unknown jobcode"; 

 } 

SQLにこのクラスを組み込むことを仮定する。 

SQLJ.INSTALL̲JAR( 'file:~/classes/Routines5.jar', 'routines5̲jar', 0) 

CREATE FUNCTION job̲of2 (jc INTEGER) RETURNS CHARACTER VARYING(20) 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines5̲jar:Routines5.job2'; 

次のようにSQL文中でSQL関数job̲of2を呼び出すことができる。 

SELECT name, job̲of2 (jobcode) 

FROM emps 

WHERE job̲of2(jobcode) <> 'Admin'; 

JOBCODE列がナルであるEMS表の行に,このSELECT文が出会うとき,job̲of2関数の呼出しでの

ナル値の効果は,前のjob̲of1関数とは異なる。job̲of2関数は,パラメタがクラスデータ型

java.lang.Integerではなく,スカラデータ型intであるメソッドRoutines5.job2に対して定義

108 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

されている。Javaのintデータ型(及びJavaの他のスカラデータ型)は,ナル参照値をもたず,ナル値

の他の表現をもたない。したがって,job2メソッドが,SQLのナル値で呼び出されるならば,例外条件

が引き起こされる。 

要約すると,次のとおりである。 

− 次のJavaデータ型は,ナル参照値をもち,ナルであるSQL引数を受け入れることができる。 

  java.lang.String, java.math.BigDecimal, byte[], java.sql.Date, java.sql.Time, 

  java.sql.Timestamp, java.lang.Double, java.lang.Float, java.lang.Integer, 

  java.lang.Short, java.lang.Long, java.lang.Boolean 

− 次のJavaデータ型は,ナルを受け入れることができないスカラデータ型である。そのようなパラメ

タデータ型として渡される引数値がナルならば,例外条件が引き起こされる。 

  boolean, byte, short, int, long, float, double 

ナル可能でないデータ型であるJavaパラメタにナル引数を渡そうとするときに引き起こされる例外条

件は,ナル標識変数を指定しなかったホスト変数にナルの列値をFETCH又はSELECTしようとしたとき

に引き起こされる従来のSQL例外条件に類似している。両方の場合に,“受け取る”パラメタ又は変数は,

実際の実行時のナル値を受け入れることができないので,例外条件が引き起こされる。 

Javaメソッドを特にSQL中で用いるためにコーディングするとき,ナル可能のJavaデータ型であるJava

パラメタデータ型を指定する傾向がおそらくある。しかし,SQL中で用いるためにコーディングされたの

ではないJavaメソッドで,(ナル可能でない)スカラJavaデータ型であるJavaパラメタデータ型を指定し

ているJavaメソッドをSQL中でも用いたいかもしれない。 

CASE式中などで条件付きでそれらを呼び出すことによってナル値が発生する文脈中で,そのような関

数を呼び出すことができる。例えば,次のとおりである。 

SELECT name, 

    CASE 

     WHEN jobcode IS NOT NULL THEN job̲of2 (jobcode) 

     ELSE NULL 

    END 

FROM emps 

WHERE CASE 

     WHEN jobcode IS NOT NULL THEN job̲of2 (jobcode) 

     ELSE NULL 

    END<> 'Administrator'; 

CREATE FUNCTION文中でRETURNS NULL ON NULL INPUT選択肢を指定することによって,そのよ

うなCASE式を暗に作ることもできる。 

CREATE FUNCTION job̲of22 (jc INTEGER) RETURNS CHARACTER VARYING(20) 

 RETURNS NULL ON NULL INPUT 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines5̲jar:Routines5.job2'; 

109 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

CREATE FUNCTION文がRETURN NULL ON NULL INPUTを指定するSQL関数が呼出されるとき,い

ずれかの引数の実行時の値がナルならば,関数呼出しの結果には,ナルが設定され,その関数自体は,呼

び出されない。 

次のSELECT文は,job̲of22関数を呼び出す。 

SELECT name, job̲of22(jobcode) 

FROM emps 

WHERE job̲of22(jobcode) <> 'Administrator'; 

このSELECTは,前に示したCASE式内でjob̲of2関数を呼び出すSELECTと等価である。すなわち,

job̲of22のためのCREATE FUNCTION文中のRETURNS NULL ON NULL INPUTは,ナルを試験する

CASE式を暗に作る。 

RETURNS NULL ON NULL INPUT選択肢は,関数のすべて (all) のパラメタに適用され,Javaデータ型

がナル可能でないパラメタだけに適用されるわけではない。 

RETURNS NULL ON NULL INPUT選択肢が関数に対して定義する規約は,ほとんどの組込みSQL関数

及び演算子に対して従うのと同じ規約である。すなわち,いずれかのオペランドがナルならば,演算の値

は,ナルである。 

RETURNS NULL ON NULL INPUTの代替手段は,CALLED ON NULL INPUTであり,それは,既定であ

る。 

上記のjob̲of2及びjob̲of22によって説明したように,複数のCREATE FUNCTION文中で同じJava

メソッドを指定すること(すなわち,SQLの同義語を定義すること)ができ,これらのCREATE FUNCTION

文は,RETURNS NULL ON NULL INPUT又はCALLED ON NULL INPUTのいずれかを指定することがで

きる。 

(異なる数及び/又は型のパラメタをもつ)job̲of22と名付けられた複数のSQL関数を作成するなら

ば,CREATE FUNCTION job̲of22文の幾つかでは,CALLED ON NULL INPUTを指定(又は既定として

省略)し,他では,RETURNS NULL ON NULL INPUTを指定することができる。オーバロード解決が行わ

れ,特定のCREATE FUNCTION文が識別された後に,RETURNS NULL ON NULL INPUTの動作が行われ

る。 

RETURNS NULL ON NULL INPUT及びCALLED ON NULL INPUTは,CREATE FUNCTION文中でだけ

指定することができる,すなわち,CREATE PROCEDURE文中では指定することができない。これは,手

続の呼出しには,一般的に有益であろう等価な条件付きの扱い方がないからである。 

E.16 静的変数 

Java静的メソッドは,静的変数をもつJavaクラス中に含めることができ,Javaでは,静的メソッドは,

静的変数を参照することができるし,静的変数に設定をすることもできる。 

例えば,次のとおりである。 

public class Routines6 { 

 static String jobs; 

 public static void setJobs (String js) throws SQLException {jobs=js;} 

110 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 public static String job3(int jc) throws SQLException { 

  if (jc < 1 || jc * 5 > length(jobs)+1) return "Invalid jobcode"; 

  else return jobs.substring(5*(jc-1), 5*jc); 

 } 

SQLシステムにこのクラスを組み込むことを仮定する。 

SQLJ.INSTALL̲JAR('file:~/classes/Routines6.jar', 'routines6̲jar', 0); 

クラスRoutines6は,静的変数jobsをもち,それは,静的メソッドsetJobsによって設定され,静

的メソッドjob3によって参照される。静的変数の値を動的に修正するRoutines6のようなクラスは,

Javaで明確に定義されており,役に立てることができる。しかし,そのようなクラスがSQLシステムに組

み込まれ,メソッドsetJobs及びJob3がSQL手続及び関数(<SQL呼出しルーチン>)として定義され

るとき,静的変数jobsへの代入の有効範囲は,処理系依存である。すなわち,その変数の有効範囲は,

規定されず,おそらく処理系間で(場合によっては,与えられた処理系の公開ごとに)異なる。 

例えば,次のとおりである。 

CREATE PROCEDURE set̲jobs (js CHARACTER VARYING(100)) 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines6̲jar:Routines6.setJobs'; 

CREATE FUNCTION job̲of3 (jc integer) RETURNS CHARACTER VARYING(20) 

 RETURNS NULL ON NULL INPUT 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'routines6̲jar:Routines6.job3'; 

CALL set̲jobs ('AdminSalesClerk'); 

SELECT name, job̲of3 (jobcode) 

FROM emps 

WHERE job̲of3(jobcode) <> 'Admin'; 

これは,SQLでRoutines6クラスを直接用いたように見える。set̲jobsの呼出しは,職務コードの

値のリストを指定し,それがSQL環境によって“キャッシュされ”,job̲of3の後続の呼出しで用いられ

ると利用者が合理的に考えるかもしれない。しかし,SQL環境での静的変数jobsの有効範囲が処理系依

存なので,set̲jobs手続に渡される値に関する次の問いに対する答えは,おそらく処理系間で異なる。 

− set̲jobsの値は,現行セションにだけ可視か?又は,並行セション及び最近の並行でないセショ

ンにも可視か? 

− set̲jobsの値は,COMMITをまたがって永続するか?それは,ROLLBACKによって再設定され

るか? 

この不確定の含意は,静的変数に代入するクラスをSQL中で用いないほうがよいことである。しかし,

CREATE PROCEDURE/FUNCTIONを実行するとき,又はルーチンを呼び出すときに,そのような代入が

111 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

SQL処理系によって(必ずしも)検出されないことに注意を要する。 

final特性をもつそれらを宣言することによって,Javaで静的変数への代入を防ぐことができる。 

E.17 JavaメソッドのSQL名の削除 

Javaメソッドに対するSQL手続名又は関数名を作成した後,通常のSQLのDROP文でそれらのSQL名

を削除することができる。 

DROP FUNCTION region RESTRICT; 

DROP文は,SQL名が定義されたJavaメソッド(又はクラス)に効果を及ぼさない。SQL手続又は関数

を削除することは,そのルーチンに対して付与されたいずれの権限も暗に取り消す。 

E.18 SQLからJavaクラスの削除 

SQLJ.REMOVE̲JAR手続でJARを完全に除去することができる。例えば,次のとおりである。 

SQLJ.REMOVE̲JAR ('routines̲jar', 0); 

前もって注意したように,JARは,配置記述子 (deployment descriptor) を含むことができ,それは,

SQLJ.INSTALL̲JAR及びSQLJ.REMOVE̲JAR手続によってとられる動作を暗に指定する。2番目のパラ

メタは,JAR中の配置記述子によって指定される動作をSQLJ.REMOVE̲JAR手続に実行させたいか又は

させたくないかを(それぞれ,0でない値か又は0の値かで示して)指定する整数である。配置記述子は,

“12.2 配置記述子ファイル”で更に記述している。 

SQLJ.REMOVE̲JAR手続がJARの配置記述子ファイルによって指定される動作を実行した後に,指定

されたJAR中のクラスのいずれかのメソッドを外部名が参照するSQL手続又は関数が残っていてはなら

ない。SQLJ.REMOVE̲JAR手続が成功終了する前に,残っているそのようなどのSQL手続又は関数も,

陽に削除されなければならない。 

E.19 SQLでのJavaクラスの置換え 

SQL中にJavaのJARを組み込み,例えば,それに含まれているクラスの幾つか又はすべてを訂正又は

改良するために,それらを置き換えたいと仮定する。現在のJARを除去するためにSQLJ.REMOVE̲JAR

手続を用いて,その後,新しい版を組み込むためにSQLJ.INSTALL̲JAR手続を用いることによって,こ

れを行うことができる。しかし,置き換えたいクラスのメソッドに依存する一つ以上のSQL DDL文をお

そらく実行していたということになる。すなわち,次のDDL操作の一つ以上を実行していたかもしれな

い。 

− クラスを参照するCREATE PROCEDURE/FUNCTION文。 

− それらのSQL手続及び関数を参照するGRANT文。 

− それらのSQL手続及び関数を呼び出すSQL手続及び関数のためのCREATE 

PROCEDURE/FUNCTION文。 

− それらのSQL手続及び関数を呼び出すSQLビュー及び表のためのCREATE VIEW/TABLE文。 

SQLJ.REMOVE̲JAR手続に対する規則では,JARが含んでいるクラスを除去する前に,クラスのメソッ

112 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ドを直接参照するすべてのSQL手続/関数を削除することが必要である。そして,RESTRICTに対するSQL

の規則では,SQLの<ルーチン削除文>で規定しているとおり,手続/関数を削除する前に,手続/関数を呼

び出すすべてのSQLオブジェクト(表,ビュー,SQLサーバモジュール,及び本体がSQLで書かれたル

ーチン)を削除する必要がある。 

したがって,JARを置き換えるためにSQLJ.REMOVE̲JAR及びSQL.INSTALL̲JAR手続を用いるなら

ば,JAR中のクラスのメソッドに直接又は間接的に依存するSQLオブジェクトを削除しなければならず,

それらの項目を再作成しなければならない。 

SQLJ.REPLACE̲JAR手続は,適当な有効性検査とともに瞬時に除去 (remove) 及び組込み (install) を

実行することによって,この要件を回避する。したがって,依存しているSQLオブジェクトを最初に削除

することなくSQLJ.REPLACE̲JAR手続を呼び出すことができる。 

例えば,“E.4 region及びcorrectStatesのSQLへの組込み”では,次の文でRoutines1のクラスを組み

込んだ。 

SQLJ.INSTALL̲JAR( 'file:~/classes/Routines1.jar', 'routines1̲jar', 0) 

このJARを次のような文で置き換えることができる。 

SQLJ.REPLACE̲JAR( 'file:~/revised̲classes/Routines1.jar', 'routines1̲jar') 

JAR名が同じでなければならないことに注意を要する。それは,現存するJARを識別し,置換え後のJAR

を引き続き識別する。置換え後のJARのURLは,元のJARのURLと同じでもよいし異なっていてもよ

い。 

一般的な場合には,新しいJAR中にはない古いJAR中のクラス,両方のJAR中にあるクラス,及び新

しいJAR中にあり古いJAR中にないクラスがある。これらは,それぞれ,一致しない古いクラス,一致

する古い/新しいクラス,及び一致しない新しいクラスとして参照する。 

置換え後のJARに関する妥当性の要件は,次のとおりである。 

− (すべての一致しない古いクラスは,取り除かれるので,)一致しない古いクラスのいずれかのメソ

ッドを参照する<外部Java参照文字列>をルーチン記述子の<外部ルーチン名>が指定したSQL手続

又は関数があってはならない。 

− 一致するクラスのメソッドを参照するどのCREATE PROCEDURE/FUNCTION文も,新しいクラス

に対して正しい文でなければならない。 

− 記述子の<JAR及びクラス名>がいずれかの一致しない古いクラスを参照するSQL利用者定義型が

あってはならない。 

− 一致するクラスのメソッドを参照するどのCREATE TYPE文も,新しいクラスに対して正しい文で

なければならない。 

これらの要件を満たすならば,SQLJ.REPLACE̲JAR手続は,(一致しないクラス及び一致するクラスの

両方の)古いクラスを削除し,(一致しないクラス及び一致するクラスの両方の)新しいクラスを組み込む。 

E.20 可視性 

SQLJ.INSTALL̲JAR手続は,SQLシステムに任意のJavaクラスを組み込む。しかし,すべてのクラス

113 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

のすべてのメソッドをSQL中で参照することができるわけではない。可視 (visible) のクラスの可視 のメ

ソッドだけをSQL中で参照することができる。可視のクラス及びメソッドの考えは,対応付け可能 

(mappable) なデータ型の概念を基にしている。対応付け可能 及び可視 の詳細な定義は,“4.5 パラメタ対

応付け”で規定している。それらは,次のように要約される。 

− Javaデータ型がSQLに対応付け可能 (及びその逆)とは,それが対応するSQLデータ型をもつか,

それがOUTパラメタに対して用いられる配列であるか,又はそれが結果集合に対して用いられる

配列であることと同値である。 

− Javaメソッドが(SQLに)対応付け可能 とは,各パラメタのデータ型が対応付け可能で,かつ,

結果型が対応付け可能なデータ型か又はvoidかのいずれかであることと同値である。 

JavaメソッドがSQL中で可視 とは,それがpublicで,staticで,かつ,対応付け可能であること

と同値である。 

組み込まれた可視のメソッドだけをSQL中で参照することができる。他のメソッドは,SQL中には単

純に存在しない。それらを参照しようとすると,名前が知られていない (unknown name) のような処理系

定義の構文誤りを引き起こす。 

しかし,可視でないクラス及びメソッドは,可視のメソッドによって用いることができる。 

E.21 例外 

SQLの例外条件は,SQL/JRT手続に対して定義される。例えば,SQLJ.INSTALL̲JAR又は

SQLJ.REPLACE̲JAR(など)の呼出し中に指定されるURL引数が正しくないならば,指定された

SQLSTATEでSQLの例外条件(java.sql.SQLException)が引き起こされる。これらの例外条件は,

手続の定義中で指定され,“15.2 SQLSTATE”で列挙されている。SQL中のJavaメソッドの実行の間に投

げられるJava例外は,Java内で受け取ることができ,これがなされるならば,それらの例外は,SQL処理

に影響を与えない。 

SQLから呼び出されたJavaメソッドが完了するとき,受け取られていないどのJava例外も,SQLの例

外条件としてSQLに返される。 

例えば,“E.3 Javaメソッドregion及びcorrectStatesの例”では,JavaメソッドRoutines1.regionを

定義した。そして,“E.5 region及びcorrectStatesに対するSQL名の定義”では,Javaメソッド

Routines1.regionに対するSQL関数名region̲ofを定義した。 

引数値が指定された値の範囲にないならば,JavaメソッドRoutines1.regionは,例外を投げる。 

public class routines1 { 

 public static int region(String s) throws SQLException { 

  if (s.equals ("MN") || s.equals ("VT") || s.equals ("NH")) return 1; 

  else if (s.equals ("FL") || s.equals ("GA") || s.equals ("AL")) return 2; 

  else if (s.equals ("CA") || s.equals ("AZ") || s.equals ("NV")) return 3; 

  else throw new SQLException("Invalid state code", "38001"); 

 } 

STATE列の値が 'TX' である行をEMPS表が含むと仮定する。したがって,次のSELECTがEMPSのそ

114 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

の行に出会うとき,それは,例外条件を引き起こす。 

SELECT name, region̲of(state) 

FROM emps 

WHERE region̲of(state) = 1; 

正しくないパラメタ( 'TX' )をもつregion̲of関数の呼出しは,'38001'のSQLSTATEでSQLの例外

条件を引き起こす。その例外に関連付けられたSQLのメッセージテキストは,次の文字列である。 

'Invalid state code' 

メッセージテキスト及びSQLSTATEは,Javaのthrow文中で指定されるJava例外中で指定してもよい。

その例外がSQLSTATEを指定するならば,そのSQLSTATEの最初の2文字は,“38”でなければならない。

(この要件に違反するならば,その効果は,処理系定義である。)その例外がSQLSTATEを指定しないな

らば,受け取られていないJava例外に対する既定のSQL例外条件が引き起こされる。“15.1 受け取られて

いないJava例外に対するクラス及びサブクラスの値”を参照。 

JavaメソッドがSQL文を実行するとき,SQL文で引き起こされたどの例外条件も,Java例外としてJava

メソッド中で引き起こされ,そのJava例外は,具体的には,JavaのExceptionクラスのSQLException

サブクラスである。Javaメソッドを呼び出した外側のSQL文でのそのようなSQL例外条件の効果は,処

理系定義である。可搬性のために,SQLから呼出され,それ自身がSQL文を実行し,その内側のSQL文

からSQLExceptionを受け取るJavaメソッドは,そのSQLExceptionを再び投げなければならない。 

E.22 配置記述子 

一組のJavaクラスを含むJARをSQLに組み込むとき,SQL手続及び関数として,それらのクラスの静

的メソッドを呼び出す前に,一つ以上のCREATE PROCEDURE/FUNCTION文を実行しなければならない。

そして,それらのCREATE PROCEDURE/FUNCTION文によって作成されるSQL名に対して,様々な

GRANT文も実行したいかもしれない。JARを後で除去するとき,対応するDROP PROCEDURE/FUNCTION

文及びREVOKE文を実行したくなる。 

幾つかのSQLシステム中にJARを組み込むことを計画するならば,個々のCREATE,GRANT,DROP

及びREVOKE文は,そのような各SQLシステムに対してしばしば同じになる。組込み動作及び除去動作

を容易にできる一つの方法は,次のとおりになる。 

− “組込みスクリプト”及び“除去スクリプト”として実行され,そのような動作を次のように実行

する“afterInstall”及び“beforeRemove”と呼ばれるメソッドを提供する。 

・ afterInstallメソッド:JARが組み込まれるときに実行したいCREATE及びGRANT文。 

・ beforeRemoveメソッド:JARが除去されるときに実行したいDROP及びREVOKE文

(afterInstallメソッドの動作の逆)。 

すなわち,afterInstall及びbeforeRemoveメソッドは,要求されるCREATE,GRANT,

DROP及びREVOKE文に対してSQLを呼び出すために,SQL/OLB又はJDBCを用いることになる。 

− deployクラスと呼んでもよいクラス中にafterInstall及びbeforeRemoveメソッドを含め,

配布を計画しているJAR中にそのdeployクラスを含める。 

115 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

− JARを組み込むために次のことを行うようにJARの受領者に指示する。 

・ JARに対してSQLJ.INSTALL̲JAR手続を呼び出す。 

・ after̲installのようなSQL名を与えて,afterInstallメソッドに対するCREATE手続文

を実行する。この“ブートストラップ”動作は,afterInstallメソッド自体の中に含めること

ができないことに注意を要する。 

・ after̲install手続を呼び出す。注記:before̲removeのようなSQL名をbeforeRemove

メソッドに与えるためのCREATE PROCEDURE文をafter̲install手続が含むと仮定するこ

とができる。 

− JARを除去するために次のとおりに続けるようにJARの受領者に指示する。 

・ before̲remove手続を呼び出す。 

・ after̲install及びbefore̲remove手続を削除する。この動作は,beforeRemove手続自

体の中に含めることができないことに注意を要する。 

・ SQLJ.REMOVE̲JAR手続を呼び出す。 

組込み動作及び除去動作のこの容易化は,幾つかの手動手順をまだ必要としていることに注意を要する。

したがって,SQL/JRTが配置記述子 (deployment descriptor) と呼ばれる機構を提供し,それを用いて,

SQLJ.INSTALL̲JAR及びSQLJ.REMOVE̲JAR手続によって暗に実行したいSQL文を指定することがで

きる。 

JARを組み込むとき,及び除去するときに,JAR中の配置記述子を解釈させたいならば,

SQLJ.INSTALL̲JAR手続のdeployパラメタに対して0でない値を指定し,同様にSQLJ.REMOVE̲JAR

手続のundeployパラメタに対しても同様に指定する。JARが配置記述子を含むならば,

SQLJ.INSTALL̲JAR手続は,JARのクラスを組み込んだ後に,実行するCREATE及びGRANT文を決定

するためにその配置記述子を用いる。対応するSQLJ.REMOVE̲JAR手続は,JAR及びそれのクラスを除

去する前に,実行するDROP及びREVOKE文を決定するために配置記述子を用いる。 

配置記述子は,JARが組み込まれるときに実行するSQLのCREATE及びGRANT文のリスト,並びに

JARが取り除かれるときに実行するSQLのDROP及びREVOKE文のリストを含むテキストファイルであ

る。 

例えば,上記のクラスRoutines1,Routines2及びRoutines3を単一のJAR中に一体化させたと仮

定する。次は,そのJAR中に含めたいかもしれない配置記述子の候補である。 

注記: 

− 配置記述子ファイル内で,CREATE文のEXTERNAL NAMEでプレースホルダのJAR名としてJAR

名“thisjar”を用いる。 

− この例中の様々な利用者名は,もちろん仮定である。 

SQLActions[ ] = { 

 "BEGIN INSTALL 

  CREATE PROCEDURE correct̲states (old CHARACTER(20), new CHARACTER(20)) 

   MODIFIES SQL DATA 

   LANGUAGE JAVA PARAMETER STYLE JAVA 

   EXTERNAL NAME 'thisjar:Routines1.correctStates'; 

  GRANT EXECUTE ON correct̲states TO Baker; 

116 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  CREATE FUNCTION region̲of(state CHARACTER(20)) RETURNS INTEGER 

   NO SQL 

   LANGUAGE JAVA PARAMETER STYLE JAVA 

   EXTERNAL NAME 'thisjar:Routines1.region'; 

  GRANT EXECUTE ON region̲of TO PUBLIC; 

  CREATE PROCEDURE best2 (OUT n1 CHARACTER VARYING(50), OUT id1 CHARACTER(5), 

     OUT region1 INTEGER, OUT s1 DECIMAL(6,2), 

     OUT n2 CHARACTER VARYING(50), OUT id2 CHARACTER(5), 

     OUT region2 INTEGER, OUT s2 DECIMAL(6,2), 

     region INTEGER) 

   READS SQL DATA 

   LANGUAGE JAVA PARAMETER STYLE JAVA 

   EXTERNAL NAME 'thisjar:Routines2.bestTwoEmps'; 

  GRANT EXECUTE ON best2 TO Baker, Cook, Farmer; 

  CREATE PROCEDURE ordered̲emps (region INTEGER) 

   READS SQL DATA 

   DYNAMIC RESULT SETS 1 

   LANGUAGE JAVA PARAMETER STYLE JAVA 

   EXTERNAL NAME 'thisjar:Routines3.rankedEmps'; 

  GRANT EXECUTE ON ordered̲emps TO PUBLIC; 

 END INSTALL", 

 "BEGIN REMOVE 

  REVOKE EXECUTE ON correct̲states FROM Baker RESTRICT; 

  DROP PROCEDURE correct̲states RESTRICT; 

  REVOKE EXECUTE ON region̲of FROM PUBLIC RESTRICT; 

  DROP FUNCTION region̲of RESTRICT; 

  REVOKE EXECUTE ON best2 FROM Baker, Cook, Farmer RESTRICT; 

  DROP PROCEDURE best2 RESTRICT; 

  REVOKE EXECUTE ON ordered̲emps FROM PUBLIC RESTRICT; 

  DROP PROCEDURE ordered̲emps RESTRICT; 

 END REMOVE" 

deploy̲routines.txtが上記の配置記述子を含んでいるテキストファイルの名前であると仮定する。

次のものを含んでいるJARを組み立てることになる。 

− テキストファイルdeploy̲routines.txt 

− Routines1,Routines2及びRoutines3のためのクラスファイル 

− 次のマニフェスト項目を含むマニフェストファイル 

   Name: deploy̲routines.txt 

117 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

   SQLJDeploymentDescriptor: TRUE 

SQLJ.INSTALL̲JAR及びSQLJ.REMOVE̲JAR手続を解釈するために,このマニフェスト項目は,JAR

中の配置記述子としてファイルdeploy̲routines.txtを識別する。 

配置記述子ファイルは,構文誤りを含んでもよい。一般に,CREATE又はGRANT文中で起こり得るい

ずれの誤りも,配置記述子ファイル中で発生してもよい。 

配置動作を実行しないで,配置ファイルを含むJARを組み込みたいかもしれない。例えば,それらの動

作は,構文誤りを含むかもしれないし,あるSQLシステムに対しては全く不適当であるかもしれない。

SQL.INSTALL̲JAR手続のdeployパラメタ,及びSQLJ.REMOVE̲JAR手続のundeployパラメタに対

して,0の値を指定することによって,これを行うことができる。 

E.23 パス 

前の箇条では,JAR及びそれらのJavaクラスの例は,パッケージjava.lang及びjava.sql中の他の

Javaクラスを参照した。組み込むJAR及びそれらのJavaクラスは,組み込んだ又は組み込むであろう他

のJAR中のJavaクラスも参照することができる。例えば,運営,プロジェクト管理及び資産管理に関す

るJavaクラスを含む三つJARをもつと仮定する。 

SQLJ.INSTALL̲JAR ('file:~/classes/admin.jar', 'admin̲jar', 0); 

この時点で,admin̲jar中のクラスのメソッドを参照するCREATE PROCEDURE/FUNCTION文を実行

することができる。そして,それらの手続及び関数を呼び出すことができる。実行時に,admin̲jarの

Javaメソッドがadmin̲jar中に含まれるシステムクラス又は他のJavaクラスを参照するならば,それら

の参照は,暗に解決される。admin̲jarメソッドが(下記で組み込む)property̲jar中に含まれるJava

クラスを参照するならば,解決されていないクラス参照に対する例外条件が引き起こされることになる。 

SQLJ.INSTALL̲JAR ('file:~/classes/property.jar', 'property̲jar', 0); 

SQLJ.INSTALL̲JAR ('file:~/classes/project.jar', 'project̲jar', 0); 

SQLJ.INSTALL̲JARのこれらの呼出しは,property̲jar及びproject̲jarを組み込む。しかし,

admin̲jar中のクラスによるproperty̲jarクラスの参照は,まだ解決されていない。同様に,

property̲jar内からのproject̲jar中のクラスの参照も,解決されておらず,逆もまた同様である。 

要約すると,次のとおりである。 

− JARを組み込むとき,そのJARのクラス内からのシステムクラスの参照,又は同じJAR中に含ま

れるクラスの参照は,暗に解決される。 

− 他のどのクラスの参照も,組み込まれたかどうかにかかわらず,解決されない。 

− 解決されていないクラス参照をもつJARを組み込むことができ,それらのクラスのメソッドに対す

るSQLルーチンを定義するために,CREATE PROCEDURE/FUNCTION文を用いることができる。 

− Javaメソッドに対して定義されたSQLルーチンを呼び出すとき,解決されていないクラス参照に対

する例外は,[Java]によって許されるどの時点で引き起こされてもよい。 

解決されていない参照を含むクラスを呼び出すことは,次の点で有用である。 

− 部分的に書かれたアプリケーションを用いるため,又は試験するため。 

118 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

− SQL環境中で用いるためには適切でない幾つかのメソッドを含むクラスを用いるため。例えば,他

のJava動作可能環境中で用いるが,SQLシステム内では用いない表示指向又は対話的メソッドをも

つクラス。 

他のJAR中のクラスへの参照を解決するために,SQLJ.ALTER̲JAVA̲PATH手続を用いる。 

SQLJ.ALTER̲JAVA̲PATH ('admin̲jar', '(property.*,property̲jar) 

     (project.*, project̲jar)'); 

SQLJ.ALTER̲JAVA̲PATH ('property̲jar', '(project.*,project̲jar)'); 

SQLJ.ALTER̲JAVA̲PATH ('project̲jar', '(*, property̲jar) (*, admin̲jar)'); 

SQLJ.ALTER̲JAVA̲PATH手続は,二つの引数をもち,それらの両方が文字列である。呼出し

SQLJ.ALTER̲JAVA̲PATH(JX, PX)では,次のとおりである。 

− JXは,パスを指定したいJARの名前である。これは,INSTALL̲JAR手続中で指定したJAR名で

ある。 

− PXは,JX中に含まれるクラスによって参照される解決されていないクラス名で,解決したいクラ

ス名を含むJARのパスである。パスの引数は,パス要素の(コンマで区切られてない)リストを含

んでいる文字列である。各パス要素は,括弧で囲まれ(,コンマで区切られ)た組で,その中の最

初の項目は,パターンであり,2番目の項目は,JAR名である。 

実行時に,JAR JX中に含まれるクラスCのメソッドが評価されていると仮定する。そして,クラスC

の実行の中で,XCと名付けられた他のクラスの参照に出会い,そのようなXCと名付けられたクラスが

JAR JX中に定義されていないと仮定する。SQLJ.ALTER̲JAVA̲PATHの呼出しでJAR JXに対して指定し

たパスPX(があるならば,それ)がクラス名XCの解決を,次のとおり決定する。 

− 各パス要素“(PATi, Ji)”が検査される。 

− PATiがXCと等価な完全修飾付きクラス名ならば,XCは,JAR Ji中で定義されていなければなら

ない。そうでないならば,XCの参照は,解決されない。 

− PATiが“*”が続くパッケージ名で,かつ,XCがそのパッケージ中のクラスの名前ならば,XCは,

JAR Ji中で定義されていなければならない。そうでないならば,XCの参照は,解決されない。 

− PATiが単一の“*”ならば,XCがJAR Ji中で定義されているならば,その解決を用いる。そうでな

ければ,後続するパス要素が試験される。 

したがって,admin̲jar,property̲jar及びproject̲jarに対して上記で指定したパスは,次の

効果をもつ。 

− admin̲jar内で実行するとき,property又はprojectパッケージ中にあるクラスは,それぞれ,

property̲jar及びproject̲jar中で解決される。 

− property̲jar内で実行するとき,projectパッケージ中にあるクラスは,project̲jar中で

解決される。 

− project̲jar内で実行するとき,すべてのクラスは,最初にproperty̲jar中で,その後

admin̲jar中で解決される。 

property̲jar中に含まれるクラスCがadmin̲jar中に含まれるクラスACの参照を直接含むならば,

property̲jarに対するパス中にadmin̲jarが指定されていないので,そのACの参照が解決されない

ということに注意を要する。しかし,project̲jar中に含まれるクラスのメソッドproject.C2.Mを

119 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

そのクラスCが呼び出して,project.C2.MがクラスACを参照するならば,admin̲jarが

property̲jarに対するパス中で指定されているので,そのACの参照は,admin̲jar中で解決される。

すなわち,クラスCを実行している間は,property̲jarに対して指定したパスが用いられ,クラスC2

を実行している間は,project̲jarに対して指定したパスが用いられる。このように,異なるJAR中に

含まれるクラスへの実行の移動に従って,そのような各JARに対して指定されるパスに現行のパスが変わ

る。言い換えると,JAR J1に対して指定されたパスは,J1のクラス内で直接起こるクラス参照にだけ適用

され,J1のクラスから呼び出される別のJAR中に含まれるクラス中で起こるクラス参照には適用されない。 

SQLJ.ALTER̲JAVA̲PATH手続の呼出し中で指定するパスは,指定されたJARの特性になる。与えら

れたJARは,高々一つのパスをもつ。JARに対するパス(があるならば,それ)は,JAR中のクラス及び

メソッドのすべての利用者に適用される。 

SQLJ.ALTER̲JAVA̲PATH手続を呼び出すとき,指定するパスは,指定されたJARに対する現行パス

(があるならば,その現行パス)を置き換える。現在実行しているクラス及びメソッドに関するこの置換

えの効果は,処理系定義である。 

SQLJ.ALTER̲JAVA̲PATH手続を実行するとき,実行者は,最初の引数として指定するJARの所有者

でなければならず,パス引数中で指定する各JARに対するUSAGE権限をもっていなければならない。 

パス機能は,選択機能である。 

E.24 権限 

SQL権限システムは,SQL/JRTのために拡張された。 

第1に,SQLJ組込み手続は,SQLスキーマ文とみなされ,呼び出すために処理系定義の権限が必要で

ある。 

第2に,USAGE権限がJARに対して定義される。JARに対するUSAGE権限は,次のために必要であ

る。 

− CREATE PROCEDURE/FUNCTION/TYPE文中で参照する。 

− SQLJ.ALTER̲JAVA̲PATH手続の呼出しでのSQL-Javaパス中でリストする。 

JARを組み込んだ利用者がそのJARの所有者であり,そのJARに対するUSAGEを暗にもち,USAGE

権限を他の利用者及び役割に付与することができる。所有者だけがJARの置換え,除去又は変更が可能で

ある。 

JARに対するUSAGE権限は,選択機能である。 

E.25 情報スキーマ 

外部Javaルーチン及び外部Javaデータ型を記述するために,情報スキーマに対して追加のビュー及び

列が定義される。 

− JARSは,データベース中に組み込まれたJARを列挙する。 

− METHOD̲SPECIFICATIONSは,静的フィールドメソッドに関する情報を含むために補われる。 

− ROUTINESは,外部Javaルーチンに関する情報を含む。 

− USAGE̲PRIVILEGESは,JARに対して付与されたUSAGE権限に関する情報を含む。 

− USER̲DEFINED̲TYPESは,外部Javaデータ型に関する情報を含むために補われる。 

さらに,ルーチン,型及び他のJARによるJARの使用は,次の新しいUSAGEビューの集まりで示され

る。 

120 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

− JAR̲JAR̲USAGEは,与えられたJARのSQL-Javaパスで用いるJARを列挙する。 

− ROUTINE̲JAR̲USAGEは,外部Javaルーチンで用いるJARの名前を示す。 

− TYPE̲JAR̲USAGEは,外部Javaデータ型で用いるJARの名前を示す。 

これらの情報スキーマビューは,選択機能である。 

121 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

附属書F 

(参考) 

型入門 

F.1 

概要 

この入門の箇条では,Javaクラス及びそれらのメソッドの一連の例を示し,SQLシステムにどのように

それらを組み込んで,SQLでのデータ型として用いることができるのかを示す。 

F.2 

Javaクラスの例 

この細分箇条では,JavaクラスAddress及びAddress2Lineの例を示す。 

− Addressクラスは,USAの街路の住所を表現し,街路の名前及び建物の番地を含むStreetフィ

ールド,並びに郵便番号を含むzipフィールドをもつ。 

− Address2Lineクラスは,Addressクラスのサブクラスであり,アパート番号のようなデータを

含むline2と名付けられた一つの追加フィールドを加えたものである。 

− Address及びAddress2Lineクラスは,両方とも次のメソッドをもつ。 

・ 既定の零項構成子。 

・ パラメタをもつ構成子。 

・ 住所の文字列表現を戻すtoStringメソッド。 

− Address及びAddress2Lineクラスは,両方ともJavaインタフェースjava.io.Serializable

及びjava.sql.SQLDataを実装するために指定される。 

SQLでのデータ型として用いるJavaクラスは,Javaインタフェースjava.io.Serializable若しく

はJavaインタフェースjava.sql.SQLDataのいずれか,又はその両方を実装しなければならない。これ

は,JVM間,及びJavaとSQLとの間でクラスインスタンスを移動させるために必要である。 

インポート文import java.sql.*;及びjava.math.*;がすべてのクラスに含まれていたと仮定する。 

次は,Addressクラスのテキストである。: 

public class Address implements java.io.Serializable, java.sql.SQLData { 

 public String street; 

 public String zip; 

 public static int recommendedWidth = 25; 

 private String sql̲type; // java.sql.SQLDataインタフェースに対して 

 // 既定の構成子。 

 public Address ( ) { 

  street = "Unknown"; 

  zip = "None"; 

 } 

 // パラメタをもつ構成子。 

 public Address (String S, String Z) { 

  street = S; 

122 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  zip = Z; 

 } 

 // 完全な住所の文字列表現を戻すためのメソッド。 

 public String toString( ) { 

 return "Street=" + street + " ZIP=" + zip; 

 } 

 // 先行する空白を取り除くためのvoidメソッド。 

 // これは,静的メソッドMisc.stripLeadingBlanksを用いる。 

 public void removeLeadingBlanks( ) { 

  street = Misc.stripLeadingBlanks(street); 

  zip = Misc.stripLeadingBlanks(zip); 

 } 

 // 二つの住所が算術的に隣接する地域にあるかどうかを 

 // 決定するための静的メソッド。 

 public static String contiguous(Address a1, Address a2) { 

  if (Integer.parseInt(a1.zip) == Integer.parseInt(a2.zip)+1 || 

    Integer.parseInt(a1.zip) == Integer.parseInt(a2.zip) -1) 

   return("yes"); 

  else 

   return("no"); 

 } 

 // java.sql.SQLData の実装: 

 public void readSQL (SQLInput in, String type) 

   throws SQLException { 

  sql̲type = type; 

  street = in.readString(); 

  zip = in.readString(); 

 } 

 public void writeSQL (SQLOutput out) 

   throws SQLException { 

  out.writeString(street); 

  out.writeString(zip); 

 } 

 public String getSQLTypeName () { 

  return sql̲type; 

 } 

次は,AddressクラスのサブクラスであるAddress2Lineクラスのテキストである。 

123 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

public class Address2Line extends Address 

   implements java.io.Serializable, java.sql.SQLData { 

 public String line2; 

 // 既定の構成子。 

 public Address2Line () { 

  super() ; 

  line2 = " "; 

 } 

 // パラメタをもつ構成子。 

 public Address2Line (String S, String L2, String Z) { 

  street = S; 

  line2 = L2; 

  zip = Z; 

 } 

 // 完全な住所の文字列表現を戻すためのメソッド。 

 public String toString() { 

  return "Street=" + street +" Line2=" + line2 + " ZIP=" + zip; 

 } 

 // 先行する空白を取り除くためのvoidメソッド。 

 // これがインスタンスを修正する重要なメソッドであることに注意を要する。 

 // これは,次に定義する静的メソッドMisc.stripLeadingBlanksを用いる。 

 public void removeLeadingBlanks( ) { 

  line2 = Misc.stripLeadingBlanks(line2); 

  super.removeLeadingBlanks() ; 

 } 

 // java.sql.SQLDataの実装: 

 public void readSQL (SQLInput in, String type) 

   throws SQLException { 

  super.readSQL(in,type); 

  line2 = in.readString(); 

 } 

 public void writeSQL (SQLOutput out) 

   throws SQLException { 

  super.writeSQL(out); 

  out.writeString(line2); 

 } 

 // 次のクラス及びメソッドは,上記のJavaメソッド中で内部的にだけ用いる。 

 // このメソッドに対するSQL関数を定義しない。 

public class Misc { 

124 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 // Stringから先行する空白を取り除く。 

 public static String stripLeadingBlanks(String s) { 

  int scan; 

  for (scan=0; scan < s.length() ; scan++) 

   if ( !java.lang.Character.isSpace(s.charAt(scan)) ) 

    break; 

  if (scan == s.length() ) return""; 

  else return s.substring(scan); 

 } 

F.3 

SQLシステムへのAddress及びAddress2Lineの組込み 

SQLシステム中にAddress及びAddress2Lineのようなクラスを組み込むためには,“附属書E ルー

チン入門”のように進める。クラスのためのソースコードは,ファイル拡張子javaをもつファイル中に

あり,ファイル拡張子classをもつオブジェクトコードファイルを作成するために,javacコマンドで

それをコンパイルする。その次に,それらのclassファイルをアセンブルしてファイル拡張子jarをも

つJavaのJARにし,そのJARをディレクトリ中に格納する。このディレクトリのためのURLは,指定す

ることができる。 

file:~/classes/AddrJar.jarがそのようなURLであると仮定する。これで,“附属書E ルーチン

入門”で述べたSQLJ.INSTALL̲JAR手続を呼び出すことによって,SQLシステムにクラスを組み込むこ

とができる。 

SQLJ.INSTALL̲JAR ('file:~/classes/AddrJar.jar', 'address̲classes̲jar', 0); 

F.4 

Address及びAddress2Lineに対するCREATE TYPE 

JavaクラスをSQLデータ型として用いる前に,SQLデータ型並びにそのフィールド及びメソッドに対

してSQL名を定義しなければならない。SQLのCREATE TYPE文の拡張形式でこれを行う。 

この規格の処理系は,独立したSQL文として,又は配置記述子ファイル中で,陽にCREATE TYPE文の

これらの拡張形式を提供するかもしれないし,CREATE TYPE文と同じ効果をもたらす処理系定義の機構

を提供するかもしれない。配置記述子ファイルは,JAR中に含まれ,(0でない3番目のパラメタで)配置

動作を指定する組込みSQL/JRT手続SQLJ.INSTALL̲JARの呼出しの間に暗に実行される。これは,“E.22 

配置記述子”で記述している。この附属書では,独立したSQL文としてのCREATE TYPE文を示す。 

次のSQLのCREATE TYPE文は,上記のJavaのAddress及びAddress2Lineクラスを参照する。 

CREATE TYPE addr EXTERNAL NAME 'address̲classes̲jar:Address' 

  LANGUAGE JAVA 

  AS ( 

 street̲attr CHARACTER VARYING(50) EXTERNAL NAME 'street', 

 zip̲attr CHARACTER(10) EXTERNAL NAME 'zip' ) 

 STATIC METHOD rec̲width () 

125 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  RETURNS INTEGER 

  EXTERNAL VARIABLE NAME 'recommendedWidth', 

 CONSTRUCTOR METHOD addr () 

  RETURNS addr SELF AS RESULT 

  EXTERNAL NAME 'Address', 

 CONSTRUCTOR METHOD addr (s̲parm CHARACTER VARYING(50), 

      z̲parm CHARACTER(10)) 

  RETURNS addr SELF AS RESULT 

  EXTERNAL NAME 'Address', 

 METHOD to̲string () 

  RETURNS CHARACTER VARYING(255) 

  EXTERNAL NAME 'toString', 

 METHOD remove̲leading̲blanks () 

  RETURNS addr SELF AS RESULT 

  EXTERNAL NAME 'removeLeadingBlanks', 

 STATIC METHOD contiguous (A1 addr, A2 addr) 

  RETURNS CHARACTER(3) 

  EXTERNAL NAME 'contiguous'; 

CREATE TYPE addr̲2̲line 

  UNDER addr 

  EXTERNAL NAME 'address̲classes̲jar:Address2Line' 

  LANGUAGE JAVA 

  AS ( 

 line2̲attr CHARACTER VARYING (100) EXTERNAL NAME 'line2' ) 

 CONSTRUCTOR METHOD addr̲2̲line () 

  RETURNS addr̲2̲line SELF AS RESULT 

  EXTERNAL NAME 'Address2Line', 

 CONSTRUCTOR METHOD addr̲2̲line (s̲parm CHARACTER VARYING(50), 

      s2̲parm CHARACTER(100), 

      z̲parm CHARACTER(10)) 

  RETURNS addr̲2̲line SELF AS RESULT 

  EXTERNAL NAME 'Address2Line', 

 METHOD strip () 

  RETURNS addr̲2̲line SELF AS RESULT 

  EXTERNAL NAME 'removeLeadingBlanks'; 

これらのCREATE TYPE文は,SQLのCREATE TYPE文の拡張である。上記の拡張は,SQLのCREATE 

PROCEDURE/FUNCTION文のEXTERNALの後に続くパターンをもつ部分,及びMETHODSの後に続く

パターンをもつ部分を追加している。 

この附属書では,これらのCREATE TYPE文の基本的な要素を述べて,次のあまり直観的でない記述項

126 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

目については,後の箇条で議論する。 

− AddressクラスのJava静的フィールドrecommendedWidthは,SQLのCREATE TYPE中で,

rec̲widthと名付けられた,引数をもたない静的メソッドによって表現されている。これは,“F.15 

静的フィールド”で記述している。 

− AddressクラスのJava voidメソッドremoveLeadingBlanksは,addr型のためのSQLの

CREATE TYPE中で,RETURNS SELF AS RESULTを指定するメソッドremove̲leading̲blanks

によって表現されている。Address2LineクラスのremoveLeadingBlanks及びstripメソッ

ドも同様に扱われている。これは,“F.16 インスタンス更新メソッド”で記述している。stripメ

ソッドは,複数のSQLメソッドが単一のJavaメソッドを参照できることを説明するために含めて

いる。 

− CREATE TYPE文の他の部分は,Javaクラスの署名の直接の書換えである。 

CREATE TYPEに続くEXTERNALは,組み込まれたJAR中で識別されるJavaクラスを参照しなければ

ならない。これは,当該Javaクラス (subject Java class) として参照され,SQLデータ型は,当該SQLデ

ータ型 (subject SQL data type) である。 

METHODに続くEXTERNALの部分がJava構成メソッド(すなわち,名前がクラス名と同じで,陽に

指定された戻り型がないメソッド)を参照するならば,SQLメソッド名は,SQLデータ型名と同じでなけ

ればならない。すなわち,構成関数の呼出しのための同じ規約がJava中と同じようにSQL中でも用いら

れる。 

Javaクラスに対して定義されたaddr及びaddr̲2̲lineのようなSQLデータ型は,外部Javaデータ

型 (external Java data type) として参照される。 

F.5 

単一のJavaクラスに対する複数のSQL型 

与えられたJavaクラスに対して,二つ以上のSQLデータ型を定義することができる。例えば,次のと

おりである。 

CREATE TYPE another̲addr 

  EXTERNAL NAME 'address̲classes̲jar:Address' 

  LANGUAGE JAVA 

  AS ( 

 zip̲part CHARACTER(10) EXTERNAL NAME 'zip', 

 street̲part CHARACTER VARYING(50) EXTERNAL NAME 'street') 

 STATIC METHOD rec̲width̲part () RETURNS INTEGER 

  EXTERNAL VARIABLE NAME 'recommendedWidth', 

 CONSTRUCTOR METHOD another̲addr () 

  RETURNS another̲addr SELF AS RESULT 

  EXTERNAL NAME 'Address', 

 CONSTRUCTOR METHOD another̲addr (s̲parm CHARACTER VARYING(50), 

      z̲parm CHARACTER(10)) 

  RETURNS another̲addr SELF AS RESULT 

  EXTERNAL NAME 'Address', 

127 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 METHOD string̲rep () 

  RETURNS CHARACTER VARYING(255) 

  EXTERNAL NAME 'toString', 

 STATIC METHOD contig (A1 another̲addr, 

      A2 another̲addr) 

  RETURNS CHARACTER(3) 

  EXTERNAL NAME 'contiguous'; 

SQLデータ型another̲addrは,addrデータ型とは異なるデータ型である。二つのデータ型は,比較

可能,代入可能又は和集合互換ではない。another̲addr型の下位型である“2 line”データのためのSQL

データ型を含めることもできるし,省くことができる。another̲2̲lineのような名前をもつそのよう

な下位型を定義するならば,another̲2̲lineのインスタンスは,another̲addrの特殊化であり,addr

の特殊化ではない。 

F.6 

サブクラスの欠落 

Address及びAddress2LineのようなJavaのクラス及びサブクラスが与えられると,そのような各ク

ラス又はこれらのクラスの部分集合のいずれに対しても,SQLデータ型を定義することができる。 

SQLでは,JavaクラスAddress2Lineだけを用いたいと仮定する。Addressクラスに対応するSQL

データ型なしで,そのクラスに対するSQLデータ型を定義することができる。例えば,次のとおりである。 

CREATE TYPE complete̲addr 

  EXTERNAL NAME 'address̲classes̲jar:Address2Line' 

  LANGUAGE JAVA 

  AS ( 

 zip̲attr CHARACTER(10) EXTERNAL NAME 'zip', 

 street̲attr CHARACTER VARYING(50) EXTERNAL NAME 'street', 

 line2̲attr CHARACTER VARYING(100) EXTERNAL NAME 'line2' ) 

 STATIC METHOD rec̲width () 

  RETURNS INTEGER 

  EXTERNAL VARIABLE NAME 'recommendedWidth', 

 CONSTRUCTOR METHOD complete̲addr () 

  RETURNS complete̲addr SELF AS RESULT 

  EXTERNAL NAME 'Address2Line', 

 CONSTRUCTOR METHOD complete̲addr (s̲parm CHARACTER VARYING(50), 

      s2̲parm CHARACTER(100), 

      z̲parm CHARACTER(10)) 

  RETURNS complete̲addr SELF AS RESULT 

  EXTERNAL NAME 'Address2Line', 

 STATIC METHOD contiguous (A1 complete̲addr, 

      A2 complete̲addr) 

128 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  RETURNS CHARACTER(3) 

  EXTERNAL NAME 'contiguous', 

 METHOD to̲string () 

  RETURNS CHARACTER VARYING(255) 

  EXTERNAL NAME 'toString', 

 METHOD strip () 

  RETURNS complete̲addr SELF AS RESULT 

  EXTERNAL NAME 'removeLeadingBlanks'; 

このCREATE TYPEがスーパクラスAddrの属性及びメソッドに対する属性定義及びメソッド定義を含

んでいることに注意を要する。CREATE TYPEにUNDERを指定しないときに限り,CREATE TYPE中にこ

のようなスーパクラスの属性及びメソッドを含めることができる。すなわち,CREATE TYPEでUNDER

とともに上位型を指定するならば,CREATE TYPEは,それが直に含む当該Javaクラスの属性及びメソッ

ドだけを含めることができる。 

CREATE TYPE文で指定することができるクラスの部分集合は,制限される。例えば,階層をもつクラ

スPerson,Employee,Manager及び Directorを組み込むと仮定する。ここで,各クラスは,先行

するクラスのサブクラスとする。次に示すクラスの部分集合に対してSQLデータ型を定義することができ

る。 

− Person,Employee,Manager及びDirector:これは,完全部分集合である。各SQLデータ型

は,それの当該Javaクラスの要素だけを含むことができる。 

− Person,Employee,Manager又はDirectorのいずれか一つ:この型は,それのスーパクラス

のいずれからの要素も含むことができる。 

− Manager及びDirector:Managerに対するSQLデータ型は,Person及びEmployeeからの要

素を含むことができる。Directorに対するSQLデータ型は,Directorの要素だけを含むことが

できる。 

− Employee,Manager及びDirector:Employeeに対するSQLデータ型は,Personからの要

素を含むことができる。Manager及びDirectorに対するSQLデータ型は,それらのクラスの要

素だけを含むことができる。 

− Employee及びManager:Employeeに対するSQLデータ型は,Personからの要素を含むこと

ができる。Managerに対するSQLデータ型は,そのクラスの要素だけを含むことができる。 

− Person,Employee及びManager,又はPerson及びEmployee:各クラスは,それの当該Java

クラスの要素だけを含むことができる。 

許されない部分集合は,サブクラスの中間レベルを省くものである。すなわち,クラスの次に示す部分

集合(だけ)に対するSQLデータ型を定義することができない。 

− Person及びManager,又はPerson,Manager及びDirector 

− Person及びDirector 

− Person,Employee及びDirector,又はEmployee及びDirector 

規則は,説明よりも簡単である。すなわち,次のとおりである。 

SQL型S2に対するCREATE TYPE文が“UNDER S1”を指定するならば,S1の当該Javaクラスは,

S2の当該Javaクラスの直接のスーパクラスでなければならない。 

129 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

“F.5 単一のJavaクラスに対する複数のSQL型”では,単一のJavaクラスに対して複数のSQLデータ

型をどのように定義することができるかを記述している。これは,下位型階層に対しても適用することが

できる。例えば,Person,Employee,Manager及びDirectorに対して定義されたSQLデータ型を

Pi,Ei,Mi及びDiとする。与えられた数iに対して,各型は,先行するi型の下位型として定義される。

次のようなSQLデータ型を定義することができる。 

− E1及びM1,並びにP2及びE2。すなわち,M1は,E1の下位型として定義され,E2は,P2の下

位型として定義される。この場合,E1とE2とは,異なる型である。E1のインスタンスは,P2の

特殊化ではない。 

− P1,E1及びM1,並びにM2及びD2。すなわち,E1は,P1の下位型として定義され,M1は,E1

の下位型として定義され,D2は,M2の下位型として定義される。この場合,M1とM2とは,異

なる型である。M2のインスタンスは,P1又はE1のいずれの特殊化でもなく,D2のインスタンス

は,P1又はE1のいずれの特殊化でもない。 

F.7 

データ型に対するGRANT及びREVOKE文 

前の箇条で示したCREATETYPE文を実行した後に,新しいデータ型に対するSQLのUSAGE権限を付

与するために,通常のSQLのGRANT文を実行することができる。 

GRANT USAGE ON TYPE addr TO PUBLIC; 

GRANT USAGE ON TYPE addr2line TO admin; 

利用者定義型に対するUSAGE権限のGRANT及びREVOKEの構文及び意味は,ISO/IEC 9075-2で規定

しているとおりであり,この規格では,それ以上記述していない。 

F.8 

クラスのための配置記述子 

Javaクラスの与えられたJARを組み込むどのSQLシステムでも,同じ組のSQLのCREATE文及び

GRANT文を実行し,そのJARを除去するときに対応するSQLのDROP文及びREVOKE文を実行したい

かもしれない。JAR中の配置記述子 (deployment descriptor) ファイル中にそれらのSQL文を指定すること

によって,この処理を自動化することができる。配置記述子ファイルは,JARが組み込まれるときに実行

するためのCREATE及びGRANT文のリスト,及びJARが除去されるときに実行するためのREVOKE及

びDROP文のリストを含む。 

次は,上記のJavaクラスのための配置記述子ファイル並びにSQLのCREATE及びGRANT文の例であ

る。 

SQLActions[ ] = { 

 "BEGIN INSTALL 

  CREATE TYPE addr 

    EXTERNAL NAME 'address̲classes̲jar:Address' 

    LANGUAGE JAVA 

    AS ( 

   zip̲attr CHARACTER(10) EXTERNAL NAME 'zip', 

130 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

   street̲attr CHARACTER VARYING(50) EXTERNAL NAME 'street') 

   STATIC METHOD rec̲width() 

    RETURNS INTEGER 

    EXTERNAL VARIABLE NAME 'recommendedWidth', 

   CONSTRUCTOR METHOD addr () 

    RETURNS addr SELF AS RESULT 

    EXTERNAL NAME 'Address', 

   CONSTRUCTOR METHOD addr (s̲parm CHARACTER VARYING(50), 

      z̲parm CHARACTER(10)) 

    RETURNS addr SELF AS RESULT 

    EXTERNAL NAME 'Address', 

   METHOD to̲string () 

    RETURNS CHARACTER VARYING(255) 

    EXTERNAL NAME 'toString', 

   METHOD remove̲leading̲blanks () 

    RETURNS addr SELF AS RESULT 

    EXTERNAL NAME 'removeLeadingBlanks', 

   METHOD strip () 

    RETURNS addr SELF AS RESULT 

    EXTERNAL NAME 'removeLeadingBlanks', 

   STATIC METHOD contiguous (a1 addr, a2 addr) 

    RETURNS CHARACTER(3) 

    EXTERNAL NAME 'contiguous'; 

  GRANT USAGE ON TYPE addr TO PUBLIC; 

  CREATE TYPE addr̲2̲line UNDER addr 

    EXTERNAL NAME 'address̲classes̲jar:Address2Line' 

    LANGUAGE JAVA 

    AS ( 

   line2̲attr CHARACTER VARYING(100) EXTERNAL NAME 'line2' ) 

   CONSTRUCTOR METHOD addr̲2̲line () 

    RETURNS addr̲2̲line SELF AS RESULT 

    EXTERNAL NAME 'Address2Line', 

   CONSTRUCTOR METHOD addr̲2̲line (s̲parm CHARACTER VARYING(50), 

      s2̲parm CHARACTER(100), 

      z̲parm CHARACTER(10) ) 

    RETURNS addr̲2̲line SELF AS RESULT 

    EXTERNAL NAME 'Address2Line', 

   METHOD strip () 

    RETURNS addr̲2̲line SELF AS RESULT 

    EXTERNAL NAME 'removeLeadingBlanks'; 

131 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

  GRANT USAGE ON TYPE addr̲2̲lineTO admin; 

 END INSTALL", 

 "BEGIN REMOVE 

  REVOKE USAGE ON TYPE addr̲2̲line FROM admin RESTRICT; 

  DROP TYPE addr̲2̲line RESTRICT; 

  REVOKE USAGE ON TYPE addr FROM PUBLIC RESTRICT; 

  DROP TYPE addr RESTRICT; 

 END REMOVE" 

F.9 

データ型としてのJavaクラスの使用 

SQLJ.INSTALL̲JAR手続で1組のJavaクラスを組み込み,Javaクラスに対して定義されるSQL型を

指定するための適当なSQLのCREATE文を実行した後に,それらの外部Javaデータ型をSQLの列のデー

タ型として指定することができる。例えば,次のとおりである。 

CREATE TABLE emps ( 

     name CHARACTER VARYING(30), 

     home̲addr addr, 

     mailing̲addr addr̲2̲line 

この表では,name列が普通のSQL文字列であり,home̲addr列及びmailing̲addr列が外部Java

データ型のインスタンスである。 

データ型が外部Javaデータ型であるSQLの列は,SQL/JRT列 (SQL/JRT column) として参照される。 

代替として,この規格の処理系がISO/IEC 9075-2で規定している型付き表を提供するならば,型付き表

を作成するためにSQL型を用いることができる。そして,型付き表中のオブジェクトを他の表で参照する

ことができる。この表現は,型付き表のオブジェクトを共有する(すなわち,複数のオブジェクトから参

照する)ことを許す。 

例えば,次に示すように,型付き表addressesに型addrのオブジェクトを格納し,他の一つ以上の

表からそれらを参照することができる。 

CREATE TABLE addresses OF addr ( 

     REF IS id SYSTEM GENERATED ) ; 

CREATE TABLE companies ( 

     name CHARACTER VARYING(100), 

     address REF(addr) SCOPE addresses 

) ; 

CREATE TABLE emps2 ( 

     name CHARACTER VARYING(30), 

     home̲addr REF(addr) SCOPE addresses, 

132 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

     mailing̲addr addr̲2̲line 

) ; 

addressesのような型付き表では,型の各属性は,型付き表中で同じ名前の独立した列になる。さら

に,型付き表は,表中の行(すなわち,オブジェクト)を識別する暗に想定される識別子列をもつ。上記

の例では,この列の名前は,idで,列の値は,データベースシステムによって自動的に生成される。ISO/IEC 

9075-2は,CREATE TYPE文の拡張構文(詳細は,“9.4 <利用者定義型定義>”及びISO/IEC 9075-2参照)

によって定義することができるオブジェクト識別子のための追加の生成機構を提供する。 

型REF(addr)の列中にaddresses表のオブジェクトへの参照を格納することができる。これらの列

の定義も,参照列の有効範囲としてaddresses表を識別する。 

F.10 SELECT,INSERT及びUPDATE 

emps.home̲addr及びemps.mailing̲addrのようなSQL/JRT列を指定した後に,それらの列に代

入する値は,Javaインスタンスでなければならない。このようなインスタンスは,Java中と同じように

NEW演算子を用いた構成メソッドの呼出しによって最初に生成される。例えば,次のとおりである。 

INSERT INTO emps VALUES ( 'John Doe', NEW addr(), NEW addr̲2̲line() ) 

INSERT INTO emps VALUES ( 'Bob Smith', NEW addr('432 Elm Street', '95123'), 

       

NEW addr̲2̲line('PO Box 99', 'attn: Bob Smith', '99678') ) 

SQL/JRT列に対して指定する初期値は,構成メソッドの呼出しの結果である。この規格の機能で役割が

Java中と同じNEWキーワードを利用していることに注意を要する。 

このような列の値は,一つの表から別の表に写すこともできる。例えば,次の追加の表を仮定する。 

CREATE TABLE trainees ( 

 name CHARACTER(30), 

 home̲addr addr, 

 mailing̲addr addr̲2̲line 

); 

INSERT INTO emps 

  ( SELECT * FROM trainees 

   WHERE name IN ('Bill Baker', 'Chuck Morgan', 'Frank Jones') ) ; 

型付き表へのオブジェクトの挿入には,通常の実表と同じ構文を用いる。例えば,次のとおりである。 

INSERT INTO addresses 

 VALUES ('1357 Ocean Blvd.', '99111') 

参照値は,(識別子列を用いて)被参照表から直接取得することも,他の参照列から取得こともできる。

例えば,次の文は,companies表に格納されている参照値を取得して,emp2表に挿入する。この結果,

133 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

addrオブジェクトが複数の参照しているものによって“共有”される状態になり,これによって,同じ

addrオブジェクトの複数の冗長な写しをもつのを避けることになる。 

INSERT INTO emps2 

 VALUES ( 'Rob White , NEW addr( '165 Oak Street', '95234' ), 

     ( SELECT address FROM companies 

      WHERE name = 'eBiz Unlimited' ) ) 

F.11 SQLでのJavaフィールド及びメソッドの参照 

SQLのフィールド修飾を用いてemps.home̲addr及びemps.mailing̲addr のようなSQL/JRT列の

メソッドを呼び出したり,参照したり,更新したりすることができる。 

SELECT home̲addr.to̲string() , mailing̲addr.to̲string() 

FROM emps 

WHERE name = 'Bob Smith'; 

SELECT name, home̲addr.zip̲attr 

FROM emps 

WHERE home̲addr.street̲attr= '456 Shoreline Drive'; 

UPDATE emps 

 SET home̲addr.street̲attr = '457 Shoreline Drive', 

   home̲addr.zip̲attr = '99323' 

WHERE home̲addr.to̲string() LIKE '%456%Shore%'; 

内参照演算子(“->”)を用いた参照によって,型付き表中のオブジェクトの列をアクセスしたり,型付

き表中のオブジェクトに関するメソッドを呼び出したりすることもできる。 

SELECT name, mailing̲addr->to̲string() 

FROM emps2 

WHERE name = 'Bob Smith'; 

SELECT name, mailing̲addr->street̲attr 

FROM emps2 

WHERE mailing̲addr->zip̲attr = '99111'; 

F.12 拡張可視性規則 

JavaクラスAddress及びAddress2Lineに対してSQLデータ型を定義し,それらのクラスをSQLの

列のデータ型としてどのように用いることができるかを示した。 

Javaクラスに対してそれらのSQLデータ型を定義することは,一つの付加的な効果を伴う。それらの

SQLデータ型及びそれらが定義されたJavaクラスが,対応するJava及びSQLのデータ型のリストに追加

されるので,データ型がそれらのJavaクラスであるJavaメソッドを用いることができる。例えば,次の

とおりである。 

134 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

public class Utility { 

 // AddressのremoveLeadingBlanksメソッドの関数版。 

 public static Address stripLeadingBlanks(Address a) { 

  return a.removeLeadingBlanks() ; 

 } 

 // Addr2LineのremoveLeadingBlanksメソッドの関数版。 

 public static Addr2Line stripLeadingBlanks(Addr2Line a) { 

  return a.removeLeadingBlanks() ; 

 } 

CREATE FUNCTION strip(a addr) RETURNS addr 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'address̲classes̲jar:Utility.stripLeadingBlanks'; 

CREATE FUNCTION strip(a addr̲2̲line) RETURNS addr̲2̲line 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'address̲classes̲jar:Utility.stripLeadingBlanks'; 

CREATE FUNCTION文は,被参照メソッドがSELF AS RESULTを指定することを示す構文をもたない

ことに注意を要する。被参照メソッドがその指定をもつので,二つのstrip関数は,両方ともそれらの入

力パラメタの写しを戻している。 

F.13 SQLでのJAVAインスタンスの論理表現 

“F.10 SELECT,INSERT及びUPDATE”では,SQL/JRT列に代入される値が,他のSQL/JRT列から,

又はJava構成子若しくは他のメソッドの呼出しの結果から代入されるのを見た。したがって,SQL/JRT列

に代入される値は,結局,JVM中でJavaメソッドによって構成される値から導出される。そのような値

は,Javaインタフェースjava.io.Serializable又はJavaインタフェースjava.sql.SQLDataのい

ずれかから得られる値によってSQL/JRT列中で表現される。それらのインタフェースの一方又は両方が

SQL中でデータ型として用いられるJavaクラスによって実装されなければならない。そのインタフェース

から得られる値は,実効的にJavaインスタンスの写しである。 

例えば,次のとおりである。 

INSERT INTO emps 

 VALUES ( 'Don Green', NEW addr('234 Stone Road', '99777'), 

      NEW addr̲2̲line() ); 

NEW演算子をもつaddr構成メソッドは,addrインスタンスを構成し,それへの参照を戻す。しかし,

相手がSQL/JRT列なので,SQLシステムは,インタフェースjava.io.Serializable又は

java.sql.SQLDataを用いて,実効的に新しいJava値の写しであるデータを取得して,emps表の新し

い行にその値を写す。 

addr̲2̲line構成メソッドは,指定されたパラメタ値をもつインスタンスではなく,既定のインスタ

135 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

ンスを戻すことを除いて,addrメソッドと同じ方法で処理する。しかし,とられる動作は,addrインス

タンスに対するものと同じである。 

SQL/JRT列に格納される値は,Javaインスタンスの写しであって,参照ではないことに注意を要する。

例えば,次のとおりである。 

INSERT INTO emps (name, home̲addr) 

 VALUES ('Sally Green', 

      SELECT home̲addr 

      FROM emps e2 

      WHERE e2.name='Don Green'); 

このINSERT文は,'Don Green' の行から,新しい ' Sally Green' の行にhome̲addr列を写す。Javaイン

スタンスの写しを含む列値自体が写されることに注意を要する。したがって,'Sally Green' の行及び 'Don 

Green' の行のhome̲addr列は,別個の写しであり,共有される写しの参照ではない。特に,次の文は,

'Sally Green' のhome̲addrに影響を与えない。 

UPDATE emps 

 SET home̲addr.zip̲attr = '94608' 

WHERE name = 'Don Green'; 

SQL/JRT列中に格納される値は,Javaメソッドに対して定義された関数へのパラメタとして列が渡され

るときに,“再構築される”。例えば,次のとおりである。 

UPDATE emps 

 SET home̲addr = strip(home̲addr) 

WHERE SUBSTRING(home̲addr.street̲attr, 1, 1) = ' '; 

strip関数は,Java静的メソッドUtility.stripLeadingBlanksに対して定義されたSQL関数で

ある。関数のパラメタのデータ型は,addrデータ型である。引数としてhome̲addr列を渡すとき,現

在行中の値は,JVM中で再構築され,再構築された値の参照が,メソッド

Utility.stripLeadiangBlanksに渡される。その関数の結果は,SQLデータ型addrに対応するデー

タ型Addressからの値である。Javaインタフェース java.io.Serializable又は

java.sql.SQLDataがこの戻される値に適用され,結果が列中に写し戻される。 

最後に,SQLのナルの役割を考える。例えば,次のとおりである。 

INSERT INTO emps (name) 

 VALUES ('Mike Green'); 

このINSERT文では,home̲addr又はmailing̲addr列に対して値を指定していないので,それらの

列には,INSERTで値を指定しない他のすべてのSQL列と同じ方法でナル値が設定される。このナル値は,

136 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

完全にSQL中で生成され,mailing̲addr列の初期化には,JVMが全く関与しない。 

F.14 静的メソッド 

Javaクラスのメソッドは,STATICか又はSTATICでないかのいずれかとして指定することできる。例え

ば,Addressクラスでは,toStringメソッドは,STATICではなく,contiguousメソッドは,STATIC

である。 

SQLのCREATE TYPE文のMETHODの指定箇所でも,メソッドがSTATICか又はSTATICでないかを

指定することができる。例えば,SQL型addrに対するCREATE TYPEは,to̲stringがSTATICでな

いメソッドであることを指定し,contiguousがSTATICメソッドであることを指定している。 

Java及びSQLでは,STATICでないメソッドは,クラス/型のインスタンスの修飾によって参照される。

例えば,JAI及びSAIが,それぞれ,型/クラスAddress又はaddrのJava変数及びSQL変数であると仮

定する。これらのインスタンスのtoString又はto̲stringメソッドを,式JAI.toString()又は

SAI.to̲string()によって参照することになる。 

Javaでは,STATICメソッドは,クラス又はクラスのインスタンスのいずれか の修飾によって参照する

ことができる。例えば,Address.contiguous(...)又はJAI.contiguous(...)のいずれかで,

contiguousメソッドを参照することができる。 

SQLでは,STATICメソッドは,インスタンスではなく型の修飾によって参照される。例えば,

addr::contiguous(...)のように,contiguousメソッドを参照する。(例えば,)

SAI.contiguous(...)のように,SQLのcontiguousメソッドを参照することはできない。SQLでは,

型名の静的メソッド修飾には,修飾の区切りとして単一の<ピリオド>ではなく,<2重コロン>を指定する

ことに注意を要する。これによって,SQLの他の構成体とのあいまい(曖昧)性が排除される。 

注記74 このようなフィールド修飾による静的メソッドの参照に加えて,この規格のSQLルーチン機

能を用いて独立手続又は関数を指定することによって,静的メソッドを参照することもでき

る。例えば,次のとおりである。 

CREATE FUNCTION contig̲function (A1 addr, A2 addr) 

  RETURNS CHARACTER(3) 

 LANGUAGE JAVA PARAMETER STYLE JAVA 

 EXTERNAL NAME 'address̲classes̲jar:Address.contiguous'; 

F.15 静的フィールド 

Javaクラスのフィールドは,STATICか又はSTATICでないかのいずれかとして指定することができる。

Addressクラスの例では,street及びzipフィールドは,STATICでなく,recommendedWidthフィ

ールドは,STATICである。 

Javaクラスの静的フィールドには,それらを読込み専用にするFINALを指定することができる。FINAL

でないフィールドは,更新することができる。利用者は,読込み専用静的フィールドに対して,必ずしも

FINAL句を指定するとは限らない。 

SQLのCREATE TYPEには,属性がSTATICであることを指定するための機能を含まない。これは,デ

ータベース環境中での静的フィールドの有効範囲,永続性及びトランザクション特性が何であるかを規定

することが困難であることによる。 

137 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

しかし,SQLのCREATE TYPEでは,Java静的フィールドの値に対する読込み専用アクセスのための簡

便な機構を提供する。これについては,recommendedWidthフィールドに対してSTATIC METHODを指

定するaddrのためのCREATE TYPEで説明する。 

CREATE TYPE addr EXTERNAL NAME 'address̲classes̲jar:Address' 

  LANGUAGE JAVA 

  USING SERIALIZABLE 

  AS ( 

 zip̲attr CHARACTER(10) EXTERNAL NAME 'zip', 

 street̲attr CHARACTER VARYING(50) EXTERNAL NAME 'street' ) 

 STATIC METHOD rec̲width () RETURNS INTEGER 

  EXTERNAL VARIABLE NAME 'recommendedWidth', 

 ... ; 

rec̲widthに対するSTATIC METHODの指定箇所では,それがパラメタなしの整数値として評価され

るメソッドであることを指定する。静的メソッドに対するEXTERNALの指定箇所では,通常Javaクラス

の静的メソッドの名前を指定する。しかし,この場合には,EXTERNALに続けてキーワードVARIABLE

を指定し,Javaクラスの静的フィールドの名前を与えている。STATIC METHODの指定箇所でEXTERNAL 

VARIABLEを指定するとき,メソッドは,パラメタをもってはならず,指定するJavaの名前は,静的フィ

ールドの名前でなければならない。そのような静的メソッドは,通常の方法で呼び出され,指定されたJava

静的フィールドの値を戻す。 

そのような宣言が与えられたと,次に示すとおり,他の静的メソッドと同じ方法でrec̲widthメソッ

ドを参照し,recommendedWidthフィールドをアクセスすることができる。 

SELECT * 

FROM emps 

WHERE LENGTH(home̲addr.street̲attr) > addr::rec̲width(); 

SQLでは,Java静的フィールドの値を更新するための方法を提供しない。 

F.16 インスタンス更新メソッド 

静的でないJavaクラスメソッドは,クラスのインスタンスでの修飾によって呼び出される。例えば,JAI

がJavaのAddressクラスのインスタンスであると仮定すると,JAI.toString()又は

JAI.removeLeadingBlanks()でtoString又はremoveLeadingBlanksメソッドを参照することに

なる。 

そのような静的でないメソッドは,メソッド参照を修飾するインスタンス,例えば,インスタンスJAI

のフィールドを一般的に参照する。toStringメソッドは,読込み専用の方法でインスタンスJAIを参照

し,そのインスタンスの文字列表現を戻す。しかし,removeLeadingBlanksメソッドは,インスタン

スの値を更新する方法で修飾しているインスタンスを参照する。その更新は,メソッド呼出しの副作用と

なる。 

138 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

toStringのような読込み専用メソッドは,SQLに自然に適合する。例えば,上記のemps表が与えら

れると,次のとおりである。 

SELECT name, home̲addr.to̲string() 

FROM emps 

WHERE home̲addr.to̲string() <> x; 

“F.13 SQLでのJAVAインスタンスの論理表現”で説明したように,SQLの列及び変数中に格納された

Javaインスタンスは,Java値の写しであって,そのような値の参照ではない。したがって,修飾している

インスタンスに副作用があるremoveLeadingBlanksのようなメソッドは,SQLに対して,自然には適

合しない。この理由のため,Javaクラスに対するSQLのCREATE TYPEでは,副作用をもつJavaメソッ

ドの参照のための特別な機構を提供する。これは,次に示すように,remove̲leading̲blanksに対す

るMETHODの指定によって説明する。 

CREATE TYPE addr EXTERNAL NAME 'address̲classes̲jar:Address' 

 LANGUAGE JAVA 

 USING SERIALIZABLE 

 AS ... 

 METHOD remove̲leading̲blanks () RETURNS addr SELF AS RESULT 

  EXTERNAL NAME 'removeLeadingBlanks'; 

JavaのAddressクラスのremoveLeadingBlanksメソッドがvoidメソッドであることを思い出す。

その結果,SQLのremove̲leading̲blanksを,voidメソッド,すなわち,“手続メソッド”として指

定することを期待するかもしれない。しかし,SQLのCREATE TYPEでは,voidメソッド又は手続メソ

ッドを指定するための方法を提供していない。これは,このようなメソッドが修飾しているインスタンス

にほとんど常に副作用を起こし,値指向のSQL文脈に適合しないからである。 

SQLのremove̲leading̲blanksメソッドでは,RETURNS SELF AS RESULTを指定している。これ

は,次の重要性をもつ。 

− メソッドの戻り型は,そのメソッドが含んでいるSQLデータ型として定義される。すなわち,SQL

のremove̲leading̲blanksメソッドは,addr値として評価されるメソッドである。これは,

基となるJavaメソッドの戻り型と無関係な場合である。典型的な場合には,もととなるJavaメソ

ッドは,voidメソッドになるが,後で議論するとおり,これは,要件ではない。 

− 実行時,指定されたJavaメソッドは,通常の方法で呼び出され,修飾しているインスタンスの写し

のフィールドを更新する。呼出しが完了するとき,SQLシステムでは,修飾しているインスタンス

の更新された値の写しを作成し,メソッドの結果としてその写しを戻す。 

remove̲leading̲blanksの呼出しの例は,次のとおりである。 

UPDATE emps 

 SET home̲addr = home̲addr.remove̲leading̲blanks() 

WHERE ... ; 

139 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

このようなUPDATE文は,通常の方法で,emps表の各行を処理し,WHERE句が真である各行に対し

てSET動作を実行する。そのような行に対して,home̲addr列の値がJava仮想機械に渡され,Address

クラスのそのインスタンスに対してremoveLeadingBlanksメソッドが評価される。そのメソッドは,

現在のhome̲addr列の写しのフィールドで副作用を起こして戻る。SQLシステムでは,Addressインス

タンスの更新された値の写しを作成し,remove̲leading̲blanksの呼出しの結果としてその写しを戻

す。その写しが現在行のhome̲addr列に逆に代入される。 

次に示すとおり,Remove̲leading̲blanksの若干異なる呼出しを考える。 

SELECT name, home̲addr.remove̲leading̲blanks().street̲attr 

FROM emps 

WHERE ... ; 

このSELECT文は,emps行を処理し,選択された行に対して選択リストを評価する。その選択リスト

の2番目の要素がhome̲addr列のremove̲leading̲blanksメソッドを呼び出す。上記のとおり,こ

の呼出しがJVMにhome̲addr値の写しを渡し,そのJVMで,removeLeadingBlanksメソッドがそ

の写しを更新する。その後,SQLシステムは,更新された写しの写しを戻し,street̲attr属性を抽出

する。そのstreet̲attr属性には,既に処理された先行する空白の除去が反映されている。しかし,こ

れらの動作は,emps表中のhome̲addr列の値には影響を与えない。 

このSELF AS RESULTの機構は,SQLに任意のJavaメソッドの副作用を適用させるための一般的な方

法を提供する。 

修飾しているインスタンスを更新するJavaメソッドは,通常,voidメソッドとして書かれる。しかし,

幾つかの場合には,そのようなメソッドでも,(例えば,)“OK”の指示のような,ある種の状態フィード

バック情報を知らせる整数値を戻すように書かれる。この理由によって,メソッドの戻り型に関係なく,

任意のJavaメソッドに対してRETURNS SELF AS RESULTを指定することができる。しかし,メソッド呼

出しが陽に提供するこの戻り値は,SQLシステムによって単純に破棄され,陽に戻される値は,修飾して

いるインスタンスの暗に想定される写しで置き換えられることに注意を要する。 

F.17 SQL/JRTデータの下位型 

JavaクラスAddress及びAddress2Line,並びに対応するSQLデータ型addr及びaddr̲2̲line

の例を思い出す。Address2Lineクラスは,Addressクラスのサブクラスなので,Javaの代替可能性及

びメソッドオーバロード特性を利用することができる。 

例えば,addr̲2̲lineの値をaddr列に代入することが可能である。home̲addr列がaddrであり,

mailing̲addr列がaddr̲2̲lineであるemps表でこれを説明することができる。 

UPDATE emps 

SET home̲addr = mailing̲addr 

WHERE home̲addr IS NULL; 

上記のSET句が実行される行に対して,home̲addrの宣言型がaddrであっても,home̲addr列は,

addr̲2̲lineを含む。 

140 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

このような代入は,実際のインスタンス値又はその実行時データ型を修正しない。したがって,

addr̲2̲lineの値をmailing̲addr列からhome̲address列に格納したとき,それらの値は,

addr̲2̲lineの実行時の型をもたなければならない。これの効果は,次の例で見ることができる。 

addr型及びaddr̲2̲line下位型は,両方ともtoStringと名付けられたメソッドをもち,完全な

addressデータのString形式を戻すことを思い出す。 

to̲stringメソッドの次の呼出しを考える。 

SELECT name, home̲addr.to̲string() 

FROM emps 

WHERE home̲addr.to̲string() NOT LIKE '%Line2=%'; 

empsの各行に対して,home̲addr列の宣言型は,addrであるが,home̲addr 値の実行時の型は,addr

又はaddr̲2̲lineのいずれかであり,前述のUPDATE文の効果に依存する。home̲addr列の実行時の

値がaddrである行に対して,addrクラスのto̲stringメソッドが呼び出され,home̲addr列の実行

時の値がaddr̲2̲lineである行に対して,addr̲2̲lineサブクラスのto̲stringメソッドが呼び出

される。 

to̲stringメソッドのこの実行時選択の方法は,次のとおりに行われる。 

− コンパイル時に,SQLシステムが,home̲addr.to̲string()の呼出しが構文的に正しく,結果

型が(例えば,LIKE述語に対して)適切であることを決定する。 

− 実行時に,SQLシステムが,次の段階を踏んで,empsの各行に対するhome̲addr.to̲sting()

の呼出しを処理する。 

• 

当該行のhome̲addr列の値がJVM中に再構築され,その再構築された値に対する参照Rが得

られる。 

• 

R.toString()の呼出しが,評価のためにJVMへ渡される。JVMは,適切なtoStringメソッ

ドの実行時選択を実施して,結果を戻す。 

F.18 ナルインスタンスのフィールド及びメソッドの参照 

次の行をemps表に挿入すると仮定する。 

INSERT INTO emps (name) 

VALUES ('Charles Green') 

home̲address及びmailing̲address列に対して値が指定されていないので,両方ともナルである

ことに注意を要する。 

次のSELECT文を考える。 

SELECT name, home̲addr.zip̲attr 

FROM emps 

WHERE home̲addr.zip̲attr IN ('95123', '95125', '95128'); 

141 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

このSELECTの意図は,home̲addrのzipフィールドが,指定された値のいずれかをもつemps行の

与えられた値を検索することである。これは,home̲addrがナルであるempsの行を含まないことにな

る。 

このSELECT文を実行するとき,WHERE句は,empsの各行に対して評価され,empsは,home̲addr

列がナルである行を含んでいる。Java及び他のプログラム言語では,ナルインスタンスのフィールドを参

照しようとするならば,例外条件が引き起こされる。SQLでその規則を用いると,empsのいずれかの行

のhome̲addr列がナルであったならば,上記のSELECTは,例外を引き起こすことになる。これは,特

定の行に対する例外ではなく,SELECT文全体に対する例外であることに注意を要する。望まれる効果を

得るためには,次のようなSELECTを書かなければならないことになる。 

SELECT name, home̲addr.zip̲attr 

FROM emps 

WHERE CASE 

     WHEN home̲addr IS NOT NULL 

      THEN home̲addr.zip̲attr 

     ELSE NULL 

    END IN ('95123', '95125', '95128'); 

実際,例外を引き起こすナルインスタンスのフィールド参照を指定するならば,実質的に,フィールド

を参照するすべてのWHERE句でそのようなCASE式を書かなければならないことになる。これは,極め

て冗長なので,ナルインスタンスのフィールド参照に対するSQL/JRTの規則は,次のとおり,Javaとは異

なる。 

フィールド参照で指定されたインスタンスの値がナルならば,フィールド参照は,ナルとする。 

この規則は,上記のCASE式が暗に想定されることを規定していることと等価である。 

したがって,この規則によって,最初の形式でSELECTを書くことが許される。home̲addr列がナル

である行に対して,フィールド参照home̲addr.zip̲attrは,ナルになる。 

ナルインスタンスをもつフィールド参照に対するこの規則は,“値”又は“右側”文脈でのフィールド参

照にだけ適用され,代入又はSET句の相手であるフィールド参照には適用されない。 

例えば,次のとおりである。 

UPDATE emps 

 SET home̲addr.zip̲attr = '99123' 

WHERE name = 'Charles Green'; 

このWHERE句は,'Charles Green' の行に対して明らかに真になるので,UPDATE文は,与えられたSET

句を実行しようとする。ナルインスタンスのフィールドに値を代入することができないので,これは,例

外を引き起こす。これは,値を代入できるフィールドをナルインスタンスがもたないからである。 

すなわち,ナルインスタンスのフィールドに対するフィールド参照は,正しくて,右側文脈ではナル値

142 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

を戻し,左側文脈では例外を引き起こす。 

ナルインスタンスのメソッド呼出しにも,まさに同じ考慮が適用され,同じ規則が適用される。 

例えば,次のように,前記の例を修正し,home̲addr列のto̲stringメソッドを呼び出すことを仮

定する。 

SELECT name, home̲addr.to̲string() 

FROM emps 

WHERE home̲addr.to̲string() = 'Street=234 Stone Road ZIP=99777' 

厳密なJavaの規則を適用するならば,home̲addr列がナルである行に対するto̲stringメソッドの

呼出しは,例外を引き起こす。したがって,上記のとおり,次のようにSELECTをコーディングする必要

がある。 

SELECT name, home̲addr.to̲string() 

FROM emps 

WHERE CASE 

     WHEN home̲addr IS NOT NULL 

      THEN home̲addr.to̲string() 

     ELSE NULL 

    END = 'Street=234 Stone Road ZIP=99777'; 

したがって,フィールド参照に対するJavaの規則を拡張したのと同じ方法で,メソッド呼出しに対する

Javaの規則を拡張する。 

インスタンスメソッド呼出しで指定されたインスタンスの値がナルならば,呼出しの結果は,ナルとす

る。 

F.19 SQL/JRTデータの順序付け 

以前の箇条で,データ型がそれぞれJavaクラスAddress及びAddress2Lineとして宣言される列

home̲addr及びmailing̲addrをもつemps表を作成した。ここで,次のような文中でそれらの列を参

照すると仮定する。 

SELECT DISTINCT * 

FROM emps E1, emps E2 

WHERE E1.home̲addr = E2.home̲addr 

 AND E1.mailing̲addr > E2.mailing̲addr 

UNION 

SELECT DISTINCT * 

FROM emps E1, emps E2 

WHERE E1.mailing̲addr = E2.mailing̲addr 

143 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

 AND E1.home̲addr > E2.home̲addr 

GROUP BY home̲addr 

ORDER BY home̲addr, mailing̲addr; 

この文は,home̲addr及びmailing̲addrの多くの参照を含み,それらの参照は,次に示す順序付け

関係を暗に想定する。 

1) DISTINCTキーワードは,対応する列の対の比較として指定する行の等値性に関して定義されてい

る。すなわち,empsの二つの行がDISTINCTかどうかを決定するためには,それらのそれぞれの

home̲addr及びmailing̲addr列を比較しなければならない。 

2) “=”及び“>”などを用いる直接比較は,すべて順序付け特性を必要とする。 

3) UNION演算子は,UNION ALLを指定しないので,重複を排除する。これは,DISTINCTと同じ種

類の比較を必要とする。 

4) GROUP BYは,グループ化列の等しい値で行を集合に分割することを必要とする。 

5) ORDER BYでは,順序列の順序付け特性の決定を必要とする。 

CREATE TYPE…EXTERNAL LANGUAGE JAVA文で外部Javaデータ型を作成するとき,新しい外部Java

データ型には,順序付けの能力がない。すなわち,それの“順序付け形式”は,“なし”である。順序付け

形式がなしである外部Javaデータ型のインスタンスは,上記の順序付け関係のいずれにも用いることはで

きない。 

外部Javaデータ型に対して順序付けを定義するためには,次に示すCREATE ORDERING文を用いる。 

<利用者定義順序付け定義> ::= 

 CREATE ORDERING FOR <利用者定義型名> 

 <順序付け形式> 

<順序付け形式> ::= 

  EQUALS ONLY BY <順序付けカテゴリ> 

 | ORDER FULL BY <順序付けカテゴリ> 

<順序付けカテゴリ> ::= 

  MAP WITH <順序付けルーチン> 

 | RELATIVE WITH <順序付けルーチン> 

 | RELATIVE WITH COMPARABLE INTERFACE 

 | STATE 

EQUALS ONLY及びFULL代替手段の意味は,次のとおりである。 

− EQUALS ONLYは,関連付けられるクラスのインスタンスを,等号(=)及び不等号(<>)演算子,

SELECT DISTINCT,重複排除を伴うUNION,並びにGROUP BYで参照できるが,他の順序付け文

脈では参照できないことを指定する。 

− FULLは,関連付けられるクラスのインスタンスをどの順序付け文脈でも参照できることを指定す

る。 

STATEは,インスタンスがその型の属性の値で順序付けられることを指定する。 

MAPでは,関連付けられるクラスのインスタンスを組込みSQLデータ型の値に対応付けるメソッド又

144 

X 3005-13:2007 (ISO/IEC 9075-13:2003) 

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。 

は関数の名前を指定し,その順序付けは,関連付けられるクラスの順序付けを定義する。対応付けるルー

チンは,1対1対応を定義する必要はない。それは,異なるインスタンスの値を同じ結果に対応付けるこ

とができる。これは,有理数を実装するクラスに対して,6/8と3/4とを等しいとみなすために行われる。

それは,大文字小文字を区別しない比較,及び異なるインスタンスを等しいとみなすことを必要とする他

の場合にも行うことができる。 

RELATIVE WITH <順序付けルーチン>では,関連付けられるクラスのインスタンスを比較し,整数の結

果を戻すメソッド又は関数の名前を指定する。二つのインスタンスX及びYに対する実行時の結果の値は,

-1,0又は+1であり,それぞれ,XがYより小さい (less than),等しい (equal to),又はより大きい (greater 

than) ことを示す。 

RELATIVE WITH COMPARABLE INTERFACEは,当該Javaクラスがjava.lang.Comparableを実装

するSQLデータ型に対する順序付けでだけ用いてもよい。当該Javaクラスのint compareToメソッド

では,二つのインスタンスX及びYに対する相対的な順序付けを決定して,XがYより小さいか,等し

いか又はより大きいかを示すために,それぞれ,負の整数,0又は正の整数を戻す。