ノンストップデータベース　HiRDB Version 10 UAP開発ガイド

解説・手引書

3020-6-560-50

前書き

対象製品

●適用OS：HP-UX 11i V3(IPF)

P-1J62-35A1 HiRDB Server Version 10 10-05

P-1J62-1DA1 HiRDB/Run Time Version 10(64) 10-05

P-1J62-1EA1 HiRDB/Developer's Kit Version 10(64) 10-05

P-F1J62-11A13 HiRDB Staticizer Option Version 10 10-00

P-F1J62-11A15 HiRDB Non Recover Front End Server Version 10 10-00

P-F1J62-11A16 HiRDB Advanced High Availability Version 10 10-00

P-F1J62-11A18 HiRDB Disaster Recovery Light Edition Version 10 10-00

P-F1J62-11A1A HiRDB Accelerator Version 10 10-00

●適用OS：AIX V7.1，AIX V7.2

P-1M62-35A1 HiRDB Server Version 10 10-05

P-1M62-1BA1 HiRDB/Run Time Version 10 10-05

P-1M62-1CA1 HiRDB/Developer's Kit Version 10 10-05

P-1M62-1DA1 HiRDB/Run Time Version 10(64) 10-05

P-1M62-1EA1 HiRDB/Developer's Kit Version 10(64) 10-05

P-F1M62-11A13 HiRDB Staticizer Option Version 10 10-00

P-F1M62-11A15 HiRDB Non Recover Front End Server Version 10 10-00

P-F1M62-11A16 HiRDB Advanced High Availability Version 10 10-00

P-F1M62-11A18 HiRDB Disaster Recovery Light Edition Version 10 10-00

P-F1M62-11A1A HiRDB Accelerator Version 10 10-00

●適用OS：Red Hat(R) Enterprise Linux(R) 6 (64-bit x86_64)，Red Hat(R) Enterprise Linux(R) 7 (64-bit x86_64)，Red Hat(R) Enterprise Linux(R) 8 (64-bit x86_64)

P-8462-35A1 HiRDB Server Version 10 10-05

P-8462-1DA1 HiRDB/Run Time Version 10(64) 10-05

P-8462-1EA1 HiRDB/Developer's Kit Version 10(64) 10-05

P-F8462-11A13 HiRDB Staticizer Option Version 10 10-00

P-F8462-11A15 HiRDB Non Recover Front End Server Version 10 10-00

P-F8462-11A16 HiRDB Advanced High Availability Version 10 10-00

P-F8462-11A18 HiRDB Disaster Recovery Light Edition Version 10 10-00

P-F8462-11A1A HiRDB Accelerator Version 10 10-00

●適用OS：Red Hat(R) Enterprise Linux(R) 6 (32-bit x86)，Red Hat(R) Enterprise Linux(R) 6 (64-bit x86_64)，Red Hat(R) Enterprise Linux(R) 7 (64-bit x86_64)，Red Hat(R) Enterprise Linux(R) 8 (64-bit x86_64)

P-8362-1BA1 HiRDB/Run Time Version 10 10-05

P-8362-1CA1 HiRDB/Developer's Kit Version 10 10-05

P-8362-3CA1 HiRDB Developer's Suite Version 10 10-05

●適用OS：Windows Server 2016，Windows Server 2019，Windows Server 2022，Windows 10 Pro (x64)，Windows 10 Enterprise (x64)

P-2962-91A4 HiRDB Server Version 10 10-05

P-2962-7PA4 HiRDB Accelerator Version 10 10-00

P-2962-7HA4 HiRDB Non Recover Front End Server Version 10 10-00

P-2962-7JA4 HiRDB Advanced High Availability Version 10 10-00

●適用OS：Windows Server 2016，Windows Server 2019，Windows Server 2022，Windows 10

P-2662-11A4 HiRDB/Run Time Version 10 10-05

P-2662-12A4 HiRDB/Developer's Kit Version 10 10-05

P-2662-32A4 HiRDB Developer's Suite Version 10 10-05

●適用OS：Windows Server 2016，Windows Server 2019，Windows Server 2022，Windows 10 Home (x64)，Windows 10 Pro (x64)，Windows 10 Enterprise (x64)

P-2962-11A4 HiRDB/Run Time Version 10(64) 10-05

P-2962-12A4 HiRDB/Developer's Kit Version 10(64) 10-05

これらのプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。

輸出時の注意

本製品を輸出される場合には、外国為替及び外国貿易法の規制並びに米国輸出管理規則など外国の輸出関連法規をご確認の上、必要な手続きをお取りください。

なお、不明な場合は、弊社担当営業にお問い合わせください。

商標類

HITACHI，HiRDB，Cosminexus，HAモニタ，JP1，OpenTP1，TPBroker，uCosminexus，VOS3/LS，VOS3/US，VOS3/XS，XDMは，株式会社 日立製作所の商標または登録商標です。

Amazon，Amazon Web Services，“Powered by Amazon Web Services”ロゴ，およびAmazon EC2は，米国その他の諸国における，Amazon.com, Inc.またはその関連会社の商標です。

AMDは，Advanced Micro Devices, Inc.の商標です。

IBM，AIX，DataStageおよびPowerHAは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。

Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。

Microsoft, Access, ActiveX, Excel, Visual Basic, Visual C++, Visual Studio, Windows, Windows Serverは，マイクロソフト 企業グループの商標です。

OracleおよびJavaは、オラクルおよびその関連会社の登録商標です。

Red Hat, Red Hat Enterprise Linux, Ansible, Hibernate, and JBoss are registered trademarks of Red Hat, Inc. in the United States and other countries.

Red Hat、Red Hat Enterprise Linux、Ansible、Hibernate、およびJBossは、米国およびその他の国におけるRed Hat, Inc.の登録商標です。

UNIXは，The Open Groupの登録商標です。

VeritasおよびVeritasロゴは、米国およびその他の国におけるVeritas Technologies LLCまたはその関連会社の商標または登録商標です。

その他記載の会社名，製品名などは，それぞれの会社の商標もしくは登録商標です。

発行

2022年1月　3020-6-560-50

著作権

All Rights Reserved. Copyright (C) 2018, 2022, Hitachi, Ltd.

変更内容

変更内容(3020-6-560-50)　HiRDB Version 10 10-05

追加・変更内容

変更個所

ユニークチェック用排他による一意性制約保証機能をサポートしました。これによって，ユニークインデクスの残存エントリによる排他待ちを回避できるようになります。

3.4.6(4)(b)，3.4.9

HiRDBの適用OSにWindows Server 2022を追加しました。

−

単なる誤字・脱字などはお断りなく訂正しました。

変更内容(3020-6-560-40)　HiRDB Version 10 10-04

追加・変更内容

これまで通信情報ファイルディレクトリはルートファイルシステム（/dev）下の固定のパスでしたが，任意のパスに変更できるようになりました。

これにより，通信情報ファイルディレクトリを/dev以外に作成することで，ルートファイルシステムへの負荷を減らすことができます。

また，マルチHiRDB構成では，各HiRDBシステムで異なるHiRDB管理者がそれぞれの通信情報ファイルディレクトリを管理することができます。

データベース回復ユティリティ（pdrstr）を使用してデータベースを回復する場合，マスタディレクトリ用RDエリアの回復も必要なときに警告メッセージを出力する機能をサポートしました。

これにより，マスタディレクトリ用RDエリアの回復が漏れて，マスタディレクトリ用RDエリアと関連RDエリアが不整合になることを予防できるようになります。

LinuxでOSのcoreファイル出力先設定ファイル（/proc/sys/kernel/core_pattern）に「systemd-coredump」を指定したシステムで，HiRDBが出力したcoreファイルをpdinfogetコマンドで取得できるようにしました。

また，pdinfogetコマンドでcoreファイルが取得できなかった場合に，個別にcoreファイルを取得する運用コマンド「pdinfocoreget」を追加しました。

HiRDBにアクセスするアプリケーションインターフェースとして，Python Database API Specification v2.0をサポートしました。

これにより，Pythonで作成したUAPから，HiRDB ODBCドライバ経由でHiRDBにアクセスできるようになります。

変更内容(3020-6-560-30)　HiRDB Version 10 10-03

追加・変更内容

ALTER TABLEで表に列を追加する場合，データ格納済みの表に対しても追加列に規定値を指定できるようにしました。これによって，データ格納済みの表に列を追加する手順が簡略化されます。

変更内容(3020-6-560-20)　HiRDB Version 10 10-02

追加・変更内容

ユーザ権限の種類に，スキーマ操作権限を追加しました。これによって，自スキーマに対して他人がリソースの追加，変更ができるようになります。また，監査人として，主監査人（システムで1人定義可能），副監査人（システムで複数人定義可能）を定義できるようにしました。これによって，監査情報を複数人で管理できるようになります。

HiRDB/Run Time及びHiRDB/Developer's Kitで，ダイアログを表示させないでインストール，アンインストールを行うサイレントインストール機能，サイレントアンインストール機能をサポートしました。

これによって，ユーザの手間が軽減されるとともに，誤った指定によるインストールミスを防止できます。

HiRDB管理者だけ実行できる運用コマンド・ユティリティを，あらかじめ許可を与えたOSログインユーザでも実行できるようにしました。また，その際，実行履歴も記録できるようにしました。これによって，端末操作者ごとの実行履歴が確認できるようになります。

はじめに

このマニュアルは，次の項目について説明したものです。

プログラムプロダクト　ノンストップデータベース　HiRDB Version 10のデータベース言語であるSQLを使用して，ユーザアプリケーションプログラムを開発するための基礎技術

HiRDBクライアントの環境設定

なお，ここに記載されていない前提情報については，マニュアル「HiRDB Version 10 解説」を参照してください。

対象読者

HiRDB Version 10（以降，HiRDBと表記します）でUAPを作成する方，UAPを実行する方（HiRDBクライアントを使用する方），およびシステム管理者を対象にしています。

このマニュアルは次に示す知識があることを前提に説明しています。

Windowsのシステム管理の基礎的な知識（Windows版の場合）

UNIXまたはLinuxのシステム管理の基礎的な知識（UNIX版の場合）

SQLの基礎的な知識

C言語のプログラミング，COBOL言語のプログラミング，またはJavaのプログラミングの知識

なお，このマニュアルは，マニュアル「HiRDB Version 10 解説」を前提としていますので，あらかじめお読みいただくことをお勧めします。

パス名の表記

パス名の区切りは「¥」で表記しています。UNIX版HiRDBを使用している場合はマニュアル中の「¥」を「/」に置き換えてください。ただし，Windows版とUNIX版でパス名が異なる場合は，それぞれのパス名を表記しています。

HiRDB運用ディレクトリのパスを%PDDIR%と表記します。ただし，Windows版とUNIX版でパス名が異なるため，それぞれを表記する場合，UNIX版は$PDDIRと表記します。例を次に示します。

　　　Windows版：%PDDIR%¥CLIENT¥UTL¥

　　　UNIX版：$PDDIR/client/lib/

Windowsのインストールディレクトリのパスを%windir%と表記します。

図中で使用している記号

このマニュアルの図中で使用している記号を次のように定義します。

このマニュアルで使用している記号

形式および説明で使用している記号を次に示します。ここで説明する文法記述記号は，説明のための記号なので実際には記述しないでください。

記号

意　　　　　　味

{　　}

この記号で囲まれている複数の項目の中から一つを選択することを示します。

（例）

PDDLKPRIO={96｜64｜32}

これは，PDDLKPRIOオペランドの指定値として96，64および32から選択できることを示します。

[　　]

この記号で囲まれた項目は省略できることを示します。

（例）

PDHOST=システムマネジャのホスト名[，予備系システムマネジャのホスト名]

これは，予備系システムを省略できることを示します。

｜（ストローク）

記号{　　}で囲まれた複数の項目を一つずつの項目に区切ることを示します。

（例）

PDXAMODE={0｜1}

これは，PDXAMODEオペランドの設定値として0，および1の項目に区切ることを示します。

（下線）

記号{　　}で囲まれた複数の項目の中の一つにだけ使用され，記号内の項目をすべて省略したとき，システムが設定する標準値を示します。

（例）

PDDFLNVAL={USE｜NOUSE}

これは，PDDFLNVALオペランドを省略したときにPDDFLNVAL=NOUSEと仮定されることを示します。

〜

この記号の後にユーザ指定値の属性を示します。

《　　》

ユーザが指定しなかった場合に仮定される値を示します。

<　　>

ユーザ指定値の構文要素を示します。

((　　))

ユーザ指定値の指定範囲を示します。

このマニュアルで使用している構文要素記号

このマニュアルで使用している構文要素記号を次に示します。

構文要素記号

意　　　　　　味

<英字>

アルファベット（A〜Z，a〜z）と下線（_）

<英字記号>

アルファベット（A〜Z，a〜z）と＃，＠，￥

<英数字>

英字と数字（0〜9）

<英数字記号>

英字記号と数字

<符号なし整数>

数字

<符号なし10進数>※1

数字（0〜9の並び）ピリオド（.）数字（0〜9の並び）

<識別子>※2

先頭がアルファベットの英数字列

<文字列>

任意の文字の配列

<記号名称>

先頭が英字記号の英数字記号

UNIX版の場合，￥は使用できません。

<パス名>※3

UNIX版の場合：/，英数字，ピリオド（.），＃，および＠

Windows版の場合：￥，英数字，ピリオド（.），空白，丸括弧，＃，および＠

注

すべて半角文字を使用してください。また，英字の大文字と小文字は区別されます。さらに，パス名は使用しているOSに依存します。

注※1

ピリオドの前の数字がすべて0の場合，ピリオドより前の0を省略できます。また，ピリオドの後ろの数字がすべて0の場合，ピリオド以降を省略できます。

例１：0.008 → .008

例２：15.000 → 15

注※2

RDエリア名の場合は，先頭が英字記号で始まる英数字記号，下線（_），ハイフン（-），および空白となります。また，RDエリア名に空白が含まれる場合は，引用符（"）で囲んでください。

ホスト名の場合は，アルファベット（A〜Z，a〜z），数字，ピリオド（.），ハイフン（-），下線（_），および＠で構成される文字列となります。

注※3

パス名に空白，または丸括弧を含む場合は，前後を引用符（"）で囲んでください。

なお，Windows版の場合，コロン（：）をドライブ名に使用できます。

HiRDBのデータベース言語の出典

このマニュアルで記述するHiRDBのデータベース言語仕様は，次に示す規格を基に日立製作所独自の解釈と仕様を追加したものです。原開発者に謝意を表するとともに，仕様の出典を示します。

JIS X 3005規格群　データベース言語SQL

ISO/IEC 9075　Information technology - Database languages - SQL -

注

JIS：日本工業規格（Japanese Industrial Standard）

ISO：国際標準化機構（International Organization for Standardization）

IEC：国際電気標準会議（International Electrotechnical Commission）

1　概要

この章では，UAPを開発するときの作業の流れ，UAPの特長，及びHiRDBシステムとのインタフェースについて説明します。

1.1　UAPの開発の流れ

UAPを開発する準備として，業務などで使用しているデータをデータベース化するために業務内容を分析します。分析した結果を基に全体的なデータベースの規模を検討し，UAPの概略を決定します。

UAPの開発作業とこのマニュアルの構成との関係を次の図に示します。

図1‒1　UAPの開発作業とこのマニュアルの構成との関係

注※1

作業の内容については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

注※2

詳細は，「データベースの操作」〜「オブジェクトリレーショナルデータベースをアクセスするUAP作成時の注意事項」を参照してください。

注※3

詳細は，「クライアントの環境設定」及び「UAPの作成」を参照してください。

注※4

詳細は，「クライアントの環境設定」，「UAP実行前の準備」，及び「Cストアドプロシジャ，Cストアドファンクション」を参照してください。

1.2　UAPの特長

1.2.1　UAPの形式

HiRDBのデータベースを操作するUAPの形式は，埋込み型です。

埋込み型とは，高級言語で記述されたソースプログラムの中にSQLと呼ばれるデータベース言語を直接記述する方式です。埋込み型のUAPは，データベース操作（SQL）を含めて一つのプログラムとして記述できるため，プログラムの解析が容易になります。

また，UAP中にはODBC関数も指定でき，Java（SQLJ）でのUAPの作成もできます。

(1)　ソースプログラムの記述

埋込み型UAPに使用できる高級言語を次に示します。

C言語

C++言語

COBOL言語

OOCOBOL言語

(2)　SQLの記述

SQLは，データベースの定義，操作，運用，及び制御の指示を記述するためのデータベース言語です。高級言語で記述したソースプログラムの中に埋め込んで使用できます。SQLの機能体系を次の図に示します。

図1‒2　SQLの機能体系

なお，プログラム用SQL言語の種類と機能概略については，「HiRDBで使用できるSQL一覧」を参照してください。また，埋込み言語の詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

1.2.2　HiRDBで使用できるSQL一覧

HiRDBで使用できるSQLについては，マニュアル「HiRDB SQLリファレンス」の「SQL一覧」を参照してください。

1.3　HiRDBとのインタフェース

HiRDBのデータベースは，UAPを作成して操作します。UAPはSQL文を発行することで，インタフェース領域を使用してHiRDBとの情報のやり取りをします。

UAPとHiRDBとのインタフェースを次の図に示します。

図1‒3　UAPとHiRDBとのインタフェース

注※

インタフェース領域については，「インタフェース領域」を参照してください。

1.4　UAPの動作環境

HiRDBは，サーバ−クライアント型のネットワーク環境で動作します。UAPを発行する要求元をクライアントといい，その要求を受けるシステムをサーバといいます。また，サーバとなるシステムをHiRDBサーバといいます。

クライアントの運用形態には，次に示す7つがあります。なお，これらの運用形態はそれぞれ混在して動作させることもできます。

サーバマシンとは別のマシンをクライアントとする運用形態

HiRDBサーバと同一のサーバマシンでクライアントを実行する運用形態

OLTP下のUAPをクライアントとする運用形態

ODBC※１対応のアプリケーションプログラムをクライアントとする運用形態

OLE DB※２対応のアプリケーションプログラムをクライアントとする運用形態

ADO.NET対応のアプリケーションプログラムをクライアントとする運用形態

Java（JDBC対応）のアプリケーションプログラムをクライアントとする運用形態

注※1

ODBCは，米国Microsoft Corp.が提唱するデータベースアクセス機構です。ODBC対応のアプリケーションプログラムからHiRDBをアクセスする方法については，「ODBC対応アプリケーションプログラムからのHiRDBアクセス」を参照してください。

注※2

OLE DBは，ODBCと同様に広範囲なデータソースにアクセスするためのAPIです。さらに，ODBCとは異なり，SQLデータ以外のデータアクセスに適したインタフェースも定義されています。OLE DB対応のアプリケーションプログラムからHiRDBをアクセスする方法については，「OLE DB対応アプリケーションプログラムからのHiRDBアクセス」を参照してください。

クライアントの運用形態を次の図に示します。

サーバマシンとは別のマシンをクライアントとする運用形態

HiRDBサーバと同一のサーバマシンでクライアントを実行する運用形態

OLTP下のUAPをクライアントとする運用形態

ODBC対応のアプリケーションプログラムをクライアントとする運用形態

OLE DB対応のアプリケーションプログラムをクライアントとする運用形態

ADO.NET対応のアプリケーションプログラムをクライアントとする運用形態

Java（JDBC対応）のアプリケーションプログラムをクライアントとする運用形態

なお，UAPを開発するHiRDB/Developer's Kitと，UAPを実行するHiRDB/Developer's Kitのプラットフォームは，同じにしてください。

図1‒4　サーバマシンとは別のマシンをクライアントとする運用形態

図1‒5　HiRDBサーバと同一のサーバマシンでクライアントを実行する運用形態

図1‒6　OLTP下のUAPをクライアントとする運用形態

図1‒7　ODBC対応のアプリケーションプログラムをクライアントとする運用形態

図1‒8　OLE DB対応のアプリケーションプログラムをクライアントとする運用形態

図1‒9　ADO.NET対応のアプリケーションプログラムをクライアントとする運用形態

図1‒10　Java（JDBC対応）のアプリケーションプログラムをクライアントとする運用形態

1.5　HiRDBサーバ，HiRDB/Run TimeおよびHiRDB/Developer's Kitの機能差

HiRDBサーバには一部のクライアント機能が含まれています。

HiRDB/Run Time及びHiRDB/Developer's Kitに同梱されるクライアント機能とHiRDBサーバとの差について次の表に示します。

表1‒1　UNIX系HiRDB製品でのクライアント機能同梱状況

クライアント機能

HiRDBサーバ

HiRDB/Run Time

HiRDB/Developer's Kit

クライアントライブラリ

○

○

○

SQLプリプロセサ

○

×

○

ODBCドライバ※

○

○

○

JDBCドライバ

○

○

○

SQLJ

○

○

○

XML変換ライブラリ

×

○

○

コマンド・ユティリティ

○

○

○

サンプルUAP

○

×

○

(凡例)

○：同梱している。

×：同梱していない。

注※

HP-UX版及びLinux版だけでサポートしています。

表1‒2　Windows系HiRDB製品でのクライアント機能同梱状況

クライアント機能

HiRDBサーバ

HiRDB/Run Time

HiRDB/Developer's Kit

クライアントライブラリ

○

○

○

SQLプリプロセサ

○

×

○

ODBCドライバ

×

○

○

HiRDB OLE DBプロバイダ

×

○

○

HiRDBデータプロバイダ for .NET Framework

×

○

○

JDBCドライバ

○

○

○

SQLJ

○

○

○

XML変換ライブラリ

×

○

○

コマンド・ユティリティ

○

○

○

サンプルUAP

○

×

○

(凡例)

○：同梱している。

×：同梱していない。

2　データベースの操作

この章では，データベースのデータ表現，及びデータベースの基本的な操作例について説明します。

なお，説明の中で使用しているSQLは，文法に従って作成した中から説明に必要な部分だけを抜粋したものです。SQLの詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

2.1　データベースのデータ表現

2.1.1　リレーショナルデータベースの表

HiRDBのデータベースはリレーショナルデータベースで，論理的な構造は表として表現されます。ここでは，表について説明します。

(1)　表の基本構成

リレーショナルデータベースは，論理的には表形式をしています。

表の縦方向を列と呼び，横方向を行と呼びます。各行の同じ列には，同一属性（データ型）のデータを格納します。表は行の集合で，一つの行は一つの検索単位になります。また，各列には名称（列名）が付いていて，データベースを操作するときに使用します。

表の基本構成例を次の図に示します。

図2‒1　表の基本構成例

(2)　繰返し列を使用した表

繰返し列とは，複数の要素から構成される列のことをいいます。繰返し列を使用すると，次のようなメリットがあります。

複数の表の結合が不要になります。

重複する情報が少なくなるため，ディスク容量を削減できます。

関連データ（繰返しデータ）が近くに格納されるため，別の表にするよりアクセス性能が良いです。

繰返し列がある場合の表の構成例を次の図に示します。

図2‒2　繰返し列がある場合の表の構成例

(3)　ビュー表

実際の表（以降，実表と呼びます）を基に，利用者が操作する範囲を限定した仮想の表を設定できます。この仮想の表のことをビュー表といいます。次に示す場合にビュー表を定義すると操作する範囲が限定され，操作が簡単になります。

表の特定の列だけを検索する。

表の列の順序を入れ替える。

表の特定の行だけを検索する。

ビュー表は，表の特定の列や行を見るために定義しますが，実表と同様の検索ができます。また，ビュー表を使用することで，操作する範囲が限定されるので細かな機密保護ができます。

実表に対して定義したビュー表の例を次の図に示します。

なお，ビュー表の定義，及び操作の方法については，「ビュー表の定義と操作」を参照してください。

図2‒3　実表に対して定義したビュー表の例

2.1.2　オブジェクトリレーショナルデータベースの表

HiRDBのデータベースは，オブジェクトリレーショナルデータベースとして定義することもできます。オブジェクトリレーショナルデータベースの表は，表の列に抽象データ型を定義することで作成できます。

抽象データ型がある表の基本構成例を次の図に示します。

図2‒4　抽象データ型がある表の基本構成例

2.2　カーソルの利用

2.2.1　カーソルを使用した検索及び使用しない検索

表の検索結果は一般には複数行にわたります。UAPで複数行の検索結果を1行ずつ取り出すために最新の取り出し位置を保持するのがカーソルです。

ここでは，カーソルを使用した検索と，カーソルを使用した検索行の更新について説明します。

なお，カーソルを使用するときに考慮する内容については，「カーソルの効果」を参照してください。

(1)　カーソルを使用した検索

表の検索結果が2行以上になる場合や，SQLの文字列をPREPARE文で前処理して動的に検索する場合，カーソルを使用して検索します。

検索結果が1行以下の場合，カーソルを使用しないで1行SELECT文で検索することもできます。

なお，PREPARE文，及び1行SELECT文については，マニュアル「HiRDB SQLリファレンス」を参照してください。

カーソルを使用して複数行を検索するときの例として，在庫表から各商品の品番と単価を検索するUAPを次に示します。

(2)　カーソルを使用した検索行の更新

複数の検索行を更新する場合，カーソルを使用して1行ずつ検索しながら更新します。

なお，検索結果が1行以下の場合，1行SELECT文で検索して更新できますが，カーソルを使用する方が処理効率は良くなります。

カーソルを使用して検索行を更新するときの例として，在庫表の各商品の単価を1割下げる（0.9倍する）UAPを次に示します。

(3)　カーソルを使用しない検索（1行検索）

カーソルを使用しないで検索するときの例として，在庫表の件数を求めて埋込み変数に取り出すUAPを次に示します。

2.3　データの検索

表を構成する行の中から，ある列に対して指定した条件を満たす行を選び出すことを検索といいます。2個以上の表を特定の列の値でつなぎ合わせて検索し，1組の検索結果を取り出すこともできます。

ここでは，表の検索について説明します。

2.3.1　1個の表からの検索

1個の表からの検索例として，在庫表の中から商品名が"スカート"の行だけをSELECT文で検索するときの例を次の図に示します。

図2‒5　1個の表からの検索

表の検索結果は表形式になり，処理要求したUAPに渡されます。

検索結果の表をUAPから参照するためには，カーソルを使用します。カーソルには，検索結果の表の特定の行を指す機能があるので，UAPはカーソルの指している行の内容を読み出して加工できます。

検索結果の表に対するUAPからのデータの処理手順を次の図に示します。

図2‒6　検索結果の表に対するUAPからのデータの処理手順

次に図「検索結果の表に対するUAPからのデータの処理手順」で示した処理手順の各ステップを説明します。

カーソルの定義

カーソルを使用するために，カーソルの名称，そのカーソルを使用して検索する表の名称，及び探索条件を定義します。例えば，図「1個の表からの検索」に示す例に当てはめて考えた場合，カーソル名称を「CUR1」として，在庫表から"スカート"だけを探索するときは，次のように定義します。

   DECLARE CUR1 CURSOR FOR
   SELECT SNAME,COL,TANKA FROM ZAIKO
     WHERE SNAME=N'スカート'

カーソルを開く

カーソルを開くと，定義した条件に従って検索結果を取り出せる状態になります。検索結果は，システム内に表形式で格納され，カーソルを閉じるまで有効です。

カーソルを開くには，次のように記述します。

   OPEN CUR1

カーソルを開いた直後は，表の第1列の第1行目の一つ上にカーソルがあります。カーソル名称が「CUR1」で，在庫表から"スカート"を検索する条件にしたとき，カーソルを開いた直後の状態を次の図に示します。

図2‒7　カーソルを開いた直後の状態

データの取り出し

FETCH文を使用し，カーソルを開いた状態の位置から1行進めて，その行の内容をUAP内の指定した領域に格納します。

カーソルを開いた直後の状態から，検索した内容がUAPの領域に格納される例を次の図に示します。

図2‒8　検索した内容を取り出してUAPの領域に格納する例

データの処理

UAP上の領域に格納されたデータの内容を必要に応じて出力します。

カーソルを閉じる

検索結果に対するUAPのデータ処理が完了したらカーソルを閉じます。

カーソルを閉じると，システム内に保存されていた検索結果の表は消去されます。カーソルを閉じるには，次のように記述します。

   CLOSE CUR1

2.3.2　複数の表からの検索

2個以上の表から検索するには，SELECT文のFROM句を使用します。複数の表から一つの結果を得る例として，在庫量が60未満でかつ，受注量が30未満の商品の伝票番号と商品名の表を作成するときの例を次の図に示します。

図2‒9　2個の表からの検索例

2.3.3　FIX属性の表の検索

FIX属性の表を検索する場合，1行全体を一つの固定長レコードとして検索できます。行単位の検索は，SELECT文の選択句にROWを指定します。

1行単位で検索すると，列ごとに検索するオーバヘッドがなくなるため，アクセス性能が向上します。

行単位の検索例として，カーソル（CUR1）を使用し，在庫表から商品名が"ポロシャツ"だけを検索するとき，埋込み変数（：XROW）に取り出す例を次の図に示します。

図2‒10　行単位の検索例

2.4　データの更新

表中の情報の更新には，次に示す三つの方法があります。

カーソルが指している行を更新する。

条件を満たす行だけ更新する。

行単位で更新する。

なお，次に示す列の値は更新できません。

表がフレキシブルハッシュ分割以外で横分割されている場合，分割するキーとなる列

改竄防止表の更新可能列以外の列

FIX表に列を追加するための予備列

2.4.1　カーソルを使用した更新

複数の検索行を更新する場合，カーソルを使用して1行ずつ検索しながら更新します。カーソルを使用した表の更新の処理手順を次の図に示します。

図2‒11　表の更新の処理手順

図「表の更新の処理手順」で示した処理手順の各ステップは，データの更新を除くと基本的に図「検索結果の表に対するUAPからのデータの処理手順」と同じです。

カーソルを使用してデータを更新する例を次の図に示します。なお，既にデータの取り出しまで終わっているものとします。

図2‒12　カーソルを使用して表を更新する例

2.4.2　条件指定による更新

データを更新するとき条件を指定すると，条件を満たすすべての行が更新されます。条件指定による更新は，UPDATE文のWHERE句で指定します。

なお，表がキーレンジ分割されている場合，分割するキーとなる列の値は更新できません。

条件指定による更新の例として，在庫表から商品コードが"411M"の数量を"20"に更新する例を次の図に示します。

図2‒13　条件指定による更新の例

2.4.3　FIX属性の表の更新

FIX属性の表を更新する場合，1行全体を一つの固定長データとして更新できます。行単位の更新は，UPDATE文のSET句にROWを指定します。

1行単位で更新すると，列ごとに更新するオーバヘッドがなくなるため，アクセス性能が向上します。

行単位の更新例として，在庫表の商品コードが"411M"の数量を"12"から"20"に更新するとき，更新する値を埋込み変数（：YROW）に指定する例を次の図に示します。

図2‒14　行単位の更新例

2.4.4　繰返し列がある表の更新

繰返し列がある表を更新する場合，次の三つの更新方法があります。

既存の要素を更新する方法（SET句）

新たに要素を追加する方法（ADD句）

既存の要素を削除する方法（DELETE句）

繰返し列がある表を更新する場合は，繰返し列名［｛添字｜＊｝］で更新する繰返し列の要素を指定します。添字は，要素の位置です。

ここでは，新たに要素を追加する方法について説明します。

繰返し列がある表の更新例として，社員表の氏名が"中村和男"の資格に，要素"データベース"を追加する例を次の図に示します。

図2‒15　繰返し列がある表の更新例

2.5　データの削除

表中の情報の削除には，次に示す三つの方法があります。

カーソルが指している行を削除する。

条件を満たす行だけ削除する。

表のすべての行を削除する。

2.5.1　カーソルを使用した削除

表中の行を削除する場合，カーソルを使用して1行ずつ内容を確認しながら削除します。カーソルを使用した行の削除の処理手順を次の図に示します。

図2‒16　行の削除の処理手順

図「行の削除の処理手順」で示した処理手順の各ステップは，データの削除を除くと基本的に図「検索結果の表に対するUAPからのデータの処理手順」と同じです。

カーソルを使用してデータを1行ずつ削除する例を次の図に示します。なお，既にデータの取り出しまで終わっているものとします。

図2‒17　カーソルを使用して行を削除する例

2.5.2　条件指定による削除

データを削除するとき条件を指定すると，条件を満たすすべての行が削除されます。条件指定による削除は，DELETE文のWHERE句で条件を指定して行います。

条件指定による削除の例として，在庫表から商品名が"スカート"のデータだけを削除する例を次の図に示します。

図2‒18　条件指定による削除の例

2.5.3　表の全行削除

データの削除の対象となる表が実表の場合，表中のすべての行を一括して削除することもできます。表の全行を一括して削除するには，PURGE TABLE文を使用します。表の全行を一括して削除すると，DELETE文のWHERE句を省略して（条件を指定しないで）削除するよりも処理性能に優れています。

なお，OLTP環境下のX/Openに従ったアプリケーションプログラムの場合は，PURGE TABLE文を実行できません。

表の全行削除の例として，在庫表の全データを削除する例を次の図に示します。

図2‒19　表の全行削除の例

2.6　データの挿入

表中への行の挿入には，次に示す二つの方法があります。

列単位で行を挿入する。

行単位で行を挿入する。

2.6.1　列単位の挿入

表に行を挿入するとき，値を直接指定して一つの行を挿入できます。行の挿入は，INSERT文を使用します。

列単位の挿入の例として，埋込み変数（：ZSCODE〜：ZZSURYO）に設定されている値を在庫表の各列に挿入する例を次の図に示します。

図2‒20　列単位の行の挿入例

2.6.2　FIX属性の表への行の挿入

FIX属性の表に行を挿入する場合，1行全体を一つの固定長データとして行単位で行を挿入できます。行単位で行を挿入するには，INSERT文にROWを指定します。

なお，行単位の挿入は，実表のときだけ実行できます。

行単位の挿入例として，埋込み変数（：ZROW）に設定した値を1行分まとめて在庫表に挿入する例を次の図に示します。

図2‒21　行単位の行の挿入例

2.6.3　繰返し列がある表への行の挿入

繰返し列がある表に行を挿入する場合，挿入値にARRAY[要素の値〔,要素の値〕…]を指定します。

繰返し列がある表への行の挿入例として，社員表に行を追加する例を次の図に示します。

図2‒22　繰返し列がある表への行の挿入例

2.7　特定データの探索

表中のデータを条件付きで操作するには，探索条件を指定します。探索条件とは行の選択条件のことで，論理演算子を使用して複数の条件を組み合わせることもできます。表中のデータの探索には，次に示す四つの方法があります。

特定の範囲内のデータを探索する。

特定の文字パターンを探索する。

ナル値でないデータを探索する。

複数の条件を満たすデータを探索する。

2.7.1　特定の範囲内のデータの探索

特定の範囲を指定して行を操作するには，比較述語，BETWEEN述語，IN述語のどれかを条件に合わせて使用します。

(1)　比較述語

探索条件として，等価，又は大小比較をするときに比較述語を使用します。

比較述語を使用したデータの探索例として，在庫表から在庫量が50以下の商品の商品コード，及び商品名を検索する例を次の図に示します。

図2‒23　比較述語を使用したデータの探索例

(2)　BETWEEN述語

探索条件として，一定の範囲内のデータだけを取り出すときにBETWEEN述語を使用します。

BETWEEN述語を使用したデータの探索例として，在庫表から在庫量が200以上300以下の商品の商品コード，及び商品名を検索する例を次の図に示します。

図2‒24　BETWEEN述語を使用したデータの探索例

(3)　IN述語

探索条件として，指定した複数の値と一致するデータだけを取り出すときにIN述語を使用します。

IN述語を使用したデータの探索例として，在庫表から単価が"3640"，又は"4760"の商品の商品コード，及び商品名を検索する例を次の図に示します。

図2‒25　IN述語を使用したデータの探索例

2.7.2　特定の文字パターンの探索

特定の文字パターンを含む列がある行を操作するには，LIKE述語を使用します。

LIKE述語を使用したデータの探索例として，受注表から得意先コードの2文字目が"T"の伝票番号，商品コード，及び受注量を検索する例を次の図に示します。

図2‒26　LIKE述語を使用したデータの探索例

2.7.3　ナル値でないデータの探索

表の列中にナル値が含まれていない行を操作するには，NULL述語にNOTを組み合わせて使用します。

なお，NULL述語にNOTを組み合わせない場合，ナル値が含まれている行が操作の対象になります。

NULL述語とNOTを組み合わせたデータの探索例として，受注表から得意先コードが未設定（ナル値）ではない伝票の伝票番号，商品コード，及び受注量を検索する例を次の図に示します。

図2‒27　NULL述語とNOTを組み合わせて使用したデータの探索例

2.7.4　複数の条件を満たすデータの探索

複数の条件を組み合わせて，該当するデータを含む行を操作するには，論理演算子（AND，OR，NOT ）を使用します。

複数の条件を満たすデータの探索例として，在庫表から商品名が"ブラウス"，又は"ポロシャツ"で，在庫量が50以上の商品の商品コード，及び在庫量を検索する例を次の図に示します。

図2‒28　複数の条件を満たすデータの探索例

2.7.5　論理述語を使用した検索

抽象データ型で定義した関数や，ユーザ定義関数の結果が論理値（TRUE，FALSE，又はUNKNOWN）となる場合，真偽を判定するために論理述語を使用します。論理述語を使用したデータの探索例については，「抽象データ型を含む表のデータ操作」を参照してください。

2.7.6　構造化繰返し述語を使用した検索

繰返し列がある表の，複数の繰返し列に対して条件を指定して検索する場合，構造化繰返し述語を使用します。

構造化繰返し述語を使用した検索例として，社員表から父を扶養している社員を検索する例を次の図に示します。

図2‒29　構造化繰返し述語を使用した検索例

2.7.7　副問合せを使用した検索

問合せ結果の値を検索条件の中で指定することで，問合せを構造的に表現します。副問合せでは，データベースに対して，より複雑な問合せを読みやすくできます。

副問合せを使用した検索例として，在庫表から単価が平均値以上の商品の商品コードを検索する例を次の図に示します。

図2‒30　副問合せを使用した検索例

(1)　限定述語を使用した副問合せ

副問合せの結果が，指定した比較条件を満たしているかどうか判定し，副問合せの結果の範囲を更に絞り込むとき，限定述語を使用します。

限定述語を使用した副問合せの例として，在庫表から"ブラウス"（商品コードに関係なく）のどの在庫量よりも多く在庫がある商品の商品コードと商品名を検索する例を次の図に示します。

図2‒31　限定述語を使用した副問合せの検索例

(2)　EXISTS述語を使用した副問合せ

副問合せの結果が空集合でないかどうか判定するとき，EXISTS述語を使用します。

EXISTS述語を使用した副問合せの検索例として，在庫表と受注表から受注のない商品を検索する例を次の図に示します。

図2‒32　EXISTS述語を使用した副問合せの検索例

2.8　データの演算

表中の列の数値や日時を検索して，演算した結果を取り出すことができます。

表中のデータの演算には，次に示す二つがあります。

数値データを四則演算する。

日付，又は時刻データを演算する。

2.8.1　数値データの四則演算

指定した列の数値を基に，四則演算をして検索結果を取り出せます。

四則演算には，加算，減算，乗算，及び除算があります。

数値データの四則演算の例として，在庫表から商品名が"ソックス"の単価，及び在庫量から売上げ見込みを演算し，商品コード，及び演算結果（百円単位）を取り出す例を次の図に示します。

図2‒33　数値データの演算の例

2.8.2　日付，時刻データの演算

表中の日付データ（時刻データを含む）を演算して，期間を限定した検索結果を取り出すことができます。

日付データ，又は時刻データの演算にはスカラ関数を使用します。日付データには日付演算を使用し，時刻データには時刻演算を使用します。

時刻データの演算の例として，受注表から"12：00：00"より前に受注された伝票の伝票番号，商品コード，及び受注量を取り出す例を次の図に示します。

図2‒34　日付データの演算の例

2.9　データの加工

表中のデータを取り出すとき，グループ分けや，昇順，又は降順に並べ替えるなどデータの加工ができます。表中のデータの加工には，次に示す三つがあります。

データをグループ分けする。

データを昇順，又は降順に並べ替える。

重複したデータを排除する。

2.9.1　データのグループ分け

指定した列の中に同一の値が複数あるとき，各値をグループごとに分類して検索結果を取り出すことができます。グループ分けして検索結果を取り出すには，GROUP BY句を使用します。

また，各グループの平均値，合計値，最大値，最小値，及び行数を求めるには，それぞれAVG，SUM，MAX，MIN，及びCOUNTの集合関数を使用します。

データのグループ分けの例として，受注表1から商品コードごとに分類し，受注量の合計を取り出す例を次の図に示します。

図2‒35　データのグループ分けの例

2.9.2　データの並べ替え

表中の列を指定し，昇順，又は降順にデータをソート（並べ替え）して検索結果を取り出すことができます。

データの並べ替えの例として，受注表から伝票番号，商品コード，及び発注量を検索し，商品コードを昇順にソートする例を次の図に示します。

図2‒36　データの並べ替えの例

2.9.3　重複したデータの排除

2個以上の表を操作するとき，重複するデータを取り除いた検索結果を取り出すことができます。重複するデータを取り除くには，UNION，又はDISTINCTを使用します。

重複するデータの排除の例として，二つの受注表から受注量が10以上の商品の商品コードを検索し，重複したデータを取り除く例を次の図に示します。

図2‒37　重複するデータの排除の例

2.10　表の外結合

全体の情報を持つ外表と部分的な情報を持つ内表とを結合し，通常の結合（内結合）で得られる情報以外に，外表に関するすべての行の情報が必要な場合，アウタジョイン （表の外結合）によって検索結果を取り出すことができます。アウタジョインでは，結合条件を満たしていない場合，内表の列にはナル値が補われるので，欠損値を含んだ結合ができます。

アウタジョインの例として，在庫表と受注表を外結合し，在庫量が100未満の商品の商品コード，商品名，色，及び伝票番号を検索する例を次の図に示します。

図2‒38　アウタジョインの例

3表以上のアウタジョインの例として，在庫表，受注表，先月受注表を外結合し，全商品の商品名，単価と，単価が5,000円以上の商品の今月の受注量と，先月の受注量を検索する例を次の図に示します。

図2‒39　3表以上のアウタジョインの例

2.11　ビュー表の定義と操作

2.11.1　ビュー表の定義例及び操作例

表から特定の列や行を見るためにビュー表を定義すると，操作する範囲を限定できます。

ここでは，次の図に示す在庫表と売上表を使用してビュー表の定義，及び操作について説明します。

図2‒40　ビュー表の操作の説明で使用する表

(1)　ビュー表の定義

ビュー表の定義例として次の五つを示します。

検索する列を限定したビュー表の定義

探索条件を使用したビュー表の定義

読み込み専用のビュー表の定義

重複排除したビュー表の定義

ビュー表からビュー表の定義

(a)　検索する列を限定したビュー表の定義

検索する列を限定するビュー表の定義例として，在庫表を基に色以外の列を検索できるビュー表（V1）として定義する例を次の図に示します。

図2‒41　検索する列を限定するビュー表の定義の例

(b)　探索条件を使用したビュー表の定義

探索条件を使用したビュー表の定義例として，在庫表と売上表を基に支店ごとの売上数量が10未満の商品名を求める問合せをビュー表（V2）として定義する例を次の図に示します。

図2‒42　探索条件を使用したビュー表の定義の例

(c)　読み込み専用のビュー表の定義

読み込み専用のビュー表の定義例として，在庫表を基に商品名ごとに平均単価より高い商品の商品コード，商品名，単価，及び在庫量を求める問合せを読み込み専用のビュー表（V3）として定義する例を次の図に示します。

図2‒43　読み込み専用のビュー表の定義の例

(d)　重複を排除したビュー表の定義

重複を排除したビュー表の定義例として，在庫表を基に商品名，及び単価を重複排除したビュー表（V4）として定義する例を次の図に示します。

図2‒44　重複を排除したビュー表の定義の例

(e)　ビュー表からビュー表の定義

ビュー表からビュー表の定義例として，（a）で定義したビュー表（V1）から，商品名が"スカート"の行を求める問合せをビュー表（V5）として定義する例を次の図に示します。

図2‒45　ビュー表からビュー表の定義の例

(2)　ビュー表の操作

ビュー表の操作例として，「探索条件を使用したビュー表の定義」で定義したビュー表（V2）から，売上高が最高の商品の商品名，支店名，及び売上高を検索（副問合せを指定したSQL文中でビュー表を指定）する例を次の図に示します。

図2‒46　ビュー表の操作例

2.12　抽象データ型を含む表のデータ操作

抽象データ型がある表に対して操作する場合，関数又はコンポネント指定を用います。関数には，抽象データ型を定義したときに自動的に作成されるコンストラクタ関数（又はデフォルトコンストラクタ関数），及びユーザが任意に定義したユーザ定義型関数があります。また，コンポネント指定は，抽象データ型を構成する属性に対して操作するものです。

なお，抽象データ型には，プラグインが提供するものと，ユーザが定義するものがあります。プラグインが提供する抽象データ型として，ここではSGMLTEXT型とXML型を使用した場合の例について説明します。

2.12.1　SGMLTEXT型の場合

ここでは，全文検索プラグイン（HiRDB Text Search Plug-in）を使用した例について説明します。HiRDB Text Search Plug-inが提供する抽象データ型関数を次に示します。なお，プラグインが提供する抽象データ型関数については，各プラグインマニュアルを参照してください。

関数名

説明

SGMLTEXT

SGML文書登録

contains

構造指定検索

contains_with_score，score

スコア検索

この項では，薬品の取扱い説明書をSGML文書で管理する例について説明します。

例題で使用している表は，マニュアル「HiRDB システム導入・設計ガイド」のデータベースの作成（プラグインが提供する抽象データ型を含む表の場合）で定義している表を利用しています。

(1)　検索

(a)　SGMLTEXT型の場合の検索例（その1）

SGMLTEXT型の場合の検索例として，頭痛に効く薬品を調べる例を次の図に示します。検索をするSQL文は，次のように記述できます。

  SELECT 薬品ID FROM 薬品管理表
    WHERE contains(取扱い説明書,'添付文書データ[効能{"頭痛"}]')
      IS TRUE

［説明］

この例では，抽象データ型関数containsを使用して，列「取扱い説明書」の効能という構造部分に"頭痛"の文字列を含んでいる薬品を検索しています。

図2‒47　SGMLTEXT型の場合の検索例（その1）

(b)　SGMLTEXT型の場合の検索例（その2）

SGMLTEXT型の場合の検索例として，食あたりに効く薬品の薬品IDと在庫量を求める例を次の図に示します。検索をするSQL文は，次のように記述できます。

  SELECT 薬品管理表.薬品ID,在庫量
    FROM 薬品管理表 LEFT OUTER JOIN 在庫表
      ON 薬品管理表.薬品ID=在庫表.薬品ID
      WHERE contains(取扱い説明書,'添付文書データ[効能{"食あたり"}]')
          IS TRUE

［説明］

この例では，薬品管理表と在庫表を外結合して検索しています。抽象データ型関数containsを使用して，列「取扱い説明書」の効能という構造部分に"食あたり"の文字列を含んでいる薬品IDを検索して，その薬品IDの在庫量を求めています。

図2‒48　SGMLTEXT型の場合の検索例（その2）

(2)　更新

SGMLTEXT型の場合の更新例として，薬品2の取扱い説明書を更新する例を次の図に示します。更新をするSQL文は，次のように記述できます。

  UPDATE 薬品管理表 SET 取扱い説明書 = SGMLTEXT(:sgml AS BLOB(1M))
    WHERE 薬品ID = '薬品2'

［説明］

この例では，抽象データ型関数SGMLTEXTを使用して，薬品2の取扱い説明書のデータを更新しています。

なお，UPDATE文の前に，あらかじめ次のBLOB型の埋込み変数「sgml」を定義しているものとします。

EXEC SQL BEGIN DECLARE SECTION;     1.
   SQL TYPE IS BLOB(300K) sgml;     1.
EXEC SQL END DECLARE SECTION;       1.
strcpy(sgml.sgml_data,char_ptr_pointing_to_a_sgml_text);         2.
sgml.sgml_length = strlen(char_ptr_pointing_to_a_sgml_text);     3.

［説明］

BLOB型の埋込み変数「sgml」を定義します。

埋込み変数「sgml」に，更新する新しいデータを格納します。

作成したBLOBデータの属性値sgml_lengthを，格納したデータの長さにセットします。

図2‒49　SGMLTEXT型の場合の更新例

(3)　削除

SGMLTEXT型の場合の削除例として，薬品2を削除する例を次の図に示します。行を削除するSQL文は，次のように記述できます。

  DELETE FROM 薬品管理表
    WHERE 薬品ID = '薬品2'

［説明］

この例では，薬品管理表から薬品2の行を削除しています。

図2‒50　SGMLTEXT型の場合の削除例

(4)　挿入

SGMLTEXT型の場合の挿入例として，薬品25の行を挿入する例を次の図に示します。行を挿入するSQL文は，次のように記述できます。

  INSERT INTO 薬品管理表(薬品ID,取扱い説明書)
    VALUES(薬品25,SGMLTEXT(:sgml AS BLOB(1M)))

［説明］

この例では，抽象データ型関数SGMLTEXTを使用して，薬品管理表に薬品25の行を追加しています。

なお，INSERT文の前に，あらかじめ次のBLOB型の埋込み変数「sgml」を定義しているものとします。

EXEC SQL BEGIN DECLARE SECTION;     1.
   SQL TYPE IS BLOB(300K) sgml;     1.
EXEC SQL END DECLARE SECTION;       1.
strcpy(sgml.sgml_data,char_ptr_pointing_to_a_sgml_text);         2.
sgml.sgml_length = strlen(char_ptr_pointing_to_a_sgml_text);     3.

［説明］

BLOB型の埋込み変数「sgml」を定義します。

埋込み変数「sgml」に，挿入するデータを格納します。

作成したBLOBデータの属性値sgml_lengthを，格納したデータの長さにセットします。

図2‒51　SGMLTEXT型の場合の挿入例

2.12.2　XML型の場合

ここでは，HiRDB XML Extensionを使用した例について説明します。HiRDB XML Extensionが提供する抽象データ型関数については，マニュアル「HiRDB SQLリファレンス」を参照してください。

この項では，書籍情報をXML文書で管理する例について説明します。

例題で使用している表は，マニュアル「HiRDB システム導入・設計ガイド」のデータベースの作成（プラグインが提供する抽象データ型を含む表の場合）で定義している表を利用しています。

(1)　検索

(a)　XML型の場合の検索例（その１）

XML型の場合の検索例として，書籍IDが126513592である書籍情報をVARCHAR型の値として取り出す例を次の図に示します。検索をするSQL文は，次のように記述できます。

SELECT 書籍ID, XMLSERIALIZE(書籍情報 AS VARCHAR(32000))
    FROM 書籍管理表
    WHERE 書籍ID = 126513592

図2‒52　XML型の場合の検索例（その1）

(b)　XML型の場合の検索例（その2）

XQuery式による評価結果の取り出しをします。XML型の場合の検索例として，カテゴリが"データベース"である書籍のタイトルを取り出す例を次の図に示します。検索をするSQL文は，次のように記述できます。

  SELECT 書籍ID,
         XMLSERIALIZE(
           XMLQUERY('/書籍情報/タイトル'
                     PASSING BY VALUE 書籍情報
                     RETURNING SEQUENCE EMPTY ON EMPTY)
           AS VARCHAR(32000))
    FROM 書籍管理表
    WHERE XMLEXISTS('/書籍情報[カテゴリ="データベース"]'
                     PASSING BY VALUE 書籍情報)

［説明］

XMLQUERY関数を使用して，XQuery式を評価した結果を取り出します。XQuery式の評価結果が空のシーケンスである行を出力しないように，XMLEXISTS述語を使用します。

図2‒53　XML型の場合の検索例（その2）

(c)　XML型の場合の検索例（その3）

XML型の値を一つのXML型の値として出力します。XML型の場合の検索例として，カテゴリが"データベース"である書籍のタイトルを結合して取り出す例を次の図に示します。検索をするSQL文は，次のように記述できます。

SELECT XMLSERIALIZE(
         XMLAGG(
           XMLQUERY('/書籍情報/タイトル'
                      PASSING BY VALUE 書籍情報
                      RETURNING SEQUENCE EMPTY ON EMPTY)
         )
         AS VARCHAR(32000))
       FROM 書籍管理表
       WHERE XMLEXISTS('/書籍情報[カテゴリ="データベース"]'
                       PASSING BY VALUE 書籍情報)

［説明］

各行のXML型の値を一つのXML型の値として出力するには，XMLAGG集合関数を使用します。

図2‒54　XML型の場合の検索例（その3）

(d)　XML型の場合の検索例（その4）

XML型の値を一つのXML型の値として，その値に対してXQuery式を評価します。XML型の場合の検索例として，タイトルが"SQL徹底解説"の書籍情報とカテゴリが同じ書籍の書籍情報を取り出す例を次の図に示します。検索をするSQL文は，次のように記述できます。

SELECT
  XMLSERIALIZE(
    XMLQUERY(
      '$BOOKS/書籍情報[カテゴリ=$BOOKS/書籍情報[タイトル="SQL徹底解説"]/カテゴリ]'
      PASSING BY VALUE XMLAGG(書籍情報) AS BOOKS
      RETURNING SEQUENCE EMPTY ON EMPTY))
    AS VARCHAR(32000))
  FROM 書籍管理表

図2‒55　XML型の場合の検索例（その4）

(e)　XML型の場合の検索例（その5）

部分構造インデクスを使用した検索をします。書籍情報中のカテゴリ要素をVARCHAR型としてキーにするインデクスの定義例を次に示します。

部分構造インデクスの定義例

CREATE INDEX INDX1 ON 書籍管理表(書籍情報)
  IN (RDAREA02) KEY FROM '/書籍情報/カテゴリ' AS VARCHAR(100)

このインデクスを利用することで，次のSQLの場合は行の絞り込みの処理時間が削減できます。書籍管理表から，カテゴリが"ネットワーク"である書籍情報を取り出す例を次に示します。

部分構造インデクスを使用した検索例

SELECT 書籍ID,
       XMLSERIALIZE(書籍情報 AS VARCHAR(32000))
  FROM 書籍管理表
  WHERE XMLEXISTS('/書籍情報[カテゴリ="ネットワーク"]'
                  PASSING BY VALUE 書籍情報)

(f)　XML型の場合の検索例（その6）

XML型全文検索用インデクスを使用した検索をします。書籍情報列に対するXML型全文検索用インデクスの定義例を次に示します。

XML型全文検索用インデクスの定義例

CREATE INDEX INDX1
  USING TYPE IXXML ON 書籍管理表(書籍情報)
  IN (LOBAREA01)

このインデクスを利用することで，次のSQLの場合は行の絞り込みの処理時間が削減できます。書籍管理表から，説明に"RDBMS"を含む書籍情報を取り出す例を次に示します。

XML型全文検索用インデクスを使用した検索例

SELECT 書籍ID,
       XMLSERIALIZE(書籍情報 AS VARCHAR(32000))
  FROM 書籍管理表
  WHERE XMLEXISTS('/書籍情報/説明/text()[contains( . ,"RDBMS")]'
                   PASSING BY VALUE 書籍情報)

2.12.3　ユーザが定義する抽象データ型の場合

ここでは，ユーザが定義する抽象データ型を含む表を操作する例について説明します。

なお，例題で使用している表は，マニュアル「HiRDB システム導入・設計ガイド」のデータベースの作成（ユーザが定義する抽象データ型を含む表の場合）で定義している表を利用しています。

(1)　抽象データ型がある表の検索

抽象データ型がある表の検索例として，勤続年数が20年以上の社員を求める例を次の図に示します。検索をするSQL文は，次のように記述できます。

  SELECT 社員番号
      FROM 社員表
      WHERE 勤続年数(従業員)>=20

［説明］

この例では，ユーザ定義関数「勤続年数」を使用して，勤続年数が20年以上の社員の社員番号を検索しています。ユーザ定義関数「勤続年数」の引数は，従業員です。

図2‒56　抽象データ型がある表の検索例

(2)　抽象データ型がある表の更新

抽象データ型がある表の更新例として，社員番号が900123の社員の役職を主任に更新する例を次の図に示します。更新をするSQL文は，次のように記述できます。

  UPDATE 社員表
      SET 従業員..役職='主任'
      WHERE 社員番号='900123'

［説明］

この例では，社員番号が900123の社員の，列「従業員」の属性「役職」を主任に更新しています。抽象データ型の属性を指定する場合は，コンポネント指定を使用します。この例の場合，従業員..役職がコンポネント指定です。

図2‒57　抽象データ型がある表の更新例

(3)　抽象データ型がある表の行の削除

抽象データ型がある表の行の削除例として，役職が一般の社員のデータを削除する例を次の図に示します。行を削除するSQL文は，次のように記述できます。

  DELETE FROM 社員表
      WHERE 従業員..役職='一般'

［説明］

この例では，列「従業員」の属性「役職」が一般の社員の行を削除しています。抽象データ型の属性を指定する場合は，コンポネント指定を使用します。この例の場合，従業員..役職がコンポネント指定です。

図2‒58　抽象データ型がある表の行の削除例

(4)　抽象データ型がある表への行の挿入

抽象データ型がある表への行の挿入例として，社員表に行を挿入する例を次の図に示します。行を挿入するSQL文は，次のように記述できます。

  INSERT INTO 社員表
      VALUES ('950070',t_従業員('タシロケイコ',
                                'F',
                                '一般',
                                '1995-04-01',
                                :x顔写真 AS BLOB,
                                140000
                                )
              )

［説明］

この例では，抽象データ型定義時に定義したコンストラクタ関数t_従業員を使用して，社員表に社員番号950070の行を挿入しています。

なお，:x顔写真はBLOB型の埋込み変数で，顔写真の画像が設定されているものとします。

図2‒59　抽象データ型がある表への行の挿入例

3　UAPの設計

この章では，UAPを設計するときに考慮する基本的事項について説明します。

3.1　UAP中でのSQLの基本構成

3.1.1　UAP中でのSQLの基本構成の説明

UAP中でのSQLの基本構成を次の図に示します。なお，ここではUAPをCOBOL言語で記述する場合について説明します。

図3‒1　UAP中でのSQLの基本構成

(1)　埋込み変数及び標識変数の宣言

SQLで検索したデータをUAP側で受け取ったり，逆にUAP側のデータをSQLで表に挿入したりするには，両方の言語間の橋渡しをする変数が必要になります。このために，埋込み変数を使用します。また，ナル値を含むデータを受け渡す必要のあるときには，埋込み変数と併せて標識変数を使用します。

埋込み変数及び標識変数の宣言例を次に示します。

なお，SQL中での埋込み変数及び標識変数の指定方法については，「検索，更新のSQL（実行文）」を参照してください。

EXEC SQL
  BEGIN DECLARE SECTION  ..........1
END-EXEC.
77 XUSERID    PIC X(7). ...........2
77 XPSWD      PIC X(7). ...........2
77 XSCODE     PIC X(4). ...........2
77 XSNAME     PIC N(8). ...........2
77 XGRYO      PIC S9(9) COMP. .....2
77 IGRYO      PIC S9(4) COMP. .....3
EXEC SQL
  END DECLARE SECTION  ............4
END-EXEC.

［説明］

埋込み変数の宣言の始まりを示します。

埋込み変数を宣言します。SQLとUAP側でデータを受け渡しするときには，あらかじめ決められた規則に従って記述します。SQLのデータ型とデータ記述については，「SQLのデータ型とデータ記述」を参照してください。

埋込み変数xgryoに対する標識変数を宣言します。なお，BLOB型の埋込み変数に対する標識変数の場合は，PIC S9(9) COMP.となります。

埋込み変数の宣言の終わりを示します。

ナル値の既定値設定機能を使用している場合，検索結果がナル値のときはナル値の代わりに既定値（数データの場合は0，文字データの場合は空白）を埋込み変数で受け取ることができます。この場合，既定値とナル値とを区別しなくていいときは，標識変数を使用する必要がなくなります。ナル値の既定値設定機能については，マニュアル「HiRDB SQLリファレンス」を参照してください。

(2)　HiRDBとの接続

HiRDBにユーザの認可識別子及びパスワードを通知して，UAPがHiRDBを使用できる状態にします。これをHiRDBとの接続といいます。HiRDBとの接続方法を次に示します。

EXEC SQL
  CONNECT :XUSERID IDENTIFIED BY :XPSWD
END-EXEC.

［説明］

埋込み変数（:XUSERID）に格納された認可識別子，及び埋込み変数（:XPSWD）に格納されたパスワードでHiRDBと接続します。

(3)　カーソル宣言

UAPで複数行の検索結果を1行ずつ取り出すために，DECLARE CURSORでカーソルを宣言します。宣言したカーソルを使用して，データの検索，更新，及び削除をします。また，カーソルをオープンする場合はOPEN文，検索結果を取り出しカーソルを次の行へ進める場合はFETCH文，カーソルをクローズする場合はCLOSE文を使用します。

カーソル宣言中には，探索条件中の条件値として，埋込み変数及び標識変数を指定できます。これらを指定した場合，そのカーソルに対するOPEN文の実行時に，それらの変数中の値がHiRDBに渡されます。

カーソルの詳細については，「カーソルの効果」を参照してください。

カーソルの宣言方法を次に示します。

EXEC SQL
  DECLARE CR1 CURSOR FOR SELECT SCODE,SNAME,GRYO FROM ZAIKO
END-EXEC.

［説明］

ZAIKO表からSCODE，SNAME，GRYOを1行ずつ取り出すために，カーソルCR1を宣言します。

(4)　エラー時の処置の指定

SQL文の前にWHENEVER文を指定しておくと，エラーが発生したかどうかを自動的に判定できます。WHENEVER文の指定方法を次に示します。

(a)　エラーが発生した場合

EXEC SQL
  WHENEVER SQLERROR GO TO エラー処理
END-EXEC.

［説明］

WHENEVER SQLERROR：

エラーが発生したときの処置を宣言します。

GO TO エラー処理：

エラーが発生したとき，指定した節名又は段落名（エラー処理）へ処理を移します。この処理内からSQL連絡領域を参照すれば，リターンコードと関連する情報を確認できます。

(b)　検索する行がなくなった場合

EXEC SQL
  WHENEVER NOT FOUND GO TO 検索終了処理
END-EXEC.

［説明］

WHENEVER NOT FOUND：

検索する行がなくなったときの処置を宣言します。

GO TO 検索終了処理：

検索する行がなくなったとき，指定した節名又は段落名（検索終了処理）へ処理を移します。

(c)　WHENEVER文の有効範囲

WHENEVER文は次に同じ種類のWHENEVER文が現れるまで，その間にあるすべてのSQLに対して有効となります。WHENEVER文の有効範囲については，マニュアル「HiRDB SQLリファレンス」を参照してください。

(5)　検索，更新のSQL（実行文）

データを検索，更新，挿入，又は削除するためのSQL文を記述します。各SQL文の記述方法については，「データベースの操作」を参照してください。

ここでは，埋込み変数及び標識変数の使用方法について説明します。

(a)　1行SELECT文又はFETCH文に記述する場合

1行SELECT文又はFETCH文のINTO句に，埋込み変数及び標識変数を指定します。このとき，各変数の先頭にはコロンを付けます。標識変数は対応する埋込み変数に続けて指定します。例を次に示します。

INTO句に指定した埋込み変数は，SELECT文の列の並びに指定した列名の順に対応しており，この順序に従って埋込み変数に検索結果が格納されます。

検索結果にナル値を含む場合は標識変数に負の値が格納されるので，この値を参照してナル値かどうかを判断します。このとき，埋込み変数の値は不定となります。また，標識変数の値が0のときは，ナル値以外の値を受け取ったことを示し，値が正のときは，ナル値以外の文字列データを受け取ったが，埋込み変数の領域長が不足していたため，右端が切り捨てられたことを示します。

また，探索条件の値に埋込み変数を指定しておけば，SQLの実行時に探索条件の値を与えることができます。

(b)　UPDATE文及びINSERT文に記述する場合

UPDATE文のSET句及びINSERT文のVALUES句に埋込み変数及び標識変数を指定します。このとき，各変数の先頭にはコロンを付けます。標識変数は対応する埋込み変数に続けて指定します。例を次に示します。

＜UPDATE文の場合＞

EXEC SQL
  UPDATE ZAIKO SET GRYO=:XGRYO:IGRYO WHERE SCODE=:XSCODE
END-EXEC.

＜INSERT文の場合＞

EXEC SQL
  INSERT INTO ZAIKO VALUES(:XSCODE,:XSNAME,:XCOL,:XTANKA
                            ,:XGRYO:IGRYO,:XMAXRYO,:XSAFRYO)
END-EXEC.

UPDATE文又はINSERT文によって表にナル値を設定する場合は，そのSQLを実行する前にあらかじめ標識変数に負の値を設定しておきます。このとき，埋込み変数には何も設定しなくてよいです。また，ナル値以外の値を渡す場合は，標識変数の値を0又は正にしておきます。

(6)　エラーの判定

SQLの実行中にエラーが発生した場合，SQLCODE，SQLSTATEを参照すると，HiRDBから返されるリターンコードが分かります。そのリターンコードを利用して，その後の処理をどうするか指示します。ただし，「エラー時の処置の指定」で，既に同じ内容のエラー処理を指定している場合は，ここで指示する必要はありません。

DECLARE CURSORのような宣言文の直後に，エラーの判定はしないでください。エラーの判定をすると，不正なSQLCODEを参照して，HiRDBが誤動作してしまいます。

エラーの判定については，「エラーの判定」を参照してください。

(7)　トランザクションの有効化

トランザクション内で更新処理をした場合，更新したデータベースの内容を有効にし，トランザクションを正常終了させます。

トランザクションを有効にするSQL文を次に示します。

EXEC SQL
  COMMIT
END-EXEC.

［説明］

トランザクションを有効にします。また，トランザクションの有効化後にUAPをHiRDBから切り離したい場合には，RELEASE指定のCOMMIT文を実行します。RELEASEを指定した場合，DISCONNECT文を実行しなくてもよいです。

(8)　トランザクションの無効化

トランザクション内で更新したデータベースの内容を無効にし，トランザクションを終了させます。トランザクション内での更新処理が不正だった場合など，データベースの更新を取り消したいときに指定します。

トランザクションを無効にするSQL文を次に示します。

EXEC SQL
  ROLLBACK
END-EXEC.

［説明］

トランザクションを無効にします。また，トランザクション終了後にUAPをHiRDBから切り離したい場合には，RELEASE指定のROLLBACK文を実行します。RELEASEを指定した場合，DISCONNECT文を実行しなくてもよいです。

(9)　HiRDBからの切り離し

トランザクションを正常終了させて，UAPをHiRDBから切り離します。DISCONNECT文は，RELEASE指定のCOMMIT文を実行したときと同じになります。

トランザクションを正常終了させて，UAPをHiRDBから切り離すSQL文を次に示します。

EXEC SQL
  DISCONNECT
END-EXEC.

［説明］

トランザクションを正常終了させて，UAPをHiRDBから切り離します。また，トランザクションを取り消した後にUAPをHiRDBから切り離す場合には，RELEASE指定のROLLBACK文を実行します。なお，DISCONNECT文，COMMIT文（RELEASE指定），及びROLLBACK文（RELEASE指定）のどれも実行しないでUAPが終了した場合，ROLLBACK文（RELEASE指定）が自動的に実行され，実行中のトランザクションは無効となるので注意してください。

3.2　UAPの記述

ここでは，UAPを作成するときに考慮する必要がある基本的な内容について説明します。

3.2.1　UAPの記述言語

UAPの形式は，高級言語で記述されたソースプログラム中に直接SQLを記述する埋込み型です。

HiRDBで使用できるUAPの記述言語を次の表に示します。

表3‒1　UAPの記述言語

動作環境

記　述　言　語

HP-UX

C言語（最適化C）

C++言語（最適化C++）

COBOL言語（COBOL85及びCOBOL2002）

OOCOBOL言語（OOCOBOL）※

AIX

C言語

C++言語

COBOL言語（COBOL85及びCOBOL2002）

Linux

C言語（gcc）

C++言語（GCC）

COBOL言語（COBOL85及びCOBOL2002）

OOCOBOL言語（OOCOBOL）※

Windows

C言語（Microsoft Visual C++）

C++言語（Microsoft Visual C++）

COBOL言語（COBOL85及びCOBOL2002）

OOCOBOL言語（OOCOBOL）※

注※

複数接続機能は使用できません。

なお，埋込み型のUAPは，そのままではコンパイル，及びリンケージができません。SQLプリプロセサを実行し，ポストソースプログラムに変換してからコンパイル，及びリンケージをしてください。プリプロセス，コンパイル，及びリンケージについては，「UAP実行前の準備」を参照してください。

3.2.2　インタフェース領域

インタフェース領域は，HiRDBとUAPとの間で情報をやり取りするために使用します。インタフェース領域の種類と使用目的を次の表に示します。

表3‒2　インタフェース領域の種類と使用目的

領域名

使用目的

言語

C

COBOL

SQL連絡領域

SQLの実行結果の詳細情報を取得します。

○※1

○※1

SQL記述領域

UAP実行時に動的に決定した入力変数の情報をシステムに通知します。

UAPを動的に実行するために前処理したSQLの検索項目の情報を受け取ります。

列名記述領域を指定します。

△

△

列名記述領域

UAPを動的に実行するために前処理したSQLの検索項目の情報を受け取ります。

△

△

型名記述領域

ユーザ定義型のデータ型名を受け取ります。

△

△

文字集合名記述領域

UAP実行時に動的に決定した入力変数の文字集合名をシステムに通知します。

UAPを動的に実行するために前処理した，SQLの検索項目の文字集合名を受け取ります。

△

△

埋込み変数

埋込み型UAPのSQL中に指定して値の受け渡しをします。

△

△

標識変数

埋込み型UAPのSQL中に指定して値の受け渡しをします。

△

△

パラメタ

UAPを動的に実行するために前処理する SQLに対して，UAPから値を渡します。

△

△※2

（凡例）○：必要　　△：任意

注※1

SQLプリプロセサを実行するとUAP中に展開されるので，宣言は不要です。SQLプリプロセサの実行については，「プリプロセス」を参照してください。

注※2

?パラメタの代わりに埋込み変数，及び標識変数を使用します。

SQL連絡領域の詳細は「SQL連絡領域」を，SQL記述領域の詳細は「SQL記述領域」を参照してください。また，埋込み変数，標識領域，及び?パラメタの詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

3.2.3　整合性制約

HiRDBには，データベースのデータが正しい状態であることを保証するため，次に示す二つの整合性制約があります。

非ナル値制約

一意性制約

(1)　非ナル値制約

指定した列の値に，ナル値を許さない制約のことを非ナル値制約といいます。

非ナル値制約は，CREATE TABLEのNOT NULLオペランドで指定します。非ナル値制約を指定した列に対しては，常に値が定まっていることが要求されるため，ナル値を与えようようとすると制約違反となります。制約違反の場合，データベースを更新できないので，非ナル値制約を指定した列には，ナル値を与えないようにする必要があります。

(2)　一意性制約

指定した列の値がすべての行で一意であり，列中での重複を許さない制約のことを一意性制約といいます。

一意性制約は，次に示す列に指定できます。

(a)　クラスタキーとして定義する列

CREATE TABLEのUNIQUEオペランドで指定します。

クラスタキーの指定については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

(b)　インデクスを定義する列

CREATE INDEXのUNIQUEオペランドで指定します。

CREATE TABLE，及びCREATE INDEXの指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

3.2.4　SQLを使用した検索方法の分類

SQLを使用して表を検索する場合，大別するとSQLの静的実行と動的実行に分類できます。SQLを使用したときのUAPからの検索方法の分類を次の表に示します。

表3‒3　SQLを使用したUAPからの検索方法の分類

検索方法

問合せ内容を指定するSQL

埋込み型UAP

静的SQL

1行SELECT文

カーソル宣言

動的SQL

1行SELECT文

動的SELECT文

(1)　1行SELECT文

表から1行だけ検索結果を取り出すには，1行SELECT文を使用します。

1行SELECT文を使用すると，カーソルを使用する必要がないため，一つのSQLで検索できます。

1行SELECT文は，次の場合に使用すると有効です。また，UAP実行時に組み立てた1行SELECT文を動的に実行することもできます。

検索結果が1行以下になることが明確な場合

グループ分け（GROUP BY句）をしないで集合関数を使用する場合

なお，1行だけの検索の場合でも，検索した行を更新したり，削除したりするときは，カーソルを使用する方が処理効率が良いので，場合によって使い分ける必要があります。

(2)　カーソル宣言

検索結果が複数行になる場合，UAPでは一度に受け取れないため，カーソルを使用して1行ずつ取り出します。カーソルの宣言から検索の終了までの流れは，次に示すとおりです。

DECLARE CURSORでカーソル宣言をします。

OPEN文を実行すると，カーソルが開いて使用できる状態になります。

FETCH文を実行すると，カーソルが検索結果の1行目を指すので，埋込み変数，又はパラメタ（FETCH文のINTO句で指定した）を使用して検索結果を取り出します。

再度FETCH文を実行すると，カーソルが次の行へ進むので，1行ずつ検索結果を取り出します。

検索する行がなくなるまで 4. の操作を繰り返します。

検索が終了したら，CLOSE文を実行してカーソルを閉じます。

(3)　動的SELECT文

SQLの動的実行によって検索結果を複数行取り出すには，動的SELECT文を使用します。動的SELECT文で検索結果を取り出すには，あらかじめカーソル宣言をしておくか，又はALLOCATE CURSOR文でカーソルを割り当てておく必要があります。カーソル宣言，又はカーソル割り当てをしておくと，UAP実行時に組み立てたSQL文をPREPARE文で前処理した後は，通常のカーソルを使用した検索と同様の操作ができます。

3.2.5　静的SQLと動的SQL

UAPを作成するとき，プログラム中にSQLを記述する方法を静的SQLといいます。これに対し，UAPを作成するとき，プログラム中にSQLを記述しないで，UAP実行時にSQLの文字列を組み立てる方法を動的SQLといいます。

静的SQLと動的SQLとでは，実行時の特徴が異なりますので，UAPを作成する前に十分検討する必要があります。

(1)　実行時の相違点

静的SQLと動的SQLの実行時の特徴を次の表に示します。

表3‒4　静的SQLと動的SQLの実行時の特徴

種　類

長　　所

短　所

静的SQL

同一のUAPを繰り返し実行する場合，一度実行したSQL文は実行形式に変換され，共用メモリ上で再利用できるため，処理効率が良い。

UAP中にSQLを埋め込むので，探索条件の変更が限定される。

動的SQL

実行時にSQLの文字列を組み立てるため，探索条件を変更するときの自由度が大きい。

実行するたびにSQLを解析して実行形式に変換するため，処理効率が悪い。※

注※

同じ文字列のSQLを複数回実行するようなケースでは，処理効率は良くなります。

(2)　実行時に指定できる値

静的SQLの実行では，実行時に挿入値，更新値，及び探索条件の値を変更できます。また，動的SQLの実行では，静的SQLの実行時に変更できる値以外に，表名，列名，条件式などSQLの任意の部位を変更できます。

静的SQLの場合と動的SQLの場合とで，各々実行時に変更できる値の例を次の図に示します。なお，枠で囲んである部分が値を変更できる箇所です。

図3‒2　SQLの実行時に与えられる値

(3)　動的SQLの実行と留意点

動的SQLは，静的SQLと比較して探索条件を変更するときの自由度は大きいが，条件を変更するたびにSQLを実行しなければならないため，あらかじめ実行時の性能（処理効率）を考慮する必要があります。

(a)　動的SQLの前処理と実行

動的SQLでは，UAP実行時にPREPARE文で前処理してから実行します。実行は，前処理するSQLが動的SELECT文か動的SELECT文以外かで異なります。前処理するSQLが動的SELECT文の場合，OPEN文，FETCH文，及びCLOSE文で実行し，前処理するSQLが動的SELECT文以外の場合，EXECUTE文で実行します。また，EXECUTE IMMEDIATE文を使用すれば，前処理と実行を一度にできます。値を変えて同じSQLを動的に実行する場合，前処理を何度も実行するより，?パラメタを使用して，前処理を一度だけして，実行時に?パラメタに与える値を変えて実行する方が性能（処理効率）が向上します。?パラメタの詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

動的SQLの実行形態を次の図に示します。

図3‒3　動的SQLの実行形態

注※

埋込み変数（:XCMND）は，埋込みSQL宣言節で宣言しておいてください。

埋込み変数については，マニュアル「HiRDB SQLリファレンス」を参照してください。

PREPARE文で前処理できるSQLとEXECUTE IMMEDIATE文で前処理と実行が一度にできるSQLを次の表に示します。

表3‒5　PREPARE文で前処理できるSQLとEXECUTE IMMEDIATE文で前処理と実行が一度に実行できるSQL

分類

SQL文

PREPARE

EXECUTE

IMMEDIATE

操作系 SQL

ASSIGN LIST文

○※3

○

CALL

○※3

○

DELETE※1

○※3

○

準備可能動的DELETE文：位置付け

○

○

DROP LIST文

○※3

○

INSERT

○※3

○

PURGE TABLE

○※3

○

1行SELECT※2

○※3

○

動的SELECT

○※4

×

UPDATE※1

○※3

○

準備可能動的UPDATE文：位置付け

○

○

代入文

○※3

×

制御系 SQL

CALL COMMAND

○

○

COMMIT

×

×

CONNECT

×

×

DISCONNECT

×

×

LOCK TABLE

○※3

○

ROLLBACK

×

×

SET SESSION AUTHORIZATION文

○※3

×

定義系 SQL

ALTER INDEX

○※3

○

ALTER PROCEDURE

○※3

○

ALTER ROUTINE

○※3

○

ALTER TABLE

○※3

○

ALTER TRIGGER

○※3

○

COMMENT

○※3

○

CREATE AUDIT

○※3

○

CREATE CONNECTION SECURITY

○※3

○

CREATE FUNCTION

○※3

○

CREATE INDEX

○※3

○

CREATE PROCEDURE

○※3

○

CREATE SCHEMA

○※3

○

CREATE SEQUENCE

○※3

○

CREATE TABLE

○※3

○

CREATE TRIGGER

○※3

○

CREATE TYPE

○※3

○

CREATE VIEW

○※3

○

DROP AUDIT

○

○

DROP CONNECTION SECURITY

○※3

○

DROP DATA TYPE

○※3

○

DROP FUNCTION

○※3

○

DROP INDEX

○※3

○

DROP PROCEDURE

○※3

○

DROP SCHEMA

○※3

○

DROP SEQUENCE

○※3

○

DROP TABLE

○※3

○

DROP TRIGGER

○※3

○

DROP VIEW

○※3

○

GRANT

○※3

○

REVOKE

○※3

○

（凡例）

○：使用できます。　×：使用できません。

注

埋込み変数を含むSQLは，動的に実行できないので，?パラメタを使用してください。?パラメタの詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

注※1

カーソルを使用した操作はできません。

注※2

INTO句を含まないようにしてください。

注※3

EXECUTE文で実行してください。

注※4

OPEN文，FETCH文，及びCLOSE文で実行してください。

動的に指定された表にデータを挿入する場合の例を次の図に示します。

図3‒4　動的に指定された表にデータを挿入する例

(b)　EXECUTE文とEXECUTE IMMEDIATE文の使い分け

EXECUTE IMMEDIATE文は，PREPARE文とEXECUTE文を連続して実行するのと同じです。ただし，同じSQLを何度も繰り返して実行する場合，EXECUTE IMMEDIATE文でその都度前処理するより，PREPARE文で前処理してからEXECUTE文で繰り返して実行する方が性能（処理効率）が良くなります。

(c)　前処理するSQLが動的SELECT文の場合の動的実行

前処理するSQLが動的SELECT文か動的SELECT文以外かで異なります。前処理するSQLが動的SELECT文の場合，OPEN文，FETCH文，及びCLOSE文で実行し，前処理するSQLが動的SELECT文以外の場合，EXECUTE文で実行します。前処理するSQLが動的SELECT文の場合の動的実行例を，次の図に示します。

図3‒5　前処理するSQLが動的SELECT文の場合の動的実行例

(d)　動的SELECT文に対する，カーソルを使用したSQLの動的実行

動的SELECT文を前処理し，その動的SELECT文に対するカーソルを使用したSQLを，動的に実行する場合，カーソル宣言で宣言したカーソルは使用しません。この場合，前処理した動的SQL文に対してALLOCATE CURSOR文で割り当てたカーソルを使用します。動的SELECT文に対して，カーソルを使用したSQLを動的に実行する場合の例を次に示します。

PREPARE GLOBAL :SEL FROM :XCMND; .................. 埋込み変数(:XCMND)に設定された
                                                    動的SELECT文に，拡張文名
                                                    (:SEL='SEL1')を付けます。
ALLOCATE GLOBAL :CR CURSOR FOR GLOBAL :SEL; ....... 拡張文名(:SEL='SEL1')が識別する
                                                    問合せに対して，カーソル
                                                    (:CR='CR1')を割り当てます。
PREPARE UPD1 FROM
  'UPDATE SET C1=? WHERE CURRENT OF GLOBAL CR1'; .. カーソル(CR1)を使用したUPDATE文
                                                    を前処理し，SQL文識別子(UPD1)を
                                                    付けます。
OPEN GLOBAL :CR; .................................. カーソル(:CR='CR1')を開きます。
FETCH GLOBAL :CR INTO :XKEKKA; .................... カーソル(:CR='CR1')を使用した
                                                    検索結果を埋込み変数(:XKEKKA)に
                                                    読み込みます。
EXECUTE UPD1 USING :XDATA; ........................ 前処理したSQL文識別子(UPD1)の
                                                    UPDATE文を実行します。このとき，
                                                    ?パラメタに対応する埋込み変数
                                                    (:XDATA)を指定します。
CLOSE GLOBAL :CR; ................................. カーソル(:CR='CR1')を閉じます。

(e)　動的SQLの実行時に決定した情報の受け取り

UAPで動的にSQLを実行した場合，実行時に決定した情報（データ受け渡し領域の個数，属性，番地など）をHiRDBに通知するための領域としてSQL記述領域が使用されます。また，SQL記述領域は，動的に実行するためにPREPARE文で前処理するSQLの検索項目の情報を，次のどちらかの方法で受け取れます。

DESCRIBE文を実行する。

PREPARE文実行時に，OUTPUT，及びINPUTを指定し実行する（この場合，DESCRIBE文を実行しなくても，PREPARE文実行時に情報の受け取りもできるため，通信回数を削減できます）。

DESCRIBE文については，マニュアル「HiRDB SQLリファレンス」を参照してください。また，SQL記述領域の使用例については，「SQL記述領域」を参照してください。

3.2.6　マルチスレッドを使用したUAPのSQLの実行

(1)　単一接続の場合（接続ハンドルを使用しない場合）

マルチスレッドを使用したUAPでSQLを実行する場合，SQLを実行中の接続に対して，別スレッドからSQLを実行することはできません。実行した場合は動作を保証しません。

SQLを実行中の接続に対して，別スレッドからSQLを実行した場合は，KFPA11725-Eエラーとします。そのため，KFPA11725-Eエラーが発生する場合は，SQLを実行するスレッドとの間で処理をシリアライズして，SQLを実行中の接続に対して，別スレッドからSQLを実行しないようにプログラムを修正してください。スレッド間で接続を共有する例を次の図に示します。

図3‒6　スレッド間で接続を共有する例（異常時）

図3‒7　スレッド間で接続を共有する例（正常時）

接続1は複数接続機能を使用していない（接続ハンドルを使用していない）ため，プロセス内で接続が共有されます。スレッド1の接続1でのSQL実行中に，スレッド2が接続1に対してSQLを実行したため，スレッド2のSQLはKFPA11725-Eエラーとなります。このような場合，接続1を共有しているスレッドの処理をシリアライズし，スレッド1のSQL実行中に，スレッド2からSQLを実行しないようにしてください。

(2)　複数接続機能を使用する場合（接続ハンドルを使用する場合）

マルチスレッドを使用したUAPで，複数接続機能の接続ハンドルを使用する場合，SQLを実行中の接続ハンドルを使用して，別スレッドからSQLを実行することはできません。実行した場合は動作を保証しません。

SQLを実行中の接続ハンドルを使用して，別スレッドからSQLを実行した場合は，KFPA11725-Eエラーとします。そのため，KFPA11725-Eエラーが発生する場合は，SQLを実行するスレッドとの間で処理をシリアライズして，SQLを実行中の接続ハンドルを使用して，別スレッドからSQLを実行しないようにプログラムを修正してください。複数接続機能を使用してスレッド間で接続ハンドルを共有する例を次の図に示します。なお，複数接続機能の詳細は「複数接続機能」を参照してください。

図3‒8　スレッド間で接続ハンドルを共有する例（異常時）

図3‒9　スレッド間で接続ハンドルを共有する例（正常時）

接続ハンドル1及び接続ハンドル2を，スレッド間で共有しています。スレッド2の接続ハンドル1でのSQL実行中に，スレッド3が接続ハンドル1を使用してSQLを実行したため，スレッド3のSQLはKFPA11725-Eエラーとなります。このような場合，接続ハンドル1を共有しているスレッドとの間で処理をシリアライズして，スレッド2のSQL実行中に，スレッド3からSQLを実行しないようにしてください。

なお，スレッド2のSQL実行中に，スレッド1もSQLを実行していますが，スレッド1が使用した接続ハンドル2はスレッド2の接続ハンドルと異なるため，スレッド1のSQLは実行できます。

3.3　トランザクション制御

ここでは，HiRDBシステムに対してUAPがトランザクションを開始する，又は終了する契機，同期点の設定とトランザクションの扱い，及びロールバックの設定について説明します。

3.3.1　HiRDBシステムへの接続と切り離し

HiRDBシステムへの接続は，CONNECT文を実行したときです。

HiRDBシステムとの切り離しは，DISCONNECT文を実行したときです。

3.3.2　トランザクションの開始と終了

トランザクションの開始は，UAPのSQL文を実行したときです。

トランザクションの終了は，COMMIT文，又はROLLBACK文を実行したときです。

HiRDBシステムと接続中は，幾つでもトランザクションの開始と終了をできます。

トランザクションの開始と終了の例を次の図に示します。

図3‒10　トランザクションの開始と終了の例

なお，HiRDB/パラレルサーバでは，SQLの処理を複数のサーバに分岐しますが，一つのトランザクションとして管理されるので，内部の分岐については考慮する必要はありません。

3.3.3　同期点の設定とロールバックの設定

同期点の設定とトランザクションの扱いを次の表に示します。

表3‒6　同期点の設定とトランザクションの扱い

同期点の設定

同期点設定の要因

トランザクションの扱い

SQL実行によるUAPでの設定

COMMIT文の実行

有効※１

ROLLBACK文の実行

無効※１※２

SQL実行によるHiRDBシステムでの設定

定義系SQLの実行

有効※１

PURGE TABLE文の実行

有効※１

DISCONNECT文の実行

有効※１

SQL実行時に処理を継続できなくなったとき

無効※３

UAP終了によるHiRDBシステムでの設定

次のSQL文を実行しないでUAPが終了した

COMMIT文

ROLLBACK文

DISCONNECT文

無効※２

注※1

OLTP環境でX/Openに従ったアプリケーションプログラムでは実行できません。X/Openに従ったアプリケーションプログラムで同期点，及びロールバックの設定については，「OLTP環境でのUAPのトランザクション管理」を参照してください。

注※2

トランザクションが無効になる場合，直前の同期点までが無効になります。

注※3

暗黙的ロールバックになります。暗黙的ロールバックになる主な要因は次に示すとおりです。

デッドロック

RDエリアのページ不足

RDエリアの障害の検知，又は閉塞の検知

3.3.4　OLTP環境でのUAPのトランザクション管理

OLTP環境で，トランザクションの同期点，及びロールバックをUAPから実行する場合，X/Openに従ったアプリケーションプログラムインタフェース（以降APIと略します）を使用します。

ここでは，OpenTP1の場合を例に説明します。なお，OpenTP1を利用する場合のプログラムの作成方法については，マニュアル「OpenTP1 プログラム作成リファレンス C言語編」，又はマニュアル「OpenTP1 プログラム作成リファレンス COBOL言語編」を参照してください。

1件のトランザクションをRPC（リモートプロシジャコール）を使用して，複数のOLTPユーザサーバプロセスで実現できます。個々のプロセスをトランザクションブランチと呼び，全体をまとめてOLTPのグローバルトランザクションと呼びます。

このようなOLTPのグローバルトランザクションからHiRDBをアクセスする場合，一つのグローバルトランザクション内の複数のトランザクションブランチからHiRDBをアクセスできません。

アクセスする資源によっては，グローバルトランザクション内の先発トランザクションブランチで掛けた排他を，後発トランザクションブランチが待ってタイムアウトになったり，トランザクションブランチ間でデッドロックが発生したりすることがあります。

このような場合は，連鎖RPCなどの機能を使用して，複数のRPCを同一トランザクションブランチとして扱うようにしてください。

(1)　C言語で記述する場合

(a)　トランザクションの開始

tx_begin関数を実行します。

(b)　同期点の設定

tx_commit関数を実行します。

(c)　ロールバックの設定

tx_rollback関数を実行します。

(2)　COBOL85言語で記述する場合

(a)　トランザクションの開始

    DATA DIVISION.

    *include TX definitions.

    01 TX-RETURN_STATUS
       COPY TXSTATUS.

    PROCEDURE DIVISION.
    CALL "TXBEGIN" USING TX-RETURN_STATUS.

(b)　同期点の設定

    DATA DIVISION.

    *include TX definitions.

    01 TX-RETURN_STATUS
       COPY TXSTATUS.

    PROCEDURE DIVISION.
    CALL "TXCOMMIT" USING TX-RETURN_STATUS.

(c)　ロールバックの設定

    DATA DIVISION.

    *include TX definitions.

    01 TX-RETURN_STATUS
        COPY TXSTATUS.

    PROCEDURE DIVISION.
    CALL "TXROLLBACK" USING TX-RETURN_STATUS.

3.3.5　トランザクションの移行

トランザクションのコミット処理を，UAPがHiRDBをアクセスしたときと異なるプロセスで実行することをトランザクションの移行といいます。

なお，ここでいうUAPとは，HiRDB XAライブラリを使用してHiRDBに接続するUAPのことです。

トランザクションの移行機能を使用する場合，クライアント環境定義のPDXAMODEオペランドに1を指定してください。

PDXAMODEオペランドについては，「クライアント環境定義の設定内容」を参照してください。

(1)　PDXAMODEオペランドの指定によるLOCK TABLE UNTIL DISCONNECTの有効範囲

PDXAMODEの指定によって，LOCK文のLOCK TABLE UNTIL DISCONNECTの有効範囲が変わります。

(a)　PDXAMODE=0の場合

AP記述によってリソースマネジャのオープン処理をする場合

リソースマネジャのクローズ実行時まで有効になります。

トランザクションごとにリソースマネジャのオープン処理をする機能がある場合

グローバルトランザクション内で有効になります。

(b)　PDXAMODE=1の場合

AP記述によってリソースマネジャのオープン処理をする場合

トランザクションの移行が発生しない場合

リソースマネジャのクローズ実行時まで有効になります。

トランザクションの移行が発生する場合

グローバルトランザクション内で有効になります。

トランザクションごとにリソースマネジャのオープン処理をする機能がある場合

グローバルトランザクション内で有効になります。

OpenTP1を利用した場合のLOCK TABLE UNTIL DISCONNECTの有効範囲を，次の表に示します。

表3‒7　OpenTP1を利用した場合のLOCK TABLE UNTIL DISCONNECTの有効範囲

PDXAMODEの指定値

OpenTP1の指定値

LOCK TABLE UNTIL DISCONNECTの有効範囲

0

trn_rm_open_close_scope=process

リソースマネジャのクローズまで有効

trn_rm_open_close_scope=transaction

グローバルトランザクション内で有効

1

trn_rm_open_close_scope=process

trnstringオペランドで-dオプションを指定

リソースマネジャのクローズまで有効

trnstringオペランドで-dオプションを省略

同一のOpenTP1システム内では単体のAPでグローバルトランザクションを構成

同一のOpenTP1システム内では複数のAPでグローバルトランザクションを構成

一つのAPが HiRDB XAライブラリとリンク

複数のAPが HiRDB XAライブラリと

リンク

グローバルトランザクション内で有効

trn_rm_open_close_scope=transaction

注　-dオプションは，TP1/Server Baseのバージョンが03-03以降で，かつUNIX版HiRDBの場合に指定できます。

3.4　排他制御

複数のユーザが一つの表を同時に操作した場合，データの不整合が起きることがあるため，HiRDBシステムでは自動的に排他制御をしてデータの不整合を防止しています。ここでは，排他制御の仕組みとユーザが変更できる排他制御の内容について説明します。

3.4.1　排他制御の単位

(1)　排他資源とその包含関係

HiRDBでは，データベースの整合性を保つように排他制御をしています。特に，HiRDB/パラレルサーバでは，基本的に各サーバ間で資源の共有をしないので，サーバごとに閉じた排他制御をしています。

HiRDBでは，排他資源という単位で排他を掛けて，不正にデータが参照されたり，更新されたりすることを防止しています。

排他資源には包含関係があるため，上位の資源で排他を掛けると，それより下位の資源には排他を掛ける必要がありません。排他資源とその包含関係を次の図に示します。

図3‒11　排他資源とその包含関係

注※1

インナレプリカ機能使用時の最上位排他資源は，インナレプリカ構成管理情報，又はレプリカグループ構成管理情報となります。

インナレプリカ構成管理情報の排他を取得できない場合に，レプリカグループ構成管理情報の排他を取得します。レプリカRDエリアを定義していないRDエリアにアクセスする場合でも，排他が掛かります。これによって，業務実行中に通常RDエリアにレプリカRDエリアが定義されたり，インナレプリカグループ内の構成が変わったりすることを抑止します。

注※2

一時表の実体化時に，一時的に取得します。一時表に対する操作で取得される排他については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

注※3

インデクスキー値無排他を適用した場合，キー値には排他を掛けません。

注※4

プラグインが使用するファイルです。

(2)　最小排他資源単位の設定

HiRDBシステムが自動的にする排他制御では，表ごとに最小排他資源単位を設定できます。設定できる排他資源は，行，又はページです。

また，インデクスに対してインデクスキー値で排他制御しないようにすることもできます。これをインデクスキー値無排他といいます。

(a)　最小排他資源単位を行にした場合

ページ単位の排他と比較して排他資源の単位が小さいため，同時実行性が向上する反面，排他制御による処理時間やメモリ使用量が増加します。

最小排他資源単位を行にするには，CREATE TABLE，ALTER TABLE，又はLOCK文を使用します。詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

(b)　最小排他資源単位をページにした場合

行単位の排他と比較して排他制御による処理時間やメモリ使用量が減少する反面，同時実行性が低下します。

最小排他資源単位をページにするには，CREATE TABLE，ALTER TABLE，又はLOCK文を使用します。詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

(c)　インデクスキー値無排他の場合

インデクスキー値には排他を掛けないで，表に対してだけ排他を掛けます。これによって，次のような問題を回避できます。

データ更新とインデクス検索との間のデッドロック

同一キーを持つデータに対するアクセスが必要もなく待たされる

異なるキーを持つデータに対するアクセスが必要もなく待たされる

インデクスキー値無排他については，「インデクスキー値無排他」を参照してください。

(a)〜(c)はそれぞれ特徴が異なりますので，特徴を考慮した上で設定してください。

3.4.2　排他制御のモード

(1)　モードの種類

排他制御では，各々の排他資源に対して5種類の排他制御モードを用います。

共用モード（PRモード：Protected Retrieve）

ほかのトランザクションには参照だけを許すモードです。

排他モード（EXモード：Exclusive）

一つのトランザクションだけが排他資源を占有し，ほかのトランザクションには参照，追加，更新及び削除を許さないモードです。

意図共用モード（SRモード：Shared Retrieve）

参照だけが許されているモードです。ほかのトランザクションには排他資源の参照，追加，更新及び削除を許すモードです。

意図排他モード（SUモード：Shared Update）

参照，追加，更新及び削除が許されているモードです。ほかのトランザクションにも排他資源の参照，追加，更新及び削除を許すモードです。

共用意図排他モード（PUモード：Protected Update）

参照，追加，更新及び削除が許されているモードです。ほかのトランザクションには参照だけを許すモードです。このモードは1.〜4.とは異なり，排他制御モードの遷移の結果として発生します。

排他制御では，排他資源の上位から下位へと順番に排他が掛けられます。排他を掛けていく途中で同一資源に対して，一つでもほかのトランザクションと同時実行できないトランザクションがある場合，そのトランザクションは待ち状態になります。また，上位から下位の資源へ排他を掛けていく途中にPRモード，又はEXモードがある場合，そのモードが掛かっている資源より下位の資源には排他が掛かりません。

同一資源に対して2ユーザが同じ処理をすると仮定したとき，排他制御モードの違いによって，同時に実行できたりできなかったりします。排他制御モードの違いによる2ユーザの同時実行性を次の表に示します。

表3‒8　排他制御モードの違いによる2ユーザの同時実行性

モードの種類

SR

PR

SU

PU

EX

SR

○

○

○

○

×

PR

○

○

×

×

×

SU

○

×

○

×

×

PU

○

×

×

×

×

EX

×

×

×

×

×

（凡例）

○：同時に実行できます。

×：同時に実行できません。

2ユーザが同時に実行できない場合，一般にはトランザクションのコミット待ちになります。ほかのトランザクションのコミット待ちをしないでエラーリターンにする場合，SQL文にWITH ROLLBACK，又はNO WAITを指定します。

(2)　モードの遷移

同一ユーザが同一資源に対して，異なる種類の排他制御のモードで二重，三重と次々に排他を掛けていくと，モードは強い方へと遷移していきます。

一度強いモードで排他を掛けてしまうと，後から弱いモードを掛けても，弱いモードへは遷移しません。例えば，行の更新をするときにEXで排他を掛けた場合，更新した行を参照するためにPRで排他を掛けたとしても，その行の排他制御のモードはEXのままです。

現在の排他制御のモードに対して，更に排他制御を掛けた場合のモードの遷移規則を次の表に示します。

表3‒9　排他制御のモードの遷移規則

後から掛けるモード

現在のモード

SR

PR

SU

PU

EX

SR

−

−

−

−

−

PR

PR

−

PU

−

−

SU

SU

PU

−

−

−

EX

EX

EX

EX

EX

−

（凡例）

−：モードは遷移しません。

−以外：遷移後のモードです。

(3)　モードの組み合わせ

排他制御は，SQL文の種類，及び実行環境によって，モードの組み合わせが異なります。

SQL文の種類，及び実行環境の違いによる排他制御のモードの組み合わせの例を次の表に示します。

表「排他制御のモードの組み合わせの代表例（行排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（行排他の場合）（2/2）」

表「排他制御のモードの組み合わせの代表例（ページ排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（ページ排他の場合）（2/2）」

表「排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（2/2）」

表「排他制御のモードの組み合わせの代表例（検査保留状態に設定する場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（検査保留状態に設定する場合）（2/2）」

表3‒10　排他制御のモードの組み合わせの代表例（行排他の場合）（1/2）

SQL文

資源

上位←　　　→下位

インナレプリカ構成管理

※６

レプリカグループ構成管理※８

RDエリア

表

表（NOWAIT検索）

表用

インデクス用

順序数生成子用

最終HiRDBファイル※５

検索

NOWAIT指定

SR

SR

SR

−

−

−

SR

WITH SHARE指定

SR

SR

SR

−

−

SR

−

WITH EXCLUSIVE指定※１

SR

SR

SU

SR

−

−

SU

−

FOR UPDATE句指定※１

SR

SR

SU

SR

−

−

SU

−

上記以外

SR

SR

SR

−

−

SR

−

更新※１※１２

NEXT VALUE式指定

SR

SU

SU

EX

SU

−

上記以外

SR

SU

−

EX

SU

−

追加※１

NEXT VALUE式指定

SR

SU

SU

EX

SU

−

上記以外

SR

SU

−

EX

SU

−

削除※１

SR

SR

SU

−

−

SU

−

LOCK文

SHARE指定

※１１

SR

SR

SR

−

−

−

PR

−

EXCLUSIVE指定

非共用表

SR

SR

SU

−

−

−

EX

−

共用表※１１

SR

SR

EX

−

−

−

EX

−

表削除※２※１３

−

−

SU

−

−

EX

インデクス定義※１３，表定義変更（主キーの追加）※１３

−

−

SU

−

−

EX

−

インデクス削除※３※１３，表定義変更（主キーの削除）※３※１３

−

−

SR

※１０

SU

−

−

EX※４

EX

全行削除※２※１３※１４

SR

SR

SU

−

−

EX

表定義変更（主キーの追加及び削除は除く）※１３

SR※９

SR※９

SU※７

−

−

EX

順序数生成子定義

−

−

−

−

SU

−

−

−

順序数生成子削除

−

−

−

−

SU

−

−

−

（凡例）

−：排他を掛けません。

−以外：排他を掛けるモードです。

注※1

UAP実行時にデータベースの更新ログを取得しない場合，表に対してEXモードで排他を掛けてコミットまで保持します。行，及びキーに対する排他は掛けません。

なお，UAP実行時にデータベースの更新ログを取得しない運用については，マニュアル「HiRDB システム運用ガイド」を参照してください。

注※2

表，及びインデクスのすべての使用中セグメントに対してEXモードで排他を掛けてコミットまで保持します。

注※3

インデクスのすべての使用中セグメントに対してEXモードで排他を掛けてコミットまで保持します。

注※4

プラグインインデクスの場合はEXモードで排他が掛かりますが，B-Treeインデクスでは排他は掛かりません。

注※5

RDエリアの自動増分が適用されている場合，自動増分処理の開始から終了まで，RDエリアを構成する最終HiRDBファイルに対して排他が掛かります。

注※6

インナレプリカ機能を使用している場合，処理対象RDエリアがあるサーバに対して排他が掛かります。ただし，pd_inner_replica_lock_shiftオペランドにYを指定している場合は排他が掛かりません。

注※7

RDエリアの追加，及び空き領域の再利用機能の変更をする場合，排他が掛かります。

注※8

カレントDBの変更，レプリカの定義や削除，又は更新可能なオンライン再編成実行時など，インナレプリカの構成に関係する変更をした場合，処理対象となるRDエリアがあるレプリカグループに対して排他が掛かります。pd_inner_replica_lock_shiftオペランドにYを指定している場合は常に排他が掛かります。

注※9

処理対象のRDエリアに対してアクセスする場合に排他が掛かります。

注※10

インナレプリカ機能を適用している場合に排他が掛かります。

注※11

HiRDB/パラレルサーバの場合，共用表をアクセスするときは，すべてのバックエンドサーバに対して排他が掛かります。

注※12

HiRDB/パラレルサーバの場合，共用表に対してインデクスを更新しないUPDATE文を実行するときは，すべてのバックエンドサーバに対して排他が掛かります。

注※13

HiRDB/パラレルサーバの場合，共用表及び共用インデクスに対して実行するときは，すべてのバックエンドサーバに対してEXCLUSIVE指定のLOCK文相当の排他が掛かります。HiRDB/シングルサーバの場合，共用表及び共用インデクスに対して実行するときは，EXCLUSIVE指定のLOCK文相当の排他が掛かります。

注※14

システム定義のpd_check_pendingオペランドにUSEを指定，又は指定を省略した場合，ディクショナリ表（資源種別：3005，種別名：DICT）に対して一時的にEXモードで排他を掛けます。データディクショナリ用RDエリア（資源種別：0001，種別名：RDAR）に対しては，トランザクションが終了するまでSUモードで排他を掛けます。

表3‒11　排他制御のモードの組み合わせの代表例（行排他の場合）（2/2）

SQL文

資源

上位←　　　→下位

インデクス

インデクス情報ファイル※４

順序数生成子

ページ

行

キー値

論理ファイル

検索

NOWAIT指定

−

−

−

−

−

−

PR

WITH SHARE指定

−

−

−

−

PR

PR

PR

WITH EXCLUSIVE指定※１

−

−

−

−

EX

PR

EX

FOR UPDATE句指定※１

−

−

−

−

EX

PR

EX

上記以外

−

−

−

−

PR

PR

PR

更新※１※６

NEXT VALUE式指定

−

EX

SU

−

EX

EX

EX

上記以外

−

EX

−

−

EX

EX

EX

追加※１

NEXT VALUE式指定

−

EX

SU

−

EX

EX

EX

上記以外

−

EX

−

−

EX

EX

EX

削除※１

−

−

−

−

EX※８

EX

EX

LOCK文

SHARE指定※５

−

−

−

−

−

−

−

EXCLUSIVE指定

非共用表

−

−

−

−

−

−

−

共用表※５

−

−

−

−

−

−

−

表削除※２※７

−

−

−

−

−

−

−

インデクス定義※７，表定義変更（主キーの追加）※７

−

−

−

−

−

−

−

インデクス削除※３※７，表定義変更（主キーの削除）※３※７

EX

−

−

−

−

−

−

全行削除※２※７※９

−

−

−

−

−

−

−

表定義変更（主キーの追加及び削除は除く）※７

−

−

−

−

−

−

−

順序数生成子定義

−

−

EX

−

−

−

−

順序数生成子削除

−

−

EX

−

−

−

−

（凡例）

−：排他を掛けません。

−以外：排他を掛けるモードです。

注※1

UAP実行時にデータベースの更新ログを取得しない場合，表に対してEXモードで排他を掛けてコミットまで保持します。行，及びキーに対する排他は掛けません。

なお，UAP実行時にデータベースの更新ログを取得しない運用については，マニュアル「HiRDB システム運用ガイド」を参照してください。

注※2

表，及びインデクスのすべての使用中セグメントに対してEXモードで排他を掛けてコミットまで保持します。

注※3

インデクスのすべての使用中セグメントに対してEXモードで排他を掛けてコミットまで保持します。

注※4

プラグインインデクスの遅延一括作成機能を使用して，プラグインインデクスに対して更新をしたときに掛ける排他です。この排他は，コミットまで保持されます。

注※5

HiRDB/パラレルサーバの場合，共用表をアクセスするときは，すべてのバックエンドサーバに対して排他が掛かります。

注※6

HiRDB/パラレルサーバの場合，共用表に対してインデクスを更新しないUPDATE文を実行するときは，すべてのバックエンドサーバに対して排他が掛かります。

注※7

HiRDB/パラレルサーバの場合，共用表及び共用インデクスに対して実行するときは，すべてのバックエンドサーバに対してEXCLUSIVE指定のLOCK文相当の排他が掛かります。

注※8

コミット，又はロールバックするまでEXモードで排他が掛かります。ただし，検索処理は削除行に対して排他を掛けないため，排他待ちになりません。

注※9

システム定義のpd_check_pendingオペランドにUSEを指定，又は指定を省略した場合，ディクショナリ表（資源種別：3005，種別名：DICT）に対して一時的にEXモードで排他を掛けます。データディクショナリ用RDエリア（資源種別：0001，種別名：RDAR）に対しては，トランザクションが終了するまでSUモードで排他を掛けます。

表3‒12　排他制御のモードの組み合わせの代表例（ページ排他の場合）（1/2）

SQL文

資源

上位←　　　→下位

インナレプリカ構成管理

※６

レプリカグループ構成管理※８

RDエリア

表

表（NOWAIT検索）

表用

インデクス用

順序数生成子用

最終HiRDBファイル※５

検索

NOWAIT指定

SR

SR

SR

−

−

−

SR

WITH SHARE指定

SR

SR

SR

−

−

SR

−

WITH EXCLUSIVE指定※１

SR

SR

SU

SR

−

−

SU

−

FOR UPDATE句指定※１

SR

SR

SU

SR

−

−

SU

−

上記以外

SR

SR

SR

−

−

SR

−

更新※１※１２

NEXT VALUE式指定

SR

SR

SU

SU

EX

SU

−

上記以外

SR

SR

SU

−

EX

SU

−

追加※１

NEXT VALUE式指定

SR

SR

SU

SU

EX

SU

−

上記以外

SR

SR

SU

−

EX

SU

−

削除※１

SR

SR

SU

−

−

SU

−

LOCK文

SHARE指定

※１１

SR

SR

SR

−

−

−

PR

−

EXCLUSIVE指定

非共用表

SR

SR

SU

−

−

−

EX

−

共用表※１１

SR

SR

EX

−

−

−

EX

−

表削除※２※１３

−

−

SU

−

−

EX

EX

インデクス定義※１３，表定義変更（主キーの追加）※１３

−

−

SU

−

−

EX

−

インデクス削除※３※１３，表定義変更（主キーの削除）※３※１３

−

−

SR

※１０

SU

−

−

EX※４

EX

全行削除※２※１３※１４

SR

SR

SU

−

−

EX

EX

表定義変更（主キーの追加及び削除は除く）※１３

SR※９

SR※９

SU※７

−

−

EX

EX

順序数生成子定義

−

−

−

SU

−

−

−

順序数生成子削除

−

−

−

SU

−

−

−

（凡例）

−：排他を掛けません。

−以外：排他を掛けるモードです。

注※1

UAP実行時にデータベースの更新ログを取得しない場合，表に対してEXモードで排他を掛けてコミットまで保持します。ページ，及びキーに対する排他は掛けません。

なお，UAP実行時にデータベースの更新ログを取得しない運用については，マニュアル「HiRDB システム運用ガイド」を参照してください。

注※2

表，及びインデクスのすべての使用中セグメントに対してEXモードで排他を掛けてコミットまで保持します。

注※3

インデクスのすべての使用中セグメントに対してEXモードで排他を掛けてコミットまで保持します。

注※4

プラグインインデクスの場合はEXモードで排他が掛かりますが，B-Treeインデクスでは排他は掛かりません。

注※5

RDエリアの自動増分が適用されている場合，自動増分処理の開始から終了まで，RDエリアを構成する最終HiRDBファイルに対して排他が掛かります。

注※6

インナレプリカ機能を使用している場合，処理対象RDエリアがあるサーバに対して排他が掛かります。ただし，pd_inner_replica_lock_shiftオペランドにYを指定している場合は排他が掛かりません。

注※7

RDエリアの追加，及び空き領域の再利用機能の変更をする場合，排他が掛かります。

注※8

カレントDBの変更，レプリカの定義や削除，又は更新可能なオンライン再編成実行時など，インナレプリカの構成に関係する変更をした場合，処理対象となるRDエリアがあるレプリカグループに対して排他が掛かります。pd_inner_replica_lock_shiftオペランドにYを指定している場合は常に排他が掛かります。

注※9

処理対象のRDエリアに対してアクセスする場合に排他が掛かります。

注※10

インナレプリカ機能を適用している場合に排他が掛かります。

注※11

HiRDB/パラレルサーバの場合，共用表をアクセスするときは，すべてのバックエンドサーバに対して排他が掛かります。

注※12

HiRDB/パラレルサーバの場合，共用表に対してインデクスを更新しないUPDATE文を実行するときは，すべてのバックエンドサーバに対して排他が掛かります。

注※13

HiRDB/パラレルサーバの場合，共用表及び共用インデクスに対して実行するときは，すべてのバックエンドサーバに対してEXCLUSIVE指定のLOCK文相当の排他が掛かります。HiRDB/シングルサーバの場合，共用表及び共用インデクスに対して実行するときは，EXCLUSIVE指定のLOCK文相当の排他が掛かります。

注※14

システム定義のpd_check_pendingオペランドにUSEを指定，又は指定を省略した場合，ディクショナリ表（資源種別：3005，種別名：DICT）に対して一時的にEXモードで排他を掛けます。データディクショナリ用RDエリア（資源種別：0001，種別名：RDAR）に対しては，トランザクションが終了するまでSUモードで排他を掛けます。

表3‒13　排他制御のモードの組み合わせの代表例（ページ排他の場合）（2/2）

SQL文

資源

上位←　　　→下位

インデクス

インデクス情報ファイル※４

順序数生成子

ページ

行

キー値

論理ファイル

検索

NOWAIT指定

−

−

−

−

−

−

PR

WITH SHARE指定

−

−

−

PR

−

PR

PR

WITH EXCLUSIVE指定※１

−

−

−

EX

−

PR

EX

FOR UPDATE句指定※１

−

−

−

EX

−

PR

EX

上記以外

−

−

−

PR

−

PR

PR

更新※１※６

NEXT VALUE式指定

−

EX

SU

EX

−

EX

EX

上記以外

−

EX

−

EX

−

EX

EX

追加※１

NEXT VALUE式指定

−

EX

SU

EX

−

EX

EX

上記以外

−

EX

−

EX

−

EX

EX

削除※１

−

−

−

EX

−

EX

EX

LOCK文

SHARE指定※５

−

−

−

−

−

−

−

EXCLUSIVE指定

非共用表

−

−

−

−

−

−

−

共用表※５

−

−

−

−

−

−

−

表削除※２※７

−

−

−

−

−

−

−

インデクス定義※７，表定義変更（主キーの追加）※７

−

−

−

−

−

−

−

インデクス削除※３※７，表定義変更（主キーの削除）※３※７

EX

−

−

−

−

−

−

全行削除※２※７※８

−

−

−

−

−

−

−

表定義変更（主キーの追加及び削除は除く）※７

−

−

−

−

−

−

−

順序数生成子定義

−

−

EX

−

−

−

−

順序数生成子削除

−

−

EX

−

−

−

−

（凡例）

−：排他を掛けません。

−以外：排他を掛けるモードです。

注※1

UAP実行時にデータベースの更新ログを取得しない場合，表に対してEXモードで排他を掛けてコミットまで保持します。ページ，及びキーに対する排他は掛けません。

なお，UAP実行時にデータベースの更新ログを取得しない運用については，マニュアル「HiRDB システム運用ガイド」を参照してください。

注※2

表，及びインデクスのすべての使用中セグメントに対してEXモードで排他を掛けてコミットまで保持します。

注※3

インデクスのすべての使用中セグメントに対してEXモードで排他を掛けてコミットまで保持します。

注※4

プラグインインデクスの遅延一括作成機能を使用して，プラグインインデクスに対して更新をしたときに掛ける排他です。この排他は，コミットまで保持されます。

注※5

HiRDB/パラレルサーバの場合，共用表をアクセスするときは，すべてのバックエンドサーバに対して排他が掛かります。

注※6

HiRDB/パラレルサーバの場合，共用表に対してインデクスを更新しないUPDATE文を実行するときは，すべてのバックエンドサーバに対して排他が掛かります。

注※7

HiRDB/パラレルサーバの場合，共用表及び共用インデクスに対して実行するときは，すべてのバックエンドサーバに対してEXCLUSIVE指定のLOCK文相当の排他が掛かります。

注※8

システム定義のpd_check_pendingオペランドにUSEを指定，又は指定を省略した場合，ディクショナリ表（資源種別：3005，種別名：DICT）に対して一時的にEXモードで排他を掛けます。データディクショナリ用RDエリア（資源種別：0001，種別名：RDAR）に対しては，トランザクションが終了するまでSUモードで排他を掛けます。

表3‒14　排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（1/2）

SQL文

資源

上位←　　　→下位

インナレプリカ構成管理※５

レプリカグループ構成管理※７

RDエリア

表

表（NOWAIT検索）

表用

インデクス用

順序数生成子用

最終HiRDBファイル※４

検索

NOWAIT指定

SR

SR

SR

−

−

−

SR

WITH SHARE指定

SR

SR

SR

−

−

SR

−

WITH EXCLUSIVE指定※１０

SR

SR

SU

SR

−

−

SU

SU

FOR UPDATE句指定※１０

SR

SR

SU

SR

−

−

SU

SU

上記以外

SR

SR

SR

−

−

SR

−

更新※１０※１２

NEXT VALUE式指定

SR

SR

SU

SU

EX

SU

−

上記以外

SR

SR

SU

−

EX

SU

−

追加※１０

NEXT VALUE式指定

SR

SR

SU

SU

EX

SU

−

上記以外

SR

SR

SU

−

EX

SU

−

削除※１０

SR

SR

SU

−

−

SU

−

LOCK文

SHARE指定

※１１

SR

SR

SR

−

−

−

PR

−

EXCLUSIVE指定

非共用表

SR

SR

−

−

−

−

EX

−

共用表※１１

SR

SR

−

EX

−

−

EX

−

表削除※１※１３

−

−

SU

−

−

EX

EX

インデクス定義※１３，表定義変更（主キーの追加）※１３

−

−

SU

−

−

EX

−

インデクス削除※２※１３，表定義変更（主キーの削除）※２※１３

−

−

SR

※９

−

−

−

EX※３

EX

全行削除※１※１３※１４

SR

SR

SU

−

−

EX

EX

表定義変更（主キーの追加及び削除は除く）※１３

SR※８

SR※８

SU※６

−

−

EX

EX

順序数生成子定義

−

−

−

SU

−

−

−

順序数生成子削除

−

−

−

SU

−

−

−

（凡例）

−：排他を掛けません。

−以外：排他を掛けるモードです。

注※1

表，及びインデクスのすべての使用中セグメントに対してEXモードで排他を掛けて，コミットまで保持します。

注※2

インデクスのすべての使用中セグメントに対してEXモードで排他を掛けて，コミットまで保持します。

注※3

プラグインインデクスの場合はEXモードで排他が掛かりますが，B-Treeインデクスでは排他は掛かりません。

注※4

RDエリアの自動増分が適用されている場合，自動増分処理の開始から終了まで，RDエリアを構成する最終HiRDBファイルに対して排他が掛かります。

注※5

インナレプリカ機能を使用している場合，処理対象RDエリアがあるサーバに対して排他が掛かります。ただし，pd_inner_replica_lock_shiftオペランドにYを指定している場合は排他が掛かりません。

注※6

RDエリアの追加，及び空き領域の再利用機能の変更をする場合，排他が掛かります。

注※7

カレントDBの変更，レプリカの定義や削除，又は更新可能なオンライン再編成実行時など，インナレプリカの構成に関係する変更をした場合，処理対象となるRDエリアがあるレプリカグループに対して排他が掛かります。pd_inner_replica_lock_shiftオペランドにYを指定している場合は常に排他が掛かります。

注※8

処理対象のRDエリアに対してアクセスする場合に排他が掛かります。

注※9

インナレプリカ機能を適用している場合に排他が掛かります。

注※10

UAP実行時にデータベースの更新ログを取得しない場合，表に対してEXモードで排他を掛けて，コミットまで保持します。行及びキー値には排他を掛けません。なお，UAP実行時にデータベースの更新ログを取得しない運用については，マニュアル「HiRDB システム運用ガイド」を参照してください。

注※11

HiRDB/パラレルサーバの場合，共用表をアクセスするときは，すべてのバックエンドサーバに対して排他が掛かります。

注※12

HiRDB/パラレルサーバの場合，共用表に対してインデクスを更新しないUPDATE文を実行するときは，すべてのバックエンドサーバに対して排他が掛かります。

注※13

HiRDB/パラレルサーバの場合，共用表及び共用インデクスに対して実行するときは，すべてのバックエンドサーバに対してEXCLUSIVE指定のLOCK文相当の排他が掛かります。HiRDB/シングルサーバの場合，共用表及び共用インデクスに対して実行するときは，EXCLUSIVE指定のLOCK文相当の排他が掛かります。

注※14

システム定義のpd_check_pendingオペランドにUSEを指定，又は指定を省略した場合，ディクショナリ表（資源種別：3005，種別名：DICT）に対して一時的にEXモードで排他を掛けます。データディクショナリ用RDエリア（資源種別：0001，種別名：RDAR）に対しては，トランザクションが終了するまでSUモードで排他を掛けます。

表3‒15　排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（2/2）

SQL文

資源

上位←　　　→下位

インデクス

インデクス情報ファイル※３

順序数生成子

ページ

行

キー値

論理ファイル

検索

NOWAIT指定

−

−

−

−

−

−

PR

WITH SHARE指定

−

−

−

−，PR

※４

PR，−

※４

−

PR

WITH EXCLUSIVE指定※６

−

−

−

−，EX

※４

EX，−

※４

−

EX

FOR UPDATE句指定※６

−

−

−

−，EX

※４

EX，−

※４

−

EX

上記以外

−

−

−

−，PR

※４

PR，−

※４

−

PR

更新※６※８

NEXT VALUE式指定

−

EX

SU

−，EX

※４※５

EX，−

※４※５

−

EX

上記以外

−

EX

−

−，EX

※４※５

EX，−

※４※５

−

EX

追加※６

NEXT VALUE式指定

−

EX

SU

−，EX

※４※５

EX，−

※４※５

−

EX

上記以外

−

EX

−

−，EX

※４※５

EX，−

※４※５

−

EX

削除※６

−

−

−

−，EX

※４※５

EX，−

※４※５

−

EX

LOCK文

SHARE指定※７

−

−

−

−

−

−

−

EXCLUSIVE指定

非共用表

−

−

−

−

−

−

−

共用表※７

−

−

−

−

−

−

−

表削除※１※９

−

−

−

−

−

−

−

インデクス定義※９，表定義変更（主キーの追加）※９

−

−

−

−

−

−

インデクス削除※２※９，表定義変更（主キーの削除）※２※９

EX

−

−

−

−

−

−

全行削除※１※９※１０

−

−

−

−

−

−

−

表定義変更（主キーの追加及び削除は除く）※９

−

−

−

−

−

−

−

順序数生成子定義

−

−

EX

−

−

−

−

順序数生成子削除

−

−

EX

−

−

−

−

（凡例）

−：排他を掛けません。

−以外：排他を掛けるモードです。

注※1

表，及びインデクスのすべての使用中セグメントに対してEXモードで排他を掛けて，コミットまで保持します。

注※2

インデクスのすべての使用中セグメントに対してEXモードで排他を掛けて，コミットまで保持します。

注※3

プラグインインデクスの遅延一括作成機能を使用して，プラグインインデクスに対して更新をした場合に掛ける排他です。コミットまで保持します。

注※4

行排他の場合，資源「行」に排他を掛けて，資源「ページ」には排他を掛けません。

ページ排他の場合，資源「行」に排他を掛けないで，資源「ページ」に排他を掛けます。

注※5

ユニークインデクスが定義されている場合，ページ排他の場合でも資源「行」に排他が掛かります。

注※6

UAP実行時にデータベースの更新ログを取得しない場合，表に対してEXモードで排他を掛けて，コミットまで保持します。行及びキー値には排他を掛けません。なお，UAP実行時にデータベースの更新ログを取得しない運用については，マニュアル「HiRDB システム運用ガイド」を参照してください。

注※7

HiRDB/パラレルサーバの場合，共用表をアクセスするときは，すべてのバックエンドサーバに対して排他が掛かります。

注※8

HiRDB/パラレルサーバの場合，共用表に対してインデクスを更新しないUPDATE文を実行するときは，すべてのバックエンドサーバに対して排他が掛かります。

注※9

HiRDB/パラレルサーバの場合，共用表及び共用インデクスに対して実行するときは，すべてのバックエンドサーバに対してEXCLUSIVE指定のLOCK文相当の排他が掛かります。

注※10

システム定義のpd_check_pendingオペランドにUSEを指定，又は指定を省略した場合，ディクショナリ表（資源種別：3005，種別名：DICT）に対して一時的にEXモードで排他を掛けます。データディクショナリ用RDエリア（資源種別：0001，種別名：RDAR）に対しては，トランザクションが終了するまでSUモードで排他を掛けます。

表3‒16　排他制御のモードの組み合わせの代表例（検査保留状態に設定する場合）（1/2）

SQL文及び

ユティリティ

資源※１

上位←　　　→下位

RDエリア

表

表（NOWAIT検索）

表用※2

インデクス用

LOB用

最終HiRDBファイル

全行削除※４

SU

−

−

−

EX

EX

表定義変更（分割格納条件変更）

SU

−

−

−

EX

EX

データベース作成ユティリティ（pdload）※3

SU

−

−

−

EX

EX

データベース再編成ユティリティ（pdrorg）※3

SU

−

−

−

EX

EX

データベース構成変更ユティリティ（pdmod）

SU

−

−

−

EX

EX

整合性チェックユティリティ（pdconstck）※3

SU

−

−

−

EX

EX

オンライン再編成の追い付き反映コマンド（pdorend）※3

SU

−

−

−

EX

EX

（凡例）

−：排他を掛けません。

−以外：排他を掛けるモードです。

注※1

参照制約，又は検査制約を定義した表に関する資源を示します。

注※2

検査保留状態に設定するRDエリアに対して排他を掛けます。

注※3

HiRDB/パラレルサーバの場合，共用表に対して実行するときは，すべてのバックエンドサーバに対してEXCLUSIVE指定のLOCK文相当の排他が掛かります。共用表のLOCK文実行時に掛かる排他制御モードについては，次に示す表のLOCK文のEXCLUSIVE指定の行を参照してください。

表「排他制御のモードの組み合わせの代表例（行排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（行排他の場合）（2/2）」

表「排他制御のモードの組み合わせの代表例（ページ排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（ページ排他の場合）（2/2）」

表「排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（2/2）」

注※4

システム定義のpd_check_pendingオペランドにUSEを指定，又は指定を省略した場合，ディクショナリ表（資源種別：3005，種別名：DICT）に対して一時的にEXモードで排他を掛けます。データディクショナリ用RDエリア（資源種別：0001，種別名：RDAR）に対しては，トランザクションが終了するまでSUモードで排他を掛けます。

表3‒17　排他制御のモードの組み合わせの代表例（検査保留状態に設定する場合）（2/2）

SQL文及び

ユティリティ

資源※１

上位←　　　→下位

インデクス

インデクス情報ファイル

ページ

行

キー値

論理ファイル

全行削除※３

−

−

−

−

−

−

表定義変更（分割格納条件変更）

−

−

−

−

−

−

データベース作成ユティリティ（pdload）※2

−

−

−

−

−

−

データベース再編成ユティリティ（pdrorg）※2

−

−

−

−

−

−

データベース構成変更ユティリティ（pdmod）

−

−

−

−

−

−

整合性チェックユティリティ（pdconstck）※2

−

−

−

−

−

−

オンライン再編成の追い付き反映コマンド（pdorend）※2

−

−

−

−

−

−

（凡例）

−：排他を掛けません。

注※1

参照制約，又は検査制約を定義した表に関する資源を示します。

注※2

HiRDB/パラレルサーバの場合，共用表に対して実行するときは，すべてのバックエンドサーバに対してEXCLUSIVE指定のLOCK文相当の排他が掛かります。共用表のLOCK文実行時に掛かる排他制御モードについては，次に示す表のLOCK文のEXCLUSIVE指定の行を参照してください。

表「排他制御のモードの組み合わせの代表例（行排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（行排他の場合）（2/2）」

表「排他制御のモードの組み合わせの代表例（ページ排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（ページ排他の場合）（2/2）」

表「排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（2/2）」

注※3

システム定義のpd_check_pendingオペランドにUSEを指定，又は指定を省略した場合，ディクショナリ表（資源種別：3005，種別名：DICT）に対して一時的にEXモードで排他を掛けます。データディクショナリ用RDエリア（資源種別：0001，種別名：RDAR）に対しては，トランザクションが終了するまでSUモードで排他を掛けます。

(4)　CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング

CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミングを次の表に示します。

表「CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング（インデクスが定義されていない場合（1/2））」

表「CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング（インデクスが定義されていない場合（2/2））」

表「CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング（インデクスが定義されている場合（1/2））」

表「CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング（インデクスが定義されている場合（2/2））」

表3‒18　CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング（インデクスが定義されていない場合（1/2））

SQL文

資源

上位←　　　→下位

インナレプリカ構成管理※

レプリカグループ構成管理※

RDエリア

表

表（NOWAIT検索）

表用

インデクス用

最終HiRDBファイル

検索

NOWAIT指定

×

×

×

−

−

−

×

WITH SHARE指定

×

×

×

−

−

×

−

WITH EXCLUSIVE指定

×

×

×

−

−

×

−

FOR UPDATE句指定

×

×

×

−

−

×

−

上記以外

×

×

×

−

−

×

−

更新

×

×

×

−

−

×

−

追加

×

×

×

−

−

×

−

削除

×

×

×

−

−

×

−

LOCK文

SHARE指定

×

×

×

−

−

×

−

EXCLUSIVE指定

×

×

×

−

−

×

−

表削除

−

−

×

−

−

×

×

インデクス

定義

−

−

×

−

−

×

×

削除

−

−

×

−

−

×

×

全行削除

×

×

×

−

−

×

×

表定義変更

−

−

−

−

−

×

×

（凡例）

−：排他が掛からない，又は該当しない（ページ排他は指定できない）ことを示します。

×：SQL実行時に排他が解除されないことを示します。

注※

インナレプリカ機能を使用している場合，インナレプリカ構成管理に排他が掛かります。更新可能なオンライン再編成を使用している場合，インナレプリカ構成管理又はレプリカグループ構成管理に排他が掛かります。

表3‒19　CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング（インデクスが定義されていない場合（2/2））

SQL文

資源

上位←　　　→下位

インデクス

インデクス情報ファイル

ページ

行

キー値

論理ファイル

検索

NOWAIT指定

−

−

−

−

−

−

WITH SHARE指定

−

−

−

×

−

−

WITH EXCLUSIVE指定

−

−

−

×

−

−

FOR UPDATE句指定

−

−

−

×

−

−

上記以外

−

−

−

×

−

−

更新

−

−

−

○

−

−

追加

−

−

−

○

−

−

削除

−

−

−

○

−

−

LOCK文

SHARE指定

−

−

−

−

−

−

EXCLUSIVE指定

−

−

−

−

−

−

表削除

−

−

−

−

−

−

インデクス

定義

−

−

−

−

−

−

削除

−

−

−

−

−

−

全行削除

−

−

−

−

−

−

表定義変更

−

−

−

−

−

−

（凡例）

−：排他が掛からない，又は該当しない（ページ排他は指定できない）ことを示します。

○：SQL実行時に排他が解除されることを示します。

×：SQL実行時に排他が解除されないことを示します。

表3‒20　CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング（インデクスが定義されている場合（1/2））

SQL文

資源

上位←　　　→下位

インナレプリカ構成管理※

レプリカグループ構成管理※

RDエリア

表

表（NOWAIT検索）

表用

インデクス用

最終HiRDBファイル

検索

NOWAIT指定

×

×

×

×

−

−

×

WITH SHARE指定

×

×

×

×

−

×

−

WITH EXCLUSIVE指定

×

×

×

×

−

×

−

FOR UPDATE句指定

×

×

×

×

−

×

−

上記以外

×

×

×

×

−

×

−

更新

×

×

×

×

−

×

−

追加

×

×

×

×

−

×

−

削除

×

×

×

×

−

×

−

LOCK文

SHARE指定

×

×

×

×

−

×

−

EXCLUSIVE指定

×

×

×

×

−

×

−

表削除

−

−

×

×

−

×

×

インデクス

定義

−

−

×

×

−

×

×

削除

−

−

×

×

−

×

×

全行削除

×

×

×

×

−

×

×

表定義変更

−

−

−

×

−

×

×

（凡例）

−：排他が掛からない，又は該当しない（ページ排他は指定できない）ことを示します。

×：SQL実行時に排他が解除されないことを示します。

注※

インナレプリカ機能を使用している場合，インナレプリカ構成管理に排他が掛かります。更新可能なオンライン再編成を使用している場合，インナレプリカ構成管理又はレプリカグループ構成管理に排他が掛かります。

表3‒21　CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表の排他解除タイミング（インデクスが定義されている場合（2/2））

SQL文

資源

上位←　　　→下位

インデクス

インデクス情報ファイル

ページ

行

キー値

論理ファイル

検索

NOWAIT指定

−

−

−

−

−

−

WITH SHARE指定

−

−

−

×

−※１

−

WITH EXCLUSIVE指定

−

−

−

×

−※１

−

FOR UPDATE句指定

−

−

−

×

−※１

−

上記以外

−

−

−

×

−※１

−

更新

−

−

−

○

−※２

−

追加

−

−

−

○※４

−※３

−

削除

−

−

−

○※４

−※３

−

LOCK文

SHARE指定

−

−

−

−

−

−

EXCLUSIVE指定

−

−

−

−

−

−

表削除

−

−

−

−

−

−

インデクス

定義

−

−

−

−

−

−

削除

−

−

−

−

−

−

全行削除

−

−

−

−

−

−

表定義変更

−

−

−

−

−

−

（凡例）

−：排他が掛からない，又は該当しない（インデクス定義及びページ排他は指定できない）ことを示します。

○：SQL実行時に排他が解除されることを示します。

×：SQL実行時に排他が解除されないことを示します。

注※1

システム定義のpd_indexlock_modeオペランドがKEY（インデクス排他あり）の場合，処理対象のキー値を別のキー値に変更したときに排他が解除されます。

注※2

ユニークキーインデクスの場合，○となります。

注※3

システム定義のpd_indexlock_modeオペランドがKEY（インデクス排他あり）の場合，×となります。

注※4

システム定義のpd_idx_without_rollbackオペランドがNの場合，×となります。

3.4.3　排他の期間

(1)　排他の開始と解放

1トランザクションがある資源に対して排他を掛けると，一般にコミット，又はロールバックをするまで資源を占有します。例えば，ある排他資源（行，又はページ）に対して更新処理を掛けるとEXモードになるため，更新中の行に対するほかのトランザクション処理は，コミット，又はロールバックをするまですべて待ち状態になります。ただし，LOCK文でUNTIL DISCONNECT指定がある場合，その資源の排他は，DISCONNECT時，又はそのテーブル削除後のコミットまで保持されます。

なお，通常，行の削除処理をするとトランザクション完了まで排他は保持していますが，データベースから行がなくなるため，ほかのトランザクションの検索処理は削除中の行で排他待ちになりません。排他待ちをさせたい場合は，「コミットしていない削除データの排他制御」を参照してください。

(2)　排他時の参照

ある資源に排他制御が掛かると，通常はコミット，又はロールバックをするまで資源は解放されません。しかし，WITHOUT LOCKを指定したSQL文の検索では，参照済みの排他資源（行又はページ）の排他は解除されます。また，論理ファイルを参照する場合を除き，WITHOUT LOCK NOWAITを指定したSQL文の検索では，ほかのトランザクションが表や行にEXモードで排他を掛けているときでも，排他なしと同じ状態として参照できます。ただし，pdload及びpdrorgでアクセス中の表は参照できません。pdload及びpdrorgについては，マニュアル「HiRDB コマンドリファレンス」を参照してください。

なお，WITHOUT LOCK NOWAITを指定したSQL文の検索では，更新中でも参照できるため，参照時の結果と更新後の結果が必ずしも一致しないので注意が必要です。

3.4.4　デッドロックと回避策

(1)　デッドロックの発生要因

二つのトランザクションが二つ以上の資源の確保をめぐって互いに相手を待つ状態となり，そこから先へ処理が進まなくなることをデッドロックといいます。

デッドロックは，一般に参照のトランザクションと更新（削除を含む）のトランザクションとの間で多く発生します。したがって，UAPのアクセス順序を変えることで，デッドロックの発生頻度を低減させることができます。

デッドロックの例として，二つのトランザクションが同一キーを持った行に対して同時に実行した場合に排他の掛かる順序とデッドロックの関係を次の図に示します。

図3‒12　デッドロックの例

また，ページ排他の場合には，UAPのアクセス手順を統一しても，デッドロックが回避できないことがあります。

ページ排他でのデッドロックの例を次の図に示します。

図3‒13　ページ排他でのデッドロックの例

図「ページ排他でのデッドロックの例」で示した例の場合，クラスタキーを指定していないと，ページへの行の格納順序を一定にできないため，ページ単位にUAPのアクセス順序を統一できません。このような場合には，ALTER TABLEでページ排他を行排他に変更してデッドロックを回避してください。

(2)　サーバ間で発生するデッドロック

デッドロックは，一つのサーバ内で発生する以外にサーバとサーバの間でも発生します。HiRDB/パラレルサーバでは，サーバ間で発生するデッドロックのことをグローバルデッドロックといいます。

グローバルデッドロックは，一般に図「ページ排他でのデッドロックの例」で示したような一つのサーバ内で発生するデッドロックと同様に，参照のトランザクションと更新のトランザクションとの間で発生します。したがって，UAPのアクセス順序を変えることで，デッドロックの発生頻度を低減させることができます。

グローバルデッドロックの例として，二つのトランザクションが別々のサーバに格納された表に対して，検索と更新の順番を逆順で実行した場合に排他の掛かる順序とデッドロックの関係を次の図に示します。

図3‒14　グローバルデッドロックの例

図「グローバルデッドロックの例」で示した例の場合，各バックエンドサーバでは，UAP1とUAP2との間の排他制御になりますが，フロントエンドサーバ側からは，お互いに排他待ちとなっているのでデッドロックになります。

(3)　デッドロックの検出

各ユニット内でのデッドロックは，それぞれのユニット内の排他制御機構が検出します。HiRDBでは，各ユニット内で同一サーバが排他したリソースについては，そのサーバ内の複数トランザクション間のデッドロックの検出を行います。しかし，同一ユニット内であっても，別サーバにわたるリソース間でのデッドロックについては，排他制御のタイムアウトによってHiRDBが検出する以外では，検出できません。複数のユニットにわたるリソース間のデッドロックについては，ユニット内の別サーバ間のデッドロックと同じであり，タイムアウトによって検出します。

(a)　デッドロックの検出方法とタイミング

排他制御処理を分散させているかどうかによって，デッドロックが発生したときの検出方法とタイミングが異なります。排他制御処理の分散については，マニュアル「HiRDB システム運用ガイド」を参照してください。デッドロックの検出方法とタイミングを次の表に示します。

表3‒22　デッドロックの検出方法とタイミング

pd_lck_deadlock_checkの値

pd_lck_pool_partitionの値※

デッドロックの検出方法

デッドロックの検出タイミング

Y

2以上

デッドロック監視プロセスによって，定期的に検出を実行します（インターバル監視方式）。

pd_lck_deadlock_check_intervalオペランドに指定した間隔で検出します。この場合，デッドロック発生から検出までに時間差が発生します。

1

サーバプロセスによって，排他待ちになった時点で自己検出します（即時検知方式）。

デッドロック発生後，即時に検出します。

N

−

デッドロックを検出しません。この場合，pd_lck_wait_timeoutオペランドに指定した時間が経過するまで排他待ちを行った後，UAPに対して排他タイムアウトとしてエラーを発行します。

−

（凡例）　−：該当しません。

注※

フロントエンドサーバの場合はpd_fes_lck_pool_partitionオペランドの値。

(b)　デッドロック検出の無効化

pd_lck_deadlock_checkオペランドにNを指定することで，排他制御でのデッドロック検出を無効にできます。

デッドロックの検出方法がインターバル監視方式の場合は，排他制御用プールパーティション数を増加するとデッドロックの検出タイミングごとに排他制御の性能が劣化するおそれがあります。そのため，デッドロックが発生しない業務システムでは，デッドロック検出をしないことでSQLの実行性能が改善することがあります。この場合は，デッドロックが発生しない業務システムを構築した上で，デッドロックの検出を無効にすることを推奨します。

反対に，デッドロックが発生する業務システムでは，デッドロック検出を無効にしないでください。デッドロック検出を無効にすると，デッドロックが発生したときにpd_lck_wait_timeoutオペランドに指定した時間が経過してタイムアウトするまでSQLがエラー終了しません。また，HiRDBがデッドロック情報を出力しなくなるため，デッドロックが発生した要因が分からなくなるおそれがあります。

(4)　デッドロックの対策

デッドロックの発生原因は，大きく分けると次の二つになります。

UAPのアクセス順序（排他を掛ける順序）に依存する。

検索と更新との間の逆順処理をする。

デッドロックは，次の図で示した以外の種類もあります。

図「デッドロックの例」

図「ページ排他でのデッドロックの例」

図「グローバルデッドロックの例」

デッドロックの主な種類とその対策を次の表に示します。

表3‒23　デッドロックが発生する処理と対策

デッドロック資源

発生原因

対　　　　　策

行と行

UAPのアクセス順序※1

UAPのアクセス順序を統一する。

LOCK TABLEによって表に排他を掛ける。

デッドロック発生後にUAPを再実行する。

行とインデクスキー

検索と更新との間の逆順処理※2

検索行を更新しない。

列を同じ値で更新しない。

インデクスの定義を必要最小限にする。

LOCK TABLEによって表に排他を掛ける。

NOWAIT検索をする。

デッドロック発生後にUAPを再実行する。

インデクスキー値無排他を適用する。

インデクスキーと

インデクスキー

UAPのアクセス順序

UAPのアクセス順序を統一する。

インデクスの定義を必要最小限にする。

LOCK TABLEによって表に排他を掛ける。

NOWAIT検索をする。

デッドロック発生後にUAPを再実行する。

インデクスキー値無排他を適用する。

ページとページ

ページへの行格納順序の不定※3

ALTER TABLEによってページ排他を行排他に変更する。

注※1　図「グローバルデッドロックの例」のような場合

注※2　図「デッドロックの例」のような場合

注※3　図「ページ排他でのデッドロックの例」のような場合

(5)　デッドロックプライオリティ値による排他制御

デッドロックが発生した場合，どちらのトランザクションをエラーとするかをデッドロックプライオリティ値で制御できます。この制御は，システム定義のpd_deadlock_priority_useオペランドで，デッドロック優先順位を制御する指定をし，クライアント環境定義のPDDLKPRIOオペランドでデッドロックプライオリティ値を指定した場合に，その指定値によってHiRDBがデッドロック優先順位を決定します。

指定した値が小さい方が処理の優先度が高く，値が大きくなるほどエラーになってロールバックする可能性が高くなります。また，デッドロックプライオリティ値が同じ場合，後発の方がエラーとなってロールバックさせられます。

PDDLKPRIOオペランドの指定を省略した場合，UAP，ユティリティ，及び運用コマンドの種別によって，自動的にHiRDBがデッドロックとなったトランザクションのどれかをエラーにしてロールバックさせます。PDDLKPRIOオペランドの指定値を省略した場合に仮定される値については，「クライアント環境定義の設定内容」を参照してください。

デッドロックによって暗黙的にロールバックされたUAPは，ROLLBACK文，又はDISCONNECT文でトランザクションを終了させないと，SQL文を実行してもエラーになります。また，OLTP環境でX/Openに従ったアプリケーションプログラムをクライアントとした場合に，実行したアプリケーションプログラムがデッドロックになったときもトランザクションの終了が必要です。

なお，デッドロック発生時にデッドロック情報を出力したい場合，システム定義のpd_lck_deadlock_infoオペランドにYを指定する必要があります。pd_lck_deadlock_infoオペランドについては，マニュアル「HiRDB システム定義」を参照してください。

(6)　デッドロックの回避策

デッドロックは排他の範囲を広くすることで発生頻度を低減できますが，同時実行性は低下します。したがって，排他の範囲を狭くすると同時実行性は向上しますが，不正参照，及び不正更新を引き起こしたり，デッドロックの発生率が増加します。同時実行性を保ちながら，デッドロックを回避するため，次に示す対策を考慮する必要があります。

頻繁に更新する列にはインデクスを付けないようにする。

検索条件列を更新しないようにする。

カーソル定義のFOR UPDATE OF句は，更新する列だけに指定する。

列（特にユニークインデクスの列）を同じ値で更新しないようにする。必ず更新する列だけをSET句で指定する。

カーソルを使って検索した行を更新，又は削除するときは，カーソル指定にFOR UPDATE句を指定する。

検索後に更新を予定している列がある場合，WITH EXCLUSIVE LOCKを指定する。

複数列に条件を付ける場合，複数列インデクスの適用を検討する（単一列インデクスでの検索範囲を広くしないため）。

WITHOUT LOCK NOWAITを使用した検索を検討する。

二つ以上の表をアクセスする場合，アクセス順序を統一する。また，A，Bの順でアクセスした場合，再度Aをアクセスしないようにする（Aの値は保存しておきます）。

LOCK TABLEを指定する。

INSERT文で行を挿入した直後に更新する場合，同一トランザクション内で処理をするようにする。

複数のUAPが，同一表に対して同時にANDの複数インデクス利用で更新する場合，システム定義のpd_work_table_optionオペランドに1を指定する。ANDの複数インデクス利用については，「クライアント環境定義の設定内容」のPDSQLOPTLVLを，pd_work_table_optionについては，マニュアル「HiRDB システム定義」を参照してください。

インデクスキー値無排他を適用する。

スナップショット方式を適用した場合，意図しないデッドロックが発生するおそれがあるため，デッドロック発生時にリトライできるようなUAPを作成する。

以上のように，排他制御の範囲を考慮する以外にデッドロックを回避するためには，SQL文の種類とインデクスの種別による排他制御の順序について考慮する必要があります。詳細については，「SQL文の種類とインデクスの種別による排他制御の順序」を参照してください。

(7)　プラグインが使用する論理ファイルのデッドロック回避策

プラグインが論理ファイルを使用する場合，更新操作の場合はEXモード，検索操作の場合はPRモードで，論理ファイル単位に排他を掛けます。

論理ファイルの排他は，データの値に関係なく操作発生を契機に実行されます。したがって，論理ファイルを使用するプラグイン定義のある列をアクセスする場合に，更新トランザクションを実行すると，該当する列を操作するほかのすべてのトランザクションとの間に，論理ファイルの競合が発生します。このため，論理ファイルを使用するプラグイン定義のある列を更新するプログラムは，できるだけ単独で実行するようにしてください。

デッドロック回避策1

LOCK TABLEを指定します。

デッドロック回避策2

論理ファイルがデッドロック資源となった場合，論理ファイルがデータ型プラグインのものか，又はインデクス型プラグインのものかを確認して，次に示す表を参照してください。

表「排他制御のモードの組み合わせの代表例（行排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（行排他の場合）（2/2）」

表「排他制御のモードの組み合わせの代表例（ページ排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（ページ排他の場合）（2/2）」

表「排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（1/2）」

表「排他制御のモードの組み合わせの代表例（インデクスキー値無排他の場合）（2/2）」

なお，デッドロックが発生した場合のデッドロック情報の出力内容については，マニュアル「HiRDB システム運用ガイド」を参照してください。

排他情報：

種別000e　−＞論理ファイル

排他情報の先頭4バイト　−＞RDエリア番号

RDエリア番号からRDエリア名を調査します。

RDエリアが抽象データ型のLOB属性格納用RDエリアの場合：

「行」として扱います。

RDエリアがプラグインインデクスのRDエリアの場合：

「インデクスキー」として扱います。

注意

・プラグインインデクス検索の場合，NOWAIT指定であっても論理ファイルはPRモードで排他されます。

・データ操作時，LOCK TABLEの排他を掛けていても，論理ファイルはEX又はPRモードで排他されます。

・論理ファイルを使用するプラグイン定義のある列を複数定義した場合は，「デッドロック回避策2」では回避できません。「デッドロック回避策1」で回避してください。

3.4.5　無排他条件判定

無排他条件判定は，検索処理時には排他を掛けないで，探索条件を満たした行，又はキー値に対してだけ排他を掛けます。無排他条件判定を使用すると通常の検索と比べて，探索条件を満たさない行，又はキー値に対して排他を掛けないため，検索時間が短縮できます。

また，更新処理と同時に検索処理を実行する場合，相手の更新処理が条件を満たさない行の更新，又は追加であれば，排他待ちが発生しません。このため，デッドロックや排他タイムアウトの発生が低減できます。

通常の検索処理と無排他条件判定の処理の流れを次の図に示します。

図3‒15　通常の検索処理と無排他条件判定の処理の流れ

無排他条件判定をするには，クライアント環境定義のPDLOCKSKIPオペランドでYESを指定します。

無排他条件判定は次に示す条件を満たす場合に効果が得られます。

条件判定をする件数に対して，条件を満たす件数が少ない検索

インデクスのキーによって，探索範囲をある程度絞り込んだ状態から，条件を切り出して検索する場合に，条件を満たすものだけに排他を掛けます。このため，探索範囲の件数に比べて，条件を満たす件数が少ないと，通常の検索処理に比べて（条件を満たす件数／探索範囲の件数）の割合で排他処理を削減できます。

インデクスを使わない検索

通常の検索処理で，インデクスを使わない検索は，一時的にすべての行に対して排他を掛けます。

無排他条件判定を使用してインデクスを使わない検索をすると，探索条件を満たしたものだけに排他を掛けるため（条件を満たす件数／検索対象表の総行数）の割合で排他処理を削減できます。

条件を満たさない更新処理と同時に実行する検索

ほかの更新トランザクションによって先に検索範囲が更新されていても，更新結果が条件を満たしていなければ，排他待ちにはなりません。

また，次に示す条件の場合に無排他条件判定を使用しても適用されません。

WITHOUT LOCK NOWAITのような排他を掛けない検索（システム定義pd_isolation_levelオペランドに0を指定，クライアント環境定義PDISLLVLに0を指定，排他オプションを省略した検索）

インデクスキー値無排他を適用したときのインデクスを利用する検索

次に示す探索条件で，かつ，インデクスを使わない探索条件

システム定義スカラ関数を指定している探索条件

ユーザ定義関数を指定している探索条件

定義長256バイト以上のVARCHAR型の列を指定している探索条件

定義長256バイト以上のMVARCHAR型の列を指定している探索条件

定義長128文字以上のNVARCHAR型の列を指定している探索条件

定義長256バイト以上のBINARY型の列を含む探索条件

BLOB型の列を指定している探索条件

繰返し列を指定している探索条件

コンポネント指定を使用している探索条件

外への参照を含む副問合せを指定している探索条件

限定述語又はIN述語を指定している探索条件

ネストループ結合の内表として評価される探索条件を除く，2表以上にわたる探索条件

検索方式がANDの複数インデクス利用（AND PLURAL INDEXES SCAN）のインデクスで評価されない探索条件

検索方式がORの複数インデクス利用（OR PLURAL INDEXES SCAN）のインデクスで評価されない探索条件

なお，無排他条件判定は，排他を掛けないで条件判定をするため，コミットしていないデータを検索して条件判定するおそれがあります。例えば，更新トランザクションと同時に条件判定するとき，条件判定での検索結果と，更新トランザクションの処理結果との間に差異が発生することがあるので注意が必要です。

3.4.6　インデクスキー値無排他

インデクスキー値無排他とは，インデクスキー値で排他制御をしないことをいいます。この場合，表のデータだけで排他制御をします。

インデクスキー値無排他を適用した場合，インデクスを利用した検索処理ではインデクスキー値に対して排他は掛けません。また，表に対する更新処理（行挿入，行削除，及び列値更新）の場合にも，更新対象列に定義されているインデクスのインデクスキー値に対して排他は掛けません。

(1)　適用基準

インデクスキー値無排他は基本的に適用することをお勧めします。

ただし，ユニークインデクスの一意制制約保証処理の動作，残存エントリ，及び表データ更新時に出力されるシステムログ量を考慮した上で決めてください。ユニークインデクスの一意制制約保証処理の動作，残存エントリについては，「ユニークインデクスの残存エントリ」を参照してください。また，表データ更新時に出力されるシステムログ量については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

(2)　インデクスキー値無排他の指定方法

インデクスキー値無排他を適用する場合，システム定義のpd_indexlock_modeオペランドにNONEを指定します。pd_indexlock_modeオペランドについては，マニュアル「HiRDB システム定義」を参照してください。

なお，システム定義のpd_inner_replica_controlオペランドの指定値が1より大きい場合，システム定義のpd_indexlock_modeオペランドの指定に関係なく，pd_indexlock_modeオペランドにはNONEが仮定されます。

(3)　デッドロック回避の例

図「デッドロックの例」のようにデッドロックが発生した場合，インデクスキー値無排他を適用するとデッドロックを回避できます。インデクスキー値無排他によるデッドロック回避の例を次の図に示します。

図3‒16　インデクスキー値無排他によるデッドロック回避の例

(4)　注意事項

(a)　ユニークインデクスの一意性制約保証処理の動作

インデクスキー値無排他を適用している場合，一意性制約定義が指定されている表では，行追加更新時での一意性制約保証処理の動作がインデクスキー値方式（インデクスキー値無排他ではない方式）とは異なります。インデクスキー値無排他を適用する場合は，この動作の違いを考慮しておく必要があります。

一意性制約の保証処理とは，行データの挿入，又は列値更新のときに，インデクス（ユニークインデクス）を使用して追加しようとしているキーを持つデータが既に表にあるかをチェックするとともに，排他制御で追加キーの一意性を保証する処理のことをいいます。一意性制約の保障ができたら直ちにユニークインデクスのインデクスキーエントリを挿入し，その後に行データの挿入，又は列値更新が行われます。

一意性制約の保証処理では，同一キーを持つインデクスキーエントリが見つかった場合，すぐにユニークエラーとなります。そのインデクスキーを操作している相手トランザクションが未決着状態で，ロールバックする可能性があったとしても，排他制御でのチェックをしないですぐにユニークエラーとなります。ただし，相手トランザクションが，そのインデクスキーエントリに対する行データの挿入を終えていなかったときは，相手トランザクションが決着するまで排他待ちします。また，この排他待ちが関係しデッドロックが発生するおそれもあります。デッドロックになるのは，自トランザクションが排他を掛けている排他資源で，相手トランザクションも排他待ちした場合です。

すぐにユニークエラーにしないで，インデクスキーを操作している相手トランザクションの決着を待ってから挿入，又は更新処理を試みるようにしたい場合には，pd_lock_uncommited_delete_dataオペランドにWAITを指定して，コミットしていない削除データに対して排他を行ってください。コミットしていない削除データの排他制御については，「コミットしていない削除データの排他制御」を参照してください。

(b)　ユニークインデクスの残存エントリ

インデクスキー値無排他を適用する場合，ユニークインデクスで排他待ち，及びデッドロックが発生することがあります。

インデクスキー値無排他でのユニークインデクスでは，一意性制約保証のためにDELETE文，又はUPDATE文実行前のインデクスキーをインデクス上から削除しないで残すようにしています。この残っているインデクスキーのことを残存エントリといいます。

この残存エントリは，トランザクション決着後の適当なタイミングで削除されますが，残存エントリと同一のキーに対するINSERT文，又はUPDATE文を実行した場合，タイミングによっては予想外に待たされたり，デッドロックが発生したりすることがあります。また，データディクショナリ表にはユニークインデクスが定義されています。定義系SQL文やpdmodを繰り返し実行した場合，タイミングによっては予想外に待たされたり，デッドロックが発生したりすることがあります。

残存エントリによる排他待ちかどうかを判断したい場合，システム共通定義 pd_unique_indexlock_infoオペランドにYを指定してください。残存エントリによる排他待ちのおそれがある場合だけ，排他待ち解除時にKFPH25005-Iメッセージを出力します。タイムアウト情報やデッドロック情報と，KFPH25005-Iメッセージの情報を比較し，次の内容がすべて合致する排他資源が，残存エントリによって排他待ちとなっていたおそれがあります。

サーバ名

プロセスID

資源種別

資源情報

残存エントリによる排他待ちかどうかを判断する方法は，マニュアル「HiRDB メッセージ」のKFPH25005-Iのメッセージ内容を参照してください。

残存エントリによる排他待ちの回避策と回避策の選び方を次に示します。

●回避策1

一意性制約の列を更新しないようにUAPを作成する

回避策1によって，UPDATE文で一意性制約の列を更新する代わりにDELETE文とINSERT文で行の削除と追加をする場合でも，INSERT処理のタイミングによっては残存エントリによる排他待ちが発生するおそれがあります。そのため，回避策1とともに，回避策2の適用も検討してください。

●回避策2

システム共通定義のpd_dbreuse_remaining_entriesオペランドにALL以外を指定する

残存エントリによる排他待ちが少なくなります。詳細は，「残存エントリによる排他待ちの回避（行識別子の再利用抑止）」を参照してください。

なお，pd_dbreuse_remaining_entriesオペランドの指定値によって，排他待ちの軽減対象が異なります。詳細は，マニュアル「HiRDB システム定義」の「排他制御に関するオペランド」を参照してください。

●回避策3

システム共通定義のpd_unique_check_modeオペランドに1を指定してユニークチェック用排他による一意性制約保証を使用する

詳細は，「残存エントリによる排他待ちの回避（ユニークチェック用排他使用）」を参照してください。

表3‒24　回避策の選び方

回避策

適用可能なケース

デメリット

回避策1

一意製制約を指定した列を更新しないようにAPを作成・改修できる場合

業務APの設計が限定される。

回避策2

一意製制約を指定した列を更新する回数が少ない場合

更新する回数が多く，1ページで使用スロット数が255を超える場合，残存エントリによる排他待ちを回避できない。

回避策3

OSのメモリに余裕があり，更新により増加する排他資源を取得できる場合

HiRDBが使用する排他資源用プールサイズが増加する。

(c)　インデクスキー値無排他を適用しても回避できないデッドロック

UAPのアクセス順序によって，インデクスキーとインデクスキーとでデッドロックが発生することがあります。これを回避するためには，(b)と同様に一意性制約の列を更新しないようにUAPを作成しなければなりません。

3.4.7　コミットしていない削除データの排他制御

通常，インデクスキーを削除すると，削除トランザクションがコミットする前に，そのインデクスキーはデータベースから削除されます。そのため，削除トランザクションがロールバックした場合，インデクスキーの内容は回復しますが，同時実行中のほかの検索トランザクションからは検索対象外となります。検索対象外となる削除インデクスキーの例を次の図に示します。

図3‒17　検索対象外となる削除インデクスキー

［説明］

削除トランザクションがコミットする前に，キーAはデータベースから削除されます。そのため，検索トランザクション1はキーAを読み飛ばし，キーBを検索に使用します。その後ロールバックが発生しなかった場合は，検索トランザクション2は検索トランザクション1と同様に，検索にキーBを使用します。

一方，ロールバックが発生してキーAの内容が回復した場合，検索トランザクション2は，検索にキーAを使用します。この場合，ロールバックの発生によって検索トランザクション1と検索トランザクション2は異なったインデクスキーを使用することになり，検索結果も異なってしまいます。

また，行削除の場合も同様です。コミットするまでデータベースから行データは削除されませんが，その間に同時実行中のほかの検索トランザクションからは検索対象外となります。

このように，コミットしていない削除データが同時実行中のほかの検索トランザクションから検索対象外となる状態は，削除トランザクションがコミットするまで排他を掛けることで回避できます。

(1)　適用基準

次のような業務の場合，コミットしていない削除データに排他を掛けることをお勧めします。

先行するトランザクションの処理結果によって，後続のトランザクションの処理が変わる業務

ロールバック発生時に再実行を行わない業務

(2)　指定方法

pd_lock_uncommited_delete_dataオペランドにWAITを指定することで，コミットしていない削除データに排他を掛けます。pd_lock_uncommited_delete_dataオペランドについては，マニュアル「HiRDB システム定義」を参照してください。

(3)　コミットしていない削除データに排他を掛けた場合の効果

コミットしていない削除データに排他を掛けた場合の効果を次に示します。

検索中にコミットする前の削除データを検知した場合，検索トランザクションは削除トランザクションのコミット，又はロールバックの決着を待ってから検索処理を行います。これによって，削除トランザクションでロールバックが発生した場合でも，検索トランザクションからの検索読み飛ばしを防止します。

インデクスキー値排他と同じ方式で一意性制約が保証されます。これによって，削除トランザクションのロールバック発生時のユニークエラーの検知を防止できます。

(4)　コミットしていない削除データに排他を掛けた場合の検索トランザクションの動作

コミットしていない削除データに排他を掛けた場合と掛けなかった場合の検索トランザクションの動作について，SQLの実行条件ごとに，次の表に示します。

表3‒25　SQLの実行条件ごとの検索トランザクションの動作

項番

SQLの実行条件

UPDATE文又はDELETE文のトランザクションでROLLBACKが発生した場合の検索トランザクションの動作

同時実行するSQL

UPDATE文又はDELETE文の内容

SELECT文の内容

削除データに排他を掛けなかった場合

削除データに排他を掛けた場合

1

DELETE文とSELECT文の同時実行

行を削除するDELETE文

DELETE文で削除するキーが探索条件の範囲に含まれる検索，又は削除した行を参照する検索

DELETE文を実行したトランザクションの決着を待たないで削除した行やキーを読み飛ばす

DELETE文を実行したトランザクションの決着を待って，削除した行やキーを参照する

2

インデクスを定義している表に対し，UPDATE文とSELECT文を同時実行

インデクスの更新を伴うUPDATE文

UPDATE文で更新するインデクスのキーが探索条件の範囲に含まれる検索

UPDATE文を実行したトランザクションの決着を待たないで更新前のキーを読み飛ばす

UPDATE文を実行したトランザクションの決着を待って，更新前のキーを参照する

3

複数列インデクスを定義している表に対しUPDATE文とSELECT文を同時実行

複数列インデクスの一部の列を探索条件に指定し，ほかのインデクス構成列を更新するUPDATE文

UPDATE文で更新する複数列インデクスのキーが，探索条件の範囲に含まれる検索

UPDATE文を実行したトランザクションの決着を待たないで更新前のキーを読み飛ばす

UPDATE文を実行したトランザクションの決着を待って，更新前のキーを参照する

＜項番1の例＞

項番1の例として，列COL1にインデクスを定義した表TBLのCOL1=1のデータに対し，DELETE文とSELECT文を同時実行した場合を次に示します。

＜項番2の例＞

項番2の例として，列COL1にインデクスを定義した表TBLのCOL1=1のデータに対し，UPDATE文とSELECT文を同時実行した場合を次に示します。

＜項番3の例＞

項番3の例として，列COL1とCOL2に複数列インデクスを定義している表TBLのCOL1=1，COL2=1のデータに対し，UPDATE文とSELECT文を同時実行した場合を次に示します。

(5)　注意事項

(a)　インデクスの残存エントリ

コミットしていない削除データに排他を掛けた場合，削除，又は更新前のインデクスキーエントリをインデクス内に残すため，ナル値のユニークインデクスキー，及び非ユニークインデクスの残存エントリが発生します。この残存エントリに対して排他待ちが発生した場合，デッドロックが発生することがあります。また，残存エントリが大量にある場合は，検索性能が劣化するおそれがあります。

●回避策1：残存エントリを減らす

基本的に，残存エントリはインデクスキーが更新，又は削除されるたびに増加します。残存エントリに対する排他待ちやデッドロックを回避するため，一定量の更新，又は削除が発生したら，データベース再編成ユティリティ（pdrorg），又は空きページ解放ユティリティ（pdreclaim）を実行し，残存エントリを削除してください。目安としては，「残存エントリが管理する行数の合計」／「インデクスが管理する総行数」が30％を超えた時点を推奨します。残存エントリの総数は，データベース状態解析ユティリティ（pddbst）を実行して調べてください。

なお，残存エントリは次の場合に削除されます。

残存エントリが格納されているページに対してインデクスを追加しようとした場合に，ページ内の空き領域がなくなりインデクスページの分割が発生したとき

削除トランザクションの決着後に，そのインデクスに対してpdreclaimコマンドの -xオプションを実行した場合

削除トランザクションの決着後に，そのインデクス，又はインデクスに対応する表に対してpdrorgを実行した場合

削除したインデクスに対応する表に対してPURGE TABLEを実行した場合

削除したインデクス，又はインデクスに対応する表が格納されているRDエリアに対して再初期化を行った場合

また，残存エントリの発生を防ぐには，インデクスの更新頻度を少なくしておくことも有効です。

●回避策2：残存エントリによる排他待ちを減らす

システム共通定義のpd_dbreuse_remaining_entriesオペランドにNOTHING，ONLY_DIC，又は，NONEを指定すると，残存エントリによる排他待ちが少なくなります。詳細は，「残存エントリによる排他待ちの回避（行識別子の再利用抑止）」を参照してください。

(b)　表の残存エントリ

表の行データ格納領域についても，行削除後に残存エントリが発生します。コミットしていない削除データに排他を掛けた場合，これらの残存エントリに対してもチェックを行います。そのため，無効なデータの読み飛ばし処理や，排他制御のオーバヘッドが発生します。

●回避策1：残存エントリを減らす

インデクスの残存エントリとは異なり，残存エントリに対する予想外の排他待ちは発生しませんが，一定量の更新，又は削除が発生したら，pdrorg，又はpdreclaimを実行し，残存エントリを削除してください。残存エントリの総数は，データベース状態解析ユティリティ（pddbst）を実行して調べてください。

また，残存エントリの発生を防ぐには，行削除の頻度を少なくしておくことも有効です。

●回避策2：残存エントリによる排他待ちを減らす

システム共通定義のpd_dbreuse_remaining_entriesオペランドにNOTHING，ONLY_DIC，又は，NONEを指定すると，残存エントリによる排他待ちが少なくなります。詳細は，「残存エントリによる排他待ちの回避（行識別子の再利用抑止）」を参照してください。

3.4.8　残存エントリによる排他待ちの回避（行識別子の再利用抑止）

インデクスキー値無排他を適用している場合，インデクスのキー値を削除した際に，インデクス格納ページに残存エントリが発生します。この場合，複数のトランザクションでINSERT文，UPDATE文，又はDELETE文を実行したり，定義系SQL文やpdmodを繰り返し実行したりすると，異なるインデクスキー値の操作であっても排他待ちが発生することがあります。ユーザ表の排他待ち発生例を次の図に示します。

図3‒18　残存エントリによる排他待ち発生の例

［説明］

インデクスページには，キーAが格納されています。キーAは，データAの行識別子を持っています。

データページには，データAが格納されています。また，データページの管理領域には，データAに対応するスロット（行識別子）があります。

キーAとデータAは，このスロットが示す行識別子によって関連づけられています。

トランザクション1によってキーA及びデータAが削除されます。このとき，トランザクション1は決着します。

インデクスキー値無排他を適用しているため，インデクスページのキーAは残存エントリとなります。

データページでは，データAが削除され空き領域ができます。また，スロットの情報も削除され，空きスロットができます。

トランザクション2によってキーB及びデータBが追加されます。このとき，トランザクション2は未決着です。

未使用領域にデータBが入らないため，データページではページコンパクションが発生します。

インデクスページにキーBが格納されます。

データページにはデータBが格納されます。このとき，空きスロットが存在するため，データBの行識別子はこの空きスロットを再利用します。

なお，トランザクション2は未決着のため，キーB（データB）はこのスロットに排他を掛けたままになっています。

トランザクション3によって再びキーA及びデータA’が追加されます。

キーAには残存エントリがあるため，その残存エントリが前回使用していたスロットを再利用できるかどうか確認します。このとき，スロットは既にキーB（データB）によって排他が掛けられているため，排他待ちが発生します。

この排他待ちは，行識別子の割り当て方法を変えることで回避できます。行識別子は，データを一意に識別するためにシステムが割り当てますが，行が削除されると，その行識別子は再利用されます。同様に，行識別子に対応していたスロットも再利用されます。そのため，残存エントリによる排他待ちが発生してしまいます。この行識別子の再利用を抑止することによって，スロットも再利用されなくなり，排他待ちを回避できます。行識別子の再利用抑止による排他待ちの回避例を次の図に示します。

図3‒19　行識別子の再利用抑止による排他待ちの回避例

［説明］

インデクスページには，キーAが格納されています。キーAは，データAの行識別子を持っています。

データページには，データAが格納されています。また，データページの管理領域には，データAに対応するスロット（行識別子）があります。

キーAとデータAは，このスロットが示す行識別子によって関連づけられています。

トランザクション1によってキーA及びデータAが削除されます。このとき，トランザクション1は決着します。

インデクスキー値無排他を適用しているため，インデクスページのキーAは残存エントリとなります。

データページでは，データAが削除され空き領域ができます。また，スロットの情報も削除され，空きスロットができます。

トランザクション2によってキーB及びデータBが追加されます。このとき，トランザクション2は未決着です。

未使用領域にデータBが入らないため，データページではページコンパクションが発生します。

インデクスページにキーBが格納されます。

データページには，データBが格納されます。データBの行識別子には，新たなスロットが割り当てられます。このとき，トランザクション2は未決着のため，キーB（データB）はこのスロットに排他を掛けたままになっています。

トランザクション3によって再びキーA及びデータA’が追加されます。

データA’の行識別子にも新たなスロットが割り当てられるため，排他待ちは発生しません。

(1)　適用基準

行識別子の再利用を抑止すると，ページ内の管理領域（行識別子に対応するスロットの数）が増えるため，格納効率が低下する場合があります。

そのため，格納効率を下げてでも残存エントリの排他待ちを回避したい場合に適用してください。

格納効率の詳細は，「格納効率が低下するケース」を参照してください。

(2)　指定方法

行識別子の再利用を抑止するには，システム共通定義のpd_dbreuse_remaining_entriesオペランドにALL以外を指定します。

なお，pd_dbreuse_remaining_entriesオペランドの指定値によって，排他待ちの軽減対象が異なります。詳細は，マニュアル「HiRDB システム定義」の「排他制御に関するオペランド」を参照してください。

(3)　格納効率が低下するケース

行識別子を再利用しない場合，INSERT文，UPDATE文，及びDELETE文を頻繁に実行したり，定義系SQL文やpdmodを繰り返し実行したりすると，ページ内の管理領域（行識別子に対応するスロットの数）が極端に増加します。管理領域は，1ページ当たり最大で次の値まで増加します。

1スロットの容量2バイト×1ページ当たりの最大格納行数255行＝510バイト

そのため，次のような場合は，1ページに格納できるデータの件数が減少し，格納効率が低下することがあります。

1件ごとのデータサイズが大きい，又はページサイズが小さいため，1ページ当たりのデータ件数が少ない場合

未使用領域に余裕を持たせた見積もりをしていない場合

ユーザ表での行識別子の再利用抑止によって格納効率が低下する場合の例を次の図に示します。

この例では，データページのサイズが5,000バイトで，1件のデータサイズが1,500バイトとします。行識別子の再利用を抑止している状態で，データの挿入と削除を繰り返します。

図3‒20　行識別子の再利用抑止による格納効率低下の例

［説明］

データの挿入と削除を繰り返します。行識別子の再利用を抑止しているため，その都度使用済みの空きスロットが増加します。

未使用領域が494バイトとなり，1,500バイトのデータが挿入できなくなったところで，ページコンパクションが発生します。このとき，空きスロットはそのまま残ります。

さらに挿入と削除を繰り返し，空きスロットが250個（500バイト）になります。

ここでデータを挿入すると，新たなスロットが3件目のデータ領域を使用してしまいます。そのため，次にデータを挿入するときにはページコンパクションが発生します。以降，このページには2件のデータしか格納できなくなり，格納効率が低下します。

なお，スロット数が1ページ当たりの最大格納行数である255に達した場合は，ページ内に存在する残存エントリの中で行識別子の値が一番小さいものから順に再利用されます。

3.4.9　残存エントリによる排他待ちの回避（ユニークチェック用排他使用）

インデクスキー値無排他方式では，ユニークインデクスの一意性制約を保証するため行排他を使用して処理します。しかし，この方式では残存エントリによる排他待ちが発生し，新しいキー値を追加するとき残存エントリによる排他待ちが発生することがあります。ユニークチェック用排他による一意性制約保証は，ユニークチェック用の排他を使用して残存エントリによる排他待ちを回避します。ユニークチェック用の排他はユニークインデクスの一意性制約の確認にだけ使用しその他の処理では使用しないため，新たな排他待ちの要因にはなりません。

(1)　適用基準

ユニークチェック用排他による一意性制約保証を使用すると，ユニーク指定又はプライマリ指定のインデクスのキー値を削除するときに排他を取得します。そのため，排他制御に使用する共用メモリサイズが大きくなります。メモリに余裕があり，確実に残存エントリによる排他待ちを回避したい場合に指定します。増加する排他資源数については，マニュアル「HiRDB システム定義」の「付録D　排他資源数の見積もり」を参照してください。

(2)　指定方法

ユニークチェック用排他による一意性制約保証を使用するには，システム共通定義のpd_unique_check_modeオペランドに1を指定します。詳細は，マニュアル「HiRDB システム定義」の「排他制御に関するオペランド」を参照してください。

(3)　ユニークチェック用排他による一意性制約保証による残存エントリの排他待ちについて

ユニークチェック用排他による一意性制約保証を使用しない場合，行排他だけを使用して一意性制約を保証します。そのため，次の図に示すように過去に削除を行い完了したキー値を追加するときに残存エントリ（一意性制約を保障するために削除中に残している削除状態のエントリ）による排他待ちが発生することがあります。

図3‒21　残存エントリによる排他待ちが発生する例

[説明]

(1)行の更新のため，行(R1)に排他モードがEXの排他を取得する。

(2)インデクスキー追加前に削除中のインデクスエントリの行識別子(R1)で行に排他があるかを確認する。

(3)行(R1)に排他があるため，トランザクション1の完了まで行(R1)の行排他で待つ。

ユニークチェック用排他による一意性制約保証を使用することで，次の図で示すように残存エントリによって待ちとなったり，デッドロックが発生したりすることがなくなります。

図3‒22　ユニークチェック用排他による一意性制約保証を使用することによって排他待ちを回避する例

[説明]

(1)行の更新のため，行(R1)に排他モードがEXの排他を取得する。

(2)インデクスキー削除時，トラザクション待ち用に排他モードがEXの排他を，キー値'101M'に対するユニークチェック用に排他モードがSRの排他を取得する。

(3)インデクスキー追加時，残存エントリの行識別子で行の排他があるかを確認する。

(4)(3)で行に排他があるため，行の排他を取得しているトランザクションがユニークチェック用の排他を取得しているかを確認する。

(5)挿入するキーと同じ値のユニークチェック用の排他を取得していないため，キー値の挿入を行ってトランザクション2の処理を続行する。

3.4.10　UAPでできる排他制御

排他制御は，HiRDBシステムが自動的に制御していますが，処理形態によってはUAPで排他制御の単位を変更すると，オーバヘッドが削減できるので処理効率が向上します。UAPを作成するとき次に示す点を考慮してください。

(1)　検索の場合

検索結果を一度参照するだけで，COMMITするまでデータを占有する必要がないときはSELECT文にWITHOUT LOCKを指定します。WITHOUT LOCKを指定すると，トランザクションの終了を待たないで排他が解除されるので，同時実行性が向上します。

なお，WITHOUT LOCK NOWAITを指定しても，データベース作成ユティリティ（option文のnowait=noを指定した場合），又はデータベース再編成ユティリティ（-k unldの場合を除く）でデータ処理中の表は検索できません。

また，WITHOUT LOCK NOWAITを指定した場合，排他資源の表（NOWAIT検索中）に対して，排他モード（EX）を取得する次のユティリティとの間にデッドロックが発生するおそれがあります。

データベース作成ユティリティ（pdload）

データベース再編成ユティリティ（pdrorg）

データベース作成ユティリティの排他制御モード，及びデータベース再編成ユティリティの排他制御モードについては，マニュアル「HiRDB コマンドリファレンス」を参照してください。

1以外の場合は，検索する前に，対象の表にLOCK文でSHAREモードの排他を掛けます。

LOCK文であらかじめ表に排他を掛けると，ページ単位，又は行単位の排他をしないため，オーバヘッドが大幅に削減できます。また，排他制御用のバッファ不足を防止することもできます。

共用表を検索する場合，WITHOUT LOCK，又はWITH ROLLBACKを指定することをお勧めします。

(2)　更新の場合

更新する前に，対象の表にLOCK文でEXCLUSIVEモードの排他を掛けます。

LOCK文であらかじめ表に排他を掛けると，行単位の排他をしないため，オーバヘッドが大幅に削減できます。また，排他制御用のバッファ不足を防止することもできます。

共用表に対して，インデクスのキー値の変更を伴う更新（追加，削除も含む）をする場合，及び大量の更新をする場合，必ずEXCLUSIVE指定のLOCK文で排他を掛けてください。なお，共用表にEXCLUSIVE指定のLOCK文で排他を掛けた場合，共用表に定義されているインデクスのインデクス格納用RDエリア（共用RDエリア）にも排他が掛かります。

(3)　削除の場合

表の削除，インデクスの削除，又は全行削除をする場合，対象となる表のすべての使用中セグメントに対してEXモードの排他を掛けます。

なお，表の使用中セグメント数が多い場合，すべてのセグメントに対してEXモードの排他を掛けるため，COMMITするまでこれらすべてのセグメントを占有することになり，排他制御用バッファ内で多量の排他制御用資源管理テーブルを必要とするので注意する必要があります。特に，次に示すSQL文を使用して表の削除，インデクスの削除，又は全行削除をする場合は，注意してください。

DROP SCHEMA

DROP TABLE

DROP INDEX

ALTER TABLE DROP PRIMARY KEY

PURGE TABLE

複数の表を所有するスキーマを削除する場合，各々の表を削除してからスキーマを削除します。

各表を削除した後にスキーマを削除すると，使用するメモリが軽減できます。

(4)　注意事項

LOCK文で表に排他を掛けると，ほかのトランザクションが長時間待ち状態になるため，オンライン業務との同時実行は避けてください。ただし，非共用表のNOWAIT検索については，待ち状態にはなりません。

共用表に対してNOWAIT検索をする場合，アクセスするRDエリアに対して，ほかのユーザがEXCLUSIVE指定のLOCK文を実行しているときはアクセスできません。

3.4.11　SQL文の種類とインデクスの種別による排他制御の順序

(1)　インデクスのキー値，及びデータページの行に対する操作系SQLの排他制御の順序

(a)　INSERT文の場合

(b)　カーソルを使用しないDELETE文，又はUPDATE文で条件に合うデータを探す場合

(c)　カーソルを使用したDELETE文

(d)　カーソルを使用したUPDATE文の場合

(e)　SELECT文，又はFETCH文の場合

(2)　インデクスキー値無排他を使用した場合の操作系SQLの排他制御の順序

(a)　INSERT文の場合

(b)　カーソルを使用しないDELETE文，又はUPDATE文で条件に合うデータを探す場合

(c)　カーソルを使用したDELETE文

(d)　カーソルを使用したUPDATE文の場合

(e)　SELECT文，又はFETCH文の場合

(3)　コミットしていない削除データの排他制御の順序

(a)　カーソルを使用しないDELETE文，又はUPDATE文で条件に合うデータを探す場合

(b)　SELECT文，又はFETCH文の場合

3.4.12　行に掛かる排他制御の順序

HiRDBはSQLの最適化によって決定されたアクセスパスに従ってデータにアクセスします。通常，行排他の順序はこのアクセスパスによって決まります。ただし，SQL実行時の条件によって行排他の順序が異なるケースがあります。次に示すSQL実行時の条件では，行排他の順序が異なります。

パラレルサーバで，かつ複数のBESを使用してデータにアクセスする場合

スナップショット方式を適用する場合

ここでは，アクセスパスに従った行排他の順序，及び行排他の順序が異なるケースについて説明します。

(1)　アクセスパスに従った行排他の順序

HiRDBはSQLの最適化によって決定されたアクセスパスに従ってデータにアクセスします。行排他の順序はこのアクセスパスによって決まります。

基本的なデータアクセスの順序を次に示す例で説明します。

例

実行するSQL：

select * from t1,t2 where t1.c1=t2.c1 and t1.c1>3

[条件]

HiRDB/シングルサーバで実行します。

t1.c1及びt2.c1にインデクスを定義しています。

t1.c1のインデクスを用いてt1にアクセスします。

t1の各行に対してt2.c1のインデクスを用いてネストループジョインを行います。

t1.c1>3の条件でt1の行5，2，1，6がヒットし，インデクスによってこの順にアクセスします。

t1の行に対してヒットするt2行は次のとおりです。

・t1の行1に対してヒットするt2の行は6です。

・t1の行2に対してヒットするt2の行は2です。

・t1の行5に対してヒットするt2の行は4，及び7であり，インデクスによってこの順にアクセスします。

・t1の行6に対してヒットするt2の行は3，及び8であり，インデクスによってこの順にアクセスします。

スナップショット方式は適用しません。

(2)　行排他の順序が異なるケース

SQLを実行するときの条件によって行排他の順序が異なるケースについて説明します。

(a)　HiRDB/パラレルサーバの場合

処理性能向上のために，表を並列に検索，又は更新する場合，HiRDBはデータの先読みや並列での読み込みをします。そのため，結合する表の間でのデータのアクセス順序がシングルサーバの場合と異なることがあります。アクセス順序が異なるため，行排他の順序も異なります。その結果，デッドロックが発生するおそれがあります。

●分割表検索の場合

分割表検索の場合の，データアクセスの順序を次に示す例で説明します。

例

実行するSQL：

select * from t1 where t1.c1>3

[条件]

HiRDB/パラレルサーバで実行します。

表t1は，行1〜8をBES1に，行9〜16をBES2に分割して格納しています。

t1.c1>3の条件で，表T1の行1，2，5，6，10，11，14，15がヒットします。このとき，BES1中では行5，2，1，6の順序でインデクスによってアクセスします。BES2中では行10，14，11，15の順序でインデクスによってアクセスします。

スナップショット方式は適用しません。

[説明]

各BES内でのアクセス順序は決まりますが，データの先読みや並列での読み込みが発生するため，BES1とBES2のアクセス順序は決まりません。また，BES1の行とBES2の行とのアクセス順序も決まりません。

●結合検索の場合

結合検索の場合の，データアクセスの順序を次に示す例で説明します。

例

実行するSQL：

select * from t1,t2 where t1.c1=t2.c1 and t1.c1>3

[条件]

HiRDB/パラレルサーバで実行します。

t1.c1及びt2.c1にインデクスを定義しています。

t1.c1のインデクスを用いてt1にアクセスします。

t1の各行に対してt2.c1のインデクスを用いてネストループジョインを行います。

t1.c1>3の条件でt1の行5，2，1，6がヒットし，インデクスによってこの順にアクセスします。

t1の行に対してヒットするt2行は次のとおりです。

・t1の行1に対してヒットするt2の行は6です。

・t1の行2に対してヒットするt2の行は2です。

・t1の行5に対してヒットするt2の行は4，及び7であり，インデクスによってこの順にアクセスします。

・t1の行6に対してヒットするt2の行は3，及び8であり，インデクスによってこの順にアクセスします。

スナップショット方式は適用しません。

BES間の転送行数は2行です。

[説明]

図中のA〜Dのアクセス順序は次のようになります。

A〜D各グループ内のアクセス順序は丸付き数字の順になります。

B，CのアクセスはAのアクセス後になります。

データの先読み，又は並列読み込みが発生するため，B，Cのアクセス順序は決まりません。

データの先読み，又は並列読み込みが発生するため，Bの行とCの行とのアクセス順序も決まりません。

(b)　スナップショット方式を適用する場合

スナップショット方式を適用する場合，SQLを実行するたびに行排他の順序が異なります。

次の三つのケースについて，行に掛かる排他制御の順序を説明します。

スナップショット方式を適用する場合（同時実行するトランザクションなし）

スナップショット方式を適用する場合（同時実行するトランザクションあり）

スナップショット方式を適用しない場合

次のSQLを例とします。

例

select * from t1,t2 where t1.c1=t2.c1 and t1.c1>3

●スナップショット方式を適用する場合（同時に実行するトランザクションなし）

スナップショット方式を適用する場合で，参照するページ内に更新中の行（排他オプションWITH EXCLUSIVE LOCKで検索した行を含む）がないとき，ページ内のすべての行にまとめて排他を掛けます。

SQL実行時のデータアクセスの順序を次に示します。

[説明]

表T1，T2の行1は，結合条件に指定した列の値が同じであることを示します。

表T1，T2の行はすべて同じページに格納されています。

●スナップショット方式を適用する場合（同時に実行するトランザクションあり）

スナップショット方式を適用する場合で，参照するページ内に更新中の行（排他オプションWITH EXCLUSIVE LOCKで検索した行を含む）があるとき，その直前の行までまとめて排他を掛けます。その後排他処理を打ち切り，それまでに排他を掛けた行を参照します。また，排他を掛けられなかった行については，実際に参照するときに排他を掛けます。

SQL実行時のデータアクセスの順序を次に示します。

[説明]

表T1，T2の行1は，結合条件に指定した列の値が同じであることを示します。

表T1，T2の行はすべて同じページに格納されています。

表T1の行3に，ほかのトランザクションがEXモードで排他を掛けています。

スナップショット方式を適用して結合検索を行う場合，表又はインデクスを更新するUAPや，排他オプションWITH EXCLUSIVE LOCKで検索するUAPがほかに存在すると，同じSQLを実行しても行排他の順序が入れ替わります。

スナップショット方式は参照するページの排他をまとめて行うため，インデクスページスプリットが発生した場合でも行排他の順序が入れ替わります。

●スナップショット方式を適用しない場合

スナップショット方式を適用しない場合，一行ごとに排他を掛けます。

SQL実行時のデータアクセスの順序を次に示します。

[説明]

表T1，T2の行1は，結合条件に指定した列の値が同じであることを示します。

(3)　デッドロックの対処方法

行排他の順序が異なるケースでは，EXモードで行排他を掛けるUAPが加わることによって，同じSQLの同時実行であってもデッドロックが発生するおそれがあります。デッドロックの発生例を次に示します。

[説明]

UAP1とUAP2はPRモードで行排他を掛けるUAPです。

UAP1とUAP2は同じSQLを実行するUAPですが，(2)で説明した理由によって，排他の順序が次のように異なります。

UAP1：行1→行2→行3の順序で排他を掛けます。

UAP2：行1→行3→行2の順序で排他を掛けます。

UAP3とUAP4はEXモードで行排他を掛けるUAPです。

デッドロックの対処方法を次に示します。

排他オプションにWITHOUT LOCK NOWAIT又はWITHOUT LOCK WAITを指定して検索を行う。

IN EXCLUSIVE MODEのLOCK TABLE文を実行してから検索を行う。

トランザクションを再実行する。

デッドロックが発生した場合については，「デッドロックと回避策」を参照してください。

3.4.13　インデクスキー値の排他資源の作成方法

インデクスのキー値が10バイトを超えた場合，システム定義のpd_key_resource_typeオペランドの指定値によって，作成されるインデクスキー値の排他資源が変わります。システム定義のpd_key_resource_typeオペランドについては，マニュアル「HiRDB システム定義」を参照してください。

pd_key_resource_typeオペランドにTYPE1を指定した場合の，キー値排他資源の作成方法を次の図に示します。

図3‒23　pd_key_resource_type=TYPE1のキー値排他資源の作成方法

［説明］

キー長が10バイトを超えると，キー値の先頭2バイトと下位1バイトを除いた長さを7バイト単位で切り出し，ビットシフトしながら排他的論理和をします。ビットシフトは，切り出した回数を8で割った余りの数で論理シフトし，8バイトデータの排他的論理和をします。

排他的論理和の結果（中間結果）は，8バイトの領域に格納し，先頭1バイト（X）と下位1バイト（Y）の排他的論理和をして，7バイト分のデータ（結果）を作成します。

この7バイト分のデータ（結果）と，最初に除いた先頭2バイトと下位1バイトとを合わせた，10バイトのデータがインデクスキー値の排他資源となります。

pd_key_resource_typeオペランドにTYPE2を指定した場合の，キー値排他資源の作成方法を次の図に示します。

図3‒24　pd_key_resource_type=TYPE2のキー値排他資源の作成方法

［説明］

キー長が10バイトを超えると，キー値の先頭2バイトと下位1バイトを除いた長さを7バイト単位で排他的論理和をします。排他的論理和の結果の7バイトデータと先頭2バイト，下位1バイトを合わせた10バイトのデータがインデクスキー値の排他資源となります。

3.4.14　複数トランザクションで検索と更新をする場合

複数トランザクションで同一の表を検索及び更新する場合の一般的な処理方法と注意事項について説明します。

(1)　一般的な処理方法

SELECT文で更新対象行を特定し，UPDATE文で更新するトランザクションを実行する場合，SELECT文を実行する前に同一トランザクション中で，LOCK文を用いて排他モードで表に対して排他制御を行うか，又はSELECT文の排他制御のモードを次のどちらかの方法で排他モード（EX：Exclusive）にするかしてください。

クライアント環境定義に次のどちらかを指定し，SELECT文にFOR UPDATE指定をする

PDISLLVLに2を指定する

PDFORUPDATEEXLOCKにYESを指定する

SELECT文の排他オプションにWITH EXCLUSIVE LOCKを指定する

SELECT文の排他制御のモードを排他モードにする場合の例を次に示します。

（例）

次の表「在庫テーブル」から「在庫状態」が「在庫確保中」の行を検索します。該当する行があった場合は，「在庫状態」を「在庫あり」に変更します。

表3‒26　例・在庫テーブル

在庫ID（主キー）

在庫名

在庫状態

20345678

ネクタイ

在庫確保中

20345679

シャツ

在庫あり

20345680

靴下

在庫なし

20345681

ズボン

在庫確保中

20345682

スカート

在庫あり

20345683

パンツ

在庫確保中

DECLARE CUR1 CURSOR FOR SELECT 在庫状態 FROM 在庫テーブル
  WHERE 在庫状態='在庫確保中'
    WITH EXCLUSIVE LOCK FOR UPDATE OF 在庫状態
OPEN CUR1
WHILE(SQLCODE == 0){
    FETCH CUR1 INTO :在庫状態
    UPDATE 在庫テーブル SET 在庫状態='在庫あり'
      WHERE CURRENT OF CUR1
}
CLOSE CUR1

(2)　検索する行に対して更新する行が非常に少ない場合

SELECT文でヒットする行に対してUPDATE文で更新する行が少ない場合，SELECT文の排他オプションにSHARE LOCKを指定することで，他トランザクションからも参照できるようになるため，同時実行性を向上できます。ただし，他トランザクションと更新する行が重なり，排他制御のモードが共有モードから排他モードに遷移することによってデッドロックが起こるおそれがあるため，注意してください。

(3)　排他の掛かる行を減らすために事前に無排他で検索する場合

SELECT文を無排他検索にすることで，「検索する行に対して更新する行が非常に少ない場合」よりもさらに同時実行性を向上できます。ただし，無排他検索をしてからUPDATE文を実行するまでの間に検索した行がほかのトランザクションによって更新される可能性があります。この場合，データの取り出しで読み込む値が，探索条件に合致しない値になることがあります。UPDATE文を正しく実行するため，無排他にしたSELECT文の探索条件を，UPDATE文又は排他制御のモードが排他モードのSELECT文で再評価してください。

無排他にしたSELECT文の探索条件を，排他制御のモードが排他モードのSELECT文で再評価する場合の例を次に示します。

（例）

無排他のSELECT文に指定した探索条件「在庫状態='在庫確保中'」をWITH EXCLUSIVE LOCKの指定があるSELECT文で再評価して，他トランザクションによる変更がないことを確認します。他トランザクションによる変更がなければ更新をします。

DECLARE CUR1 CURSOR FOR SELECT 在庫ID FROM 在庫テーブル
  WHERE 在庫状態='在庫確保中' WITHOUT LOCK
OPEN CUR1
WHILE(SQLCODE == 0){
    FETCH CUR1 INTO :在庫ID_WITHOUTLCK
    /* 行を絞り込むためのUAP側の処理 */
        ・
        ・
        ・
    DECLARE CUR2 CURSOR FOR SELECT 在庫状態 FROM 在庫テーブル
      WHERE 在庫ID=:在庫ID_WITHOUTLCK AND 在庫状態='在庫確保中'
        WITH EXCLUSIVE LOCK FOR UPDATE OF 在庫状態
    OPEN CUR2
    FETCH CUR2 INTO :在庫状態_WITHLCK
    IF(SQLCODE == 0){
        UPDATE 在庫テーブル SET 在庫状態='在庫あり'
          WHERE CURRENT OF CUR2
    }
    CLOSE CUR2
}
CLOSE CUR1

3.5　カーソルの効果

UAPでは，カーソルを利用して検索結果を取り出すことができます。

カーソルを使用する場合，DECLARE CURSORでカーソルを宣言するか，又はALLOCATE CURSORでカーソルを割り当てます。

ここでは，カーソルを使用したときの効果，使用するときに考慮する内容について説明します。

3.5.1　カーソルを使用して表を操作するときの留意事項

(1)　カーソルの更新可能性，及びカーソルを使用した操作有無と，カーソルを使用しない操作との関連

カーソルを宣言，又は割り当てた後，OPEN文でカーソルを開くと，データを取り出して，参照や更新などの操作ができます。また，カーソル宣言中，並びにカーソル宣言に指定したSQL文識別子，及びカーソル割り当てに指定した拡張文名が識別する動的SELECT文中の，FOR READ ONLY句，又はFOR UPDATE句の指定の有無と，そのカーソルを使用した操作（更新，及び削除）の有無によって，カーソルを開いた後にカーソルを使用しない操作ができるかどうかが決まります。

カーソルの更新可能性とカーソルを使用しない操作との関連を次の表に示します。なお，SQL最適化オプションの更新SQLの作業表作成抑止を指定すると，カーソルを使用しない操作の制限が緩和されます。

表3‒27　カーソルの更新可能性とカーソルを使用しない操作との関連

条件

カーソルを使用しない操作

カーソルの更新可能性の指定

カーソルを使用した操作

SQL最適化オプションの更新SQLの作業表作成抑止を適用しない場合

SQL最適化オプションの更新SQLの作業表作成抑止を適用して，インデクスキー値無排他機能を使用

更新

削除

検索

更新

削除

追加

検索

更新

削除

追加

静的SQL

FOR READ ONLY句指定あり

なし

なし

○

○

○

○

○

○

○

○

FOR UPDATE OF 列名指定あり

なし

なし

○

△

×

×

○

○※２

○※２

○※２

なし

あり

○

○

○

○

○

○

○

○

あり

なし

○

△

×

×

○

○※２

○※２

○※２

あり

あり

○

○

○

○

○

○

○

○

FOR UPDATE句指定あり

なし

なし

○

○

○

○

○

○

○

○

なし

あり

○

○

○

○

○

○

○

○

あり

なし

○

○

○

○

○

○

○

○

あり

あり

○

○

○

○

○

○

○

○

上記の指定なし※１

なし

なし

○

×

×

×

○

○※２

○※２

○※２

なし

あり

○

○

○

○

○

○

○

○

あり

なし

○

○

○

○

○

○

○

○

あり

あり

○

○

○

○

○

○

○

○

動的SQL

FOR READ ONLY句指定あり

なし

なし

○

○

○

○

○

○

○

○

FOR UPDATE OF 列名指定あり

なし

なし

○

△

×

×

○

○※２

○※２

○※２

なし

あり

○

○

○

○

○

○

○

○

あり

なし

○

△

×

×

○

○※２

○※２

○※２

あり

あり

○

○

○

○

○

○

○

○

FOR UPDATE句指定あり

なし

なし

○

○

○

○

○

○

○

○

なし

あり

○

○

○

○

○

○

○

○

あり

なし

○

○

○

○

○

○

○

○

あり

あり

○

○

○

○

○

○

○

○

上記の指定なし

なし

なし

○

×

×

×

○

○※２

○※２

○※２

なし

あり

○

○

○

○

○

○

○

○

あり

なし

○

○

○

○

○

○

○

○

あり

あり

○

○

○

○

○

○

○

○

（凡例）

○：操作できます。

△：指定した列の更新ができます。

×：操作できません。

注※1

CURRENT OF カーソル名を指定した更新，又は削除が同一ポストソース内にある場合は，FOR UPDATEが仮定されます。

注※2

カーソルを使用した検索で使っているインデクスを更新した場合，カーソルでの検索結果は保証されません。例と対策方法を次に示します。

＜例＞

CREATE INDEX X1 ON T1(C1);
DECLARE CR1 CURSOR FOR SELECT C1 FROM T1 WHERE C1>0;

宣言したカーソルを使用して，次のFETCH文，UPDATE文を繰り返し実行します。

FETCH CR1 INTO :XX;
UPDATE T1 SET C1=10;

C1=10に更新した行が再度検索されます。

＜対策方法＞

次のどちらかの対策をしてください。

UPDATE文の更新値が，検索の探索条件を満たさないように探索条件を変更してください。

（例）WHERE C1>0 AND C1 <>10

検索に使用するインデクスの構成列から，該当する列を削除してください。ただし，インデクス構成列の一部を削除した場合，その列が探索条件で十分に絞り込める列だったときは，性能が劣化するので注意してください。また，インデクス構成列の一部を削除した場合，インデクスキーの重複数が多くなり，排他待ち，及びデッドロックの多発を招くおそれがあるため，注意してください。したがって，この対策をする場合には，十分に検証した上で採用するようにしてください。

(2)　二つ以上のカーソルを同時に使用する場合

二つ以上のカーソルを使用して同じ表を同時に更新する場合，それぞれのカーソル宣言，又は動的SELECT文のFOR UPDATE句の列名の並びに，更新する列をすべて指定します。例えば，カーソル1で列1を更新し，カーソル2で列2を更新する場合，カーソル1，及びカーソル2を宣言するときに，FOR UPDATE句に列1，及び列2の両方を指定します。カーソル1で列1だけ，カーソル2で列2だけを指定した場合，更新時にエラーになります。

3.5.2　FOR UPDATE句とFOR READ ONLY句の使い分け

カーソルを使用して検索中の表に対して行の更新，削除，及び挿入する場合，DECLARE CURSOR，又はALLOCATE CURSORでカーソルを定義する必要があります。このとき，UAPの処理内容に応じて，FOR UPDATE句（FOR UPDATE OF句を含む），及びFOR READ ONLY句を指定します。

カーソルを使用した行の更新又は削除をする場合，検索した行のほとんどを更新しないときは，排他オプションとしてWITH SHARE LOCKを指定するとよいです。排他オプションを省略した場合は，WITH EXCLUSIVE LOCKが仮定されます。

FOR UPDATE句（FOR UPDATE OF句を含む），及びFOR READ ONLY句は，指定によって処理効率が著しく低下する場合があるので注意が必要です。

FOR UPDATE句（FOR UPDATE OF句を含む），及びFOR READ ONLY句を指定するときに考慮する内容を次の表に示します。

表3‒28　FOR UPDATE句，及びFOR READ ONLY句を指定するとき考慮する内容

指定句

用途

考慮する内容

FOR UPDATE句

カーソルを使用して検索中の表に対して，そのカーソルを使用した行の更新，又は削除をして，更にカーソルを使用しない行の更新，削除，又は追加をする場合に指定する。

カーソルを使用した行の検索中に，対象のインデクスが更新された場合でも，動作を保証するため，1回目のFETCHで内部的に作業表を作成する。この作業表の作成が検索時のオーバヘッドになる。

FOR UPDATE OF句

カーソルを使用して検索中の表に対して，一部の列だけを更新する場合に指定する。

列名で指定された列に付けられたインデクスが検索に使用されると，1回目のFETCHで内部的に作業表を作成する。この作業表の作成が検索時のオーバヘッドになる。

FOR READ ONLY句

カーソルを使用して検索中に，ほかのカーソルを指定して更新（削除，挿入を含む）をする場合，又は直接探索条件を指定して更新（削除を含む）をする場合に指定する。

カーソルを使用した検索中にほかのカーソルで更新する場合，処理結果に影響しないようにするため，1回目の FETCHで内部的に作業表を作成する。この作業表の作成が検索時のオーバヘッドになる。

FOR UPDATE句，及びFOR READ ONLY句を指定しない場合でも，更新（削除を含む）をするときは，1回目のFETCHで内部的な作業表を作成することがあるので，オーバヘッドを考慮する必要があります。

なお，検索だけをするときは内部的な作業表を作成しないので，オーバヘッドを考慮する必要ありません。

3.5.3　カーソル宣言と排他の関係

FETCHを実行するとき，又は1行SELECT文を実行するときの排他制御モードはカーソル宣言時，動的SELECT文，又は1行SELECT文の前処理時の排他オプションが優先されます。排他オプションの指定がない場合は，データ保証レベル（データ保証レベル指定がない場合は2を仮定）に従います。データ保証レベルは，システム定義のpd_isolation_levelオペランド，クライアント環境定義のPDISLLVL，又は手続き定義時若しくはトリガ定義時に指定するSQLコンパイルオプションのISOLATION LEVELで指定します。このとき，カーソルを使用した更新（又は削除）の有無，FOR UPDATE時のWITH EXCLUSIVE LOCK仮定によっても影響を受けます。

FOR UPDATE時のWITH EXCLUSIVE LOCK仮定の指定は，クライアント環境定義のPDFORUPDATEEXLOCK，手続き定義時又はトリガ定義時のSQLコンパイルオプションのデータ保証レベル（FOR UPDATE EXCLUSIVEを指定）で行います。

カーソル宣言時（DECLARE CURSOR）の排他オプション，カーソル宣言（DECLARE CURSOR）やカーソル割当て（ALLOCATE CURSOR）に指定した動的SELECT文の排他オプション，又は１行SELECT文に指定した排他オプションによって，実行時の排他制御モードが異なります。カーソル宣言時，又は動的SELECT文前処理時の排他オプションと表操作時の排他オプションの関係を次の表に示します。

なお，カーソル宣言時の排他オプションについては，マニュアル「HiRDB SQLリファレンス」を参照してください。

表3‒29　カーソル宣言時，又は動的SELECT文前処理時の排他オプションと主問合せの表操作時の排他オプションの関係

主問合せの表へのLOCK文指定

SQL文中の排他オプション

カーソルを使用した更新許可※

FOR UPDATE時のWITH EXCLUSIVE LOCK仮定

データ保証レベル

主問合せの表操作時の排他オプション

あり

EXCLUSIVE

あり

WITH EXCLUSIVE LOCK

−

−

−

WITH EXCLUSIVE LOCK

WITH SHARE LOCK

WITH EXCLUSIVE LOCK

WITHOUT LOCK WAIT

WITH EXCLUSIVE LOCK

WITHOUT LOCK NOWAIT

あり

エラー（KFPA11156-E）

なし

WITH EXCLUSIVE LOCK

なし

−

−

−

WITH EXCLUSIVE LOCK

SHARE

あり

WITH EXCLUSIVE LOCK

−

−

−

WITH EXCLUSIVE LOCK

WITH SHARE LOCK

WITH SHARE LOCK

WITHOUT LOCK WAIT

WITH SHARE LOCK

WITHOUT LOCK NOWAIT

あり

エラー（KFPA11156-E）

なし

WITH SHARE LOCK

なし

あり

あり

−

WITH EXCLUSIVE LOCK

なし

2

WITH EXCLUSIVE LOCK

1

WITH SHARE LOCK

0

WITH SHARE LOCK

なし

−

−

WITH SHARE LOCK

なし

あり

WITH EXCLUSIVE LOCK

−

−

−

WITH EXCLUSIVE LOCK

WITH SHARE LOCK

WITH SHARE LOCK

WITHOUT LOCK WAIT

WITHOUT LOCK WAIT

WITHOUT LOCK NOWAIT

あり

エラー（KFPA11156-E）

なし

WITHOUT LOCK NOWAIT

なし

あり

あり

−

WITH EXCLUSIVE LOCK

なし

2

WITH EXCLUSIVE LOCK

1

WITHOUT LOCK WAIT

0

WITHOUT LOCK WAIT

なし

−

2

WITH SHARE LOCK

1

WITHOUT LOCK WAIT

0

WITHOUT LOCK NOWAIT

（凡例）

−：指定内容に関係なく他の項目の指定が優先されます。

注

指定した排他オプションによって，実行時に次に示すような現象が発生する場合があります。

WITH SHARE LOCKを指定した場合

更新するときに表中の行を共用モードから排他モードにするため，デッドロックになることがあります。

WITHOUT LOCK WAITを指定した場合

ほかのトランザクションによっては，不正更新（二重更新）や削除エラーになることがあります。

WITHOUT LOCK NOWAITを指定した場合

WITHOUT LOCK NOWAITを指定して検索した表に対して更新するSQL文があるとエラーになります。

注※

次の場合，カーソルを使用した更新許可ありとなり，FOR UPDATE句が仮定されます。

FOR UPDATE句を指定した場合

FOR UPDATE句を指定しないで，同一カーソル（カーソル宣言で指定したカーソル）を指定したUPDATE文，又はDELETE文がある場合

次の場合，カーソルを使用した更新許可なしとなります。

FOR UPDATE句を指定しないで，同一カーソル（カーソル宣言で指定したカーソル）を指定したUPDATE文，又はDELETE文もない場合

表3‒30　カーソル宣言時，又は動的SELECT文前処理時の排他オプションと副問合せの表操作時の排他オプションの関係

副問合せの表へのLOCK文指定

SQL文中の排他オプション※1

カーソルを使用した更新許可※2

FOR UPDATE時のWITH EXCLUSIVE LOCK仮定

データ保証レベル

副問合せの表操作時の排他オプション

あり

EXCLUSIVE

あり

WITH EXCLUSIVE LOCK

−

−

−

WITH EXCLUSIVE LOCK

WITH SHARE LOCK

WITH EXCLUSIVE LOCK

WITHOUT LOCK WAIT

WITH EXCLUSIVE LOCK

WITHOUT LOCK NOWAIT

あり

エラー（KFPA11156-E）

なし

WITH EXCLUSIVE LOCK

なし

−

−

−

WITH EXCLUSIVE LOCK

SHARE

あり

WITH EXCLUSIVE LOCK

−

−

−

WITH SHARE LOCK

WITH SHARE LOCK

WITH SHARE LOCK

WITHOUT LOCK WAIT

WITH SHARE LOCK

WITHOUT LOCK NOWAIT

あり

エラー（KFPA11156-E）

なし

WITH SHARE LOCK

なし

あり

あり

−

WITH SHARE LOCK

なし

2

WITH SHARE LOCK

1

WITH SHARE LOCK

0

WITH SHARE LOCK

なし

−

−

WITH SHARE LOCK

なし

あり

WITH EXCLUSIVE LOCK

−

−

−

WITH SHARE LOCK

WITH SHARE LOCK

WITH SHARE LOCK

WITHOUT LOCK WAIT

WITHOUT LOCK WAIT

WITHOUT LOCK NOWAIT

あり

エラー（KFPA11156-E）

なし

WITHOUT LOCK NOWAIT

なし

あり

あり

−

WITH SHARE LOCK

なし

2

WITH SHARE LOCK

1

WITHOUT LOCK WAIT

0

WITHOUT LOCK WAIT

なし

−

2

WITH SHARE LOCK

1

WITHOUT LOCK WAIT

0

WITHOUT LOCK NOWAIT

（凡例）

−：指定内容に関係なく他の項目の指定が優先されます。

注

指定した排他オプションによって，実行時に次に示すような現象が発生する場合があります。

WITH SHARE LOCKを指定した場合

更新するときに表中の行を共用モードから排他モードにするため，デッドロックになることがあります。

WITHOUT LOCK WAITを指定した場合

ほかのトランザクションによっては，不正更新（二重更新）や削除エラーになることがあります。

WITHOUT LOCK NOWAITを指定した場合

WITHOUT LOCK NOWAITを指定して検索した表に対して更新するSQL文があるとエラーになります。

注※1

主問合せに指定したSQL文中の排他オプションを示します（副問合せに排他オプションは指定できません）。

注※2

次の場合，カーソルを使用した更新許可ありとなり，FOR UPDATE句が仮定されます。

主問合せにFOR UPDATE句を指定した場合（副問合せにFOR UPDATE句は指定できません）

主問合せにFOR UPDATE句を指定しないで，同一カーソル（カーソル宣言で指定したカーソル）を指定したUPDATE文，又はDELETE文がある場合

次の場合，カーソルを使用した更新許可なしとなります。

主問合せにFOR UPDATE句を指定しないで，同一カーソル（カーソル宣言で指定したカーソル）を指定したUPDATE文，又はDELETE文もない場合

HiRDBでは，FETCH文で検索対象となる行を先読みする場合があります。先読みした行には排他を取得するため，FETCH文を発行して取得している行数以上に排他を取得します。このため，検索対象となる行数ではなく，FETCH文で取得する行数で排他資源数を見積もると，排他制御のためのバッファが不足する場合があります。カーソルを使用した操作をする場合は，検索対象となる行数で排他資源数を見積もってください。排他資源数を抑えるためには，探索条件で対象となる行を絞り込む必要があります。対象となる行を絞り込むことができない場合は，排他の単位を変更するなど排他制御の抑止を検討する必要があります。排他制御の抑止については，「UAPでできる排他制御」を参照してください。

3.5.4　ホールダブルカーソル

(1)　ホールダブルカーソルとは

ホールダブルカーソルとは，COMMIT文を実行しても閉じないカーソルのことをいいます。

Type4 JDBCドライバでは，コミット実行後もResultSetオブジェクトを有効にする場合に，ホールダブルカーソル機能を使用します。

埋込み型UAPの場合

ホールダブルカーソルを使用する場合，DECLARE CURSORにUNTIL DISCONNECT，又はWITH HOLDを指定してカーソルを宣言します。この指定をすると，CLOSE文，DISCONNECT文，又はROLLBACK文（エラー発生などで暗黙的に実行されるROLLBACKやDISCONNECT処理を含む）を実行するまでカーソルを開いたままにできます。

Type4 JDBCドライバの場合

コミット実行後もResultSetオブジェクトを有効にする場合，次のどれかを指定してください。これらの指定をした場合，ホールダブルカーソルを使用します。

DriverManager.getConnectionメソッドの引数で，ユーザプロパティHIRDB_CURSORにTRUEを指定する。

DriverManager.getConnectionメソッドの引数で，URLにHIRDB_CURSOR=TRUEを指定する。

PrdbDataSource，PrdbConnectionPoolDataSource，PrdbXADataSourceクラスのsetHiRDBCursorModeメソッドの引数で，trueを指定する。

Connection.setHoldabilityメソッドの引数で，ResultSet.HOLD_CURSORS_OVER_COMMITを指定する。

SELECT文にUNTIL DISCONNECTを指定する。

次のメソッドの引数で，ResultSetの保持機能としてResultSet.HOLD_CURSORS_OVER_COMMITを指定する。

Connection.createStatement

Connection.prepareStatement

Connection.prepareCall

また，次のどれかを実行するまで，ResultSetオブジェクトを有効なまま（ホールダブルカーソルを開いたまま）にできます。

ResultSet.close

Statement.close

Connection.close（エラー発生時に，システムによって自動的に実行される切断処理も含む）

Connection.rollback，XAResource.rollback（エラー発生時に，システムによって自動的に実行されるロールバックも含む）

すべての検索行を取得

(2)　ホールダブルカーソル使用時の効果

ホールダブルカーソルを使用すると，大量のデータを検索，又は更新する場合に，途中でCOMMIT文を実行できるため，排他資源の削減に有効となります。また，カーソルを開いたままCOMMIT文を実行できるので，大量のデータを検索，又は更新する（トランザクションを長時間実行する）場合でも，シンクポイントを有効にし，再開始時の時間を短縮できます。

(3)　ホールダブルカーソル使用時の処理

ホールダブルカーソルを使用した場合，作業表用ファイルの削除，及び作業表用ワークバッファの解放は，その作業表用ファイルを作成したホールダブルカーソルのクローズ後のコミットで行われます。

ホールダブルカーソルをオープンした場合，各バックエンドサーバプロセスは，トランザクションがなくても占有されます。したがって，ホールダブルカーソルを使用する場合は，最大サーバプロセス数の見積もり時に注意する必要があります。

UNITIL DISCONNECT指定のLOCK文の実行有無と，作業表を作成する検索，又はパラレルスキャンの有無によって，トランザクションを超えて引き継ぐ排他資源が異なります。引き継ぐ排他資源を次に示します。

［説明］

図中の番号の説明を次に示します。

番号

UNITIL DISCONNECT指定のLOCK文の実行

作業表を作成する検索，又はパラレルスキャン

引き継ぐ排他資源

1

あり

該当しません

LOCK文の資源だけ引き継ぎます。

2

なし

あり

すべての資源を引き継ぎます。

3

なし

カーソル位置の資源だけ引き継ぎます。

OLTP環境下のUAPでホールダブルカーソルを使用する場合，HiRDBのシステム定義のpd_oltp_holdcrオペランドにuseを指定する必要があります。

また，OLTP環境下のUAPでホールダブルカーソルを使用する場合は，次の条件を満たす必要があります。

X/Openに準拠したAPIを使用してHiRDBにアクセスするUAPである。

ホールダブルカーソルを使用するUAPのサービス関数は，ホールダブルカーソルをオープンした後，該当するサービス関数がreturnする前に，カーソルの後処理をする。※

注※

カーソルの後処理をする方法を次に示します。

カーソルのクローズ

ROLLBACK文実行

DISCONNECT文実行

UAPの終了

UAPのサービス関数からのSQLの実行シーケンスを次に示します。図中のトランザクション開始API，カーソルOPEN，カーソルCLOSE，及びCOMMIT APIの順序関係に注意してください。

［説明］

カーソルの保持範囲

トランザクションの範囲

(4)　ホールダブルカーソルの同時オープン数の上限

UNTIL DISCONNECT指定のLOCK文を実行しない表に対して，ホールダブルカーソルを使用する場合，そのホールダブルカーソルのトランザクション当たりの最大同時オープン数を，システム定義pd_max_open_holdable_cursorsに指定してください。

3.5.5　カーソルの使用例

カーソルを使用した例を次に示します。

(1)　カーソルを使用して行を検索しながら更新する例

在庫表（ZAIKO）から，カーソル（CR1）を使用してすべての行を検索しながら単価（TANKA）を1割引きにします。

            :
  EXEC SQL BEGIN DECLARE SECTION;
    char xscode[5]; ...................................1
    char xsname[17];  .................................1
    char xcol[3]; .....................................1
    int xtanka; .......................................1
    int xzsuryo;  .....................................1
  EXEC SQL END DECLARE SECTION;
            :
  EXEC SQL DECLARE CR1 CURSOR FOR
      SELECT * FROM ZAIKO
        FOR UPDATE OF TANKA;  .........................2
  EXEC SQL OPEN CR1;  .................................3
  EXEC SQL FETCH CR1
     INTO :xscode,:xsname,:xcol,:xtanka,:xzsuryo; .....4
  EXEC SQL UPDATE ZAIKO
      SET TANKA=0.9*:xtanka
      WHERE CURRENT OF CR1; ...........................5
  EXEC SQL CLOSE CR1; .................................6
            :

［説明］

検索，更新，挿入で使用する埋込み変数を宣言します。

カーソルCR1を宣言します。このとき，カーソルCR1を使用して列TANKAだけを更新するので，FOR UPDATE OF 列名を指定します。

カーソルCR1をオープンします。

カーソルCR1が指す行の列TANKAの値を埋込み変数：xtankaに取り出します。

TANKAの値を１割引き（0.9＊:xtanka）します。

カーソルCR1をクローズします。

(2)　カーソルを使用して行を検索しながら更新し，更に行を挿入する例

在庫表（ZAIKO）から，カーソル（CR1）を使用してすべての行を検索しながら更新し，更にカーソル（CR1）を使用しないで行を挿入します。

            :
  EXEC SQL BEGIN DECLARE SECTION;
    char xscode[5];  ....................................1
    char xsname[17]; ....................................1
    char xcol[3];  ......................................1
    int xtanka;  ........................................1
    int xzsuryo; ........................................1
  EXEC SQL END DECLARE SECTION;
            :
  EXEC SQL DECLARE CR1 CURSOR FOR
      SELECT * FROM ZAIKO
        FOR UPDATE;  ....................................2
  EXEC SQL OPEN CR1; ....................................3
  EXEC SQL FETCH CR1
     INTO :xscode,:xsname,:xcol,:xtanka,:xzsuryo; .......4
  EXEC SQL UPDATE ZAIKO
      SET SURYO=:xzsuryo+100
      WHERE CURRENT OF CR1;  ............................5
  EXEC SQL INSERT INTO ZAIKO
      VALUES(:xscode,:xsname,:xcol,:xtanka,:xzsuryo); ...6
  EXEC SQL CLOSE CR1;  ..................................7
            :

［説明］

検索で使用する埋込み変数を宣言します。

カーソルCR1を宣言します。このとき，カーソルCR1を使用して更新し，更にカーソルCR1を使用しないで行を挿入するため，FOR UPDATE句を指定します。

カーソルCR1をオープンします。

カーソルCR1が指す行の値を埋込み変数に取り出します。

SURYOの値に100を加算します。

カーソルCR1を使用しないで，ZAIKO表に行を挿入します。

カーソルCR1をクローズします。

(3)　ホールダブルカーソルを使用した例

在庫表（ZAIKO）から，カーソル（CR1）を使用してすべての行を検索しながら，単価（TANKA）を50％にします。カーソル（CR1）はそのまま閉じないで，カーソル（CR1）を使用した別の操作をします。

            :
  EXEC SQL BEGIN DECLARE SECTION:
    char xscode[5];  .................................1
    char xsname[17]; .................................1
    char xcol[3];  ...................................1
    int xtanka;  .....................................1
    int xzsuryo; .....................................1
  END DECLARE SECTION;
            :
  EXEC SQL LOCK TABLE ZAIKO
      IN EXCLUSIVE MODE UNTIL DISCONNECT;  ...........2
            :
  EXEC SQL DECLARE CR1 CURSOR WITH HOLD FOR
      SELECT * FROM ZAIKO
        FOR UPDATE OF TANKA  .........................3
  EXEC SQL OPEN CR1; .................................4
  EXEC SQL FETCH CR1
     INTO :xscode,:xsname,:xcol,:xtanka,:xzsuryo; ....5
  EXEC SQL UPDATE ZAIKO SET TANKA=0.5*:xtanka
      WHERE CURRENT OF CR1;  .........................6
  <1000行単位に次のCOMMIT文を実行する判定> ...........7
  EXEC SQL COMMIT; ...................................8
  <更新する行がなくなった場合は次のCLOSE文を実行> ....9
  EXEC SQL CLOSE CR1;  ..............................10
            :

［説明］

検索，及び更新で使用する埋込み変数（:xtanka）を宣言します。

ホールダブルカーソルを使用するため，UNTIL DISCONNECT指定のLOCK文でZAIKO表に排他を掛けます。また，カーソルを使用して更新をするので，排他モード（IN EXCLUSIVE MODE）を指定します。

カーソルCR1を宣言します。このとき，宣言するカーソルはホールダブルカーソルなのでWITH HOLDを指定します。また，更新する列はTANKAだけなので，FOR UPDATE OF句に列TANKAを指定します。

カーソルCR1をオープンします。

カーソルCR1が指す行の列TANKAの値を埋込み変数：xtankaに取り出します。

TANKAの値を50％（0.5＊:xtanka）にします。

1000行更新するごとに次のCOMMIT文を実行，又はそうでないときは更新処理を続行するような判定を記述します。

更新処理をコミットします。

更新する行がなくなった場合は次のCLOSE文を実行，又は更新する行がまだある場合は更新処理を続行するような判定を記述します。

カーソルCR1をクローズします。

3.6　SQLのエラーの判定と処置

UAPでSQL文を実行する場合，SQL文が正常に実行されたかを判定する必要があります。

ここでは，SQL文が正常に実行されたかを判定する方法と，エラーを検知した場合の対処方法について説明します。

3.6.1　エラーの判定

(1)　リターンコードの参照

SQL実行時にHiRDBシステムでリターンコード（SQLCODE，及びSQLSTATE）が設定されます。ただし，DECLARE CURSORのような宣言文の場合は，リターンコードが設定されません。リターンコードを参照する場合の変数名称は，次のとおりです。

SQLCODEを参照する場合の変数名称：SQLCODE

SQLSTATEを参照する場合の変数名称：SQLSTATE

SQLCODE変数，及びSQLSTATE変数の設定値を参照することで，SQL文の実行状態が判定できます。

SQL文の実行状態と変数に設定される値の関係を次の表に示します。

表3‒31　SQL文の実行状態と変数に設定される値の関係

SQL文の実行状態

SQLCODE変数の値

SQLWARN0の値

SQLWARN6の値

SQLSTATE変数の値

正常終了

警告なし

0

'△'

−

'00000'

警告付き※４

0

'W'

−

'01nnn'※１

（nnn≠R00）

>0（≠100,110）

−

−

'01R00'

データなし※３

110

−

−

'R2000'

データなし

100

−

−

'02000'

エラー終了

暗黙的ロールバックなし

-1〜-1999

−

'△'

'mmnnn'※２

暗黙的ロールバックあり

-1〜-1999

'W'

'W'

'40nnn'※１

（凡例）

mm：クラス

nnn：サブクラス

−：値は設定されません。

注※1

nnnには，SQLSTATEのサブクラスが設定されます。SQLSTATEについては，マニュアル「HiRDB メッセージ」を参照してください。

注※2

mmには，SQLSTATEのクラスが設定されます。SQLSTATEについては，マニュアル「HiRDB メッセージ」を参照してください。

注※3

リストを使用した検索で，リスト作成時にあった行が返らなかった場合の状態です。

注※4

警告情報の内容は，SQLWARN1〜Fに設定されるか，又はSQLCODEの値（100以外の正数）で示されます。SQLWARN1〜Fに警告情報が設定される場合は，SQLWARN0に'W'が設定されます。SQLWARN0に'W'が設定されている場合，更にSQLWARN1〜Fの領域を確認します。

なお，SQLWARN0〜Fの内容については，「SQL連絡領域」を参照してください。

警告情報の内容をSQLCODEの値（100以外の正数）で示す場合は，SQLSTATEのサブクラス（nnn）がR00になります。警告付き正常終了の場合のSQLSTATE，SQLCODE，及びSQLWARNOの値の関係を次の表に示します。

表3‒32　警告付き正常終了の場合のSQLSTATE，SQLCODE，及びSQLWARNOの値の関係

SQLSTATEの値

SQLCODEの値

SQLWARNOの場合

01nnn（nnn≠R00）

0

‘W’

01R00

100以外の正数

空白，又は’W’

(a)　SQLCODE=100，又はSQLSTATE='02000'の場合

検索する行がなくなったことを判定します。

特に次に示す内容を判定するときに有効です。

FETCH文で取り出す行がなくなった

1行SELECT文で行がなかった

INSERT文，DELETE文，又はUPDATE文で更新対象の行がなかった

(b)　SQLCODE<0，又はSQLSTATE='mmnnn'（mmが'00'，'01'，'02'でない，又はリストを使用した検索の場合はmmが'00'，'01'，'02'，'R2'でない）の場合

SQLエラーが発生したと判定します。

SQLエラーが発生した場合，暗黙的にロールバックされる場合とされない場合があります。SQLWARN6='W'，又はSQLSTATE='40nnn'の場合，暗黙的にロールバックしたと判定します。

なお，エラーが発生したSQLを特定したい場合，SQLトレース情報を参照します。SQLトレース情報の内容については，「SQLトレース機能」を参照してください。

(c)　上記の(a)及び(b)以外の場合

正常終了したと判定します。

正常終了には，警告情報がある場合とない場合があります。SQLWARN0='W'，若しくはSQLCODEが100以上の正の値，又はSQLSTATE='01nnn'の場合，警告付き正常終了と判定します。

リストを使用した検索の場合，データなしの正常終了（リスト作成時にあった行が削除された）の可能性があります。SQLCODEが110，又はSQLSTATEが'R2000'ならば，データなしの正常終了と判断して，検索行に対する処理をスキップする必要があります。

警告付き正常終了の内容については，表「警告付き正常終了の場合のSQLSTATE，SQLCODE，及びSQLWARNOの値の関係」を参照してください。

(2)　エラー検出時の対処

エラーを検知した場合，次に示す1〜4の順番で対処します。

リターンコードを出力，又は表示します。

リターンコードだけではエラーの内容が判別しにくい場合，各コードの付加情報を表示，又は出力します。また，必要に応じて，エラーになったSQL文，又はエラーになったSQL文を識別するための情報を表示します。

リターンコードの付加情報と参照先を次の表に示します。

表3‒33　リターンコードの付加情報と参照先

付加情報

参照先

SQLCODEに対応するメッセージ※

SQL連絡領域中のSQLERRMLフィールド，及びSQLERRMCフィールドの内容

注※

エラーが発生した後に再度FETCH文を実行した場合，HiRDBは前回発生したエラーのリターンコードを返しますが，メッセージの可変部の内容は保証しません。

トランザクションを取り消します（ROLLBACK，又はUAPを異常終了させます）。

デッドロックによって暗黙的にロールバックされたUAPは次のようになります。

通常のUAPの場合：

暗黙的にロールバックされると，次に実行したSQLが新たなトランザクション開始となります（ROLLBACK，又はDISCONNECTもできます）。

OLTP下のUAPの場合：

暗黙的にロールバックされると，OLTP下のUAPからはDISCONNECT，又はROLLBACK以外は受け付けられません。

また，OLTP環境でX/Openに従ったアプリケーションプログラムをクライアントとした場合に，実行したアプリケーションプログラムがデッドロックになったときもトランザクションの終了が必要です。

UAPの終了，又はトランザクションの開始（別のトランザクションの新規実行，又は同じトランザクションの再実行）をします。

なお，同じトランザクションを再実行する場合，実行前にエラーの対策をしてください。エラーの原因が取り除かれない状態でトランザクションを再実行すると，無限ループになることもあります。また，再実行しても同一のエラーが発生するような場合，UAPの終了を考慮する必要があります。

3.6.2　エラーの自動判定

WHENEVER文を使用すると，エラーが発生したかどうか自動的に判定できます。

WHENEVER文では，次に示す内容について判定ができます。

エラーが発生した

検索する行がなくなった

正常終了時の警告情報の有無

なお，WHENEVER文の詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

(1)　エラーが発生した場合の判定（SQLCODE<0）

SQLERRORを指定したWHENEVER文を使用して判定します。

エラーが発生したときに取らなければならない処置を指定することで，エラーが発生したときに指定した処置へ処理を移行します。また，エラーを参照する処理を指定すると，リターンコードと関連する情報を参照できます。

(2)　検索する行がなくなった（SQLCODE=100）

NOT FOUNDを指定したWHENEVER文を使用して判定します。

検索する行がなくなったときに取らなければならない処置を指定することで，検索する行がなくなったときに指定した処置へ処理を移行します。

(3)　正常終了時の警告情報の有無（SQLWARN0='W'，又はSQLCODE>0かつSQLCODE≠100）

SQLWARNINGを指定したWHENEVER文を使用して判定します。

正常終了で警告情報があったときに取らなければならない処置を指定することで，警告情報があるときだけ指定した処置へ処理を移行します。

リストを使用した検索の場合，データなしの正常終了（リスト作成時にあった行が削除された）の可能性があります。SQLCODEが110，又はSQLSTATEが'R2000'ならば，データなしの正常終了と判断して，検索行に対する処理をスキップする必要があります。

4　性能向上，操作性向上に関するUAPの設計

この章では，性能向上及び操作性向上のUAP設計時に考慮する点について説明します。

4.1　インデクス

インデクスを利用すると検索時の入出力回数を削減できます。

インデクスの設計については，マニュアル「HiRDB システム導入・設計ガイド」の「インデクスの設計」を参照してください。

ここでは，インデクス検索時の留意事項，及びHiRDB SQL Tuning Advisorを使ったインデクスの提案，未使用インデクスの調査方法について説明します。

4.1.1　インデクスの提案

HiRDB SQL Tuning Advisorのインデクス提案機能では，SQLに適切なインデクス定義を提案します。次のどちらかの方法でSQLを解析すると，その結果を基にインデクスを検証します。

ダイナミックブラウジング機能によるアクセスパス解析

SQLを直接入力できるため，UAP作成前のインデクス検証で使用します。

アクセスパス情報ファイルからのアクセスパス解析

中間結果情報も含めて検証できるため，環境構築後の性能検証で使用します。

ここでは，HiRDB SQL Tuning Advisorのダイナミックブラウジング機能を使ってSQLを解析し，インデクスを提案させる手順を次に示します。

［スタート］−［プログラム］−［HiRDB SQL Tuning Advisor］−［HiRDB SQL Tuning Advisor］を選択し，HiRDB SQL Tuning Advisorを起動します。

接続の設定を行います。

接続の設定方法については，「HiRDB SQL Tuning Advisorの環境設定」を参照してください。設定済みの場合，この手順は必要ありません。

［ダイナミックブラウジング］ボタンをクリックします。

［ダイナミックブラウジング］画面が表示されます。

［SQL］テキストボックスに，検証したいSQLを入力し，［OK］ボタンをクリックします。

［アクセスパス（ダイナミックブラウジング結果）］画面が表示されます。

そのSQLに性能上の問題がある場合は，［警告内容］にガイダンスが表示されます。

ガイダンスの要因としてインデクスに問題がないかを確認する場合は，［インデクス提案］ボタンをクリックします。

［インデクス提案一覧］画面が表示されます。

既に定義したインデクスには「済」と記載されていますので，「済」の記載がないインデクスについて定義してください。

4.1.2　未使用インデクスの調査

HiRDB SQL Tuning Advisorのアクセスパス集計機能では，未使用インデクスを調査できます。未使用インデクスを調査する手順を次に示します。

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルを取得します。

取得方法については，「HiRDB SQL Tuning Advisor用アクセスパス情報ファイル」を参照してください。検索処理の変更や，表及びインデクス定義を変更した場合は，変更前に取得したアクセスパス情報が，同一ファイルに含まれないようにしてください。

［スタート］−［プログラム］−［HiRDB SQL Tuning Advisor］−［HiRDB SQL Tuning Advisor］を選択し，HiRDB SQL Tuning Advisorを起動します。

接続の設定を行います。

接続の設定方法については，「HiRDB SQL Tuning Advisorの環境設定」を参照してください。設定済みの場合，この手順は必要ありません。

［オプション］メニューから［対象ファイル指定］を選択します。

［対象ファイルの指定］画面が表示されます。

［アクセスパス］タブで，アクセスパスファイル名を指定し，［追加］ボタンをクリックします。

検索処理の変更や，表及びインデクス定義を変更した場合は，変更前に取得したアクセスパス情報ファイルが含まれないようにしてください。追加が完了したら，「OK」ボタンをクリックします。設定済みの場合，この手順は必要ありません。

［アクセスパス集計］ボタンをクリックします。

［アクセスパス集計］画面が表示されます。「未使用のインデクスも表示する」をチェックします。

［OK］ボタンをクリックします。

［アクセスパス集計］画面が表示されます。［Index］タブを表示して，認可識別子で該当する内容を選択すると，インデクスの使用回数が表示されます。使用回数が0件のインデクスが未使用インデクスであることが分かります。

4.1.3　インデクス検索時の留意事項

この項では，インデクスの変更（データの変更に伴うインデクスのメンテナンス処理）の内部動作，及びインデクス検索時のUAPの設計指針について説明します。

インデクスは，探索条件に対する行の絞り込みを効率的に行い，データに対するアクセスや検索結果の返却を高速に行うためのアクセス手段です。

HiRDBは，複数のトランザクションによるインデクス検索と，インデクスの変更を同時に行うことによって，高レスポンス，高スループットのシステムを実現しています。しかし，その反面，インデクス変更の最中にインデクスを使用した検索を行うと，検索結果が変わることがあります。検索結果を変えないために，検索時に検索対象の表に対して排他を掛ける（LOCK TABLE文を実行する）対処方法がありますが，システムの性能要件からこの対処方法が適用できないケースもあります。

このような場合に，複数トランザクションを同時実行し，順序関係に厳密な業務アプリケーションを実行するときは，この項で説明するUAPの設計指針を参考に業務アプリケーションを開発してください。

また，複数列インデクスを構成する列（例えば，ステータスの列など）に対する更新時のインデクス検索についても注意が必要です。

(1)　インデクス変更の内部動作

インデクス構成列の列値変更（UPDATE文）に伴うインデクスの変更は，更新前の列値に対応するインデクスエントリの変更処理，及び更新後の列値に対応するインデクスエントリの変更処理の，二つの処理によって実現します。

ここでの更新前の列値に対応するインデクスエントリの変更とは，対応するインデクスキーがある行データが一つの場合，インデクスキーの削除を示します。更新後の列値に対応するインデクスエントリの変更とは，対応するインデクスキーがある行データが一つの場合，インデクスキーの追加を示します。また，これらの処理をインデクスキーの削除，インデクスキーの追加の順に実行します。これは，インデクスの変更時にインデクス容量の増加を抑えるためです。

インデクス変更の内部動作の例を次の図に示します。

図4‒1　インデクス変更の内部動作の例

[説明]

インデクスを定義している列をBからKに更新するトランザクションが実行します。

まず，1で更新トランザクションが更新前の列値に対応するインデクスキーBを削除します。

その後，2で更新後の列値に対応するインデクスキーKを追加します。

(2)　インデクス検索時の検索結果

インデクスの変更の最中にインデクス検索を行うと，検索結果が変わるケースがあります。具体的には，次の二つのケースがあります。

更新中の行が検索対象外となる。

更新対象の行が複数回検索結果に現れる。

(a)　更新中の行が検索対象外となる

更新中の行が検索対象外となるケースについて説明します。

インデクス検索が終了していない範囲から，終了した範囲へのインデクス更新

UPDATE文によって，インデクス検索が終了していない範囲から，終了した範囲へインデクスキーを更新すると，そのインデクスキーは検索対象外となります。

更新中の行が検索対象外となる例を次の図に示します。

図4‒2　更新中の行が検索対象外となる例（その1）

[説明]

インデクスを定義している列をKからDに更新するトランザクションと，インデクスを検索するトランザクションが同時に実行します。

インデクス検索は，1〜3でキーJに対する検索まで終了しています。

キーKを検索する時点で，更新トランザクションが4でキーKを削除，5でキーDを追加するため，対応する行は検索対象外となります。

[補足]

インデクス検索の探索条件がインデクスキー全体（複数列インデクスの場合，すべての構成列に対する探索条件）の場合，検索対象行がUPDATE文によって探索条件から外れるため問題はありません。ただし，複数列インデクスで変更列以外の構成列に対する列を探索条件とした場合，業務によっては問題となるおそれがあります。この場合の対処方法については，「UAPの設計指針」を参照してください。

インデクス検索が終了した範囲へのインデクスキー追加

インデクス検索より先にINSERT文を実行しても，インデクス検索が終了した範囲へインデクスキーを追加すると，そのインデクスキーは検索対象外となります。

更新中の行が検索対象外となる例を次の図に示します。

図4‒3　更新中の行が検索対象外となる例（その2）

[説明]

インデクスを定義している列がDの行を追加するトランザクションと，インデクスを検索するトランザクションが同時に実行します。

HiRDB内部の変更タイミングとして，更新トランザクションが4でキーDを追加する時点で，既にインデクス検索は3でキーJに対する検索まで終了しています。結果として，追加されたキーDに対応する行は検索対象外となります。

[補足]

更新中の行が検索対象外となるために，データ操作に対して順序関係の厳密さを必要とする業務によっては問題となるおそれがあります。この場合の対処方法については，「UAPの設計指針」を参照してください。

UPDATE文に伴うインデクスキーの変更

インデクスの変更の際，インデクスキーを削除した時点でインデクス検索が行われた場合，対応する行は検索対象外となります。

更新中の行が検索対象外となる例を次の図に示します。

図4‒4　更新中の行が検索対象外となる例（その3）

[説明]

インデクスを定義している列の値をDからEに更新するトランザクションと，インデクス検索を行うトランザクションが同時に実行します。

更新トランザクションが1でキーDを削除した時点で，検索トランザクションは2でキーB，3でキーCの検索を終了しています。このため，4でのキーEの追加に対応する行は，検索対象外となります。

[補足]

更新前のインデクスキーと，更新後のインデクスキーが同じ場合，インデクスの変更は行いません。ただし，次のどれかの条件を満たす場合は，インデクスの変更（インデクスキーの削除及び追加）を行います。

・定義長256バイト以上の可変長文字列型の列を構成列に持つインデクス

・繰返し列を構成列に持つインデクス

・部分構造インデクス

インデクス検索の探索条件がインデクスキー全体の場合，検索対象行がUPDATE文によって探索条件から外れるため問題はありません。ただし，複数列インデクスで変更列以外の構成列に対する列を探索条件とした場合，業務によっては問題となるおそれがあります。UPDATE文に伴うインデクスキーの変更によって検索されなくなる例を次の図に示します。

図4‒5　UPDATE文に伴うインデクスキーの変更によって検索されなくなる例

[説明]

商品コード104の商品が100個入荷されたので，在庫数に100を加算します。

SCODE，SNAME，及びZSURYOで構成される複数列インデクスを利用して検索します。この場合，1で更新中の行は検索対象にならないため，検索結果に含まれません。

この場合の対処方法については「UAPの設計指針」を参照してください。

(b)　更新対象の行が複数回検索結果に現れる

更新対象の行が複数回検索結果に現れるケースについて説明します。

インデクス検索が終了した範囲から，終了していない範囲へのインデクス更新

排他オプションにWITHOUT LOCK WAITを指定した場合，トランザクション完了までの検索結果は保証されないため，タイミングによって更新対象の行が検索結果として複数回現れることがあります。排他オプションにWITHOUT LOCK NOWAITを指定した場合も同様です。具体的には，UPDATE文によってインデクス検索が終了した範囲から，終了していない範囲へインデクスキーを更新すると，そのインデクスキーは再度検索されます。

更新対象の行が複数回検索結果に現れる例を次の図に示します。

図4‒6　更新対象の行が複数回検索結果に現れる例

[説明]

インデクスを定義している列をBからKに更新するトランザクションと，インデクスを検索するトランザクションが同時に実行します。

1でキーBを検索する時点で，排他オプションの指定によって排他が解除されているため，更新トランザクションは対応行を更新できます。

検索トランザクションが5でキーJを検索する前に，更新トランザクションが対応行を更新（3でのキーBの削除，及び4でのキーKの追加）したため，6でのキーKの検索によって，対応する更新行が検索結果に2回現れます。

[補足]

統計情報など，厳密さを必要としないデータの検索結果として扱う場合は問題ありませんが，検索結果がその後の業務処理に影響を及ぼすような厳密さを必要とする場合は，問題となるおそれがあります。この場合の対処方法については，「UAPの設計指針」を参照してください。

(3)　インデクス検索の動作

INSERT文，UPDATE文，及びDELETE文実行中にインデクスを検索した場合，検索結果が変わるケースが発生する可能性を，次の表に示します。

表4‒1　検索結果が変わるケースが発生する可能性

後続処理（インデクスを使用した検索）

先行処理

INSERT文

UPDATE文

DELETE文

SELECT文

×

×※

○

UPDATE文

×

×

○

DELETE文

×

×

○

（凡例）

○：検索結果は変わりません。

×：検索結果が変わる（検索対象外となる）可能性があります。

注※

排他オプションWITHOUT LOCK WAIT又はWITHOUT LOCK NOWAITの場合，更新対象の行が複数回検索結果に現れる可能性があります。

INSERT文ではインデクスを使用した検索は行わないため，後続処理としてINSERT文で発生する可能性はありません。

なお，更新対象の行が複数回検索結果に現れるかどうかは，更新前後のインデクスキー値の変化に依存します。更新トランザクションがインデクスを更新したときの，インデクスキー値の変化の方向と，検索トランザクションのインデクス検索方向が一致する場合，次に示す表のように，複数回検索結果に現れる可能性があります。

インデクス検索方向

UPDATE文によるインデクスキー値の変化

インデクスキー値が大きくなる

インデクスキー値が小さくなる

インデクスキー値が同じ（同値更新）

昇順

（キー値の大きい方向）

×

○

○

降順

（キー値の小さい方向）

○

×

○

（凡例）

○：検索結果は変わりません。

×：検索結果が変わる（複数回検索結果に現れる）可能性があります。

(4)　UAPの設計指針

複数トランザクションを同時に実行する場合で，順序関係に厳密さを必要とする業務アプリケーションを開発するときは，UAPが表に対する排他を取得することで，インデクスの変更とインデクス検索をシリアライズする必要があります。ただし，性能面で影響がある場合には，次の対処を検討してください。

インデクス構成列に更新項目を含めないようにしてください。

検索頻度，条件などでインデクス構成列に更新項目を含めなければならない場合は，更新項目以外のインデクス構成列を探索条件としたインデクス検索で，業務上の問題が発生しないかどうか確認してください。問題が発生する場合には，その探索条件でこのインデクスを検索に使用しないようにしてください。

2.が採用できない場合は，UAPで検索結果に対する再チェック処理を組み込んでください。

4.2　表に対する操作

4.2.1　FIX属性の表

FIX属性の表は，行が固定長なので，1行を一つの列とみなした操作など，表の列数が多いほど有効です。

行単位で操作をする場合，列単位で操作する場合と比較して次に示す特長があります。

処理時間が短い。

処理する列数が増えても処理時間に影響しない。

1行分のデータを1個のデータとして受け渡しができるため，UAPの作成や保守がしやすい。

FIX属性の表に対する次の操作では，行単位で操作をした方が処理効率が向上します。

すべての列，又はほとんどの列を検索する場合

すべての列，又はほとんどの列を更新する場合

データを挿入する場合

なお，一つの行全体が操作の対象なので，表に列を追加したときは，データを受け渡す埋込み変数も宣言し直してください。

FIX属性の表は，可変長の列やナル値の列がないことが条件になります。しかし，列数が多いなど，1行を一つの列とみなした操作をした方が効率が良い場合，次に示す方法で可変長の列やナル値の列をなくすことを検討してください。

定義長の小さい可変長データ，及び実長の取り得る範囲が狭いデータを固定長にする。

ナル値をほかの値（例えば，数データの場合は0，文字データの場合は空白）で代用する。

4.2.2　採番業務で使用する表

採番業務では次の2種類の方法で採番できます。

WITHOUT ROLLBACKオプション指定の表での採番

自動採番機能

ここでは，WITHOUT ROLLBACKオプション指定の表での採番について説明します。自動採番機能については，「自動採番機能」を参照してください。

(1)　どのようなときに使用するか

実際の業務では，伝票番号や書類の番号の管理など，様々な採番業務があります。採番業務では，あるユーザが伝票番号を取得しようとしたとき，それと同時に他ユーザも伝票番号を取得しようとするケースが考えられます。

また，あるユーザが伝票番号を取得しようとしたときには，ほかのユーザが以前に取得した伝票番号と重複しないように，番号をカウントアップしておく必要があります。

このようなケースでは，あるユーザが伝票番号の取得処理中に，他ユーザが待ち状態になる可能性があります。このようなことを考慮し，HiRDBでは，排他待ちの影響を少なくして，採番業務をするための機能を提供しています。

(2)　表の設計

採番業務を効率良く実施するため，排他待ちの影響が少なくなるように表を設計する必要があります。採番を管理する表への排他の影響を少なくするために，トランザクションのコミットを待たないで表への更新（追加，削除を含む）処理が完了した時点で，その行への排他を解除し，それ以降はロールバックされなくなるという機能を提供しています。この機能を実現するためには，表の設計者が，表定義時にCREATE TABLEのWITHOUT ROLLBACKオプションを指定する必要があります。

(3)　業務への適用条件

WITHOUT ROLLBACKオプションを指定して行う採番は，欠番を許容できない業務には適していません。番号が連続でなくてもよい場合に適用するようにしてください。欠番は次に示す場合に発生します。

表定義時にWITHOUT ROLLBACKオプションを指定した表の行を更新したトランザクションがROLLBACK文やSQL実行中のエラーによりロールバックした場合，取得した番号を使用した業務の表に対してはロールバックされます。この場合，整合性が保たれますが，取得した番号はロールバックされません。このため，ロールバックしたトランザクションで取得した値はHiRDBシステム内で使われずに次の番号が取得され，欠番となります。

また，表定義時にWITHOUT ROLLBACKオプションを指定した表の行を更新したトランザクションが完了する前にHiRDBシステムが異常終了した場合，HiRDBシステムの再開始後に採番した値が戻るときがあります。

採番した値をHiRDBシステム内に閉じて使用する場合，採番した値が戻っても，その値を使用したトランザクションもロールバックするため，HiRDBシステム内で一意性が保てます。HiRDBシステム外で使用する場合は採番した値が戻ると一意性が保てなくなります。HiRDBシステム外で使用する場合は，更新するSQL文にWRITE IMMEDIATEオペランドを指定してください。WRITE IMMEDIATEオペランドを指定すると，HiRDBシステムが異常終了しても値が戻りません。ただし，WRITE IMMEDIATEオペランドを指定すると1行の更新ごとにシステムログの書き出しが行われ，その書き出し時間がSQLの実行時間に加算されます。

(4)　採番を管理する表の例

採番を管理する表の例を次の図に示します。

図4‒7　採番を管理する表の例

注

表の定義例（WITHOUT ROLLBACKオプションの指定）については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

(5)　採番業務のアプリケーションプログラムの例

採番業務のアプリケーションプログラムの例を次に示します。なお，採番管理表と業務表を操作するアプリケーションプログラムは同一トランザクションを想定します。

（例）

伝票番号と書類番号を管理する採番管理表があるものとします。採番管理表から，最新の伝票番号を取得し，それを業務で使用するSQLの例を次に示します。

  INSERT INTO 採番管理表 VALUE('伝票番号',1)  ....1

                :

  DECLARE CUR1 CURSOR FOR  .......................2
    SELECT 採番 FROM 採番管理表
      WHERE 種類='伝票番号' FOR UPDATE OF 採番
  OPEN CUR1  .....................................3
  FETCH CUR1 INTO :x_採番  .......................4
  UPDATE 採番管理表 SET 採番=:x_採番+1  ..........5
      WHERE CURRENT OF CUR1
  CLOSE CUR1  ....................................6

                :

  取得した番号を利用した業務表へのアクセス処理  ..7

                :

［説明］

採番管理表に，伝票番号の初期値として1を挿入します。

採番管理表から最新の伝票番号を検索する，カーソルCUR1を宣言します。

カーソルCUR1をオープンします。

伝票番号をx_採番に取り出します。

次に検索するユーザのために，採番をカウントアップします（最新の採番にするため）。この処理が終了した時点で，コミットを待たないで行への排他を解除します。

カーソルCUR1をクローズします。

x_採番に取り出した伝票番号を基に，ユーザ任意の業務を実施します。

なお，採番ごとに3〜7を繰り返します。

(6)　複数種類の採番を管理するときの考慮点

(a)　排他について

WITHOUT ROLLBACKオプションを指定した表に複数の行を格納する場合，その表にインデクスを定義していないときは，すべての行が検索対象となるため，すべての行に対して一時的に排他が掛かります。このような場合，例えば，伝票番号の採番処理と書類番号の採番処理との間で，排他待ちになることがあります。これを回避するためには，クライアント環境定義のPDLOCKSKIPにYESを指定して，無排他条件判定をする必要があります。無排他条件判定をした場合には，検索処理時には排他を掛けないで，探索条件を満たした行に対してだけ排他を掛けます。

(b)　ロールバックについて

複数種類の採番を扱う場合，1回のSQLで複数行を更新するような処理はしないでください。排他の解除，及びロールバックがされなくなるタイミングが各行単位に，それぞれの行の更新処理が完了した時点となります。そのため，複数行を更新するUAPが異常終了すると，一部の行の更新がロールバックされない場合があります。

(7)　ストアドプロシジャを使用した採番の例

採番業務では，ある決まったパターンで処理することが多いため，その処理をストアドプロシジャとして登録しておくと便利です。

表の定義例，ストアドプロシジャの例を例1〜例3に示します。

（例1）

WITHOUT ROLLBACK指定の表と，ストアドプロシジャを使用して，順序番号を割り当てます。

初期値1，増分値1でINTEGERの最大値までの値を採番します。

INTEGERの最大値を超えた場合は，オーバフローのエラーが返されます。ただし，既定値設定機能（PDDFLNVAL）使用時はオーバフローのエラーにはならないで，ナル値となるため，非ナル値制約違反のエラーとなります。また，初期値を持つ行が挿入されていない場合，表中に行がない状態になるため，UPDATE文実行時にカーソルが行に位置づけられていないというエラーになります。複数行が挿入されている場合には，2行目以降は無視されます。

CREATE FIX TABLE
    owner_id.sequence_tbl(sequence_no INTEGER NOT NULL)
    WITHOUT ROLLBACK;  .......................................1
CREATE PROCEDURE owner_id.nextval(OUT next_no INTEGER)
  BEGIN
    DECLARE update_no INTEGER;  ..............................2
    DECLARE cr1 CURSOR FOR
      SELECT sequence_no FROM owner_id.sequence_tbl
        FOR UPDATE;
    OPEN cr1;
    FETCH cr1 INTO update_no;  ...............................3
    SET next_no=update_no;  ..................................4
    UPDATE owner_id.sequence_tbl SET sequence_no=update_no+1
      WHERE CURRENT OF cr1;  .................................5
    CLOSE cr1;  ..............................................3
  END  .......................................................2
COMMIT WORK;  ................................................6
INSERT INTO owner_id.sequence_tbl(sequence_no) VALUES(1);  ...7
COMMIT WORK;  ................................................8

<順序番号の割り当て>  ........................................9
CALL owner_id.nextval(OUT:xnext_no);
                :
割り当てた順序番号xnext_noを使用した処理
                :
CALL owner_id.nextval(OUT:xnext_no);
                :

［説明］

INTEGERの値を採番するための表owner_id.sequence_tblを定義します。

順序番号を割り当てて，パラメタnext_noで出力する手続きowner_id.nextvalを定義します。

表owner_id.sequence_tblの列sequence_noを検索します。

検索した値をパラメタnext_noに設定します。

表owner_id.sequence_tblの列sequence_noに増分値1を加えた値に更新します。

表と手続きの定義を有効にするため，トランザクションをコミットします。

INSERT文で，初期値1を持つ行をあらかじめ挿入しておきます。

挿入した行を有効にするため，トランザクションをコミットします。

手続きowner_id.nextvalをCALL文で呼び出し，順序番号を割り当て，パラメタnext_noで値を取得します。CALL文を実行するごとに次の順序番号が割り当てられます。

（例2）

WITHOUT ROLLBACK指定の表と，ストアドプロシジャを使用して，2種類以上の順序番号を割り当てます。

順序番号を識別するキーごとに，初期値1，増分値1でINTEGERの最大値までの値を採番します。

INTEGERの最大値を超えた場合は，オーバフローのエラーが返されます。ただし，既定値設定機能（PDDFLNVAL）使用時はオーバフローのエラーにはならないで，ナル値となるため，非ナル値制約違反のエラーとなります。また，順序番号を識別するために指定したキー値に対して，初期値を持つ行が挿入されていない場合，表中に行がない状態になるため，UPDATE文実行時にカーソルが行に位置づけられていないというエラーになります。順序番号を識別するために指定したキー値に対して，複数行が挿入された場合には2行目以降は無視されます。

注1

WITHOUT ROLLBACK指定の表には，インデクスを定義できません。排他の競合を防ぐためにクライアント環境定義のPDLOCKSKIP=YESを指定する必要があります。

注2

WITHOUT ROLLBACK指定の表には，インデクスを定義できないので，順序番号の種類が非常に多い場合は表及び手続きを分けてください。

CREATE FIX TABLE
    owner_id.sequence_tbl(sequence_key CHAR(30) NOT NULL,
                          sequence_no INTEGER  NOT NULL)
    WITHOUT ROLLBACK;  ..........................................1
CREATE PROCEDURE owner_id.nextval(IN input_key CHAR(30),
                                  OUT next_no INTEGER)
  BEGIN
    DECLARE update_no INTEGER;  .................................2
    DECLARE cr1 CURSOR FOR
      SELECT sequence_no FROM owner_id.sequence_tbl
        WHERE sequence_key=input_key FOR UPDATE OF sequence_no;
    OPEN cr1;
    FETCH cr1 INTO update_no;  ..................................3
    SET next_no=update_no;  .....................................4
    UPDATE owner_id.sequence_tbl SET sequence_no=update_no+1
      WHERE CURRENT OF cr1;  ....................................5
    CLOSE cr1;  .................................................3
  END  ..........................................................2
COMMIT WORK;  ...................................................6
INSERT INTO owner_id.sequence_tbl(sequence_key,sequence_no)
    VALUES('key_value_1',1);  ...................................7
COMMIT WORK;  ...................................................8
INSERT INTO owner_id.sequence_tbl(sequence_key,sequence_no)
    VALUES('key_value_2',1);  ...................................7
COMMIT WORK;  ...................................................8
       :
（順序番号の種類数分，初期値の行を挿入します）

<'key_value_1'の順序番号の割り当て>  ............................9
xinput_key <-- 'key_value_1'
CALL owner_id.nextval(IN:xinput_key,OUT:xnext_no);
                  :
'key_value_1'に対して割り当てた順序番号xnext_noを使用した処理
                  :
xinput_key <-- 'key_value_1'
CALL owner_id.nextval(IN:xinput_key,OUT:xnext_no);
                  :

<'key_value_2'の順序番号の割り当て>  ............................9
xinput_key <-- 'key_value_2'
CALL owner_id.nextval(IN :xinput_key,OUT:xnext_no);
                  :
'key_value_2'に対して割り当てた順序番号xnext_noを使用した処理
                  :
xinput_key <-- 'key_value_2'
CALL owner_id.nextval(IN:xinput_key,OUT:xnext_no);
                  :

［説明］

順序番号を識別するキーごとに，INTEGERの値を採番するための表owner_id.sequence_tblを定義します。

順序番号を識別するキーをパラメタinput_keyで入力し，そのキーに対して順序番号を割り当てて，パラメタnext_noで出力する手続きowner_id.nextvalを定義します。

表owner_id.sequence_tblの列sequence_keyに対して順序番号を識別するキーを指定して，列sequence_noを検索します。

検索した値をパラメタnext_noに設定します。

表owner_id.sequence_tblの列sequence_noを増分値1を加えた値に更新します。

表と手続きの定義を有効にするため，トランザクションをコミットします。

順序番号を識別するキーごとに，INSERT文で初期値1を持つ行をあらかじめ挿入しておきます。

挿入した行を有効にするため，トランザクションをコミットします。

手続きowner_id.nextvalをCALL文で呼び出し，順序番号を割り当て，パラメタnext_noで値を取得します。CALL文を実行するごとに次の順序番号が割り当てられます。

（例3）

WITHOUT ROLLBACK指定の表と，ストアドプロシジャを使用して，最小値と最大値の間の値を循環させて順序番号を割り当てます。

初期値を持つ行が挿入されていない場合，表中に行がない状態になるため，UPDATE文実行時にカーソルが行に位置づけられていないというエラーになります。また，複数行が挿入されている場合には，2行目以降は無視されます。

CREATE FIX TABLE
     owner_id.sequence_tbl(sequence_no INTEGER NOT NULL)
     WITHOUT ROLLBACK;  .........................................1
CREATE PROCEDURE owner_id.nextval(OUT next_no INTEGER)
  BEGIN
    DECLARE update_no INTEGER;  .................................2
    DECLARE cr1 CURSOR FOR
      SELECT sequence_no FROM owner_id.sequence_tbl FOR UPDATE;
    OPEN cr1;
    FETCH cr1 INTO update_no;  ..................................3
    SET next_no=update_no;  .....................................4
    IF update_no=2147483647 THEN
      SET update_no=-2147483648;
    ELSE
      SET update_no=update_no+1;
    END IF;  ....................................................5
    UPDATE owner_id.sequence_tbl SET sequence_no=update_no
      WHERE CURRENT OF cr1;  ....................................6
    CLOSE cr1;  .................................................3
  END  ..........................................................2
COMMIT WORK;  ...................................................7
INSERT INTO owner_id.sequence_tbl(sequence_no)VALUES(1);  .......8
COMMIT WORK;  ...................................................9

<順序番号の割り当て>  ...........................................10
CALL owner_id.nextval(OUT:xnext_no);
                :
割り当てた順序番号xnext_noを使用した処理
                :
CALL owner_id.nextval(OUT:xnext_no);
                :

［説明］

INTEGERの値を採番するための表owner_id.sequence_tblを定義します。

表owner_id.sequence_tblの列sequence_noを，増分値1，最小値−2,147,483,648，最大値2,147,483,647で，最大値の次の値が最小値となるように値を循環させて順序番号を割り当てる手続きowner_id.nextvalを定義します。

表owner_id.sequence_tblの列sequence_keyを検索します。

検索した値をパラメタnext_noに設定します。

検索した値が最大値2,147,483,647ならば，最小値−2,147,483,648を順序番号の次の値とし，そうでなければ増分値1を加えた値を順序番号の次の値とします。

表owner_id.sequence_tblの列sequence_noを順序番号の次の値に更新します。

表と手続きの定義を有効にするため，トランザクションをコミットします。

INSERT文で，初期値1を持つ行をあらかじめ挿入しておきます。

挿入した行を有効にするため，トランザクションをコミットします。

手続きowner_id.nextvalをCALL文で呼び出し，順序番号を割り当て，パラメタnext_noで値を取得します。CALL文を実行するごとに次の順序番号が割り当てられます。

4.2.3　文字集合を使用した表

文字集合を定義すると，表の列ごとに異なる文字集合の文字列データを格納できます。

(1)　文字集合を指定した文字列データの受け渡し

文字集合を指定した文字列データを受け渡す場合の例について説明します。

（例）

表T1の列C2（文字集合EBCDIK）を検索します。表T1，及び検索SQLを次に示します。

表T1は，次のように定義されています（下線部分が文字集合指定です）。

CREATE TABLE T1
  (C1 INT, C2 CHAR(30) CHARACTER SET EBCDIK)

検索SQLは次のようになります。

＜埋込み変数の宣言＞

char DATA[31];
    ：
SELECT C2 FROM T1
  WHERE C2 = :DATA

この場合のデータの受け渡しの流れを次の図に示します。

図4‒8　文字集合を指定した文字列データの受け渡し

［説明］

列C2の文字集合の情報がディクショナリ表から取得され，SQLオブジェクトに格納されます。

文字集合名記述領域※にC2の文字集合名が設定されます。

入力変数の文字集合と文字集合名記述領域に設定された文字集合が異なる場合，変換して代入されます。

出力変数の文字集合と文字集合名記述領域に設定された文字集合が異なる場合，変換して格納されます。

注※

UAP実行時に動的に決定した変数(DATA)の文字集合名の情報を記述した領域のことです。文字集合名記述領域の内容を介して，次の処理が行われます。

クライアント側で指定した変数の文字集合名情報をHiRDBサーバに通知する

HiRDBサーバで前処理したSQL文の検索項目や，？パラメタの文字集合名情報をクライアント側で受け取る

文字集合名記述領域については，「文字集合名記述領域」を参照してください。

(2)　文字コード変換

クライアントとサーバの文字集合が異なる場合，サーバ側で文字コードを変換します。クライアントとサーバの両方が既定文字集合の場合，文字コード変換はしません。ただし，クライアント環境定義のPDCLTCNVMODEの指定がある場合は，それに従って変換します。

文字集合の定義の有無と，クライアントとサーバ間での文字コード変換について次の表に示します。

表4‒2　クライアントとサーバ間での文字コード変換

クライアント側の文字コード

サーバ側の文字コード

SJIS

UJIS

UTF-8，IVS対応UTF-8

LANG-C

CHINESE

CHINESE-GB18030

なし

EK

なし

なし

U16

なし

なし

なし

SJIS

なし

−

SVR

CLT

CLT

C-S

△

×

×

EK

SVR

−

×

×

×

×

×

×

UJIS

なし

×

×

−

×

×

△

×

×

UTF-8

なし

×

×

×

−

SVR

△

×

×

U16C

×

×

×

SVR

−※

×

×

×

UCS-2

なし

×

×

CLT

CLT

C-S

×

×

×

LANG-C

なし

−

SVR

−

−

SVR

−

−

−

CHINESE

なし

×

×

×

×

×

△

−

×

CHINESE-GB18030

なし

×

×

×

×

×

×

×

−

（凡例）

なし：文字集合を定義していません。

EK：文字集合にEBCDIKを定義しています。

U16：文字集合にUTF16を定義しています。

U16C：文字集合にUTF16，UTF-16LE，UTF-16BEのどれかを定義しています。

SVR：サーバ側で文字コード変換をします。

CLT：クライアント側で文字コード変換をします（クライアント環境定義PDCLTCNVMODEで変換を指定）。

C-S：クライアント側でサーバ側の文字コード変換をして（クライアント環境定義PDCLTCNVMODEで変換を指定），サーバ側で文字集合の文字コード変換をします。

−：文字コード変換が不要です。

△：文字コード変換が不要です。ただし，クライアント環境定義PDCLTCNVMODEにNOUSEを指定している場合は文字コード変換をします（全角文字は変換しません）。

×：文字コード変換ができません。

注※

クライアント側の文字コードとサーバ側の文字コードのエンディアンが異なる場合，エンディアン変換をします。

(a)　ODBC対応アプリケーションプログラム，又はADO.NET対応アプリケーションプログラムからのアクセス

ODBC対応アプリケーションプログラム，又はADO.NET対応アプリケーションプログラムからのアクセスの場合も，表「クライアントとサーバ間での文字コード変換」の変換規則に従います。

ただし，次に示すクライアントのバージョンでは文字集合名記述領域をそれぞれ仮定します。

クライアントのバージョンが08-05より前の場合

文字集合名記述領域なしと仮定して，表「クライアントとサーバ間での文字コード変換」の変換規則に従います。

クライアントのバージョンが08-05以降の場合

クライアントの文字コードがUCS-2で，サーバ側の文字コードがUTF-8の場合，文字集合名記述領域はUTF-16LEを仮定して，表「クライアントとサーバ間での文字コード変換」の変換規則に従います。

(b)　OLE DB対応アプリケーションプログラム，又はType2 JDBCドライバを使用するJDBC対応アプリケーションプログラムからのアクセス

文字集合名記述領域なしと仮定して，表「クライアントとサーバ間での文字コード変換」の変換規則に従います。

(c)　Type4 JDBCドライバを使用するJDBC対応アプリケーションプログラムからのアクセス

クライアントのバージョンが08-05より前，又はサーバ側の文字コードがUTF-8以外の場合

JDBCドライバが，Java仮想マシンによって提供されるエンコーダを利用してサーバ側の文字コードに変換します。サーバ側に文字集合の指定がある場合は，サーバ側で文字集合の文字コードに変換します。

クライアントのバージョンが08-05以降，かつサーバ側の文字コードがUTF-8の場合

サーバ側に文字集合UTF16の指定がある場合は，UTF-16BEでサーバとデータの受け渡しをします。サーバ側に文字集合UTF16の指定がない場合は，Java仮想マシンによって提供されるエンコーダを利用してUTF-8に変換します。

4.3　ストアドプロシジャ，ストアドファンクション

ストアドプロシジャ，ストアドファンクションの定義方法について説明します。

ストアドプロシジャ，ストアドファンクションを定義する場合，事前に必要なRDエリアを作成しておいてください。ストアドプロシジャ及びストアドファンクションの運用については，マニュアル「HiRDB システム運用ガイド」を参照してください。

ストアドプロシジャ，ストアドファンクションは，処理手続きをSQL，Java，又はC言語で記述できます。SQLで記述したものを，SQLストアドプロシジャ，SQLストアドファンクション，Javaで記述したものを，Javaストアドプロシジャ，Javaストアドファンクション，C言語で記述したものを，Cストアドプロシジャ，Cストアドファンクションといいます。

また，ストアドプロシジャとストアドファンクションを総称して，ストアドルーチンといいます。さらに，すべての利用者を示すPUBLICを所有者として定義するストアドルーチンをパブリックルーチンといいます。

Javaストアドプロシジャ，Javaストアドファンクションについては，「Javaストアドプロシジャ，Javaストアドファンクション」を参照してください。Cストアドプロシジャ，Cストアドファンクションについては，「Cストアドプロシジャ，Cストアドファンクション」を参照してください。

注意事項

SQLストアドプロシジャ，SQLストアドファンクション実行中にエラーが発生した場合は，エラーが発生した時点でSQLストアドプロシジャ，SQLストアドファンクションの処理を終了します（SQLストアドプロシジャ，SQLストアドファンクションの制御から抜けます）。したがって，SQLストアドプロシジャ，SQLストアドファンクション中にはエラー処理を記述できません。

4.3.1　ストアドプロシジャの定義

ストアドプロシジャは，SQLで記述した一連のデータベース処理手続きを，手続きとしてデータベースに登録しておく機能です。

(1)　SQLストアドプロシジャの効果

データベースを操作する場合，FETCH文で検索し，データの有無によってUPDATE文，又はINSERT文の発行を繰り返すと，クライアントとサーバ間のオーバヘッドが増大します。このようなデータベースアクセス処理を手続き（プロシジャ）として定義しておくと，CALL文で手続きを呼び出すだけで，一連の処理を実行できるため，クライアントサーバ間のデータの受渡しなどオーバヘッドの抑制が図れます。また，手続き中のSQL文はコンパイルされた形式（SQLオブジェクト）でサーバ側に登録されているため，処理を共用化できる以外に，SQL解析のオーバヘッドも削減できます。

SQLストアドプロシジャの効果を次の図に示します。

図4‒9　SQLストアドプロシジャの効果

(2)　SQLストアドプロシジャの定義と実行

SQLストアドプロシジャは，CREATE PROCEDURE又はCREATE TYPE実行時に手続きがデータベースに登録され，DROP PROCEDURE実行時に削除されます。

登録した手続きは，CALL文で呼び出して実行します。

SQLオブジェクトが無効になっている手続きがある場合は，ALTER PROCEDURE又はALTER ROUTINEで手続きを再作成することもできます。

また，既にSQLストアドプロシジャがある場合には，pddefrevコマンドを実行すれば，既にあるSQLストアドプロシジャの定義系SQLを作成できます。処理が似ているSQLストアドプロシジャを新たに作成するときに使用すると便利です。pddefrevコマンドについては，マニュアル「HiRDB コマンドリファレンス」を参照してください。

SQLストアドプロシジャの定義と実行を次の図に示します。

図4‒10　SQLストアドプロシジャの定義と実行

パブリックプロシジャ

他ユーザが定義したストアドプロシジャを使用する場合は，UAP中からストアドプロシジャを呼び出すときに，所有者の認可識別子とルーチン識別子を指定する必要があります。しかし，CREATE PUBLIC PROCEDUREを実行してパブリックプロシジャとして定義すると，他ユーザが定義したストアドプロシジャを使用する場合でも，UAP中からストアドプロシジャを呼び出すときに，所有者の認可識別子を指定する必要がなくなります（ルーチン識別子だけ指定します）。

(3)　SQLストアドプロシジャの例

SQLストアドプロシジャの例として，複数のSQL文と，それらを制御する文（ルーチン制御SQL）を組み合わせて一つの手続き（プロシジャ）として定義する例とそれを呼び出して実行する例を次の図に示します。

図4‒11　SQLストアドプロシジャの例

[説明]

手続きの名前とSQLパラメタの定義

複合文の開始

SQL変数の宣言

文の繰り返しの指定

文の途中終了の指定

条件分岐の指定

値の代入の指定

条件分岐の終了

文の繰り返しの終了

複合文の終了

手続きの呼び出し

注1

各SQL文については，マニュアル「HiRDB SQLリファレンス」を参照してください。

注2

この例では，entrydateでソートするためにカーソル宣言のSELECT句に選択項目としてentrydateを指定しています。ただし，この値は参照しないため，FETCH文では対応する埋込み変数を省略して，entrydateの値は取り出しません。

(4)　SQLストアドプロシジャのデバッグ

SQLストアドプロシジャのデバッグをする場合，参照するSQL変数，SQLパラメタなどを，ルーチン制御SQLのWRITE LINE文を使用してクライアント側のファイルに出力して行います。WRITE LINE文については，マニュアル「HiRDB SQLリファレンス」を参照してください。

SQLストアドプロシジャ中にWRITE LINE文を記述する例を次に示します。

 CREATE PROCEDURE proc_1 (IN fromdate date, IN todate date)
   BEGIN
     :
     :
     WRITE LINE ‘fromdate=’||char(fromdate);   ..........................1
     WRITE LINE ‘todate=’||char(todate);   ..............................2
     :
     :

[説明]

SQLパラメタ「fromdate」の値を文字列に変換して，ファイルに出力する指定です。

SQLパラメタ「todate」の値を文字列に変換して，ファイルに出力する指定です。

WRITE LINE文を記述したSQLストアドプロシジャから，WRITE LINE文の値式の値をクライアント側のファイルに出力する場合，クライアント環境定義PDWRTLNFILSZを設定し，UAPからSQLストアドプロシジャを呼び出します。例を次に示します。

csh（Cシェル）の場合のPDWRTLNFILSZの設定例（HiRDBクライアントがUNIX版の場合）

 setenv PDWRTLNFILSZ 4096

PDWRTLNFILSZの設定例（HiRDBクライアントがWindows版の場合）

 PDWRTLNFILSZ=4096

SQLストアドプロシジャの呼び出し

 strcpy(e_fromdate, “2003-06-01”);
 strcpy(e_todate, “2003-06-30”);
 EXEC SQL CALL proc_1(IN :e_fromdate, IN :e_todate);

出力ファイルの内容

 fromdate=2003-06-01
 todate=2003-06-30

注　出力ファイルは，クライアント環境定義PDWRTLNPATHで設定します。

デバッグ終了後，WRITE LINE文を記述したSQLストアドプロシジャから，WRITE LINE文の値式の値をファイルに出力する必要がなくなった場合，クライアント環境定義PDWRTLNFILSZを省略してUAPを実行してください。PDWRTLNFILSZの指定を省略すると，SQLストアドプロシジャ中のWRITE LINE文は実行されません。

(5)　ストアドプロシジャ中のトランザクションの決着

(a)　トランザクションを決着するSQL

次のSQL文をストアドプロシジャ中で実行すると，トランザクションを決着できます。ただし，Cストアドプロシジャ中では，SQL文を実行できません。

COMMIT文

ROLLBACK文

次のSQLを実行した場合，自動的にCOMMITが行われます。

PURGE TABLE文

定義系SQL（Javaストアドプロシジャだけ）

次の条件に該当する場合，自動的にROLLBACKが行われます。

ROLLBACKが必要なエラー

(b)　ストアドプロシジャを再実行する場合の注意事項

ストアドプロシジャ中でトランザクションを決着した後にエラーが発生した場合，そのプロシジャの実行は途中で終了します。エラーになったストアドプロシジャを再実行する場合，プロシジャの処理は先頭から実行されるため，エラー発生前のトランザクション解決までに行った操作が，二重に実行されてよいかどうかを考慮する必要があります。例を次に示します。

(6)　結果集合返却機能（SQLストアドプロシジャ限定）

SQLストアドプロシジャ定義時に，CREATE PROCEDUREのDYNAMIC RESULT SETS句に1以上の値を指定した場合，結果集合返却機能を使用できます。なお，SQLストアドファンクションについては，結果集合返却機能は使用できません。

(a)　結果集合返却機能とは

SQLストアドプロシジャ内での，SELECT文の実行によって得られるカーソルを，SQLストアドプロシジャの呼び出し元で参照する機能を，結果集合返却機能といいます。

結果集合返却機能の概要を次の図に示します。

図4‒12　結果集合返却機能の概要（SQLストアドプロシジャの場合）

(b)　結果集合返却機能を使用できる呼び出し元の言語

結果集合返却機能を使用できる呼び出し元の言語を次に示します。

Java

C

C++

COBOL※

OOCOBOL

注※

RDBファイル入出力機能を使用していない場合，使用できます。

(c)　結果集合返却機能の使用例

SQLストアドプロシジャ内で，表emps_1，及び表emps_2に対して，id<10の条件を満たす列id，name，及びageを取得します。呼び出し元で2個の結果集合を受け取り，これらを操作します。

SQLストアドプロシジャの定義

CREATE PROCEDURE proc2(IN param1 INTEGER) ............... 1
  DYNAMIC RESULT SETS 2 ................................. 2
  BEGIN
    DECLARE CUR1 CURSOR WITH RETURN ..................... 3
       FOR SELECT id,name,age FROM emps_1
            WHERE id < param1 ORDER BY id;
    DECLARE CUR2 CURSOR WITH RETURN ..................... 4
       FOR SELECT id,name,age FROM emps_2
            WHERE id < param1 ORDER BY id;
    OPEN CUR1; .......................................... 5
    OPRN CUR2; .......................................... 6
  END; .................................................. 7

[説明]

プロシジャ名，パラメタの定義

返却する検索結果情報数の指定

カーソル（CUR1）の宣言

カーソル（CUR2）の宣言

カーソル（CUR1）のオープン

カーソル（CUR2）のオープン

呼び出し終了，及び結果集合返却

呼び出し元（C言語の埋込み型UAPの場合）

#include <stdio.h>
#include <string.h>

main()
{
  EXEC SQL BEGIN DECLARE SECTION;
    struct {
      short len;
      char str[31];
    } cur1;
    int emp_id;
    char emp_name[13];
    int emp_age;
  EXEC SQL END DECLARE SECTION;
  --------（HiRDBへのCONNECT処理（省略））--------

  cur1.len = sprintf(cur1.str, "cursor1"); .................... 1

  EXEC SQL CALL PROC(10); ..................................... 2

  If (SQLCODE == 120) { ....................................... 3

    EXEC SQL ALLOCATE GLOBAL :cur1
               FOR PROCEDURE PROC2; ........................... 4
    printf("*** emps_1 ***¥n"); ............................... 5
    while (1) { ............................................... 5
      EXEC SQL FETCH GLOBAL :cur1 ............................. 5
                 INTO :emp_id,:emp_name,:emp_age; ............. 5
      if (SQLCODE<0 || SQLCODE==100) break; ................... 5
      printf("ID=%d  NAME=%s  AGE=%d¥n", ...................... 5
            emp_id, emp_name, emp_age); ....................... 5
    } ......................................................... 5
    CLOSE GLOBAL :cur1; ....................................... 6
    if (SQLCODE==121) { ....................................... 7
      printf("*** emps_2 ***¥n"); ............................. 8
      while (1) { ............................................. 8
    EXEC SQL FETCH GLOBAL :cur1 ............................... 8
                   INTO :emp_id,:emp_name,:emp_age; ........... 8
        if (SQLCODE<0 || SQLCODE==100) break; ................. 8
        printf("ID=%d  NAME=%s  AGE=%d¥n", .................... 8
              emp_id, emp_name, emp_age); ..................... 8
      } ....................................................... 8
      CLOSE GLOBAL :cur1; ..................................... 9
    }
  }
}

[説明]

カーソル名の設定

CALL文の実行

返却結果集合があるかどうかの確認

カーソルの割り当て（1個目の結果集合とカーソルを関連づけます）

1個目の結果集合からの情報を出力

カーソルを閉じる（2個目の結果集合とカーソルを関連づけます）

次の結果集合があるかどうかの確認

2個目の結果集合からの情報を出力

カーソルを閉じる

(d)　結果集合返却機能を使用する場合の注意事項

CREATE PROCEDUREでのSQLストアドプロシジャ定義時

結果集合として返却するカーソルのカーソル宣言には，「WITH RETURN」を指定してください。

結果集合として返却するカーソルは，「WITH RETURN」指定で宣言したカーソルのうち，プロシジャ終了時に開いた状態のカーソルだけです。

返却する結果集合が2個以上の場合，カーソルを開いた順序で返却されます。

呼び出し元作成時

結果集合を返却するプロシジャを実行した場合，SQLSTATEに0100C，SQLCODEに120が設定されます。

埋込み型UAP，及びSQLストアドプロシジャで結果集合を受け取る場合には，ALLOCATE CURSOR文で結果集合の組にカーソルを割り当て，その先頭の結果集合とカーソルを関連づけます。返却される結果集合が2個以上の場合，2個目以降の結果集合は，前の結果集合を参照しているカーソルに対してCLOSE文を実行すると，カーソルと関連づけられます。CLOSE文を実行した場合に，次の結果集合があり，その結果集合とカーソルを関連づけたときには，SQLSTATEに0100D，SQLCODEに121が設定されます。次の結果集合がない場合には，SQLSTATEに02001，SQLCODEに100が設定されます。

4.3.2　ストアドファンクションの定義

ストアドファンクションは，SQLで記述した一連のデータベース操作を，ユーザ定義関数としてデータベースに登録しておく機能です。

(1)　SQLストアドファンクションの定義と実行

SQLストアドファンクションは，CREATE FUNCTION又はCREATE TYPE実行時にユーザ定義関数がデータベースに登録され，DROP FUNCTION実行時に削除されます。

登録したユーザ定義関数は，SQL文中に関数呼出しを指定すれば，その関数を呼び出して実行します。

SQLオブジェクトが無効になっている関数がある場合には，ALTER ROUTINEで関数を再作成することもできます。

SQLストアドファンクションの定義と実行を次の図に示します。

図4‒13　SQLストアドファンクションの定義と実行

パブリックファンクション

他ユーザが定義したストアドファンクションを使用する場合は，UAP中からストアドファンクションを呼び出すときに，所有者の認可識別子とルーチン識別子を指定する必要があります。しかし，CREATE PUBLIC FUNCTIONを実行してパブリックファンクションとして定義すると，他ユーザが定義したストアドファンクションを使用する場合でも，UAP中からストアドファンクションを呼び出すときに，所有者の認可識別子を指定する必要がなくなります（ルーチン識別子だけ指定します）。

(2)　SQLストアドファンクションの例

SQLストアドファンクションの例として，ルーチン制御SQLを組み合わせてユーザ定義関数（ファンクション）として定義する例とそれを呼び出して実行する例を次の図に示します。

図4‒14　SQLストアドファンクションの例

[説明]

ユーザ定義関数の名前とSQLパラメタの定義

関数の戻り値の指定

複合文の開始

SQL変数の宣言

値の代入の指定

関数の戻り値を返却する指定

複合文の終了

関数呼出しを使用した検索

注

各SQL文については，マニュアル「HiRDB SQLリファレンス」を参照してください。

関数の定義例：

指定した日付の月末の日付を求める関数

CREATE FUNCTION LASTDAY(INDATE DATE) RETURNS DATE
  BEGIN
    DECLARE MM1 INTEGER;
    SET MM1=MONTH(INDATE)-1;
    RETURN (INDATE-MM1 MONTHS+(31-DAY(INDATE)) DAYS+MM1 MONTHS);
  END

指定した日付の曜日を0（日）〜6（土）の整数で求める関数

CREATE FUNCTION DNOFWEEK(INDATE DATE) RETURNS INTEGER
  BEGIN
    RETURN MOD(DAYS(INDATE),7);
  END

指定した日付の曜日を日本語で求める関数

CREATE FUNCTION 曜日(INDATE DATE) RETURNS NCHAR
  BEGIN
    RETURN (CASE MOD(DAYS(INDATE),7) WHEN 0 THEN N'日'
      WHEN 1 THEN N'月'
      WHEN 2 THEN N'火'
      WHEN 3 THEN N'水'
      WHEN 4 THEN N'木'
      WHEN 5 THEN N'金'
      ELSE N'土'  END);
  END

指定した日付の曜日を英語で求める関数

CREATE FUNCTION DAYOFWEEK(INDATE DATE) RETURNS CHAR(3)
  BEGIN
    RETURN (CASE MOD(DAYS(INDATE),7) WHEN 0 THEN 'SUN'
      WHEN 1 THEN 'MON'
      WHEN 2 THEN 'TUE'
      WHEN 3 THEN 'WED'
      WHEN 4 THEN 'THU'
      WHEN 5 THEN 'FRI'
      ELSE 'SAT'  END);
  END

指定した日付の直後の，指定した曜日の日付を求める関数

（引数の曜日が日本語（N'日'〜N'土'）の場合）

CREATE FUNCTION NEXT_DAY(INDATE DATE,曜日 NCHAR)
  RETURNS DATE
  BEGIN
    DECLARE SDOW,TDOW INTEGER;
    SET TDOW=(CASE 曜日 WHEN N'日' THEN 0
      WHEN N'月' THEN 1
      WHEN N'火' THEN 2
      WHEN N'水' THEN 3
      WHEN N'木' THEN 4
      WHEN N'金' THEN 5
      ELSE 6 END);
    SET SDOW=MOD(DAYS(INDATE),7);
    RETURN (INDATE + (CASE WHEN TDOW>SDOW THEN TDOW-SDOW
      ELSE 7+TDOW-SDOW END) DAYS);
  END

（引数の曜日が英語（'SUN'〜'SAT'）の場合）

CREATE FUNCTION NEXT_DAY(INDATE DATE,DAYOFWEEK CHAR(3))
  RETURNS DATE
  BEGIN
    DECLARE SDOW,TDOW INTEGER;
    SET TDOW=(CASE DAYOFWEEK WHEN 'SUN' THEN 0
      WHEN 'MON' THEN 1
      WHEN 'TUE' THEN 2
      WHEN 'WED' THEN 3
      WHEN 'THU' THEN 4
      WHEN 'FRI' THEN 5
      ELSE 6 END);
    SET SDOW=MOD(DAYS(INDATE),7);
    RETURN (INDATE + (CASE WHEN TDOW>SDOW THEN TDOW-SDOW
      ELSE 7+TDOW-SDOW END) DAYS);
  END

（引数の曜日が整数（0〜6）の場合）

CREATE FUNCTION NEXT_DAY(INDATE DATE,DNOFWEEK INTEGER)
  RETURNS DATE
  BEGIN
    DECLARE SDOW,TDOW INTEGER;
    SET TDOW=DNOFWEEK;
    SET SDOW=MOD(DAYS(INDATE),7);
    RETURN (INDATE + (CASE WHEN TDOW>SDOW THEN TDOW-SDOW
      ELSE 7+TDOW-SDOW END) DAYS);
  END

20日締めで指定した日付の年月（'yyyy-mm'）を求める関数

CREATE FUNCTION YYYYMM20(INDATE DATE) RETURNS CHAR(7)
  BEGIN
    RETURN SUBSTR(CHAR(INDATE+1 MONTH -20 DAYS),1,7);
  END

3月20日締めで指定した日付の年度（'yyyy'）を求める関数

CREATE FUNCTION YYYY0320(INDATE DATE) RETURNS CHAR(4)
  BEGIN
    RETURN SUBSTR(CHAR(INDATE-2 MONTHS -20 DAYS),1,4);
  END

3月20日締めで指定した日付の年度と四半期（'yyyy-nQ'）を求める関数

CREATE FUNCTION YYYYNQ0320(INDATE DATE) RETURNS CHAR(7)
  BEGIN
    DECLARE WORKDATE DATE;
    SET WORKDATE=(INDATE -2 MONTHS -20 DAYS);
    RETURN (SUBSTR(CHAR(WORKDATE), 1, 5) ||
            SUBSTR(DIGITS((MONTH(WORKDATE)+2)/3), 10, 1) || 'Q');
  END

3月20日締めで指定した日付の年度と期（'yyyy-nH'）を求める関数

CREATE FUNCTION YYYYNH0320(INDATE DATE) RETURNS CHAR(7)
  BEGIN
    DECLARE WORKDATE DATE;
    SET WORKDATE=(INDATE -2 MONTHS -20 DAYS);
    RETURN (SUBSTR(CHAR(WORKDATE),1,5) ||
            SUBSTR(DIGITS((MONTH(WORKDATE)+5)/6), 10, 1) || 'H');
  END

日付間（第一引数−第二引数）の月数を整数で求める関数（日数は切り捨て）

CREATE FUNCTION MONTHBETWEEN0(INDATE1 DATE,INDATE2 DATE)
  RETURNS INTEGER
  BEGIN
    DECLARE YMINTERDATE INTERVAL YEAR TO DAY;
    SET YMINTERDATE=INDATE1-INDATE2;
    RETURN (YEAR(YMINTERDATE)*12+MONTH(YMINTERDATE));
  END

日付間（第一引数−第二引数）の月数を小数点以下まで求める関数（ただし，1日の月数は小さい方の日付の日を1か月の起点とし，大きい方の日付を含む1か月の日数分の1とします）

CREATE FUNCTION MONTHBETWEEN(INDATE1 DATE,INDATE2 DATE)
  RETURNS DECIMAL(29,19)
  BEGIN
    DECLARE INTERDATE INTERVAL YEAR TO DAY;
    DECLARE DMONTHS DEC(29,19);
    DECLARE YYI,MMI INTEGER;
    DECLARE WDATE DATE;
    DECLARE SIGNFLAG DEC(1);
    IF INDATE1>INDATE2 THEN
      SET INTERDATE=INDATE1-INDATE2;
      SET WDATE=INDATE2;
      SET SIGNFLAG=1;
    ELSEIF INDATE1<INDATE2 THEN
      SET INTERDATE=INDATE2-INDATE1;
      SET WDATE=INDATE1;
      SET SIGNFLAG=-1;
    ELSE RETURN 0;
    END IF;
    SET YYI=YEAR(INTERDATE);
    SET MMI=MONTH(INTERDATE);
    SET WDATE=WDATE+YYI YEARS+MMI MONTHS;
    SET DMONTHS=YYI*12+MMI
        +DEC(DAY(INTERDATE),2)/(DAYS(WDATE+1 MONTH)-DAYS(WDATE));
    IF SIGNFLAG=1 THEN RETURN DMONTHS;
    ELSE RETURN -DMONTHS;
    END IF;
  END

日付間（第一引数−第二引数）の年数を小数点以下まで求める関数（ただし，1日の年数は小さい方の日付の月日を1か年の起点とし，大きい方の日付を含む1か年の日数分の1とします）

CREATE FUNCTION YEARBETWEEN(INDATE1 DATE,INDATE2 DATE)
  RETURNS DECIMAL(29,19)
  BEGIN
    DECLARE INTERDATE INTERVAL YEAR TO DAY;
    DECLARE DYEARS DEC(29,19);
    DECLARE YYI,MMI INTEGER;
    DECLARE WDATE1,WDATE2 DATE;
    DECLARE SIGNFLAG DEC(1);
    IF INDATE1>INDATE2 THEN
      SET INTERDATE=INDATE1-INDATE2;
      SET WDATE1=INDATE1;
      SET WDATE2=INDATE2;
      SET SIGNFLAG=1;
    ELSEIF INDATE1<INDATE2 THEN
      SET INTERDATE=INDATE2-INDATE1;
      SET WDATE1=INDATE2;
      SET WDATE2=INDATE1;
      SET SIGNFLAG=-1;
    ELSE RETURN  0;
    END IF;
    SET YYI=YEAR(INTERDATE);
    SET WDATE2=WDATE2+YYI YEARS;
    SET DYEARS=YYI
          +DEC(DAYS(WDATE1)-DAYS(WDATE2),3)
          /(DAYS(WDATE2+1 YEAR)-DAYS(WDATE2));
    IF SIGNFLAG=1 THEN RETURN DYEARS;
    ELSE RETURN -DYEARS;
    END IF;
  END

(3)　呼び出す関数の決定規則と結果のデータ型

認可識別子，ルーチン識別子，引数の数が一致し，引数のデータ型に抽象データ型を含まないで，かつ引数の順序に対応してパラメタのデータ型が完全一致する場合は，この関数を呼び出します。また，この場合の関数の結果のデータ型は，呼び出す関数のRETURNS句のデータ型になります。

認可識別子，ルーチン識別子，引数の数のどれかが一致しない関数の場合は，この関数は呼び出しの対象とはなりません。

認可識別子，ルーチン識別子，引数の数は一致しているが，引数のデータ型に抽象データ型を含む場合，又は引数の順序に対応したパラメタのデータ型が完全に一致しない場合は，呼び出す関数は次のように決定します。

抽象データ型を含まない場合

左側の引数から順番に各引数の既定義型を基準として，基準と優先度が同じか又はより優先度が低いデータ型の中で最も優先度の高い既定義型をパラメタに持つ関数を呼び出します。既定義型の優先度を次の表に示します。また，この場合，呼び出す関数がSQL解析時に一意に決まるので，関数の結果のデータ型は呼び出す関数のRETURNS句のデータ型となります。

表4‒3　既定義型の優先度

各引数のデータ型

優先度

数データ

SMALLINT→INTEGER→DECIMAL→SMALLFLT→FLOAT

文字データ

CHAR→VARCHAR

各国文字データ

NCHAR→NVARCHAR

混在文字データ

MCHAR→MVARCHAR

（凡例）　A→B：AがBより優先度が高いことを示します。

抽象データ型を含む場合

抽象データ型を含む場合，次の順番で呼び出す関数を決定します。

基本となる関数の決定

基本となる関数の決定方法は，左側の引数から順番に各引数のデータ型を基準として，基準と優先度が同じか又はより優先度が低いデータ型の中で最も優先度の高いデータ型をパラメタに持つ関数を，基本となる関数とします。データ型が既定義型の場合は，表「既定義型の優先度」の優先度に準じます。データ型が抽象データ型の場合は，次の表に示す優先度に準じます。

表4‒4　抽象データ型の優先度

各引数のデータ型

優先度

抽象データ型

同じデータ型→スーパタイプ※

（凡例）A→B：AがBより優先度が高いことを示します。

注※　抽象データ型定義中のUNDER句で直接指定するスーパタイプの方が，そのほかのスーパタイプよりも優先度が高くなります。

候補となる関数の決定

引数が抽象データ型の場合，引数のデータとして取り得る実際の値のデータ型は，引数の定義の抽象データ型と同じデータ型又はサブタイプとなります。そのため，基本となる関数のほかに，引数の抽象データ型と同じデータ型又はサブタイプの抽象データ型を対応するパラメタに持つすべての関数が候補となる関数となります。

候補となる関数が，基本となる関数一つだけの場合，その関数が呼び出す関数となります。関数の結果のデータ型は，呼び出す関数のRETURNS句のデータ型になります。

RETURNS句のデータ型を用いた候補となる関数の絞り込み

基本となる関数のRETURNS句のデータ型と，基本となる関数以外の候補となる関数のRETURNS句のデータ型の互換性のチェックをします。RETURNS句のデータ型が互換性のない関数の場合，候補となる関数ではなくなります。また，互換性のチェックの後，残った候補となる関数のRETURNS句のデータ型を基に，関数の結果のデータ型を決定します。結果のデータ型及びデータ長は，集合演算（UNION 〔ALL〕，又はEXCEPT 〔ALL〕）の結果のデータ型及びデータ長と同じになります。詳細（問合せ式）については，マニュアル「HiRDB SQLリファレンス」を参照してください。

ただし，抽象データ型の場合は，基本となる関数のRETURNS句の抽象データ型になります。

SQL文実行時の関数の決定

2及び3で関数が一意に決まらない場合，SQL文実行時に，抽象データ型の引数の実際のデータ型によって，候補となる関数の中から呼び出す関数を一つに決定します。左側の引数より順番に，各引数の実際の値がナル値以外の場合はその値のデータ型を基準として，ナル値の場合はその引数のデータ型を基準とし，その基準のデータ型と同じか又はより優先度が低いデータ型の中で最も優先度の高いデータ型をパラメタとして持つ関数を候補となる関数の中から一つ決定し，呼び出す関数とします。

HiRDBでは，関数を多重定義できるため，呼び出す関数の候補が複数ある場合があります。関数の呼び出しの記述と，関数の定義がどのように一致するかによって，呼び出す関数が決定されます。抽象データ型がある表と呼び出す関数の対応を次の図に示します。

図4‒15　抽象データ型がある表と呼び出す関数の対応

[説明]

例えば，社員表に対して抽象データ型関数「報酬」を使用して検索する，次のようなSQL文があるとします。

　SELECT 社員番号 FROM 社員表 WHERE 報酬(従業員)>=200000

この場合，パラメタの値のデータ型がt_従業員かt_営業部員かによって，それぞれのデータ型に対応した関数が決定され，呼び出されます。

なお，この社員表の定義内容については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

注※1　報酬＝基本給×報酬率()

注※2　報酬＝顧客総数()×1000＋基本給×報酬率()

（例）　抽象データ型を含む場合の呼び出し関数の決定

A，B，Cを抽象データ型とし，CをＢのスーパタイプ，BをAのスーパタイプとします（抽象データ型の優先度：A→B→C）。

（例1）

＜前提条件＞

表定義

CREATE TABLE T1(C1 C)

関数定義

f(A)，f(B)，f(C)

SQL文

SELECT f(C1) FROM T1

＜結果＞

基本となる関数

f(C)

関数呼出しがf(C1)の場合の候補となる関数

f(A),f(B),f(C)

呼び出し関数

SQL文実行時に呼び出す関数を次に示します。

T1.C1の実際の値

呼び出し関数

A型

f(A)

B型

f(B)

C型

f(C)

NULL値

f(C)

（例2）

＜前提条件＞

表定義

CREATE TABLE T1(C1 C,C2 B)

関数定義

f(A,A)，f(A,B)，f(A,C)，f(B,A)，f(B,C)，f(C,A)，f(C,B)，f(C,C)

SQL文

SELECT f(C1,C2) FROM T1

＜結果＞

基本となる関数

f(C,B)

関数呼出しがf(C1,C2)の場合の候補となる関数

f(A,A),f(A,B),f(A,C),f(B,A),f(B,C),f(C,A),f(C,B)

呼び出し関数

SQL文実行時に呼び出す関数を次に示します。

T1.C1の実際の値

T1.C2の実際の値

呼び出し関数

A型

A型

f(A,A)

B型

f(A,B)

NULL値

f(A,B)

B型

A型

f(B,A)

B型

f(B,C)

NULL値

f(B,C)

C型

A型

f(C,A)

B型

f(C,B)

NULL値

f(C,B)

NULL値

A型

f(C,A)

B型

f(C,B)

NULL値

f(C,B)

4.3.3　ストアドファンクションを定義，又は削除するときの注意事項

ストアドファンクションを定義，又は削除するときの注意事項について説明します。

(1)　ストアドファンクション定義時

ストアドファンクションを作成すると，既存のストアドファンクションが無効になることがあります

次の条件を満たす，既存のストアドファンクションが無効になります。

作成するストアドファンクションと同じ名称（認可識別子及びルーチン識別子が同じ）で，かつパラメタ数が同じストアドファンクションを呼び出している

この場合，ALTER ROUTINEで無効になったストアドファンクションを再作成してください。

ストアドファンクションを作成すると，既存のストアドプロシジャが無効になることがあります

ストアドファンクションを作成すると，既存のストアドプロシジャが無効になることがあります。次に示す条件を満たすストアドプロシジャが無効になります。

作成するストアドファンクションと名称（認可識別子及びルーチン識別子），及びパラメタ数が同じストアドファンクションを呼び出しているストアドプロシジャ

この場合，無効になったストアドプロシジャをALTER PROCEDURE又はALTER ROUTINEで再作成してください。

ストアドファンクションを作成すると，既存のトリガが無効になることがあります

ストアドファンクションを作成すると，既存のトリガが無効になることがあります。次に示す条件を満たすトリガが無効になります。

作成するストアドファンクションと名称（認可識別子及びルーチン識別子），及びパラメタ数が同じストアドファンクションを呼び出しているトリガ

この場合，無効になったトリガをALTER TRIGGER又はALTER ROUTINEで再作成してください。

作成したストアドファンクションが無効になることがあります

次の手順でストアドファンクションを作成すると，そのストアドファンクションが無効になることがあります。

プラグインをインストール

1のプラグイン関数を呼び出すストアドファンクションを作成

1のインストールしたプラグインとは別のプラグインをインストール

［説明］

1と3で，インストールするプラグインが提供する関数の，関数名とパラメタ数が同じ場合，3の操作をすると2で作成したストアドファンクションが無効になります。

この場合，ALTER ROUTINEで無効になったストアドファンクションを再作成してください。

(2)　ストアドファンクション削除時

ストアドファンクションを削除すると，削除したストアドファンクション以外のストアドファンクションが無効になることがあります

次の条件を満たす，そのほかのストアドファンクションが無効になります。

削除するストアドファンクションと同じ名称（認可識別子及びルーチン識別子が同じ）で，かつパラメタ数が同じストアドファンクションを呼び出している

この場合，ALTER ROUTINEで無効になったストアドファンクションを再作成してください。

ストアドファンクションを削除すると，同じ名称のストアドプロシジャが無効になることがあります

次の条件を満たすストアドプロシジャが無効になります。

削除するストアドファンクションと同じ名称（認可識別子及びルーチン識別子が同じ）で，かつパラメタ数が同じストアドファンクションを呼び出している

この場合，ALTER PROCEDURE，又はALTER ROUTINEで無効になったストアドプロシジャを再作成してください。

4.4　トリガ

トリガを定義すると，ある表への操作（更新，挿入，及び削除）を契機に自動的にSQL文を実行させることができます。トリガは，定義する表，トリガを動作させる契機となるSQL（トリガを引き起こすSQL），自動的に実行させるSQL文（トリガSQL文），その動作が実行される条件（トリガ動作の探索条件）などを指定して定義します。トリガを定義した表にトリガ動作の探索条件を満たすSQL文が実行されると，トリガSQL文が自動的に実行されます。トリガの概要を次の図に示します。

図4‒16　トリガの概要

［説明］

UAPからトリガを引き起こすSQLが実行されると，トリガを定義した表Aでトリガが呼び出され，トリガ動作の探索条件を満たしている場合，自動的にトリガSQL文（この場合，表Bへの行の挿入や表Cへの行の更新）が実行されます。

トリガを使用すると，次のような操作をUAPで記述する必要がなくなります。

ある表の更新に伴ってほかの表を必ず更新する

ある表の更新に伴って，その更新行中のある列を必ず更新する（列と列を関連づける）

例えば，商品管理表の価格が変更されると商品管理履歴表に変更内容を蓄積するという場合，トリガを使用しないと，商品管理表を更新するUAPは常に商品管理履歴表も更新する必要があります。トリガを使用すると，商品管理履歴表への操作を自動化できるため，商品管理表を更新するUAPは商品管理履歴表の更新を考慮する必要がありません。このように，トリガを適切に使用するとUAPを作成するときの負荷を軽減できます。

なお，トリガを定義すると，その表を使用する関数，手続き，及びトリガのSQLオブジェクトは無効になるため，再作成する必要があります。また，トリガが使用している資源（表，インデクスなど）が定義，定義変更，又は削除された場合，トリガのSQLオブジェクトは無効になるため，再作成する必要があります。

トリガの詳細については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

4.5　SQLの最適化

HiRDBには，SQL文の検索効率を良くするための最適化機能があります。

最適化処理には，方式の異なるSQL最適化モードがあります。SQL拡張最適化オプションの指定値，及びSQLの構文から，HiRDBがSQLごとにSQL最適化モードを決定します。

SQL最適化モードの種類を次に示します。

コストベース最適化モード1（バージョン06-00より前のHiRDBで使用している最適化処理方式）

コストベース最適化モード2（バージョン06-00以降のHiRDBで使用できる最適化処理方式）

さらに，データベースの状態を考慮して，最も効率的なアクセスパスを決定するための最適化の方法を指定できます。最適化の方法には次の三つがあります。

SQL最適化指定

SQL最適化オプション

SQL拡張最適化オプション

SQL最適化指定：

SQL最適化指定は，SQL文中に指定できます。指定したSQLに対して，最適化が適用されます。

SQL最適化指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

SQL最適化オプション，SQL拡張最適化オプション：

SQL最適化オプション，SQL拡張最適化オプションには，それぞれ複数の機能が割り当てられていて，その中から必要とする機能を選択できます。SQL最適化オプションで指定する機能は，コストベース最適化モード1及びコストベース最適化モード2の両方で有効となります。SQL拡張最適化オプションで指定する機能は，コストベース最適化モード2の場合だけ有効となります。

SQL最適化オプション，SQL拡張最適化オプションについては，「クライアント環境定義の設定内容」を参照してください。

注意事項：

SQL最適化モードを選択する場合の指標を次に示します。

＜バージョン06-00以降のHiRDBを初めて導入する場合＞

コストベース最適化モード2を使用することをお勧めします。

コストベース最適化モード2を使用する場合は，最適化の精度を更に向上させるため，必要に応じて最適化情報収集ユティリティを実行してください。最適化情報収集ユティリティの実行要否については，マニュアル「HiRDB コマンドリファレンス」を参照してください。

SQL最適化オプション，SQL拡張最適化オプションには，指定した方がよい推奨値があります。この推奨値は必ず指定するようにして，更にそれ以外に使用できる機能がないか検討してください。

＜バージョン06-00より前のHiRDBをバージョンアップする場合＞

バージョンアップ前と同じ状態で使用するために，コストベース最適化モード1を使用することをお勧めします。ただし，SQL文によっては，常にコストベース最適化モード2を使用する場合があるため，既に構築されている環境で新しい運用を始めるときには，SQL拡張最適化オプションの指定値についても検討してください。また，SQL最適化オプションの指定値は変更しないでください。

4.5.1　SQL最適化モード

(1)　SQL最適化モードの特徴

SQL最適化モードの特徴を次の表に示します。

表4‒5　SQL最適化モードの特徴

SQL最適化モード

説明

長所

短所

選択方法

コストベース最適化モード1

バージョン06-00より前のHiRDBのコストベース最適化処理方式です。バージョン06-00以降のHiRDBでも使用できます。

バージョン06-00より前のHiRDBからバージョンアップしても，バージョンアップ前と同じアクセスパスで検索できます。

なお，高速に検索する目的として，アクセスパスを変更することもあります。

候補とするアクセスパスの種類が少ないため（ハッシュジョインなどの機能を候補として選択しません），必ずしも最適なアクセスパスが選択されるとは限りません。

SQL拡張最適化オプションに"NONE"又は0を指定してください。

なお，SQL文によっては，常にコストベース最適化モード2を使用する場合があります。詳細については，「強制的にコストベース最適化モード2を適用するSQL」を参照してください。

コストベース最適化モード2

バージョン06-00以降のHiRDBで，高速に検索できるようにしたコストベース最適化処理方式です。

結合検索，副問合せ処理に対して，ハッシングを組み合わせたアクセスパスを候補として選択するため，高速に検索できます。

複雑な最適化処理をするため，最適化処理に時間が掛かります。

SQL拡張最適化オプションにコストベース最適化モード2の適用を指定するか，又はSQL拡張最適化オプションを省略してください。

(2)　強制的にコストベース最適化モード2を適用するSQL

コストベース最適化モード1を使用していても，コストベース最適化モード2が強制的に適用される場合があります。強制的にコストベース最適化モード2が適用されるSQLを次に示します。

UPDATE文のSET句での副問合せ

OUTER JOIN，INNER JOIN，又はCROSS JOIN

集合演算結果のCOUNT(*)

DISTINCT集合関数の値式

ビュー表，WITH句の問合せ名の外結合（OUTER JOIN）への指定

BLOBデータ，BINARYデータの部分的な更新・検索

SQL最適化指定

定義長が255バイトを超える値式のソート

先頭からn行の検索結果を取得する機能

BINARY型を使用した検索

内部導出表が2段以上入れ子になるビュー表，WITH句の検索

マトリクス分割

結合表に対する副問合せ

繰返し列での集合関数MIN，MAX適用

行値構成子

CASE式中の副問合せ

値式2がBLOB型のPOSITION関数

参照制約

検査制約

定義長256バイト以上のデータの制限解除

更新，削除，又は追加をする表の副問合せへの指定

FROM句での繰返し列の平坦化機能

LIMIT句

内部導出表が2段以上入れ子になる検索

問合せ式本体の指定箇所拡大

ウィンドウ関数

SIMILAR述語

XML型を使用した検索

文字集合

RDエリア名を指定した検索，更新，又は削除

圧縮列へのアクセスを含む操作系SQL

一時表に対して操作をするSQL

列追加定義（ALTER TABLE文）でON ROW EXISTS指定の列を追加した表の検索

それぞれのSQLに該当する適用条件及び例を次に示します。

(a)　UPDATE文のSET句での副問合せ

UPDATE文のSET句に，スカラ副問合せ又は行副問合せを指定した場合

例：

UPDATE T1 SET(C1,C2)=(SELECT MAX(C1),MAX(C2) FROM T2) WHERE C3=1

注　下線部分が該当箇所です。

(b)　OUTER JOIN，INNER JOIN，又はCROSS JOIN

FROM句に，[INNER] JOINを指定した場合

例：

SELECT T1.C1,T2.C2 FROM T1 INNER JOIN T2 ON T1.C1=T2.C1

注　下線部分が該当箇所です。

FROM句に，LEFT [OUTER] JOINを含む表参照と任意の表参照をコンマで区切り複数指定した場合

例：

SELECT T1.C1,T2.C2 FROM T1 LEFT OUTER JOIN T2 ON T1.C1=T2.C1,
  T3 WHERE T1.C1=T3.C1

注　下線部分が該当箇所です。

FROM句に，表参照1 LEFT [OUTER] JOIN 表参照2を指定し，更に表参照2にLEFT [OUTER] JOINをネストして指定した場合

例：

SELECT T1.C1,T2.C2,T3.C2 FROM T1 LEFT OUTER JOIN
  (T2 LEFT OUTER JOIN T3 ON T2.C1=T3.C1)
  ON T1.C1=T3.C1

注　下線部分が該当箇所です。

FROM句にRIGHT [OUTER] JOINを指定した場合

例：

SELECT T1.C1,T2.C2 FROM T1 RIGHT OUTER JOIN T2 ON T1.C1=T2.C1

注　下線部分が該当箇所です。

FROM句にCROSS JOINを指定した場合

例：

SELECT T1.C1,T2.C2 FROM T1 CROSS JOIN T2

注　下線部分が該当箇所です。

(c)　集合演算結果のCOUNT(*)

FROM句に指定した問合せ式本体が集合演算を含む場合

例：

SELECT COUNT(*) FROM (SELECT C1 FROM T1 UNION SELECT C1 FROM T2)

注　下線部分が該当箇所です。

(d)　DISTINCT集合関数の値式

DISTINCT集合関数（COUNT，SUM，又はAVG）の引数に，列指定を除く値式を指定した場合

例：

SELECT AVG(DISTINCT C1+C2) FROM T1

注　下線部分が該当箇所です。

(e)　ビュー表，WITH句の問合せ名の外結合（OUTER JOIN）への指定

FROM句にビュー表又はWITH句の問合せ名に対するLEFT [OUTER] JOINを指定し，そのビュー表又はWITH句の問合せ名から内部導出表が作成される場合

例：

WITH W1(C1,C2) AS (SELECT C1,COUNT(*) FROM T1 GROUP BY C1)
  SELECT W1.C1,W1.C2,T2.C2 FROM W1 LEFT JOIN T2 ON W1.C1=T2.C1

注　下線部分が該当箇所です。

(f)　BLOBデータ，BINARYデータの部分的な更新・検索

スカラ関数SUBSTRの値式1に，BLOB型を指定した場合

例：

SELECT SUBSTR(C1,1,500) FROM T1

注　下線部分が該当箇所です。C1がBLOB型の列です。

UPDATE文の更新対象がBLOB型の列で，更新値に連結演算を指定した場合

例：

UPDATE T1 SET C1=C1||?

注　下線部分が該当箇所です。C1がBLOB型の列です。

UPDATE文の更新対象がBLOB型の列又はBLOB属性で，更新値に列指定又はコンポネント指定を指定した場合

例：

UPDATE T1 SET C1=C2

注　下線部分が該当箇所です。C1，C2がBLOB型の列です。

(g)　SQL最適化指定

使用インデクスのSQL最適化指定を指定した場合

例：

SELECT T1.C1 FROM T1 WITH INDEX(idx1) WHERE T1.C2<=500

注　下線部分が該当箇所です。

結合方式のSQL最適化指定を指定した場合

例：

SELECT T1.C1,T2.C2 FROM T1 INNER JOIN BY NEST T2 ON T1.C1=T2.C1

注　下線部分が該当箇所です。

副問合せ実行方式のSQL最適化指定を指定した場合

例：

SELECT T1.C1 FROM T1 WHERE T1.C1=ANY
  (HASH SELECT T2.C1 FROM T2 WHERE T2.C2='302S')

注　下線部分が該当箇所です。

(h)　定義長が255バイトを超える値式のソート

ORDER BY句のソートのキーになる項目に，定義長が256バイト以上のCHAR，VARCHAR，MCHAR，及びMVARCHAR，並びに128文字以上のNCHAR及びNVARCHARを指定した場合

例１：

SELECT C1,C2 FROM T1 ORDER BY C2

注　下線部分が該当箇所です。C2はVARCHAR(300)の列です。

例２：

SELECT C1,C3||C4 FROM T1 ORDER BY 2

注　下線部分が該当箇所です。C3||C4はNCHAR(150)の値式です。

(i)　先頭からn行の検索結果を取得する機能

ORDER BY句の直後にLIMIT句を指定する場合

例：

SELECT SCODE,ZSURYO FROM ZAIKO WHERE　ZSURYO>20 ORDER BY 2,1 LIMIT 10

注　下線部分が該当箇所です。

(j)　BINARY型を使用した検索

BINARY型の列を検索する場合

例：

SELECT C1 FROM T1

注　下線部分が該当箇所です。C1はBINARY型の列です。

(k)　内部導出表が2段以上入れ子になるビュー表，WITH句の検索

FROM句にビュー表又はWITH句の問合せ名を指定した問合せ指定があり，更にこのビュー表定義中又はWITH句中の導出問合せ式のFROM句に，内部導出表となるビュー表又はWITH句を指定している場合

例：

WITH Q1(QC1,QC2) AS (SELECT C1,C2 FROM V1 GROUP BY C1,C2)

SELECT AVG(QC1),QC2 FROM Q1 GROUP BY QC2

注　下線部分が該当箇所です。V1は内部導出表となるビュー表です。

(l)　マトリクス分割

マトリクス分割表に対して，検索，更新，削除，及びリストの操作をする場合

例：

SELECT * FROM T1

注　下線部分が該当箇所です。T1はマトリクス分割表です。

(m)　結合表に対する副問合せ

結合表を含む問合せ指定を指定し，FROM句のON 探索条件，WHERE句，又はHAVING句に副問合せを指定する場合

例：

SELECT * FROM T1 LEFT JOIN T2 ON T1.C1=T2.C1
  WHERE T1.C1=ANY(SELECT C1 FROM T3)

注　下線部分が該当箇所です。

(n)　繰返し列での集合関数MIN，MAX適用

集合関数のMIN又はMAXに，FLAT指定の繰返し列を指定する場合

例：

SELECT MIN(FLAT(C1)) FROM T1

注　下線部分が該当箇所です。C1は繰返し列です。

(o)　行値構成子

行値構成子を指定する場合

例：

SELECT * FROM T1 WHERE (C1,C2,C3)>(1,2,3)

注　下線部分が該当箇所です。

(p)　CASE式中の副問合せ

CASE式中に副問合せを指定する場合

例：

SELECT CASE(SELECT C1 FROM T1) WHEN 1 THEN C2 ELSE C1 END FROM T1

注　下線部分が該当箇所です。

(q)　値式2がBLOB型のスカラ関数POSITION

スカラ関数POSITIONの値式2にBLOB型を指定する場合

例：

SELECT POSITION(? AS BLOB(1K) IN C1) FROM T1

注　下線部分が該当箇所です。C1はBLOB型の列です。

(r)　参照制約

被参照表又は参照表に対して，挿入，更新，及び削除をする場合

例：

UPDATE T1 SET C1=?

注　下線部分が該当箇所です。T1は被参照表又は参照表です。

(s)　検査制約

検査制約を定義した列に対して，挿入，及び更新をする場合

例：

INSERT INTO T1(C1,C2) VALUES(?,?)

注　下線部分が該当箇所です。C1は検査制約を定義した列です。

(t)　定義長256バイト以上のデータの制限解除

GROUP BY句に次の値式を指定する場合

定義長が256バイト以上のCHAR，VARCHAR，MCHAR，又はMVARCHAR型

128文字以上のNCHAR，又はNVARCHAR型

256バイト以上のBINARY型

例：

SELECT C1,COUNT(*) FROM T1 GROUP BY C1

注　下線部分が該当箇所です。T1.C1が256バイト以上の文字列です。

集合関数の引数に次の値式を指定する場合

定義長が256バイト以上のCHAR，VARCHAR，MCHAR，又はMVARCHAR型

128文字以上のNCHAR，又はNVARCHAR型

256バイト以上のBINARY型

例：

SELECT MIN(C1) FROM T1

注　下線部分が該当箇所です。T1.C1が256バイト以上の文字列です。

ビュー表，WITH句，又はFROM句に問合せ式本体を指定し，内部導出表を作成する場合で，内部導出表の選択式に次の値式を指定するとき

256バイト以上のCHAR，VARCHAR，MCHAR，又はMVARCHAR型

128文字以上のNCHAR，又はNVARCHAR型

256バイト以上のBINARY型

例：

WITH W1(C1,C2) AS (SELECT DISTINCT C1,C2 FROM T1)
    SELECT C2,COUNT(*) FROM W1 GROUP BY C2

注　下線部分が該当箇所です。T1.C1が256バイト以上の文字列です。

(u)　更新，削除，又は追加をする表の副問合せへの指定

更新，削除，又は追加をする表を副問合せに指定する場合

例1：

UPDATE T1 SET C1=NULL WHERE C1=(SELECT MIN(C1) FROM T1)

例2：

DELETE FROM T1 WHERE C1=(SELECT MIN(C1) FROM T1)

例3：

INSERT INTO T1(C1,C2) VALUES((SELECT MIN(C1) FROM T1),NULL)

注　下線部分が該当箇所です。

INSERT文の問合せ式本体に，追加する表と同一表を指定する場合

例：

INSERT INTO T1(C1,C2) SELECT C1,C2+1 FROM T1

注　下線部分が該当箇所です。

(v)　FROM句での繰返し列の平坦化機能

FROM句にFLATを指定する場合

例：

SELECT C1,C2 FROM T1(FLAT(C1,C2)) WHERE C1<10 AND C2 >20

注　下線部分が該当箇所です。C1，C2は繰返し列です。

(w)　LIMIT句

LIMIT句を指定する場合

例：

SELECT SCODE, ZSURYO FROM ZAIKO WHERE ZSURYO > 20ORDER BY 2, 1 LIMIT 20, 10

注　下線部分が該当箇所です。

(x)　内部導出表が2段以上入れ子になる検索

内部導出表を作成する問合せ指定のFROM句に，更に内部導出表となる問合せ指定を指定している場合

例：

SELECT AVG(QC1),QC2 FROM(SELECT C1,C2 FROM V1 GROUP BY C1,C2) AS Q1(QC1,QC2)

注　下線部分が該当箇所です。V1は内部導出表となるビュー表です。

(y)　問合せ式本体の指定箇所拡大

ビュー表，WITH句，又はFROM句に集合演算を指定し，この問合せが内部導出表を作成する場合

例：

WITH V1(C1,C2) AS (SELECT C1,C2 FROM T1 UNION SELECT C1,C2 FROM T2)
    SELECT C1 FROM V1 WHERE C2>0

注　下線部分が該当箇所です。

INSERT文に集合演算を指定する場合

例：

INSERT INTO T3 (C1,C2)
    SELECT C1,C2 FROM T1 UNION ALL SELECT C1,C2 FROM T2

注　下線部分が該当箇所です。

副問合せに集合演算を指定する場合

例：

SELECT C1, C2 FROM T3
    WHERE EXISTS(SELECT C1 FROM T1 EXCEPT SELECT C1 FROM T2)

注　下線部分が該当箇所です。

(z)　ウィンドウ関数

選択式の中にウィンドウ関数を含む場合

例：

SELECT C1,C2,COUNT(*) OVER() FROM T1

注　下線部分が該当箇所です。

(aa)　SIMILAR述語

SIMILAR述語を指定する場合

例：

SELECT C1 FROM T1 WHERE C2 SIMILAR TO '%(b|g)%'

注　下線部分が該当箇所です。

(ab)　XML型を使用した検索

XML型を使用した検索を行った場合

例：

SELECT C1 FROM T1
    WHERE XMLEXISTS('/書籍情報[価格=1000]'
                     PASSING BY VALUE C2)

注　下線部分が該当箇所です。T1.C2がXML型の列です。

(ac)　文字集合

SQL中に文字集合を指定した列を含む場合

例：

SELECT C1, C2 FROM T1 WHERE C1='HiRDB'

注　下線部分が該当箇所です。T1.C1が文字集合を指定した列です。

(ad)　RDエリア名を指定した検索，更新，又は削除

SQL中にアクセス先のRDエリア名を指定した場合

例：

SELECT C1 FROM T1 IN (‘RU01,RU02’) WHERE C1='HiRDB'

注　下線部分が該当箇所です。RU01，RU02がアクセス先のRDエリアです。

(ae)　圧縮列へのアクセスを含む操作系SQL

SQL中に圧縮列を含む場合

例：

SELECT C1,C2 FROM T1 WHERE C2<?

注　下線部分が該当箇所です。T1.C1が圧縮列です。

(af)　一時表に対して操作をするSQL

一時表に対して操作する場合

例：

SELECT C1 FROM TTMP1

注　下線部分が該当箇所です。TTMP1が一時表です。

(ag)　列追加定義（ALTER TABLE文）でON ROW EXISTS指定の列を追加した表を含む操作系SQL

操作系SQL中に列追加定義（ALTER TABLE文）でON ROW EXISTS指定の列を追加した表を含む場合

例：

CREATE TABLE T1(C1 INT)
ALTER TABLE T1 ADD C2 INT DEFAULT 2 ON ROW EXISTS
SELECT C1 FROM T1

注　下線部分が該当箇所です。T1が列追加定義(ALTER TABLE文)でON ROW EXISTS指定の列を追加した表です。

(3)　SQL最適化オプション，SQL拡張最適化オプションの有効範囲

SQL最適化オプション，SQL拡張最適化オプションが有効となるSQL最適化モードを次の表に示します。

表4‒6　SQL最適化オプション，SQL拡張最適化オプションが有効となるSQL最適化モード

SQL最適化モード

SQL最適化オプション

SQL拡張最適化オプション

コストベース最適化モード1

○

×

コストベース最適化モード2

○

○

（凡例）

○：有効となります。

×：無効となります。

(4)　最適化処理で選択されたSQL最適化モードを確認する方法

アクセスパス表示ユティリティを使用すると，SQL文ごとに最適化処理で選択されたSQL最適化モードを確認できます。アクセスパス表示ユティリティについては，マニュアル「HiRDB コマンドリファレンス」を参照してください。

(5)　注意事項

SQL最適化モードを変更すると，アクセスパスが変更になるため，SQL文の検索性能が低下することがあります。本番運用などで十分に性能評価ができない環境では，SQL最適化モードを変更しないことをお勧めします。

HiRDBを新規導入する場合，コストベース最適化モード2を使用することをお勧めします。また，ほかのSQL拡張最適化オプションを使用する場合は，コストベース最適化モード2に追加する形で使用してください。コストベース最適化モード2を使用すると，最適化処理で選択できるアクセスパスの種類が多いため，より高速に検索できるアクセスパスを選択できます。

なお，HiRDBシステム定義のpd_additional_optimize_levelオペランドの省略値はコストベース最適化モード2が含まれるため，通常はコストベース最適化モード2が適用されます。

バージョン06-00より前のHiRDBからバージョンアップする場合，バージョンアップ前と同じ状態で使用するためにコストベース最適化モード1をそのまま使用することをお勧めします。ただし，SQL文によっては，常にコストベース最適化モード2を使用することがあります。

通常は絞り込み条件を考慮して最適化をしますが，SQL拡張最適化オプションにハッシュジョイン，副問合せのハッシュ実行を適用した場合，絞り込み条件がなかったり，絞り込み条件で行数があまり絞り込めなかったりすると，行数の多い表を内表にしたハッシュジョインを適用したり，行数の多い表の転送が発生したりします。このような場合は，表の行数の情報を最適化に反映させるために，必要に応じて次のどちらかの方法で最適化情報収集ユティリティを実行してください。最適化情報収集ユティリティの実行要否については，マニュアル「HiRDB コマンドリファレンス」を参照し，性能について十分に検証するようにしてください。

表にデータを格納した状態で，最適化情報収集レベルをlvl1にして（-cオプションにlvl1を指定して）実行します。lvl1では，表の行数の情報だけを取得するため，比較的短時間で最適化情報収集ユティリティを実行できます。また，-tオプションにALLを指定すると，スキーマ内のすべての表に対して行数を取得できます。

表にデータを格納できない場合や，テスト環境の場合は，本番環境での表の行数（NROWS）を最適化パラメタファイルに記述して，表ごとに-sオプションを指定して実行します。表の行数を1,000行にする場合の最適化パラメタファイルの記述例を次に示します。

# 表最適化情報

NROWS 1000 # 表の全行数

コストベース最適化モード1を使用する場合，通常は最適化情報収集ユティリティを実行する必要はありませんが，実行するときは最適化情報収集レベルはlvl1にしないでください。

4.5.2　最適化方法の種類

SQL最適化指定，SQL最適化オプション，及びSQL拡張最適化オプションの最適化方法の種類について説明します。

(1)　SQL最適化指定

SQL最適化指定には，次の最適化方法があります。

使用インデクスのSQL最適化指定

結合方式のSQL最適化指定

副問合せ実行方式のSQL最適化指定

(2)　SQL最適化オプション

SQL最適化オプションには，次の最適化方法があります。

ネストループジョイン強制

複数のSQLオブジェクト作成

フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）

ネストループジョイン優先

フロータブルサーバ候補数の拡大

ORの複数インデクス利用優先

自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理

ANDの複数インデクス利用の抑止

グループ分け高速化処理

フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）

データ収集用サーバの分離機能

インデクス利用の抑止

複数インデクス利用強制

更新SQLの作業表作成抑止

探索高速化条件の導出

スカラ演算を含むキー条件の適用

プラグイン提供関数からの一括取得機能

導出表の条件繰り込み機能

(3)　SQL拡張最適化オプション

SQL拡張最適化オプションには，次の最適化方法があります。

コストベース最適化モード2の適用

ハッシュジョイン，副問合せのハッシュ実行

値式に対する結合条件適用機能

スカラ演算を含む条件に対するサーチ条件適用

パラメタを含むXMLEXISTS述語への部分構造インデクスの有効化

FROM句の導出表のマージ適用

外結合内結合変換機能

4.5.3　SQLの最適化の指定方法

(1)　指定できる箇所

(a)　SQL最適化指定

SQL最適化指定は，次のSQLに指定できます。

副問合せ

表式

DELETE文

UPDATE文

(b)　SQL最適化オプション，SQL拡張最適化オプション

SQL最適化オプション，及びSQL拡張最適化オプションは，次の箇所で指定できます。なお，通常はシステム共通定義で指定してください（すべてのSQLに対して有効となります）。

システム共通定義のpd_optimize_level，pd_additional_optimize_levelオペランド

フロントエンドサーバ定義のpd_optimize_level，pd_additional_optimize_levelオペランド

クライアント環境定義のPDSQLOPTLVL，PDADDITIONALOPTLVL

SQLコンパイルオプション（CREATE PROCEDUREとCREATE TYPEの各SQLに指定した手続き本体，及びALTER PROCEDURE，ALTER ROUTINE，CREATE TRIGGER，並びにALTER TRIGGER）

(2)　優先順位

SQL最適化オプション，及びSQL拡張最適化オプションを複数の箇所に指定した場合の優先順位について説明します。なお，SQL文中にSQL最適化指定を指定している場合は，SQL最適化オプション及びSQL拡張最適化オプションよりSQL最適化指定が優先されます。

(a)　ストアドルーチン中以外，及びトリガ中以外の操作系SQL

優先順位は次のようになります。

クライアント環境定義のPDSQLOPTLVL，PDADDITIONALOPTLVL

フロントエンドサーバ定義のpd_optimize_level，pd_additional_optimize_levelオペランド

システム共通定義のpd_optimize_level，pd_additional_optimize_levelオペランド

(b)　ストアドルーチン中，及びトリガ中の操作系SQL

優先順位は次のようになります。

SQLコンパイルオプション（ALTER PROCEDURE，ALTER ROUTINE，ALTER TRIGGER，CREATE PROCEDURE，及びCREATE TRIGGER，並びにCREATE TYPEの手続き本体）

フロントエンドサーバ定義のpd_optimize_level，pd_additional_optimize_levelオペランド

システム共通定義のpd_optimize_level，pd_additional_optimize_levelオペランド

4.5.4　フロータブルサーバの割り当て方法（HiRDB/パラレルサーバ限定）

(1)　HiRDBでの問合せ処理方式

HiRDB/パラレルサーバでのSQL文の問合せ処理は，主に3ステップに分けて実行しています。HiRDB/パラレルサーバでのSQL文の問合せ処理方式を次の図に示します。

図4‒17　HiRDB/パラレルサーバでのSQL文の問合せ処理方式

［説明］

バックエンドサーバでデータを取り出します。2表以上の問合せの場合，結合方式によってはバックエンドサーバ間でデータの通信が実行され，ステップ1.が更に数段階になるときがあります。

フロータブルサーバでグループ化，ソート，重複排除，集合演算処理などをします。処理方式によっては，フロータブルサーバを使用しない場合や，フロータブルサーバ間でデータの通信が実行され，ステップ2.が更に数段階になるときがあります。

フロントエンドサーバで問合せ結果を集めて，クライアントに転送します。

HiRDBでは，ステップ2で使用するフロータブルサーバは，SQLごとにそのSQLでアクセスしないバックエンドサーバを自動的に割り当てます。ただし，SQL最適化オプションを指定した場合には，フロータブルサーバの割り当て方法を変更できます。

フロータブルサーバを使用するSQLと，フロータブルサーバの割り当てに関する最適化を次に示します。なお，これらの最適化の特徴については，「フロータブルサーバの割り当てに関する最適化の特徴」を参照してください。

フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）

フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）

データ収集用サーバの分離機能

また，次の最適化を適用すると，フロータブルサーバの割り当て台数を最大値まで増やせます。なお，この最適化の特徴については，「フロータブルサーバの割り当て候補数に関する最適化の特徴」を参照してください。

フロータブルサーバ候補数の拡大

(2)　フロータブルサーバを使用するSQL

次のどれかの条件に当てはまる場合，SQL文の問合せ処理でフロータブルサーバを使用します。

UNION [ALL]句又はEXCEPT [ALL]句を指定して検索する場合

SELECT文で次に示す指定をする場合

複数の表を結合して検索するとき

インデクスを定義していない列に対してORDER BY句を指定するとき

横分割表に対してORDER BY句を指定するとき

選択式中に集合関数を含む値式を指定しているとき

選択式中にウィンドウ関数COUNT(*) OVER()を含む値式を指定しているとき

GROUP BY句を指定するとき

DISTINCT句を指定するとき

FOR UPDATE句を指定するか又はこのカーソルを使用した更新があり，インデクスを定義した列に検索条件を指定するとき

FOR READ ONLY句を指定するとき

限定述語の副問合せを指定するとき

INSERT文の挿入元の問合せ本体に，次に示す指定をする場合

外への参照がある副問合せに更新表を指定するとき

挿入元の問合せ式本体の主問合せに更新表を指定するとき

UPDATE文に次に示す指定をする場合

探索条件中又は更新値中に，外への参照がある副問合せを指定し，その副問合せ中に更新表を指定するとき

探索条件中に限定述語の副問合せを指定するとき

DELETE文に次に示す指定をする場合

探索条件中の外への参照がある副問合せに，更新表を指定するとき

探索条件中に限定述語の副問合せを指定するとき

(3)　フロータブルサーバの割り当てに関する最適化の特徴

フロータブルサーバの割り当てに関する最適化の特徴を次の表に示します。

表4‒7　フロータブルサーバの割り当てに関する最適化の特徴

最適化方法

長　所

短　所

省略した場合

データ取り出しバックエンドサーバに，ソートなどの負荷が掛かる処理を割り当てないため，同時に同じバックエンドサーバからデータを取り出すSQL文を実行した場合，高速に検索できます。

データ取り出し以外のバックエンドサーバをフロータブルサーバとして割り当てるため，通信負荷が高くなります。

フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）

「フロータブル候補数の拡大」と組み合わせると，フロータブルサーバをすべてのバックエンドサーバに割り当てるため，フロータブルサーバでのソートなどの並列処理の効果が高くなります。

複数のSQL文を同時に実行する場合，同一フロータブルサーバに複数の処理が割り当てられるため，同時実行性が損なわれます。また，通信負荷も高くなります。

フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）

検索に使用する表が定義されているバックエンドサーバにだけ，フロータブルサーバを割り当てるため，表定義によって使用するバックエンドサーバを使い分けることができます。

分割数が少ない表に大量のデータが格納されている場合は，使用できるフロータブルサーバが少なくなるため，すべてのバックエンドサーバを有効に使用できなくなります。

データ収集用サーバの分離機能

データ収集用サーバにデータを送る場合，同じサーバと別サーバから同時にデータが転送されると，同じサーバからの転送を優先します。これによって，別サーバの処理は後になってしまいます。データ収集用サーバの分離機能を適用すると，すべてのサーバを別サーバとして扱うことができるので，すべてのサーバから均等にデータを受け取れるようになります。

1SQL文中に集合演算，副問合せを伴った検索など，問合せが複数個ある場合は，常に同じフロータブルサーバが使用されるため，同時実行性が損なわれます。

(4)　フロータブルサーバの割り当て候補数に関する最適化の特徴

フロータブルサーバの割り当て候補数に関する最適化の特徴を次の表に示します。

表4‒8　フロータブルサーバの割り当て候補数に関する最適化の特徴

最適化方法

長　所

短　所

省略した場合

データ件数が多い検索では，フロータブルサーバの割り当て台数を多くします。データ件数が少ない検索では，フロータブルサーバの割り当て台数を少なくします。

探索条件に=やBETWEENなどの絞り込める述語を指定している場合，HiRDBはデータ件数が少ないと判断します。実際に=やBETWEENなどであまり絞り込めない場合でも，フロータブルサーバの割り当て台数を少なくするため，サーバの処理負荷が高くなります。

フロータブルサーバ候補数の拡大

データ件数が多い検索では，すべてのフロータブルサーバを使用して効率的に検索できます。

データ件数が少ない検索でもすべてのフロータブルサーバを使用するため，SQL文の同時実行性が損なわれます。また，サーバ間の通信経路が複雑になるため，表の分割数が多い場合には，通信負荷も高くなります。

(5)　各最適化でのフロータブルサーバの割り当て方法

(a)　最適化方法を省略した場合

最適化方法を省略した場合のフロータブルサーバの割り当てを次の図に示します。

図4‒18　最適化方法を省略した場合のフロータブルサーバの割り当て

［説明］

「フロータブルサーバ候補数の拡大」を指定しない場合は，FLT1及びFLT2から，HiRDBがフロータブルサーバとして必要と判断した台数を割り当てます。ただし，FLT1及びFLT2の両方を割り当てるとは限りません。

「フロータブルサーバ候補数の拡大」を指定した場合は，FLT1及びFLT2の両方を割り当てます。

表を定義していないバックエンドサーバがある場合で，複数のSQLから同じデータを取り出し，データ取り出しバックエンドサーバをデータ取り出し処理にだけ使用するときに適用してください。

(b)　フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）を適用する場合

フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）を適用する場合のフロータブルサーバの割り当てを次の図に示します。

図4‒19　フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）を適用する場合のフロータブルサーバの割り当て

［説明］

「フロータブルサーバ候補数の拡大」を指定しない場合は，BES1，BES2，BES3，FLT1，及びFLT2から，HiRDBがフロータブルサーバとして必要と判断した台数を割り当てます。ただし，すべてのサーバを割り当てるとは限りません。

「フロータブルサーバ候補数の拡大」を指定した場合は，BES1，BES2，BES3，FLT1，及びFLT2を割り当てます。

SQL文を単独で実行する場合で，すべてのバックエンドサーバを効率的に使用するときに適用してください。

(c)　フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）を適用する場合

フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）を適用する場合のフロータブルサーバの割り当てを次の図に示します。

図4‒20　フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）を適用する場合のフロータブルサーバの割り当て

［説明］

「フロータブルサーバ候補数の拡大」を指定しない場合は，BES1，BES2，及びBES3から，HiRDBがフロータブルサーバとして必要と判断した台数を割り当てます。ただし，BES1，BES2，及びBES3すべてを割り当てるとは限りません。

「フロータブルサーバ候補数の拡大」を指定した場合は，BES1，BES2，及びBES3を割り当てます。

複数のSQL文を実行する場合で，それぞれの検索が別のバックエンドサーバに定義されている表をアクセスし，表ごとに使用するバックエンドサーバを分けて運用するときに適用してください。

(d)　データ収集用サーバの分離機能を適用する場合

データ収集用サーバの分離機能を適用する場合のフロータブルサーバの割り当てを次の図に示します。

図4‒21　データ収集用サーバの分離機能を適用する場合のフロータブルサーバの割り当て

［説明］

複数のBESから1か所のBESにデータを集める（データ収集処理）必要のあるSQLに対しては，FLT1，FLT2，及びFLT3から，データ収集用にFLT3を割り当てます。SQL文中でデータ収集処理を複数回実行する場合は，必ずこのデータ収集用サーバ（FLT3）を割り当てます。

データ収集以外の処理をする場合，「フロータブルサーバ候補数の拡大」を指定しないときは，BES1，BES2，BES3，FLT1，及びFLT2から，HiRDBがフロータブルサーバとして必要と判断した台数を割り当てます。ただし，BES1，BES2，BES3，FLT1，及びFLT2すべてを割り当てるとは限りません。

「フロータブルサーバ候補数の拡大」を指定した場合は，BES1，BES2，BES3，FLT1，及びFLT2を割り当てます。

SQL文中にデータ収集処理がない場合は，「フロータブルサーバ対象拡大（バックエンドサーバ）」を適用したときと同じ動作となります。

4.5.5　グループ分け処理方式（HiRDB/パラレルサーバ限定）

グループ分け処理方式に影響がある最適化を次に示します。

グループ分け高速化処理

自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理

HiRDBがグループ分けのためのソート又はハッシング処理を不要と判断した場合は，より高速に処理できる方式が選択されます。グループ分け処理方式については，マニュアル「HiRDB コマンドリファレンス」を参照してください。

グループ分け処理方式に関する最適化の特徴を次の表に示します。

表4‒9　グループ分け処理方式に関する最適化の特徴

最適化方法

（グループ分け処理方式

の種類）

長　所

短　所

最適化を省略した場合

(FLOATABLE SORT)

バックエンドサーバ間のデータ件数に偏りがあり，グループ化してもデータ件数があまり減らない場合は高速に検索できます。

通信量が多くなるため，グループ化数が少なく，データ件数が多い場合には性能が悪くなります。

グループ分け高速化処理

(HASH)

グループ数が少ない場合は高速に検索できます。

ハッシングでグループ化をするため，グループ数が多い場合には性能が悪くなります。

自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理

(LIST SORT)

グループ化することで，データ件数が大幅に減る場合は高速に検索できます。また，分割キーでグループ化する場合も高速に検索できます。

各バックエンドサーバでソート処理をするため，バックエンドサーバ間のデータ件数に偏りがある場合は，データ件数の多いサーバの処理時間が長くなるため，性能が悪くなります。

(1)　最適化を省略した場合のグループ分け処理方式

最適化を省略した場合のグループ分け処理方式を次の図に示します。

図4‒22　最適化を省略した場合のグループ分け処理方式

［説明］

データ取り出し処理だけをします。

グループ化列でのソート，グループ化だけをします。

グループ化処理結果を集めて，クライアントに転送します。

(2)　グループ分け高速化処理を適用した場合のグループ分け処理方式

グループ分け高速化処理を適用した場合のグループ分け処理方式を次の図に示します。

図4‒23　グループ分け高速化処理を適用した場合のグループ分け処理方式

［説明］

データ取り出し後，グループ化列でハッシングしてグループ化をします（フロータブルサーバは使用しません）。

各バックエンドサーバでのグループ化結果を集めて，更に全体をグループ化して，結果をクライアントに転送します。

(3)　自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理を適用した場合のグループ分け処理方式

自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理を適用した場合のグループ分け処理方式を次の図に示します。ただし，この図は1表を検索するときの処理方式です。

図4‒24　自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理を適用した場合のグループ分け処理方式

［説明］

データ取り出し後，グループ化列でソート，グループ化をします（フロータブルサーバは使用しません）。

各バックエンドサーバでのグループ化結果を集めて，更に全体をグループ化して，結果をクライアントに転送します。

4.5.6　結合方式

(1)　結合方式の種類

結合方式の種類及び特徴（直積を除く）を次の表に示します。この表にある結合方式を適用できなかった場合は，直積が適用されます。

表4‒10　結合方式の種類及び特徴

結合方式

処理方式

初回のデータ取り出し

長所

短所

マージジョイン

結合列でソートして，結合列の値が小さいものから順に突き合わせ処理をします。

遅い

ヒット件数の多い表同士でも，少ないメモリで結合できるので，ほかの方式に比べて性能劣化が少ないです。

また，結合列のデータがソート済みで，マージジョインのためのソート処理をキャンセルできる場合は，高速に検索できます。

結合する列のデータがソートされていない場合，ソート処理の負荷が高くなり，性能が悪くなります。

ネストループジョイン

外表の結合列の値を使用して，内表の結合列に定義されているインデクスをサーチして，突き合わせを入れ子にしたものを繰り返して処理します。

速い

内表を結合列に指定したインデクスで絞り込める場合，高速に検索できます。

外表から行を1件取り出すごとに，インデクスを使用して内表を検索するため，外表のヒット件数が多い場合は性能が悪くなります。

ハッシュジョイン

内表の結合列からハッシュ表を作成し，外表の結合列をハッシングして内表から作成したハッシュ表と突き合わせ処理をします。

内表のヒット件数が少ない場合は速い（ネストループジョインよりは遅く，マージジョインよりは速い）

内表のヒット件数が少なく，外表のヒット件数が多い場合，高速に検索できます。

内表のヒット件数が多い場合は使用するメモリが多くなります。また，メモリを使用できなくなった分については，いったんファイルに退避するため，性能が悪くなります。

SELECT-APSL

？パラメタを含んだ条件がある場合，あらかじめ結合方法の候補を複数作成しておいて，？パラメタの値を入力した時点で最適な検索方法を決定します。

実際に選択された検索方法によって異なる

？パラメタの値を入力する時点で，最適な検索方法を選択できます。

最適化情報収集ユティリティ（pdgetcst）を実行しておく必要があります。※

また，複数の結合方法の候補を作成するため，SQLオブジェクトのサイズが大きくなります。

注※

最適化情報収集ユティリティを実行していても，最適なアクセスパスを選択できない場合があります。最適化情報収集ユティリティの実行要否については，マニュアル「HiRDB コマンドリファレンス」を参照し，性能について十分に検証するようにしてください。

(2)　処理方式

(a)　マージジョイン

マージジョインは，外表をあまり絞り込めないときに有効です。

SORT MERGE JOIN：

外表と内表から行を取り出して，それぞれ作業表を作成しソートします。その後，結合条件を満たした行同士を結合します。

SORT MERGE JOINの処理方式を次の図に示します。

図4‒25　SORT MERGE JOINの処理方式

KEY SCAN MERGE JOIN

外表と内表から，KEY SCANで行を取り出します。その後，結合条件を満たした行同士を結合します。

KEY SCAN MERGE JOINの処理方式を次の図に示します。

図4‒26　KEY SCAN MERGE JOINの処理方式

LIST SCAN MERGE JOIN

外表と内表から作業表を作成し，ソートをしないで結合列の昇順に行を取り出します。その後，結合条件を満たした行同士を結合します。

LIST SCAN MERGE JOINの処理方式を次の図に示します。

図4‒27　LIST SCAN MERGE JOINの処理方式

L-KEY R-LIST MERGE JOIN

外表はKEY SCANで行を取り出し，内表は作業表を作成し，ソートをしないで行を取り出します。その後，結合条件を満たした行同士を結合します。

L-KEY R-SORT MERGE JOIN

外表はKEY SCANで行を取り出し，内表は作業表を作成し，ソートをして行を取り出します。その後，結合条件を満たした行同士を結合します。

L-LIST R-KEY MERGE JOIN

外表は作業表を作成し，ソートをしないで行を取り出し，内表はKEY SCANで行を取り出します。その後，結合条件を満たした行同士を結合します。

L-LIST R-SORT MERGE JOIN

外表は作業表を作成し，ソートをしないで行を取り出します。また，内表は作業表を作成し，ソートをして行を取り出します。その後，結合条件を満たした行同士を結合します。

L-SORT R-KEY MERGE JOIN

外表は作業表を作成し，ソートをして行を取り出し，内表はKEY SCANで行を取り出します。その後，結合条件を満たした行同士を結合します。

L-SORT R-LIST MERGE JOIN

外表は作業表を作成し，ソートをして行を取り出し，内表は作業表を作成し，ソートをしないで行を取り出します。その後，結合条件を満たした行同士を結合します。

(b)　ネストループジョイン

ネストループジョインは，内表にインデクスが定義されていて，外表をかなり絞り込めるときに有効です。

NESTED LOOPS JOIN

外表から1行ずつ行を取り出し，内表のそれぞれの行に突き合わせて，結合条件を満たす行を取り出す入れ子型のループ処理をする結合方法です。

NESTED LOOPS JOINの処理方式を次の図に示します。

図4‒28　NESTED LOOPS JOINの処理方式

R-LIST NESTED LOOPS JOIN

内表から行を取り出して作業表を作成します。その後，外表から1行ずつ行を取り出して，それぞれの行に対して内表から作成した作業表を突き合わせ，結合条件を満たす行を取り出す入れ子型のループ処理をする結合方法です。

R-LIST NESTED LOOPS JOINの処理方式を次の図に示します。

図4‒29　R-LIST NESTED LOOPS JOINの処理方式

(c)　ハッシュジョイン

HASH JOIN

あらかじめ内表の結合列の値でハッシングしてハッシュ表を作成しておいて，外表を1行取り出すごとに外表の結合列の値でハッシングして，内表から作成しておいたハッシュ表と突き合わせて結合します。

HASH JOINの処理方式を次の図に示します。

図4‒30　HASH JOINの処理方式

ハッシュジョインには，4種類の処理方式があります。ハッシュジョインの処理方式と特徴を次の表に示します。

表4‒11　ハッシュジョインの処理方式と特徴

処理方式

内容

長所

短所

選択方法

一括ハッシュジョイン

内表から作成したハッシュ表を，すべて作業表用バッファ領域に展開し，ハッシュジョインをする方式です。

メモリ使用量はやや多くなり，処理性能もやや良くなります。

ハッシュ表を，すべて作業表用バッファ領域に展開してハッシュジョインをするため，高速に処理できます。

内表のハッシュ表サイズが大きい場合，使用する作業表用バッファ領域が大きくなるのでSQL文の同時実行性が損なわれます。

ハッシュ表サイズを変更します。※

バケット分割ハッシュジョイン

内表，外表を複数のバケットに分割し，内表の一部のバケットからハッシュ表を作成して作業表用バッファ領域に展開します。さらに，残りのバケットを作業表用ファイルに退避しておいて，作業表用バッファ領域に展開された内表のバケットと，同じ値の領域の外表バケットを読み出して，ハッシュジョインします。そして，作業表用ファイルから，内表を少しずつ作業表用バッファ領域に展開してハッシュジョインをする方式です。

メモリ使用量は少なくなり，処理性能はやや悪くなります。

作業表用バッファ領域が少ない環境でも，ハッシュジョインができます。

内表，外表の行をいったん作業表用ファイルに退避するため，作業表用バッファ領域だけでハッシュジョインする場合に比べると，性能が悪くなります。

連続ハッシュジョイン

3表以上を検索する場合に，最も外側の表以外の表から，ハッシュ表を作成して作業表用バッファ領域に展開しておいて，連続してハッシュジョインをする方式です。

メモリ使用量は多くなり，処理性能は良くなります。

ハッシュ表をすべて作業表用バッファ領域に展開してハッシュジョインをするので，高速に処理できます。

また，最も外側の表だけが大きい場合，高速に処理できます。

連続実行する表の数が多くなると，使用する作業表用バッファ領域が大きくなります。

選択できません。

表の行数を基に，HiRDBが自動的に最適な方式を選択します。

断続ハッシュジョイン

3表以上を検索する場合，表又は作業表を結合するごとに，結合結果を作業表用ファイルに退避してハッシュジョインをする方式です。

メモリ使用量は少なくなり，処理性能は悪くなります。

作業表用バッファ領域が少ない環境でも，3表以上のハッシュジョインができます。

表又は作業表を結合するごとに，結合結果をいったんファイルに退避するため，入出力が多くなり性能が悪くなります。

注※

ハッシュ表サイズの変更については，「ハッシュジョイン，副問合せのハッシュ実行を適用する場合の準備」を参照してください。

各処理方式の概要を次に示します。

●一括ハッシュジョイン

内表から作成したハッシュ表を，すべて作業表バッファ領域に展開してハッシュジョインします。

一括ハッシュジョインの処理方式を次の図に示します。

図4‒31　一括ハッシュジョインの処理方式

●バケット分割ハッシュジョイン

内表，外表をバケットに分割し，内表の一部を作業表用バッファ領域に展開し，残りを作業表用ファイルに退避します。

バケットとは，表の結合列の値でハッシングして，複数の小さな表に分割することをいいます。

結合処理は，作業表用バッファ領域に展開された内表の一部で行います。まず，内表からハッシュ表を作成し，外表から1行ずつ取り出して内表から作成したハッシュ表と突き合わせて結合をします。作業表バッファ領域にある表同士の結合が終わった時点で，作業表用ファイルから外表，内表のバケットを作業表用バッファ領域に展開し，同様に結合処理をします。そして，表全体を作業表用バッファ領域に展開して結合した時点で終了となります。

バケット分割ハッシュジョインの処理方式を次の図に示します。

図4‒32　バケット分割ハッシュジョインの処理方式

●連続ハッシュジョイン

3表以上の検索に適用します。

まず，最も外側の表以外の表からハッシュ表を作成し，作業表用バッファ領域に展開します。次に，外表から1行取り出してハッシングして，内表から作成したハッシュ表と突き合わせて結合します。結合条件を満たす場合には，結合結果でハッシングしてハッシュ表と突き合わせて結合します。

最後の行まで結合し終わるか，又は条件が偽になった時点で，最も外側の表まで戻り，次の行を取り出して同様に結合処理を繰り返します。結合途中で内表の結合キー値が重複している箇所がある場合には，そこまで戻って結合処理を繰り返します。重複キー値の処理がすべて終了したら，最も外側の表まで戻り，次の行を取り出して同様に結合処理を繰り返します。

連続ハッシュジョインの処理方式を次の図に示します。

図4‒33　連続ハッシュジョインの処理方式

●断続ハッシュジョイン

3表以上の検索に適用します。

まず，最初の結合の内表からハッシュ表を作成し，作業表用バッファ領域に展開します。次に，外表を1行ずつ取り出して外表の結合列の値でハッシングし，内表から作成したハッシュ表と突き合わせて結合します。外表からすべての行を取り出して結合し終わったら，次の結合処理に移ります。

結合結果が外表になる場合と，内表になる場合とで処理が変わります。

結合処理が外表になる場合は，次の結合の内表からハッシュ表を作成し，結合結果から1行ずつ取り出して，内表から作成したハッシュ表と突き合わせて結合します。

処理結果が内表になる場合は，結合結果からハッシュ表を作成し，外表から1行ずつ取り出して，結合結果から作成したハッシュ表と突き合わせて結合します。

断続ハッシュジョインの処理方式を次の図に示します。なお，この処理方式では，外表1→（（外表2→内表1）→内表2）と結合した場合を例にしています。

図4‒34　断続ハッシュジョインの処理方式

(d)　SELECT-APSL

SELECT-APSLは，SQL実行時に結合方法を動的に決定する方式です。

SELECT-APSL（HiRDB/パラレルサーバ限定）

条件に？パラメタを含んでいる場合，？パラメタの値によって最適な結合方法が変わることがあります。また，SQL最適化処理時に？パラメタの値が決まらないため，最適な結合方法が決定できません。そのため，SQL実行時にヒット率を計算して結合方法を決定します。

SELECT-APSLについて，アクセスパス表示ユティリティ（pdvwopt）の表示例を使用して説明します。

条件　　　T1(外表).C1=？パラメタ
基準値　　0.047
　[1] ネストループジョイン
　[2] マージジョイン

［説明］

述語T1(外表).C1=？パラメタのヒット率が，基準値（0.047）より小さい場合

ヒット率が小さく，外表をかなり絞り込めるので，実行時にネストループジョインが選択されます。

述語T1(外表).C1=？パラメタのヒット率が，基準値（0.047）以上の場合

ヒット率が大きく，外表をあまり絞り込めないので，実行時にマージジョインが選択されます。

(e)　直積

CROSS JOIN

外表のすべての行と，内表のすべての行をそれぞれ組み合わせて結合します。2表にわたった条件があれば，結合した後に判定します。

CROSS JOINの処理方式を次の図に示します。

図4‒35　CROSS JOINの処理方式

4.5.7　検索方式

(1)　検索方式の種類

検索方式の種類及び特徴（リストスキャン（LIST SCAN），及びROWID FETCHを除く）を次の表に示します。

リストスキャンは，ビュー表の検索，WITH句問合せ式などで，いったん作業表を作成して検索する場合に適用されます。ROWID FETCHは，カーソルを使用した場合などに適用されます。

表4‒12　検索方式の種類及び特徴

検索方式

処理方式

長所

短所

テーブルスキャン

(TABLE SCAN)

表が格納されているページ（データページ）を順次サーチして，すべての行を参照する方式です。

初回のデータ取り出しは，やや遅いです。

全件検索をする場合は高速に検索できます。

また，インデクスでの絞り込みができない場合も，高速に検索できます。

条件によって検索結果を絞り込める場合でも，すべてのデータページを参照するため，性能は悪くなります。

インデクススキャン

(INDEX SCAN，

MULTI COLUMNS INDEX SCAN，

PLUGIN INDEX SCAN)

インデクスをバイナリサーチして，目的のデータの行識別子を取得するごとに，その行識別子が指すデータページ中の行を参照する方式です。

初回のデータ取り出しは，速いです。

インデクスで絞り込める場合は高速に検索できます。

クラスタキーインデクスの場合は，あまり絞り込めない場合でも高速に検索できます。

また，ソート処理を省略できる場合があります。※１

インデクスであまり絞り込めない場合は，データページに対するランダムな入出力が増え，性能が悪くなります。

キースキャン

(KEY SCAN，

MULTI COLUMNS KEY SCAN，

PLUGIN KEY SCAN)

インデクスをバイナリサーチして，インデクス中のデータ（インデクス構成列の値又は行識別子）だけを参照する方式です。

インデクスの構成列又は行識別子だけを参照する場合に適用されます。

初回のデータ取り出しは，速いです。

インデクスであまり絞り込めない場合でも，データページの入出力がなく，インデクスページを参照するだけなので，高速に検索できます。

また，ソート処理を省略できる場合があります。※１

特にありません。

SELECT-APSL

？パラメタを含んだ条件がある場合，あらかじめ検索方法の候補を複数作成しておいて，？パラメタの値を入力する時点で最適な検索方法を決める方式です。

初回のデータ取り出しの速さは，実際に選択された検索方法によって異なります。

？パラメタの値を入力する時点で，インデクスでの絞り込み率を考慮して最適な検索方法を選択できます。

最適化情報収集ユティリティ（pdgetcst）を実行しておく必要があります。※２

また，複数の検索方法の候補を作成するため，SQLオブジェクトのサイズが大きくなります。

ANDの複数インデクス利用

(AND PLURAL INDEXES SCAN)

複数のインデクスを使用して複数の作業表を作成し，作業表間の積集合，和集合，及び差集合を組み合わせて結果を求める方式です。

初回のデータ取り出しは，遅いです。

積集合，和集合，及び差集合を組み合わせて結果を求めるため，複雑な条件を指定した場合でも，インデクスを使用しての評価ができます。

作業表を複数個作成し，それぞれの作業表に対してソートをするため，インデクスであまり絞り込めない場合は，ソートする件数が多くなるため，性能が悪くなります。

ORの複数インデクス利用

(OR PLURAL INDEXES SCAN)

複数のインデクスを使用して検索した結果を，一つの作業表に格納して，最後に重複排除をして結果を求める方式です。

初回のデータ取り出しは，遅いです。

OR演算子で結ばれたそれぞれの探索条件に対して，インデクスで絞り込める場合は，高速に検索できます。

複数のインデクスを使用して検索した結果を，一つの作業表に格納してソート及び重複排除をするため，重複排除する前の件数が多い場合には，性能が悪くなります。

注※1

ORDER BY処理やGROUP BY処理で，インデクスでソートできる場合，ソートをしないでデータを取り出します。ソート処理を省略しているかどうかは，アクセスパスで確認できます。

注※2

最適化情報収集ユティリティを実行した場合でも，最適なアクセスパスを選択できないときがあります。最適化情報収集ユティリティの実行要否については，マニュアル「HiRDB コマンドリファレンス」を参照し，性能について十分な検証をするようにしてください。

(2)　処理方式

(a)　インデクスを使用しない検索

TABLE SCAN

インデクスを使用しないで，表のデータページを検索します。

TABLE SCANの処理方式を次の図に示します。

図4‒36　TABLE SCANの処理方式

(b)　一つのインデクスを使用した検索

INDEX SCAN

単一列インデクスのインデクスページを検索して絞り込んだ後，表のデータページを検索します。

INDEX SCANの処理方式を次の図に示します。

図4‒37　INDEX SCANの処理方式

KEY SCAN

単一列インデクスのインデクスページだけを検索します。データページは検索しません。

KEY SCANの処理方式を次の図に示します。

図4‒38　KEY SCANの処理方式

MULTI COLUMNS INDEX SCAN

複数列インデクスのインデクスページを検索して絞り込んだ後，表のデータページを検索します。

MULTI COLUMNS INDEX SCANの処理方式を次の図に示します。

図4‒39　MULTI COLUMNS INDEX SCANの処理方式

MULTI COLUMNS KEY SCAN

複数列インデクスのインデクスページだけを検索します。データページは検索しません。

MULTI COLUMNS KEY SCANの処理方式を次の図に示します。

図4‒40　MULTI COLUMNS KEY SCANの処理方式

PLUGIN INDEX SCAN

プラグインインデクスを使用して絞り込んだ後，表のデータページを検索します。

PLUGIN INDEX SCANの処理方式を次の図に示します。

図4‒41　PLUGIN INDEX SCANの処理方式

PLUGIN KEY SCAN

プラグインインデクスを使用してインデクスページだけを検索します。データページは検索しません。

PLUGIN KEY SCANの処理方式を次の図に示します。

図4‒42　PLUGIN KEY SCANの処理方式

(3)　SELECT-APSL

SELECT-APSL（HiRDB/パラレルサーバの場合）

条件に？パラメタを含んでいる場合，？パラメタの値によって最適な検索方法が変わることがあります。また，前処理時に？パラメタの値が決まらないため，最適な検索方法が決定できません。そのため，SQL実行時にヒット率を計算して検索方法を決定します。

(4)　複数のインデクスを使用した検索

AND PLURAL INDEXES SCAN

AND演算子又はOR演算子で結ばれた探索条件に対して，それぞれのインデクスを使用して検索し，行識別子（ROWID）をそれぞれの作業表に格納します。これらの作業表を，AND演算子の場合は積集合，OR演算子の場合は和集合，ANDNOT演算子（ASSIGN LIST文でだけ使用できます）の場合は，差集合をとって一つの作業表にまとめます。その後，この作業表の行識別子を基に行を取り出します。

各条件から行識別子の作業表を作成する場合に，条件列にインデクスがなくても，TABLE SCANによって作業表を作成するときがあります。

AND PLURAL INDEXES SCANの処理方式を次の図に示します。

図4‒43　AND PLURAL INDEXES SCANの処理方式

OR PLURAL INDEXES SCAN

OR演算子で結ばれた探索条件に対して，それぞれのインデクスを使用して検索し，行識別子（ROWID）を一つの作業表に格納します。この作業表の重複する行を重複排除した後，行識別子を基に行を取り出します。

各条件から行識別子の作業表を作成する場合に，条件列にインデクスがなくても，TABLE SCANによって作業表を作成するときがあります。

OR PLURAL INDEXES SCANの処理方式を次の図に示します。

図4‒44　OR PLURAL INDEXES SCANの処理方式

(5)　内部的に作成した作業表の検索

LIST SCAN

内部的に作成した作業表を検索します。

LIST SCANの処理方式を次の図に示します。

図4‒45　LIST SCANの処理方式

(6)　行識別子を使用した検索

ROWID FETCH

行識別子（ROWID）をキーにして表を検索します。行を取り出す必要がない場合は検索しません。

ROWID FETCHの処理方式を次の図に示します。

図4‒46　ROWID FETCHの処理方式

4.5.8　外への参照のない副問合せの実行方式

(1)　実行方式の種類

外への参照のない副問合せの実行方式及び特徴を次の表に示します。

表4‒13　外への参照のない副問合せの実行方式及び特徴

実行方式

処理方式

長所

短所

作業表ATS実行

あらかじめ結果を求めて作業表を作成しておいて，外側の問合せに対してインデクスを使用して検索する場合に，副問合せ結果から作成した作業表を使用してサーチ範囲を絞り込む方式です。

外側の問合せに対してインデクスを使用できます。したがって，副問合せのヒット件数が少く，外側の問合せの件数が多い場合，インデクスを使用することでサーチ範囲を絞り込めるときに高速に検索できます。

副問合せの結果の行数分，外側の問合せに対してインデクスを使用して検索するため，副問合せのヒット件数が多い場合には性能が悪くなります。

作業表実行

あらかじめ副問合せの結果を求めて作業表を作成しておいて，外側の問合せを1行検索するごとに副問合せの結果から作成した作業表と突き合わせて，副問合せを含む述語を評価する方式です。

作業表を必要とするすべての副問合せの条件に対して適用できます。

外側の問合せの件数が多い場合には性能が悪くなります。

行値実行

あらかじめ副問合せを求めておいて（作業表は作成しません），外側の問合せを検索する場合に副問合せの結果の値を使用することで，副問合せを含む条件を評価する方式です。

外側の問合せに対してインデクスを使用できます。したがって，外側の問合せの件数が多い場合，インデクスを使用することでサーチ範囲を絞り込めるときは高速に検索できます。

外側の問合せの件数が多く，インデクスを使用して副問合せを含む述語を絞り込めない場合は，性能が悪くなります。

ハッシュ実行

あらかじめ副問合せ結果からハッシュ表を作成しておいて，外側の問合せを1行取り出すごとに外側の問合せの値をハッシングして，ハッシュ表と突き合わせをする方式です。

副問合せのヒット件数が少なく，外側の問合せの件数が多い場合，高速に検索できます。

副問合せのヒット件数が多い場合は，使用する作業表用バッファサイズが大きくなります。使用する作業表バッファサイズを指定できますが，作業表用バッファが一杯になった場合は，いったん作業表用ファイルへ退避するため，性能が悪くなります。

外への参照のない副問合せの最適な実行方式を次の表に示します。

表4‒14　外への参照のない副問合せの最適な実行方式

副問合せ

最適な実行方式

=ANY，=SOMEの限定述語の右側，及びIN述語の右側に指定した表副問合せ

外側の問合せ，副問合せのデータ件数によって異なります。

外側の問合せ：多い

副問合せ　　：少ない

作業表ATS実行，又はハッシュ実行が有効です。

外側の問合せ：中間

副問合せ　　：少ない

外側の問合せ：少ない

副問合せ　　：少ない

外側の問合せ：多い

副問合せ　　：中間

ハッシュ実行が有効です。

外側の問合せ：中間

副問合せ　　：中間

外側の問合せ：少ない

副問合せ　　：中間

ハッシュ実行，又は作業表実行が有効です。

外側の問合せ：多い

副問合せ　　：多い

ハッシュ実行が有効です（データ件数が多いので性能向上は期待できません）。

外側の問合せ：中間

副問合せ　　：多い

外側の問合せ：少ない

副問合せ　　：多い

ハッシュ実行，又は作業表実行が有効です。なお，外への参照のあるEXISTS述語に変換すると，高速に検索できることがあります。

限定述語（=ANY及び=SOMEを除く）の右側，及びIN述語の右側に指定した表副問合せ

常に作業表実行が適用されます。

EXISTS述語の副問合せ

常に行値実行が適用されます。

上記以外の副問合せ（スカラ副問合せ，及び行副問合せ）

(2)　処理方式

(a)　作業表ATS実行

WORK TABLE ATS SUBQ

=ANY，=SOMEの限定述語の右側，及びIN述語の右側に指定した表副問合せに適用します。

まず，副問合せの選択式の値を求めて，作業表を作成します。次に，インデクスを使用して外側の問合せを検索します。このとき，副問合せの結果を使用してインデクスのサーチ範囲を絞り込んで検索します。問合せのサーチ条件種別はATS又はRANGESとなります。

なお，副問合せに対して，HiRDBが内部的に重複排除（DISTINCT）をすることがあります。

WORK TABLE ATS SUBQの処理方式を次の図に示します。

図4‒47　WORK TABLE ATS SUBQの処理方式

限定述語と比較述語の例を次に示します。

例：

SELECT C1 FROM T1 WHERE C2=ANY(SELECT C2 FROM T2)

注　T1(C2)にインデクスが定義されているものとします。

まず，副問合せの表T2を検索して，T2.C2の値から作業表を作成します。次に，作業表からT2.C2の値を1行ずつ取り出して，外側の問合せのT1.C2に定義したインデクスのサーチ範囲を絞り込んで検索します。

(b)　作業表実行

WORK TABLE SUBQ

限定述語の右側，及びIN述語の右側の表副問合せに適用します。

まず，副問合せの選択式の値を求めて，作業表を作成します。次に，外側の問合せを検索します。このとき，外側の問合せを1行検索するごとに副問合せの結果と突き合わせて探索条件を評価します。

WORK TABLE SUBQの処理方式を次の図に示します。

図4‒48　WORK TABLE SUBQの処理方式

例：

SELECT T1.C1 FROM T1 WHERE T1.C2=ANY(SELECT C2 FROM T2)

まず，副問合せの表T2を検索して，T2.C2の値から作業表を作成します。次に，外側の問合せを実行して1行ずつ取り出し，T1.C2の値を副問合せから作成した作業表と突き合わせて探索条件を評価します。

(c)　行値実行

ROW VALUE SUBQ

行副問合せ，スカラ副問合せ，及びEXISTS述語に対して適用します。

まず，副問合せの選択式の値を求めます。次に，副問合せ結果の値を使用して，外側の問合せの副問合せを含む条件を評価します。

比較述語では，外側の問合せを検索する場合にHiRDBがインデクスを使用した方がよいと判断したときには，インデクスを使用して検索します。

ROW VALUE SUBQの処理方式を次の図に示します。

図4‒49　ROW VALUE SUBQの処理方式

例を次に示します。

例：

SELECT T1.C1 FROM T1 WHERE T1.C2<(SELECT MAX(C2) FROM T2)

まず，副問合せの表T2を検索して，MAX(T2.C2)の値を取り出します（作業表は作成しません）。次に，外側の問合せ中の副問合せを含む条件を，MAX(T2.C2)の値を使用して評価します。

(d)　ハッシュ実行

HASH SUBQ

限定述語の右側，及びIN述語の右側の表副問合せに適用します。

まず，副問合せの選択式の値を求めます。このとき，選択式の値からハッシュ表を作成します。次に，外側の問合せを実行し，限定述語及びIN述語の左側に指定した列の値でハッシングして，副問合せから作成したハッシュ表と突き合わせて検索します。

HASH SUBQの処理方式を次の図に示します。

図4‒50　HASH SUBQの処理方式

例を次に示します。

例：

SELECT T1.C1 FROM T1 WHERE T1.C2=ANY(SELECT C2 FROM T2)

まず，副問合せの表T2を検索して，T2.C2の値からハッシュを作成します。次に，外側の問合せを実行し，T1.C2の値でハッシングして，副問合せから作成したハッシュ表と突き合わせて検索します。

4.5.9　外への参照のある副問合せの実行方式

(1)　実行方式の種類

外への参照のある副問合せの実行方式及び特徴を次の表に示します。

表4‒15　外への参照のある副問合せの実行方式及び特徴

実行方式

処理方式

長所

短所

ネストループ作業表実行

外側の問合せを1行検索するごとに，副問合せを実行して作業表を作成して，副問合せを含む条件を評価する方式です。

副問合せの探索条件のうち，外への参照列を含む条件に対して，インデクスを使用できます。したがって，副問合せの探索条件が，インデクスを使用することでサーチ範囲を絞り込める場合に高速に検索できます。

外側の問合せの検索で，外への参照列が同値の行を連続して検索した場合には，副問合せの検索を省略できます。

外側の問合せのヒット件数が多い場合には，性能が悪くなります。

ネストループ行値実行

外側の問合せを1行検索するごとに，副問合せを実行して（作業表は作成しない），副問合せを含む条件を評価する方式です。

副問合せの探索条件のうち，外への参照列を含む条件に対してインデクスを使用できます。したがって，副問合せの探索条件が，インデクスを使用することでサーチ範囲を絞り込める場合には高速に検索できます。

外側の問合せの検索で，外への参照列が同値の行を連続して検索した場合には，副問合せの検索を省略できます。

外側の問合せのヒット件数が多い場合には，性能が悪くなります。

ハッシュ実行

あらかじめ副問合せ結果からハッシュ表を作成しておいて，外側の問合せを1行取り出すごとに外側の問合せの値をハッシングし，ハッシュ表と突き合わせをする方式です。

外への参照列を含む条件を除いた副問合せのヒット件数が少なく，外側の問合せの件数が多い場合，高速に検索できます。

外への参照列を含む条件にインデクスを使用できません。

外への参照列を含む条件を除いた副問合せのヒット件数が多い場合，使用する作業表用バッファサイズが大きくなります。使用する最大作業表用バッファサイズを指定できますが，作業表バッファ領域が一杯になった場合は，いったんファイルに退避するため，性能が悪くなります。

副問合せがジョインしている場合，外への参照列を含む条件の評価はジョイン後になります。

(2)　処理方式

(a)　ネストループ作業表実行

NESTED LOOPS WORK TABLE SUBQ

限定述語の右側，及びIN述語の右側の表副問合せに適用します。

まず，外側の問合せを実行します。このとき，外側の問合せを1行取り出すごとに外への参照列の値を使用して副問合せを実行し，副問合せの選択式の値を求めて作業表を作成します。次に，副問合せから作成した作業表を使用して，外側の副問合せを含む条件を評価します。

外側の問合せは1行ずつ処理するため，同時に複数の作業表領域を作成することはありません。外側の問合せの行数分，副問合せを実行するため，外側の問合せの行数が多い場合は，性能が悪くなります。

NESTED LOOPS WORK TABLE SUBQの処理方式を次の図に示します。

図4‒51　NESTED LOOPS WORK TABLE SUBQの処理方式

例：

SELECT C1 FROM T1
  WHERE C1=ANY(SELECT C1 FROM T2 WHERE C2=T1.C2)

注　下線部が外への参照列となります。

外側の問合せを実行します。外側の問合せのすべての行に対して，外への参照列（T1.C2）の値を使用して副問合せを実行し，T2.C1の値から作業表を作成します。次に，T1.C1をT2.C1の作業表と突き合わせて，副問合せを含む条件を評価します。

(b)　ネストループ行値実行

NESTED LOOPS ROW VALUE SUBQ

行副問合せ，スカラ副問合せ，及びEXISTS述語に対して適用します。

まず，外側の問合せを実行します。このとき，外側の問合せを1行取り出すごとに外への参照列の値を使用して副問合せを実行し，副問合せの選択式の値を求めます（作業表は作成しません）。次に。副問合せ結果の値を使用して，外側の問合せの副問合せを含む条件を評価します

外側の問合せの行数分，副問合せを実行するため，外側の問合せの行数が多い場合は性能が悪くなります。

NESTED LOOPS ROW VALUE SUBQの処理方式を次の図に示します。

図4‒52　NESTED LOOPS ROW VALUE SUBQの処理方式

例：

SELECT C1 FROM T1
  WHERE C1=(SELECT MAX(C1) FROM T2 WHERE C2=T1.C2)

注　下線部が外への参照列となります。

外側の問合せを実行します。外側の問合せのすべての行に対して，外への参照列（T1.C2）の値を使用して副問合せを検索し，MAX(T2.C1)の値を取り出します（作業表は作成しません）。次に，外側の問合せ中の副問合せを含む条件を評価します。

(c)　ハッシュ実行

HASH SUBQ

EXISTS述語，比較述語の右側，限定述語の右側，及びIN述語の右側の表副問合せに適用します。

まず，外への参照列を含む条件を除いて副問合せを実行し，問合せの選択式の値を求めます。このとき，副問合せ中の=で比較している探索条件から，外への参照列で絞り込んでいる列を使用してハッシュ表を作成します（=ANY，=SOME，IN述語の場合は，更に選択式の列も使用してハッシュ表を作成します）。

次に，外側の問合せを実行し，1行取り出すごとに外への参照列となる値でハッシングして（=ANY，=SOME，IN述語の場合は，更に述語の左辺の列も使用してハッシングします），副問合せから作成したハッシュ表と突き合わせて検索します。

HASH SUBQの処理方式を次の図に示します。

図4‒53　HASH SUBQの処理方式

EXISTS述語と比較述語の例を次に示します。

例１：EXISTS述語の場合

SELECT T1.C1 FROM T1
  WHERE EXISTS(SELECT * FROM T2 WHERE C1='a' AND C2=T1.C2)

注　下線部が外への参照列となります。

まず，外への参照列が含まれる条件を除いて副問合せを評価し，外への参照列を使用して絞り込んでいる副問合せの列（T2.C2）の値でハッシュ表を作成します。次に，外側の問合せを実行し，外への参照列（T1.C2）の値でハッシングして，副問合せから作成したハッシュ表と突き合わせてEXISTS述語を評価します。

例２：比較述語の場合

SELECT T1.C1 FROM T1
  WHERE T1.C3<(SELECT T2.C3 FROM T2 WHERE C1='a' AND C2=T1.C2)

注　下線部が外への参照列となります。

まず，外への参照列が含まれる条件を除いて副問合せを評価し，外への参照列で絞り込んでいる副問合せの列（T2.C2）からハッシュ表を作成します。次に，外側の問合せを実行し，外への参照列（T1.C2）の値でハッシングして，副問合せから作成したハッシュ表と突き合わせて外への参照列を含む条件を評価し，真の場合は更に比較述語（<）を評価します。

4.5.10　ハッシュジョイン，副問合せのハッシュ実行を適用する場合の準備

SQL拡張最適化オプションで「ハッシュジョイン，副問合せのハッシュ実行」を適用する場合に，設定しておく項目について説明します。

(1)　事前に設定する項目

ハッシュジョイン，副問合せのハッシュ実行を適用する場合，次の項目を設定しておく必要があります。

ハッシュ表サイズ

作業表用バッファの確保方式

作業表用バッファサイズ

(a)　ハッシュ表サイズ

システム定義のpd_hash_table_sizeオペランド，又はクライアント環境定義のPDHASHTBLSIZEでハッシュ表サイズを設定します。ハッシュ表サイズは，ハッシュ表最大行長を算出後，次の計算式で求めた値以上を設定してください。

また，ハッシュ表サイズはシステム定義のpd_work_buff_sizeオペランド，又はpd_work_buff_expand_limitオペランドより小さい値を設定してください。同じ値，又は大きい値を指定すると，ハッシュジョイン，副問合せのハッシュ実行時にエラーになります。

　ハッシュ表サイズ（単位：キロバイト）
　　　　≧↑（ハッシュ表最大行長(単位：バイト)×2＋32）÷128↑×128

ハッシュ表最大行長：

個々のSELECT文について，次の単位でハッシュ表行長を算出します。その中で最大のもの（ハッシュ表最大行長）を求めます。

複数の表を＝で結合している問合せ指定

副問合せ（次のどれかに該当する場合）

・＝ANYの限定述語の，右側の表副問合せ

・＝SOMEの限定述語の，右側の表副問合せ

・IN述語の右側の表副問合せ

・上記以外で，探索条件中に＝で外への参照列を指定している副問合せ

ハッシュ表行長の算出方法を次に示します。

複数の表を＝で結合している問合せ指定

=で結合している表の選択式及び探索条件中に指定した列について，表ごとに次の計算式から行長を求めます。

1で求めた表ごとの行長の中で，最小のもの以外を使用し，次の計算式でハッシュ表行長を求めます。

副問合せ

副問合せの選択式中に指定した列，及び探索条件中の外への参照列を含む述語に指定した列について，次の計算式からハッシュ表行長を求めます。

ai：

i番目のデータ長です。データ長については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。ただし，＝で結合している表の選択式にだけ指定した，定義長256バイト以上の文字データ（各国文字，混在文字含む）の場合は12となります。

上記から求めたサイズのハッシュ表には，1,500〜2,000行を格納できます。この行数に比べて，ジョインの内表件数や副問合せの検索件数が多い場合は，バケット分割が複数回実行されて，性能が良くならないことがあります。この場合，次の一括ハッシュジョインのハッシュ表サイズを算出して設定するか，又は「ハッシュ表サイズのチューニング方法」を参照してチューニングしてください。

一括ハッシュジョインのハッシュ表サイズ（単位：キロバイト）
　＝↑(ハッシュ表データページ数＋ハッシュ表管理テーブルページ数)
　　　÷1セグメントページ数↑×128

ハッシュ表データページ数
　＝↑ハッシュ表行数÷MIN｛↓(ハッシュ表ページ長−48)÷ハッシュ表行長↓，255｝↑
　　＋63

ハッシュ表管理テーブルページ数
　＝↑(16×ハッシュ表行数
　　　＋(↑(ハッシュ表データページ数×ハッシュ表ページ長＋16×ハッシュ表行数)
　　　　　　÷(1セグメントページ数×ハッシュ表ページ長)↑×8)＋8)
　　　÷ハッシュ表ページ長↑

1セグメントページ数
　＝↓(128×1024)÷ハッシュ表ページ長↓

ハッシュ表ページ長は，次の表のハッシュ表行長から求めてください。

ハッシュ表行長

ハッシュ表ページ長

0〜1012

4096

1013〜2036

8192

2037〜4084

16384

4085〜16360

32768

16361〜32720

↑(ハッシュ表行長＋48)÷2048↑×2048

ハッシュ表行長：

一括ハッシュジョインの対象がジョインの場合は，ジョインの内表の件数です。対象が副問合せの場合は，探索条件中の外への参照列を含む述語を除いた副問合せの検索件数です。

(b)　作業表用バッファの確保方式

作業表用バッファの確保方式を，サーバプロセス単位でバッファ一括確保（pool又はpool2）に設定しておく必要があるため，システム定義のpd_work_buff_modeオペランドにpool又はpool2を指定します。

(c)　作業表用バッファサイズ

ハッシュ表は，作業表用バッファ内に確保されます。指定したハッシュ表サイズより作業表用バッファサイズ，又は作業表用バッファの増分確保の上限サイズが小さいと，作業表用バッファ不足でエラーとなります。したがって，システム定義のpd_work_buff_sizeオペランド又はpd_work_buff_expand_limitオペランドには，次の計算式で求めた値以上を設定してください。

作業表用バッファサイズ（単位：キロバイト）
　≧（ハッシュ表サイズ(単位：キロバイト)×2＋256）
　　×SELECT文のハッシュジョイン最大数＋128

SELECT文のハッシュジョイン最大数：

個々のSELECT文のハッシュジョイン数を次の計算式から求めて，その中で最大のものをSELECT文のハッシュジョイン最大数とします。なお，ハッシュジョイン数は，アクセスパス表示ユティリティ（pdvwopt）で出力される結合処理情報のJoin Typeが"HASH JOIN"となっている項目をカウントすることでも求められます。

SELECT文でのハッシュジョイン数
　＝((＝で結合している表数)−(＝で結合している問合せ指定数))
　　＋(＝ANYの限定述語の数)
　　＋(＝SOMEの限定述語の数)
　　＋(IN(副問合せ)の指定数)
　　＋(そのほかの副問合せで，探索条件中に＝で
　　　　　外への参照列を指定している副問合せ数)

なお，複数のカーソルを同時に開いて検索する場合は，カーソルごとに算出した値を合計します。

(例)
  SELECT A.A1,B.B2,C.C3 FROM A,B,C  ......................3-1
    WHERE A.A1=B.B1 AND A.A2=B.B2
      AND B.B3=C.C3
      AND A.A1=C.C1
      AND A.A4=ANY(SELECT D.D4 FROM D)  ..................1
      AND A.A5=SOME(SELECT E.E5 FROM E)  .................1
      AND A.A6 IN(SELECT F.F6 FROM F WHERE F.F1=A.A1)  ...1
      AND EXISTS(SELECT G.G1 FROM G WHERE G.G1=B.B1)   ...1

この例の場合，(3-1)＋1＋1＋1＋1となるので，このSELECT文のハッシュジョイン数は6になります。

なお，上記の作業表用バッファサイズの計算式で求めた値に，更に4,096キロバイト程度の余裕があれば，バケット分割のときの入出力単位が大きくなるため，性能が良くなります。

すべてバケット分割をしない一括ハッシュジョインとなる場合，次の計算式を満たしていれば実行できます。

作業表用バッファサイズ（単位：キロバイト）
　≧ハッシュ表サイズ(単位：キロバイト)
　　×SELECT文のハッシュジョイン最大数＋384

(2)　ハッシュ表サイズのチューニング方法

(a)　利用するチューニング情報

ハッシュ表サイズは，次のどちらかのチューニング情報を基にチューニングできます。

UAP統計レポート（クライアント環境定義PDUAPREPLVLを指定）

統計解析ユティリティのUAPに関する統計情報

UAP統計レポートについては「UAP統計レポート機能」を，統計解析ユティリティについてはマニュアル「HiRDB コマンドリファレンス」を参照してください。

(b)　チューニング情報から分かる項目

ハッシュ表サイズのチューニング情報を取得すると，次のことが分かります。

すべてのデータを一括してハッシュ表に展開する一括ハッシュジョインになっているか，又はバケット単位にハッシュ表に展開するバケット分割ハッシュジョインになっているか

バケット分割ハッシュジョインの場合に，バケットの再分割をしているか

バケット分割ハッシュジョインの場合に，一括ハッシュジョインにするにはハッシュ表サイズをどのくらいにしたらよいか

バケット分割ハッシュジョインの場合に，バケットの再分割をしないようにするためにはハッシュ表サイズをどのくらいにしたらよいか

なお，バケットの再分割とは，バケットの大きさがハッシュ表サイズを超える場合に，最大3レベルまでバケット分割を再帰的に繰り返すことをいいます。例を次に示します。

1回のバケット分割での分割数は，次の計算式から決まります。

  バケット分割数
    ＝MIN｛↓(ハッシュ表サイズ÷2)÷ハッシュ表ページ長↓，64｝

また，一括ハッシュジョインの場合でも，ジョインの内表については1レベルバケット分割をします。

(c)　チューニング方法

ハッシュ表サイズのチューニング方法を次の表に示します。

表4‒16　ハッシュ表サイズのチューニング方法

チューニング情報

（単位：キロバイト）

チューニング方法

最大一括ハッシュ表サイズ

ハッシュ表サイズにこの値以上が設定されていれば，すべてバケット分割をしない一括ハッシュジョインになります。※１また，この値が，ハッシュ表サイズに指定できる上限を超えている場合は，一括ハッシュジョインにはできません。

この値が0の場合は，ハッシュジョイン，副問合せのハッシュ実行がされていません。

1レベル最大バケットサイズ

ハッシュ表サイズにこの値以上が設定されていれば，バケット分割が1レベルで完了しています。また，バケット分割が2レベル以上の場合は，ハッシュ表サイズにこの値を指定することで，バケット分割が1レベルで完了するようになります。※２

すべてバケット分割をしない一括ハッシュジョインの場合は，この値には0が表示されます。

2レベル最大バケットサイズ

ハッシュ表サイズにこの値以上が設定されていれば，バケット分割が2レベルで完了しています。また，バケット分割が3レベル以上の場合は，ハッシュ表サイズにこの値を指定することで，バケット分割が2レベルで完了するようになります。※２

2レベルバケット分割が一度もされなかった場合は，この値には0が表示されます。

3レベル最大バケットサイズ

ハッシュ表サイズにこの値以上が設定されていれば，バケット分割が3レベルで完了しています。

ハッシュ表サイズがこの値より小さい場合，1バケットを部分的にハッシュ表展開していく処理となり，処理効率が悪くなります。この場合，ハッシュ表サイズにこの値以上を設定するようにしてください。※２

また，ハッシュジョイン，副問合せのハッシュ実行を適用しないようにした方が，性能が良くなる場合もあります。

2レベルバケット分割が一度もされなかった場合は，この値には0が表示されます。

注※1

ハッシュ表サイズを大きくすると，バケット分割数を求める計算式に従って，1回のバケット分割数が増加することがあります。このため，チューニング情報取得時よりも，大きなハッシュ表サイズが必要となることがあります。

チューニング情報を利用してハッシュ表サイズを大きくした場合，再度チューニング情報を取得し，意図したとおりになっていなければ，新たに取得したチューニング情報に合わせて，再びハッシュ表サイズを大きくする必要があります。

注※2

ハッシュ表サイズを大きくすると，バケット分割数を求める計算式に従って，1回のバケット分割数が増加することがあります。このため，チューニング情報取得時よりも，小さなハッシュ表サイズでも，意図したレベルでバケット分割が完了することがあります。

これに対して，ハッシュ表サイズを小さくすると，1回のバケット分割数を減少させることがあるため，チューニング情報取得時と同じレベルでバケット分割が完了しなくなることがあります。したがって，このチューニング情報は，ハッシュ表サイズを大きくしていくときに利用してください。

4.5.11　探索高速化条件の導出

探索高速化条件とは，WHERE句の探索条件，FROM句のON 探索条件から，CNF変換又は条件推移で新たに導出される条件のことをいいます。探索高速化条件を導出すると，検索する行が早い段階で絞り込まれるため，検索性能が向上します。

探索高速化条件を導出する場合，導出の元となる探索条件は残すため，絞り込みに使用できない条件は生成しないで，導出した条件の中で最適な条件だけを生成できます。

探索高速化条件を導出すると，HiRDBがアクセスパス（表の検索方法，結合方法，結合順序など）を決定する場合に，新しく導出した探索高速化条件も考慮して最適化をします。そのため，探索高速化条件を導出すると，アクセスパスは次のように変わることがあります。

検索する行が早い段階で絞り込まれると判断して，インデクスを使用した検索が選ばれやすくなります。

結合条件にORを指定している場合に，CNF変換とORの簡約化で結合条件をORの外側に抜き出せるときは，直積以外にもネストループジョイン，マージジョイン，及びハッシュジョインができるようになります。

結合する場合に，片方の表だけに制限条件が付くときはネストループジョインが選ばれやすくなり，両方の表に制限条件が付くときはマージジョイン又はハッシュジョインが選ばれやすくなります。

なお，複雑な条件から探索高速化条件を導出すると，探索高速化条件を生成する時間，及び実行時の評価時間が長くなるため，SQLによっては性能が低下することがあります。

(1)　探索高速化条件の適用範囲

探索高速化条件を導出するかどうかは，SQL最適化オプション及びSQL拡張最適化オプションの指定値によって変わります。SQL最適化オプション及びSQL拡張最適化オプションと，探索高速化条件の導出の関係を次の表に示します。

表4‒17　SQL最適化オプション及びSQL拡張最適化オプションと探索高速化条件の導出の関係

種類

導出元となる条件

導出される条件

SQL最適化オプション及びSQL拡張最適化オプションの指定

探索高速化条件の導出をしない

探索高速化条件の導出をする※1

CNF変換

1表のORの条件

1表条件

×

×

2表以上にわたるORの条件

1表条件

○※2

○

ORの簡約化で結合条件(列=列)が抜き出せる場合

○※2

○

上記以外の2表以上の条件

×

×

条件推移

表A，Bの結合条件と，表Aの条件

表Bの1表条件

×

○

表A，Bの結合条件と，表A，Cの結合条件

表B，Cの結合条件

×

×

（凡例）

○：探索高速化条件を生成します。

×：探索高速化条件を生成しません。

注※1

SQL最適化オプションに「探索高速化条件の導出」を指定します。

注※2

探索高速化条件の導出元の検索に直積が指定されている場合，探索高速化条件を生成しますが，次に示す条件によって異なります。探索高速化条件の導出の可否とその条件を次に示します。

導出元の検索

導出の条件

導出される探索高速化条件

導出可否

2表検索

直積となる

ORの簡約化によって結合条件(列=列)が抜き出せない場合

導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合

なし

×

導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合

1表条件

○

−

結合条件(列=列)

−

上記以外の2表条件

×

ORの簡約化によって結合条件(列=列)が抜き出せる場合

導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合

なし

×

導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合

1表条件

○

−

結合条件(列=列)

○

上記以外の2表条件

×

直積とならない

−

×

3表以上の検索

すべて直積となる

ORの簡約化によって結合条件(列=列)が抜き出せない場合

導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合

なし

×

導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合

1表条件

○

−

結合条件(列=列)

−

上記以外の2表条件

×

一部がORの簡約化によって結合条件(列=列)が抜き出せる場合

導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合

なし

×

導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合

1表条件

○

−

結合条件(列=列)

○

上記以外の2表条件

×

ORの簡約化によって結合条件(列=列)が抜き出せる場合

導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合

なし

×

導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合

1表条件

○

−

結合条件(列=列)

○

上記以外の2表条件

×

一部が直積，その他が直積にならない

ORの簡約化によって結合条件(列=列)が抜き出せない場合

導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合

なし

×

導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合

1表条件

○

−

結合条件(列=列)

−

上記以外の2表条件

×

一部がORの簡約化によって結合条件(列=列)が抜き出せる場合

導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合

なし

×

導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合

1表条件

○

−

結合条件(列=列)

○

上記以外の2表条件

×

ORの簡約化によって結合条件(列=列)が抜き出せる場合

導出元の探索条件に導出する2表条件と同じ表の1表条件がある場合

なし

×

導出元の探索条件に導出する2表条件と同じ表の1表条件がない場合

1表条件

○

−

結合条件(列=列)

○

上記以外の2表条件

×

直積とならない

−

×

（凡例）

○：導出する

×：導出しない

−：該当しない

(2)　CNF変換での探索高速化条件の導出

CNF変換とは，ORで結合した条件（DNF形式(Disjunctive Normal Form：選言標準形)）を，ANDで結合された等価な条件（CNF形式(Conjunctive Normal Form：連言標準形)）に変換することをいいます。WHERE句の探索条件，及びFROM句のON 探索条件に対してCNF変換をすることで，探索高速化条件を導出します。

(a)　CNF変換で導出される探索条件

CNF変換で導出される探索条件を次に示します。

ORで結合した2表以上にわたる条件に対して，CNF変換することで1表条件が生成できる場合に，この条件を探索高速化条件として導出します。1表条件を導出することで結合する件数を絞り込めます。

ORで結合したすべての条件に2表の同じ結合条件（列＝列だけ）が含まれる場合，この条件をCNF変換することで（結合条件 OR … OR 結合条件）が導出できます。そして，ORで結合した結合条件がすべて同じ条件で重複排除できる場合（ORの簡約化），結合条件を探索高速化条件として導出します。結合条件を導出することで，直積処理がなくなり，性能が向上します。

なお，SQL最適化オプション及びSQL拡張最適化オプションの指定によって，探索高速化条件を導出するかどうかが決まります。SQL最適化オプション及びSQL拡張最適化オプションと，探索高速化条件の導出の関係については，「探索高速化条件の適用範囲」を参照してください。

(b)　CNF変換をしない条件

次のどれかに該当する場合，CNF変換での探索高速化条件の導出はしません。

導出後の探索条件に副問合せが含まれる場合

外結合で，ON 探索条件に指定した導出元の条件に対して，導出後の条件が外表に閉じる条件となる場合

外結合で，WHERE句に指定した導出元の条件に対して，導出後の条件が内表に閉じる条件となる場合

外結合で，WHERE句に指定した導出元の条件に対して，導出後の条件が2表以上の条件となる場合

探索高速化条件を導出した結果，論理演算の最大ネスト数が255を超える場合

HAVING句に探索条件を指定した場合

導出後の探索条件が直積後のジョインの結合条件となる場合

(3)　条件推移での探索高速化条件の導出

条件推移とは，二つ以上の条件から新たな条件を導き出すことをいいます。

条件推移で導出される探索条件を次に示します。

結合条件を介した1表条件の推移による探索高速化条件の導出

結合条件の推移での探索高速化条件の導出（UNIX版限定）

なお，SQL最適化オプション及びSQL拡張最適化オプションの指定によって，探索高速化条件を導出するかどうかが決まります。SQL最適化オプション及びSQL拡張最適化オプションと，探索高速化条件の導出の関係については，「探索高速化条件の適用範囲」を参照してください。

(a)　結合条件を介した1表条件の推移による探索高速化条件の導出

2表の結合条件（列＝列だけ）と，結合列を含む1表条件がある場合に，結合相手の列に対して1表条件を導出します。例を次に示します。

T1.C1 = T2.C1 AND T1.C1 > 10
→T1.C1 = T2.C1 AND T1.C1 > 10 AND T2.C1 > 10

下線部分が，導出した探索高速化条件となります。

条件推移の対象となる1表条件

条件推移の対象となる1表条件を次に示します。

列指定 比較演算子 ｛値指定｜外への参照列｝

比較演算子（=，<>，^=，!=，<，<=，>，>=）の左右が逆の場合にも条件推移をします。

列指定 IS 〔NOT〕 NULL

列指定 〔NOT〕 IN （値指定〔，値指定〕…）

列指定 〔NOT〕 LIKE パターン文字列 〔ESCAPE エスケープ文字〕

結合列のデータ長が異なる場合，パターン文字列が定数で，かつ前方一致のときにだけ条件推移をします。

列指定 〔NOT〕 XLIKE パターン文字列 〔ESCAPE エスケープ文字〕

結合列のデータ長が異なる場合には条件推移をしません。

列指定 BETWEEN ｛値指定｜外への参照列｝ AND ｛値指定｜外への参照列｝

列指定 〔NOT〕 SIMILAR TO パターン文字列 〔ESCAPE エスケープ文字〕

結合列のデータ長が異なる場合，パターン文字列が定数で，かつLIKE述語と等価となる前方一致のときにだけ条件推移をします。

条件推移をしない条件

次のどれかに該当する場合，条件推移はしません。

外結合の場合

内結合の場合で，WHERE句の探索条件とFROM句のON 探索条件との間での条件推移の場合（3表以上の内結合をしている場合，複数のON 探索条件間での条件推移はします）

結合列のデータ型が固定長と可変長の比較の場合

結合列のデータ型がFLOAT又はSMALLFLTの場合

繰返し列を使用して結合している場合

探索高速化条件を導出した結果，論理演算の最大ネスト数が255を超える場合

HAVING句に探索条件を指定した場合

(b)　結合条件の推移での探索高速化条件の導出（UNIX版限定）

2表の結合条件（列＝列だけ）と，どちらか片方の列と別の表の列との結合条件（列＝列だけ）がある場合に，結合条件がない列同士から新たな結合条件を導出します。相関名の指定がある場合は，相関名が異なれば別の表とみなします。例を次に示します。

T1.C1 = T2.C1 AND T2.C1 = T3.C1
→T1.C1 = T2.C1 AND T2.C1 = T3.C1 AND T1.C1 = T3.C1

下線部分が，導出した探索高速化条件となります。

結合条件の推移をしない条件

次のどれかに該当する場合，結合条件の推移をしません。

外結合の場合

内結合の場合で，WHERE句の探索条件とFROM句のON 探索条件との間での条件推移（3表以上の内結合をしている場合，複数のON 探索条件間での条件推移はします）

結合列のデータ型が固定長と可変長の比較の場合

結合列のデータ型がFLOAT又はSMALLFLTの場合

探索高速化条件を導出した結果，論理演算の最大ネスト数が255を超える場合

HAVING句に探索条件を指定した場合

4.6　データ保証レベル

データ保証レベルとは，検索したデータをトランザクションのどの時点まで保証するのかを指定するものです。データ保証レベルには，0〜2のレベルがあります。データをほかのユーザに更新させない場合，ほかのユーザが更新中のデータを参照したい場合など，目的に応じて指定します。

4.6.1　データ保証レベルの指定方法

システム単位でデータ保証レベルを指定したい場合は，システム定義のpd_isolation_levelオペランドを指定します。

UAPごと，又はルーチンごとにデータ保証レベルを指定したい場合は，次の箇所のデータ保証レベルを指定します。

クライアント環境定義のPDISLLVL

ALTER PROCEDUREのSQLコンパイルオプション

ALTER ROUTINEのSQLコンパイルオプション

ALTER TRIGGERのSQLコンパイルオプション

CREATE PROCEDUREのSQLコンパイルオプション

CREATE TRIGGERのSQLコンパイルオプション

CREATE TYPEの手続き本体のSQLコンパイルオプション

SQLごとにデータ保証レベルを指定したい場合は，そのSQL文に排他オプションを指定します。カーソル宣言時の排他オプションと表操作時の排他オプションの関係については「カーソル宣言と排他の関係」を参照してください。

データ保証レベルと排他オプションを同時に指定した場合，排他オプションの指定が有効となります。データ保証レベルと排他オプションとの関係を次の表に示します。

表4‒18　データ保証レベルと排他オプションとの関係

データ保証レベル

排他オプション

0

WITHOUT LOCK NOWAIT※１※３

1

WITHOUT LOCK WAIT※３

2

WITH SHARE LOCK又はEXCLUSIVE LOCK※２

注※1

FOR UPDATE句を指定したカーソル宣言，及びFOR UPDATE句を指定した動的SELECT文に対しては，データ保証レベルに0を指定しても無視され，1が仮定されます。

注※2

FOR UPDATE句を指定したカーソル宣言，及びFOR UPDATE句を指定した動的SELECT文に対しては，WITH EXCLUSIVE LOCKが仮定されます。

注※3

次の場合，WITH EXCLUSIVE LOCKが仮定されます。

FOR UPDATE句を指定したカーソル宣言，及びFOR UPDATE句を指定した動的SELECT文の実行時，クライアント環境定義PDFORUPDATEEXLOCKにYESを指定している。

ルーチン定義時に指定するSQLコンパイルオプションのデータ保証レベルの直後に，FOR UPDATE EXCLUSIVEを指定している。

4.6.2　データ保証レベルの種類

(1)　データ保証レベル0

データ保証レベル0は，ほかのユーザが更新中のデータでも，更新完了を待たないで参照する場合に指定します。ほかの保証レベルよりも同時実行性を向上できますが，同一トランザクション中で同じ行を2度検索した場合，1回目と2回目の検索結果は同じにならないときもあります。

データ保証レベル0のデータの保証範囲を次の図に示します。

図4‒54　データ保証レベル0のデータの保証範囲

(2)　データ保証レベル1

データ保証レベル1は，検索処理が終了するまで（HiRDBがページ又は行を見終わるまで），一度検索したデータをほかのユーザに更新させない場合に指定します。そのため，より同時実行性を向上できますが，同一トランザクション中で同じ行を2度検索した場合，1回目と2回目の検索結果は同じにならないときもあります。

データ保証レベル1のデータの保証範囲を次の図に示します。

図4‒55　データ保証レベル1のデータの保証範囲

(3)　データ保証レベル2

データ保証レベル2は，トランザクションが終了するまで，一度検索したデータをほかのユーザに更新させない場合に指定します。したがって，検索したデータについてはトランザクション終了まで保証されますが，検索していないデータについては保証されません。同一トランザクション中で同じ行を2度検索した場合，追加された行があると1回目と2回目の検索結果は同じにならないときもあります。

データ保証レベル2のデータの保証範囲を次の図に示します。

図4‒56　データ保証レベル2のデータの保証範囲

(4)　注意事項

更新を伴うカーソル宣言に対しては，データ保証レベルに0を指定しても無視され，1が仮定されます。

4.6.3　データ保証レベルを指定した場合の検索結果の例

データ保証レベルを指定した場合の検索結果の例を次の図に示します。UAP1はSHOHIN表を検索するUAP，UAP2はSHOHIN表にデータを挿入するUAP，UAP3はSHOHIN表のデータを更新するUAPです。UAP1〜UAP3の1.〜4.は実行順序を表します。

図4‒57　データ保証レベルを指定した場合の検索結果の例

上記のようにUAPを実行した場合，UAP1の1.と4.の検索結果は次のようになります。なお，UAP1〜UAP3のデータ保証レベルはすべて同じレベルで実行したものとします。

データ保証レベル

UAP1の検索結果

説　　明

1.

4.

0

テレビ 100

ビデオ 80

テレビ 100

ビデオ 200

アンプ 50

同一トランザクション中で同じデータを2度検索していますが，1.と4.の検索結果は異なります。

データは保証されないため，4.の検索結果には，2.と3.の処理が反映されます。

1

テレビ 100

ビデオ 80

テレビ 100

ビデオ 200

アンプ 50

同一トランザクション中で同じデータを2度検索していますが，1.と4.の検索結果は異なります。

検索処理中のデータは保証されますが，検索処理が終了するとデータは保証されなくなります。そのため，4.の検索結果には，2.と3.の処理が反映されます。

2

テレビ 100

ビデオ 80

テレビ 100

ビデオ 80

アンプ 50

同一トランザクション中で同じデータを2度検索していますが，1.と4.の検索結果は異なります。

1.で検索したとき，テレビとビデオの行は保証されますが，2.についてはデータが保証されないため，2.の処理は反映されます。ただし，3.についてはデータが保証されるため，3.の処理は待ち状態となり，4.の検索結果には反映されません。

4.7　ブロック転送機能

4.7.1　機能概要

ブロック転送は，HiRDBシステムからHiRDBクライアントにデータを転送するときに，任意の行数単位で転送する機能です。HiRDBクライアントからHiRDBシステムにアクセスし，大量のデータを検索する場合に有効です。

ブロック転送機能の概要を次の図に示します。

図4‒58　ブロック転送機能の概要

4.7.2　使用方法

ブロック転送機能は，次の条件を両方とも満たす場合に実行されます。

クライアント環境定義PDBLKFに2以上の値を指定している場合，又はPDBLKBUFFSIZEに1以上の値を指定している場合

FETCH文を指定している場合（ただし，次のどれかの条件に該当する場合を除きます）

カーソルを使用した更新

BLOB型の選択式がある検索

クライアント環境定義PDBINARYBLKFがNOで，かつ定義長が32,001バイト以上のBINARY型の選択式がある検索

BLOB位置付け子型，又はBINARY位置付け子型の変数を使用して結果を受け取る検索で，かつホールダブルカーソルを使用した検索

4.7.3　サーバ，クライアント間の通信バッファサイズの指定

クライアント環境定義PDBLKBUFFSIZEで，サーバ，クライアント間で使用する通信バッファのサイズを指定できます。

取り出す行数（PDBLKFの指定値）が大きい場合の検索で，PDBLKBUFFSIZEを指定すると，サーバ側が指定値以上に通信バッファメモリを割り当てることを抑止します。ただし，1行転送する分の通信バッファメモリは確保します。

サーバ，クライアント間の通信バッファのメモリ計算式については，マニュアル「HiRDB システム導入・設計ガイド」の「ブロック転送又は配列FETCHで必要なメモリ所要量の計算式」を参照してください。

4.7.4　1回の通信で転送する行数

ブロック転送機能を使用した場合，1回の通信で転送する行数を次に示します。

PDBLKFの指定値

PDBLKBUFFSIZEの指定値

0

1以上

1

ブロック転送機能は適用されません。

行数=MIN（X，4096）※

X：

次の条件式を満たすnの最大値（指定したバッファサイズに格納できる行の数）となります。ただし，(a-b)＜ciの場合は1となります（iは1）。

　　　　 n

(a-b)≧Σci　（単位：バイト）

　　　　 i=1

ci：FETCH文で受け取る検索結果中の，i行目のデータ長

a：指定したバッファサイズ（PDBLKBUFFSIZEの値×1024）

b：ヘッダ情報など（864＋22×d＋2×e）

bの計算式中のd及びeの内容を次に示します。

d：SELECT句で指定する検索項目数

e：SELECT句で指定する検索項目での，BINARY型の選択式の数

2以上

行数=PDBLKFの値

行数=MIN（X，Y）※

X：指定したバッファサイズに格納できる行の数（上記のXと同じ）

Y：PDBLKFの値

注※

実行するSQLによっては，算出した行数より多く転送することがあります。

4.7.5　注意事項

ブロック転送機能では，1回の転送行数を多くすることで通信オーバヘッドが減少するので検索時間を短縮できますが，所要メモリが増加するので使用時には注意が必要です。クライアント環境定義PDBLKBUFFSIZEを指定すると，通信バッファに使用するメモリサイズを一定値以下に抑えられます。ただし，値が小さ過ぎると，通信回数が削減されないため，ブロック転送機能の効果がなくなります。

問合せ式での検索結果のうち，先頭からn行だけの検索結果を必要とする場合にブロック転送機能を適用すると，n行が「1回の通信で転送する行数」に示す行数未満の場合は，不要な検索結果も取得するため，検索性能が劣化するおそれがあります。その場合は，LIMIT句を指定して，必要な行数だけを取得するようにしてください。詳細は，「先頭からn行の検索結果を取得する機能」を参照してください。

次の事象が発生した場合，検索処理を中断して，それまでに検索したデータを返します。

検索中に警告エラーが発生した場合（警告情報とそれまでに検索したデータを返します）※

リストを介した検索で，リスト作成時にあった行が削除，又は属性値が削除，更新された場合（該当する事象を示すリターンコードの情報（SQLCODE=+110）とそれまでに検索したデータを返します）

注※

警告エラーが発生しても検索処理を中断しない場合があります。中断しない場合，指定行数まで検索処理を続けて，検索中に発生したすべての警告エラーの情報と検索データを返します。

ブロック転送機能を使用していて，一つのカーソルの検索結果を複数のFETCH文で受け取る場合，それぞれのFETCH文には同じ埋込み変数を指定するか，又は同じ属性の埋込み変数を指定してください。異なる属性の埋込み変数で検索結果を受け取ろうとするとエラーになります。

ブロック転送機能適用時，HiRDBサーバから複数行取得した場合に暗黙的ロールバックとなるエラーが発生すると，アプリケーションにはHiRDBサーバからの複数行取得終了後の初回検索結果取得時にエラーを返却します。アプリケーションのデバックなどでエラー発生行を正確に受け取りたい場合は，ブロック転送機能を適用しないでアプリケーションを実行してください。

ブロック転送機能の適用有無による暗黙的ロールバックエラーの返却タイミングを次の図に示します。

図4‒59　ブロック転送機能の適用有無による暗黙的ロールバックエラーの返却タイミング

4.8　配列を使用した機能

4.8.1　配列を使用したFETCH機能

(1)　概要

FETCH文で，INTO句に配列型の埋込み変数を指定するか，又はBY句の埋込み変数に検索行数を指定すると，検索結果を一度に複数行取得できます。HiRDBクライアントからHiRDBシステムにアクセスし，大量のデータを検索する場合に有効です。ブロック転送機能とは異なり，複数行の検索結果を取得することをプログラム内で明示的に記述します。

(2)　使用方法

(a)　静的に実行する場合

FETCH文のINTO句に指定した埋込み変数と標識変数を，すべて配列型の変数にしてください。一括して検索する行数は，指定した埋込み変数の最小配列要素数となります。

(b)　動的に実行する場合

次に示す手順で実行してください。

PREPARE文でSELECT文を前処理します。

DESCRIBE文で前処理したSELECT文のSQL記述領域の情報を取得します。

SQL記述領域のSQLDATAに，各データの受け取り領域を設定してください。また，可変長データ型の場合は，1要素のサイズをSQLSYSに設定してください。

FETCH文のUSING DESCRIPTOR句にSQL記述領域を指定し，かつBY句に埋込み変数を指定してください。一括して検索する行数は，BY句に指定した埋込み変数で指定します。

(3)　注意事項

配列を使用したFETCH機能で指定するカーソルは，配列を使用したFETCH機能専用のカーソルとなります。そのカーソルを使用した場合，ブロック転送機能は無効となります。また，そのカーソルを指定して通常のFETCHを実行する場合でも，注意事項4.が適用されます。同一モジュール（プリプロセス単位）で，配列を使用したFETCH機能と通常のFETCHを使用する場合，それぞれ異なるカーソルを使用してください。

配列を使用したFETCH機能では，通常のFETCHとは異なり，検索の途中で取得する行がなくなってNOT FOUNDが発生しても，その直前の行まではデータが取得されているので注意が必要です。同様に，エラーが発生した場合も，エラーが発生した行までのデータは取得されています。

動的に実行する場合，BY句の埋込み変数に受け取り領域以上の行数を指定すると，UAP側の領域を破壊するおそれがあります。

次のどれかに該当する場合，配列を使用したFETCH機能は利用できません。

BLOB型の選択式が問合せ指定にある場合

問合せ指定にBINARY型の選択式があり，かつBINARY型の選択式受け取り領域の1要素分の定義長が4の倍数でない場合

定義長が32,001バイト以上のBINARY型の選択式を含む検索で，HiRDBサーバ，又はHiRDBクライアントライブラリのバージョンのどちらかが07-00以前の場合

(4)　使用例

配列を使用したFETCH機能のコーディング例について説明します。

例１：

FETCH文形式3を使用します。対象となる表はSCODE(CHAR(4))，SNAME(VARCHAR(17))，COL(NCHAR(1))，TANKA(INTEGER)，及びZSURYO(INTEGER)で構成されているものとします。

  long sel_cnt;
  long data_cnt;
  short i;
  char work[17];

  /* 配列型の埋込み変数の宣言 */
  EXEC SQL BEGIN DECLARE SECTION;
      char    xscode[50][5];
      SQL  TYPE  IS  VARCHAR(17)  xsname[50];
      char    xcol[50][3];
      long    xtanka[50];
      long    xzsuryo[50];
  EXEC SQL END DECLARE SECTION;

  EXEC SQL
      DECLARE CR3 CURSOR FOR
         SELECT SCODE,SNAME,COL,TANKA,ZSURYO
         FROM ZAIKO;

  EXEC SQL WHENEVER SQLERROR GOTO FIN;

  EXEC SQL OPEN CR3;

  /*  見出し */

  printf("    *****  在庫表 リスト  *****¥n¥n");
  printf("    商品コード  商品名            色  単価      現在庫量¥n");
  printf("    ----        ----------------  --  --------  --------¥n");

  EXEC SQL WHENEVER SQLERROR GOTO OWARI;
  EXEC SQL WHENEVER NOT FOUND GOTO OWARI;

  /* FETCH */
  sel_cnt = 0;
  for(;;){
      EXEC SQL
          FETCH CR3 INTO :xscode,:xsname,:xcol,:xtanka,:xzsuryo;
      /* SQLERRD2にはこのカーソルで検索したトータル行数を格納 */
      data_cnt = SQLERRD2 - sel_cnt;       /* 取得した行数を求める */
      for(i=0; i < data_cnt; i++){
          memcpy(work, xsname[i].str, xsname[i].len);
          work[xsname[i].len] = ‘¥0’;
          printf("    %4s      %-16s  %2s  %8d  %8d¥n",
                  xscode[i], work, xcol[i], xtanka[i], xzsuryo[i]);
      }
      sel_cnt = SQLERRD2;
  }

OWARI:
/*                                                                 */
/* エラー発生時，及びNOT FOUND発生時でも，データが読み込まれて    */
/* いるため，残りのデータを表示する                                */
/*                                                                 */
  if(sel_cnt  !=  SQLERRD2 ){
      data_cnt = SQLERRD2 - sel_cnt;
      for(i=0; i < data_cnt; i++){
          memcpy(work, xsname[i].str, xsname[i].len);
          work[xsname[i].len] = ‘¥0’;
          printf("    %4s      %-16s  %2s  %8d  %8d¥n",
                  xscode[i], work, xcol[i], xtanka[i], xzsuryo[i]);
      }
  }
FIN:
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL CLOSE CR3;
  EXEC SQL COMMIT;

例２：

FETCH文形式2を使用します。対象となる表はSCODE(CHAR(4))，SNAME(VARCHAR(17))，COL(NCHAR(1))，TANKA(INTEGER)，及びZSURYO(INTEGER)で構成されているものとします。

#include <pdbsqlda.h>              /* ユーザ定義のSQLDAを        */
                                   /* 使用するためにincludeする。*/

  long sel_cnt;
  long data_cnt;
  short i;
  char work[17];

  /* ユーザ定義SQLDAの宣言 */
  PDUSRSQLDA(5)  xsqlda;

  /* 配列型の埋込み変数の宣言 */
  EXEC SQL BEGIN DECLARE SECTION;
      char    xscode[50][5];
      SQL  TYPE  IS  VARCHAR(17)  xsname[50];
      char    xcol[50][3];
      long    xtanka[50];
      long    xzsuryo[50];
      short    arry_num;
  EXEC SQL END DECLARE SECTION;

  EXEC SQL WHENEVER SQLERROR GOTO FIN;

  /* 検索SQLの前処理実行 */
  EXEC SQL PREPARE SEL1 FROM
         ‘SELECT * FROM ZAIKO’ ;

  /* 検索SQLの出力情報取得 */
  PDSQLN(xsqlda) = 5 ;      /* SQLVAR数を設定 */
  EXEC SQL DESCRIBE SEL1 INTO :xsqlda ;

  EXEC SQL
      DECLARE CR3 CURSOR FOR SEL1 ;

  EXEC SQL OPEN CR3;

  /*  SQLVARの設定：本来であれば，I/O領域をSQLDAから動的に確保した */
  /*  方がよいが，例題のため省略する                                 */
  /*  SQLLEN,SQLXDIM,SQLSYSはDESCRIBE時に設定される値を使用する。  */
  /* SCODE列情報設定 */
  PDSQLDATA(xsqlda, 0) = (void *)xscode ;    /* アドレス設定 */
  PDSQLIND(xsqlda, 0) = NULL ;               /* 標識変数NULLクリア */
  PDSQLCOD(xsqlda, 0) = PDSQL_CHAR ;         /* データコード設定 */
  /* SNAME列情報設定 */
  PDSQLDATA(xsqlda, 1) = (void *) xsname;    /* アドレス設定 */
  PDSQLIND(xsqlda, 1) = NULL ;               /* 標識変数NULLクリア */
  PDSQLCOD(xsqlda, 1) = PDSQL_VARCHAR ;      /* データコード設定 */
  PDSQLSYS(xsqlda, 1) = sizeof(xsname[0]) ;  /* 可変長なのでSQLSYSを*/
                                             /* 設定                 */
  /* COL列情報設定 */
  PDSQLDATA(xsqlda, 2) = (void *) xcol;      /* アドレス設定 */
  PDSQLIND(xsqlda, 2) = NULL ;               /* 標識変数NULLクリア */
  PDSQLCOD(xsqlda, 2) = PDSQL_NCHAR ;        /* データコード設定 */
  /* TANKA列情報設定 */
  PDSQLDATA(xsqlda, 3) = (void *) xtanka;    /* アドレス設定 */
  PDSQLIND(xsqlda, 3) = NULL ;               /* 標識変数NULLクリア */
  PDSQLCOD(xsqlda, 3) = PDSQL_INTEGER ;      /* データコード設定 */
  /* GSURYO列情報設定 */
  PDSQLDATA(xsqlda, 4) = (void *) xzsuryo;   /* アドレス設定 */
  PDSQLIND(xsqlda, 4) = NULL ;               /* 標識変数NULLクリア */
  PDSQLCOD(xsqlda, 4) = PDSQL_ INTEGER;      /* データコード設定 */

  /*  見出し */

  printf("    *****  在庫表 リスト  *****¥n¥n");
  printf("    商品コード  商品名            色  単価      現在庫量¥n");
  printf("    ----        ----------------  --  --------  --------¥n");

  EXEC SQL WHENEVER SQLERROR GOTO OWARI;
  EXEC SQL WHENEVER NOT FOUND GOTO OWARI;

  /* FETCH */
  sel_cnt = 0;
  for(;;){
      arry_num = 50 ;
      EXEC SQL
          FETCH CR3 USING DESCRIPTOR :xsqlda BY :arry_num ROWS ;
      /* SQLERRD2にはこのカーソルで検索したトータル行数を格納 */
      data_cnt = SQLERRD2 - sel_cnt;       /* 取得した行数を求める */
      for(i=0; i < data_cnt; i++){
          memcpy(work, xsname[i].str, xsname[i].len);
          work[xsname[i].len] = ‘¥0’;
          printf("    %4s      %-16s  %2s  %8d  %8d¥n",
                  xscode[i], work, xcol[i], xtanka[i], xzsuryo [i]);
      }
      sel_cnt = SQLERRD2;
  }

OWARI:
/*                                                              */
/* エラー発生時，及びNOT FOUND発生時でも，データが読み込まれて */
/* いるため，残りのデータを表示する                             */
/*                                                              */
  if(sel_cnt  !=  SQLERRD2 ){
      data_cnt = SQLERRD2 - sel_cnt;
      for(i=0; i < data_cnt; i++){
          memcpy(work, xsname[i].str, xsname[i].len);
          work[xsname[i].len] = ‘¥0’;
          printf("    %4s      %-16s  %2s  %8d  %8d¥n",
                  xscode[i], work, xcol[i], xtanka[i], xzsuryo [i]);
      }
  }
FIN:
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL CLOSE CR3;
  EXEC SQL COMMIT;

例３：

FETCH文形式3を使用します。対象となる表はXCODE(INTEGER)，及びROW_DATA(BINARY(3002))で構成されているものとします。

  long sel_cnt;
  long data_cnt;
  short i;

  /* 配列型の埋込み変数の宣言 */
  EXEC SQL BEGIN DECLARE SECTION;
      long    xcode[50];
      /* BINARY型の配列を使用したFETCHを行う場合は，    */
      /* 領域長を4の倍数で定義すること                   */
      SQL  TYPE  IS  BINARY(3004)  xrow_data[50];
  EXEC SQL END DECLARE SECTION;

  EXEC SQL
      DECLARE CR3 CURSOR FOR
         SELECT * FROM T_BINARY;

  EXEC SQL WHENEVER SQLERROR GOTO FIN;

  EXEC SQL OPEN CR3;

  /*  見出し */

  printf("    *****  バイナリデータ表  *****¥n¥n");

  EXEC SQL WHENEVER SQLERROR GOTO OWARI;
  EXEC SQL WHENEVER NOT FOUND GOTO OWARI;

  /* FETCH */
  sel_cnt = 0;
  for(;;){

      EXEC SQL
          FETCH CR3 INTO : xcode,: xrow_data;
      /* SQLERRD2にはこのカーソルで検索したトータル行数を格納 */
      data_cnt = SQLERRD2 - sel_cnt;       /* 取得した行数を求める */
      for(i=0; i < data_cnt; i++){
          printf("    CODE=%8d¥n",xcode[i]);
          printf("    DATA_LENGTH=%d¥n", xrow_data [i].len);
          /* BINARYデータ部の表示は例題のため行わない。   */
          /* xrow_data[i].strを各UAP固有の形式に変換すること */
      }
      sel_cnt = SQLERRD2;
  }

OWARI:
/*                                                              */
/* エラー発生時，及びNOT FOUND発生時でも，データが読み込まれて */
/* いるため，残りのデータを表示する                             */
/*                                                              */
  if(sel_cnt  !=  SQLERRD2 ){
      data_cnt = SQLERRD2 - sel_cnt;
      for(i=0; i < data_cnt; i++){
          printf("    CODE=%8d¥n",xcode[i]);
          printf("    DATA_LENGTH=%d¥n", xrow_data [i].len);
          /* BINARYデータ部の表示は例題のため行わない。   */
          /* xrow_data[i].strを各UAP固有の形式に変換すること */
      }
  }
FIN:
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL CLOSE CR3;
  EXEC SQL COMMIT;

例４：

FETCH文形式2を使用します。対象となる表はXCODE(INTEGER)，及びROW_DATA(BINARY(3002))で構成されているものとします。

#include <pdbsqlda.h>       /* ユーザ定義のSQLDAを使用するために */
                            /* includeする。                      */

  long sel_cnt;
  long data_cnt;
  short i;

  /* ユーザ定義SQLDAの宣言 */
  PDUSRSQLDA(2)  xsqlda;

  /* 配列型の埋込み変数の宣言 */
  EXEC SQL BEGIN DECLARE SECTION;
      long    xcode[50];
      /* BINARY型の配列を使用したFETCHを行う場合は，    */
      /* 領域長を4の倍数で定義すること                   */
      SQL  TYPE  IS  BINARY(3004)  xrow_data[50];
      short    arry_num;
  EXEC SQL END DECLARE SECTION;

  EXEC SQL WHENEVER SQLERROR GOTO FIN;

  /* 検索SQLの前処理実行 */
  EXEC SQL PREPARE SEL1 FROM
         ‘SELECT * FROM T_BINARY ;

  /* 検索SQLの出力情報取得 */
  PDSQLN(xsqlda) = 2 ;      /* SQLVAR数を設定 */
  EXEC SQL DESCRIBE SEL1 INTO :xsqlda ;

  EXEC SQL
      DECLARE CR3 CURSOR FOR SEL1 ;

  EXEC SQL OPEN CR3;

  /*  SQLVARの設定：本来であれば，I/O領域をSQLDAから動的に確保した*/
  /*  方がよいが，例題のため省略する                                */
  /*  SQLLEN,SQLXDIM,SQLSYSはDESCRIBE時に設定される値を使用する。 */
  /* XCODE列情報設定 */
  PDSQLDATA(xsqlda, 0) = (void *)xcode ;    /* アドレス設定 */
  PDSQLIND(xsqlda, 0) = NULL ;              /* 標識変数NULLクリア */
  PDSQLCOD(xsqlda, 0) = PDSQL_INTEGER ;     /* データコード設定 */
  /* R_DATA列情報設定 */
  PDSQLDATA(xsqlda, 1) = (void *) xrow_data; /* アドレス設定 */
  PDSQLIND(xsqlda, 1) = NULL ;               /* 標識変数NULLクリア */
  PDSQLCOD (xsqlda, 1) = PDSQL_BINARY ;      /* データコード設定*/
  PDSQLLEN (xsqlda, 1) = 3004 ;              /* 定義長が４の倍数で */
                                             /* ないため再設定する */

  /*  見出し */

  printf("    *****  バイナリデータ表  *****¥n¥n");

  EXEC SQL WHENEVER SQLERROR GOTO OWARI;
  EXEC SQL WHENEVER NOT FOUND GOTO OWARI;

  /* FETCH */
  sel_cnt = 0;
  for(;;){
      arry_num = 50 ;
      EXEC SQL
          FETCH CR3 USING DESCRIPTOR :xsqlda BY :arry_num ROWS ;
      /* SQLERRD2にはこのカーソルで検索したトータル行数を格納 */
      data_cnt = SQLERRD2 - sel_cnt;       /* 取得した行数を求める */
      for(i=0; i < data_cnt; i++){
          printf("    CODE=%8d¥n",xcode[i]);
          printf("    DATA_LENGTH=%d¥n", xrow_data [i].len);
          /* BINARYデータ部の表示は例題のため行わない。   */
          /* xrow_data[i].strを各UAP固有の形式に変換すること */
      }
      sel_cnt = SQLERRD2;
  }

OWARI:
/*                                                              */
/* エラー発生時，及びNOT FOUND発生時でも，データが読み込まれて */
/* いるため，残りのデータを表示する                              */
/*                                                               */
  if(sel_cnt  !=  SQLERRD2 ){
      data_cnt = SQLERRD2 - sel_cnt;
      for(i=0; i < data_cnt; i++){
          printf("    CODE=%8d¥n",xcode[i]);
          printf("    DATA_LENGTH=%d¥n", xrow_data [i].len);
          /* BINARYデータ部の表示は例題のため行わない。   */
          /* xrow_data[i].strを各UAP固有の形式に変換すること */
      }
  }
FIN:
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL CLOSE CR3;
  EXEC SQL COMMIT;

4.8.2　配列を使用したINSERT機能

(1)　概要

複数行分のデータを設定した配列型の変数を指定することで，一つのSQL文で複数行分のデータを挿入できます。配列を使用したINSERT機能を使用すると，HiRDBクライアントとHiRDBサーバとの間の通信回数を削減できます。また，HiRDB/パラレルサーバの場合には，更にHiRDBサーバ内のサーバ間の通信回数も削減できます。そのため，HiRDBクライアントからHiRDBサーバにアクセスし，大量のデータを高速に挿入したい場合に有効となります。

(2)　使用方法

(a)　静的に実行する場合

INSERT文でFOR句に埋込み変数を指定し，かつ指定する埋込み変数と標識変数をすべて配列型の変数にしてください。一括して挿入する行数は，FOR句に指定した埋込み変数で制御します。

(b)　動的に実行する場合

次に示す手順で実行してください。

PREPARE文で，INSERT文（一つ以上の？パラメタを指定）を前処理します。

EXECUTE文のUSING句に，前処理したINSERT文の入力？パラメタに与える値を配列で指定し，かつBY句に埋込み変数を指定してください。一括して挿入する行数は，BY句に指定した埋込み変数で制御します。

USING句で埋込み変数を指定する場合は，埋込み変数及び標識変数をすべて配列型の変数にしてください。

USING句でSQL記述領域を指定する場合は，SQLDATAが指すすべての領域に，データを配列形式で指定してください。また，SQLSYS領域にデータ型に応じた値を設定してください。

(3)　注意事項

INSERT文のFOR句，又はEXECUTE文のBY句の埋込み変数に，書き込み領域以上の行数を指定すると，DB破壊，又はUAP側の領域破壊となるおそれがあります。

(4)　使用例

配列を使用したINSERT機能のコーディング例について説明します。

例１：

INSERT文形式3を使用して，ファイルから読み出したデータを配列形式の埋込み変数に設定し，在庫表（ZAIKO）へ一括して50行分ずつ挿入します。

対象となる表はSCODE(CHAR(4))，SNAME(VARCHAR(17))，COL(NCHAR(1))，TANKA(INTEGER)，及びZSURYO(INTEGER)で構成されているものとします。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXCOLUMN 80
#define INFILE   "inputf1"

void abnormalend();

FILE *input ;

main() {
  char indata[MAXCOLUMN];
  char in_scode[5];
  short in_sname_len;
  char in_sname[17];
  char in_col[3];
  int in_tanka;
  int i;

  EXEC SQL BEGIN DECLARE SECTION;
    short  xinsert_num;
    /* 配列型の埋込み変数の宣言 */
    char    xscode[50][5];            /* SCODE (CHAR(4)型の列) */
                                      /* への挿入値指定用      */
    SQL TYPE IS VARCHAR(17) xsname[50];
                                      /* SNAME(VARCHAR(17)型の列) */
                                      /* への挿入値指定用         */
    char    xcol[50][3];              /* COL(NCHAR(1)型の列)      */
                                      /* への挿入値指定用         */
    long    xtanka[50];               /* TANKA (INTEGER型の列)   */
                                      /* への挿入値指定用         */
    EXEC SQL END DECLARE SECTION;

         -------(HiRDBへのCONNECT処理(省略))-------

  input = fopen(INFILE, "r");
  if (input == NULL) {
  fprintf(stderr, "can't open %s.", INFILE);
  goto FIN;
  }

    EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;

    /* 一括挿入行数設定 (最大50行ごと) */
    xinsert_num=50;
    while (!feof(input)) {
    /* 配列変数に50行分(ファイルの最終データの場合はその行まで) */
    /* の入力データを設定する                                    */
    for ( i = 0; i < 50; i++) {
      /* ファイルからデータを読み込む */
      fgets(indata, MAXCOLUMN, input);
      if (feof(input)){
        /* ファイルの最終データの場合は，一括挿入行数にここまでの */
        /* 行数を設定してfor文を抜ける                           */
        xinsert_num= i;
        break;
      }
      sscanf(indata, "%4s %hd %16s %2s %8d",
      in_scode, &in_sname_len, in_sname, in_col, &in_tanka);
      /* 配列変数の要素に入力データを設定 */
      strncpy(xscode[i], in_scode, 5);
      xsname[i].len = in_sname_len;
      strncpy(xsname[i].str, in_sname, 17);
      strncpy(xcol[i], in_col, 3);
      xtanka[i] = in_tanka;
    }
    /* INSERT実行 */
    EXEC SQL FOR :xinsert_num
      INSERT INTO ZAIKO (SCODE, SNAME, COL, TANKA)
      VALUES (:xscode, :xsname, :xcol, :xtanka);
  }

  EXEC SQL COMMIT;
  printf(" *** normal ended ***¥n");
FIN:
  if (input != NULL) {
  fclose(input);
  }
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL WHENEVER SQLWARNING CONTINUE;
  EXEC SQL DISCONNECT;
  return(0);
}
void abnormalend()
{
  int  wsqlcode;

  if (input != NULL) {
    fclose(input);
  }
  wsqlcode = -SQLCODE;
  printf("¥n*** HiRDB SQL ERROR SQLCODE = %d ¥n", wsqlcode);
  printf("SQLERRMC = %s¥n", SQLERRMC);
  EXEC SQL ROLLBACK;
  EXEC SQL DISCONNECT;
  exit(1);
}

例２：

INSERT文形式3を使用して，データ読み込み関数から読み込んだデータを，配列形式の埋込み変数に設定し，在庫表（ZAIKO）へ一括して50行分ずつ挿入します。

対象となる表はSCODE(CHAR(4))，及びROW_DATA(BINARY(3002))で構成されているものとします。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void abnormalend();

main() {
  int i,rc;

  EXEC SQL BEGIN DECLARE SECTION;
    short  xinsert_num;
    /* 配列型の埋込み変数の宣言 */
    char  xscode[50][5];         /* SCODE (CHAR(4)型の列) */
                                 /* への挿入値指定用      */
    SQL TYPE IS BINARY(3004) xrow_data[50];
                    /* ROW_DATA(BINARY(3002)型の列)への挿入値指定用 */
                    /* ただし，データ長は4の倍数にする             */
    EXEC SQL END DECLARE SECTION;

        -------(HiRDBへのCONNECT処理(省略))-------

    EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;

  rc = 0 ;
  /* 一括挿入行数設定 (最大50行ごと) */
  xinsert_num=50;
  while (0==rc) {
    /* 配列変数に50行分(ファイルの最終データの場合はその行まで) */
    /* の入力データを設定する                                    */
    for ( i = 0; i < 50; i++) {
      /* BINARYデータを読み込む：関数の詳細については省略 */
      rc = get_binarydata(&xscode[i],&xrow_data[i]);
      if (0 != rc){
        /* 入力データがなくなったら，一括挿入行数にここまでの行数を*/
        /* 設定してfor文を抜ける                                  */
        xinsert_num= i;
        break;
      }
    }
    /* INSERT実行 */
    EXEC SQL FOR :xinsert_num
      INSERT INTO ZAIKO (SCODE, ROW_DATA)
      VALUES (:xscode, :xrow_data);
  }

  EXEC SQL COMMIT;
  printf(" *** normal ended ***¥n");
FIN:
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL WHENEVER SQLWARNING CONTINUE;
  EXEC SQL DISCONNECT;
  return(0);
}
void abnormalend()
{
  int  wsqlcode;

  wsqlcode = -SQLCODE;
  printf("¥n*** HiRDB SQL ERROR SQLCODE = %d ¥n", wsqlcode);
  printf("SQLERRMC = %s¥n", SQLERRMC);
  EXEC SQL ROLLBACK;
  EXEC SQL DISCONNECT;
  exit(1);
}

例３：

EXECUTE文形式2を使用して，ファイルから読み出したデータを配列形式の埋込み変数に設定し，在庫表（ZAIKO）へ一括して50行分ずつ挿入します。

対象となる表はSCODE(CHAR(4))，SNAME(VARCHAR(17))，COL(NCHAR(1))，TANKA(INTEGER)，及びZSURYO(INTEGER)で構成されているものとします。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXCOLUMN 80
#define INFILE   "inputf1"

void abnormalend();

FILE *input ;

main() {
  char indata[MAXCOLUMN];
  char in_scode[5];
  short in_sname_len;
  char in_sname[17];
  char in_col[3];
  int in_tanka;
  int i;

  EXEC SQL BEGIN DECLARE SECTION;
    short  xinsert_num;
    /* 配列型の埋込み変数の宣言 */
    char  xscode[50][5];     /* SCODE (CHAR(4)型の列) */
                             /* への挿入値指定用      */
    SQL TYPE IS VARCHAR(17) xsname[50];
                        /* SNAME(VARCHAR(17)型の列)への挿入値指定用 */
    char  xcol[50][3];  /* COL(NCHAR(1)型の列) への挿入値指定用 */
    long  xtanka[50];   /* TANKA (INTEGER型の列) への挿入値指定用 */
  EXEC SQL END DECLARE SECTION;

      -------(HiRDBへのCONNECT処理(省略))-------

  input = fopen(INFILE, "r");
  if (input == NULL) {
    fprintf(stderr, "can't open %s.", INFILE);
    goto FIN;
  }

  EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;

  /* SQL前処理実行 */
  EXEC SQL PREPARE INS1 FROM
    ‘INSERT INTO ZAIKO(SCODE, SNAME, COL, TANKA) VALUES(?,?,?,?)’;

  /* 一括挿入行数設定 (最大50行ごと) */
  xinsert_num=50;
  while (!feof(input)) {
    /* 配列変数に50行分(ファイルの最終データの場合はその行まで) */
    /* の入力データを設定する                                    */
    for ( i = 0; i < 50; i++) {
      /* ファイルからデータを読み込む */
      fgets(indata, MAXCOLUMN, input);
      if (feof(input)){
        /* ファイルの最終データの場合，一括挿入行数にここまでの */
        /* 行数を設定してfor文を抜ける                         */
        xinsert_num= i;
        break;
      }
      sscanf(indata, "%4s %hd %16s %2s %8d",
      in_scode, &in_sname_len, in_sname, in_col, &in_tanka);
      /* 配列変数の要素に入力データを設定 */
      strncpy(xscode[i], in_scode, 5);
      xsname[i].len = in_sname_len;
      strncpy(xsname[i].str, in_sname, 17);
      strncpy(xcol[i], in_col, 3);
      xtanka[i] = in_tanka;
    }
    /* EXECUTE実行 */
    EXEC  SQL  EXECUTE  INS1
      USING  :xscode, :xsname, :xcol, :xtanka
      BY :xinsert_num ROWS ;
  }

  EXEC SQL COMMIT;
  printf(" *** normal ended ***¥n");
FIN:
  if (input != NULL) {
  fclose(input);
  }
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL WHENEVER SQLWARNING CONTINUE;
  EXEC SQL DISCONNECT;
  return(0);
}
void abnormalend()
{
  int  wsqlcode;

  if (input != NULL) {
  fclose(input);
  }
  wsqlcode = -SQLCODE;
  printf("¥n*** HiRDB SQL ERROR SQLCODE = %d ¥n", wsqlcode);
  printf("SQLERRMC = %s¥n", SQLERRMC);
  EXEC SQL ROLLBACK;
  EXEC SQL DISCONNECT;
  exit(1);
}

例４：

EXECUTE文形式2を使用して，ファイルから読み出したデータを配列形式の埋込み変数に設定し，ユーザ定義のSQLDAを使用して在庫表（ZAIKO）へ一括して50行分ずつ挿入します。

対象となる表はSCODE(CHAR(4))，SNAME(VARCHAR(17))，COL(NCHAR(1))，TANKA(INTEGER)，及びZSURYO(INTEGER)で構成されているものとします。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pdbsqlda.h>         /* ユーザ定義のSQLDAを使用するために */
                              /* includeする。                      */

#define MAXCOLUMN 80
#define INFILE   "inputf1"

void abnormalend();

FILE *input ;

main() {
  char indata[MAXCOLUMN];
  char in_scode[5];
  short in_sname_len;
  char in_sname[17];
  char in_col[3];
  int in_tanka;
  int i;

  /* ユーザ定義SQLDAの宣言 */
  PDUSRSQLDA(4)  xsqlda;

  EXEC SQL BEGIN DECLARE SECTION;
    short  xinsert_num;
    /* 配列型の埋込み変数の宣言 */
    char  xscode[50][5];       /* SCODE (CHAR(4)型の列) */
                               /* への挿入値指定用      */
    SQL TYPE IS VARCHAR(17) xsname[50];
                       /* SNAME(VARCHAR(17)型の列)への挿入値指定用 */
    char  xcol[50][3];      /* COL(NCHAR(1)型の列)への挿入値指定用 */
    long  xtanka[50];      /* TANKA(INTEGER型の列)への挿入値指定用 */
  EXEC SQL END DECLARE SECTION;

       -------(HiRDBへのCONNECT処理(省略))-------

  input = fopen(INFILE, "r");
  if (input == NULL) {
    fprintf(stderr, "can't open %s.", INFILE);
    goto FIN;
  }

  EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;

  /* SQL前処理実行 */
  EXEC SQL PREPARE INS1 FROM
    ‘INSERT INTO ZAIKO(SCODE, SNAME, COL, TANKA) VALUES(?,?,?,?)’;

  /* SQLVARの設定 */
  PDSQLN(xsqlda) = 4 ;       /* SQLVAR数を設定 */
  PDSQLD(xsqlda) = 4 ;       /* ？パラメタ数を設定 */
  /* SCODE列情報設定 */
  PDSQLCOD(xsqlda, 0) = PDSQL_CHAR ;  /* データコード設定 */
  PDSQLXDIM(xsqlda, 0) = 1 ;          /* 繰り返し構造の要素数設定 */
  PDSQLSYS(xsqlda, 0) = 0 ;           /* 1要素の長さ(可変長文字列 */
                                      /* 以外は0固定)            */
  PDSQLLEN(xsqlda, 0) = 4 ;           /* データ定義長設定 */
  PDSQLDATA(xsqlda, 0) = (void *)xscode ; /* データ領域アドレス設定 */
  PDSQLIND(xsqlda, 0) = NULL ;        /* 標識変数NULLクリア */
  /* SNAME列情報設定 */
  PDSQLCOD(xsqlda, 1) = PDSQL_VARCHAR ;  /* データコード設定 */
  PDSQLXDIM(xsqlda, 1) = 1 ;          /* 繰り返し構造の要素数設定 */
  PDSQLLEN(xsqlda, 1) = 17 ;          /* データ定義長設定 */
  PDSQLSYS(xsqlda, 1) = sizeof(xsname[0]) ;  /* 1要素の長さ */
  PDSQLDATA(xsqlda, 1) = (void *) xsname;  /* データ領域アドレス設定 */
  PDSQLIND(xsqlda, 1) = NULL ;        /* 標識変数NULLクリア */
  /* COL列情報設定 */
  PDSQLCOD(xsqlda, 2) = PDSQL_NCHAR ;  /* データコード設定 */
  PDSQLXDIM(xsqlda, 2) = 1 ;           /* 繰り返し構造の要素数設定 */
  PDSQLSYS(xsqlda, 2) = 0 ;            /* 1要素の長さ(可変長文字列 */
                                       /* 以外は0固定)             */
  PDSQLLEN(xsqlda, 2) = 1 ;            /* データ定義長設定 */
  PDSQLDATA(xsqlda, 2) = (void *) xcol;  /* データ領域アドレス設定 */
  PDSQLIND(xsqlda, 2) = NULL ;         /* 標識変数NULLクリア */
  /* TANKA列情報設定 */
  PDSQLCOD(xsqlda, 3) = PDSQL_INTEGER ;  /* データコード設定 */
  PDSQLXDIM(xsqlda, 3) = 1 ;           /* 繰り返し構造の要素数設定 */
  PDSQLSYS(xsqlda, 3) = 0 ;            /* 1要素の長さ(可変長文字列 */
                                       /* 以外は0固定)             */
  PDSQLLEN(xsqlda, 3) = 4 ;            /* データ定義長設定 */
  PDSQLDATA(xsqlda, 3) = (void *) xtanka;  /* データ領域アドレス設定 */
  PDSQLIND(xsqlda, 3) = NULL ;         /* 標識変数NULLクリア */

  /* 一括挿入行数設定 (最大50行ごと) */
  xinsert_num=50;
  while (!feof(input)) {
    /* 配列変数に50行分(ファイルの最終データの場合はその行まで) */
    /* の入力データを設定する                                    */
    for ( i = 0; i < 50; i++) {
      /* ファイルからデータを読み込む */
        fgets(indata, MAXCOLUMN, input);
        if (feof(input)){
          /* ファイルの最終データの場合，一括挿入行数にここまでの */
          /* 行数を設定してfor文を抜ける                         */
          xinsert_num= i;
          break;
        }
        sscanf(indata, "%4s %hd %16s %2s %8d",
        in_scode, &in_sname_len, in_sname, in_col, &in_tanka);
        /* 配列変数の要素に入力データを設定 */
        strncpy(xscode[i], in_scode, 5);
        xsname[i].len = in_sname_len;
        strncpy(xsname[i].str, in_sname, 17);
        strncpy(xcol[i], in_col, 3);
        xtanka[i] = in_tanka;
      }
      /* EXECUTE実行 */
      EXEC  SQL  EXECUTE  INS1
        USING  DESCRIPTOR  :xsqlda
        BY  :xinsert_num  ROWS ;
  }

  EXEC SQL COMMIT;
  printf(" *** normal ended ***¥n");
FIN:
  if (input != NULL) {
    fclose(input);
  }
    EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL WHENEVER SQLWARNING CONTINUE;
  EXEC SQL DISCONNECT;
  return(0);
}
void abnormalend()
{
  int  wsqlcode;

  if (input != NULL) {
  fclose(input);
  }
  wsqlcode = -SQLCODE;
  printf("¥n*** HiRDB SQL ERROR SQLCODE = %d ¥n", wsqlcode);
  printf("SQLERRMC = %s¥n", SQLERRMC);
  EXEC SQL ROLLBACK;
  EXEC SQL DISCONNECT;
  exit(1);
}

例５：

EXECUTE文形式2を使用して，データ読み込み関数から読み込んだデータを，配列形式の埋込み変数に設定し，ユーザ定義のSQLDAを使用して在庫表（ZAIKO）へ一括して50行分ずつ挿入します。

対象となる表はSCODE(CHAR(4))，及びROW_DATA(BINARY(3002))で構成されているものとします。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pdbsqlda.h>         /* ユーザ定義のSQLDAを使用するために */
                              /* includeする。                      */

void abnormalend();

main() {
  int i,rc;

  /* ユーザ定義SQLDAの宣言 */
  PDUSRSQLDA(4)  xsqlda;

  EXEC SQL BEGIN DECLARE SECTION;
    short  xinsert_num;
    /* 配列型の埋込み変数の宣言 */
    char  xscode[50][5];    /* SCODE (CHAR(4)型の列) */
                            /* への挿入値指定用      */
    SQL TYPE IS BINARY(3004) xrow_data[50];
                  /* ROW_DATA(BINARY(3002)型の列)への挿入値指定用 */
                  /* ただし，データ長は4の倍数にする             */
  EXEC SQL END DECLARE SECTION;

      -------(HiRDBへのCONNECT処理(省略))-------

  EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;

  /* SQL前処理実行 */
  EXEC SQL PREPARE INS1 FROM
    'INSERT INTO ZAIKO(SCODE, ROW_DATA) VALUES(?,?)’;

  /* SQLVARの設定 */
  PDSQLN(xsqlda) = 2 ;                /* SQLVAR数を設定 */
  PDSQLD(xsqlda) = 2 ;                /* ？パラメタ数を設定 */
  /* SCODE列情報設定 */
  PDSQLCOD(xsqlda, 0) = PDSQL_CHAR ;  /* データコード設定 */
  PDSQLXDIM(xsqlda, 0) = 1 ;       /* 繰り返し構造の要素数設定 */
  PDSQLSYS(xsqlda, 0) = 0 ;        /* 1要素の長さ(可変長文字列 */
                                   /* 以外は0固定)             */
  PDSQLLEN(xsqlda, 0) = 4 ;        /* データ定義長設定 */
  PDSQLDATA(xsqlda, 0) = (void *)xscode ;  /* データ領域アドレス設定 */
  PDSQLIND(xsqlda, 0) = NULL ;     /* 標識変数NULLクリア */
  /* ROW_DATA列情報設定 */
  PDSQLCOD(xsqlda, 1) = PDSQL_BINARY ;  /* データコード設定 */
  PDSQLXDIM(xsqlda, 1) = 1 ;       /* 繰り返し構造の要素数設定 */
  PDSQLLOBLEN(xsqlda, 1) = 3004 ;  /* データ定義長設定 */
  PDSQLDATA(xsqlda, 1) = (void *) xrow_data;  /* データ領域   */
                                              /* アドレス設定 */
  PDSQLIND(xsqlda, 1) = NULL ;     /* 標識変数NULLクリア */

  rc = 0 ;
  /* 一括挿入行数設定 (最大50行ごと) */
  xinsert_num=50;
  while (0==rc) {
    /* 配列変数に50行分(ファイルの最終データの場合はその行まで) */
    /* の入力データを設定する                                    */
    for ( i = 0; i < 50; i++) {
      /* BINARYデータを読み込む：関数の詳細については省略 */
      rc = get_binarydata(&xscode[i],&xrow_data[i]);
      if (0 != rc){
        /* 入力データがなくなった場合，一括挿入行数にここまでの */
        /* 行数を設定してfor文を抜ける                         */
        xinsert_num= i;
        break;
      }
    }
    /* EXECUTE実行 */
    EXEC  SQL  EXECUTE  INS1
      USING  DESCRIPTOR  :xsqlda
      BY  :xinsert_num  ROWS ;
  }

  EXEC SQL COMMIT;
  printf(" *** normal ended ***¥n");
FIN:
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL WHENEVER SQLWARNING CONTINUE;
  EXEC SQL DISCONNECT;
  return(0);
}
void abnormalend()
{
  int  wsqlcode;

  wsqlcode = -SQLCODE;
  printf("¥n*** HiRDB SQL ERROR SQLCODE = %d ¥n", wsqlcode);
  printf("SQLERRMC = %s¥n", SQLERRMC);
  EXEC SQL ROLLBACK;
  EXEC SQL DISCONNECT;
  exit(1);
}

4.8.3　配列を使用したUPDATE機能

(1)　概要

複数回分のデータを設定した配列型の変数を指定することで，一つのSQL文で複数回分の表の列の更新ができます。

HiRDBクライアントとHiRDBサーバとの間の通信回数を削減できるため，HiRDBクライアントからHiRDBサーバにアクセスし，大量データを高速に更新する場合に有効です。

(2)　使用方法

(a)　静的に実行する場合

UPDATE文で，FOR句に埋込み変数を指定し，かつ探索条件中に指定した埋込み変数と標識変数をすべて配列型の変数にしてください。一括して更新する回数は，FOR句に指定した埋込み変数で制御します。

(b)　動的に実行する場合

次に示す手順で実行してください。

PREPARE文で，UPDATE文（更新値や探索条件中に？パラメタを指定）を前処理します。

EXECUTE文のUSING句に，前処理したUPDATE文の入力？パラメタに与える値を配列で指定し，かつBY句に埋込み変数を指定してください。一括して更新する回数は，BY句に指定した埋込み変数で制御します。

動的に実行する場合の注意事項を次に示します。

USING句で埋込み変数を指定する場合，埋込み変数及び標識変数をすべて配列型の変数にしてください。

USING句でSQL記述領域を指定する場合，SQLDATAが指すすべての領域に配列形式でデータを指定してください。また，SQLSYS領域にデータ型に応じた値を設定してください。

(3)　注意事項

UPDATE文のFOR句，又はEXECUTE文のBY句の埋込み変数に，書き込み領域以上の回数を指定すると，DB破壊，又はUAP側の領域破壊を起こすおそれがあります。

(4)　使用例

例：

ファイルから読んだデータを配列形式の埋込み変数に設定し，在庫表（ZAIKO）に対して，一括で複数回の削除をします。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXCOLUMN 80
#define INFILE   "inputf1"

void abnormalend();

FILE *input ;

main() {
  char indata[MAXCOLUMN];
  char in_scode[5];
  int in_suryo;
  int i;

  EXEC SQL BEGIN DECLARE SECTION;
    short   xupdate_num;
    /* 配列型の埋込み変数の宣言 */
    char    xscode[50][5]; /* SCODE(CHAR(4)型の列) への探索条件用   */
    long    xsuryo[50];    /* ZSURYO(INTEGER型の列)への更新値指定用 */
  EXEC SQL END DECLARE SECTION;

      -------(HiRDBへのCONNECT処理(省略))-------

  input = fopen(INFILE, "r");
  if (input == NULL) {
    fprintf(stderr, "can't open %s.", INFILE);
    goto FIN;
  }

  EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;

  /* 一括更新回数設定 (最大50回に設定) */
  xupdate_num=50;
  while (!feof(input)) {
    /* 配列変数に50回分(ファイルの終わりに到達した場合はその行まで) */
    /* の更新/探索条件データを設定する                               */
    for ( i = 0; i < 50; i++) {
      /* ファイルからデータを読み込む */
      fgets(indata, MAXCOLUMN, input);
      if (feof(input)){
        /* ファイルの終わりに到達したら，ここまでの配列要素数を */
        /* 一括更新回数に設定してfor文を抜ける                 */
        xupdate_num= i;
        break;
      }
      sscanf(indata, "%4s %8d", in_scode, &in_suryo);
      /* 配列変数の要素に更新/探索条件データを設定 */
      strncpy(xscode[i], in_scode, 5);
      xsuryo[i] = in_suryo;
    }
    /* UPDATE実行 */
    EXEC SQL FOR :xupdate_num
      UPDATE ZAIKO SET ZSURYO = :xsuryo WHERE SCODE = :xscode ;
  }

  EXEC SQL COMMIT;
  printf(" *** normal ended ***¥n");
FIN:
  if (input != NULL) {
  fclose(input);
  }
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL WHENEVER SQLWARNING CONTINUE;
  EXEC SQL DISCONNECT;
  return(0);
}
void abnormalend()
{
  int  wsqlcode;

  if (input != NULL) {
    fclose(input);
  }
  wsqlcode = -SQLCODE;
  printf("¥n*** HiRDB SQL ERROR SQLCODE = %d ¥n", wsqlcode);
  printf("SQLERRMC = %s¥n", SQLERRMC);
  EXEC SQL ROLLBACK;
  EXEC SQL DISCONNECT;
  exit(1);
}

4.8.4　配列を使用したDELETE機能

(1)　概要

複数回分のデータを設定した配列型の変数を指定することで，一つのSQL文で複数回分の行の削除ができます。

HiRDBクライアントとHiRDBサーバとの間の通信回数を削減できるため，HiRDBクライアントからHiRDBサーバにアクセスし，大量データを高速に削除する場合に有効です。

(2)　使用方法

(a)　静的に実行する場合

DELETE文で，FOR句に埋込み変数を指定し，かつ探索条件中に指定した埋込み変数と標識変数をすべて配列型の変数にしてください。一括して削除する回数は，FOR句に指定した埋込み変数で制御します。

(b)　動的に実行する場合

次に示す手順で実行してください。

PREPARE文で，DELETE文（探索条件中に？パラメタを指定）を前処理します。

EXECUTE文のUSING句に，前処理したDELETE文の入力？パラメタに与える値を配列で指定し，かつBY句に埋込み変数を指定してください。一括して削除する回数は，BY句に指定した埋込み変数で制御します。

動的に実行する場合の注意事項を次に示します。

USING句で埋込み変数を指定する場合，埋込み変数及び標識変数をすべて配列型の変数にしてください。

USING句でSQL記述領域を指定する場合，SQLDATAが指すすべての領域に配列形式でデータを指定してください。また，SQLSYS領域にデータ型に応じた値を設定してください。

(3)　注意事項

EXECUTE文のBY句の埋込み変数に，書き込み領域以上の回数を指定すると，DB破壊，又はUAP側の領域破壊を起こすおそれがあります。

(4)　使用例

例：

ファイルから読んだデータを配列形式の埋込み変数に設定し，在庫表（ZAIKO）を一括して複数回分更新します。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXCOLUMN 80
#define INFILE   "inputf1"

void abnormalend();

FILE *input ;

main() {
  char indata[MAXCOLUMN];
  char in_scode[5];
  int i;

  EXEC SQL BEGIN DECLARE SECTION;
    short   xdelete_num;
    /* 配列型の埋込み変数の宣言 */
    char    xscode[50][5]; /* SCODE(CHAR(4)型の列) への探索条件用 */
  EXEC SQL END DECLARE SECTION;

      -------(HiRDBへのCONNECT処理(省略))-------

  input = fopen(INFILE, "r");
  if (input == NULL) {
    fprintf(stderr, "can't open %s.", INFILE);
    goto FIN;
  }

  EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;

  /* 一括削除回数設定 (最大50回に設定) */
  xdelete_num=50;
  while (!feof(input)) {
    /* 配列変数に50回分(ファイルの終わりに到達した場合はその行まで) */
    /* の探索条件データを設定する                                    */
    for ( i = 0; i < 50; i++) {
      /* ファイルからデータを読み込む */
      fgets(indata, MAXCOLUMN, input);
      if (feof(input)){
        /* ファイルの終わりに到達したら，ここまでの配列要素数を  */
        /* 一括削除回数に設定してfor文を抜ける                  */
        xdelete_num= i;
        break;
      }
      sscanf(indata, "%4s", in_scode);
      /* 配列変数の要素に探索条件データを設定 */
      strncpy(xscode[i], in_scode, 5);
    }
    /* DELETE実行 */
    EXEC SQL FOR :xdelete_num
      DELETE FROM ZAIKO WHERE SCODE = :xscode ;
  }

  EXEC SQL COMMIT;
  printf(" *** normal ended ***¥n");
FIN:
  if (input != NULL) {
    fclose(input);
  }
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL WHENEVER SQLWARNING CONTINUE;
  EXEC SQL DISCONNECT;
  return(0);
}
void abnormalend()
{
  int  wsqlcode;
  if (input != NULL) {
    fclose(input);
   }
  wsqlcode = -SQLCODE;
  printf("¥n*** HiRDB SQL ERROR SQLCODE = %d ¥n", wsqlcode);
  printf("SQLERRMC = %s¥n", SQLERRMC);
  EXEC SQL ROLLBACK;
  EXEC SQL DISCONNECT;
  exit(1);
}

4.9　グループ分け高速化機能

4.9.1　概要

SQLのGROUP BY句を指定してグループ分け処理をする場合，ソートしてからグループ分けをしています。これにハッシングを組み合わせてグループ分けすることで高速なグループ分け処理が実現できます。この機能は，グループ分けのグループ数が少なく，元の行数が多いほど，グループ分けの処理時間が短縮できます。

HiRDB/パラレルサーバの場合は，フロータブルサーバの使用方法が性能に影響するため，グループ分け処理方式も考慮する必要があります。グループ分け処理方式については，「グループ分け処理方式（HiRDB/パラレルサーバ限定）」を参照してください。

4.9.2　適用条件

グループ分け高速化機能は，次に示す条件をすべて満たすSQLを実行する場合に適用されます。

HiRDB/パラレルサーバの場合

GROUP BY句を指定している。

システム共通定義，フロントエンドサーバ定義，クライアント環境定義，又はルーチン定義のSQL最適化オプションでグループ分け高速化機能を利用することを定義している。

選択式列長が4,096以下である。

集合演算（UNION,EXCEPT）の入力となる問合せ指定のグループ分け処理ではない。

集合関数内にDISTINCT指定がない。

集合関数内に，定義長が256バイト以上の文字列型，若しくはBINARY型，又はBLOB型の列の指定がない。

GROUP BY句が指定されている問合せ指定中に，HAVING句が指定されているならば，そのHAVING句に副問合せの指定がない。

選択式に副問合せの指定がない。

ただし，次の場合はSQL最適化オプションの指定にかかわらず高速に処理をしています。

グループ化列のインデクスを利用することで，ソート処理をしないでグループ分けを実行できる。

また，グループ分け高速化機能を使用する場合，次の機能は適用できません。

複数のオブジェクトを作成する機能

ANDの複数インデクス利用（ただし，構造化繰返し述語，又はインデクス型プラグイン専用関数の条件については適用します）

HiRDB/シングルサーバの場合

GROUP BY句を指定している。

システム共通定義，クライアント環境定義，又はルーチン定義のSQL最適化オプションでグループ分け高速化機能を利用することを定義している。

集合演算（UNION，EXCEPT）の入力となる問合せ指定のグループ分け処理ではない。

集合関数内にDISTINCT指定がない。

集合関数内に，定義長が256バイト以上の文字列型，若しくはBINARY型，又はBLOB型の列の指定がない。

ただし，次の場合はSQL最適化オプションの指定にかかわらず高速に処理をしています。

グループ化列のインデクスを利用する，又はソートマージ結合のための結合列のソートによって，ソート処理をしないでグループ分けを実行できる。

また，グループ分け高速化機能を使用する場合，次の機能は適用しません。

ANDの複数インデクス利用（ただし，構造化繰返し述語，又はインデクス型プラグイン専用関数の条件については適用します）

4.9.3　指定方法

グループ分け高速化機能を使用するには，SQL最適化オプションに「RAPID_GROUPING」，又は1,024を加算した値を指定します。SQL最適化オプションの指定方法については，次の箇所を参照してください。

マニュアル「HiRDB システム定義」のpd_optimize_level

マニュアル「HiRDB SQLリファレンス」のSQL最適化オプション

「クライアント環境定義の設定内容」のPDSQLOPTLVL

4.9.4　チューニング方法

グループ分けするグループ数が多い場合，グループ分け高速化機能の効果が出ないことがあります。この場合，クライアント環境定義のPDAGGRオペランドに必要な大きさの値（グループ数以上の値）を指定します。ただし，プロセス固有メモリの使用量が多くなるので注意が必要です。メモリ使用量が多くなり，必要な大きさの値が指定できない場合は，グループ数以下の値で指定できる最大値にしてください。また，グループ数よりも大きな値を指定しても，グループ数と同じ値を指定した場合と比べて効果は変わりません。PDAGGRオペランドについては，「クライアント環境定義の設定内容」を参照してください。

PDAGGRに指定するグループ数の求め方を次に示します。

SQLを使用して求める方法

グループ化したい列をGROUP BY句に指定し，かつ選択式にCOUNT(*)を指定したSELECT文を実行してください。

実行したSELECT文の結果の値がグループ数になります。

SQL実行時の中間結果情報を使用して求める方法

SQLごとに「SQL実行時の中間結果情報」を取得してください。

「SQL実行時の中間結果情報」中にある「グループ分け処理の出力行数」の最大値がグループ数になります。

「SQL実行時の中間結果情報」の取得方法と，「グループ分け処理の出力行数」の詳細は，「UAP統計レポート機能」を参照してください。

4.10　複数接続機能

4.10.1　機能概要

(1)　複数接続機能とは

複数接続機能は，HiRDBクライアントで一つのUAPから，HiRDBサーバに対して複数のCONNECTを別々に行えるようにする機能です。

複数接続機能のそれぞれの接続は独立していて，サーバプロセスは接続ごとに割り当てられて別々のトランザクションとして処理されるので，UAPは複数のSQL文を同時に実行できます。一つのUAPから複数接続できるので，実行するUAPの数を削減でき，全体としてのUAPのメモリ所要量を削減できます。

サーバの最大接続数は，接続ごとに別ユーザとしてカウントされるので，ユーザ数の上限ではなく，同時にCONNECTする接続数の上限となります。

複数接続機能の特長を次に示します。

接続ごとに，異なる認可識別子，パスワードを使用できます。

接続ごとに，異なるサーバマシンのサーバへ接続できるので，一つのUAPから複数のサーバマシンのサーバに同時に接続して，SQL文を実行できます。

複数接続機能は，クライアントライブラリを接続できるすべてのサーバに対して使用できます。

(2)　X/Open XAインタフェース環境下での複数接続機能

X/Open XAインタフェース環境下で複数接続機能を使用すると，一つのトランザクションマネジャ(OpenTP1など）下のUAPから，XAインタフェースを使用して複数のHiRDBにアクセスできます。XAインタフェースを使用するので，同期をとって複数のHiRDBにアクセスしたトランザクション間の処理を制御できます。

xa_open()関数に指定するオープン文字列に，環境変数（クライアント環境定義）を設定したファイルの名称を指定します。xa_open()関数では，設定された環境変数に従ってHiRDBに接続します。なお，SQLの発行先は，xa_open()関数によって接続した接続先の中から選択できます。

X/Open XAインタフェース環境下での複数接続機能は，クライアントのプラットフォームが次の場合にだけ使用できます。

AIX

Linux（シングルスレッド）

Windows

4.10.2　処理概要

複数接続機能の処理概要を次の図に示します。

図「複数接続機能の処理概要（マルチスレッドを使用しない場合）」

図「複数接続機能の処理概要（マルチスレッドを使用した場合）」

図「複数接続機能の処理概要（スレッド間で接続を共有する場合）」

図「複数接続機能の処理概要（シングルスレッドのOLTP下で，X/Openに従ったAPIを使用したAPの場合）」

図「複数接続機能の処理概要（マルチスレッドのOLTP下で，X/Openに従ったAPIを使用したAPの場合）」

図4‒60　複数接続機能の処理概要（マルチスレッドを使用しない場合）

図4‒61　複数接続機能の処理概要（マルチスレッドを使用した場合）

注

それぞれの接続が独立しているので，スレッドごとに同時にSQLを実行できます。

図4‒62　複数接続機能の処理概要（スレッド間で接続を共有する場合）

注

このような例の場合，スレッド1がCONNECT(#1)を実行する前に，スレッド2がSQL(#1)を実行したり，スレッド3がDISCONNECT(#1)を実行したりしないように，ユーザがスレッド間の処理の同期をとる必要があります。

図4‒63　複数接続機能の処理概要（シングルスレッドのOLTP下で，X/Openに従ったAPIを使用したAPの場合）

［説明］

あらかじめ，OLTPシステムにはHiRDB1とHiRDB2を登録しておきます。

OLTPシステムはtx_open()時に登録してあるすべてのHiRDBに接続します。SQLを実行するときに接続先を選択してください。

図4‒64　複数接続機能の処理概要（マルチスレッドのOLTP下で，X/Openに従ったAPIを使用したAPの場合）

［説明］

あらかじめ，OLTPシステムにはHiRDB1とHiRDB2を登録しておきます。

OLTPシステムはtx_begin()時に登録してあるすべてのHiRDBに接続します。SQLを実行するときに接続先を選択してください。それぞれのトランザクションが独立しているので，スレッドごとにSQLを同時実行できます。

4.10.3　コーディング例

(1)　通常のUAP

複数接続機能を使用したUAPのコーディング例（C言語の場合）を次の図に示します。

図4‒65　複数接続機能を使用したUAPのコーディング例（C言語の場合）

［説明］

接続ハンドルの定義

接続ハンドルの取得

接続1のHiRDBの処理

接続2のHiRDBの処理

接続ハンドルの解放

複数接続機能を使用したUAPのコーディング例（COBOL言語の場合）を次の図に示します。

図4‒66　複数接続機能を使用したUAPのコーディング例（COBOL言語の場合）

注

SQLは，SQL先頭子，及びSQL終了子も含めて，すべてB領域（第12欄〜72欄）に記述してください。

［説明］

接続ハンドルの定義

接続ハンドルの取得

接続1のHiRDBの処理

接続2のHiRDBの処理

接続ハンドルの解放

(2)　OLTP下でX/Openに従ったAPIを使用したUAP

OLTP下でX/Openに従ったAPIを使用したUAPで複数接続機能を使用したコーディングの例（C言語の場合）を次の図に示します。

図4‒67　OLTP下でX/Openに従ったAPIを使用したUAPで複数接続機能を使用したコーディングの例（C言語の場合）

［説明］

あらかじめ，OLTPシステムにはHiRDB1(環境変数グループ識別子HDB1)とHiRDB2(環境変数グループ識別子HDB2)を登録しておきます。HiRDBのトランザクションマネジャへの登録については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

OLTP下でX/Openに従ったAPIを使用したUAPで複数接続機能を使用したコーディングの例（COBOL言語の場合）を次の図に示します。

図4‒68　OLTP下でX/Openに従ったAPIを使用したUAPで複数接続機能を使用したコーディングの例（COBOL言語の場合）

注

SQLは，SQL先頭子，及びSQL終了子も含めて，すべてB領域（第12欄〜72欄）に記述してください。

［説明］

あらかじめ，OLTPシステムにはHiRDB1(環境変数グループ識別子HDB1)とHiRDB2(環境変数グループ識別子HDB2)を登録しておきます。HiRDBのトランザクションマネジャへの登録については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

4.10.4　規則

複数接続機能を使用する場合，専用のライブラリをリンクする必要があります。詳細については，「複数接続機能を使用する場合のコンパイルとリンケージ」を参照してください。

複数接続機能用ライブラリを使用するUAPでは，一つの接続を保持したままスレッドを分岐し，そのスレッドがSQLを実行する場合，ほかのSQLを発行するスレッドとの間で処理のシリアライズを必要とします。したがって，同一接続に対するSQLは同時に発行できません。異なる接続に対するSQLは同時に発行できます。

ALLOCATE CONNECTION HANDLE，FREE CONNECTION HANDLEのエラー情報を参照する場合，SQLCODE，SQLERRMではなく，リターンコード受け取り変数の値を参照してください。リターンコード受け取り変数については，マニュアル「HiRDB SQLリファレンス」を参照してください。

SQL連絡領域を参照する場合，DECLARE CONNECTION HANDLE SET文で参照するSQL連絡領域に対応した接続ハンドルを宣言しておく必要があります。

COBOL言語の場合，複数接続機能を使用するSQL文を含むUAPで，DECLARE CONNECTION HANDLE SETの記述前（有効範囲外）に接続ハンドルの割り当て，取得以外のSQL文を記述できません。

COBOL言語の場合，DECLARE CONNECTION HANDLE UNSETは使用できません。

複数接続機能は，マルチスレッド（DCEスレッド，リアルスレッド），及びシングルスレッド対応のUAPで使用できます。マルチスレッド対応のUAPで複数接続機能を使用する場合，HiRDBでのUAPの開発知識のほかに，DCEスレッド，リアルスレッドを用いたUAPの開発知識を必要とします。

Windows版での複数接続機能は，X/Open XAインタフェースを使用しない場合，マルチスレッド対応UAPでだけ使用できます。したがって，Visual Studioを用いたUAPのコンパイルで使用する，Cのランタイムライブラリの指定は，マルチスレッド・DLLを選択してください（「コンパイルオプション：コード生成」で，「マルチスレッド・DLL」を指定します）。

Windows版での複数接続機能は，X/Open XAインタフェースを使用する場合，シングルスレッド対応UAPでも使用できます。なお，シングルスレッド対応UAPの場合でも，Visual Studioを用いたUAPのコンパイルで使用する，Cのランタイムライブラリの指定は，マルチスレッド・DLLを選択してください（「コンパイルオプション：コード生成」で，「マルチスレッド・DLL」を指定します）。

C，及びC++言語でSQL連絡領域を参照する場合，直接SQLCAの構造体を参照しないで，SQLで始まるマクロ名を使用して参照してください。使用するマクロ名については「C言語の場合」を参照してください。

4.11　絞込み検索

4.11.1　絞込み検索とは

段階的に対象レコードを絞り込む検索のことを絞込み検索といいます。

絞込み検索をする場合，操作系SQLのASSIGN LIST文でリストを作成します。リストとは，適当な件数になるまで条件を指定して段階的にデータを絞り込んでいくような情報検索をするために，その途中段階のデータの集合を一時的に名前（リスト名）を付けて保存したもの，又は保存したデータの集合を意味します。

ある条件で作成したリストがあれば，そのリストを使用することで処理速度の向上が図れます。また，複数の条件を指定する場合は，複数のリストを組み合わせた検索もできます。

4.11.2　絞込み検索をするためには

絞込み検索をするためには，あらかじめ次の準備をしておく必要があります。

システム定義の指定

リスト用RDエリアの作成

システム定義を指定し，リスト用RDエリアを作成すると，絞込み検索ができるようになります（リストを作成できるようになります）。

(1)　システム定義の指定

絞込み検索をする場合，システム定義の絞込み検索に関するオペランドを指定する必要があります。絞込み検索をする場合に必ず指定するオペランドを次に示します。

pd_max_list_users（最大リスト作成ユーザ数）

pd_max_list_count（1ユーザ当たりの最大作成可能リスト数）

また，必要に応じて次のオペランドも指定できます。

pd_max_list_users_wrn_pnt（pd_max_list_usersの指定値に対する使用率警告メッセージの出力契機の指定）

pd_max_list_count_wrn_pnt（pd_max_list_countの指定値に対する使用率警告メッセージの出力契機の指定）

pd_rdarea_list_no_wrn_pnt（サーバ内に作成できる最大リスト数に対する使用率警告メッセージの出力契機の指定）

これらのシステム定義のオペランドについては，マニュアル「HiRDB システム定義」を参照してください。

(2)　リスト用RDエリアの作成

データベース初期設定ユティリティ（pdinit），又はデータベース構成変更ユティリティ（pdmod）で，リスト用RDエリアを作成します。データベース初期設定ユティリティ，及びデータベース構成変更ユティリティについては，マニュアル「HiRDB コマンドリファレンス」を参照してください。

また，リスト用RDエリアに指定するHiRDBファイルシステム領域は，使用目的をWORKにしてください。リスト用RDエリアの設計については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

4.11.3　リストを使用した検索

リストを使用した検索方法について説明します。

リストを使用した検索の例を次の図に示します。

図4‒69　リストを使用した検索の例

4.11.4　リストを使用するトランザクションでロールバックが発生した場合の処置

SQLのROLLBACK文，又はエラーによってトランザクションが取り消された場合，そのトランザクションで作成，又は削除していたリストについては，必要に応じて再作成しなければならない場合があります。トランザクションが取り消されたときに作成，又は削除していたリストの状態とユーザの処置を次に示します。

取り消されたトランザクションでのリストの操作

リストの状態

ユーザの処置

トランザクション内でASSIGN LIST文で作成していたリスト

トランザクション開始前にはないリスト名を指定して，リストを作成した場合

作成したリストはなくなります。

トランザクション処理を再度実行してください。

トランザクション開始前にあったリスト名を指定して，リストを作成した場合

トランザクション開始前にあったリスト名と同じ名前のリストは，使用できなくなります（検索するとエラー）。※

トランザクション開始前にあったリスト名と同じ名前のリストを，トランザクションで使用したい場合，そのリストを再作成してください。その後，トランザクションを再度実行してください。

トランザクション内でDROP LIST文の削除対象となっていたリスト

トランザクション開始前に削除対象リストがなかった場合

削除したリストはなくなります。

トランザクション処理を再度実行してください。

トランザクション開始前に削除対象リストがあった場合

トランザクション開始前になかったリストはなくなります。トランザクション開始前にあった削除対象リストは使用できなくなります（検索するとエラー）。※

トランザクション開始前にあった削除対象リストをトランザクションで使用したい場合，そのリストを再作成してください。その後，トランザクションを再度実行してください。

注※

トランザクションの取り消しのタイミングによっては，正常に使用できる場合もあります。

4.11.5　HiRDBの起動と停止時のリストの自動削除

HiRDBを終了し，開始した場合，開始モードに関係なく作成済みのリストはすべて削除されます。

HiRDB/パラレルサーバの場合，ユニット単位の終了，開始をすると，そのユニットにあるリスト用RDエリア内のリストがすべて削除されます。また，サーバ単位の終了，開始をすると，そのサーバにあるリスト用RDエリア内のリストがすべて削除されます。削除されたリストを検索するとエラーとなります。

なお，HiRDBがユニット単位に異常終了した場合，及びHiRDBを構成するすべてのユニットが停止した場合，HiRDBを開始すると，作成済みのリストがすべて削除されます。一部のユニットが異常終了した場合にそのユニットを再開始すると，ユニット下のリスト用RDエリア内のリストがすべて削除されます。削除されたリストを検索するとエラーとなります。

このようにエラーとなる場合，次のどれかの方法でリストの削除，又はリストの再作成をしてください。

検索するとエラーになるリストを使用したい場合

ASSIGN LIST文で，以前と同じリスト名のリストを作成してください。

検索するとエラーになるリストを使用しない場合

検索するとエラーになるリストを，DROP LIST文で削除するか，又はHiRDBをいったん終了させ開始することで，作成済みのすべてのリストを削除してください。

4.11.6　リスト使用時の注意事項

(1)　HiRDBから切り離しをした後のリスト

リストは，HiRDBから切り離しをしても削除されません。リストを削除する場合は，DROP LIST文で削除してください。また，HiRDBシステムを停止した場合は，すべてのリストが削除されます。

(2)　行の挿入，削除によるリストの状態

リストを使用した検索では，リスト作成時にあった行がリスト作成後に削除されると，その行は検索されません。また，リスト作成後に更新した行は，更新後のデータを取り出します。

(3)　リスト作成後の行の削除，挿入

リストを使用した検索では，リスト作成後に，基表に対して行の削除をした後に，別の行を挿入した場合，挿入した行が検索されることがあります。

(4)　横分割表に対するASSIGN LIST文の実行

横分割した表に対してASSIGN LIST文を実行した場合，基表のRDエリアの一部が閉塞などの要因で検索できないときは，探索条件中の分割列に対する条件で検索できるRDエリアのデータを指定していてもエラーとなります。

(5)　同一ユーザのリストの操作

同一ユーザが，複数同時にHiRDBと接続してリストを操作できません。

(6)　ディクショナリサーバ，又はディクショナリサーバがあるユニットの停止

HiRDB／パラレルサーバの場合，ディクショナリサーバ，又はディクショナリサーバがあるユニットを停止すると，リスト管理情報が失われます。この結果，それまで作成していたすべてのリストが操作（検索，削除，変更）できなくなります（操作するとエラーになります）。操作するとエラーになるリストを使用したい場合は，ASSIGN LIST文で以前と同じリスト名のリストを作成してください。

また，ディクショナリサーバを再起動した場合，停止以前に開始した他ユーザのリストを使用したトランザクションの回復が完了するまでの間，リストを使用した処理がKFPA11998-Eエラー（トランザクション未決着状態でのリスト操作）となることがあります。

(7)　データベース回復ユティリティでのリストの基表の回復

ログを使用してリストの基表を最新の状態まで回復した場合，作成済みのリストをそのまま使用できます。ただし，バックアップだけを使用した回復，ログを使用した時間指定の回復，又は最新のログを使用しない回復のどれかの場合は，必ず次のどれかの方法で回復した表を基にしたリストをすべて削除，又は再作成してください。

リストを使用する場合

ASSIGN LIST文で，以前と同じリスト名のリストを作成してください。

リストを使用しない場合

DROP LIST文でリストを削除するか，又はHiRDBをいったん終了させ開始することで，作成済みのすべてのリストを削除してください。

(8)　リストの基表を格納しているRDエリアの再初期化

必ず次のどれかの方法で，再初期化したRDエリアに格納されている表を基にしたリストを，すべて削除，又は再作成してください。

リストを使用する場合

ASSIGN LIST文で，以前と同じリスト名のリストを作成してください。

リストを使用しない場合

DROP LIST文でリストを削除するか，又はHiRDBをいったん終了させ開始することで，作成済みのすべてのリストを削除してください。

(9)　リストの基表に対する再編成，作成モードのデータロード，又はPURGE TABLE文の実行

リストの基表に対して再編成，作成モードのデータロード，又はPURGE TABLE文を実行した場合，以前にその表を基に作成したリストの検索結果が不正になります。このリストを使用するためには，ASSIGN LIST文でリストを再作成する必要があります。

(10)　インナレプリカ機能を使用した場合の絞込み検索

インナレプリカ機能を使用して，pddbchgコマンド，UAP環境定義PDDBACCS，又はクライアント環境定義のPDDBACCSでアクセス対象RDエリアを切り替えた場合，次のどちらかの条件を満たしていないと検索結果が不正になります。

リスト検索時のアクセス対象RDエリアとリスト作成時のアクセス対象RDエリアが一致している

リスト検索時のアクセス対象RDエリアがリスト作成時のアクセス対象RDエリアからデータ複製されている

リストを使用する場合は，次のどれかの対処をしてください。

リスト作成時のアクセス対象RDエリアを使用する

リスト作成時のアクセス対象RDエリアからデータ複製されたアクセス対象RDエリアを使用する

現在のアクセス対象RDエリアでリストを再作成する

4.12　BLOBデータのファイル出力機能

4.12.1　BLOBデータのファイル出力機能とは

BLOBデータを検索する場合，BLOBデータを格納するためのメモリ領域をクライアント側で用意する必要があります。さらに，サーバ側ではBLOBデータ返却の送信バッファ，クライアントライブラリでのBLOBデータ受け取りの受信バッファのメモリも必要となります。そのため，BLOBデータに合わせた長大なメモリ確保が必要になり，メモリ資源を圧迫します。

また，エンドユーザのプログラムとHiRDBの間に，HiRDBのクライアントとして動作するミドルウェアプログラムが介在する構成が増えてきているため，これらのプログラム間のBLOBデータの受け渡しで更にメモリが増加する傾向にあります。

このBLOBデータ検索時のメモリ増大を防ぐために，検索したBLOBデータをクライアントに返却しないで，シングルサーバ，又はフロントエンドサーバがあるユニットのファイルに直接出力し，そのファイル名をクライアントに返却するのがBLOBデータのファイル出力機能です。

BLOBデータのファイル出力機能の概要を次の図に示します。

図4‒70　BLOBデータのファイル出力機能の概要

4.12.2　適用基準

BLOBデータ検索時に，メモリ所要量を削減したいときに適用してください。

ただし，クライアントプログラムのメモリ削減，及びサーバ，クライアント間の通信バッファのメモリ削減に効果はありますが，ファイル出力のためのディスク入出力は増加するため，メモリ所要量とディスク入出力の兼ね合いを考慮して利用してください。

4.12.3　指定方法

BLOBデータのファイル出力機能は，SQLのWRITE指定で指定します。WRITE指定は，カーソル指定，及び問合せ指定の中に指定できます。

WRITE指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

4.12.4　BLOBデータのファイル出力機能を使用する場合の留意点

作成したBLOBデータのファイルが不要になった場合，ユーザが削除する必要があります。ファイルを削除する場合は，次の点に注意してください。なお，カーソルクローズ後，トランザクション解決後は，無条件に削除できます。

FETCH直後に削除する場合，同じカーソル検索の直前のFETCH結果とBLOB値が同じときは，同じファイル名でファイルを再作成しないことがあります。この場合，直前のファイル名を記憶しておいて，ファイル名が変わったときに削除するように制御してください。

障害，又はロールバックが発生しても，作成したBLOBデータのファイルは削除されません。また，ファイルを削除しないでいると，ディスク容量などOSの資源を圧迫することになるので注意してください。

次の機能を使用する場合，事前にディスク容量に空きがあるか確認しておいてください。

配列を使用したFETCH機能を使用する場合

1回のFETCHで配列用要素数分のファイルが作成されます。

ブロック転送機能を使用する場合

最初のFETCHでブロック転送行数分のファイルを作成し，以降ブロック転送行数分のFETCH終了後の，次のFETCHのたびにブロック転送行数分のファイル作成を繰り返します。

ほかのトランザクションやカーソル検索とファイル名が重複した場合，ファイルを互いに破壊する可能性があります。この場合，トランザクションごと，又はカーソルごとにファイル接頭辞のディレクトリ名やファイル名を変えて，名称が重複しないようにすることをお勧めします。

4.12.5　BLOBデータのファイル出力機能を使用した例

BLOBデータのファイル出力機能を使用した検索例を次に示します。

(1)　BLOB列を検索する場合

表T1から，列C1，C2を検索します。このとき，C1のBLOBデータをファイル出力し，そのファイル名を取得します。

(2)　BLOB属性の抽象データ型を検索する場合

表T2から，CONTAINS()が真となるADT1列を検索します。このとき，列値をEXTRACTS()の引数に渡した結果のBLOB値をファイルに出力し，ファイル名を取得します。なお，この例は全件ヒットした場合を示しています。

4.13　BLOBデータ，BINARYデータの部分的な更新・検索

4.13.1　BLOBデータ，BINARYデータの部分的な更新・検索とは

登録されているBLOBデータ又はBINARYデータ※に対して，新たなデータを追加する場合に，データ全体を更新したり，BLOBデータ又はBINARYデータ※を検索する場合にデータ全体を取得したりすると，サーバ及びクライアントの双方で長大なデータに合わせてメモリを多量に確保する必要があり，メモリ資源を圧迫します。BLOBデータ，BINARYデータの部分的な更新・検索は，この問題を解決するために次の機能を提供します。

BLOBデータ，BINARYデータの追加更新

BLOBデータ，BINARYデータの部分抽出

BLOBデータ，BINARYデータの後方削除更新

注※

定義長が32,001バイト以上のBINARYデータを示します。

(1)　BLOBデータ，BINARYデータの追加更新

UPDATE文のSET句に連結演算を指定すると，登録されているBLOBデータ又はBINARYデータに対して新たなデータを追加できます。また，メモリ消費量も追加分だけに抑えられます。

(2)　BLOBデータ，BINARYデータの部分抽出

スカラ関数SUBSTRを指定すると，BLOBデータ又はBINARYデータから，指定した部分だけを抽出できます。また，メモリ消費量も抽出分だけに抑えられます。

(3)　BLOBデータ，BINARYデータの後方削除更新

UPDATE文のSET句に，処理対象列，及び開始位置として定数1を指定したスカラ関数SUBSTRを使用することで，BLOBデータ又はBINARYデータの後方部分だけを削除できます。更新データ分のメモリを取得しないで更新できるため，メモリ消費量，及びログ量を抑えられます。

4.13.2　使用例

(1)　BLOBデータの追加更新

複数のファイルを一つのBLOBデータとして格納します。

［説明］

対象表（T1）の行AのC2列に，ファイル1のBLOBデータを挿入します。

行AのC2列に対して，ファイル2のBLOBデータを連結することで追加更新されます。これ以降にデータを追加する場合も同様です。

(2)　BLOBデータの部分抽出

「BLOBデータの追加更新」で格納した行AのBLOBデータ（C2列）から，ファイル2の部分を抽出します。

［説明］

スカラ関数SUBSTRを使用して，ファイル2のデータ列の開始位置（100×1024＋1＝102401バイト目）から，ファイル2のデータ列の長さ分（200×1024＝204800バイト）だけ抽出します。

(3)　BLOBデータの後方削除更新

「BLOBデータの追加更新」で格納した行AのBLOBデータ（C2列）の後方部分を削除し，ファイル1とファイル2だけを残します。

［説明］

スカラ関数SUBSTRを使用して，ファイル1のデータ列の開始位置1バイト目から，ファイル1とファイル2の長さ分（100×1024＋200×1024＝307200バイト）だけを抽出したデータに置き換えて更新します。これによって，ファイル1とファイル2だけが残り，後方部分のデータは削除されます。

4.13.3　BLOBデータ，BINARYデータの部分的な更新・検索を行う場合の留意点

BLOBデータ，BINARYデータの部分的な更新・検索を行う場合は，次の点に留意してください。

BLOBデータ又はBINARYデータの連結演算を指定できるのは，UPDATE文のSET句の更新値だけです。また，連結演算の第1演算項に指定できるのは列指定だけで，第2演算項に指定できるのは埋込み変数，？パラメタ，SQL変数，及びSQLパラメタです。

連結演算を使用してBLOB型又はBINARY型の列を更新する場合の規則については，マニュアル「HiRDB SQLリファレンス」を参照してください。

追加更新をする場合，ユニークなキーを格納する列を作成し，探索条件に指定して更新行を特定してください。また，行の特定を高速にするため，インデクスをその列に作成してください。

BLOBデータの最小入出力単位はRDエリアのページ長になり，128キロバイトまでは一括して入出力処理をします。したがって，BLOBデータの挿入，追加更新，部分抽出処理の性能を良くするために，データの長さを128×1024×nバイト（nは0以上の整数）単位にすることを推奨します。

システム共通定義のpd_rpl_func_controlオペランドにBACKWARD_CUTOFF_UPDATEを指定していない場合は，後方削除更新が無効になります。この場合，SUBSTRに指定されたデータをメモリ上に抽出してから更新を行います。

4.14　先頭からn行の検索結果を取得する機能

4.14.1　概要

先頭からn行だけの検索結果を取得すると，SQLの検索性能を向上できることがあります。検索結果の行数が少ないほど，性能の向上も期待できます。

先頭からn行の検索結果を取得する機能を使用すると，SQLの検索結果のうち，先頭（又は，指定した先頭からのオフセット行数分スキップした箇所）からn行だけを受け取ります。この場合，SQLの最適化が選択するアクセスパスが変わります。その結果，次のようにSQLの検索性能が向上することがあります。

探索条件を満たしたすべての行を対象とするソート処理が不要となるため，ソート処理の対象行が少なくなる場合があります。

ORDER BYだけのために，HiRDBが作成していた作業表が不要となる場合があります。

各サーバプロセスで，検索結果の先頭n行に入らない行を読み込まないことで，サーバプロセス間の通信量が削減できる場合があります。

先頭からn行の検索結果を取得する機能を使用する場合，LIMITを指定します。LIMITについては，マニュアル「HiRDB SQLリファレンス」を参照してください。

4.14.2　留意事項

次の場合は，先頭からn行の検索結果を取得する機能を使用しても検索性能が向上しない，又は逆に検索性能が劣化する可能性があります。

オフセット行数＋リミット行数の値が，LIMIT句を指定しない場合と同じか，又は非常に近い場合

ORDER BY句を指定しないでLIMIT句を指定した場合，どの行が検索結果になるかは一意に決まりません。LIMIT句を指定した場合は，ORDER BY句も同時に指定することをお勧めします。ただし，ORDER BY句を指定することで，SQLの最適化が異なるアクセスパスを選択し，検索処理の性能が劣化することがあります。SQLの最適化が選択したアクセスパスは，アクセスパス表示ユティリティ（pdvwopt）で確認ができます。

ORDER BY句とLIMIT句を指定した場合，オフセット行数を基に読み飛ばした最終行，又はリミット行数を基に取得した最終行と，同じ値のソートキーを持つ行が複数あると，ソートキーが同じ値である行のうち，どの行が検索結果になるかは一意に決まりません。この条件に該当する行と同じ値のソートキーを持つ特定の行を検索結果とする場合，ソートキーの構成列を増やすことで，特定の行を検索結果にできます。ただし，ソートキーの構成列を増やすことで，SQLの最適化が異なるアクセスパスを選択し，検索処理の性能が劣化することがあります。SQLの最適化が選択したアクセスパスは，アクセスパス表示ユティリティ（pdvwopt）で確認ができます。

上記のような場合には，先頭からn行の検索結果を取得する機能は使用しないでください。

また，リミット行数が1以上で，かつオフセット行数＋リミット行数の値が32,767以下の場合，作業表を作成しない代わりに，オフセット行数＋リミット行数以内に入る行をメモリに保持します。このため，先頭からn行の検索結果を取得する機能を使用しない場合に比べて，メモリ所要量が増加します。メモリ所要量については，マニュアル「HiRDB システム導入・設計ガイド」の「先頭からn行の検索結果を取得する機能実行時に必要なメモリ所要量の求め方」を参照してください。

4.14.3　アクセスパスの確認方法

検索処理を高速化するため，先頭からn行の検索結果を取得する機能を使用する場合としない場合とで，SQLの最適化がORDER BY処理方式の異なるアクセスパスを選択することがあります。ORDER BY処理方式については，マニュアル「HiRDB コマンドリファレンス」のpdvwoptを参照してください。

4.15　自動再接続機能

自動再接続機能とは，サーバプロセスダウン，系切り替え，ネットワーク障害などの要因によるHiRDBサーバとの接続障害※を検知した場合に，自動的に再接続する機能です。自動再接続機能を使用すると，ユーザはHiRDBサーバとの接続の切断を意識しないで，UAPの実行を継続できます。

自動再接続機能を使用する場合は，クライアント環境定義PDAUTORECONNECTにYESを指定します。

注※

接続障害はSQL実行時のSQLエラーが次の場合を示します。

KFPA11722-E(SQLCODE：-722)

KFPA11723-E(SQLCODE：-723)

KFPA11728-E(SQLCODE：-728)

KFPA11732-E(SQLCODE：-732)

4.15.1　適用基準

HiRDBサーバで次の処理を実行している場合，HiRDBクライアントはその処理が終わるまで待ち状態となります。

システム定義の変更（pdchgconfコマンド）を実行している場合

修正版HiRDBの入れ替え（pdprgcopy及びpdprgrenewコマンド）を実行している場合

トランザクションキューイング機能（pdtrnqingコマンド）を使用して，計画系切り替えを実行している場合

待ち状態となっている間，PDCWAITTIMEの時間で待ち時間が監視されます。PDCWAITTIMEの時間を超えた場合，待ち状態は解除されてUAPにPDCWAITTIMEオーバーのエラーを返却します。

タイミングによっては，上記の処理が実行中であることを検知できないため，通信処理エラーになることがあります。あらかじめ上記の処理を実行することが分かっている場合は，自動再接続機能の適用を検討してください。自動再接続機能を使用すると，上記の処理を実行している場合でも，UAPにエラーを返却しないで処理を続行できます。

4.15.2　再接続する契機

再接続する契機を次に示します。

CONNECT文の実行直後，又は前回のSQLでトランザクション決着済みの場合に，SQLを実行したとき

HiRDBサーバが前回のSQLのトランザクション処理中に，SQLを実行したとき

CONNECT文を実行したとき

(1)　CONNECT文の実行直後，又は前回のSQLでトランザクション決着済みの場合に，SQLを実行したとき

SQLを実行したときに，接続が切断されているのを検知します。検知した場合，再接続をして，再接続後に再度SQLを実行します。自動再接続後のSQL実行で接続の障害を検知した場合は，UAPへエラーを返却します。再接続する契機（CONNECT文の実行直後，又は前回のSQLでトランザクション決着済みの場合に，SQLを実行したとき）を次の図に示します。

図4‒71　再接続する契機（CONNECT文の実行直後，又は前回のSQLでトランザクション決着済みの場合に，SQLを実行したとき）

(2)　HiRDBサーバが前回のSQLのトランザクション処理中に，SQLを実行したとき

SQLを実行したときに，接続が切断されているのを検知します。検知した場合，接続エラー（SQLCODE=-722，-723）をUAPに返却します。次回のSQL実行時に再接続をして，再度SQLを実行します。

自動再接続後のSQL実行で接続の障害を検知した場合は，UAPへエラーを返却します。再接続する契機（HiRDBサーバが前回のSQLのトランザクション処理中に，SQLを実行したとき）を次の図に示します。なお，エラー返却されたSQLまでに実行していた未決着トランザクションはロールバックされます。

図4‒72　再接続する契機（HiRDBサーバが前回のSQLのトランザクション処理中に，SQLを実行したとき）

(3)　CONNECT文を実行したとき

CONNECT文実行時に，通信エラーなどで接続が失敗した場合，そのまま再接続をします。

再接続する契機（CONNECT文を実行したとき）を次の図に示します。

図4‒73　再接続する契機（CONNECT文を実行したとき）

それぞれの再接続契機に自動再接続機能を適用するかどうかは，クライアント環境定義のPDRCTIMINIGで指定できます。再接続する契機とPDRCTIMINIGの指定値の関係を次に示します。

表4‒19　再接続する契機とPDRCTIMINIGの指定値の関係

再接続する契機

PDRCTIMING指定値

CONNECT文の実行直後，又は前回のSQLでトランザクション決着済みの場合に，SQLを実行したとき

NOTRN又はALL

HiRDBサーバが前回のSQLのトランザクション処理中に，SQLを実行したとき

TRN又はALL

CONNECT文を実行したとき

CNCT又はALL

SQL実行シーケンスでの自動再接続契機とPDRCTIMING指定値の対応を次の図に示します。

図4‒74　SQL実行シーケンスでの自動再接続契機とPDRCTIMING指定値の対応

4.15.3　自動再接続でのCONNECT処理

自動再接続では，内部的に5秒間隔でCONNECT文を5回実行します。CONNECT文の実行回数，及び実行間隔は，クライアント環境定義のPDRCCOUNT，及びPDRCINTERVALで変更できます。

再接続契機がCONNECT文の場合はPDCONNECTWAITTIMEで監視されますが，CONNECT文以外の場合はPDCWAITTIMEで監視されます。自動再接続の処理時間がPDCONNECTWAITTIME又はPDCWAITTIMEの時間を超えた場合は，自動再接続の処理は打ち切られ，UAPにエラーを返却します。自動再接続機能をPDRCCOUNTの指定回数分リトライさせたい場合は，PDCWAITTIMEの指定値をPDRCCOUNT×PDRCINTERVAL以上に設定してください。

4.15.4　留意事項

UNTIL DISCONNECT指定のLOCK文を使用しているUAPの場合，自動再接続機能は使用できません。

SQLセッション固有一時表（ON COMMIT PRESERVE ROWS指定）を使用しているUAPの場合，自動再接続機能は使用できません。

トランザクション処理中でない場合でも，ホールダブルカーソルを使用しているときは，UAPにいったんエラーを返却します。

JDBCドライバ※１，又はDABroker for JAVA※２からのアクセスで，トランザクションをわたったステートメントが有効となっている場合，自動再接続機能で再接続後は，JDBCのステートメントが無効となります。この場合，再度prepareStatement()メソッドの実行が必要となります。

トランザクションの最初のSQLでPDCWAITTIMEの時間を超えた場合でも，UAPにエラーを返さないでCONNECT文，及びSQLの再実行を行います。そのため，PDCWAITTIMEの約2倍の時間でエラーを返すことがあります。

Java EEアプリケーションサーバ接続時はステートメントプーリング／ステートメントキャッシュ機能を有効にすると，HiRDBの自動再接続機能によってコネクションが再接続された後のSQL実行で，KFPA11901-Eメッセージを含むSQLException例外が発生することがあります。ステートメントプーリング／ステートメントキャッシュ機能を使用する場合は，自動再接続機能を使用しないでください。なお，ステートメントプーリング／ステートメントキャッシュ機能については，マニュアル「HiRDB システム導入・設計ガイド」の「ステートメントプーリング／ステートメントキャッシュ」を参照してください。

注※1

JDBCドライバでトランザクションをわたったステートメントが有効となるのは，COMMIT_BEHAVIORに"CLOSE"，又は"RESERVE"を設定している場合です。COMMIT_BEHAVIORは，Driverクラスのconnectメソッドの引数Properties info，DriverManager.getConnectionメソッドの引数Properties info，又はURL接続でのCOMMIT_BEHAVIORキーで設定できます。

注※2

DABroker for JAVAでトランザクションをわたったステートメントが有効となるのは，DABroker 03-06以降で，かつDABroker for JAVA 02-10以降の場合です。

4.16　位置付け子機能

4.16.1　位置付け子機能とは

クライアントのUAPで，検索したBLOBデータ又はBINARYデータをそのデータ型の埋込み変数で受け取る場合，受け取ったデータを格納するためのメモリ領域をクライアント側で用意する必要があります。このため，長大なデータを検索する場合，クライアント側のメモリ資源を圧迫します。さらに，サーバからクライアントへのデータ転送量も大きくなります。しかし，必要なデータが一部だけであったり，受け取ったデータを変更しないでほかのSQL文中に指定してサーバに送り返すだけであったりする場合，データをすべてクライアントに転送することはむだなことになります。

位置付け子機能は，これを解決するために使用する機能です。位置付け子は，サーバ上のデータを識別する4バイトの値のデータであり，1行SELECT文やFETCH文のINTO句などに位置付け子の埋込み変数を指定することで，検索結果としてデータの実体ではなく，そのデータを識別する位置付け子の値を受け取ります。また，データを識別する位置付け子の埋込み変数をほかのSQL文中に指定することで，位置付け子が識別するデータを扱う処理ができます。

位置付け子機能の概要を次の図に示します。

図4‒75　位置付け子機能の概要

［説明］

位置付け子機能を使用しない場合：

DBから検索したBLOBデータを，サーバからクライアントに転送します。

クライアントからサーバにBLOBデータを転送し，それをDBに格納します。

位置付け子機能を使用する場合：

サーバが，DBから検索したデータを識別する位置付け子データを作成します。

位置付け子データを，サーバからクライアントに転送します。

クライアントからサーバに位置付け子データを転送します。

位置付け子データが識別するサーバ上のBLOBデータをDBに格納します。

4.16.2　適用基準

BLOBデータ又はBINARYデータを検索する場合，クライアント側のメモリ所要量を削減したいとき，及びサーバ，クライアント間のデータ転送量を少なくしたいときに適用してください。

位置付け子機能を使用すると，クライアント側で実際のデータの大きさ分だけメモリを確保する必要がなくなり，さらにサーバ，クライアント間のデータ転送を位置付け子で行うことができるため，データ転送量を少なくできます。

4.16.3　使用方法

位置付け子の値を受け取る場合，SQL文中のBLOB型又はBINARY型のデータを受け取る埋込み変数を指定する箇所に，対応するデータ型の位置付け子の埋込み変数を指定します。また，位置付け子に割り当てられたデータを処理する場合は，SQL文中にBLOB型又はBINARY型の埋込み変数を指定する代わりに，対応するデータ型の位置付け子の埋込み変数を指定します。

4.16.4　使用例

表T1のC1=1である行の列C2データを，あるバイナリデータ列（search_data）から始まる400キロバイトの部分だけ，別のデータ（change_data）に置き換えます。それをC2列とした新しい行（C1=2）として，表T1に挿入します。

表T1の各列のデータ型を次に示します。

C1：INTEGER NOT NULL (INDEX)

C2：BLOB (100M) NOT NULL

void abnormalend(void);

main()
{
  EXEC SQL BEGIN DECLARE SECTION;
    SQL TYPE IS BLOB AS LOCATOR alldata_loc; /* 全データを表す位置付け子 */
    long change_pos;                        /* 変更開始位置 */
    SQL TYPE IS BLOB(10) search_data;       /* 検索バイナリデータ列 */
    SQL TYPE IS BLOB(400K) change_data;     /* 変更バイナリデータ列 */
    SQL TYPE IS BLOB AS LOCATOR enddata_loc; /* 変更部分の後に続く     */
                                             /* データを表す位置付け子 */
    long pos;
  EXEC SQL END DECLARE SECTION;

         -------(HiRDBへのCONNECT処理(省略))     -------
         -------(検索バイナリデータ列の設定(省略))-------
         -------(変更バイナリデータ列の設定(省略))-------

  EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;
  /* 列データを位置付け子で取得 */
  EXEC SQL SELECT C2 INTO :alldata_loc FROM T1 WHERE C1 = 1;
  /* 検索バイナリデータ列を含む開始位置を取得 */
  EXEC SQL SET :change_pos = POSITION(:search_data AS BLOB(10)
    IN :alldata_loc AS BLOB(100M));
  pos = change_pos + 409600;
  /* 変更部分の後に続くデータを位置付け子で取得 */
  EXEC SQL SET :enddata_loc = SUBSTR(:alldata_loc AS BLOB(100M), :pos);
  pos = change_pos -1;
  /* 変更部分より前のデータを位置付け子を用いてINSERT */
  EXEC SQL INSERT INTO T1 VALUES(2, SUBSTR
    (:alldata_loc AS BLOB(100M), 1, :pos));
  /* 全データを表す位置付け子は必要なくなったので無効化する */
  EXEC SQL FREE LOCATOR :alldata_loc;
  /* 変更部分のデータを連結してUPDATE */
  EXEC SQL UPDATE T1 SET C2 = C2 || :change_data WHERE C1 = 2;
  /* 変更部分の後に続くデータを位置付け子を用いて連結してUPDATE */
  EXEC SQL UPDATE T1 SET C2 = C2 || :enddata_loc WHERE C1 = 2;
  EXEC SQL COMMIT;
  printf(" *** normally ended ***¥n");
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  EXEC SQL WHENEVER SQLWARNING CONTINUE;
  EXEC SQL DISCONNECT;
  return(0);
}
void abnormalend()
{
  int  wsqlcode;
  wsqlcode = -SQLCODE;printf("¥n*** HiRDB SQL ERROR SQLCODE
    = %d ¥n", wsqlcode);
  printf("SQLERRMC = %s¥n", SQLERRMC);
  EXEC SQL ROLLBACK;
  EXEC SQL DISCONNECT;
  exit(1);
}

4.16.5　留意事項

位置付け子に対してサーバ上のデータを割り当てる場合，サーバ上に，位置付け子に割り当てたデータを保持しておくメモリが必要になることがあります。このため，1トランザクションで多数のデータを位置付け子に割り当て，有効にしたままにすると，サーバのメモリを圧迫します。したがって，必要のなくなった位置付け子は，FREE LOCATOR文で無効にしてください。

4.17　総ヒット件数返却機能

4.17.1　機能概要

通常，総ヒット件数とヒットした行の値を求める場合，二つのSQL文を実行しますが，総ヒット件数返却機能を使用すると，総ヒット件数を求めるSQLと，ヒットした行の値を求めるSQLとを，一つのSQLに統合できます。これによって，二つのSQL文を実行するための検索時間が，一つのSQL文を実行する検索時間とほぼ等しくなります。

総ヒット件数返却機能は，ウィンドウ関数COUNT(*) OVER()を選択式中に指定することで使用できます。ウィンドウ関数については，マニュアル「HiRDB SQLリファレンス」を参照してください。

4.17.2　使用例

在庫表（ZAIKO）から単価（TANKA）が5000円以上の商品の総数と，その商品名（SNAME）を求め，数量（ZSURYO）でソートする場合の例を次に示します。

総ヒット件数返却機能を使用しない場合

SELECT COUNT(*) FROM ZAIKO WHERE TANKA>=5000
SELECT SNAME    FROM ZAIKO WHERE TANKA>=5000 ORDER BY ZSURYO

[説明]

総ヒット件数返却機能を使用しない場合は，二つのSQL文が必要となります。

総ヒット件数返却機能を使用する場合

SELECT COUNT(*) OVER(), SNAME
                FROM ZAIKO WHERE TANKA>=5000 ORDER BY ZSURYO

[説明]

二つのSQL文の下線部が同じなので，総ヒット件数返却機能を使用することで一つのSQL文に統合し，初回取り出し時に総ヒット件数を取得できます。

4.17.3　留意事項

次に示すケースでは，総ヒット件数返却機能を使用しても，検索性能の向上が期待できない，又は検索性能が低下するおそれがあります。この場合は，総ヒット件数返却機能を使用しないようにしてください。

DISTINCT，ORDER BY句，及びFOR READ ONLY句のどれも指定しない場合。

ORDER BY句を指定し，ORDER BYのためのソートがキャンセルできるアクセスパスを選択している場合。

ORDER BYのためのソートがキャンセルできるかどうかは，アクセスパス表示ユティリティ（pdvwopt）で確認できます。アクセスパス表示ユティリティについては，マニュアル「HiRDB コマンドリファレンス」を参照してください。

射影長が短くて，COUNT(*) OVER()の列長4バイト分の通信量の増加が無視できない場合。

検索処理コストが小さい場合。

4.18　RDエリア名を指定した検索，更新，又は削除

4.18.1　機能概要

マルチフロントエンドサーバで表の横分割を行っている場合，RDエリア名を指定して検索，更新，又は削除を行うと，アクセスするRDエリアを限定することができます。これによって，複数のRDエリアに対して並列にアクセスできるようになり，サーバマシンに対する負荷を分散させることができます。

4.18.2　使用例

RDエリア名を指定した検索をする場合の例を次の図に示します。

図4‒76　RDエリア名を指定した検索をする場合の例

［説明］

RDエリアRD01，RD02，RD03に格納している横分割表T1に対して，検索を行います。このとき，AP1，AP2，AP3という三つのUAPから，それぞれアクセスするRDエリアを指定したSELECT文を発行します。これによって，RDエリアへのアクセスを，フロントエンドサーバFES1，FES2，FES3経由で並列に実行することができ，UAP又はフロントエンドサーバがあるサーバマシンの負荷を分散させることができます。

4.18.3　留意事項

次に示す場合は，この機能が適用されません。

CREATE TABLEにWITHOUT ROLLBACKオプションを指定した表を検索，更新，又は削除する場合

ログレスモードでUAPを実行している場合

pdlbufferオペランドの-iオプションでインデクス用のローカルバッファを割り当てている場合

この機能が適用された場合，分割数が表の分割数と等しいインデクスだけが利用可能になります。RDエリア名を指定した検索，更新，又は削除しか行わない場合，分割数が表の分割数と異なるインデクスを定義していると，インデクスが利用されません。RDエリア名を指定した検索，更新，又は削除を行う場合は，分割数が表の分割数と等しいインデクスを定義してください。

4.19　自動採番機能

自動採番機能とは，データベース中でデータを呼び出すごとに一連の整数値を返す機能です。この機能は，順序数生成子を定義することで使用できます。自動採番機能を使用すると，採番を行うUAPの開発効率が向上します。また，順序数生成子をサポートしている他DBMSで作成したUAPからの移行性も向上します。このため，採番業務では自動採番機能を使用することを推奨します。

4.19.1　順序数生成子とは

順序数生成子は，ユーザやトランザクションの状態に関係なく，連続した番号（順序番号）を一度に一つ生成します。順序数生成子の概要を次の図に示します。

図4‒77　順序数生成子の概要

[説明]

順序数生成子が生成する順序番号を取得するためには，NEXT VALUE式を使用します。NEXT VALUE式は，順序数生成子が生成した最新の値（現在値）の次の値を取得し，現在値を次の値に更新します。

順序数生成子が定義されてから一度もNEXT VALUE式を使用していない場合，現在値は未設定となります。現在値が未設定の状態でNEXT VALUE式を使用すると，順序数生成子の開始値が返され，現在値には順序数生成子の開始値が格納されます。

注意事項

現在値はロールバックが発生しても回復されません。トランザクションの状態に関係なく，連続した番号を生成します。

4.19.2　順序数生成子の定義

順序数生成子の定義には，CREATE SEQUENCEを使用します。CREATE SEQUENCEについては，マニュアル「HiRDB SQLリファレンス」を参照してください。

順序数生成子の定義例を次に示します。

CREATE SEQUENCE SEQ1..........1
  AS INTEGER..................2
  START WITH 10...............3
  INCREMENT BY 10.............4
  MAXVALUE 999................5
  MINVALUE 10.................6
  CYCLE.......................7
  LOG INTERVAL 3..............8
IN RD01.......................9

[説明]

2〜9の条件で順序数生成子SEQ1を定義します。

データ型

開始値

増分値

最大値

最小値

循環指定

増分値10，最小値10，最大値999で，最大値の次の値が最小値となるように値を循環させます。

ログ出力間隔

格納先RDエリア名

注意事項

循環指定をした場合，順序数生成子が循環すると順序番号に重複が発生します。

(1)　順序数生成子格納RDエリアの指定

順序数生成子の定義時，順序数生成子の格納先として，次に示す条件を満たしたRDエリアを指定できます。

定義されている表と順序数生成子の合計が500未満のRDエリア

閉塞していないRDエリア

インナレプリカ機能を使用していないRDエリア

注意事項

HiRDB/パラレルサーバの場合，順序数生成子と順序数生成子を使用する表（サーバ間分割していない表）が別々のサーバに格納されているときは，順序数生成子を使用するたびに通信が発生して，処理性能が低下します。サーバ間分割している表の場合，順序数生成子と順序数生成子を使用する表を同じサーバのRDエリアに格納することで，通信回数を軽減できることがあります。そのため，順序数生成子と順序数生成子を使用する表は同じサーバのRDエリアに格納することを推奨します。

順序数生成子格納RDエリアに対してインナレプリカ機能は使用できません。

(2)　ログ出力間隔の指定

順序数生成子の定義時，ログの出力間隔を指定することで，処理性能が向上します。

順序数生成子ログは，次の契機で出力されます。

順序数生成子を定義してから最初にNEXT VALUE式を使用したとき

順序番号の取得回数がログ出力間隔に達したとき

ログ出力間隔を指定した例を次の図に示します。

注意事項

順序数生成子のログ出力間隔を小さく設定すると，システム障害発生時の欠番は少なくなりますが，ログの出力回数が多くなるので性能が低下します。ログ出力間隔を大きく設定すると，システム障害発生時の欠番が多くなりますが，ログの出力回数が少なくなるので性能は向上します。

欠番が発生した場合，最大でログ出力間隔に指定した値の分だけ欠番が発生します。

4.19.3　順序数生成子の削除

順序数生成子の削除には，DROP SEQUENCEを使用します。DROP SEQUENCEについては，マニュアル「HiRDB SQLリファレンス」を参照してください。

4.19.4　順序数生成子が生成する順序番号の取得

順序数生成子が生成する順序番号の取得方法には次の2種類があります。

自動採番機能を使用したデータロード

NEXT VALUE式

自動採番機能を使用したデータロードについては，マニュアル「HiRDB コマンドリファレンス」を参照してください。NEXT VALUE式については，マニュアル「HiRDB SQLリファレンス」を参照してください。

4.19.5　使用例

NEXT VALUE式は，INSERT文の問合せ式の選択式，INSERT文の挿入値，又はUPDATE文の更新値に指定できます。同一の行に対して，同じ順序数生成子を指定したNEXT VALUE式を複数指定した場合，それらのNEXT VALUE式はすべて同じ値を返します。

NEXT VALUE式の使用例を次に示します。なお，順序数生成子は，「順序数生成子の定義」で定義したSEQ1を使用します。

例

順序数生成子SEQ1の順序番号を一度も取得していない状態でNEXT VALUE式を実行すると，順序数生成子の開始値（10）が返されます。

例

同一行に同じ順序数生成子を指定したNEXT VALUE式を二つ以上指定すると，すべてのNEXT VALUE式は同じ値（20）が返されます。

例

繰返し列を含む表に対しても，同一行に同じ順序数生成子を指定したNEXT VALUE式を二つ以上指定すると，すべてのNEXT VALUE式は同じ値（30）が返されます。

例

順序数生成子SEQ1の現在値が最大値（990）のときにNEXT VALUE式を指定すると，循環後の値（10）が返されます。

4.19.6　留意事項

順序数生成子格納RDエリアと，順序数生成子を使用する表を格納しているRDエリアのバックアップ取得順序によっては，データベースの回復後，順序番号に重複や欠番が発生するおそれがあります。

(1)　順序番号に重複や欠番が発生しないケース

順序数生成子格納RDエリアと，順序数生成子を使用する表を格納しているRDエリアのバックアップを同時に取得した場合，順序番号に重複や欠番が発生しません。

図4‒78　順序数生成子格納RDエリアと，順序数生成子を使用する表を格納しているRDエリアのバックアップを同時に取得した場合

(2)　順序番号に重複や欠番が発生するおそれのあるケース

(a)　バックアップ取得順序が，順序数生成子→順序数生成子を使用する表の場合

順序番号に重複のおそれがあります。詳細を次の図に示します。

図4‒79　バックアップ取得順序が，順序数生成子→順序数生成子を使用する表の場合

(b)　レプリケーション機能を使用した場合

順序番号に重複のおそれがあります。

レプリケーション機能（HiRDB Dataextractor及びHiRDB Datareplicator）では，順序数生成子を使用できません。抽出側と反映側を切り替えて，同じ名前の順序数生成子を使用して運用する場合，反映側に抽出側の順序数生成子の現在値を引き継げないため，順序番号が重複するおそれがあります。

(c)　バックアップ取得順序が，順序数生成子を使用する表→順序数生成子の場合

順序番号に欠番のおそれがあります。詳細を次の図に示します。

図4‒80　バックアップ取得順序が，順序数生成子を使用する表→順序数生成子の場合

(d)　ログを使用した回復を行う場合

バックアップ取得時点以降の任意の同期点，又は障害発生直前の最新の同期点に回復する場合，バックアップファイルとシステムログファイル，又はアンロードログファイルをバックアップとしてデータベースを回復してください。このとき，順序数生成子を定義するときに指定したログ出力間隔の値の分だけ，順序番号に欠番のおそれがあります。詳細を次の図に示します。

図4‒81　ログを使用した回復を行う場合

［説明］

取得したアンロードログファイルを使用して，順序数生成子SEQ1と表を回復した場合，回復後にNEXT VALUE式を実行したとき，順序数生成子SEQ1から取得した値は21となり，バックアップ取得時点から障害発生までの間に取得されていない順序数生成子SEQ1の値（17〜20）は欠番となります。

4.20　プラグインインデクスでの他インデクス絞り込み結果の利用

4.20.1　概要

プラグインインデクスを使用した条件の絞り込み時に，ほかのインデクスを使用した条件による絞り込み結果の行識別子集合を利用する機能です。この機能の適用条件は，プラグインインデクスを使用した検索で，検索方式としてANDの複数インデクス利用が適用できる場合です。この機能の適用によって，ほかの条件による絞り込み率がよい場合には，その絞り込み結果を利用してプラグインインデクスのサーチ範囲をさらに絞り込むので，高速に検索できます。ただし，ほかの条件による絞り込み率が悪い場合は，その絞り込み結果をプラグインインデクスのサーチに利用しません。

4.20.2　使用方法

次の表を参照して検索高速化インデクス（V2）を定義してください。

表4‒20　プラグインインデクスのデータ型に対応するマニュアル

プラグインインインデクスを定義するデータ型

対応するマニュアル

XML型

「HiRDB XML Extension」の「XMLデータ検索プラグインのデータベースの作成」，「インデクスの定義」

SGML型

「HiRDB Text Search Plug-in」の「文書検索プラグインのデータベースの作成」，「インデクスの定義」

FREEWORD型

「HiRDB Text Search Plug-in」の「文字列検索プラグインのデータベースの作成」，「インデクスの定義」

検索高速化インデクス（V2）を使用する条件と，ほかのインデクスを使用した条件とのAND演算を指定してください。ほかの条件による絞り込み結果の行識別子集合を利用できるプラグインインデクスの条件の場合は，アクセスパスのサーチ条件種別がIS TRUE（AND）になります。詳細はマニュアル「HiRDB コマンドリファレンス」の「アクセスパス表示ユティリティ（pdvwopt）」の「サーチ条件」を参照してください。

4.20.3　留意事項

XMLEXISTS述語の条件と，次に示す条件とのAND演算を指定する場合，XMLEXISTS述語に対してインデクスを利用しないため，検索方式がANDの複数インデクス利用にはなりません。そのため，XMLEXISTS述語に対してこの機能は適用されません。

CONTAINS関数

CONTAINS_WITH_SCORE関数

CONCEPT_WITH_SCORE関数

CONCEPT_WITH_TERMS関数

構造化繰返し述語

プラグインインデクスで他インデクス絞り込み結果を利用しないアクセスパスにする場合，SQL拡張最適化オプションに，DETER_IS_TRUE_AND（2048）を指定してください。SQL拡張最適化オプションの指定方法は，「クライアント環境定義の設定内容」，及びマニュアル「HiRDB システム定義」の「SQLの最適化に関するオペランド」を参照してください。

4.20.4　使用例

使用例を示します。

前提とする表定義及びインデクス定義

CREATE TABLE TBL1(ID INTEGER, REGDATE DATE, CHI XML);
CREATE INDEX IID ON TBL1(ID);
CREATE INDEX ICHI USING TYPE IXXML ON TBL1(CHI) IN ((RUL01)) PLUGIN 'INDEX_V2';

<プラグインインデクスで他インデクス絞り込み結果を利用する例>

例1：

プラグインインデクスを利用できる条件とB-Treeインデクスを利用できる条件をAND演算すると，プラグインインデクスで他インデクス絞り込み結果を利用できます。

SELECT ID FROM TBL1 WITH INDEX (IID, ICHI)
WHERE ID >= 100 AND CONTAINS(CHI,'root[elm{"1"}]') IS TRUE;
（アンダーラインのサーチ条件種別: SearchCnd : IS TRUE (AND)）

例2：

プラグインインデクスを利用できる条件とプラグインインデクスを利用できる条件をAND演算すると，2番目に指定したプラグインインデクスを利用できる条件に対して，プラグインインデクスで他インデクス絞り込み結果を利用できます。

SELECT ID FROM TBL1
WHERE CONTAINS(CHI,'root[time{"180"}]') IS TRUE AND CONTAINS(CHI,'root[elm{"1"}]') IS TRUE;
（アンダーラインのサーチ条件種別: SearchCnd : IS TRUE (AND)）

例3：

プラグインインデクスを利用できる二つの条件とB-Treeインデクスを利用できる条件をAND演算すると，プラグインインデクスを利用できる両方の条件に対して，プラグインインデクスで他インデクス絞り込み結果を利用できます。このとき，2番目に指定したプラグインインデクスの利用時には，B-Treeインデクスを利用できる条件と1番目に指定したプラグインインデクスを利用できる条件とのAND演算の絞り込み結果の行識別子集合の利用ができます。

SELECT ID FROM TBL1 WITH INDEX (IID, ICHI, ICHI)
WHERE ID >= 100 AND CONTAINS(CHI,'root[time{"180"}]') IS TRUE
      AND CONTAINS(CHI,'root[elm{"1"}]') IS TRUE;
（アンダーラインのサーチ条件種別: SearchCnd : IS TRUE (AND)）

<プラグインインデクスで他インデクス絞り込み結果を利用しない例>

例1：

インデクスを利用できる条件としてプラグインインデクスに対する条件を一つしか指定していないのでプラグインインデクスで他インデクス絞り込み結果を利用できません。

SELECT ID FROM TBL1 WHERE CONTAINS(CHI,'root[elm{"1"}]') IS TRUE;
（アンダーラインが該当部分）

例2：

AND演算ではなく，OR演算を指定しているのでプラグインインデクスで他インデクス絞り込み結果を利用できません。

SELECT ID FROM TBL1 WITH INDEX (IID, ICHI)
WHERE ID >= 100 OR CONTAINS(CHI,'root[elm{"1"}]') IS TRUE;
（アンダーラインが該当部分）

例3：

プラグインインデクスを利用できる条件とインデクスを利用できない条件をAND演算しているのでプラグインインデクスで他インデクス絞り込み結果を利用できません。

SELECT ID FROM TBL1
WHERE REGDATE = '2000-01-01'
      AND CONTAINS(CHI,'root[elm{"1"}]') IS TRUE;
（アンダーラインが該当部分）

5　オブジェクトリレーショナルデータベースをアクセスするUAP作成時の注意事項

この章では，オブジェクトリレーショナルデータベースをアクセスするUAP作成時の注意事項について説明します。

5.1　抽象データ型及びユーザ定義関数を使用する場合の注意事項

抽象データ型がある表をアクセスするUAP，及びユーザ定義関数を使用するUAPを記述するときの注意事項について説明します。

5.1.1　埋込み変数のデータ型

埋込み変数の宣言（埋込みSQL宣言節）中には，ユーザ定義型は指定できません。

検索対象となる表の列のデータ型が抽象データ型の場合，SELECT文の選択式に列指定は指定できません。

関数の引数に埋込み変数を指定する場合は，実際に使用する関数の各引数のデータ型と一致させる必要があります。埋込み変数の記述と，関数の引数のデータ型が一致しない場合，その関数は利用できません。

関数の引数のデータ型は，ディクショナリ表のSQL_ROUTINE_PARAMS表を検索すれば分かります。ディクショナリ表の検索方法については，「操作系SQLによるデータディクショナリ表の参照」の「検索時のSQLの記述例」を参照してください。

関数の引数に次のデータ型を指定した場合，埋込み変数は使用できません。

ROW

5.1.2　定数のデータ型

関数の引数に定数を使用する場合は，実際に使用する関数の各引数のデータ型と一致させる必要があります。例えば，関数の引数のデータ型がSMALLINTの場合，整数定数を指定してもデータ型は一致しません。このような場合に，同じ関数名，同じ引数の数，及び引数がINTEGER型の関数があるときは，その関数が適用されることがあるので注意してください。

関数の引数に次のデータ型を指定した場合，定数は使用できません。

SMALLINT

SMALLFLT

CHAR

NCHAR

MCHAR

DATE

TIME

TIMESTAMP

INTERVAL YEAR TO DAY

INTERVAL HOUR TO SECOND

ROW

BLOB

BINARY

5.2　プラグイン提供関数の制限

プラグイン提供関数とは，プラグインが提供する関数のことを指します。

5.2.1　プラグイン提供関数間の値の受け渡しに関する制限

(1)　プラグイン提供関数の種類

プラグイン提供関数の種類を次の表に示します。

表5‒1　プラグイン提供関数の種類

関数の種類

プラグインの処理

受け渡しする値を生成し，ほかのプラグイン提供関数に送信する処理

ほかのプラグイン提供関数から送信された，受け渡しする値を受信する処理

受け渡しする値がない関数

なし

なし

受け渡しする値を受信する関数※１

なし

あり

受け渡しする値を送信する関数※２

あり

なし

受け渡しする値を送受信する関数

あり

あり

注※1

例えば，HiRDB Text Search Plug-inの場合，scoreを示します。

注※2

例えば，HiRDB Text Search Plug-inの場合，contains_with_scoreを示します。

プラグイン提供関数の機能として，プラグイン提供関数間で値の受け渡しができます。プラグイン提供関数間の値の受け渡しは，HiRDBが自動的にするので，受け渡しする値をプラグイン提供関数の引数に指定する必要はありません。

プラグイン提供関数の種類によっては，SQL中に記述できる場所が異なるので注意する必要があります。プラグイン提供関数の種類については，各種プラグインマニュアルを参照してください。

なお，これ以降の説明では用語を次のように略します。

受け渡しする値がない関数→受渡し値なし関数

受け渡しする値を受信する関数→受渡し値受信関数

受け渡しする値を送信する関数→受渡し値送信関数

受け渡しする値を送受信する関数→受渡し値送受信関数

(2)　受渡し値送信関数と受渡し値受信関数の対応

受渡し値送信関数と受渡し値受信関数の対応についての規則を次に示します。

受渡し値送信関数と受渡し値受信関数との間には，値を受け渡しできるものと受け渡しできないものがあります。受渡し値送信関数と受渡し値受信関数との対応関係については，各種プラグインマニュアルを参照してください。

受渡し値送信関数と受渡し値受信関数の第1引数は同じで，実表の列指定，SQLパラメタ，又はSQL変数である必要があります。なお，コンポネント指定は指定できません。

受渡し値送信関数と受渡し値受信関数は，一つの問合せ指定で閉じるようにしてください。ただし，リスト作成時に，受渡し値送信関数を指定して受渡し値をリストに格納しておいて，リストを介した検索時に受渡し値受信関数を指定してリストから受渡し値を取得する場合，受渡し値送信関数と受渡し値受信関数は，複数の問合せにわたって指定できます（「リスト間の集合演算実行方法の種類」を参照してください）。

受渡し値受信関数と受渡し値送信関数の組み合わせと，HiRDBの動作を次の表に示します。

表5‒2　受渡し値受信関数と受渡し値送信関数との組み合わせ

受渡し値受信関数の指定

受渡し値送信関数の指定

HiRDBの動作

なし

なし

実行できます。

あり

あり

なし

実行できません。※

あり(一つ)

実行できます。

あり(二つ以上)

実行できません。

注※

リストから受渡し値を取得する場合，受渡し値送信関数と受渡し値受信関数は，複数の問合せにわたって指定できます。

(3)　各プラグイン提供関数の制限

受渡し値なし関数

関数を指定できる箇所であれば，すべて指定できます。

受渡し値受信関数

SELECT文の選択式，問合せ指定があるINSERT文の選択式，及びUPDATE文のSET句の更新値にだけ指定できます。

CASE式中，及びスカラ関数VALUE中には指定できません。

GROUP BY句，HAVING句，又は集合関数を指定した場合，第1引数がSQL変数又はSQLパラメタの受渡し値受信関数は，集合関数の引数中以外では指定できません。

受渡し値送信関数

(i) 受渡し値受信関数がない場合

関数を指定できる箇所であれば，すべて指定できます。

(ii) 受渡し値受信関数がある場合

WHERE句，又はON 探索条件にだけ指定できます。

外結合を指定した結合表のON 探索条件に，受渡し値送信関数を指定する場合，第1引数に外表の列は指定できません。

受渡し値送信関数をORのオペランドの探索条件中に指定する場合，次の条件をすべて満たす必要があります。

・受渡し値送信関数の第1引数にプラグインインデクスを定義している。

・受渡し値送信関数の第1引数が，外への参照列を除く実表の列指定である。

・受渡し値送信関数の第1引数を除く引数に，外への参照列を除く列指定，及び列に対するコンポネント指定の値式を含む引数を指定していない。

・受渡し値送信関数に対して，IS FALSE，IS UNKNOWN，及びNOTが含まれる述語を指定していない。

・受渡し値送信関数をCAST指定中に指定していない。

・FROM句に2表以上指定した場合，受渡し値送信関数の第1引数の列と異なる表の列を，ORのオペランドの探索条件中に指定していない（WHERE句，及びON 探索条件に論理演算子NOTを含む場合，ド・モルガンの定理によって論理演算子NOTを排除した結果が条件を満たすときも同様です）。

CASE式中，及びスカラ関数VALUE中には指定できません。

GROUP BY句，HAVING句，又は集合関数を指定して定義した名前付き導出表をFROM句に指定していて，かつこの名前付き導出表が内部導出表を作成しない場合，名前付き導出表を指定した問合せ指定の探索条件には，第1引数がSQL変数，又はSQLパラメタとなる受渡し値送信関数は指定できません。

受渡し値送受信関数

SQL中には指定できません。

5.2.2　プラグイン提供関数の実行方法に関する制限

(1)　プラグイン提供関数の実行方法

プラグイン提供関数を実行する方法には，次の二つがあります。

インデクス型プラグインを使用して，プラグイン提供関数を実行する方法

インデクス型プラグインを使用しないで，プラグイン提供関数を実行する方法

プラグイン提供関数には，インデクス型プラグインを使用しないと実行できない関数（インデクス型プラグイン専用関数）があります。

HiRDBがインデクス型プラグイン専用関数を実行する場合に，インデクス型プラグインを使用できないと判断したときはエラーとなります。エラーとなる組み合わせを次の表に示します。プラグイン提供関数が，インデクス型プラグイン専用関数であるかどうかについては，各種プラグインマニュアルを参照してください。

表5‒3　プラグイン提供関数実行時にエラーとなる組み合わせ

インデクス型プラグインを使用して関数を実行する方法

インデクス型プラグインを使用しないで関数を実行する方法

HiRDBが選択した検索方式

インデクス型プラグインを使用する検索

インデクス型プラグインを使用しない検索

提供されている

提供されている

○

○

提供されている※

提供されていない※

○

×

提供されていない

提供されている

−

○

（凡例）

○：実行できます。

×：実行時にエラーとなります。

−：該当しません。

注※

インデクス型プラグイン専用関数です。例えば，HiRDB Text Search Plug-inの場合は，contains及びcontains_with_scoreを指します。

(2)　インデクス型プラグイン専用関数の実行方法に関する制限

インデクス型プラグイン専用関数を使用する場合には，次の制限があります。

第1引数には，外への参照列を除く実表の列指定だけ指定できます。

第1引数を除く引数に，次の値式を含む引数を指定できません。

外への参照列を除く列指定

列に対するコンポネント指定

インデクス型プラグイン専用関数は，WHERE句，又はON 探索条件に指定できます。

外結合を指定した問合せ指定のWHERE句に，インデクス型プラグイン専用関数を指定する場合，第1引数には外結合の内表になる列は指定できません。例を次に示します。

外結合を指定した結合表のON 探索条件にインデクス型プラグイン専用関数を指定する場合，第1引数に次の列は指定できません。

外表の列

内表が外結合を含む結合表の場合，内表に含まれる外結合の内表の列

FROM句に2表以上の指定がある場合，インデクス型プラグイン専用関数の第1引数の列と異なる表の列を，ORのオペランドの探索条件中には指定できません。ただし，WHERE句，及びON 探索条件中に論理演算子NOTを含む場合は，ド・モルガンの定理※によって論理演算子NOTを排除した結果，上記の条件を満たさないときは指定できます。また，UNIONを使用すると，上記の条件を満たしていても実行できる場合があります。例を次に示します。

（例）

    SELECT T1.C1,T2.C2 FROM T1,T2
      WHERE T1.C1=10 AND ( (CONTAINS(T2.ADT,'ABC') IS TRUE)
                        OR (CONTAINS(T2.ADT,'DEF') IS TRUE) )

このSQLを，UNIONを使用して表すと次のようになります。

    （ SELECT T1.C1,T2.C2 FROM T1,T2
       WHERE T1.C1=10 AND (CONTAINS(T1.ADT,'ABC') IS TRUE)
     UNION ALL
       SELECT T1.C1,T2.C2 FROM T1,T2
           WHERE T1.C1=10 AND (CONTAINS(T2.ADT,'DEF') IS TRUE)）
     EXCEPT ALL
       SELECT T1.C1,T2.C2 FROM T1,T2
           WHERE T1.C1=10 AND (CONTAINS(T2.ADT,'DEF') IS TRUE)
                 AND (CONTAINS(T1.ADT,'ABC') IS TRUE)

注※

次のようなSQL文があるとします。

    SELECT T1.C1,T2.C2 FROM T1,T2
      WHERE NOT(CONTAINS(T1.ADT, ... ) IS NOT TRUE AND T1.C1=10)
      AND T1.C1=T2.C1

これを，ド・モルガンの定理で論理演算子NOTを排除すると，次のようになります。

    SELECT T1.C1,T2.C2 FROM T1,T2
      WHERE (CONTAINS(T1.ADT, ... ) IS TRUE OR T1.C1<>10)
      AND T1.C1=T2.C1

CASE式中，及びCAST指定中には指定できません。

インデクス型プラグイン専用関数に対して，IS FALSE，IS UNKNOWN，及び否定（NOT）が含まれる述語は指定できません。

これらの制限に関する例を次に示します。

（例1）

WHERE句にインデクス型プラグイン専用の受渡し値送信関数の指定がある場合，一つの問合せ指定中にその受渡し値送信関数と同一表の列を第1引数に持つインデクス型プラグイン専用関数を指定できない例を次に示します。

  SELECT C1,C2,score(SENTENCES) FROM T1
     WHERE contains(SENTENCES, … ) IS TRUE
         AND contains_with_score(SENTENCES, … ) IS TRUE

（例2）

表T1，T2を外結合させて，WHERE句にインデクス型プラグイン専用関数を指定して検索する例を次に示します。

  SELECT T1.C1,T2.C2 FROM T1 LEFT OUTER JOIN T2
     ON T1.C1=T2.C1 WHERE contains(T1.C3, … ) IS TRUE

5.2.3　受渡し値を格納したリストについての注意事項

(1)　リストへの受渡し値の格納

段階的に対象レコードを絞り込む場合（絞込み検索をする場合），リストへ受渡し値を格納しておくことで，受渡し値受信関数の結果を高速に取得できます。

ASSIGN LIST文を使用して実表からリストを作成する場合の探索条件に，リストに受渡し値を格納できる受渡し値送信関数を指定することで，リストに受渡し値を格納できます（ただし，ASSIGN LIST文には，リストに受渡し値を格納できる受渡し値送信関数は二つ以上指定できません）。

プラグイン提供関数が，リストに受渡し値を格納できるかどうかについては，各種プラグインマニュアルを参照してください。

また，ASSIGN LIST文を使用して，受渡し値を格納したリストから，新たなリストに受渡し値を格納することもできます。

(2)　リストからの受渡し値の取得

リストを介した検索のカーソル指定の選択式に，リストから受渡し値を取得できる受渡し値受信関数（リスト用受渡し値受信関数）を指定することで，受渡し値送信関数を指定しないで，リストに格納された受渡し値を取得できます。

プラグイン提供関数が，リストから受渡し値を取得できるかどうかについては，各種プラグインマニュアルを参照してください。

リストを介した検索のカーソル指定の選択式に，リストから受渡し値を取得できる受渡し値受信関数を指定した場合，HiRDBはリストに受渡し値を格納した受渡し値送信関数の種別を意識しないで受渡し値を取得します。そのため，必ずリストを作成したときに指定した，受渡し値送信関数に対応する受渡し値受信関数を指定してください。

(3)　リスト間の集合演算実行方法の種類

リスト間の集合演算をする場合，リスト作成時に探索条件に指定した受渡し値送信関数によって，集合演算実行方法が変わります。

「リスト名1 ｛AND｜OR｜AND NOT｜ANDNOT｝ リスト名2」の集合演算結果の受渡し値を次の表に示します。

表5‒4　集合演算結果の受渡し値

リスト名1作成時の受渡し値送信関数※１

リスト名2作成時の受渡し値送信関数※１

リストに受渡し値を格納できる場合

そのほかの場合

「絞込み対象受渡し値使用」指定あり

集合演算方法の指定なし

リストに受渡し値を格納できる場合

「絞込み対象受渡し値使用」指定あり

×

×

リスト名1の受渡し値※２

集合演算方法の指定なし

×

×

×

そのほかの場合

×

×

なし

（凡例）

×：実行できません。

注※1

集合演算方法の指定のある受渡し値送信関数については，各種プラグインマニュアルを参照してください。

注※2

OR演算結果で受渡し値がない場合は，ナル値となります。

6　クライアントの環境設定

この章では，インストールやUAPの作成と実行に必要な環境定義の方法などについて説明します。

6.1　HiRDBクライアントの種類

HiRDBクライアントには次の2種類のプログラムプロダクトがあります。この二つのプログラムプロダクトを，HiRDBクライアントといいます。

HiRDB/Developer's Kit

HiRDB/Run Time

HiRDBクライアントの種類によって，UAPの作成から実行までの作業のうち，実行できる作業が異なります。UAPの作成から実行までの作業の流れを次に示します。

注※1

詳細は，「プリプロセス」を参照してください。

注※2

詳細は，「コンパイルとリンケージ」を参照してください。

HiRDBクライアントの種類によって実行できる作業は次のとおりです。

HiRDB/Developer's Kit

1〜4の作業ができます。

HiRDB/Run Time

4の作業ができます。HiRDBクライアントの提供物はHiRDBサーバにも含まれています。したがって，1〜3はHiRDBサーバの機能で実行してください。

注意事項：

UAPを開発するHiRDB/Developer's Kitと，UAPを実行するHiRDB/Developer's Kitのプラットフォームは，同じにしてください。

6.2　HiRDBクライアントの環境設定手順

クライアントの環境設定手順を次に示します。

注※1

HiRDBクライアントのインストールについては「HiRDBクライアントのインストール及びアンインストール」を，自動的に作成されるディレクトリとファイルについては「HiRDBクライアントのディレクトリ及びファイル構成」を参照してください。

注※2

詳細は，「hostsファイルの設定」を参照してください。

注※3

詳細は，「クライアント環境定義（環境変数の設定）」を参照してください。

6.3　HiRDBクライアントのインストール及びアンインストール

インストール方法は，HiRDB/Developer's Kit，HiRDB/Run Timeとともに同じです。

なお，HiRDBクライアントの提供物はHiRDBサーバに含まれています。このため，HiRDBサーバと同一のサーバマシンでクライアントを運用する場合，サーバマシンには，HiRDBクライアントをインストールする必要はありません。HiRDBサーバと同一のサーバマシンでクライアントを運用する運用形態については，図「HiRDBサーバと同一のサーバマシンでクライアントを実行する運用形態」を参照してください。

6.3.1　UNIXクライアントでのインストール

日立PPインストーラを起動してインストールします。

6.3.2　WindowsクライアントでのGUIによるインストール

Windowsクライアントでインストールする場合，必ずWindows環境で実行してください。

インストール手順：

インストールの手順を次に示します。なお，環境定義ファイル（HIRDB.INI）は，システムディレクトリに格納されます。

インストーラの起動

統合CD-ROM中のhcd_inst.exeを実行して，日立総合インストーラを起動してください。

「日立総合インストーラ」画面で次のどちらかを選択して，［インストール実行］ボタンをクリックしてください。

HiRDB/Run Timeの場合は［HiRDB/Run Time］

HiRDB/Developer's Kitの場合は［HiRDB/Developer's Kit］

選択したプログラムプロダクトのセットアッププログラムが起動します。

ユーザ情報の登録

「ユーザ情報」画面が表示されます。

ユーザ名，及び会社名を入力して，[次へ]ボタンをクリックしてください。

インストールの開始

「インストール先の選択」画面が表示されます。

「インストール先のフォルダ」にはHiRDBクライアントのインストール先を指定してください。省略した場合は，Windowsがインストールされているドライブが仮定されます。インストール先を指定したら，[次へ]ボタンをクリックしてください。

セットアップタイプの選択

「セットアップタイプ」画面が表示されます。

セットアップタイプによって，インストールする機能を変更できます。

すべて

すべての機能をインストールします。

カスタム

選択した機能をインストールします。

「すべて」を選択した場合にインストールする機能を次の表に示します。

表6‒1　インストールする機能

項番

機能

製品種別

1

クライアントライブラリ

RT，DK

2

SQLプリプロセサ

DK

3

ODBCドライバ

RT，DK

4

HiRDB OLE DBプロバイダ

RT，DK

5

HiRDBデータプロバイダ for .NET Framework

RT，DK

6

JDBCドライバ

RT，DK

7

SQLJ

RT，DK

8

XML変換ライブラリ

RT，DK

9

コマンド・ユティリティ

RT，DK

10

サンプルUAP

DK

（凡例）

RT：HiRDB/Run Time

DK：HiRDB/Developer's Kit

セットアップタイプを選択したら，[次へ]ボタンをクリックしてください。

機能の選択

「カスタム」を選択した場合，「機能の選択」画面が表示されます。

インストールする機能を指定して，[次へ]ボタンをクリックしてください。

ファイルコピーの開始

「ファイルコピーの開始」画面が表示されます。

現在の設定を確認して，[次へ]ボタンをクリックしてください。

インストールの実行状況の確認

インストールの実行状況が表示されます。

HiRDBクライアントのインストール先に必要な容量分の空きがないと，インストールの実行状況の表示中に，「データ転送プロセスでエラーが発生しました」というメッセージが表示され，インストールを中止します。この場合，インストール先の空き容量を確保し，再度インストールを実行してください。

上書きインストール時に，インストール先のファイルが使用中のため更新できなかった場合，「使用中のため更新できないファイルを検出しました。更新を完了するには，コンピュータを再起動する必要があります。」というメッセージが表示されます。この場合，インストールを継続し，次回Windows起動時にファイルが更新されます。

インストールの完了

インストールが完了すると，「セットアップの完了」画面が表示されます。

注意事項

環境定義ファイルの1行の最大長は，512バイトです。512バイトを超えて定義すると，その定義は無効になります。

Administrators権限又はPower Users権限があるユーザがインストールしてください。Administrators権限又はPower Users権限がないユーザがインストールすると，システム環境変数が更新されません。

6.3.3　UNIXクライアントでのアンインストール

日立PPインストーラを起動してアンインストールします。

HiRDBクライアントをアンインストールする場合は，コマンド，アプリケーションをあらかじめ停止しておいてください。これらを停止しないと，実行形式ファイルや共用ライブラリの削除に失敗し，アンインストール後にファイルが残ることがあります。この場合，残ったファイルを削除してください。

6.3.4　WindowsクライアントでのGUIによるアンインストール

アンインストールの手順を次に示します。

［スタート］−［HiRDB Client］−［HiRDB Clientのアンインストール］を選択します。［HiRDB Clientのアンインストール］が登録されていない場合は，［コントロールパネル］−［プログラムと機能］の［プログラムのアンインストールまたは変更］を表示し，一覧の中から「HiRDB」を選択します。

「選択したアプリケーション，およびすべての機能を完全に削除しますか？」というメッセージが表示されます。「はい」を選択すると，アンインストールを開始します。

アンインストールが完了すると，アンインストール完了を示すメッセージが表示されます。［完了］ボタンをクリックしてください。

注意事項：

HiRDBクライアントをアンインストールする場合は，コマンド，アプリケーションをあらかじめ停止してください。これらを停止しないと，実行形式ファイルや共用ライブラリの削除に失敗し，アンインストール後にファイルが残ることがあります。この場合，残ったファイルを削除してください。

HiRDBクライアントのバージョンダウン時は，新バージョンをアンインストールしてから，旧バージョンをインストールしてください。バージョンダウン時には，上書きインストールは実施しないでください。

HiRDBクライアントのバージョンアップ，及び修正版HiRDBクライアントのインストーラによる入れ替えには，次のどちらかの方法を適用できます。

・旧バージョンをアンインストールしないで，新バージョンを上書きインストールする。

・旧バージョンをアンインストールしてから，新バージョンをインストールする。

6.3.5　Windowsクライアントでのサイレントインストール及びアンインストール

HiRDBクライアントのサイレントインストール，サイレントアンインストール，および修正パッチのサイレントインストールについて説明します。サイレントインストール，およびサイレントアンインストールでは，実行時にダイアログが表示されません。

(1)　サイレントインストール

サイレントインストール用のコマンドを起動し，インストールします。サイレントインストールでは，すべてのクライアント機能をインストールします。

クライアント機能の一覧については，表「Windows系HiRDB製品でのクライアント機能同梱状況」を参照してください。

(a)　格納場所

この機能で使用するコマンドは，統合CD-ROM中の次のフォルダに格納されています。

_PPDIR¥形名フォルダ¥DISK1

形名フォルダは，形名を短縮した名称となります。例えば，形名P-2662-11A4の場合，「_PPDIR¥P266211A4¥DISK1」となります。

(b)　実行者

Administratorsグループの管理者権限で実行してください。

(c)　コマンドラインの形式

pdslinst.exe 〔/AUTO;オプションファイルのパス〕

/AUTO;オプションファイルのパス

サイレントインストールの設定情報を記述したオプションファイルを，259文字（バイト）以内の絶対パスで指定します。

(d)　オプションファイルの形式

オプションファイルには，次の形式でオプションを記載します。

オプション名=指定値

最後にCR+LF形式の「改行」を入れてください。また，オプションファイルの文字コードはMS932です。

オプションファイルの記述例

instdir=C:¥Program Files¥HITACHI¥HiRDB

指定できるオプションを次の表に示します。

表6‒2　オプションファイルに指定できるオプション

オプション

指定値

説明

instdir

インストール先フォルダ

インストール先フォルダを，200文字（バイト）以内の絶対パスで指定してください。

指定値とインストール先の対応を次に示します。

指定値とインストール先

【新規インストール】

省略時はデフォルトのインストール先※へインストールします。

【上書きインストール】

省略時はインストール済みのパスへインストールします。

指定を省略しないで，インストール済みのパス以外を指定した場合にはエラーが発生します（新規インストール時と異なるパス文字列表現をした場合にもエラーが発生します）。

注※

デフォルトのインストール先です。デフォルトのインストール先を次の表に示します。

表6‒3　デフォルトのインストール先

OS

HiRDBクライアント

Windows(x86)

Windows(x64)

Windows(x86)

C:¥Program Files¥HITACHI¥HiRDB

インストール不可

Windows(x64)

C:¥Program Files (x86)¥HITACHI¥HiRDB

C:¥Program Files¥HITACHI¥HiRDB

(e)　戻り値

0：正常終了

2：正常終了（Windowsの再起動要）

-1：インストール失敗

インストールが失敗した場合のエラー情報の詳細は，インストール実行結果情報ファイルを参照してください。インストール実行結果情報ファイルが出力されていない場合は，環境変数ALLUSERSPROFILE及び環境変数TEMPに書き込みできるフォルダを設定した上で再インストールしてください。インストール実行結果情報ファイルが参照できない場合は保守員に連絡してください。

(f)　インストール実行結果情報ファイル

インストールコマンドを実行すると，%ALLUSERSPROFILE%¥HITACHI¥HiRDB¥pdslinst.logにインストール実行結果情報ファイルを出力します。出力できない場合は%TEMP%¥pdslinst.logに出力します。

インストール実行結果情報ファイルには，次の表に示す情報を出力します。

表6‒4　インストール実行結果情報ファイルの内容

出力行

情報

内容

1行目

コマンドライン

実行されたコマンドライン

（コマンドは絶対パスで出力）

2行目

終了ステータス

インストール実行結果を示す2桁の16進数

3行目

終了ステータスに応じて次のどれかを出力

終了ステータス=00,02

アンインストールコマンド

サイレントアンインストールを実行する場合に使用するコマンドライン

終了ステータス=B6

詳細コード

InstallShieldの戻り値

終了ステータス=BA

詳細情報

Windows API：エラーコード

上記以外

なし

なし

出力例を次に示します。

なお，出力例の↓は1行の末尾を示します。実際に出力するファイルでは表示されません。

インストール実行結果情報ファイルの出力例

正常終了の場合

C:¥tmp¥DISK1¥pdslinst.exe /AUTO;C:¥tmp¥test.ini↓
00↓
"C:¥Program Files (x86)¥InstallShield Installation Information¥{1CD2D8D0-BFC9-4A6D-B5A0-ECA663C9C9E5}¥setup.exe" -runfromtemp -l0x0411 -uninst /a /s /f1"C:¥Program Files (x86)¥InstallShield Installation Information¥{1CD2D8D0-BFC9-4A6D-B5A0-ECA663C9C9E5}¥setup.iss"↓

InstallShieldでエラーが発生した場合

C:¥tmp¥DISK1¥pdslinst.exe /AUTO;C:¥tmp¥test.ini↓
B6↓
-5001↓

オプション不正の場合

C:¥tmp¥DISK1¥pdslinst.exe /AUTO;C:¥tmp¥test.ini↓
88↓

Windows APIでエラーが発生した場合

C:¥tmp¥DISK1¥pdslinst.exe “/AUTO;C:¥tmp¥test.ini” ↓
BA↓
CreateProcess : 5↓

インストール実行結果情報ファイルの終了ステータスの意味を次の表に示します。対処方法でインストールできない場合は，保守員に連絡してください。

表6‒5　インストール実行結果情報ファイルの終了ステータスの意味

終了ステータス

区分

内容

対処方法

00

正常終了

インストールを正常に終了しました。

なし。

02

インストールを正常に終了しましたが，使用中のファイルがあるため，Windowsの再起動が必要です。

なし。

83

異常終了

レジストリアクセス中にエラーが発生しました。

権限不足のため，エラーが発生しています。Administrators権限を持っているユーザで再インストールしてください。

85

ディスクアクセス中にエラーが発生しました，又はインストール先ディスクの空き容量が不足しています。

ディスクアクセス時のメモリ不足を回避するため，起動中のプログラムやサービスを停止し，次のフォルダがあるどれかのドライブの不要ファイルを削除してから，Administrators権限を持っているユーザで再インストールしてください。

インストール先フォルダ

環境変数TEMPのフォルダ

環境変数WINDIRのフォルダ

88

コマンドライン又はオプションファイルの内容に誤りがあります。

コマンドライン又はオプションファイルの内容を修正し，再インストールしてください。

92

Windows(x64)版のHiRDBクライアントを，Windows(x86)のOSにインストールしました。

Windows(x86)版のHiRDBクライアントをインストールするか，又はWindows(x64)のOSにインストールしてください。

B1

HiRDB ODBCドライバのインストールでエラーが発生しました。

保守員に連絡してください。

B4

Windows Installerでエラーが発生しました。

コントロールパネルからWindows Installerのサービスが開始できない場合は，Windows Installerを修復（Windows Installerを再インストールするなど）して再インストールしてください。

B5

上書きインストールで，既存のインストール先と異なる絶対パスがインストール先に指定されました。

コマンドライン引数を削除して再インストールしてください。

B6

InstallShieldでエラーが発生しました。

インストール実行結果情報ファイルの詳細コードを確認し，保守員に連絡してください。

B7

オプションファイルの読み込み時にエラーが発生しました。

オプションファイルへの参照権限があるユーザで，/AUTOオプションにオプションファイルの絶対パスを正しく指定して，再インストールしてください。

B8

システム環境変数への登録時にエラーが発生しました。

システム環境変数に次のサイズのパスが追加できるよう，不要なパスを削除して，再インストールしてください。

<PATH>

インストール先の絶対パス + 5

<CLASSPATH>

HiRDB/Developer's Kitの場合

インストール先の絶対パス×3 + 49

HiRDB/Run Timeの場合

インストール先の絶対パス×4 + 72

B9

メモリ不足が発生しました。

起動中のプログラムやサービスを停止し，Administrators権限を持っているユーザで再インストールしてください。

BA

Windows APIでエラーが発生しました。

保守員に連絡してください。

BB

.NET Framework4以降が未インストールです。

.NET Framework4以降をインストールして，再インストールしてください。

80

上記以外のエラーが発生しました。

保守員に連絡してください。

(g)　InstallShieldのログファイル

インストールコマンドを実行すると，%ALLUSERSPROFILE%¥HITACHI¥HiRDB¥pdslinst_setup.logにInstallShieldのログファイルを出力します。出力できない場合は%TEMP%¥pdslinst_setup.logに出力します。

(2)　サイレントアンインストール

サイレントアンインストール用のコマンドを起動し，アンインストールします。

(a)　実行者

Administratorsグループの管理者権限で実行してください。

(b)　コマンドラインの形式

インストール実行結果情報ファイルで出力されているアンインストールコマンド

インストール結果情報ファイルがない場合には，スタートメニューに登録されたショートカット「HiRDB Clientのアンインストール」のコマンドのプロパティを参照し，最後に次のオプションを追加してください。インストール結果情報ファイルで出力されるアンインストールコマンドと同等の形式になります。

/a /s /f1"「HiRDB Clientのアンインストール」のsetup.exeコマンドのあるフォルダ¥setup.iss"

サイレントアンインストールをするためのコマンドラインの例を，次に示します。

「HiRDB Clientのアンインストール」のコマンドのプロパティ

"C:¥Program Files (x86)¥InstallShield Installation Information¥{1CD2D8D0-BFC9-4A6D-B5A0-ECA663C9C9E5}¥setup.exe" -runfromtemp -l0x0411  -uninst

サイレントアンインストールをするためのコマンドライン

"C:¥Program Files (x86)¥InstallShield Installation Information¥{1CD2D8D0-BFC9-4A6D-B5A0-ECA663C9C9E5}¥setup.exe" -runfromtemp -l0x0411  -uninst /a /s /f1" C:¥Program Files (x86)¥InstallShield Installation Information¥{1CD2D8D0-BFC9-4A6D-B5A0-ECA663C9C9E5}¥setup.iss"

(c)　アンインストールエラー情報ファイル

アンインストール時にエラーが発生した場合，%ALLUSERSPROFILE%¥HITACHI¥HiRDB¥unsetup.errにアンインストールエラー情報ファイルを出力します。出力できない場合は%TEMP%¥unsetup.errに出力します。

アンインストールエラー情報ファイルには，発生したエラーを示すエラーコードを出力します。出力例を次に示します。

アンインストールエラー情報ファイルの出力例

80

エラーコードの意味について，次の表に示します。

対処方法でアンインストールできない場合は，保守員に連絡してください。

表6‒6　エラーコードの意味

エラーコード

内容

対処方法

80

Windows Installerでエラーが発生しました。

コントロールパネルからWindows Installerのサービスが開始できることを確認し，開始できない場合は，Windows Installerを修復（Windows Installerを再インストールするなど）し，再アンインストールしてください。

81

メモリ不足が発生しました。

起動中のプログラムやサービスを停止し，再アンインストールしてください。

82

レジストリアクセス中にエラーが発生しました。

Administratorグループの管理者権限でアンインストールしていない場合，Administratorグループの管理者権限で再アンインストールしてください。

(3)　修正パッチのサイレントインストール

修正パッチ適用時のサイレントインストールについて説明します。

なお，修正パッチだけをサイレントアンインストールすることはできません。

(a)　実行者

Administratorsグループの管理者権限で実行してください。

(b)　コマンドラインの形式

cmd /c "setup.exe /s"

修正パッチを任意のフォルダへ展開し，展開したフォルダに移動した後，コマンドを実行してください。

(c)　戻り値

戻り値について次の表に示します。

対処方法でアップデートできない場合は，保守員に連絡してください。

表6‒7　修正パッチコマンドの戻り値

戻り値

内容

対処方法

0

正常に終了しました。

なし。

1

正常に終了しましたが，使用中のファイルがあるため，Windowsの再起動が必要です。

なし。

132

メモリ不足が発生しました。

起動中のプログラムやサービスを停止し，再アップデートしてください。

134

ディスクの空き容量が不足しています。

次のフォルダがあるどれかのドライブの不要ファイルを削除してから，Administrators権限を持っているユーザで再アップデートしてください。

インストール先フォルダ

環境変数WINDIRのフォルダ

135

ログファイルのオープン時にエラーが発生しました。

インストール先フォルダに書き込み権限を与えた上で，再アップデートしてください。

144

ファイル及びディレクトリ操作で，エラーが発生しました。

ディスクアクセス時のメモリ不足を回避するため，起動中のプログラムやサービスを停止し，Administrators権限を持っているユーザで再アップデートしてください。

159

HiRDBクライアントが未インストールであるか，又は修正パッチ適用対象のバージョンが不正です。

HiRDBクライアントがインストール済みであることを確認してください。又は，適用する修正パッチのバージョン番号，リビジョン番号，修正版コード（VV-RR-SSのSS）が正しいことを確認し，再アップデートしてください。

上記以外

その他エラーが発生しました。

保守員に連絡してください。

(d)　バージョン情報の確認

パッチ適用に成功した場合は，修正パッチのコマンド（setup.exe）を格納したディレクトリ内のRELEASE.TXTを参照し，「◆パッチユーティリティ」の記載内容に従ってバージョン情報を確認してください。

6.4　HiRDBクライアントのディレクトリ及びファイル構成

HiRDBクライアントをインストールすると，ディレクトリ，及びファイルが自動的に作成されます。ここでは，それらのディレクトリ，及びファイル構成を説明します。

6.4.1　UNIXクライアントのディレクトリ及びファイル構成

インストール時に自動的に作成されるファイルとディレクトリを次の表に示します。

表「HiRDB/Developer's Kitの場合のファイルとディレクトリ（UNIXクライアント）」

表「HiRDB/Run Timeの場合のファイルとディレクトリ（UNIXクライアント）」

表「HiRDB/Developer's Kitの場合のファイルとディレクトリ（IPFマシンのUNIXクライアント）」

表「HiRDB/Run Timeの場合のファイルとディレクトリ（IPFマシンのUNIXクライアント）」

表「HiRDB/Developer's Kitの場合のファイルとディレクトリ（Linux(EM64T)）」

表「HiRDB/Run Timeの場合のファイルとディレクトリ（Linux(EM64T)）」

表6‒8　HiRDB/Developer's Kitの場合のファイルとディレクトリ（UNIXクライアント）

名称

ディレクトリ※１

ファイル名

プラットフォーム

AIX

(32)

AIX

(64)

Linux

(32)

ヘッダファイル

/HiRDB/include

SQLCA.CBL

○

○

○

SQLCA64.CBL

×

○

×

SQLDA.CBL

○

○

○

SQLDA64.CBL

×

○

×

SQLIOA.CBL

○

○

○

SQLIOA64.CBL

×

○

×

pdbtypes.h

○

○

○

pdberrno.h

○

○

○

pdbmisc.h

○

○

○

pdbmiscm.h

○

○

○

pdbsqlda.h

○

○

○

pdbsqlcsna.h

○

○

○

pddbhash.h

○

○

○

pdauxcnv.h

○

○

○

SQLCAM.cbl

○

○

○

SQLDAM.cbl

○

○

○

SQLIOAM.cbl

○

○

○

SQLIOAMTH.CBL

○

○

○

SQLIOAMTH64.CBL

×

○

×

SQLCAMTH.CBL

○

○

○

SQLCAMTH64.CBL

×

○

×

SQLCSNA.CBL

○

○

○

SQLCSNA64.CBL

×

○

×

SQLIOA32.CBL

○

○

○

SQLIOALP.CBL

×

○

×

SQLCNSTS.CBL

○

○

○

SQLCNSTD.CBL

○

○

○

SQLMCNCT.CBL

○

○

○

アーカイブファイル

/HiRDB/client/lib

libclt.a

○

○

○

libclt64.a

×

○

×

libcltxa.a

○

○

○

libcltya.a

○

○

○

libcltk.a

○

○

○

libcltk64.a

×

○

×

libclts.a

○

○

○

共用ライブラリ※２

/HiRDB/client/lib

libzclt.sl

○

○

○

libzclt64.sl

×

○

×

libzcltx.sl

○

○

○

libzclty.sl

○

○

○

libzcltk.sl

○

○

○

libzcltk64.sl

×

○

×

libsqlauxf.sl

○

○

○

libsqlauxf64.sl

×

○

×

libzcltxk.sl

○

○

△

libzcltyk.sl

○

○

△

libzclts.sl

○

○

○

libzcltxs.sl

○

○

○

libzcltys.sl

○

○

○

libzclty64.sl

×

○

×

libzcltys64.sl

×

○

×

libzclt6k.sl

○

○

×

libzclt6k64.sl

×

○

×

libzclt6yk.sl

○

○

×

libzclt6yk64.sl

×

○

×

libzclt6ys.sl

○

○

×

libzclt6ys64.sl

×

○

×

JDBCドライバ

/HiRDB/client/lib

libjjdbc.sl

○

○

○

pdjdbc.jar

○

○

○

pdjdbc2.jar

○

○

○

pdjdbc4.jar

○

○

○

ODBCドライバ

/HiRDB/client/lib

libodbcdrv.sl

×

×

○

libodbcdrv64.sl

×

×

×

コマンド・ユティリティ

/HiRDB/client/utl

pdcpp

○

○

○

pdocc

○

○

○

pdcbl

○

○

○

pdocb

○

○

○

pdprep

○

○

○

pdtrcmgr

○

○

○

/HiRDB/bin

pddef

○

○

○

SQLJ

/HiRDB/client/lib

pdruntime.jar

○

×

○

pdnativert.jar

○

×

○

pdsqlj.jar

○

×

○

libpdparse.sl

○

×

○

libpdsqljn.sl

○

×

○

/HiRDB/client/utl

pdjava

○

×

○

メッセージオブジェクトファイル

/HiRDB/lib

msgtxt

○

○

○

構文解析ライブラリ※２

/HiRDB/lib/sjis

libasqap.sl

○

○

○

/HiRDB/lib/chinese

○

○

○

/HiRDB/lib/lang-c

○

○

○

/HiRDB/lib/ujis

○

○

○

/HiRDB/lib/utf-8

○

○

○

/HiRDB/lib/utf-8_ivs

○

○

○

/HiRDB/lib/chinese-gb18030

○

○

○

サンプルソース

/HiRDB/client/sampleap/uap

CREATE.ec

○

○

○

SAMPLE1.ec

○

○

○

SAMPLE2.ec

○

○

○

SAMPLE3.ec

○

○

○

sample1.ecb

○

○

○

sample.mk

○

○

○

inputf1

○

○

○

inputf2

○

○

○

XML変換コマンド※３

/HiRDB/client/utl

phdxmlcnv

○

○

○

XML変換ライブラリ※３

/HiRDB/client/lib

XMLConverter.jar

○

○

○

（凡例）

AIX(32)：32ビットモードのAIX

AIX(64)：64ビットモードのAIX

Linux(32)：32ビットモードのLinux

○：ファイルは作成されます。

△：ファイルは作成されますが，そのファイルを使用した機能は動作しません。

×：ファイルは作成されません。

注※1

下線で示す部分は，HiRDBのインストールディレクトリを示します。

注※2

共用ライブラリ，構文解析ライブラリのサフィックスは，プラットフォームによって異なります。Linuxの場合は「.so」，AIXの場合は「.a」となります。

注※3

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

表6‒9　HiRDB/Run Timeの場合のファイルとディレクトリ（UNIXクライアント）

名称

ディレクトリ※１

ファイル名

プラットフォーム

AIX

(32)

AIX

(64)

Linux

(32)

アーカイブファイル

/HiRDB/client/lib

libclt.a

○

○

○

libclt64.a

×

○

×

libcltxa.a

○

○

○

libcltya.a

○

○

○

libcltk.a

○

○

○

libcltk64.a

×

○

×

libclts.a

○

○

○

共用ライブラリ※２

/HiRDB/client/lib

libzclt.sl

○

○

○

libzclt64.sl

×

○

×

libzcltx.sl

○

○

○

libzclty.sl

○

○

○

libzcltk.sl

○

○

○

libzcltk64.sl

×

○

×

libsqlauxf.sl

○

○

○

libsqlauxf64.sl

×

○

×

libzcltxk.sl

○

○

△

libzcltyk.sl

○

○

△

libzclts.sl

○

○

○

libzcltxs.sl

○

○

○

libzcltys.sl

○

○

○

libzclty64.sl

×

○

×

libzcltys64.sl

×

○

×

libzclt6k.sl

○

○

×

libzclt6k64.sl

×

○

×

libzclt6yk.sl

○

○

×

libzclt6yk64.sl

×

○

×

libzclt6ys.sl

○

○

×

libzclt6ys64.sl

×

○

×

JDBCドライバ

/HiRDB/client/lib

libjjdbc.sl

○

○

○

pdjdbc.jar

○

○

○

pdjdbc2.jar

○

○

○

pdjdbc4.jar

○

○

○

ODBCドライバ

/HiRDB/client/lib

libodbcdrv.sl

×

×

○

libodbcdrv64.sl

×

×

×

SQLJランタイム

/HiRDB/client/lib

pdruntime.jar

○

×

○

pdnativert.jar

○

×

○

libpdsqljn.sl

○

×

○

コマンド・ユティリティ

/HiRDB/client/utl

pdtrcmgr

○

○

○

XML変換コマンド※３

/HiRDB/client/utl

phdxmlcnv

○

○

○

XML変換ライブラリ※３

/HiRDB/client/lib

XMLConverter.jar

○

○

○

（凡例）

AIX(32)：32ビットモードのAIX

AIX(64)：64ビットモードのAIX

Linux(32)：32ビットモードのLinux

○：ファイルは作成されます。

△：ファイルは作成されますが，そのファイルを使用した機能は動作しません。

×：ファイルは作成されません。

注※1

下線で示す部分は，HiRDBのインストールディレクトリを示します。

注※2

共用ライブラリのサフィックスは，プラットフォームによって異なります。Linuxの場合は「.so」，AIXの場合は「.a」となります。

注※3

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

表6‒10　HiRDB/Developer's Kitの場合のファイルとディレクトリ（IPFマシンのUNIXクライアント）

名称

ディレクトリ

ファイル名

プラットフォーム

HP-UX

ヘッダファイル

/HiRDB/include

SQLCA.CBL

○

SQLCA64.CBL

○

SQLDA.CBL

○

SQLDA64.CBL

○

SQLIOA.CBL

○

SQLIOA64.CBL

○

pdbtypes.h

○

pdberrno.h

○

pdbmisc.h

○

pdbmiscm.h

○

pdbsqlda.h

○

pdbsqlcsna.h

○

pddbhash.h

○

pdauxcnv.h

○

SQLCAM.cbl

○

SQLDAM.cbl

○

SQLIOAM.cbl

○

SQLIOAMTH.CBL

○

SQLIOAMTH64.CBL

○

SQLCAMTH.CBL

○

SQLCAMTH64.CBL

○

SQLCSNA.CBL

○

SQLCSNA64.CBL

○

SQLIOA32.CBL

○

SQLIOALP.CBL

○

SQLCNSTS.CBL

○

SQLCNSTD.CBL

○

SQLMCNCT.CBL

○

共用ライブラリ

/HiRDB/client/lib

libzclt.so

○

libzclt64.so

○

libzcltx.so

○

libzcltx64.so

○

libzclty.so

○

libzclty64.so

○

libzcltk.so

○

libzcltk64.so

○

libsqlauxf.so

○

libsqlauxf64.so

○

libzcltxk.so

△

libzcltxk64.so

△

libzcltyk.so

△

libzcltyk64.so

○

libzclts.so

○

libzclts64.so

○

libzcltxs.so

○

libzcltxs64.so

○

libzcltys.so

○

libzcltys64.so

○

JDBCドライバ

/HiRDB/client/lib

libjjdbc.so

○

libjjdbc32.so

○

pdjdbc.jar

○

pdjdbc2.jar

○

pdjdbc32.jar

○

pdjdbc4.jar

○

ODBCドライバ

/HiRDB/client/lib

libodbcdrv.so

×

libodbcdrv64.so

○

コマンド・ユティリティ

/HiRDB/client/utl

pdcpp

○

pdocc

○

pdcbl

○

pdocb

○

pdprep

○

pdtrcmgr

○

/HiRDB/bin

pddef

○

SQLJ

/HiRDB/client/lib

pdruntime.jar

○

pdruntime32.jar

○

pdnativert.jar

○

pdnativert32.jar

○

pdsqlj.jar

○

pdsqlj32.jar

○

libpdsqljn.so

○

libpdsqljn32.so

○

libpdparse.so

○

/HiRDB/client/utl

pdjava

○

メッセージオブジェクトファイル

/HiRDB/lib

msgtxt

○

構文解析ライブラリ

/HiRDB/lib/sjis

libasqap.so

○

/HiRDB/lib/chinese

○

/HiRDB/lib/lang-c

○

/HiRDB/lib/ujis

○

/HiRDB/lib/utf-8

○

/HiRDB/lib/utf-8_ivs

○

/HiRDB/lib/chinese-gb18030

○

サンプルソース

/HiRDB/client/sampleap/uap

CREATE.ec

○

SAMPLE1.ec

○

SAMPLE2.ec

○

SAMPLE3.ec

○

Sample1.ecb

○

Sample.mk

○

inputf1

○

inputf2

○

XML変換コマンド※

/HiRDB/client/utl

phdxmlcnv

○

XML変換ライブラリ※

/HiRDB/client/lib

XMLConverter.jar

○

（凡例）

○：ファイルは作成されます。

△：ファイルは作成されますが，そのファイルを使用した機能は動作しません。

×：ファイルは作成されません。

注

下線で示す部分は，HiRDBのインストールディレクトリを示します。

注※

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

表6‒11　HiRDB/Run Timeの場合のファイルとディレクトリ（IPFマシンのUNIXクライアント）

名称

ディレクトリ

ファイル名

プラットフォーム

HP-UX

共用ライブラリ

/HiRDB/client/lib

libzclt.so

○

libzclt64.so

○

libzcltx.so

○

libzcltx64.so

○

libzclty.so

○

libzclty64.so

○

libzcltk.so

○

libzcltk64.so

○

libsqlauxf.so

○

libsqlauxf64.so

○

libzcltxk.so

△

libzcltxk64.so

△

libzcltyk.so

△

libzcltyk64.so

○

libzclts.so

○

libzclts64.so

○

libzcltxs.so

○

libzcltxs64.so

○

libzcltys.so

○

libzcltys64.so

○

JDBCドライバ

/HiRDB/client/lib

libjjdbc.so

○

libjjdbc32.so

○

pdjdbc.jar

○

pdjdbc2.jar

○

pdjdbc32.jar

○

pdjdbc4.jar

○

ODBCドライバ

/HiRDB/client/lib

libodbcdrv.so

×

libodbcdrv64.so

○

SQLJランタイム

/HiRDB/client/lib

pdruntime.jar

○

pdruntime32.jar

○

pdnativert.jar

○

pdnativert32.jar

○

libpdsqljn.so

○

libpdsqljn32.so

○

コマンド・ユティリティ

/HiRDB/client/utl

pdtrcmgr

○

XML変換コマンド※

/HiRDB/client/utl

phdxmlcnv

○

XML変換ライブラリ※

/HiRDB/client/lib

XMLConverter.jar

○

（凡例）

○：ファイルは作成されます。

△：ファイルは作成されますが，そのファイルを使用した機能は動作しません。

×：ファイルは作成されません。

注

下線で示す部分は，HiRDBのインストールディレクトリを示します。

注※

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

表6‒12　HiRDB/Developer's Kitの場合のファイルとディレクトリ（Linux(EM64T)）

名称

ディレクトリ

ファイル名

ヘッダファイル

/HiRDB/include

SQLCA.CBL

SQLCA64.CBL

SQLDA.CBL

SQLDA64.CBL

SQLIOA.CBL

SQLIOA64.CBL

pdbtypes.h

pdberrno.h

pdbmisc.h

pdbmiscm.h

pdbsqlda.h

pdbsqlcsna.h

pddbhash.h

pdauxcnv.h

SQLCAM.cbl

SQLDAM.cbl

SQLIOAM.cbl

SQLIOAMTH.CBL

SQLIOAMTH64.CBL

SQLCAMTH.CBL

SQLCAMTH64.CBL

SQLCSNA.CBL

SQLCSNA64.CBL

SQLIOA32.CBL

SQLIOALP.CBL

SQLCNSTS.CBL

SQLCNSTD.CBL

SQLMCNCT.CBL

共用ライブラリ

/HiRDB/client/lib

libzclt.so

libzclt64.so

libzcltx.so

libzclty.so

libzclty64.so

libzcltys64.so

libzcltk.so

libzcltk64.so

libsqlauxf.so

libsqlauxf64.so

libzcltxk.so

libzcltyk.so

libzcltyk64.so

libzclts.so

libzcltxs.so

libzcltys.so

JDBCドライバ

/HiRDB/client/utl

libjjdbc.so

pdjdbc.jar

pdjdbc2.jar

pdjdbc4.jar

ODBCドライバ

/HiRDB/client/lib

libodbcdrv.so

libodbcdrv64.so

コマンド・ユティリティ

/HiRDB/client/utl

pdcpp

pdocc

pdcbl

pdocb

pdprep

pdtrcmgr

/HiRDB/bin

pddef

pddivinfgt

SQLJ

/HiRDB/client/lib

pdsqlj.jar

pdruntime.jar

pdnativert.jar

libpdparse.so

libpdsqljn.so

/HiRDB/client/utl

pdjava

メッセージオブジェクトファイル

/HiRDB/lib

msgtxt

構文解析ライブラリ

/HiRDB/lib/sjis

libasqap.so

/HiRDB/lib/chinese

/HiRDB/lib/lang-c

/HiRDB/lib/ujis

/HiRDB/lib/utf-8

/HiRDB/lib/utf-8_ivs

/HiRDB/lib/chinese-gb18030

サンプルソース

/HiRDB/client/sampleap/uap

CREATE.ec

SAMPLE1.ec

SAMPLE2.ec

SAMPLE3.ec

Sample1.ecb

Sample.mk

inputf1

inputf2

XML変換コマンド※

/HiRDB/client/utl

phdxmlcnv

XML変換ライブラリ※

/HiRDB/client/lib

XMLConverter.jar

注

下線で示す部分は，HiRDBのインストールディレクトリを示します。

注※

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

表6‒13　HiRDB/Run Timeの場合のファイルとディレクトリ（Linux(EM64T)）

名称

ディレクトリ

ファイル名

共用ライブラリ

/HiRDB/client/lib

libzclt.so

libzclt64.so

libzcltx.so

libzclty.so

libzclty64.so

libzcltys64.so

libzcltk.so

libzcltk64.so

libsqlauxf.so

libsqlauxf64.so

libzcltxk.so

libzcltyk.so

libzcltyk64.so

libzclts.so

libzcltxs.so

libzcltys.so

JDBCドライバ

/HiRDB/client/utl

libjjdbc.so

pdjdbc.jar

pdjdbc2.jar

pdjdbc4.jar

ODBCドライバ

/HiRDB/client/lib

libodbcdrv.so

libodbcdrv64.so

SQLJランタイム

/HiRDB/client/lib

libpdsqljn.so

pdruntime.jar

pdnativert.jar

コマンド・ユティリティ

/HiRDB/client/utl

pdtrcmgr

/HiRDB/bin

pddivinfgt

XML変換コマンド※

/HiRDB/client/utl

phdxmlcnv

XML変換ライブラリ※

/HiRDB/client/lib

XMLConverter.jar

注

下線で示す部分は，HiRDBのインストールディレクトリを示します。

注※

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

●アーカイブファイル，共用ライブラリの用途別の使用ファイル

アーカイブファイルの用途別の使用ファイルを次の表に示します。

表6‒14　アーカイブファイルの用途別の使用ファイル（UNIXクライアント）

用途

使用するファイル

通常のUAP

libclt.a

XAインタフェース接続

動的登録（シングルスレッド用）

libcltxa.a

静的登録又は動的登録（シングルスレッド用）※

libcltya.a

複数接続機能

DCEスレッド

libcltm.a

カーネルスレッド

libcltk.a

シングルスレッド

libclts.a

注※

TMに登録するスイッチ名称で，静的登録又は動的登録のどちらかに切り替えられます。

共用ライブラリの用途別の使用ファイルを次の表に示します。

表6‒15　共用ライブラリの用途別の使用ファイル（UNIXクライアント）

用途

使用するファイル

通常のUAP

libzclt.sl

XAインタフェース接続

動的登録

シングルスレッド用

libzcltx.sl

libzcltx64.sl

libzcltxs.sl（複数接続機能を使用する場合）

libzcltxs64.sl（複数接続機能を使用する場合）

マルチスレッド用

libzcltxk.sl

静的登録又は動的登録※

シングルスレッド用

libzclt6ys.sl（複数接続機能を使用する場合）

libzclt6ys64.sl（複数接続機能を使用する場合）

libzclty.sl

libzclty64.sl

libzcltys.sl（複数接続機能を使用，又はTUXEDO対応の場合）

libzcltys64.sl（複数接続機能を使用する場合）

マルチスレッド用

libzclt6yk.sl

libzclt6yk64.sl

libzcltyk.sl

libzcltyk64.sl

複数接続機能

DCEスレッド

libzcltm.sl

カーネルスレッド

libzcltk.sl

シングルスレッド

libzclts.sl

ODBC接続

libzpdodbc.sl

SQL補助関数用

libsqlauxf.sl

注

共用ライブラリのサフィックスは，プラットフォームによって異なります。Linuxの場合は「.so」，AIXの場合は「.a」となります。

注※

TMに登録するスイッチ名称で，静的登録又は動的登録のどちらかに切り替えられます。

●各トランザクションマネジャが使用するライブラリ

各トランザクションマネジャが使用するライブラリ一覧を次の表に示します。

表6‒16　各トランザクションマネジャが使用するライブラリ一覧（UNIXクライアント）

トランザクションマネジャ

ライブラリ名

バックエンドサーバ接続保持機能

OpenTP1

libzclt6ys.sl

○

libzclt6ys64.sl

○

libzcltx.sl

○

libzclty.sl

○

libzcltxs.sl

○

libzcltys.sl

○

libzcltx64.sl

○

libzclty64.sl

○

libzcltxs64.sl

○

libzcltys64.sl

○

TPBroker for C++

libzcltxk.sl

×

libzcltyk.sl

×

TUXEDO

libzcltys.sl

○

TP1/EE

libzclt6yk.sl

○

libzclt6yk64.sl

○

libzcltyk.sl

○

libzcltyk64.sl

○

（凡例）

○：バックエンドサーバ接続保持機能を使用できます。

×：バックエンドサーバ接続保持機能を使用できません。

注

共用ライブラリのサフィックスは，プラットフォームによって異なります。Linuxの場合は「.so」，AIXの場合は「.a」となります。

6.4.2　Windowsクライアントのディレクトリ及びファイル構成

インストール時に自動的に作成されるファイルとディレクトリを次の表に示します。

表「HiRDB/Developer's Kitの場合のファイルとディレクトリ（Windows (x86)版のクライアント）」

表「HiRDB/Run Timeの場合のファイルとディレクトリ（Windows (x86)版のクライアント）」

表「HiRDB/Developer's Kitの場合のファイルとディレクトリ（Windows (x64)版のクライアント）」

表「HiRDB/Run Timeの場合のファイルとディレクトリ（Windows (x64)版のクライアント）」

表「ODBCドライバの場合のファイルとディレクトリ（Windowsクライアント）」

表6‒17　HiRDB/Developer's Kitの場合のファイルとディレクトリ（Windows (x86)版のクライアント）

名　　　称

ディレクトリ

ファイル名

ヘッダファイル

xxxx¥INCLUDE

PDBTYPES.H

PDBERRNO.H

PDBMISC.H

SQLCA.CBL

SQLIOA.CBL

PDBMISCM.H

SQLDA.CBL

PDBSQLDA.H

PDBSQLCSNA.H

SQLIOAD.CBL

SQLCAD.CBL

PDDBHASH.H

PDAUXCNV.H

SQLIOAMTH.CBL

SQLCAMTH.CBL

SQLCSNA.CBL

SQLIOA32.CBL

SQLCNSTS.CBL

SQLCNSTD.CBL

SQLMCNCT.CBL

メッセージオブジェクトファイル

xxxx¥LIB

msgtxt

リンケージ用ライブラリ

xxxx¥LIB

CLTDLL.LIB

PDCLTM32.LIB

PDCLTM50.LIB

PDCLTX32.LIB

PDCLTXM.LIB

PDSQLAUXF.LIB

PDCLTXS.LIB

PDCLTXM5.LIB

PDCLTM71.LIB

PDCLTM80S.LIB

PDCLTM90.LIB

PDCLTM100.LIB

PDCLTM140.LIB

コマンド・ユティリティ

xxxx¥UTL

PDCPP.EXE

PDOCC.EXE

PDCBL.EXE

PDOCB.EXE

PDPREP.EXE

PDPREP7.EXE

PDPREP8.EXE

PDPREPA.EXE

PDPREPC.EXE

PDPREPG.EXE

PDTRCMGR.EXE

PDCLTADM.EXE

DLLファイル

xxxx¥UTL

CLTDLL.DLL

PDCLTM32.DLL

PDCLTM50.DLL

PDCLTX32.DLL

PDCLTXM.DLL

PDSQLAUXF.DLL

PDSQLAUXF71.DLL

PDOLEDB.DLL

PDCLTXS.DLL

PDCLTXM5.DLL

PDCLTM71.DLL

PDCLTM80S.DLL

PDCLTM90.DLL

PDCLTM100.DLL

PDCLTM140.DLL

JDBCドライバ

xxxx¥UTL

JJDBC.DLL

PDJDBC.JAR

PDJDBC2.JAR

PDJDBC4.JAR

SQLJ

xxxx¥UTL

PDSQLJ.JAR

PDRUNTIME.JAR

PDNATIVERT.JAR

PDPARSE.DLL

PDJAVA.EXE

PDSQLJN.DLL

HiRDBデータプロバイダ for .NET Framework

xxxx¥UTL及び¥Windows¥assembly

PDDNDP.DLL

PDDNDPCORE.DLL

PDDNDP20.DLL

PDDNDPCORE20.DLL

xxxx¥UTL及び¥Windows¥Microsoft.NET¥assembly

PDDNDP40.DLL

PDDNDPCORE40.DLL

HiRDBデータプロバイダ for .NET Framework用発行者ポリシー

¥Windows¥assembly

policy.vv.rr.pddndp.dll※1

policy.vv.rr.pddndpcore.dll※1

policy.vv.rr.pddndp20.dll※1

policy.vv.rr.pddndpcore20.dll※1

¥Windows¥Microsoft.NET¥assembly

policy.vv.rr.pddndp40.dll※1

policy.vv.rr.pddndpcore40.dll※1

XML変換コマンド※2

xxxx¥UTL

phdxmlcnv.bat

XML変換ライブラリ※2

xxxx¥UTL

XMLConverter.jar

ODBCドライバ

¥Windows¥system32

pdodbcdrv3.dll

pdodbstp3.dll

pdclto32.dll

インタフェース定義ファイル

xxxx¥LIB

HIRDB.PKG

サンプル

xxxx¥SAMPLEAP

CREATE.EC

SAMPLE1.EC

SAMPLE2.EC

SAMPLE3.EC

SAMPLE1.ECB

INPUTF1

INPUTF2

READMEファイル

xxxx

README.TXT

環境定義ファイル

¥Windows

HIRDB.INI

注1

xxxxはHiRDBのインストールディレクトリ名を示します。ディレクトリ名はインストール時に指定できます。また，¥Windowsはシステムディレクトリを示します。

注2

再配布ファイル，及びインストーラ用の管理ファイルは含まれていません。

注※1

HiRDBデータプロバイダ for .NET Framework用発行者ポリシーは，バージョン09-01以降のリビジョンごとのファイルを累積します。

vvはバージョン番号，rrはリビジョン番号を示します。vv，rrともにゼロサプレスします。

注※2

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

表6‒18　HiRDB/Run Timeの場合のファイルとディレクトリ（Windows (x86)版のクライアント）

名　　　称

ディレクトリ

ファイル名

リンケージ用ライブラリ

xxxx¥LIB

PDCLTX32.LIB

PDCLTXM.LIB

PDCLTXS.LIB

PDCLTXM5.LIB

コマンド・ユティリティ

xxxx¥UTL

PDTRCMGR.EXE

PDCLTADM.EXE

DLLファイル

xxxx¥UTL

CLTDLL.DLL

PDCLTM32.DLL

PDCLTM50.DLL

PDCLTP32.DLL

PDCLTX32.DLL

PDSQLAUXF.DLL

PDSQLAUXF71.DLL

PDCLTXM.DLL

PDOLEDB.DLL

PDCLTXS.DLL

PDCLTXM5.DLL

PDCLTM71.DLL

PDCLTM80S.DLL

PDCLTM90.DLL

PDCLTM100.DLL

PDCLTM140.DLL

JDBCドライバ

xxxx¥UTL

JJDBC.DLL

PDJDBC.JAR

PDJDBC2.JAR

PDJDBC4.JAR

SQLJ

xxxx¥UTL

PDRUNTIME.JAR

PDNATIVERT.JAR

PDSQLJN.DLL

HiRDBデータプロバイダ for .NET Framework

xxxx¥UTL及び¥Windows¥assembly

PDDNDP.DLL

PDDNDPCORE.DLL

PDDNDP20.DLL

PDDNDPCORE20.DLL

xxxx¥UTL及び¥Windows¥Microsoft.NET¥assembly

PDDNDP40.DLL

PDDNDPCORE40.DLL

HiRDBデータプロバイダ for .NET Framework用発行者ポリシー

¥Windows¥assembly

policy.vv.rr.pddndp.dll※1

policy.vv.rr.pddndpcore.dll※1

policy.vv.rr.pddndp20.dll※1

policy.vv.rr.pddndpcore20.dll※1

¥Windows¥Microsoft.NET¥assembly

policy.vv.rr.pddndp40.dll※1

policy.vv.rr.pddndpcore40.dll※1

XML変換コマンド※2

xxxx¥UTL

phdxmlcnv.bat

XML変換ライブラリ※2

xxxx¥UTL

XMLConverter.jar

ODBCドライバ

¥Windows¥system32

pdodbcdrv3.dll

pdodbstp3.dll

pdclto32.dll

READMEファイル

xxxx

README.TXT

環境定義ファイル

¥WINDOWS

HIRDB.INI

注1

xxxxはHiRDBのインストールディレクトリ名を示します。ディレクトリ名はインストール時に指定できます。また，￥Windowsはシステムディレクトリを示します。

注2

再配布ファイル，及びインストーラ用の管理ファイルは含まれていません。

注※1

HiRDBデータプロバイダ for .NET Framework用発行者ポリシーは，バージョン09-01以降のリビジョンごとのファイルを累積します。

vvはバージョン番号，rrはリビジョン番号を示します。vv，rrともにゼロサプレスします。

注※2

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

表6‒19　HiRDB/Developer's Kitの場合のファイルとディレクトリ（Windows (x64)版のクライアント）

名　　　称

ディレクトリ

ファイル名

ヘッダファイル

xxxx¥INCLUDE

PDBTYPES.H

PDBERRNO.H

PDBMISC.H

PDBMISCM.H

SQLDA.CBL

SQLDA64.CBL

PDBSQLDA.H

PDBSQLCSNA.H

SQLIOA.CBL

SQLIOA64.CBL

SQLCA.CBL

SQLCA64.CBL

SQLIOAD.CBL

SQLIOAD64.CBL

SQLCAD.CBL

SQLCAD64.CBL

PDDBHASH.H

PDAUXCNV.H

SQLIOAMTH.CBL

SQLIOAMTH64.CBL

SQLCAMTH.CBL

SQLCAMTH64.CBL

SQLCSNA.CBL

SQLCSNA64.CBL

SQLIOA32.CBL

SQLIOALL.CBL

SQLCNSTS.CBL

SQLCNSTD.CBL

SQLMCNCT.CBL

リンケージ用ライブラリ

xxxx¥LIB

CLTDLL.LIB

PDCLTM32.LIB

PDCLTM50.LIB

PDCLTM64.LIB

PDCLTM90X.LIB

PDCLTM100X.LIB

PDCLTM140X.LIB

PDCLTX32.LIB

PDCLTX64.LIB

PDCLTXM.LIB

PDSQLAUXF.LIB

PDSQLAUXF64.LIB

PDCLTXS.LIB

PDCLTXS64.LIB

PDCLTXM5.LIB

PDCLTXM64.LIB

PDCLTM71.LIB

PDCLTM80S.LIB

PDCLTM90.LIB

PDCLTM100.LIB

PDCLTM140.LIB

コマンド・ユティリティ

xxxx¥UTL

PDCPP.EXE

PDOCC.EXE

PDCBL.EXE

PDOCB.EXE

PDPREP.EXE

PDPREP7.EXE

PDPREP8.EXE

PDPREPA.EXE

PDPREPC.EXE

PDPREPG.EXE

PDJAVA.EXE

PDTRCMGR.EXE

PDCLTADM.EXE

DLLファイル

xxxx¥UTL

CLTDLL.DLL

PDCLTM32.DLL

PDCLTM50.DLL

PDCLTM64.DLL

PDCLTM90X.DLL

PDCLTM100X.DLL

PDCLTM140X.DLL

PDCLTM71.DLL

PDCLTM80S.DLL

PDCLTM90.DLL

PDCLTM100.DLL

PDCLTM140.DLL

PDCLTX32.DLL

PDCLTX64.DLL

PDCLTXM.DLL

PDCLTXM64.DLL

PDOLEDB.DLL

PDSQLAUXF.DLL

PDSQLAUXF64.DLL

PDPARSE.DLL

PDCLTXS.DLL

PDCLTXS64.DLL

JDBCドライバ

xxxx¥UTL

JJDBC.DLL

PDJDBC.JAR

PDJDBC2.JAR

SQLJ

xxxx¥UTL

PDSQLJ.JAR

PDRUNTIME.JAR

PDNATIVERT.JAR

PDSQLJN.DLL

HiRDBデータプロバイダ for .NET Framework

xxxx¥UTL及び¥Windows¥assembly

PDDNDP.DLL

PDDNDPCORE.DLL

PDDNDP20.DLL

PDDNDPCORE20.DLL

PDDNDP20x.DLL

PDDNDPCORE20x.DLL

xxxx¥UTL及び¥Windows¥Microsoft.NET¥assembly

PDDNDP40.DLL

PDDNDPCORE40.DLL

PDDNDP40x.DLL

PDDNDPCORE40x.DLL

HiRDBデータプロバイダ for .NET Framework用発行者ポリシー

¥Windows¥assembly

policy.vv.rr.pddndp.dll※1

policy.vv.rr.pddndpcore.dll※1

policy.vv.rr.pddndp20.dll※1

policy.vv.rr.pddndpcore20.dll※1

policy.vv.rr.pddndp20x.dll※1

policy.vv.rr.pddndpcore20x.dll※1

¥Windows¥Microsoft.NET¥assembly

policy.vv.rr.pddndp40.dll※1

policy.vv.rr.pddndpcore40.dll※1

policy.vv.rr.pddndp40x.dll※1

policy.vv.rr.pddndpcore40x.dll※1

XML変換コマンド※2

xxxx¥UTL

phdxmlcnv.bat

XML変換ライブラリ※2

xxxx¥UTL

XMLConverter.jar

ODBC3.5ドライバ

¥Windows¥SysWOW64

pdodbcdrv3.dll

pdodbstp3.dll

pdclto32.dll

¥Windows¥system32

pdodbcdrv3x.dll

pdodbstp3x.dll

pdclto64.dll

インタフェース定義ファイル

xxxx¥BIN

HIRDB.PKG

サンプル

xxxx¥SAMPLEAP

CREATE.EC

SAMPLE1.EC

SAMPLE2.EC

SAMPLE3.EC

SAMPLE1.ECB

INPUTF1

INPUTF2

READMEファイル

xxxx

README.TXT

環境定義ファイル

¥Windows

HIRDB.INI

メッセージオブジェクトファイル

xxxx¥LIB

msgtxt

注1

xxxxはHiRDBのインストールディレクトリ名を示します。ディレクトリ名はインストール時に指定できます。また，¥Windowsはシステムディレクトリを示します。

注2

再配布ファイル，及びインストーラ用の管理ファイルは含まれていません。

注※1

HiRDBデータプロバイダ for .NET Framework用発行者ポリシーは，バージョン09-01以降のリビジョンごとのファイルを累積します。

vvはバージョン番号，rrはリビジョン番号を示します。vv，rrともにゼロサプレスします。

注※2

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

表6‒20　HiRDB/Run Timeの場合のファイルとディレクトリ（Windows (x64)版のクライアント）

名　　　称

ディレクトリ

ファイル名

リンケージ用ライブラリ

xxxx¥LIB

PDCLTX32.LIB

PDCLTX64.LIB

PDCLTXM.LIB

PDCLTXS.LIB

PDCLTXS64.LIB

PDCLTXM5.LIB

PDCLTXM64.LIB

コマンド・ユティリティ

xxxx¥UTL

PDTRCMGR.EXE

PDCLTADM.EXE

DLLファイル

xxxx¥UTL

CLTDLL.DLL

PDCLTM32.DLL

PDCLTM50.DLL

PDCLTM64.DLL

PDCLTM90X.DLL

PDCLTM100X.DLL

PDCLTM140X.DLL

PDCLTX32.DLL

PDCLTX64.DLL

PDCLTM71.DLL

PDCLTM80S.DLL

PDCLTM90.DLL

PDCLTM100.DLL

PDCLTM140.DLL

PDCLTXM.DLL

PDCLTXM64.DLL

PDOLEDB.DLL

PDSQLAUXF.DLL

PDSQLAUXF64.DLL

PDPARSE.DLL

PDCLTXS.DLL

PDCLTXS64.DLL

JDBCドライバ

xxxx¥UTL

JJDBC.DLL

PDJDBC.JAR

PDJDBC2.JAR

SQLJランタイム

xxxx¥UTL

PDRUNTIME.JAR

PDNATIVERT.JAR

PDSQLJN.DLL

HiRDBデータプロバイダ for .NET Framework

xxxx¥UTL及び¥Windows¥assembly

PDDNDP.DLL

PDDNDPCORE.DLL

PDDNDP20.DLL

PDDNDPCORE20.DLL

PDDNDP20x.DLL

PDDNDPCORE20x.DLL

xxxx¥UTL及び¥Windows¥Microsoft.NET¥assembly

PDDNDP40.DLL

PDDNDPCORE40.DLL

PDDNDP40x.DLL

PDDNDPCORE40x.DLL

HiRDBデータプロバイダ for .NET Framework用発行者ポリシー

¥Windows¥assembly

policy.vv.rr.pddndp.dll※1

policy.vv.rr.pddndpcore.dll※1

policy.vv.rr.pddndp20.dll※1

policy.vv.rr.pddndpcore20.dll※1

policy.vv.rr.pddndp20x.dll※1

policy.vv.rr.pddndpcore20x.dll※1

¥Windows¥Microsoft.NET¥assembly

policy.vv.rr.pddndp40.dll※1

policy.vv.rr.pddndpcore40.dll※1

policy.vv.rr.pddndp40x.dll※1

policy.vv.rr.pddndpcore40x.dll※1

XML変換コマンド※2

xxxx¥UTL

phdxmlcnv.bat

XML変換ライブラリ※2

xxxx¥UTL

XMLConverter.jar

ODBC3.5ドライバ

¥Windows¥SysWOW64

pdodbcdrv3.dll

pdodbstp3.dll

pdclto32.dll

¥Windows¥system32

pdodbcdrv3x.dll

pdodbstp3x.dll

pdclto64.dll

READMEファイル

xxxx

README.TXT

環境定義ファイル

¥Windows

HIRDB.INI

注1

xxxxはHiRDBのインストールディレクトリ名を示します。ディレクトリ名はインストール時に指定できます。また，¥Windowsはシステムディレクトリを示します。

注2

再配布ファイル，及びインストーラ用の管理ファイルは含まれていません。

注※1

HiRDBデータプロバイダ for .NET Framework用発行者ポリシーは，バージョン09-01以降のリビジョンごとのファイルを累積します。

vvはバージョン番号，rrはリビジョン番号を示します。vv，rrともにゼロサプレスします。

注※2

HiRDB XML Extensionに同梱されるため，HiRDBサーバ製品中のHiRDBクライアントには同梱されません。

表6‒21　ODBCドライバの場合のファイルとディレクトリ（Windowsクライアント）

名　　　称

ディレクトリ

ファイル名

セットアップファイル

¥Windows

DRVSETUP.EXE※

DRVSTP32.EXE

セットアップ用DLL

HIRDBSTP.DLL※

HRDSTP32.DLL

ドライバ本体

PDODBDRV.DLL※

PDODBD32.DLL

HiRDB/ClientDLL

PDCLTLIB.DLL※

PDCLTL32.DLL

注

¥Windowsは，システムディレクトリを示します。

注※

EM64TマシンのWindowsクライアントでは作成されません。

●リンケージ用ライブラリの用途別の使用ファイル

リンケージ用ライブラリの用途別の使用ファイルを次の表に示します。

表6‒22　リンケージ用ライブラリの用途別の使用ファイル（Windowsクライアント）

用途

使用するファイル

HiRDBクライアントでのプラットフォームごとのライブラリ提供状況

アドレッシングモード

Windows (x86)

Windows (x64)

通常のUAP

cltdll.dll

○

○

32ビット

XAインタフェース接続（静的登録又は動的登録）※

シングルスレッド用

pdcltx32.dll

○

○

32ビット

pdcltxs.dll

○

○

32ビット

pdcltx64.dll

−

○

64ビット

pdcltxs64.dll

−

○

64ビット

マルチスレッド用

pdcltxm.dll

○

○

32ビット

pdcltxm64.dll

−

○

64ビット

複数接続機能（マルチスレッド用）

pdcltm32.dll

○

○

32ビット

pdcltm50.dll

○

○

32ビット

pdcltm71.dll

○

○

32ビット

pdcltm80s.dll

○

○

32ビット

pdcltm90.dll

○

○

32ビット

pdcltm100.dll

○

○

32ビット

pdcltm140.dll

○

○

32ビット

pdcltm64.dll

−

○

64ビット

pdcltm90x.dll

−

○

64ビット

pdcltm100x.dll

−

○

64ビット

pdcltm140x.dll

−

○

64ビット

SQL補助関数用

pdsqlauxf.dll

○

○

32ビット

pdsqlauxf71.dll

○

○

32ビット

pdsqlauxf64.dll

−

○

64ビット

（凡例）

○：サポートしています。

×：サポートしていません。

−：該当しません。

注※

TMに登録するスイッチ名称で，静的登録又は動的登録のどちらかに切り替えられます。

●各トランザクションマネジャが使用するライブラリ

各トランザクションマネジャが使用するライブラリ一覧を次の表に示します。

表6‒23　各トランザクションマネジャが使用するライブラリ一覧（Windowsクライアント）

トランザクションマネジャ

ライブラリ名

バックエンドサーバ接続保持機能

HiRDBクライアントでのプラットフォームごとのライブラリ提供状況

アドレッシングモード

Windows (x86)

Windows (x64)

OpenTP1

pdcltx32.dll

可

○

○

32ビット

pdcltxs.dll

可

○

○

32ビット

pdcltx64.dll

可

×

○

64ビット

pdcltxs64.dll

可

×

○

64ビット

TPBroker for C++

pdcltxm.dll

否

○

○

32ビット

TUXEDO

pdcltxs.dll

可

○

○

32ビット

（凡例）

可：バックエンドサーバ接続保持機能を使用できます。

否：バックエンドサーバ接続保持機能を使用できません。

○：サポートしています。

×：サポートしていません。

●ライブラリと作成コンパイラの一覧

ライブラリと作成コンパイラの一覧を次の表に示します。

表6‒24　ライブラリと作成コンパイラの一覧（Windowsクライアント）

プラットフォーム

ライブラリ名

作成コンパイラのバージョン

使用するVisualCランタイム

Windows (x86)

cltdll.dll

VisualC++2.0

マルチスレッドスタティック

pdsqlauxf.dll

pdcltm32.dll

VisualC++4.2

マルチスレッドDLL

pdcltx32.dll

pdcltxm.dll

pdcltxs.dll

pdcltm50.dll

VisualC++5.0

pdcltxm5.dll

pdcltm71.dll

Visual Studio .NET 2003

マルチスレッドスタティック

pdsqlauxf71.dll

jjdbcinter.dll

Visual Studio 2003

pdcltm80s.dll

Visual Studio 2005

pdcltm90.dll

Visual Studio 2008

マルチスレッドDLL

pdcltm100.dll

Visual Studio 2010

pdcltm140.dll

Visual Studio 2017

Windows (x64)

pdcltm64.dll

Visual Studio 2005

マルチスレッドDLL

pdcltx64.dll

pdcltxs64.dll

pdcltxm64.dll

pdsqlauxf64.dll

マルチスレッドスタティック

pdcltm90x.dll

Visual Studio 2008

マルチスレッドDLL

pdcltm100x.dll

Visual Studio 2010

pdcltm140x.dll

Visual Studio 2017

6.5　hostsファイルの設定

6.5.1　hostsファイルの設定方法

クライアントマシンとサーバマシンが異なる場合，クライアントマシンのhostsファイルに，次に示す情報を指定します。

IPアドレス

ホスト名

DNSを利用する場合は，hostsファイルを設定する必要はありません。

また，hostsファイルに標準ホストを指定しない場合は，クライアント環境定義のPDCLTRCVADDRの指定が必要となります。

(1)　HiRDB/シングルサーバの場合

IPアドレス

HiRDB/シングルサーバのIPアドレスを指定します。

ホスト名

HiRDB/シングルサーバのホスト名を指定します。

IPアドレスを引き継がない系切り替えをする場合

実行系及び待機系の両方のIPアドレスとホスト名を指定します。

(2)　HiRDB/パラレルサーバの場合

IPアドレス

システムマネジャ，及びフロントエンドサーバを定義したサーバマシンのIPアドレスを指定します。

ホスト名

システムマネジャ，及びフロントエンドサーバを定義したサーバマシンのホスト名を指定します。

IPアドレスを引き継がない系切り替えをする場合

実行系及び待機系の両方のIPアドレスとホスト名を指定します。

6.6　クライアント環境定義（環境変数の設定）

6.6.1　クライアント環境定義の設定形式

UAPを実行するためには，クライアントごとにクライアント環境定義を設定しておく必要があります。

(1)　UNIX環境の場合

コマンド，及びユティリティを実行するために，環境変数PATHに次のディレクトリを追加してください。

クライアントのサーバマシンで実行する場合：

/opt/HiRDB/client/utl/

HiRDBサーバにリモートログインして実行する場合：

$PDDIR/client/utl/

クライアント環境定義の検索順序

クライアント環境定義を複数の箇所に設定している場合，次の順序でクライアント環境定義ごとに検索し，指定値がないクライアント環境定義については，デフォルト値を適用します。

環境変数グループ※

ユーザ環境変数

注※

複数接続機能使用時にALLOCATE CONNECTION HANDLEでファイル名を指定します。また，OLTP下のUAPをクライアントとする場合，オープン文字列にファイル名を指定します。オープン文字列については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

使用するクライアント機能によっては，上記以外の方法でもクライアント環境定義を設定できます。検索順序の詳細は，次の箇所を参照してください。

＜HiRDB ODBCドライバの場合＞

「接続情報の優先順位」

＜Type4 JDBCドライバの場合＞

「接続情報の優先順位」

(a)　sh（ボーンシェル）の場合

.profileファイルに次の環境変数を格納してください。ファイルに格納すると，起動時に環境変数が自動的に実行されます。

  $ PDHOST=HiRDBサーバのホスト名[,予備系HiRDBサーバのホスト名]
  $ PDNAMEPORT=HiRDBサーバのポート番号
  $ PDFESHOST=フロントエンドサーバのホスト名
            [:フロントエンドサーバがあるユニットのポート番号]
               [,予備系フロントエンドサーバのホスト名
               [:予備系フロントエンドサーバがあるユニットのポート番号]]
  $ PDSERVICEGRP=サーバ名
  $ PDSRVTYPE={WS｜PC}
  $ PDSERVICEPORT=高速接続用のポート番号
                      [,予備系の高速接続用のポート番号]
  $ PDFESGRP=FESグループ[,切替FESグループ[,切替FESグループ]…]
  $ PDCLTRCVPORT=クライアントの受信ポート番号
  $ PDCLTRCVADDR={クライアントのIPアドレス｜クライアントのホスト名}
  $ PDTMID=OLTP識別子
  $ PDXAMODE={0｜1}
  $ PDTXACANUM=1UAP当たりのトランザクション最大同時実行数
  $ PDXARCVWTIME=トランザクションが回復できない場合の待ち合わせ時間
  $ PDXATRCFILEMODE={LUMP｜SEPARATE}
  $ PDXAAUTORECONNECT={YES｜NO}
  $ HiRDB_PDHOST=HiRDBサーバのホスト名[,予備系HiRDBサーバのホスト名]
  $ HiRDB_PDNAMEPORT=HiRDBサーバのポート番号
  $ HiRDB_PDTMID=OLTP識別子
  $ HiRDB_PDXAMODE={0｜1}
  $ PDUSER=[認可識別子/パスワード]
  $ PDCLTAPNAME=実行するUAPの識別名称
  $ PDCLTLANG={SJIS｜CHINESE｜UJIS｜C｜UTF-8｜CHINESE-GB18030}
  $ PDLANG=｛UTF-8｜SJIS｜CHINESE｜CHINESE-GB18030｜ANY｝
  $ PDDBLOG={ALL｜NO}
  $ PDEXWARN={YES｜NO}
  $ PDSUBSTRLEN={3｜4｜5｜6｜7｜8｜9｜10}
  $ PDCLTCNVMODE={AUTO｜NOUSE｜UJIS｜UJIS2｜UTF8｜UTF8MS
                  ｜UTF8_TXT｜UTF8_EX｜UTF8_EX2｜UTF8MS_TXT
                  ｜UCS2_UJIS｜UCS2_UJIS2｜UCS2_UTF8}
  $ PDCLTGAIJIDLL=ユーザ定義外字変換DLLファイル名
  $ PDCLTGAIJIFUNC=ユーザ定義外字変換関数名
  $ PDCLTGRP=クライアントグループ名
  $ PDAUTORECONNECT={YES｜NO}
  $ PDRCCOUNT=自動再接続機能でのCONNECTのリトライ回数
  $ PDRCINTERVAL=自動再接続機能でのCONNECTのリトライ間隔
  $ PDRCTIMING={ALL｜再接続契機[,再接続契機[,再接続契機]]}
  $ PDUAPENVFILE=UAP環境定義のファイル名
  $ PDDBBUFLRU={YES｜NO}
  $ PDHATRNQUEUING=NO
  $ PDEXTDECCHECK={YES｜NO}
  $ PDASTHOST=HiRDB Control Manager - Agentのホスト名
              [,予備系HiRDB Control Manager - Agentのホスト名]
  $ PDASTPORT=HiRDB Control Manager - Agentのポート番号
  $ PDSYSTEMID=HiRDB Control Manager - Agentが管理するHiRDBサーバのHiRDB識別子
  $ PDASTUSER=OSのユーザ名/パスワード
  $ PDCMDWAITTIME=コマンド実行時のクライアントの最大待ち時間
  $ PDCMDTRACE=コマンドトレースファイルのサイズ
  $ PDIPC={MEMORY｜DEFAULT}
  $ PDSENDMEMSIZE=クライアント側のデータ送信用メモリサイズ
  $ PDRECVMEMSIZE=クライアント側のデータ受信用メモリサイズ
  $ PDCWAITTIME=クライアントの最大待ち時間
  $ PDSWAITTIME=トランザクション処理中のサーバの最大待ち時間
  $ PDSWATCHTIME=トランザクション処理以外のサーバの最大待ち時間
  $ PDCWAITTIMEWRNPNT=SQL実行時間警告出力の契機
  $ PDKALVL={0｜1｜2}
  $ PDKATIME=パケットの送信間隔
  $ PDTIMEDOUTRETRY=リトライ回数
  $ PDNBLOCKWAITTIME=ノンブロックモードでのコネクション確立監視時間
  $ PDCONNECTWAITTIME=サーバ接続時のHiRDBクライアントの最大待ち時間
  $ PDCLTPATH=トレースファイル格納ディレクトリ
  $ PDSQLTRACE=SQLトレースファイルのサイズ
  $ PDUAPERLOG=クライアントエラーログファイルのサイズ
  $ PDERRSKIPCODE=SQLCODE[,SQLCODE]…
  $ PDPRMTRC=｛YES｜NO｜IN｜OUT｜INOUT｝
  $ PDPRMTRCSIZE=SQLトレースに出力するパラメタ情報の最大データ長
  $ PDTRCMODE={ERR｜NONE}
  $ PDUAPREPLVL=｛[s][u[o][t]][p][r]｜[a[o][t]]｝
  $ PDREPPATH=UAP統計レポートファイルの格納ディレクトリ
  $ PDTRCPATH=動的SQLトレースファイルの格納先ディレクトリ
  $ PDSQLTRCOPENMODE={CNCT｜SQL}
  $ PDSQLTEXTSIZE=SQL文のサイズ
  $ PDSQLEXECTIME={YES｜NO}
  $ PDRCTRACE=再接続トレースファイルのサイズ
  $ PDWRTLNPATH=WRITE LINE文の値式の値を出力するファイルの
                格納先ディレクトリ
  $ PDWRTLNFILSZ=WRITE LINE文の値式の値を出力するファイルの
                      最大サイズ
  $ PDWRTLNCOMSZ=WRITE LINE文の値式の値の合計サイズ
  $ PDUAPEXERLOGUSE={YES｜NO}
  $ PDUAPEXERLOGPRMSZ=パラメタ情報の最大データ長
  $ PDSQLTRCFMT={1|2}
  $ PDVWOPTMODE={0｜1｜2}
  $ PDTAAPINFPATH=アクセスパス情報ファイル出力ディレクトリ名
  $ PDTAAPINFMODE={0｜1}
  $ PDTAAPINFSIZE=アクセスパス情報ファイルサイズ
  $ PDSTJTRNOUT={YES｜NO}
  $ PDLOCKLIMIT=ユーザ当たりの最大排他資源要求数
  $ PDDLKPRIO={96｜64｜32}
  $ PDLOCKSKIP={YES｜NO}
  $ PDFORUPDATEEXLOCK={YES｜NO}
  $ PDISLLVL=データ保証レベル
  $ PDSQLOPTLVL=SQL最適化オプション[,SQL最適化オプション]…
  $ PDADDITIONALOPTLVL=SQL拡張最適化オプション
                          [,SQL拡張最適化オプション]…
  $ PDHASHTBLSIZE=ハッシュジョイン，副問合せのハッシュ実行適用時の
                   ハッシュ表サイズ
  $ PDDFLNVAL={USE｜NOUSE}
  $ PDAGGR=グループ分けのときに発生するグループ数
  $ PDCMMTBFDDL={YES｜NO}
  $ PDPRPCRCLS={YES｜NO}
  $ PDAUTOCONNECT={ON｜OFF}
  $ PDDDLDEAPRPEXE={YES｜NO}
  $ PDDDLDEAPRP={YES｜NO}
  $ PDLCKWAITTIME=排他待ち限界経過時間
  $ PDCURSORLVL={0｜1｜2}
  $ PDDELRSVWDFILE=SQL予約語削除ファイル名
  $ PDCALCMDWAITTIME=CALL COMMAND文の最大待ち時間
  $ PDSTANDARDSQLSTATE={YES｜NO}
  $ PDBLKF=ブロック転送の行数
  $ PDBINARYBLKF={YES｜NO}
  $ PDBLKBUFFSIZE=通信バッファサイズ
  $ PDBINDRETRYCOUNT=bindシステムコールのリトライ回数
  $ PDBINDRETRYINTERVAL=bindシステムコールのリトライ間隔
  $ PDDBACCS=アクセスするRDエリアの世代番号
  $ PDDBORGUAP={YES｜NO}
  $ PDSPACELVL={0｜1｜3}
  $ PDCLTRDNODE=XDM/RD E2のデータベース識別子
  $ PDTP1SERVICE={YES｜NO}
  $ PDCNSTRNTNAME={LEADING｜TRAILING}
  $ PDTMPTBLRDAREA=RDエリア名［，RDエリア名…］
  $ PDBESCONHOLD={YES｜NO}
  $ PDBESCONHTI=バックエンドサーバ接続保持期間
  $ PDODBSTATCAHE={0｜1}
  $ PDODBESCAPE={0｜1}
  $ PDGDATAOPT={YES｜NO}
  $ PDODBLOCATOR={YES｜NO}
  $ PDODBSPLITSIZE=分割取得サイズ
  $ PDODBCWRNSKIP={YES｜NO}
  $ PDJETCOMPATIBLE={YES｜NO}
  $ PDODBGINFOSUPPRESS={YES｜NO}
  $ PDODBSTANDARDGTYPEINFO={YES｜NO}
  $ PDPLGIXMK={YES｜NO}
  $ PDPLGPFSZ=遅延一括作成用のインデクス情報ファイルの初期容量
  $ PDPLGPFSZEXP=遅延一括作成用のインデクス情報ファイルの増分値

  $ export PDHOST PDNAMEPORT PDFESHOST PDSERVICEGRP PDSRVTYPE
           PDSERVICEPORT PDFESGRP PDCLTRCVPORT PDCLTRCVADDR PDTMID PDXAMODE
           PDTXACANUM PDXARCVWTIME PDXATRCFILEMODE PDXAAUTORECONNECT PDUSER
           PDCLTAPNAME PDCLTLANG PDLANG PDDBLOG PDEXWARN PDSUBSTRLEN
           PDCLTCNVMODE PDCLTGAIJIDLL PDCLTGAIJIFUNC PDCLTGRP
           PDAUTORECONNECT PDRCCOUNT PDRCINTERVAL PDRCTIMING
           PDUAPENVFILE PDDBBUFLRU
           PDHATRNQUEUING PDEXTDECCHECK PDASTHOST PDASTPORT PDSYSTEMID
           PDASTUSER PDCMDWAITTIME PDCMDTRACE PDIPC PDSENDMEMSIZE
           PDRECVMEMSIZE PDCWAITTIME PDSWAITTIME PDSWATCHTIME
           PDCWAITTIMEWRNPNT PDKALVL PDKATIME PDTIMEDOUTRETRY
           PDNBLOCKWAITTIME PDCONNECTWAITTIME PDCLTPATH PDSQLTRACE
           PDUAPERLOG PDERRSKIPCODE PDPRMTRC PDPRMTRCSIZE PDTRCMODE
           PDUAPREPLVL PDREPPATH PDTRCPATH PDSQLTRCOPENMODE PDSQLTEXTSIZE
           PDSQLEXECTIME PDRCTRACE PDWRTLNPATH PDWRTLNFILSZ PDWRTLNCOMSZ
           PDUAPEXERLOGUSE PDUAPEXERLOGPRMSZ PDSQLTRCFMT PDVWOPTMODE
           PDTAAPINFPATH PDTAAPINFMODE PDTAAPINFSIZE PDSTJTRNOUT
           PDLOCKLIMIT PDDLKPRIO PDLOCKSKIP PDFORUPDATEEXLOCK PDISLLVL
           PDSQLOPTLVL PDADDITIONALOPTLVL PDHASHTBLSIZE PDDFLNVAL PDAGGR
           PDCMMTBFDDL PDPRPCRCLS PDAUTOCONNECT PDDDLDEAPRPEXE
           PDDDLDEAPRP PDLCKWAITTIME PDCURSORLVL
           PDDELRSVWDFILE PDCALCMDWAITTIME
           PDSTANDARDSQLSTATE PDBLKF PDBINARYBLKF PDBLKBUFFSIZE
           PDBINDRETRYCOUNT
           PDBINDRETRYINTERVAL PDDBACCS
           PDDBORGUAPPDSPACELVL PDCLTRDNODE
           PDTP1SERVICE PDCNSTRNTNAME PDTMPTBLRDAREA PDBESCONHOLD
           PDBESCONHTI
           PDODBSTATCAHE PDODBESCAPE PDGDATAOPT PDODBLOCATOR PDODBSPLITSIZE
           PDODBCWRNSKIP PDJETCOMPATIBLE PDODBGINFOSUPPRESS
           PDODBSTANDARDGTYPEINFO
           PDPLGIXMK PDPLGPFSZ PDPLGPFSZEXP

(b)　csh（Cシェル）の場合

.loginファイル，又は.cshrcファイルに，次の環境変数を格納してください。ファイルに格納すると，起動時に環境変数が自動的に実行されます。

  % setenv PDHOST HiRDBサーバのホスト名
                         [,予備系HiRDBサーバのホスト名]
  % setenv PDNAMEPORT HiRDBサーバのポート番号
  % setenv PDFESHOST フロントエンドサーバのホスト名
            [:フロントエンドサーバがあるユニットのポート番号]
              [,予備系フロントエンドサーバのホスト名
               [:予備系フロントエンドサーバがあるユニットのポート番号]]
  % setenv PDSERVICEGRP サーバ名
  % setenv PDSRVTYPE {WS｜PC}
  % setenv PDSERVICEPORT 高速接続用のポート番号
                         [,予備系の高速接続用のポート番号]
  % setenv PDFESGRP FESグループ[,切替FESグループ[,切替FESグループ]…]
  % setenv PDCLTRCVPORT クライアントの受信ポート番号
  % setenv PDCLTRCVADDR {クライアントのIPアドレス
                         ｜クライアントのホスト名}
  % setenv PDTMID OLTP識別子
  % setenv PDXAMODE {0｜1}
  % setenv PDTXACANUM 1UAP当たりのトランザクション最大同時実行数
  % setenv PDXARCVWTIME トランザクションが回復できない場合の
                         待ち合わせ時間
  % setenv PDXATRCFILEMODE {LUMP｜SEPARATE}
  % setenv PDXAAUTORECONNECT {YES｜NO}
  % setenv HiRDB_PDHOST HiRDBサーバのホスト名
                          [,予備系HiRDBサーバのホスト名]
  % setenv HiRDB_PDNAMEPORT HiRDBサーバのポート番号
  % setenv HiRDB_PDTMID OLTP識別子
  % setenv HiRDB_PDXAMODE {0｜1}
  % setenv PDUSER 認可識別子/パスワード
  % setenv PDCLTAPNAME 実行するUAPの識別名称
  % setenv PDCLTLANG {SJIS｜CHINESE｜UJIS｜C｜UTF-8｜CHINESE-GB18030}
  % setenv PDLANG {UTF-8｜SJIS｜CHINESE｜CHINESE-GB18030｜ANY}
  % setenv PDDBLOG {ALL｜NO}
  % setenv PDEXWARN {YES｜NO}
  % setenv PDSUBSTRLEN {3｜4｜5｜6｜7｜8｜9｜10}
  % setenv PDCLTCNVMODE {AUTO｜NOUSE｜UJIS｜UJIS2｜UTF8｜UTF8MS
                         ｜UTF8_TXT｜UTF8_EX｜UTF8_EX2｜UTF8MS_TXT
                         ｜UCS2_UJIS｜UCS2_UJIS2｜UCS2_UTF8}
  % setenv PDCLTGAIJIDLL ユーザ定義外字変換DLLファイル名
  % setenv PDCLTGAIJIFUNC ユーザ定義外字変換関数名
  % setenv PDCLTGRP クライアントグループ名
  % setenv PDAUTORECONNECT {YES｜NO}
  % setenv PDRCCOUNT 自動再接続機能でのCONNECTのリトライ回数
  % setenv PDRCINTERVAL 自動再接続機能でのCONNECTのリトライ間隔
  % setenv PDRCTIMING {ALL｜再接続契機[,再接続契機[,再接続契機]]}
  % setenv PDUAPENVFILE UAP環境定義のファイル名
  % setenv PDDBBUFLRU {YES｜NO}
  % setenv PDHATRNQUEUING NO
  % setenv PDEXTDECCHECK {YES｜NO}
  % setenv PDASTHOST HiRDB Control Manager - Agentのホスト名
              [,予備系HiRDB Control Manager - Agentのホスト名]
  % setenv PDASTPORT HiRDB Control Manager - Agentのポート番号
  % setenv PDSYSTEMID HiRDB Control Manager - Agentが管理するHiRDBサーバの
                        HiRDB識別子
  % setenv PDASTUSER [OSのユーザ名/パスワード]
  % setenv PDCMDWAITTIME コマンド実行時のクライアントの最大待ち時間
  % setenv PDCMDTRACE コマンドトレースファイルのサイズ
  % setenv PDIPC {MEMORY｜DEFAULT}
  % setenv PDSENDMEMSIZE クライアント側のデータ送信用メモリサイズ
  % setenv PDRECVMEMSIZE クライアント側のデータ受信用メモリサイズ
  % setenv PDCWAITTIME クライアントの最大待ち時間
  % setenv PDSWAITTIME トランザクション処理中のサーバの最大待ち時間
  % setenv PDSWATCHTIME トランザクション処理以外のサーバの最大待ち時間
  % setenv PDCWAITTIMEWRNPNT SQL実行時間警告出力の契機
  % setenv PDKALVL {0｜1｜2}
  % setenv PDKATIME パケットの送信間隔
  % setenv PDTIMEDOUTRETRY リトライ回数
  % setenv PDNBLOCKWAITTIME ノンブロックモードでのコネクション確立監視時間
  % setenv PDCONNECTWAITTIME サーバ接続時のHiRDBクライアントの最大待ち時間
  % setenv PDCLTPATH トレースファイル格納ディレクトリ
  % setenv PDSQLTRACE SQLトレースファイルのサイズ
  % setenv PDUAPERLOG クライアントエラーログファイルのサイズ
  % setenv PDERRSKIPCODE SQLCODE[,SQLCODE]…
  % setenv PDPRMTRC ｛YES｜NO｜IN｜OUT｜INOUT｝
  % setenv PDPRMTRCSIZE SQLトレースに出力するパラメタ情報の最大データ長
  % setenv PDTRCMODE {ERR｜NONE}
  % setenv PDUAPREPLVL ｛[s][u[o][t]][p][r]｜[a[o][t]]｝
  % setenv PDREPPATH UAP統計レポートファイルの格納ディレクトリ
  % setenv PDTRCPATH 動的SQLトレースファイルの格納先ディレクトリ
  % setenv PDSQLTRCOPENMODE {CNCT｜SQL}
  % setenv PDSQLTEXTSIZE SQL文のサイズ
  % setenv PDSQLEXECTIME {YES｜NO}
  % setenv PDRCTRACE 再接続トレースファイルのサイズ
  % setenv PDWRTLNPATH WRITE LINE文の値式の値を出力するファイルの
                       格納先ディレクトリ
  % setenv PDWRTLNFILSZ WRITE LINE文の値式の値を出力するファイルの
                             最大サイズ
  % setenv PDWRTLNCOMSZ WRITE LINE文の値式の値の合計サイズ
  % setenv PDUAPEXERLOGUSE {YES｜NO}
  % setenv PDUAPEXERLOGPRMSZ パラメタ情報の最大データ長
  % setenv PDSQLTRCFMT {1|2}
  % setenv PDVWOPTMODE {0｜1｜2}
  % setenv PDTAAPINFPATH アクセスパス情報ファイル出力ディレクトリ名
  % setenv PDTAAPINFMODE {0｜1}
  % setenv PDTAAPINFSIZE アクセスパス情報ファイルサイズ
  % setenv PDSTJTRNOUT {YES｜NO}
  % setenv PDLOCKLIMIT ユーザ当たりの最大排他資源要求数
  % setenv PDDLKPRIO {96｜64｜32}
  % setenv PDLOCKSKIP {YES｜NO}
  % setenv PDFORUPDATEEXLOCK {YES｜NO}
  % setenv PDISLLVL データ保証レベル
  % setenv PDSQLOPTLVL SQL最適化オプション[,SQL最適化オプション]…
  % setenv PDADDITIONALOPTLVL SQL拡張最適化オプション
                               [,SQL拡張最適化オプション]…
  % setenv PDHASHTBLSIZE ハッシュジョイン，副問合せのハッシュ実行適用時の
                          ハッシュ表サイズ
  % setenv PDDFLNVAL {USE｜NOUSE}
  % setenv PDAGGR グループ分けのときに発生するグループ数
  % setenv PDCMMTBFDDL {YES｜NO}
  % setenv PDPRPCRCLS {YES｜NO}
  % setenv PDAUTOCONNECT {ON｜OFF}
  % setenv PDDDLDEAPRPEXE {YES｜NO}
  % setenv PDDDLDEAPRP {YES｜NO}
  % setenv PDLCKWAITTIME 排他待ち限界経過時間
  % setenv PDCURSORLVL {0｜1｜2}
  % setenv PDDELRSVWDFILE SQL予約語削除ファイル名
  % setenv PDCALCMDWAITTIME CALL COMMAND文の最大待ち時間
  % setenv PDSTANDARDSQLSTATE {YES｜NO}
  % setenv PDBLKF ブロック転送の行数
  % setenv PDBINARYBLKF {YES｜NO}
  % setenv PDBLKBUFFSIZE 通信バッファサイズ
  % setenv PDBINDRETRYCOUNT bindシステムコールのリトライ回数
  % setenv PDBINDRETRYINTERVAL bindシステムコールのリトライ間隔
  % setenv PDDBACCS アクセスするRDエリアの世代番号
  % setenv PDDBORGUAP {YES｜NO}
  % setenv PDSPACELVL {0｜1｜3}
  % setenv PDCLTRDNODE XDM/RD E2のデータベース識別子
  % setenv PDTP1SERVICE {YES｜NO}
  % setenv PDCNSTRNTNAME {LEADING｜TRAILING}
  % setenv PDTMPTBLRDAREA RDエリア名［，RDエリア名…］
  % setenv PDBESCONHOLD {YES｜NO}
  % setenv PDBESCONHTI バックエンドサーバ接続保持期間
  % setenv PDODBSTATCAHE {0｜1}
  % setenv PDODBESCAPE {0｜1}
  % setenv PDGDATAOPT {YES｜NO}
  % setenv PDODBLOCATOR {YES｜NO}
  % setenv PDODBSPLITSIZE 分割取得サイズ
  % setenv PDODBCWRNSKIP {YES｜NO}
  % setenv PDJETCOMPATIBLE {YES｜NO}
  % setenv PDODBGINFOSUPPRESS {YES｜NO}
  % setenv PDODBSTANDARDGTYPEINFO {YES｜NO}
  % setenv PDPLGIXMK {YES｜NO}
  % setenv PDPLGPFSZ 遅延一括作成用のインデクス情報ファイルの初期容量
  % setenv PDPLGPFSZEXP 遅延一括作成用のインデクス情報ファイルの増分値

注意事項：

プリプロセスするときには，環境変数を設定する必要があります。プリプロセスについては，「プリプロセス」を参照してください。

Type4 JDBCドライバを使用する場合，この方法で設定したクライアント環境定義は有効になりません。

PDJDBで始まるクライアント環境定義は，この方法で設定しても有効になりません。

指定値に引用符（ " ）で囲む値を含む場合の注意事項については，「クライアント環境定義の一覧」の「注※5」を参照してください。

(2)　Windows環境の場合

Windows環境では，インストール時に環境変数を設定する選択をした場合，環境変数PATHにディレクトリが設定されます。ただし，パス名が長い場合，PATHへの書き込み権限がない場合など，自動的に設定されないことがあります。したがって，PATHにディレクトリが設定されているかどうかを確認し，設定されていない場合はPATHに次のディレクトリを追加する必要があります。xxxxはHiRDBクライアントのインストールディレクトリ名を示します。

   xxxx¥UTL

環境変数は，システム環境変数，若しくはユーザ環境変数に設定するか，又はWindowsディレクトリ下のHiRDB.INIファイルに設定してください。なお，UAP中で関数を使用して環境変数を設定する場合は，putenv関数は使用しないで，SetEnvironmentVariable関数を使用してください。

クライアント環境定義の検索順序

クライアント環境定義を複数の箇所に設定している場合，次の順序でクライアント環境定義ごとに検索し，指定値がないクライアント環境定義については，デフォルト値を適用します。

環境変数グループ※

ユーザ環境変数

システム環境変数

HIRDB.ini

注※

複数接続機能使用時にALLOCATE CONNECTION HANDLEでグループ名，又はファイル名を指定します。また，OLTP下のUAPをクライアントとする場合，オープン文字列にグループ名，又はファイル名を指定します。オープン文字列については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

使用するクライアント機能によっては，上記以外の方法でもクライアント環境定義を設定できます。検索順序の詳細は，次の箇所を参照してください。

＜HiRDB ODBCドライバの場合＞

「接続情報の優先順位」

＜HiRDBデータプロバイダ for .NET Frameworkの場合＞

「接続情報の優先順位」

＜Type4 JDBCドライバの場合＞

「接続情報の優先順位」

HiRDB.INIファイルの設定例を次に示します。

  [HIRDB]
  PDHOST=HiRDBサーバのホスト名[,予備系HiRDBサーバのホスト名]
  PDNAMEPORT=HiRDBサーバのポート番号
  PDFESHOST=フロントエンドサーバのホスト名
            [:フロントエンドサーバがあるユニットのポート番号]
              [,予備系フロントエンドサーバのホスト名
               [:予備系フロントエンドサーバがあるユニットのポート番号]]
  PDSERVICEGRP=サーバ名
  PDSRVTYPE={WS｜PC}
  PDSERVICEPORT=高速接続用のポート番号
                   [,予備系の高速接続用のポート番号]
  PDFESGRP=FESグループ[,切替FESグループ[,切替FESグループ]…]
  PDCLTRCVPORT=クライアントの受信ポート番号
  PDCLTRCVADDR={クライアントのIPアドレス｜クライアントのホスト名}
  PDXATRCFILEMODE={LUMP｜SEPARATE}
  PDUSER=[認可識別子/パスワード]
  PDCLTAPNAME=実行するUAPの識別名称
  PDCLTLANG={SJIS｜CHINESE｜UJIS｜C｜UTF-8｜CHINESE-GB18030}
  PDLANG={UTF-8｜SJIS｜CHINESE｜CHINESE-GB18030｜ANY}
  PDDBLOG={ALL｜NO}
  PDEXWARN={YES｜NO}
  PDSUBSTRLEN={3｜4｜5｜6｜7｜8｜9｜10}
  PDCLTCNVMODE={AUTO｜NOUSE｜UJIS｜UJIS2｜UTF8｜UTF8MS
                ｜UTF8_TXT｜UTF8_EX｜UTF8_EX2｜UTF8MS_TXT
                ｜UCS2_UJIS｜UCS2_UJIS2｜UCS2_UTF8}
  PDCLTGAIJIDLL=ユーザ定義外字変換DLLファイル名
  PDCLTGAIJIFUNC=ユーザ定義外字変換関数名
  PDCLTGRP=クライアントグループ名
  PDAUTORECONNECT={YES｜NO}
  PDRCCOUNT=自動再接続機能でのCONNECTのリトライ回数
  PDRCINTERVAL=自動再接続機能でのCONNECTのリトライ間隔
  PDRCTIMING={ALL｜再接続契機[,再接続契機[,再接続契機]]}
  PDUAPENVFILE=UAP環境定義のファイル名
  PDDBBUFLRU={YES｜NO}
  PDHATRNQUEUING=NO
  PDCLTBINDLOOPBACKADDR={YES｜NO}
  PDEXTDECCHECK={YES｜NO}
  PDASTHOST=HiRDB Control Manager - Agentのホスト名
              [,予備系HiRDB Control Manager - Agentのホスト名]
  PDASTPORT=HiRDB Control Manager - Agentのポート番号
  PDSYSTEMID=HiRDB Control Manager - Agentが管理するHiRDBサーバのHiRDB識別子
  PDASTUSER=OSのユーザ名/パスワード
  PDCMDWAITTIME=コマンド実行時のクライアントの最大待ち時間
  PDCMDTRACE=コマンドトレースファイルのサイズ
  PDIPC={MEMORY｜DEFAULT}
  PDSENDMEMSIZE=クライアント側のデータ送信用メモリサイズ
  PDRECVMEMSIZE=クライアント側のデータ受信用メモリサイズ
  PDCWAITTIME=クライアントの最大待ち時間
  PDSWAITTIME=トランザクション処理中のサーバの最大待ち時間
  PDSWATCHTIME=トランザクション処理以外のサーバの最大待ち時間
  PDCWAITTIMEWRNPNT=SQL実行時間警告出力の契機
  PDKALVL={0｜1｜2}
  PDKATIME=パケットの送信間隔
  PDTIMEDOUTRETRY=リトライ回数
  PDNBLOCKWAITTIME=ノンブロックモードでのコネクション確立監視時間
  PDCONNECTWAITTIME=サーバ接続時のHiRDBクライアントの最大待ち時間
  PDCLTPATH=トレースファイル格納ディレクトリ
  PDSQLTRACE=SQLトレースファイルのサイズ
  PDUAPERLOG=クライアントエラーログファイルのサイズ
  PDERRSKIPCODE=SQLCODE[,SQLCODE]…
  PDPRMTRC=｛YES｜NO｜IN｜OUT｜INOUT｝
  PDPRMTRCSIZE=SQLトレースに出力するパラメタ情報の最大データ長
  PDTRCMODE={ERR｜NONE}
  PDUAPREPLVL=｛[s][u[o][t]][p][r]｜[a[o][t]]｝
  PDREPPATH=UAP統計レポートファイルの格納ディレクトリ
  PDTRCPATH=動的SQLトレースファイルの格納先ディレクトリ
  PDSQLTRCOPENMODE={CNCT｜SQL}
  PDSQLTEXTSIZE=SQL文のサイズ
  PDSQLEXECTIME={YES｜NO}
  PDRCTRACE=再接続トレースファイルのサイズ
  PDWRTLNPATH=WRITE LINE文の値式の値を出力するファイルの
              格納先ディレクトリ
  PDWRTLNFILSZ=WRITE LINE文の値式の値を出力するファイルの
                    最大サイズ
  PDWRTLNCOMSZ=WRITE LINE文の値式の値の合計サイズ
  PDUAPEXERLOGUSE={YES｜NO}
  PDUAPEXERLOGPRMSZ=パラメタ情報の最大データ長
  PDSQLTRCFMT={1|2}
  PDDNDPTRACE=メソッドトレースのファイルサイズ
  PDDNDPCOMPATIBLE={NO|ALL}
  PDVWOPTMODE={0｜1｜2}
  PDTAAPINFPATH=アクセスパス情報ファイル出力ディレクトリ名
  PDTAAPINFMODE={0｜1}
  PDTAAPINFSIZE=アクセスパス情報ファイルサイズ
  PDSTJTRNOUT={YES｜NO}
  PDLOCKLIMIT=ユーザ当たりの最大排他資源要求数
  PDDLKPRIO={96｜64｜32}
  PDLOCKSKIP={YES｜NO}
  PDFORUPDATEEXLOCK={YES｜NO}
  PDISLLVL=データ保証レベル
  PDSQLOPTLVL=SQL最適化オプション[,SQL最適化オプション]…
  PDADDITIONALOPTLVL=SQL拡張最適化オプション
                      [,SQL拡張最適化オプション]…
  PDHASHTBLSIZE=ハッシュジョイン，副問合せのハッシュ実行適用時の
                 ハッシュ表サイズ
  PDDFLNVAL={USE｜NOUSE}
  PDAGGR=グループ分けのときに発生するグループ数
  PDCMMTBFDDL={YES｜NO}
  PDPRPCRCLS={YES｜NO}
  PDAUTOCONNECT={ON｜OFF}
  PDDDLDEAPRPEXE={YES｜NO}
  PDDDLDEAPRP={YES｜NO}
  PDLCKWAITTIME=排他待ち限界経過時間
  PDCURSORLVL={0｜1｜2}
  PDDELRSVWDFILE=SQL予約語削除ファイル名
  PDCALCMDWAITTIME=CALL COMMAND文の最大待ち時間
  PDSTANDARDSQLSTATE={YES｜NO}
  PDBLKF=ブロック転送の行数
  PDBINARYBLKF={YES｜NO}
  PDBLKBUFFSIZE=通信バッファサイズ
  PDBINDRETRYCOUNT=bindシステムコールのリトライ回数
  PDBINDRETRYINTERVAL=bindシステムコールのリトライ間隔
  PDDBACCS=アクセスするRDエリアの世代番号
  PDDBORGUAP={YES｜NO}
  PDSPACELVL={0｜1｜3}
  PDCLTRDNODE=XDM/RD E2のデータベース識別子
  PDTP1SERVICE={YES｜NO}
  PDRDCLTCODE={SJIS｜UTF-8}
  PDCNSTRNTNAME={LEADING｜TRAILING}
  PDTMPTBLRDAREA=RDエリア名［，RDエリア名…］
  PDBESCONHOLD={YES｜NO}
  PDBESCONHTI=バックエンドサーバ接続保持期間
  PDODBSTATCAHE={0｜1}
  PDODBESCAPE={0｜1}
  PDGDATAOPT={YES｜NO}
  PDODBLOCATOR={YES｜NO}
  PDODBSPLITSIZE=分割取得サイズ
  PDODBCWRNSKIP={YES｜NO}
  PDJETCOMPATIBLE={YES｜NO}
  PDODBGINFOSUPPRESS={YES｜NO}
  PDODBSTANDARDGTYPEINFO={YES｜NO}
  PDPLGIXMK={YES｜NO}
  PDPLGPFSZ=遅延一括作成用のインデクス情報ファイルの初期容量
  PDPLGPFSZEXP=遅延一括作成用のインデクス情報ファイルの増分値

注意事項：

プリプロセスするときには，環境変数を設定する必要があります。プリプロセスについては，「プリプロセス」を参照してください。

Type4 JDBCドライバを使用する場合，この方法で設定したクライアント環境定義は有効になりません。

PDJDBで始まるクライアント環境定義は，この方法で設定しても有効になりません。

指定値に引用符（ " ）で囲む値を含む場合の注意事項については，「クライアント環境定義の一覧」の「注※5」を参照してください。

6.6.2　OLTP下のX/Openに従ったAPIを使用したUAPをクライアントとする場合の指定方法

(1)　OpenTP1下のUAPをクライアントとする場合

OpenTP1下のUAPをクライアントとする運用形態の場合，クライアント環境定義はOpenTP1のシステムサービス定義に指定してください。環境変数は，次に示すOpenTP1の定義で指定します。

全環境に共通の指定をする場合

システム環境定義

トランザクション障害時の回復制御に関する指定をする場合

トランザクションサービス定義

全UAPに共通の指定をする場合

ユーザサービスデフォルト定義

各UAPに個別の指定をする場合

各ユーザサービス定義

環境変数を指定するOpenTP1の定義を次の表に示します。なお，指定する場合は，putenv形式又はdcputenv形式で指定してください。

表6‒25　環境変数を指定するOpenTP1の定義

環境変数

システム

環境定義

トランザクション

サービス定義

ユーザサービス

デフォルト定義

ユーザサービス

定義

HiRDB_PDHOST※9

○※1

×

×

×

HiRDB_PDNAMEPORT※9

○※2

×

×

×

HiRDB_PDTMID※9

△※3※4

×

×

×

HiRDB_PDXAMODE※9

△※5

×

×

×

PDHOST

×

○※1※6

○※1※6

△※1※6※7

PDNAMEPORT

×

○※2※6

○※2※6

△※2※6※7

PDTMID※9

×

△※3※4※6

△※3※4※6

△※3※4※6※7

PDXAMODE※9※10

×

△※5※6

△※5※6

△※5※6※7

PDTXACANUM※9

×

△

△

△

PDCLTPATH

×

△

△

△

PDUSER

×

×

○

○

PDCWAITTIME

×

△

△

△

PDSWAITTIME

×

○

○

○

PDSQLTRACE

×

△

△

△

PDUAPERLOG

×

△

△

△

PDCLTAPNAME

×

△

△※8

△※8

PDSWATCHTIME

×

×

○

○

PDTRCMODE

×

△

△

△

PDUAPREPLVL

×

△

△

△

PDREPPATH

×

△

△

△

PDTRCPATH

×

△

△

△

PDSQLTRCOPENMODE

×

△

△

△

PDAUTOCONNECT

×

×

×

×

PDXARCVWTIME※9

×

△

×

×

PDCWAITTIMEWRNPNT

×

△

△

△

PDAUTORECONNECT

×

×

×

×

PDRCCOUNT

×

×

×

×

PDRCINTERVAL

×

×

×

×

PDRCTIMING

×

×

×

×

PDKALVL

×

△※11

△※11

△※11

PDKATIME

×

△※11

△※11

△※11

PDSQLTEXTSIZE

×

△

△

△

PDSQLEXECTIME

×

△

△

△

PDRCTRACE

×

×

×

×

PDSQLTRCFMT

×

△

△

△

上記以外の環境変数

×

×

△

△

（凡例）

○：必要です。

△：任意です。必要に応じて指定してください。

×：不要です。

注

OpenTP1のシステムサービス定義については，マニュアル「OpenTP1 システム定義」を参照してください。

注※1

HiRDB_PDHOSTを指定する場合は，HiRDB_PDHOSTに指定する値をPDHOSTにも設定するため，PDHOSTの指定は不要です。HiRDB_PDHOSTを指定しない場合は，PDHOSTを必ず指定してください。PDHOSTとHiRDB_PDHOSTの両方を指定した場合は，HiRDB_PDHOSTの指定が優先されます。

なお，環境変数グループにPDHOSTを指定した場合は，環境変数グループのPDHOSTの指定が有効になります。

PDHOSTに指定する値の目安については，「PDHOSTにPDFESHOSTのホスト名を指定することによる通信先サーバの固定化（HiRDB/パラレルサーバ限定）」を参照してください。

注※2

HiRDB_PDNAMEPORTを指定する場合は，HiRDB_PDNAMEPORTに指定する値をPDNAMEPORTにも設定するため，PDNAMEPORTの指定は不要です。HiRDB_PDNAMEPORTを指定しない場合は，PDNAMEPORTを必ず指定してください。PDNAMEPORTとHiRDB_PDNAMEPORTの両方を指定した場合は，HiRDB_PDNAMEPORTの指定が優先されます。

なお，環境変数グループにPDNAMEPORTを指定した場合は，環境変数グループのPDNAMEPORTの指定が有効になります。

注※3

複数のOLTPからX/Openに従ったAPIを使用して一つのHiRDBサーバにアクセスする場合，必ず指定してください。

注※4

HiRDB_PDTMIDを指定する場合は，HiRDB_PDTMIDに指定する値をPDTMIDにも設定するため，PDTMIDの指定は不要です。HiRDB_PDTMIDを指定しない場合は，PDTMIDを必ず指定してください。PDTMIDとHiRDB_PDTMIDの両方を指定した場合は，HiRDB_PDTMIDの指定が優先されます。

注※5

HiRDB_PDXAMODEを指定する場合は，HiRDB_PDXAMODEに指定する値をPDXAMODEにも設定するため，PDXAMODEの指定は不要です。PDXAMODEとHiRDB_PDXAMODEの両方を指定した場合は，HiRDB_PDXAMODEの指定が優先されます。

注※6

指定する場合は，それぞれの定義で必ず同じ内容を指定してください。

注※7

HiRDBにアクセスするすべてのユーザのサーバに対し，同じ内容の指定が必要なため，各ユーザサービス定義には指定しないで，ユーザサービスデフォルト定義で指定することをお勧めします。

注※8

各ユーザのサーバを識別できるようにユーザサービスデフォルト定義には指定しないで，各ユーザサービス定義で指定することをお勧めします。

注※9

複数接続機能を使用する場合，これらの環境変数を接続先ごとに登録した環境変数グループに設定しても，環境変数の指定値は無効になります。また，Windows環境の場合，HiRDB.iniファイルに指定しても無効になります。これらの環境変数は，OpenTP1のシステムサービス定義に指定した内容が有効になります。

注※10

trnstringのオプションと，PDXAMODEの設定が合っていない場合，xa関数が-6エラーになるため，注意してください。

注※11

OpenTP1では指定できません（TP1/EEでだけ指定できます）。

(2)　TP1/LiNK下のUAPをクライアントとする場合

UAPを実行するためには，TP1/LiNKの定義にクライアント環境定義を指定する必要があります。指定方法を次に示します。

トランザクション障害時の回復制御に関する指定をする場合

［リソースマネジャ］ウィンドウの［オプション（Ｐ）...］ボタンをクリックして，［オプション］ダイアログボックスを開き，［トランザクションサービスの環境設定］欄に指定してください。

全UAPに共通の指定をする場合

［SPP（又はSUP）環境設定］ダイアログボックスを開き，［ユーザサーバの環境変数］欄の［グローバル］欄に指定してください。

各UAPに個別の指定をする場合

［SPP（又はSUP）環境設定］ダイアログボックスを開き，［ユーザサーバの環境変数］欄の［ローカル］欄に指定してください。

環境変数を指定するTP1/LiNKの定義を次の表に示します。

表6‒26　環境変数を指定するTP1/LiNKの定義

環境変数

［トランザクションサービスの環境変数］欄

［ユーザサーバの環境変数］欄

［グローバル］欄

［ローカル］欄

HiRDB_PDHOST

×

×

×

HiRDB_PDNAMEPORT

×

×

×

HiRDB_PDTMID

×

×

×

HiRDB_PDXAMODE

×

×

×

PDHOST

○※２

○※２

△※２※３

PDNAMEPORT

○※２

○※２

△※２※３

PDTMID※５

△※１※２

△※１※２

△※１※２※３

PDXAMODE※５

△※２

△※２

△※２※３

PDTXACANUM※５

△

△

△

PDCLTPATH

△

△

△

PDUSER

×

○

○

PDCWAITTIME

△

△

△

PDSWAITTIME

○

○

○

PDSQLTRACE

△

△

△

PDUAPERLOG

△

△

△

PDCLTAPNAME

△

△※４

△※４

PDSWATCHTIME

○

○

○

PDTRCMODE

△

△

△

PDUAPREPLVL

△

△

△

PDREPPATH

△

△

△

PDTRCPATH

△

△

△

PDSQLTRCOPENMODE

△

△

△

PDAUTOCONNECT

×

×

×

PDXARCVWTIME※５

△

×

×

PDCWAITTIMEWRNPNT

△

△

△

PDSQLTRCFMT

△

△

△

上記以外の環境変数

×

△

△

（凡例）

○：必要です。

△：任意です。必要に応じて指定してください。

×：不要です。

注

TP1/LiNKの定義については，マニュアル「TP1/LiNK 使用の手引」を参照してください。

注※1

複数OLTPからX/Openに従ったAPIを使用して，一つのHiRDBサーバにアクセスする場合は必ず指定してください。

注※2

指定する場合は，それぞれの定義で必ず同じ内容を指定してください。

注※3

HiRDBにアクセスするすべてのユーザのサーバに対し，同じ内容の指定が必要なため，［ユーザサーバの環境変数］欄の［ローカル］欄に指定しないで，［グローバル］欄に指定することをお勧めします。

注※4

各ユーザのサーバを識別できるように［ユーザサーバの環境変数］欄の［グローバル］欄に指定しないで，［ローカル］欄に指定することをお勧めします。

注※5

複数接続機能を使用する場合，これらの環境変数を接続先ごとに登録した環境変数グループに設定しても，環境変数の指定値は無効になります。また，Windows環境の場合，HIRDB.iniファイルに指定しても無効になります。これらの環境変数は，TP1/LiNKの定義に指定した内容が有効になります。

(3)　TPBroker for C++下のUAPをクライアントとする場合

TPBroker for C++下のUAPをクライアントとする運用形態の場合，クライアント環境定義はTPBroker for C++のシステム定義に指定してください。TPBroker for C++のシステム定義については，マニュアル「TPBroker ユーザーズガイド」を参照してください。

クライアント環境定義を指定する場合，それぞれ次の形式で指定してください。

トランザクション決着プロセスに指定をする場合

トランザクション定義にクライアント環境定義を指定します。この場合，TPBroker for C++のtsdefvalueコマンドで指定してください。定義キーは/OTS，定義パラメタはcompletion_process_envです。

tsdefvalue /OTS completion_process_env
    -a '環境変数名=指定値'，［'環境変数名=指定値',…］

トランザクション障害時のトランザクション回復プロセスに指定をする場合

トランザクション定義にクライアント環境定義を指定します。この場合，TPBroker for C++のtsdefvalueコマンドで指定してください。定義キーは/OTS，定義パラメタはrecovery_process_envです。

tsdefvalue /OTS recovery_process_env
    -a '環境変数名=指定値',［'環境変数名=指定値',…］

各UAPに個別の指定をする場合

各UAPの動作環境でクライアント環境定義を指定します。SET形式，SETENV形式など，動作環境の環境変数の設定方式に従ってください。

監視対象の各UAPに個別の指定をする場合

TPBroker for C++の各プロセス監視定義の定義ファイルに，クライアント環境定義を記述してください。

環境変数を指定するTPBroker for C++の定義を次の表に示します。

表6‒27　環境変数を指定するTPBroker for C++の定義

環境変数

トランザクション決着プロセス

トランザクション回復プロセス

各UAP

HiRDB_PDHOST※８

△※１※４

△※１※４

△※１※４

HiRDB_PDNAMEPORT※８

△※１※５

△※１※５

△※１※５

HiRDB_PDTMID※８

△※１※３※６

△※１※３※６

△※１※３※６

HiRDB_PDXAMODE※８

△※１※７

△※１※７

△※１※７

PDHOST

△※１※４

△※１※４

△※１※４

PDNAMEPORT

△※１※５

△※１※５

△※１※５

PDTMID※８

△※１※３※６

△※１※３※６

△※１※３※６

PDXAMODE※８

△※１※７

△※１※７

△※１※７

PDTXACANUM※８

△

△

△

PDCLTPATH

△

△

△

PDUSER

○

×

○

PDCWAITTIME

△

△

△

PDSWAITTIME

○

○

○

PDSQLTRACE

△

△

△

PDUAPERLOG

△

△

△

PDCLTAPNAME

△

△

△※２

PDSWATCHTIME

×

×

×

PDTRCMODE

△

△

△

PDUAPREPLVL

△

△

△

PDREPPATH

△

△

△

PDTRCPATH

△

△

△

PDSQLTRCOPENMODE

△

△

△

PDAUTOCONNECT

×

×

×

PDCWAITTIMEWRNPNT

△

△

△

PDAUTORECONNECT

×

×

×

PDRCCOUNT

×

×

×

PDRCINTERVAL

×

×

×

PDRCTIMING

×

×

×

PDKALVL

△

△

△

PDKATIME

△

△

△

PDSQLTEXTSIZE

△

△

△

PDSQLEXECTIME

△

△

△

PDRCTRACE

×

×

×

PDSQLTRCFMT

△

△

△

上記以外の環境変数

△

×

△

（凡例）

○：必要です。

△：任意です。必要に応じて指定してください。

×：不要です。

注※1

「トランザクション決着プロセス」，「トランザクション回復プロセス」，及び「各UAP」のそれぞれのクライアント環境定義は必ず同じ内容を指定してください。

注※2

各プロセスを識別できるように，プロセスごとに指定することをお勧めします。

注※3

複数のOLTPからX/Openに従ったAPIを使用して一つのHiRDBシステムをアクセスする場合，必ず指定してください。

注※4

HiRDB_PDHOSTを指定する場合は，HiRDB_PDHOSTに指定した値がPDHOSTに設定されるので，PDHOSTの指定は不要です。HiRDB_PDHOSTを指定しない場合は，PDHOSTを必ず指定してください。PDHOSTとHiRDB_PDHOSTの両方を指定した場合は，HiRDB_PDHOSTの指定を優先します。

なお，環境変数グループにPDHOSTを指定した場合は，環境変数グループのPDHOSTの指定が有効になります。

PDHOSTに指定する値の目安については，「PDHOSTにPDFESHOSTのホスト名を指定することによる通信先サーバの固定化（HiRDB/パラレルサーバ限定）」を参照してください。

注※5

HiRDB_PDNAMEPORTを指定する場合は，HiRDB_PDNAMEPORTに指定した値がPDNAMEPORTに設定されるので，PDNAMEPORTの指定は不要です。HiRDB_PDNAMEPORTを指定しない場合は，PDNAMEPORTを必ず指定してください。PDNAMEPORTとHiRDB_PDNAMEPORTの両方を指定した場合は，HiRDB_PDNAMEPORTの指定を優先します。

なお，環境変数グループにPDNAMEPORTを指定した場合は，環境変数グループのPDNAMEPORTの指定が有効になります。

注※6

HiRDB_PDTMIDを指定する場合は，HiRDB_PDTMIDに指定した値がPDTMIDに設定されるので，PDTMIDの指定は不要です。HiRDB_PDTMIDを指定しない場合は，PDTMIDを必ず指定してください。PDTMIDとHiRDB_PDTMIDの両方を指定した場合は，HiRDB_PDTMIDの指定を優先します。

注※7

HiRDB_PDXAMODEを指定する場合は，HiRDB_PDXAMODEに指定した値がPDXAMODEに設定されるので，PDXAMODEの指定は不要です。PDXAMODEとHiRDB_PDXAMODEの両方を指定した場合は，HiRDB_PDXAMODEの指定を優先します。

注※8

複数接続機能を使用する場合，これらの環境変数を接続先ごとに登録した環境変数グループに設定しても，環境変数の指定値は無効になります。また，Windows環境の場合，HiRDB.iniファイルに指定しても無効になります。これらの環境変数は，TPBroker for C++のシステム定義に指定した内容が有効になります。

(4)　TUXEDO下のUAPをクライアントとする場合

TUXEDO下のUAPをクライアントとする運用形態の場合，TUXEDOコンフィギュレーションファイル（UBBCONFIGファイル）のENVFILEパラメタで指定したファイルに，クライアント環境定義を指定してください。

環境変数の指定可否を次の表に示します。

表6‒28　環境変数の指定可否（TUXEDO下のUAPの場合）

環境変数

指定可否

HiRDB_PDHOST

×

HiRDB_PDNAMEPORT

×

HiRDB_PDTMID

×

HiRDB_PDXAMODE

×

PDHOST

○※１

PDNAMEPORT

○※１

PDTMID※４

△※１※３

PDXAMODE※４

○※１

PDTXACANUM

×

PDUSER

○

PDSWAITTIME

○

PDCLTAPNAME

△※２

PDSWATCHTIME

×

PDAUTORECONNECT

×

PDRCCOUNT

×

PDRCINTERVAL

×

PDRCTIMING

×

PDKALVL

×

PDKATIME

×

PDRCTRACE

×

上記以外の環境変数

△

（凡例）

○：必要です。

△：任意です。必要に応じて指定してください。

×：不要です。

注※1

「トランザクションマネジャサーバ」，「TUXEDOシステムのサーバ」，及び「各UAP」のそれぞれの環境変数は同じ内容にしてください。

PDHOSTに指定する値の目安については，「PDHOSTにPDFESHOSTのホスト名を指定することによる通信先サーバの固定化（HiRDB/パラレルサーバ限定）」を参照してください。

注※2

各プロセスを識別できるように，プロセスごとに指定することをお勧めします。

注※3

複数のOLTPからX/Openに従ったAPIを使用して一つのHiRDBシステムをアクセスする場合，必ず指定してください。

注※4

Windows環境の場合，HIRDB.iniファイルに指定しても無効になります。これらの環境変数は，TUXEDOコンフィギュレーションファイルのENVFILEパラメタで指定したファイルに指定した内容が有効になります。

(5)　TP1/EE下のUAPをクライアントとする場合（UNIX版限定）

TP1/EE下のUAPをクライアントとする運用形態の場合，クライアント環境定義はTP1/EEを実行する環境のOpenTP1のシステムサービス定義に指定してください。詳細は「OpenTP1下のUAPをクライアントとする場合」を参照してください。

なお，PDXAMODEは必ず指定してください。TP1/EEを実行するOpenTP1とPDXAMODEの指定値が異なる場合は，TP1/EEを実行するOpenTP1のユーザサービス定義にPDXAMODEを指定してください。

(6)　PDHOSTにPDFESHOSTのホスト名を指定することによる通信先サーバの固定化（HiRDB/パラレルサーバ限定）

PDHOSTに，PDFESHOSTのホスト名を指定すると，システムマネジャユニットに障害が発生しても，HiRDBサーバに接続できます。また，SQL実行先，PCキャンセル先，及びXA回復要求先の通信先サーバを一つに固定化できます。PCキャンセルとは，PDCWAITTIMEオーバー時のサーバ決着指示のことをいいます。また，XA回復とは，OLTP下のUAP使用時のトランザクション決着指示のことをいいます。なお，クライアントとサーバのバージョンの組み合わせによって，PDHOSTに指定できるホスト名は，システムマネジャのホスト名に限定されます。

通信先サーバを固定化する場合としない場合の違いを次の図に示します。

図6‒1　通信先サーバを固定化する場合としない場合の違い

適用基準：

通信先サーバを固定化する場合，次の条件を満たしている必要があります。

HiRDB/パラレルサーバである。

FESホストダイレクト接続，又は高速接続である。

次の表の，UAPの実行環境の推奨指定可否が○である。

UAPの実行環境

推奨指定可否

非OLTP下

1UAPが1接続，又は1UAPが複数の接続をする場合に，同一のPDFESHOSTを指定しているとき

○

1UAPが複数の接続をする場合に，それぞれ異なるPDFESHOSTを指定しているとき

×

OLTP下

単一プロセス（マルチスレッド）で動作するOLTP（TP1/EE）

OLTP下の全接続先が，同一のPDFESHOSTを指定している場合（接続先が同一の場合）※１

○

OLTP下の全スレッドが，それぞれ異なるPDFESHOSTを指定している場合※１

×

複数プロセスで動作するOLTP（OpenTP1，TUXEDO，TPBroker for C++，及びTP1/LiNK）

全UAPが，同一のPDFESHOSTを指定している場合※１

○

各UAPが，別々のPDFESHOSTを指定している場合※１

PDFESHOSTを指定したUAPのクライアント環境定義※２

PDFESHOSTを指定したUAPの全接続先が，同一のPDFESHOSTを指定している場合

○

PDFESHOSTを指定したUAPの全接続先が，それぞれ異なるPDFESHOSTを指定している場合

×

トランザクションマネジャ用のクライアント環境定義※３

×

（凡例）

○：PDHOSTにPDFESHOSTのホスト名を指定することをお勧めします。

×：PDHOSTにはシステムマネジャのホスト名を指定してください。

注※1

次の箇所に指定します。

OpenTP1又はTP1/EEの場合

ユーザサービス定義，ユーザデフォルト定義，又はシステム環境定義に指定する環境変数

TUXEDOの場合

トランザクションマネジャサーバ，TUXEDOシステムのサーバ，及び各UAPのクライアント環境定義

TPBroker for C++の場合

トランザクション定義（決着プロセス用と回復プロセス用），及び各UAPのクライアント環境定義

TP1/LiNKの場合

［ユーザサーバの環境変数］欄の［グローバル］欄，及び［ローカル］欄

複数接続機能を使用している場合

環境変数設定ファイル

注※2

次の箇所に指定します。

OpenTP1の場合

ユーザサービス定義，又はユーザデフォルト定義に指定する環境変数

TUXEDOの場合

各UAPのクライアント環境定義

TPBroker for C++の場合

トランザクション定義（決着プロセス用），及びUAPのクライアント環境定義

TP1/LiNKの場合

［ユーザサーバの環境変数］欄の［グローバル］欄，及び［ローカル］欄

複数接続機能を使用する場合

環境変数設定ファイル

注※3

次の箇所に指定します。

OpenTP1の場合

トランザクションサービス定義に指定する環境変数

TUXEDOの場合

トランザクションマネジャサーバ，及びTUXEDOシステムのサーバのクライアント環境定義

TPBroker for C++の場合

トランザクション定義（回復プロセス）

TP1/LiNKの場合

［トランザクションサービスの環境変数］欄

複数接続機能を使用する場合

環境変数設定ファイル

注意事項：

PDFESHOSTにポート番号を指定している場合，PDNAMEPORTには接続先のポート番号を接続してください。

6.6.3　クライアント環境定義の一覧

クライアント環境定義の一覧を次の表に示します。なお，各環境変数の詳細は「クライアント環境定義の設定内容」を参照してください。

●必ず指定する環境変数

太字表示されている環境変数は，HiRDBシステムの環境に関係なく必ず指定してください。太字表示以外の環境変数については，それぞれのHiRDBシステムの環境に合わせて指定してください。

表6‒29　クライアント環境定義の一覧

環境変数名

機能

環境変数の分類

PDHOST

接続するHiRDBサーバのホスト名を指定します。

システム構成※３

PDNAMEPORT

HiRDBサーバのポート番号を指定します。

PDFESHOST

フロントエンドサーバのホスト名を指定します。

PDSERVICEGRP

シングルサーバ又はフロントエンドサーバのサーバ名を指定します。

PDSRVTYPE

HiRDBサーバの種別を指定します。

PDSERVICEPORT

高速接続用のポート番号を指定します。

PDFESGRP

高速接続をする場合，接続するFESグループを指定します。

PDCLTRCVPORT

クライアントの受信ポート番号を指定します。

PDCLTRCVADDR

クライアントのIPアドレス又はホスト名を指定します。

PDTMID

複数のOLTPから一つのHiRDBサーバをアクセスする場合，それぞれのOLTPにユニークな識別子を指定します。

OLTP下のX/Openに従ったAPIを使用するクライアント※1

PDXAMODE

OLTPシステムと連携する場合に，トランザクションの移行機能を使用するかしないかを指定します。

PDTXACANUM

X/Openに従ったAPIを使用したUAPから同時実行する，最大トランザクション数を指定します。

PDXARCVWTIME

トランザクションが回復できない場合の待ち合わせ時間を指定します。

PDXATRCFILEMODE

X/Openに従ったAPIを使用した接続形態での，各種トレースファイル名の形式を指定します。

PDXAAUTORECONNECT

TP1/EEとの連携の場合に，自動再接続をするかどうかを指定します。

HiRDB_PDHOST

接続するHiRDBサーバのホスト名を指定します。

HiRDB_PDNAMEPORT

HiRDBサーバのポート番号を指定します。

HiRDB_PDTMID

複数のOLTPから一つのHiRDBサーバをアクセスする場合，それぞれのOLTPにユニークな識別子を指定します。

HiRDB_PDXAMODE

OLTPシステムと連携する場合に，トランザクションの移行機能を使用するかしないかを指定します。

PDUSER※４※5

認可識別子，及びパスワードを指定します。UNIX環境の場合は，この環境変数を省略できます。

ユーザ実行環境

PDCLTAPNAME

HiRDBサーバに対してアクセスする，UAPの識別情報（UAP識別子）を指定します。

PDCLTLANG

プリプロセサが処理する，UAPの記述に使われている文字コード種別を指定します。

PDLANG

HiRDBサーバの文字コード種別をチェックする場合に，HiRDBサーバの文字コード種別を指定します。

PDDBLOG

UAPを実行するときに，データベースの更新ログを取得するかしないかを指定します。

PDEXWARN

サーバから警告付きのリターンコードを受け取るかどうかを指定します。

PDSUBSTRLEN

1文字を表現する最大バイト数を指定します。

PDCLTCNVMODE

HiRDBサーバとHiRDBクライアントの文字コード種別が異なる場合，文字コードを変換するかどうかを指定します。

PDCLTGAIJIDLL

ユーザ定義外字変換DLLファイルの名称を指定します。

PDCLTGAIJIFUNC

ユーザ定義外字変換関数の名称を指定します。

PDCLTCNVUOCLIB

UOCによる文字コード変換をする場合，UOCのライブラリファイルの名称を指定します。

PDCLTCNVUOCFUNC

UOCによる文字コード変換をする場合，UOCの文字コード変換関数の名称を指定します。

PDCLTCNVBYTERATIO

UOCによる文字コード変換をする場合，１文字当たりのバイト数の比率を指定します。

PDCLTGRP

クライアントグループの接続枠保証機能を使用する場合，クライアントグループ名を指定します。

PDAUTORECONNECT

自動再接続機能を使用するかどうかを指定します。

PDRCCOUNT

自動再接続機能でのCONNECTのリトライ回数を指定します。

PDRCINTERVAL

自動再接続機能でのCONNECTのリトライ間隔を指定します。

PDRCTIMING

自動再接続機能での再接続契機を指定します。

PDAUTHTYPE

HiRDBクライアントがサーバへ接続するときの認証方式を指定します。

PDUAPENVFILE

UAPを個別の環境で実行する場合，実行する環境を定義したUAP環境定義ファイルを指定します。

PDDBBUFLRU

UAPがアクセスしたページをグローバルバッファにキャッシュするときの処理に，LRU方式を適用するかどうかを指定します。

PDHATRNQUEUING

クライアントでトランザクションキューイング機能を使用しない場合に指定します。

PDCLTBINDLOOPBACKADDR

HiRDBサーバとの通信で使用する受信ポートの生成時，ループバックアドレスでbind()するかどうかを指定します。

PDEXTDECCHECK

外部10進項目の入力データのチェック有無を指定します。

PDDEFAULTOPTION

クライアント環境定義及びプリプロセスオプションについて，省略時の動作を指定します。

PDIPCFILEDIR

接続するHiRDBサーバの通信情報ファイルディレクトリを指定します。

PDASTHOST

UAP実行時に接続する，HiRDB Control Manager - Agentのホスト名を指定します。

UAPからのコマンド実行

PDASTPORT

UAP実行時に接続する，HiRDB Control Manager - Agentのポート番号を指定します。

PDSYSTEMID

UAP実行時に接続する，HiRDB Control Manager - Agentが管理するHiRDBサーバのHiRDB識別子を指定します。

PDASTUSER※5

コマンドを実行するOSのユーザ名，及びパスワードを指定します。

PDCMDWAITTIME

クライアントがHiRDB Control Manager - Agentへ要求をしてから応答が返るまでの，クライアントの最大待ち時間を指定します。

PDCMDTRACE

UAP実行時にコマンドトレースを出力する場合，そのファイルの大きさを指定します。

PDIPC

プロセス間の通信方法を指定します。

プロセス間メモリ通信機能

PDSENDMEMSIZE

プロセス間メモリ通信機能を使用する場合，クライアントからサーバへデータを送るときのデータ格納領域サイズを指定します。

PDRECVMEMSIZE

プロセス間メモリ通信機能を使用する場合，クライアントがサーバからデータを受け取るときのデータ格納領域サイズを指定します。

PDCWAITTIME※４

HiRDBクライアントからHiRDBサーバへ要求をしてから，応答が戻ってくるまでのHiRDBクライアントの最大待ち時間を指定します。

システム監視

PDSWAITTIME※４

HiRDBサーバがHiRDBクライアントからの要求に対する応答を返してから，次にHiRDBクライアントから要求が来るまでのHiRDBサーバの最大待ち時間を指定します。

この時間監視は，トランザクション処理中の時間を対象とします。

PDSWATCHTIME

HiRDBサーバがHiRDBクライアントからの要求に対する応答を返してから，次にHiRDBクライアントから要求が来るまでのHiRDBサーバの最大待ち時間を指定します。

この時間監視は，トランザクション処理以外の時間を対象とします。

PDCWAITTIMEWRNPNT

SQL実行時間警告出力機能使用時に，SQL実行時間警告情報ファイルを出力する契機を，HiRDBクライアントの最大待ち時間に対する比率，又は時間で指定します。

PDKALVL

HiRDBクライアントからHiRDBサーバに対して，定期的にパケットを送信する機能を使用するかどうかを指定します。

PDKATIME

HiRDBクライアントからHiRDBサーバに対して，定期的にパケットを送信する間隔を指定します。

PDTIMEDOUTRETRY

HiRDBクライアントがHiRDBサーバと接続する場合に実行する，connect()システムコールでETIMEDOUTエラーが発生したときに，connect()システムコールをリトライする回数を指定します。

PDCONREFRCOUNT

HiRDBクライアントがHiRDBサーバと接続する場合に実行する，connect()システムコールでECONNREFUSEDエラーが発生したときに，connect()システムコールをリトライする回数を指定します。

PDCONREFRINTERVAL

HiRDBクライアントがHiRDBサーバと接続する場合に実行する，connect()システムコールでECONNREFUSEDエラーが発生したときに，connect()システムコールをリトライする間隔を指定します。

PDNBLOCKWAITTIME

HiRDBサーバ，HiRDBクライアント間のコネクション接続完了を監視する場合，ノンブロックモード時のコネクション確立監視時間を指定します。

PDCONNECTWAITTIME

HiRDBサーバとの接続時，HiRDBサーバから応答が戻ってくるまでのHiRDBクライアントの最大待ち時間を指定します。

PDCLTPATH

HiRDBクライアントが作成するSQLトレースファイル及びクライアントエラーログファイルの格納先ディレクトリを指定します。

トラブルシュート

PDSQLTRACE

UAPのSQLトレースを出力するSQLトレースファイルのサイズを，バイト単位で指定します。

PDUAPERLOG

UAPのエラーログを出力するクライアントエラーログファイルのサイズを，バイト単位で指定します。

PDERRSKIPCODE

特定のクライアントエラーログを出力しない場合に指定します。

PDPRMTRC

SQLトレースにパラメタ情報及び検索データを出力するかどうかを指定します。

PDPRMTRCSIZE

SQLトレースに出力するパラメタ情報及び検索データの最大データ長を指定します。

PDTRCMODE

SQLトレース以外のトラブルシュート情報を出力するかどうかを指定します。

PDUAPREPLVL

UAP統計レポートの出力情報を指定します。

PDREPPATH

PDCLTPATHで指定したディレクトリとは別のディレクトリに，UAP統計レポートを出力するかどうかを指定します。

PDTRCPATH

動的SQLトレースファイルの格納先ディレクトリを指定します。

PDSQLTRCOPENMODE

PDREPPATHを指定している場合，SQLトレースファイルのオープンモードを指定します。

PDSQLTEXTSIZE

SQLトレースに出力するSQL文のサイズを指定します。

PDSQLEXECTIME

SQLトレースにSQL実行時間を出力するかどうかを指定します。

PDRCTRACE

UAPの再接続トレースを出力するファイルのサイズを指定します。

PDWRTLNPATH

WRITE LINE文の値式の値を出力する，ファイルの格納先ディレクトリを指定します。

PDWRTLNFILSZ

WRITE LINE文の値式の値を出力する，ファイルの最大サイズを指定します。

PDWRTLNCOMSZ

WRITE LINE文の値式の値の合計サイズを指定します。

PDUAPEXERLOGUSE

拡張SQLエラー情報出力機能を使用するかどうかを指定します。

PDUAPEXERLOGPRMSZ

拡張SQLエラー情報出力機能を使用する場合，クライアントエラーログファイル及びSQLエラーレポートファイルに出力するパラメタ情報の最大データ長を指定します。

PDDNDPTRACE

ADO.NET 2.0に対応したHiRDBデータプロバイダ for .NET Frameworkで出力するメソッドトレースのファイルサイズを指定します。

PDSQLTRCFMT

SQLトレースの出力形式を指定します。

PDVWOPTMODE

アクセスパス情報ファイルを取得するかどうかを指定します。

アクセスパス表示ユティリティ用アクセスパス情報ファイル

PDTAAPINFPATH

アクセスパス情報ファイルをHiRDBクライアント側に出力する場合に，出力先ディレクトリを指定します。この指定がない場合は出力しません。

HiRDB SQL Tuning Advisor用アクセスパス情報ファイル

PDTAAPINFMODE

アクセスパス情報ファイルをHiRDBクライアント側に出力する場合に，アクセスパス情報ファイルのファイル名の形式を指定します。

PDTAAPINFSIZE

アクセスパス情報ファイルをHiRDBクライアント側に出力する場合に，アクセスパス情報ファイルのファイルサイズを指定します。

PDSTJTRNOUT

UAPに関する統計情報を，トランザクションごとに統計ログファイルに出力するかどうかを指定します。

UAPに関する統計情報の出力単位

PDLOCKLIMIT

一つのサーバに対してUAPから発行する排他要求の上限値を指定します。

排他制御

PDDLKPRIO

UAPのデッドロックプライオリティ値を指定します。

PDLOCKSKIP

無排他条件判定をするかどうかを指定します。

PDFORUPDATEEXLOCK

FOR UPDATE句を指定した（又は仮定された）SQLの排他オプションに，WITH EXCLUSIVE LOCKを適用するかどうかを指定します。

PDISLLVL

SQL文のデータ保証レベルを指定します。

SQL関連

PDSQLOPTLVL※5

データベースの状態を考慮して，最も効率的なアクセスパスを決定するための最適化の方法（SQL最適化オプション）を指定します。

PDADDITIONALOPTLVL※5

データベースの状態を考慮して，最も効率的なアクセスパスを決定するための最適化の方法（SQL拡張最適化オプション）を指定します。

PDHASHTBLSIZE

SQLの最適化で，ハッシュジョイン，副問合せのハッシュ実行を適用する場合，ハッシュ表サイズを指定します。

PDDFLNVAL

表中のデータを埋込み変数に取り出す場合，取り出した値がナル値のときに埋込み変数に既定値を設定するかどうかを指定します。

PDAGGR

GROUP BY処理に使用するメモリ量を決定するため，サーバごとに発生するグループ数の最大値を指定します。

PDCMMTBFDDL

操作系SQLを実行していたトランザクションで定義系SQLを実行する場合，自動的にコミットしてから定義系SQLを実行するかどうかを指定します。

PDPRPCRCLS

開いているカーソルで使用しているSQL識別子を再度PREPARE文で使用する場合，開いているカーソルを自動的にクローズするかどうかを指定します。

PDAUTOCONNECT

HiRDBと接続していない状態でSQL文を実行した場合，自動的に接続するかどうかを指定します。

PDDDLDEAPRPEXE

先行トランザクションの前処理結果を無効にし，定義系トランザクションの実行を優先します。

PDDDLDEAPRP

閉じているホールダブルカーソルで使用している表の定義情報を，トランザクション間に他UAPからの変更を許可するかどうかを指定します。

PDLCKWAITTIME

排他要求が待ち状態になってから，解除されるまでを監視する最大時間を指定します。

PDCURSORLVL

カーソルを使用した検索をする場合に，HiRDBサーバに対してのカーソルオープン・クローズの要求を，自動で行うかどうかを指定します。

PDDELRSVWDFILE

SQL予約語削除機能を使用する場合に，SQL予約語削除ファイル名を指定します。

PDCALCMDWAITTIME

CALL COMMAND文によってコマンド，又はユティリティを開始してから終了するまでの，HiRDBクライアントの最大待ち時間を指定します。

PDSTANDARDSQLSTATE

SQLSTATEの値を詳細に出力するかどうかを指定します。

PDBLKF

HiRDBサーバからHiRDBクライアントに検索結果を転送するときの，一回の転送処理で送られる行数を指定します。

ブロック転送機能

PDBINARYBLKF

定義長が32,001バイト以上のBINARY型の選択式がある表を検索する場合，ブロック転送機能を適用するかどうかを指定します。

PDBLKBUFFSIZE

ブロック転送機能で使用する，サーバ，クライアント間の通信バッファのサイズを指定します。

PDBINDRETRYCOUNT

UNIXドメインでのbindシステムコールでEADDRINUSEが返却された場合のリトライ回数を指定します。

HiRDBの通信処理

PDBINDRETRYINTERVAL

UNIXドメインでのbindシステムコールでEADDRINUSEが返却された場合のリトライ間隔を指定します。

PDDBACCS

インナレプリカ機能を使用している場合，カレントRDエリアではないRDエリアをアクセスしたいときに，そのRDエリアの世代番号を指定します。

インナレプリカ機能

PDDBORGUAP

オンライン再編成閉塞のオリジナルRDエリアに対してUAPを実行する場合に指定します。

更新可能なオンライン再編成

PDSPACELVL

データの格納，比較，及び検索時の，空白変換レベルを指定します。

データの空白変換

PDCLTRDNODE

XDM/RD E2接続機能使用時に，接続するXDM/RD E2のデータベース識別子を指定します。

XDM/RD E2接続機能

PDTP1SERVICE

XDM/RD E2接続機能使用時に，XDM/RD E2にOpenTP1のサービス名を通知するかどうかを指定します。

PDRDCLTCODE

XDM/RD E2接続機能使用時に，クライアントで使用する文字コード種別を指定します。

PDCNSTRNTNAME

参照制約，及び検査制約を定義する場合，制約名定義の位置を指定します。

参照制約及び検査制約

PDTMPTBLRDAREA※5

一時表及び一時インデクスを格納するRDエリアの候補を指定します。

一時表

PDBESCONHOLD

バックエンドサーバ接続保持機能を使用するかどうかを指定します。

バックエンドサーバ接続保持機能

PDBESCONHTI

バックエンドサーバ接続保持機能を使用する場合，バックエンドサーバ接続保持期間を指定します。

PDODBSTATCACHE

ODBC関数のSQLColumns()関数，SQLStatistics()関数で，1度発行して取得したカラム情報，又はインデクス情報をキャッシュするかどうかを指定します。

ODBC関数

PDODBESCAPE

カタログ系のODBC関数の検索で，パターン文字列に対してESCAPE文字（'＆'）を指定するかどうかを指定します。

PDGDATAOPT

ODBC関数のSQLGetData関数で，データを取得済みの列に対して，繰り返しデータを取得する場合に指定します。

PDODBLOCATOR

DBアクセス部品を使用して，BLOB型，又はBINARY型の列を検索する場合に，位置付け子機能を使用してデータを分割取得するかどうかを指定します。DBアクセス部品とは，ODBCドライバ，OLE DBプロバイダ，及びHiRDBデータプロバイダ for .NET Frameworkを示します。

PDODBSPLITSIZE

PDODBLOCATOR=YESを指定している場合，分割取得のサイズを指定します。

PDODBCWRNSKIP

ODBC，OLE DB接続時のワーニングを回避するかどうかを指定します。

PDJETCOMPATIBLE

ODBC3.5ドライバを，ODBC3.5の規格ではなくMicrosoft Access互換モードで動作させるかどうかを指定します。

PDODBGINFOSUPPRESS

ODBC関数のSQLGetInfoW()関数使用時に発生するエラーを回避するために指定します。

PDODBSTANDARDARGSIZE

64ビットモードで動作するODBC3.5ドライバについて，一部のODBC関数の引数に指定されたポインタが指すバッファを4バイト整数として扱うか，8バイト整数として扱うかを指定します。

PDODBSTANDARDSQLSTATE

ODBC3.5ドライバからODBC規格に準拠したSQLSTATEを返却するかどうかを指定します。

PDODBSTANDARDDESCCOL

ODBC3.5ドライバでのSQLDescribeCol関数の実行時に，ODBC規格に準拠した値を返却するかどうかを指定します。

PDODBSTANDARDGTYPEINFO

ODBC3.5ドライバのSQLGetTypeInfo関数で，ODBC規格に準拠した値を返却するかどうかを指定します。

PDPLGIXMK

プラグインインデクスの遅延一括作成を使用するかどうかを指定します。

プラグイン

PDPLUGINNSUB※2

詳細については，各プラグインマニュアルを参照してください。

PDPLGPFSZ

プラグインの遅延一括作成用のインデクス情報ファイルの初期容量を指定します。

PDPLGPFSZEXP

プラグインの遅延一括作成用のインデクス情報ファイルの増分値を指定します。

PDHSICOPTIONS

HSICを使用する運用の場合に，HSICで集積する情報を指定します。

HSIC限定

PDJDBFILEDIR

Type4 JDBCドライバでのExceptionトレースログ及び不正電文トレースのファイル出力先を指定します。

JDBCドライバ

PDJDBFILEOUTNUM

Type4 JDBCドライバでのExceptionトレースログのファイルへの出力数を指定します。

PDJDBONMEMNUM

Type4 JDBCドライバでのExceptionトレースログのメモリ内取得情報数を指定します。

PDJDBTRACELEVEL

Type4 JDBCドライバでのExceptionトレースログのトレース取得レベルを指定します。

PDJDBFILESIZE

Type4 JDBCドライバでのExceptionトレースログの最大ファイルサイズを指定します。

PDDNDPCOMPATIBLE

ADO.NET2.0に対応したHiRDBデータプロバイダ for .NET Frameworkのメソッドが，.NET Frameworkの規格に準拠した仕様とするか，又はHiRDB独自の仕様とするかを指定します。

ADO.NET

注※1

OLTP下のX/Openに従ったAPIを使用して，HiRDBサーバをアクセスするクライアントの場合だけ指定します。そのほかの場合は，指定しても無効になります。

各環境変数が必要かどうかについては，「OLTP下のX/Openに従ったAPIを使用したUAPをクライアントとする場合の指定方法」を参照してください。

なお，複数接続機能を使用する場合，接続先ごとに環境変数のグループ登録をしても，環境変数の指定値は無効になります。

注※2

プラグイン用に設定する環境変数です。この環境変数の設定内容については，クライアントライブラリではチェックされません。また，SQLトレースにも情報は出力されません。

注※3

システム構成に関する環境変数には，HiRDBサーバと接続するときに必要な情報を指定します。HiRDBサーバとの接続形態によっては，環境変数が指定できたりできなかったりします。HiRDBサーバとの接続形態については，「HiRDBサーバと接続するための環境変数と接続形態との関係」を参照してください。

注※4

CALL COMMAND文のENVIRONMENTオペランドに指定できます。

注※5

指定値に引用符（ " ）で囲む値を含む場合の注意事項を次に示します。

UNIXのシェルでOS環境変数にこのクライアント環境変数を指定する場合は，指定値全体をアポストロフィ（ ' ）で囲む必要があります。

sh（ボーンシェル）での指定例

export PDTMPTBLRDAREA=’”rdtmp01”,”rdtmp02”’

HiRDBへの接続時に使用するHiRDB.ini，又は環境変数グループ（ファイル登録）にこのクライアント環境変数を指定する場合は，指定値全体をアポストロフィ（ ' ）で囲む必要があります。ただし，Type4 JDBCドライバを使用する場合，その必要はありません。

なお，環境変数グループ（レジストリ登録）にこのクライアント環境変数を指定する場合は，指定値をアポストロフィ（ ' ）で囲むとエラーになります。

HiRDB.iniでの指定例

PDTMPTBLRDAREA=’”rdtmp01”,”rdtmp02”’

UNIXのシェルでJavaの-Dオプションにこのクライアント環境変数に対応するシステムプロパティを指定する場合は，指定値全体をアポストロフィ（ ' ）で囲む必要があります。

Javaコマンドでの指定例

java -DHiRDB_for_Java_PDTMPTBLRDAREA=

’”rdtmp01”,”rdtmp02”’ sample

WindowsのコマンドプロンプトでJavaの-Dオプションにこのクライアント環境変数に対応するシステムプロパティを指定する場合は，RDエリア名を¥"で囲んで指定値全体を引用符（ " ）で囲む必要があります。

Javaコマンドでの指定例

java -DHiRDB_for_Java_PDTMPTBLRDAREA=

”¥”rdtmp01¥”,¥”rdtmp02¥”” sample

6.6.4　クライアント環境定義の設定内容

(1)　PDHOST=HiRDBサーバのホスト名［，予備系HiRDBサーバのホスト名］

　　　〜<識別子>((最大511バイト))

接続するHiRDBサーバのホスト名を指定します。

HiRDB/シングルサーバの場合はシングルサーバのサーバマシンのホスト名を，HiRDB/パラレルサーバの場合はシステムマネジャのサーバマシンのホスト名を指定します。また，PDFESHOSTを指定している場合は，PDFESHOSTのホスト名を指定できます。PDFESHOSTのホスト名を指定した場合，システムマネジャユニットに障害が発生しても，HiRDBサーバに接続できます。

ホスト名以外にも，FQDN，及びIPアドレスでも指定できます。指定方法を次に示します。

ホスト名：

システム共通定義のpdunit -xオペランドで指定したホスト名を指定します。

（指定例）

PDHOST=host1

FQDN：

HiRDBサーバのホスト名とドメイン名とを，ピリオドで結んで指定します。

（指定例）

PDHOST=host1.soft.hitachi.co.jp

IPアドレス：

IPアドレスは，バイトごとにピリオドで区切られた10進数で指定します。

（指定例）

PDHOST=172.18.131.34

《IPアドレスを引き継ぐ系切り替えをする場合》

UNIX版の場合

現用系のホスト名を指定してください。

Windows版の場合

MSFCのネットワーク名に登録した仮想ネットワーク名を指定してください。仮想ネットワークについては，マニュアル「HiRDB システム運用ガイド」を参照してください。

《IPアドレスを引き継がない系切り替えをする場合》

現用系及び予備系の二つのホスト名を指定してください。現用系のホスト名だけを指定すると，系が切り替わった後に，この環境変数の指定を新しく実行系になったホスト名に変更する必要があります。

《OLTP下でX/Openに従ったアプリケーションプログラムをクライアントとし，システム環境定義でHiRDB_PDHOSTを指定している場合》

HiRDB_PDHOSTの指定を優先します。PDHOSTの設定値はHiRDB_PDHOSTで指定した値に置き換わります。

《FQDNを指定する場合の規則》

バージョン05-03より前のHiRDBサーバと接続する場合は，FQDNを指定しないでください。指定した場合，クライアントの最大待ち時間（PDCWAITTIME）経過後，HiRDBサーバへのキャンセル処理ができないでサーバプロセスが残ることがあります。

《システム共通定義のpdunit -xオペランドにループバックアドレスを指定している場合》

システム共通定義のpdunit -xオペランドにループバックアドレスを指定している場合は，この環境変数にも同じループバックアドレスを，IPアドレス形式で指定してください。

(2)　PDNAMEPORT=HiRDBサーバのポート番号

　　　〜<符号なし整数>((5001〜65535))《20000》

接続するHiRDBサーバのポート番号を指定します。PDHOSTに指定したホストのサーバマシンの，アクセスするHiRDBサーバのポート番号を指定してください。

マルチHiRDBの場合，それぞれのHiRDBサーバでポート番号が異なります。したがって，接続するHiRDBサーバのポート番号を指定してください。

《OLTP下でX/Openに従ったアプリケーションプログラムをクライアントとし，システム環境定義でHiRDB_PDNAMEPORTを指定している場合》

HiRDB_PDNAMEPORTの指定を優先します。PDNAMEPORTの設定値はHiRDB_PDNAMEPORTで指定した値に置き換わります。

(3)　PDFESHOST=フロントエンドサーバのホスト名［：フロントエンドサーバがあるユニットのポート番号］［，予備系フロントエンドサーバのホスト名［：予備系フロントエンドサーバがあるユニットのポート番号］］

　　　〜<識別子>((最大523バイト))

この環境変数は，HiRDB/パラレルサーバに関するものです。

マルチフロントエンドサーバの場合に，接続するHiRDBサーバのフロントエンドサーバのホスト名を指定します。また，システム定義のpdunitで-p ポート番号を指定しているホストへ接続する場合（系切り替え機能を使用している場合）は，そのポート番号を指定する必要があります。

省略した場合，接続するフロントエンドサーバはシステムマネジャが決定します。システムマネジャが決定するフロントエンドサーバには，回復不要FESも含まれます。

ホスト名以外にも，FQDN，及びIPアドレスでも指定できます。指定方法を次に示します。

ホスト名：

システム共通定義のpdunit -xオペランドで指定したホスト名を指定します。

（指定例）

PDFESHOST=host1

FQDN：

HiRDBサーバのホスト名とドメイン名とを，ピリオドで結んで指定します。

（指定例）

PDFESHOST=host1.soft.hitachi.co.jp

IPアドレス：

IPアドレスは，バイトごとにピリオドで区切られた10進数で指定します。

（指定例）

PDFESHOST=172.18.131.34

《IPアドレスを引き継ぐ系切り替えをする場合》

UNIX版の場合

現用系のホスト名を指定してください。

Windows版の場合

MSFCのネットワーク名に登録した仮想ネットワーク名を指定してください。仮想ネットワークについては，マニュアル「HiRDB システム運用ガイド」を参照してください。

《IPアドレスを引き継がない系切り替えをする場合》

現用系，及び予備系の二つのホスト名を指定してください。現用系のホスト名だけを指定すると，系が切り替わった後に，この環境変数の指定を新しく実行系になったホスト名に変更する必要があります。

《FQDNを指定する場合の規則》

バージョン05-03より前のHiRDBサーバと接続する場合は，FQDNを指定しないでください。指定した場合，クライアントの最大待ち時間（PDCWAITTIME）経過後，HiRDBサーバへのキャンセル処理ができないでサーバプロセスが残ることがあります。

《ポート番号を省略する場合の規則》

ポート番号を省略すると，PDNAMEPORTで指定したポート番号が仮定されます。予備系フロントエンドサーバがあるホストのポート番号を省略した場合も，PDNAMEPORTで指定したポート番号が仮定されます。

《ほかの環境変数との関係》

マルチフロントエンドサーバの場合にコネクトするフロントエンドサーバをクライアントユーザで決定するとき，又はPDSERVICEPORTを指定するときは，この環境変数を必ず指定します。

この環境変数を指定するときは，PDSERVICEGRPも指定してください。

《留意事項》

X/Open XAインタフェースを使用するプログラムから回復不要FESに接続した場合，そのプログラムからはデータベースの参照，更新ができません。この場合，PDFESHOST及びPDSERVICEGRPを指定して，必ず回復不要FESでないフロントエンドサーバに接続してください。

マルチフロントエンドサーバの場合，接続先のフロントエンドサーバに負荷が集中しないようにするために，PDFESHOSTに指定するホスト名は均等になるようにしてください。

PDFESHOSTに指定したホスト名を，PDHOSTにも指定できます。この場合，システムマネジャユニットに障害が発生しても，HiRDBサーバに接続できます。

反映側Datareplicatorの同期点処理方式に二相コミット方式を利用（反映システム定義のcommitment_methodオペランドにfxa_sqleを指定）した反映処理を実行する場合，反映側HiRDBの回復不要FESに接続すると，反映処理が失敗します。この場合，反映側Datareplicatorの環境変数にPDFESHOST及びPDSERVICEGRPを指定して，必ず回復不要FESでないフロントエンドサーバに接続してください。

(4)　PDSERVICEGRP=サーバ名

　　　〜<文字列>((最大30バイト))

接続するHiRDBサーバの，シングルサーバ名又はフロントエンドサーバ名を指定します。

HiRDB/パラレルサーバでマルチフロントエンドサーバの場合，接続するフロントエンドサーバのサーバ名を指定してください。

《ほかの環境変数との関係》

同時にPDSERVICEPORTを指定することで，HiRDBサーバへの接続時間を短縮できます（高速接続機能）。

HiRDB/パラレルサーバの場合，PDFESHOSTも指定してください。

《留意事項》

X/Open XAインタフェースを使用するプログラムから回復不要FESに接続した場合，そのプログラムからはデータベースの参照，更新ができません。この場合，PDSERVICEGRP及びPDFESHOSTを指定して，必ず回復不要FESでないフロントエンドサーバに接続してください。

反映側Datareplicatorの同期点処理方式に二相コミット方式を利用（反映システム定義のcommitment_methodオペランドにfxa_sqleを指定）した反映処理を実行する場合，反映側HiRDBの回復不要FESに接続すると，反映処理が失敗します。この場合，反映側Datareplicatorの環境変数にPDSERVICEGRP及びPDFESHOSTを指定して，必ず回復不要FESでないフロントエンドサーバに接続してください。

(5)　PDSRVTYPE={WS｜PC}

接続するHiRDBサーバのサーバ種別を指定します。

WS：

HiRDBサーバがHP-UX版，又はAIX版の場合に指定します。

PC：

HiRDBサーバがLinux版，又はWindows版の場合に指定します。

(6)　PDSERVICEPORT=高速接続用のポート番号［，予備系の高速接続用ポート番号］

　　　〜<符号なし整数>((5001〜65535))

高速接続機能を使用する場合の高速接続用のポート番号を指定します。高速接続用のポート番号とは，システム定義に指定するスケジューラプロセスのポート番号のことです。スケジューラプロセスのポート番号を指定するシステム定義のオペランドを次に示します。

pd_service_portオペランド

pd_scd_portオペランド

pdunitオペランドの-sオプション

各オペランドについては，マニュアル「HiRDB システム定義」を参照してください。

HiRDBサーバ側にファイアウォールやNATが設置されている場合は，このオペランドを指定してください。ファイアウォールやNATが設置されている場合の設定については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

また，マルチフロントエンドサーバの場合，接続するフロントエンドサーバの高速接続用のポート番号を指定してください。

なお，接続するフロントエンドサーバが固定されるため，サーバ負荷が分散されるように接続先を決定してください。

《利点》

この環境変数を指定することで，HiRDBサーバへの接続時間を短縮できます。

《ほかの環境変数との関係》

この環境変数を指定する場合，次に示す環境変数も必ず指定してください。また，HiRDBサーバがWindows，又はLinuxの場合，環境変数PDSRVTYPEにPCを指定してください。

＜HiRDB/シングルサーバの場合＞

PDHOST

PDNAMEPORT

PDSERVICEGRP

＜HiRDB/パラレルサーバの場合＞

PDHOST

PDNAMEPORT

PDFESHOST

PDSERVICEGRP

《留意事項》

相互系切り替えの系切り替え機能を使用していて，システム定義のpd_service_portオペランドでそれぞれ異なるポート番号を指定している場合，予備系の高速接続用ポート番号も併せて指定してください。

広域LANを経由してHiRDBサーバに接続する環境で通信障害が発生した場合，システムマネジャプロセスが影響を受けて，HiRDBへの接続要求を多数同時に受け付けられないおそれがあります。そのため，広域LANを経由して接続するシステムの場合は，この環境変数を指定することをお勧めします。

(7)　PDFESGRP=FESグループ［，切替FESグループ［，切替FESグループ］…］

　　　〜<文字列>((最大1024バイト))

この環境変数は，HiRDB/パラレルサーバで，高速接続をする場合に指定します。また，システム定義に次のオペランドを指定している必要があります。

pd_service_portオペランド

pd_scd_portオペランド

pdunitオペランドの-sオプション

高速接続をする場合，接続するFESグループを指定します。また，マルチフロントエンドサーバ構成の場合，接続先のFESグループと，そのFESグループの障害時に接続を切り替える切替FESグループを指定します。

FESグループと切替FESグループに指定する内容を次に示します。

FESグループ：

高速接続の接続先（PDFESHOST，PDSERVICEGRP，及びPDSERVICEPORT）をまとめて記述する指定方法のことをいいます。それぞれの接続先はコロン（：）で区切って指定します。指定例を次に示します。

host1:fes1:20001

なお，PDFESHOSTには二つ（現用系と予備系）のホスト名を指定できますが，一つのFESグループには一つのホスト名しか指定できません。同様に，PDSERVICEPORTには二つのポート番号を指定できますが，一つのFESグループには一つのポート番号しか指定できません。

切替FESグループ：

マルチフロントエンドサーバ構成の場合，接続先のFESグループのフロントエンドサーバに障害が発生したとき，接続を切り替えるFESグループのことをいいます。切替FESグループを指定した場合に障害が発生すると，切替FESグループに接続を切り替えます。切替FESグループを複数指定した場合は，指定した順番で接続を切り替えます。

切替FESグループの指定方法は，FESグループと同じです。

《留意事項》

この環境変数を指定した場合，PDFESHOST，PDSERVICEGRP，及びPDSERVICEPORTの指定は無効になります。

切替FESグループを指定する場合，サーバ障害，及び接続ユーザ数オーバーで接続先を切り替えるため，一時的に切替FESグループ側の接続数が増えることがあります。そのため，切替FESグループ側のpd_max_usersオペランドの値を見直す必要があります。

切替FESグループを指定する場合，指定したすべての切替FESグループで障害が発生しているとき，又は接続ユーザ数オーバーが発生しているときは，UAPにエラーを返却するのに時間が掛かることがあります。

切替FESグループを指定した場合で，複数のFESへの接続がすべてエラーとなったときは，最後に接続を試みたFESのエラー情報がUAPに返却されます。

《使用例》

FESグループを一つだけ指定する場合：

[説明]

FESグループを一つだけ指定した場合，ホストhost1のフロントエンドサーバfes1にだけ接続します。

FESグループを一つ，切替FESグループを一つ指定する場合：

[説明]

1の接続でエラーとなった場合，2で接続をします。2もエラーとなった場合は，UAPにエラーを返却します。

FESグループを一つ，切替FESグループを複数指定する場合：

[説明]

1の接続でエラーとなった場合，2で接続をします。以降2，3，4と接続をして，すべての接続がエラーとなった場合は，UAPにエラーを返却します。

(8)　PDCLTRCVPORT=クライアントの受信ポート番号

　　　〜<符号なし整数>((0，5001〜65535，5001〜65535−5001〜65535))《0》

HiRDBクライアントがHiRDBサーバと通信する場合の，受信ポート番号又は受信ポート番号の範囲を指定します。

この環境変数を省略した場合，自動的にOSによって空いているポート番号が割り当てられます。したがって，通常時はこの環境変数を指定する必要はありません。

《指定方法》

受信ポート番号の指定例を次に示します。

ポート番号を一つ指定する場合

　10000−10000，又は10000

ポート番号の範囲を指定する場合

　10000−10500

なお，0を指定した場合は，この環境変数を指定しないことになります。

《利点》

HiRDBサーバとHiRDBクライアントの間にファイアウォールが設定されていて，ファイアウォールを通過できる受信ポート番号が限られている場合，この環境変数を指定することでファイアウォールを通過するようにできます。

《留意事項》

この環境変数に受信ポート番号の範囲を指定した場合，HiRDBクライアントが指定した範囲で空いているポート番号を自動的に割り当てます。指定した範囲で空いているポート番号がない場合はエラーとなります。

HiRDBクライアントは，HiRDBサーバへの一回の接続で一つのポート番号を使用します。したがって，次のような場合には，一つのUAPで複数のポート番号を使用することになります。

・ODBCで複数の接続を使用する場合

・複数接続機能を使用している場合

同時に複数のUAPを実行する場合，一つのポート番号は一つのUAPでしか使用できません。したがって，同時に実行する複数のUAPに対して，同じポート番号を含む範囲を指定すると，ポート番号の割り当てが競合する可能性があります。この場合，ポート番号が不足しないように，使用するポート番号の個数の最大値より大きな個数のポート番号を含む範囲を指定してください。

指定する受信ポート番号は，OSが自動的に割り当てるポート番号の範囲と重複しないようにしてください。OSが自動的に割り当てるポート番号の範囲は，OSごとに異なります。

ODBCでMicrosoft Accessなどを経由している場合は，暗黙的にHiRDBサーバと複数接続します。

多数（10個程度以上）のポート番号を含む範囲を指定する場合は，その範囲で実際に使用されるポート番号の数に対して20%程度の余裕を持たせてください。余裕がないと，空いているポート番号を探す処理で効率が低下します。

HiRDBクライアント以外のプログラムが使用しているポート番号は，HiRDBクライアントでは使用できません。

HiRDBクライアントが使用しているポート番号は，HiRDBクライアント以外のプログラムでは使用できません。この環境変数に指定した範囲内のポート番号を固定的に使用するサービスがある場合，そのサービスを起動できなくなる可能性があります。

HiRDBクライアント用にファイアウォールを通過できるように設定されたポート番号が，HiRDBクライアント以外のプログラムから不正に使用されないように，ファイアウォールの内側のプログラムを管理してください。

(9)　PDCLTRCVADDR=｛クライアントのIPアドレス｜クライアントのホスト名｝

　　　〜<符号なし整数>又は<識別子>((最大255バイト))

HiRDBクライアントのホストに複数の通信経路が設定されている場合，HiRDBサーバと通信をするための通信経路を特定したいときに，その通信経路に対応するIPアドレス，FQDN，又はホスト名を指定します。指定方法を次に示します。

IPアドレス：

バイトごとにピリオドで区切られた10進数で指定します。

（指定例）

PDCLTRCVADDR=172.18.131.34

FQDN：

HiRDBクライアントのホスト名とドメイン名とを，ピリオドで結んで指定します。

（指定例）

PDCLTRCVADDR=host1.soft.hitachi.co.jp

《留意事項》

この環境変数を省略した場合は，クライアントマシンの標準ホスト名に対応するIPアドレスが仮定されます。クライアントマシンの標準ホスト名は，hostsファイル又はDNSなどに255バイト以内で登録してください。標準ホスト名がhostsファイル又はDNSなどに登録されていない場合はエラーになります。ただし，HiRDB/シングルサーバで，HiRDBクライアントとHiRDBサーバを同一マシンで構成している場合に，標準ホスト名がhostsファイル又はDNSなどに登録されていないときは，HiRDBサーバのホスト名のIPアドレスが仮定されます。

この環境変数に不正なIPアドレス又はホスト名を指定した場合，HiRDBサーバへのCONNECT時にHiRDBサーバからの応答が受け付けられないため，5分間のタイマ監視後にエラー（SQLCODE　-732）となります。

次の場合は，PDCLTRCVADDRの指定は無効になります。

・システム定義のpd_change_clt_ipaddrオペランドに1を指定している場合

・環境変数PDIPCにMEMORYを指定している場合

PDCLTRCVADDRとPDHOSTの指定値の組み合わせと，使用されるクライアントのIPアドレスを次に示します。

PDCLTRCVADDRの指定値

PDHOST

ループバックアドレス

ローカルIPアドレス

別マシンのIPアドレス

ループバックアドレス

PDCLTRCVADDRの指定値

ローカルIPアドレス

指定なし

hostsファイルへの標準ホストの登録あり

hostsファイルの標準ホスト

hostsファイルへの標準ホストの登録なし

Type4 JDBCドライバ

PDHOSTの指定値

KFPZ02444-Eエラー

KFPZ02444-Eエラー

上記以外

PDHOSTの指定値

PDHOSTの指定値

KFPZ02444-Eエラー

(10)　PDTMID=OLTP識別子

　　　〜<識別子>((4文字))

複数のOLTPからX/Openに従ったAPIを使用して一つのHiRDBサーバをアクセスする場合，それぞれのOLTPにユニークな識別子を指定します。

なお，この環境変数の指定で次に示す条件のどれかに該当する場合，どのOLTPからのトランザクションであるかが識別されないため，OLTP内でシステムダウンやトランザクション異常が発生すると，トランザクション決着の同期が合わなくなります。

複数のOLTPからアクセスする運用形態で，この環境変数を省略した場合

複数のOLTPからアクセスする運用形態で，OLTPごとに指定する識別子がユニークでない場合

一つのOLTP内でOLTP識別子が同一でない場合

《OLTP下でX/Openに従ったアプリケーションプログラムをクライアントとし，システム環境定義でHiRDB_PDTMIDを指定している場合》

HiRDB_PDTMIDの指定を優先します。PDTMIDの設定値はHiRDB_PDTMIDで指定した値に置き換わります。

(11)　PDXAMODE={0｜1}

この環境変数は，OLTP下のX/Openに従ったAPIを使用したUAPと連携する場合に，トランザクションの移行機能を使用するかしないかを指定します。

0：トランザクションの移行機能を使用しません。

1：トランザクションの移行機能を使用します。

なお，この環境変数の指定値については，HiRDB管理者の指示に従ってください。トランザクションの移行機能については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

《OLTP下でX/Openに従ったアプリケーションプログラムをクライアントとし，システム環境定義でHiRDB_PDXAMODEを指定している場合》

HiRDB_PDXAMODEの指定を優先します。PDXAMODEの設定値はHiRDB_PDXAMODEで指定した値に置き換わります。

《OpenTP1と連携している場合》

OpenTP1のtrnstringオペランドとPDXAMODEの指定を合わせる必要があります。

《TPBroker for C++と連携している場合》

TPBroker for C++のトランザクションの決着は，UAPとは異なるトランザクション決着プロセスを使用します。このため，PDXAMODEには1を指定する必要があります。0を指定した場合，UAPのトランザクションは決着できません。

《TUXEDOと連携している場合》

TUXEDOのグローバルトランザクションの決着は，UAPとは異なるトランザクションマネジャサーバ（TMS）を使用します。このため，PDXAMODEには1を指定してください。0を指定した場合，UAPのトランザクションは決着できません。

《TP1/EEと連携している場合（UNIX版限定）》

PDXAMODEには0を指定してください。省略した場合，及び1を指定した場合，トランザクションを決着できなくなることがあります。

(12)　PDTXACANUM=1プロセス当たりのトランザクション最大同時実行数

　　　〜＜符号なし整数＞((1〜2147483647))《20》

マルチスレッド対応のX/Openに従ったAPIを使用したUAP，又はX/Openに従ったAPIの複数接続機能を使用したUAPからHiRDBをアクセスする場合，1プロセス当たりに同時実行できる最大トランザクション数を指定します。

《見積もり方法》

指定値は，次の計算式から見積もってください。

指定値＝(該当するプロセスで発生する可能性があるトランザクション数)
　　　　×（該当するプロセスでアクセスする可能性があるHiRDB数）

TP1/EEと連携している場合：

TP1/EEの回復スレッド及び監視スレッドのスレッド数も見積もりに加えてください。

指定値＝(該当するプロセスで発生する可能性があるトランザクション数
　　　　＋回復スレッド及び監視スレッドのスレッド数)
　　　　×（該当するプロセスでアクセスする可能性があるHiRDB数）

(13)　PDXARCVWTIME=トランザクションが回復できない場合の待ち合わせ時間

　　　〜<符号なし整数>((0〜270))《2》（単位：秒）

X/Openに従ったAPIでHiRDBにアクセスするOpenTP1で，OpenTP1のトランザクション回復プロセス，リソースマネジャ監視プロセスでHiRDBに接続できない場合，又はHiRDBがトランザクションを回復できない場合，次にHiRDBへの接続要求をするまでの時間を指定します。

0を指定した場合は，HiRDBのトランザクション回復指示ごとに接続要求をします。

《見積もり方法》

指定値は，次の計算式から見積もってください。

指定値＝a×b÷（c−d×e）

a：270
b：該当するHiRDBに接続するOpenTP1のトランザクション回復プロセスの総数
c：HiRDBのシングルサーバ又はシステムマネジャがあるサーバマシンの自動割り当てポート番号の総数
d：HiRDBのシングルサーバ又はシステムマネジャがあるサーバマシンの，ピーク時のポート番号使用数
e：系切り替え機能を使用している場合は2，使用していない場合は1

《留意事項》

OpenTP1で多数のトランザクションが停止した場合，この環境変数に指定した時間が小さいと，HiRDBのシングルサーバ又はシステムマネジャがあるサーバマシンでポート番号不足になることがあります。このため，見積もり方法で算出した時間が省略時仮定値より大きい場合には，見積もり方法で算出した時間を指定することをお勧めします。

OpenTP1のトランザクション回復プロセスが，この環境変数で指定した時間の待ち合わせに入った直後に，HiRDBのシングルサーバ又はシステムマネジャのユニットの開始が完了した場合，HiRDBに接続しているトランザクションの回復完了までの時間が長くなることがあります。

(14)　PDXATRCFILEMODE=｛LUMP｜SEPARATE｝

X/Openに従ったAPIを使用した接続形態での，各種トレースファイル名の形式を指定します。X/Openに従ったAPIを使用した接続形態以外の場合，PDXATRCFILEMODEの指定は無効になります。

LUMP：

各種トレースファイル名に実行プロセスIDを付けないで出力します。

UAPが非常駐で何回も実行されて，プロセスIDがその都度変わる場合には，LUMPを指定することをお勧めします。LUMPを指定した場合，非常駐のUAPを実行するたびに各種トレースファイルが増えて，OSや他プログラムの動作が不安定になることを防げます。

なお，LUMPを指定した場合，トレース情報の出力先が限定されるため，トレース出力サイズを大きくする必要があります。また，トレース出力時に別プロセスの出力と競合するため，処理時間が長くなることがあります。

SEPARATE：

各種トレースファイル名に実行プロセスIDを付けて出力します。

UAPが常駐している場合は，SEPARATEを指定することをお勧めします。

(15)　PDXAAUTORECONNECT=｛YES｜NO｝

TP1/EEとの連携で，トランザクション開始時にHiRDBサーバとの接続状態チェックを行い，接続が切断されていた場合，自動的に再接続するかどうかを指定します。TP1/EEとHiRDBとの接続が切断された要因が，マシン障害，又はネットワーク障害ではない場合は，この環境変数を指定していなくても自動再接続を行います。

なお，次に示す場合，この環境変数の指定は無効になります。

TP1/EE連携ではない場合

トランザクションマネジャに動的登録をした場合

クライアント環境変数PDCWAITTIMEに0を指定している場合

YES：

トランザクション開始時に自動再接続を行います。ただし，各トランザクションの開始時にHiRDBサーバと通信を行うため，トランザクション性能に影響を与えます。

NO：

トランザクション開始時に自動再接続を行いません。マシン障害，又はネットワーク障害が要因で接続が切断された場合は，再接続されないため，SQLエラーが返却されることがあります。

《留意事項》

HiRDBサーバとの接続状態チェックに掛かる時間は，最大でクライアント環境変数PDCWAITTIMEに指定した時間となります。

自動再接続に失敗した場合は，失敗の要因となったエラーをUAPに返却します。

(16)　HiRDB_PDHOST=HiRDBサーバのホスト名［，予備系HiRDBサーバのホスト名］

　　　〜<識別子>

接続するHiRDBサーバのホスト名を指定します。この環境変数に指定した値が，PDHOSTの設定値に置き換わります。

HiRDB/シングルサーバの場合はシングルサーバのサーバマシンのホスト名を，HiRDB/パラレルサーバの場合はシステムマネジャのサーバマシンのホスト名を指定します。

ホスト名以外に，FQDN，及びIPアドレスでも指定できます。指定方法を次に示します。

ホスト名：

システム共通定義のpdunit -xオペランドで指定したホスト名を指定します。

（指定例）

PDHOST=host1

FQDN：

HiRDBサーバのホスト名とドメイン名とを，ピリオドで結んで指定します。

（指定例）

PDHOST=host1.soft.hitachi.co.jp

IPアドレス：

IPアドレスは，バイトごとにピリオドで区切られた10進数で指定します。

（指定例）

PDHOST=172.18.131.34

《IPアドレスを引き継ぐ系切り替えをする場合》

UNIX版の場合

IPアドレスを引き継ぐ場合は，現用系のホスト名を指定します。

Windows版の場合

IPアドレスを引き継ぐ場合は，MSFCのネットワーク名に登録した仮想ネットワーク名を指定します。仮想ネットワークについては，マニュアル「HiRDB システム運用ガイド」を参照してください。

《IPアドレスを引き継がない系切り替えをする場合》

IPアドレスを引き継がない系切り替えをする場合，現用系及び予備系の二つのホスト名を指定してください。現用系のホスト名だけを指定すると，系が切り替わった後に，この環境変数の指定を新しく実行系になったホスト名に変更する必要があります。

(17)　HiRDB_PDNAMEPORT=HiRDBサーバのポート番号

　　　〜<符号なし整数>((5001〜65535))

HiRDBサーバのポート番号を指定します。接続するHiRDBサーバのシステム定義のpd_name_portで指定した値を指定してください。この環境変数に指定した値が，PDNAMEPORTの設定値に置き換わります。

マルチHiRDBの場合，それぞれのHiRDBサーバでポート番号が異なります。したがって，接続するHiRDBサーバのポート番号を指定してください。

pd_name_portについては，マニュアル「HiRDB システム定義」を参照してください。

(18)　HiRDB_PDTMID=OLTP識別子

　　　〜<識別子>((4文字))

複数のOLTPからX/Openに従ったAPIを使用して一つのHiRDBサーバをアクセスする場合，それぞれのOLTPにユニークな識別子を指定してください。この環境変数に指定した値が，PDTMIDの設定値に置き換わります。

なお，この環境変数の指定で次に示す条件のどれかに該当する場合，どのOLTPからのトランザクションであるかが識別されないため，OLTP内でシステムダウンやトランザクション異常が発生すると，トランザクション決着の同期が合わなくなります。

複数のOLTPからアクセスする運用形態で，この環境変数を省略し，PDTMIDの指定も省略した場合

複数のOLTPからアクセスする運用形態で，OLTPごとに指定する識別子がユニークでない場合

(19)　HiRDB_PDXAMODE={0｜1}

OLTP下のX/Openに従ったAPIを使用するUAPをクライアントとする場合に，トランザクションの移行機能を使用するかしないかを指定します。この環境変数に指定した値が，PDXAMODEの設定値に置き換わります。

0：トランザクションの移行機能を使用しません。

1：トランザクションの移行機能を使用します。

なお，この環境変数の指定値については，HiRDB管理者の指示に従ってください。トランザクションの移行機能については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

(20)　PDUSER=認可識別子［/パスワード］

　　　〜《パスワードなしのカレントユーザ名》

この環境変数は，Windows環境の場合は省略できません。UNIX環境の場合は省略できます。

認可識別子，及びパスワードを指定します。「認可識別子/パスワード」の形式で指定します。パスワードの指定が必要ない（パスワードのないユーザに対して設定する）場合は，パスワードを省略できます。

認可識別子，パスワードはそれぞれ大文字，小文字の指定に関係なく大文字として扱われます。ただし，小文字を引用符で囲んだ場合は，小文字として扱われます。

《注意事項》

OpenTP1を使用する場合は，システム環境変数にPDUSERを登録しないでください。システム環境変数にPDUSERを登録すると，OpenTP1起動時にアボートコードpsti0rfを出力してHiRDBが終了します。

《留意事項》

OpenTP1下のUAPをクライアントとする運用形態の場合，「'認可識別子/パスワード'」の形式で指定します。また，認可識別子，パスワードに英小文字を使用する場合は，「'"認可識別子"/"パスワード"'」の形式で指定してください。

パスワードを省略する場合，「認可識別子」だけの形式で指定すると，ユティリティによってはパスワードの入力を要求するものがあります。このような場合は，「認可識別子/パスワード」の形式で，パスワードに任意の文字列を指定してください。また，UAPからコマンドを実行する（COMMAND EXECUTEを実行する）場合，パスワードは省略できません。

OSログインユーザの簡易認証機能を使用してHiRDBに接続する場合は，ユーザ名及びパスワードの両方に半角ハイフン（ - ）を指定してください。その際，半角ハイフンを引用符（ " ）で囲むこともできます。

(21)　PDCLTAPNAME=実行するUAPの識別名称

　　　〜<文字列>((30文字))《Unknown》

HiRDBサーバに対してアクセスするUAPの識別情報（UAP識別子）を指定します。これは，どのUAPを実行しているのかを認識するための名称です。

ここで指定した名称は，次の各情報のUAP名称として表示されます。

pdlsコマンドの表示結果

SQLトレースファイル

接続ユーザ情報ファイル（%PDDIR%¥spool¥cnctusrinf）

UAPに関する統計情報

《留意事項》

UAPの識別名称に英数字以外の文字を使用した場合は，pdcancelコマンドを実行できないことがありますので，英数字だけで構成される名称にすることをお勧めします。

次の文字列は，UAPの識別名称に使用しないでください。

・「pd」で始まる文字列※

・「hds」で始まる文字列

・「0」で始まる文字列

Type4 JDBCドライバ使用時の省略値については「接続情報の優先順位」を参照してください。

注※

pdで始まる文字列をUAPの識別名称に使用した場合，そのUAPはシンクポイントダンプ有効化のスキップ回数監視機能の監視対象から除外されることがあります。

(22)　PDCLTLANG={SJIS｜CHINESE｜UJIS｜C｜UTF-8｜CHINESE-GB18030}

埋込み型UAPのソースファイルの記述に使われている文字コード種別を指定します。

この環境変数は，SQLプリプロセサが使用するので，SQLプリプロセサの実行時に設定します。この環境変数をUAPの実行時に設定する必要はありません。

SJIS：

シフトJIS漢字コードを使う場合に指定します。Linux版の場合にシフトJIS漢字コードを使うときは，この環境変数で設定してください。

CHINESE：

EUC中国語漢字コードを使う場合に指定します。

UJIS：

EUC日本語漢字コードを使う場合に指定します。ただし，Windows版の場合はUJISを指定できません。

C：

単一バイト文字コードを使う場合に指定します。

UTF-8：

Unicode（UTF-8又はIVS対応UTF-8）を使う場合に指定します。

CHINESE-GB18030：

中国語漢字コード（GB18030）を使う場合に指定します。

《留意事項》

PDCLTLANGに上記以外の値を設定するとエラーになります。

Windows版の場合に，UJISを設定するとエラーになります。

Windows版の場合に，この環境変数を省略すると，SJISが仮定されます。

UNIX版の場合に，この環境変数を省略すると，環境変数LANGで指定した文字コード種別が仮定されます。SQLプリプロセサの実行時に設定する環境変数LANGについては，「UNIX環境でのプリプロセス」 を参照してください。

(23)　PDLANG＝｛UTF-8｜UTF-8_IVS｜SJIS｜CHINESE｜CHINESE-GB18030｜ANY｝

《UNIX版のHiRDBクライアントの場合》

HiRDBサーバに接続する際に，HiRDBサーバの文字コード種別（サーバがUNIX版の場合はpdsetupコマンド，Windows版の場合はpdntenvコマンドで指定した文字コード種別）と，クライアント側で指定した文字コード種別が一致するかチェックする場合，HiRDBサーバの文字コード種別を指定します。文字コード種別が一致しない場合はエラーとなります。

HiRDBサーバの文字コード種別をチェックしない場合はANYを指定します。

通常はANYを指定してください。ANYを指定すると，HiRDBサーバの文字コード種別に関係なくサーバに接続できます。

HiRDBサーバの文字コード種別をチェックする場合の詳細は，「文字コード種別についての注意事項」を参照してください。

《Windows版のHiRDBクライアントの場合》

この環境変数は無効です。指定しても無視されます。HiRDBサーバに接続する際に，HiRDBサーバの文字コード種別をチェックしません。

(24)　PDDBLOG={ALL｜NO}

UAPを実行するときに，データベースの更新ログを取得するかしないかを指定します。

ALL：

ログ取得モードでUAPを実行します。

ALLを指定すると，障害対策のための運用が簡単になりますが，大量のデータを更新する場合，処理に時間が掛かります。

NO：

ログレスモードでUAPを実行します。

UAPの実行途中で異常終了した場合，このトランザクションで更新したデータベースは回復されません。NOを指定する場合，データベースの更新ログを取得しない分，処理時間を短縮できますが，UAPの実行前後にバックアップを取得する必要があるので，必ずHiRDB管理者の許可を受けてください。

ログレスモードでUAPを実行するときの方法については，マニュアル「HiRDB システム運用ガイド」を参照してください。

次に示すログは，この環境変数の指定に関係なく取得されます。

マスタディレクトリ，データディレクトリ，及びデータディクショナリ用RDエリアへの更新に関するログ

ユーザ用RDエリアの定義情報への更新に関するログ

(25)　PDEXWARN=｛YES｜NO｝

サーバから警告付きのリターンコードを受け取るかどうかを指定します。

YES：警告付きのリターンコードを受け取ります。

NO：警告付きのリターンコードを受け取りません。

この環境変数にYESを指定した場合，SQLCODEが0，又は＋100以外をすべてエラーとして処理しているUAP（ストアドプロシジャを含む）は，エラーの判定方法を変更する必要があります。エラーの判定方法については，「SQLのエラーの判定と処置」を参照してください。

(26)　PDSUBSTRLEN={3｜4｜5｜6｜7｜8｜9｜10}

1文字を表現する最大バイト数を指定します。

セットアップした文字コード種別によって，推奨値と指定できる値の範囲が異なります。セットアップした文字コード種別と，対応する推奨値，指定できる値を次に示します。

HiRDBサーバをセットアップした文字コード種別

推奨値

HiRDBサーバで有効な値

utf-8

4

3〜6

utf-8_ivs

8

3〜10

上記以外（この環境変数は無効）

−

−

（凡例）

−：この環境変数は無効となるため，推奨値，有効な値はありません。

この環境変数は，文字コード種別をutf-8，又はutf-8_ivsでセットアップした場合にだけ有効になり，スカラ関数SUBSTRの結果の長さに影響します。SUBSTRの詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

《システム定義との関係》

この環境変数を省略すると，システム共通定義のpd_substr_lengthオペランドの指定値が仮定されます。

《注意事項》

この環境変数を指定する場合の注意事項は，マニュアル「HiRDB システム定義」のpd_substr_lengthオペランドを参照してください。

(27)　PDCLTCNVMODE＝｛AUTO｜NOUSE｜UJIS｜UJIS2｜UTF8｜UTF8MS｜UTF8_TXT｜UTF8_EX｜UTF8_EX2｜UTF8MS_TXT｜UCS2_UJIS｜UCS2_UJIS2｜UCS2_UTF8｜UOC｝

HiRDBサーバとHiRDBクライアントの文字コード種別が異なる場合，文字コードを変換するかどうかを指定します。HiRDBクライアントがシフトJIS漢字コード及びUCS-2，HiRDBサーバがEUC日本語漢字コード及びUnicodeのときだけ文字コード変換ができます。

指定値とその内容を次に示します。

指定値

内容

AUTO

HiRDBクライアントが自動的にHiRDBサーバの文字コード種別を調査して，文字コード変換をします。HiRDBクライアントがシフトJIS漢字コードで，HiRDBサーバがEUC日本語漢字コード又はUnicodeの場合に，文字コード変換ができます。AUTOを指定した場合，指定値としてはNOUSE，UJIS，又はUTF8が設定されます。

NOUSE

文字コード変換をしません。文字コード変換をしないで，データはそのまま受け渡しします。

UJIS

HiRDBサーバの文字コードを調査しないで，HiRDBクライアントはシフトJIS漢字コードで，HiRDBサーバはEUC日本語漢字コードとして，文字コード変換をします。また，可変長文字列型（VARCHAR，MVARCHAR，及びNVARCHAR）のデータを受け取る場合，SQL記述領域が指すSQLDATA領域はSQLLEN分の空白でクリアします。

UJIS2

UJISと同じですが，可変長文字列型（VARCHAR，MVARCHAR，及びNVARCHAR）のデータを受け取る場合，SQL記述領域が指すSQLDATA領域の空白でクリアしません。

UTF8

HiRDBクライアントはシフトJIS漢字コードで，HiRDBサーバはUnicode（UTF-8）として，文字コード変換をします。ただし，可変長文字列型（VARCHAR及びMVARCHAR）のデータを受け取る場合，SQL記述領域が指すSQLDATA領域はSQLLEN分の空白でクリアします。

UTF8MS

UTF8と同じですが，HiRDBサーバのコード系がMS-Unicode，HiRDBクライアントのコード系がWindows符号化文字集合として変換をします。

UTF8_TXT

UTF8と同じですが，固定長文字列型（CHAR及びMCHAR），可変長文字列型（VARCHAR及びMVARCHAR）のデータは文字コード変換しません。

UTF8_EX

UTF8と同じですが，HiRDBサーバからバックスラッシュ（0x5C）を受け取った場合，HiRDBクライアントは文字コードを変換しないで，SJISの¥記号（0x5C）として扱います。Unicode（UTF-8）での¥記号（0xC2A5）を受け取った場合は，UTF8指定時と同様にSJISの¥記号（0x5C）に変換します。

HiRDBクライアントでSJISの¥記号（0x5C）を入力した場合は，文字コードを変換しないで0x5CをHiRDBサーバへ受け渡します。

UTF8_EX2

UTF8_EXと同じですが，HiRDBクライアントでSJISの¥記号（0x5C）を入力した場合は，UTF8指定時と同様にUnicode（UTF-8）での¥記号（0xC2A5）に文字コードを変換してHiRDBサーバへ受け渡します。

UTF8MS_TXT

UTF8MSと同じですが，固定長文字列型（CHAR及びMCHAR），可変長文字列型（VARCHAR及びMVARCHAR）のデータは文字コード変換しません。

UCS2_UJIS

HiRDBクライアントはUCS-2で，HiRDBサーバはEUC日本語漢字コードとして，文字コードを変換します※。HiRDBサーバの文字コードがEUC日本語漢字コード以外の場合，HiRDBサーバ接続時にエラーとなります。UCS2_UJISは，Unicode対応のODBC3.0ドライバ，ODBC3.5ドライバ，HiRDBデータプロバイダ for .NET Framework，又はバージョン02-06以降のHiRDB SQL Executerからアクセスする場合にだけ指定できます。

UCS2_UJIS2

UCS2_UJISと同じですが，図「UCS2_UJISとUCS2_UJIS2の変換差異」に示す差異があります。

UCS2_UTF8

HiRDBクライアントはUCS-2で，HiRDBサーバはUnicode（UTF-8）として，文字コードを変換します※。HiRDBサーバの文字コードがUnicode（UTF-8）以外の場合，HiRDBサーバ接続時にエラーとなります。UCS2_UTF8は，Unicode対応のODBC3.0ドライバ，ODBC3.5ドライバ，HiRDBデータプロバイダ for .NET Framework，又はバージョン02-06以降のHiRDB SQL Executerからアクセスする場合にだけ指定できます。

UOC

HiRDBクライアントは文字コード変換を行わないで，すべての文字についてUOCをコールして文字コードを変換します。

このオプションを指定する場合はPDCLTCNVUOCLIB，PDCLTCNVUOCFUNC及びPDCLTCNVBYTERATIOを必ず指定してください。指定値がない場合，サーバ接続時にクライアント環境定義指定不正（KFPA11724-E）でSQLエラーになります。

また，このオプションを指定して各国文字データ型でデータを設定又は取得する場合，クライアントの文字コードにUTF-8は使用できません。クライアントの文字コードがUTF-8の場合は，SQL実行時にパラメタのデータ型不正（KFPA11311-E）でSQLエラーになります。

HiRDB ODBC3.5ドライバ及び，HiRDBデータプロバイダ for .NET Frameworkからアクセスする場合，このオプションは表「HiRDB ODBC3.5ドライバ及びHiRDBデータプロバイダ for .NET Framework使用時の指定可否」で指定可能としているときだけ指定できます。

HiRDBが提供するクライアントライブラリには，共用ライブラリとアーカイブライブラリがあります。このオプションは共用ライブラリを使用しているときだけ指定できます。アーカイブライブラリを使用したときは，指定値を無視します。

注※

変換する文字コードの範囲は，UCS-4の範囲となります。

表6‒30　HiRDB ODBC3.5ドライバ及びHiRDBデータプロバイダ for .NET Framework使用時の指定可否

名称

プラットフォーム

指定可否

HiRDB ODBC3.5ドライバ

Windows

△

UNIX

UNICODE対応ODBC関数使用時

△

非UNICODE対応ODBC関数使用時

○

HiRDBデータプロバイダ for .NET Framework

Windows

△

（凡例）

○：指定できます

△：クライアントの文字コードがSJISの場合だけ指定できます

AUTOは，HiRDBサーバの文字コード種別が特定できない場合に指定します。UJISは，HiRDBサーバの文字コード種別がEUC日本語漢字コードと特定できる場合に指定します。

変換対象となる文字列を次に示します。

SQL文中の文字列

SQL記述領域に設定されるデータコードが，CHAR,VARCHAR,NCHAR，NVARCHAR，MCHAR，又はMVARCHARの文字列

列名記述領域に格納される列名

SQL連絡領域に格納されるエラーメッセージ

型名記述領域に格納されるデータ型名

HiRDBクライアントとHiRDBサーバ間の文字コードの組み合わせによる，PDCLTCNVMODEの指定値を次に示します。

UOCを指定した場合は，クライアント側の文字コードを限定しないため，すべての組み合わせで文字コード変換ができます。

HiRDBクライアントのアプリケーションで使用する文字コード

HiRDBサーバ側の文字コード

SJIS

Unicode（UTF-8），Unicode（IVS対応UTF-8）

UJIS

C

GB18030

SJIS

−

UTF8，UTF8MS，UTF8_TXT，UTF8_EX，UTF8_EX2，UTF8MS_TXT

UJIS，UJIS2

NOUSE

×

Unicode（UTF-8）※

×

−

×

NOUSE

×

UJIS

×

×

−

NOUSE

×

UCS-2

×

UCS2_UTF8

UCS2_UJIS，UCS2_UJIS2

×

×

C

NOUSE

NOUSE

NOUSE

NOUSE

×

GB18030

×

×

×

×

−

（凡例）

×：変換できないため，指定できません。

−：コード変換が不要のため，指定する必要がありません。

注※

PDCLTCNVMODEにUOCを指定している場合，各国文字データ型のデータ設定及び取得はできません。各国文字データ型のデータ設定及び取得を行おうとした場合，SQL実行時にパラメタのデータ型不正（KFPA11311-E）でSQLエラーになります。

UTF8，UTF8_EX，及びUTF8_EX2指定時の文字コード変換の差異（HiRDBサーバから受け取った文字の場合）を次の表に示します。

表6‒31　UTF8，UTF8_EX，及びUTF8_EX2指定時の文字コード変換の差異（HiRDBサーバから受け取った文字の場合）

HiRDBサーバから受け取った文字（Unicode（UTF-8））

PDCLTCNVMODEの指定値

HiRDBクライアント変換後の文字コード（SJIS）

0x5C（バックスラッシュ）

UTF8

0x815F（全角バックスラッシュ）

UTF8_EX

0x5C（¥記号）※

UTF8_EX2

0xC2A5（¥記号）

UTF8

0x5C（¥記号）

UTF8_EX

UTF8_EX2

注※

文字コードを変換しません。

UTF8，UTF8_EX，及びUTF8_EX2指定時の文字コード変換の差異（HiRDBクライアントから入力した文字の場合）を次の表に示します。

表6‒32　UTF8，UTF8_EX，及びUTF8_EX2指定時の文字コード変換の差異（HiRDBクライアントから入力した文字の場合）

HiRDBクライアントから入力した文字（SJIS）

PDCLTCNVMODEの指定値

HiRDBクライアント変換後の文字コード（Unicode（UTF-8））

0x5C（¥記号）

UTF8

0xC2A5（¥記号）

UTF8_EX

0x5C（バックスラッシュ）※

UTF8_EX2

0xC2A5（¥記号）

注※

文字コードを変換しません。

《留意事項》

文字列中に2バイト外字が含まれている場合には，"＃"の全角文字と置き換えます。ただし，クライアント環境定義PDCLTGAIJIDLL及びPDCLTGAIJIFUNCを指定している場合を除きます。また，EUCの3バイト外字は使用できません。

半角片仮名文字はシフトJIS漢字コードでは1バイト，EUC日本語漢字コードでは2バイトのコードであるため，半角片仮名文字を含む文字列は変換の前後で長さが変わります。サーバから受け取った文字列に半角片仮名が含まれていると，変換後の文字列は短くなります。サーバへ送る文字列に半角片仮名が含まれていると，変換後の文字列は長くなります。

また，Unicodeの場合は，ASCII（0x0〜0x7f）以外の文字は2バイトから4バイトの文字として表現されるため，変換の前後で長さが変わります。サーバから受け取った文字列にASCII以外の文字列が含まれていると，変換後の文字列は短くなります。サーバへ送る文字列にASCII以外の文字列が含まれていると，変換後の文字列は長くなります。

長さが変わる場合，次のようになります。

SQL記述領域に設定されるデータコードがCHAR，MCHARの文字列の場合

文字列長が短くなった場合（HiRDBサーバから受け取るUJISの文字列に半角片仮名文字が含まれるとき，又はUnicodeの文字列にASCII以外の文字が含まれるとき）は，元の長さまで半角空白（0x20）を埋めます。

文字列長が長くなった場合（HiRDBサーバへ渡すUJIS変換文字列に半角片仮名文字が含まれるとき，又はUnicode変換文字列にASCII以外の文字列が含まれるとき）は，文字列を切り捨てないで変換後の文字列をそのままHiRDBサーバへ渡します。

したがって，文字列を格納する列の長さを，十分に確保する必要があります。また，すべての文字が半角片仮名文字と特定できる場合は，文字数の2倍のバイト数の領域（Unicodeの場合は文字数の3倍のバイト数の領域）が必要です。

SQL記述領域に設定されるデータコードがVARCHAR，MVARCHARの文字列，SQL文中の文字列，列名記述領域に格納される列名，SQL連絡領域に格納されるエラーメッセージ，及び型名記述領域に格納されるデータ型名の場合

文字列が短くなった場合，文字列長を変換後の文字列長に変更します。

文字列が長くなった場合，文字列長を変換後の文字列長に変更します。

すべての文字が半角片仮名文字と特定できる場合は，文字数の2倍のバイト数の領域（Unicodeの場合は文字数の3倍のバイト数の領域）が必要です。

SQL記述領域からポイントされるNCHAR，NVARCHARの文字列（データコードがNCHAR，NVARCHAR）の場合

半角片仮名文字を使用できないため，変換しても長さは変わりません。

バイナリデータを格納するためにCHAR，VARCHARの列を使用している場合，アクセスのときに文字コード変換によって予期しない変換をすることがあります。この場合，文字コード変換をしないようにしてください（PDCLTCNVMODEにNOUSEを指定してください）。

BLOB型のデータは文字コード変換ができません。例えば，テキストデータを格納するためにBLOB型の列を使用している場合など，文字コード変換はUAPで実行してください。

シフトJIS漢字コードとUnicodeでの文字のマッピングには，次の2種類があります。

JIS方式：

JIS X 0221で規定されたマッピングに従います。PDCLTCNVMODEにUTF8MS及びUTF8MS_TXT以外を指定した場合，JIS方式となります。

変換対象：シフトJIS〜JIS X0221

漢字範囲：JIS第1水準，JIS第2水準

MS方式：

Microsoft社が規定したマッピングに従います。PDCLTCNVMODEにUTF8MS又はUTF8MS_TXTを指定した場合，MS方式となります。

変換対象：Windows符号化文字集合〜MS-UNICODE

漢字範囲：JIS第1水準，JIS第2水準，IBM拡張漢字，NEC選定IBM拡張漢字，NEC特殊文字

シフトJIS漢字コードとWindows符号化文字集合とでは，外字コードの範囲が異なるので注意してください。

取り扱える漢字が多いMS方式は，PDCLTCNVMODEでUTF8MS又はUTF8MS_TXTを指定するとマッピングできます。MS方式を使用する場合は，マッピングの差異によって発生する可能性がある問題点を，十分に把握してから使用してください。

UJIS用のユーザ定義外字変換DLLを，Unicodeの外字変換にはそのまま使用できません。Unicodeの外字変換をする場合は，Unicodeの外字変換機能を追加したユーザ定義外字変換DLLを使用する必要があります。

《クライアントの文字コードがUCS-2の場合の留意事項》

文字コード変換によって，SQL連絡領域に設定されるエラーメッセージ（SQLERRMC）が254バイトを超える場合があります。その場合，列名及び型名は254バイトまで設定され，それ以降は切り捨てられます。

CHAR，MCHAR，VARCHAR，又はMVARCHARのデータを受け取る場合，SQL記述領域のデータの長さ（SQLLEN）は，最大定義長の2倍必要となります。

文字コード変換後のデータは，次に示す値を超えて受け取ることはできません。

・CHAR，NCHAR，及びMCHARの場合は30,000バイト

・VARCHAR，NVARCHAR，及びMVARCHARの場合は32,000バイト

したがって，サーバに格納されているデータは，固定文字列型の場合は15,000バイト，可変長文字列型の場合は16,000バイトを超えると，検索できないことがあります。

入力パラメタで指定するデータ長は，次に示す値を超えてはいけません。

・CHAR，NCHAR，及びMCHARの場合は30,000バイト

・VARCHAR，NVARCHAR，MVARCHARの場合は32,000バイト

SQL記述領域に設定されるデータコードがCHAR，MCHAR，VARCHAR，又はMVARCHARで，その文字列をサーバに送る場合，文字列長は変換後の長さに変更されます（固定長の場合は，SQLLENが変換後の文字列長に変更されます）。

UCS-2の文字列の先頭にBOMは付けないでください。BOMが付いた文字列の場合，正しく変換されません。UCS-2のバイトオーダは，プログラムを実行するホストのバイトオーダとして処理されます。

UCS2_UJISとUCS2_UJIS2の変換差異を次の図に示します。

図6‒2　UCS2_UJISとUCS2_UJIS2の変換差異

(28)　PDCLTGAIJIDLL＝ユーザ定義外字変換DLLファイル名

　　　〜<文字列>

この環境変数はWindows版の場合にだけ有効になります。

ユーザ定義外字変換DLLファイルの名称を指定します。文字コード変換時，この環境変数はPDCLTCNVMODEに次の値を指定している場合，無効になります。

NOUSE

UCS2_UTF8

UOC

また，この環境変数を省略した場合，2バイト外字を全角文字"＃"に変換します。

(29)　PDCLTGAIJIFUNC＝ユーザ定義外字変換関数名

　　　〜<文字列>

この環境変数はWindows版の場合にだけ有効になります。

ユーザ定義外字変換関数の名称を指定します。文字コード変換時，この環境変数はPDCLTGAIJIDLLを指定しているときだけ有効になります。

《ユーザ定義外字関数の記述形式》

ユーザ定義外字変換関数の記述形式を次に示します。

  void __stdcall ユーザ定義外字変換関数名 (
     long        direct,
     unsigned char far *instr,
     unsigned char far *outstr) ;

DLLはMicrosoft Visual C++で作成してください。

DLLの作成及び関数のエクスポートは，[方法1]または[方法2]のどちらかで行ってください。

[方法1]

関数宣言の前に「_declspec(dllexport)」を追加し，MAPファイル又はMicrosoft Visual C++のdumpbinコマンドを使用してエクスポート関数名を調べる。

(例)DLL名をMyDll，ユーザ定義外字変換関数名をSample1とした場合

1.関数の記述形式

_declspec(dllexport) void __stdcall Sample1(
        long                direct,
        unsigned char far * instr,
        unsigned char far * outstr );

2.エクスポート関数名の調査方法

次のどちらかの方法で調査してください。

DLL作成時に，プロジェクトの設定でMAPファイルを出力するように指定し，MAPファイルからエクスポート関数名を確認してください。

Microsoft Visual C++のdumpbinコマンド（dumpbin /exports DLL名）を使用してエクスポート関数名を確認してください。

次にdumpbinコマンドの出力例を示します。

File Type: DLL

  Section contains the following exports for MyDll.dll

    00000000 characteristics
    50BF0381 time date stamp Wed Dec 05 17:19:13 2012
        0.00 version
           1 ordinal base
           3 number of functions
           3 number of names

    ordinal hint RVA      name
          1    0 00001160 Sample1@32 = Sample1@32 …… 下線部がエクスポート関数名になります

3.PDCLTGAIJIFUNCの指定値

Sample1@32

[方法2]

DLL作成時にモジュール定義(.def)ファイルを同時に作成し，モジュール定義ファイルにエクスポート関数名を指定する。

(例) DLL名をMyDll，ユーザ定義外字変換関数名をSample1とした場合

1.関数の記述形式

void __stdcall Sample1(
long                direct,
        unsigned char far * instr,
        unsigned char far * outstr );

2.エクスポート関数名の指定方法

モジュール定義ファイルに次の内容を記載してください。

LIBRARY    MyDll
EXPORTS
           Sample1

3.PDCLTGAIJIFUNCの指定値

Sample1

［入力］

direct：

変換方向を表します。1〜6のどれかが設定されます。

1：HiRDBクライアントからHiRDBサーバへのデータ変換

2：HiRDBサーバからHiRDBクライアントへのデータ変換

3：HiRDBクライアントからHiRDBサーバへのデータ変換（Unicodeの場合）※

4：HiRDBサーバからHiRDBクライアントへのデータ変換（Unicodeの場合）※

5：HiRDBクライアントUCS-2からHiRDBサーバUJISへのデータ変換

6：HiRDBサーバUJISからHiRDBクライアントUCS-2へのデータ変換※

7：HIRDBクライアントUTF-16（サロゲートペア）からHiRDBサーバUJISへのデータ変換※

注※

外字変換DLLがUnicodeを受け渡す場合，UCS-2形式（UTF-16形式）の2バイト又は4バイトとなります。UTF-8形式への変換はライブラリが行います。

instr：

変換対象の外字格納領域へのポインタを表します。領域サイズは，directに7以外が設定された場合は2バイト，7が設定された場合は4バイトになります。

instr[0]=変換対象の外字の1バイト目

instr[1]=変換対象の外字の2バイト目

instr[2]=変換対象の外字の3バイト目

instr[3]=変換対象の外字の4バイト目

UCS-2（Unicode）の外字コードの場合，バイト列はビッグエンディアンのバイト列です。例えば，「東」の場合は，1バイト目に0x67，2バイト目に0x71が設定されます。

outstr：

変換後の外字格納領域へのポインタを表します。領域サイズは，directに6以外が設定された場合は2バイト，6が設定された場合は4バイトになります。

outstr[0]=変換後の文字コード（外字）の1バイト目

outstr[1]=変換後の文字コード（外字）の2バイト目

outstr[2]=変換後の文字コード（外字）の3バイト目

outstr[3]=変換後の文字コード（外字）の4バイト目

コード変換できなかった場合でも，変換値として妥当な値を設定してください（渡された値を無条件で使用します）。

UCS-2（Unicode）の外字コードの場合，バイト列はビッグエンディアンのバイト列で返す必要があります。例えば，「東」の場合は，1バイト目に0x67，2バイト目に0x71を設定してください。

［出力］

*outstr：

変換後の文字列を格納します。

注意事項

*instrと*outstrへ設定する文字コードの組み合わせを次の表に示します。

表6‒33　*instrと*outstrへ設定する文字コードの組み合わせ

direct

instr

outstr

PDCLTCNVMODE

1

シフトJIS漢字コードの外字コード

EUC日本語漢字コードの外字コード

UJIS又はUJIS2

2

EUC日本語漢字コードの外字コード

シフトJIS漢字コードの外字コード

UJIS又はUJIS2

3

シフトJIS漢字コードの外字コード

Unicodeの外字コード

UTF8又はUTF8_TXT

Windows符号化文字集合の外字コード

MS-Unicodeの外字コード

UTF8MS又はUTF8MS_TXT

4

UnicodeのBMP（基本多言語面）の外字コード

シフトJIS漢字コードの外字コード

UTF8又はUTF8_TXT

MS-Unicodeの外字コード

Windows符号化文字集合の外字コード

UTF8MS又はUTF8MS_TXT

5

UnicodeのBMP（基本多言語面）の外字コード，及びUnicodeのBMP（基本多言語面）に配置されたJISの第3水準，第4水準の漢字コード

EUC日本語漢字コードの外字コード

UCS2_UJIS又はUCS2_UJIS2

6

EUC日本語漢字コードの外字コード

任意のUTF-16形式のコード

UCS2_UJIS又はUCS2_UJIS2

7

Unicodeのサロゲートペア

EUC日本語漢字コードの外字コード

UCS2_UJIS又はUCS2_UJIS2

各文字コードの外字コードの範囲を次の表に示します。

表6‒34　各文字コードの外字コードの範囲

文字コード

1バイト目

2バイト目

シフトJIS漢字コード

0xf0〜0xfc

0x40〜0x7e

0x80〜0xfc

Windows符号化文字集合

0xf0〜0xfa

0x40〜0x7e

0x80〜0xfc

EUC日本語漢字コード

0xf5〜0xfe

0xa1〜0xfe

Unicode及びMS-Unicode※

0xe0〜0xf8

0x00〜0xff

注※　0xe000〜0xe757，0xf8f0〜0xf8ffには，Microsoft社が独自に文字を割り当てているため，これらの外字コードではユーザ定義外字変換DLLを呼び出しません。

サロゲートペアの範囲を次の表に示します。

表6‒35　サロゲートペアの範囲

エンコード

上位サロゲート

下位サロゲート

1バイト目

2バイト目

1バイト目

2バイト目

UTF-16

0xd8〜0xdb

0x00〜0xff

0xdc〜0xdf

0x00〜0xff

(30)　PDCLTCNVUOCLIB=UOCのライブラリファイル名

　　　〜<文字列>((最大256バイト))

UOCによる文字コード変換をする場合に，UOCを格納したライブラリファイルの名称を絶対パスで指定します。

この環境変数はPDCLTCNVMODEにUOCを指定しているときだけ有効になります。UOC以外の値を指定している場合は，指定値を無視します。

このクライアント環境定義に指定する絶対パスに，空白や括弧が含まれるときは指定値の前後を二重引用符(")で囲んでください。

(31)　PDCLTCNVUOCFUNC=UOCの文字コード変換関数名

　　　〜<文字列>((最大30バイト))

UOCによる文字コード変換をする場合に，文字コード変換関数の名称を指定します。

この環境変数は，PDCLTCNVUOCLIBを指定しているときだけ有効になります。

PDCLTCNVUOCLIBに指定したライブラリの読み込みと，PDCLTCNVUOCFUNCに指定した関数アドレスの解決は，UAPからのCONNECT要求時のサーバ接続確立前に行います。ライブラリの読み込み失敗又は関数アドレス解決失敗時は，文字コード変換処理失敗（KFPA19803-E）でSQLエラーを返却します。

《UOCの文字コード変換関数の記述形式》

文字コード変換関数の記述形式を次に示します。

UNIX版の場合

void_文字コード変換関数名 (
long                         direct ,
unsigned int        inlen ,
unsigned char     * insetr ,
unsigned int        outlen ,
unsigned char     * outstr ,
unsigned int      * cnvlen ,
int                         * errinf ,
unsigned char     * errmsg ) ;

Windows版の場合

void __stdcall 文字コード変換関数名 (
long                          direct ,
unsigned int    inlen ,
unsigned char * insetr ,
unsigned int    outlen ,
unsigned char * outstr ,
unsigned int  * cnvlen ,
int                          * errinf ,
unsigned char    * errmsg ) ;

DLLの作成方法及び関数のエクスポート方法は，「PDCLTGAIJIFUNC」の「ユーザ定義外字変換関数の記述形式」を参照してください。

[入力]

direct：

変換方向を表します。次のどちらかが設定されます。

1：HiRDBクライアントからHiRDBサーバへのデータ変換

2：HiRDBサーバからHiRDBクライアントへのデータ変換

inlen：

変換対象の文字列の長さ（バイト数）を表します。

*instr：

変換対象の文字列格納領域へのポインタを表します。

outlen：

変換後の文字列格納領域の長さ（バイト数）を表します。

[出力]

*outstr：

変換後の文字列格納領域へのポインタを表します。

文字コード変換後の文字列を設定してください。終端のNULLターミネイトは不要です。

文字コード変換後の文字列長がoutlenの値より大きくなる場合は，文字コード変換後の文字列をoutlen分まで設定してください。

*cnvlen：

変換後の文字列の長さ（バイト数）を格納する領域のポインタを表します。

文字コード変換後の文字列長（バイト数）を設定してください。

*errinf：

文字コード変換時に発生したエラー情報を格納する領域のポインタを表します。

この引数に設定する値及び設定値によるHiRDBクライアントの処理を次の表に示します。

表6‒36　errinfの設定値とHiRDBクライアントの処理

設定値

内容

HiRDBクライアントの処理

0

正常終了（エラーなし）

文字コード変換成功とし，その後の処理を続行します。

-1

領域不足

文字コード変換後の文字列の長さ(バイト数)がoutlenより大きくなる場合に，この値を設定してください。

領域不足が発生しているため，変換対象のデータによって，表 「領域不足(errinf=-1)時のHiRDBクライアントの処理」に示す動作をします。

-2

文字コード変換エラー

文字コード変換処理でエラーが発生した場合に，この値を設定してください。

文字コード変換失敗のため，変換対象のデータによって，次の処理をします。

エラーメッセージの場合

文字コード変換前に発生していたエラー情報をUAPに返却します。また，クライアントエラーログに，文字コード変換前に発生していたエラー情報及び，KFPZ03000-Iを設定します。

上記以外の場合

UAPにKFPA19803-Eを返却します。

表6‒37　領域不足(errinf=-1)時のHiRDBクライアントの処理

変換対象のデータ

HiRDBクライアントの処理

クライアントからサーバへの変換(direct=1)の場合

サーバからクライアントへの変換(direct=2)の場合

SQL文中の文字列

文字コード変換失敗として，UAPにKFPA19803-Eを返却します。

−

SQL記述領域中に設定されるデータコードがCHAR，VARCHAR，NCHAR，NVARCHAR，MCHAR，MVARCHARの文字列

−

SQL連絡領域のSQLWARN1を設定します。

標識変数の指定がある場合，標識変数には切り捨て後の長さを設定します。

文字コード変換成功として，その後の処理を続行します。

次のSQL文で取得する，列名及びユーザ定義型名

・DESCRIBE文

・DESCRIBE TYPE文

・PREPARE文

−

文字コード変換成功として，その後の処理を続行します。※

（凡例）

−：存在しない組み合わせ

注※

HiRDBクライアントでは列名，ユーザ定義型名を取得するために確保する領域の長さが決まっています。そのため，文字コード変換によってデータ長が大きくなる場合は，次に示す最大長を超えないよう注意してください。

・列名：30バイト

・ユーザ定義型名の認可識別子：8バイト

・ユーザ定義型名のデータ型識別子：30バイト

errmsg：

文字コード変換でエラーが発生した場合（errinf=-2），エラーの詳細を示すメッセージテキストを格納する領域のポインタを表します。メッセージテキストの最大長は128バイト（終端NULL含む）です。テキスト終端はNULLで終了してください。

この引数に設定したメッセージテキストは，KFPA19803-Eの詳細情報として，SQLCA及びクライアントエラーログに出力されます。

UOCは処理結果に応じて，次の表で示す情報を出力用引数に設定してください。

表6‒38　UOC処理結果による設定値

処理結果

UOCでの設定値

outstr

cnvlen

errinf

errmsg

正常終了

文字コード変換後の文字列

outstrに設定した文字列長（バイト数）

0

設定不要

領域不足

文字コード変換後の文字列をoutlenの長さで設定する

outstrに設定した文字列長（バイト数）

-1

設定不要

変換エラー

設定不要

設定不要

-2

変換エラーの詳細情報文字列

(32)　PDCLTCNVBYTERATIO=文字コード変換時の1文字当たりのバイト数の比率

　　　〜<符号なし整数>((1〜10))

UOCによる文字コード変換機能使用時に，クライアントの文字コードでの1文字のバイト数に対して，サーバの文字コードでの1文字のバイト数が最大で何倍になるかを指定します。増加率が1未満の場合や小数になる場合は，小数点以下を切り上げて指定してください。文字コード変換時，この環境変数はPDCLTCNVMODEにUOCを指定しているときだけ有効になります。UOC以外の値を指定している場合は，指定値を無視します。

(例)クライアントの文字コードがSJIS，サーバの文字コード：UTF-8（IVS対応）の場合：

SJISの全角文字2バイトに対して，UTF-8はIVS使用時に最大8バイトとなり，1文字を表現するバイト数が最大で4倍となるため，このクライアント環境定義には4を指定します。PDCLTCNVBYTERATIOに4を指定した場合のデータ取得と，DCLTCNVBYTERATIOがない場合のデータ取得を次の図に示します。

図6‒3　PDCLTCNVBYTERATIOに4を指定した場合のデータ取得

図6‒4　DCLTCNVBYTERATIOがない場合のデータ取得

(33)　PDCLTGRP＝クライアントグループ名

　　　〜<英字>((1文字))

クライアントグループの接続枠保証機能を使用する場合，クライアントグループ名を指定します。システム定義のpdcltgrpオペランドで指定したクライアントグループ名を，英大文字1文字で指定します。英小文字を指定した場合は，英大文字を指定したとみなします。

システム定義のpdcltgrpオペランドが指定されていない場合，又はpdcltgrpオペランドで指定されていないクライアントグループ名を指定した場合，この環境変数の指定は無効になります。

クライアントグループの接続枠保証機能については，マニュアル「HiRDB システム運用ガイド」を参照してください。

(34)　PDAUTORECONNECT=｛YES｜NO｝

自動再接続機能を使用するかどうかを指定します。

自動再接続機能については，「自動再接続機能」を参照してください。

YES：

自動再接続機能を使用します。

自動再接続機能を使用すると，サーバプロセスダウン，系切り替え，ネットワーク障害などの要因でHiRDBサーバとの接続が切断された場合に，自動的に再接続します。

NO：

自動再接続機能を使用しません。

《適用基準》

HiRDBサーバで，システム構成変更コマンド（pdchgconf）を実行している場合，及び修正版HiRDBの入れ替え（pdprgcopy，pdprgrenew）をしている場合に適用してください。この場合に自動再接続機能を使用すると，HiRDBサーバとの接続が切断してもUAPにエラーを返却しないで処理を続行できます。

《留意事項》

再接続するときの動作は，次のクライアント環境定義で設定できます。

・CONNECTのリトライ回数：PDRCCOUNT

・CONNECTのリトライ間隔：PDRCINTERVAL

・再接続する契機：PDRCTIMING

CONNECT文以外のSQLで自動再接続機能が動作している間は，PDCWAITTIMEの時間で監視されます。PDCWAITTIMEの時間を超えた場合は，自動再接続の処理は打ち切られます。

自動再接続が失敗した場合は，要因となったエラーをUAPに返却します。

X/Openに従ったAPIを使用してアクセスしているアプリケーションの場合は，この環境変数を指定しても無効になり，常にNOが仮定されます。

次のどれかに該当する場合は，CONNECT文を実行したときだけ自動再接続機能が有効になります。

・HiRDBサーバのバージョンが07-00より前である。

・XDM/RD E2接続機能を使用している。

・XDM/RD E2のバージョンが10-02以前である。

(35)　PDRCCOUNT=自動再接続機能でのCONNECTのリトライ回数

　　　〜＜符号なし整数＞((1〜200))《5》

自動再接続機能で再接続するときの，CONNECTのリトライ回数を指定します。この環境変数は，PDAUTORECONNECT=YESを指定した場合に有効になります。

(36)　PDRCINTERVAL=自動再接続機能でのCONNECTのリトライ間隔

　　　〜＜符号なし整数＞((1〜600))《5》（単位：秒）

自動再接続機能で再接続するときのCONNECTのリトライ間隔を指定します。この環境変数は，PDAUTORECONNECT=YESを指定した場合に有効になります。

(37)　PDRCTIMING=｛ALL｜再接続契機［，再接続契機［，再接続契機］］｝

自動再接続機能で再接続する場合の再接続契機を指定します。

SQL実行シーケンスでの自動再接続契機とPDRCTIMING指定値の対応については，「自動再接続機能」を参照してください。

この環境定義はPDAUTORECONNECT=YESを指定した場合に有効になります。

ALL：

すべての契機で自動再接続を適用します。

再接続契機：

次のどれか一つ，又は複数を組み合わせて指定してください。

CNCT：

CONNECT文を実行した場合で接続障害を検知したときに，自動再接続を適用します。

NOTRN：

トランザクション未発生で実行したSQLが接続障害を検知した場合に，自動再接続を適用します。

TRN：

トランザクション発生中に実行したSQLが接続障害でエラーとなった後，CONNECT文を実行しないでSQLを実行した場合に，自動再接続を適用します。

《規則》

再接続契機は順不同で指定できます。

再接続契機を複数指定する場合は，再接続契機ごとにコンマ（,）で区切って指定してください。Type4 JDBCドライバ以外を使用している場合，コンマの前後には空白を含めないでください。空白を含んだ場合はエラーとなります。

同じ再接続契機を複数回指定した場合はエラーとなります。

《指定例》

（例1）すべての契機で自動再接続を適用したい場合

PDRCTIMING = ALL（または，PDRCTIMING = CNCT,NOTRN,TRN）

（例2）CONNECT文を実行したとき，およびトランザクション未発生でSQL文を実行したときに，自動再接続を適用したい場合

PDRCTIMING = CNCT,NOTRN

(38)　PDAUTHTYPE=｛PA｜CHA［/SHA-256］［/SHA-512］｝

HiRDBクライアントがサーバへ接続するときの認証方式を指定します。

PA：

PA方式で接続します。

CHA：

CHA方式で接続します。

次のオプションを指定することで，CHA方式で使用するハッシュ関数を選択できます。

/SHA-256：CHA方式のハッシュ関数としてSHA-256を使用します。

/SHA-512：CHA方式のハッシュ関数としてSHA-512を使用します。

/SHA-256と/SHA-512の両方指定した場合，及び両方を省略した場合は，サーバと接続でき，かつセキュリティがより高い方式が自動的に選択されます。

《注意事項》

システム共通定義pd_connect_auth_typeオペランドと一致しない認証方式を指定すると，HiRDBサーバ接続時に認証エラーとなります。詳細はマニュアル「HiRDB システム運用ガイド」の「HiRDB接続時のパスワード秘匿化機能の設定方法」を参照してください。

(39)　PDUAPENVFILE=UAP環境定義のファイル名

　　　〜＜識別子＞((最大8文字))

UAPを個別の環境で実行する場合，その環境を定義したUAP環境定義のファイル名を指定します。この環境変数を指定すると，UAPごとに実行環境を切り替える運用ができます。

UAP環境定義については，マニュアル「HiRDB システム定義」を参照してください。

UAP環境定義の定義内容に誤りがある場合は，CONNECT時に定義エラーとなります。また，UAP環境定義のファイルに定義がない場合は，PDUAPENVFILEの指定は無効になります。

Windows版のHiRDBの場合，UAP環境定義のファイル名は，大文字，小文字が区別されません。したがって，大文字，小文字が異なるだけで名前が同じファイルは，同一ファイルとして扱われるため注意してください。

(40)　PDDBBUFLRU=｛YES｜NO｝

OLTP環境のUAPの場合，UAPごとにグローバルバッファのLRU方式を変更するかどうかを指定します。

YES：

LRU方式を適用します。

NO：

LRU方式を適用しません。この場合，バッファヒットしなかったページは，グローバルバッファ不足発生時に，アクセス頻度に関係なくグローバルバッファからの追い出し対象となります。そのため，新たにグローバルバッファ上にキャッシュするページ数を最小限にできます。

《適用基準》

通常はこの環境変数を省略してください（LRU方式を適用してください）。OLTP環境で，グローバルバッファを使用した大量検索，又は大量更新のUAPを実行する場合，グローバルバッファにキャッシュされた最新の内容がグローバルバッファから追い出されるため，性能が一時的に低下することがあります。これを回避する場合，OLTP環境で大量検索，又は大量更新をするUAPに対して，PDDBBUFLRU=NOを指定します。

《留意事項》

LRU方式を適用しないUAPがアクセスしたページは，グローバルバッファ不足発生時に，アクセス頻度に関係なくグローバルバッファからの追い出し対象となります。そのため，LRU方式を適用しないUAPは，バッファヒット率の低下に伴う入出力回数の増加によって，レスポンス性能が低下することがあります。

UAPのSQL処理では，1〜4面のグローバルバッファが同時に確保されます。したがって，LRU方式を適用しない場合でも，UAPごとにグローバルバッファにキャッシュされているページのうち，1〜4面はグローバルバッファから追い出される可能性があります。

更新するUAPに対してLRU方式を適用しない場合，DBへの書き込み頻度が高くなります。そのため，ログ出力契機が頻繁に発生し，LRU方式適用時に比べると，出力されるログ量が多くなります。この場合，システムログファイルの容量不足が発生する可能性があるため，次のどちらかの対処をしてください。

・システムログファイルの容量を再度見積もる。

・クライアント環境定義のPDDBLOGオペランドにNOを指定する。

LRU方式を適用しない場合のログ量の見積もり計算式を次に示します。なお，システム定義のpd_log_rec_lengオペランドの指定値を1,024にすると，LRU方式を適用しない場合の出力ログ量を最小に抑えられます。

更新GET数※×pd_log_rec_lengオペランドの指定値

注※

更新GET数は，UAP統計レポートのDIDUCの値，又はUAPに関する統計情報のDIDUCの値で確認できます。

(41)　PDHATRNQUEUING=NO

システム定義のpd_ha_transactionオペランドにqueuingを指定している場合，トランザクションキューイング機能の適用を，各クライアントで変更したいときに指定します。トランザクションキューイング機能を適用しないクライアントの場合に，NOを指定してください。

NO：

クライアントからの接続時にトランザクションキューイング機能を適用しません。

トランザクションキューイング機能については，マニュアル「HiRDB システム運用ガイド」を参照してください。

(42)　PDCLTBINDLOOPBACKADDR=｛YES｜NO｝

HiRDBサーバとの通信で使用する受信ポートの生成時，ループバックアドレスでbind()するかどうかを指定します。

YES：

ループバックアドレスでbind()します。

NO：

ループバックアドレスでbind()しません。

システム共通定義のpdunit -xオペランドにループバックアドレスを指定している場合は，この環境変数にYESを指定してください。

この環境変数は，HiRDBサーバがWindows版の場合に指定できます。この環境変数を指定する場合は，マニュアル「HiRDB システム導入・設計ガイド」の，Windowsファイアウォールの例外リストへの登録についての説明を参照してください。

(43)　PDEXTDECCHECK=｛YES｜NO｝

外部10進項目のDISPLAY SIGN LEADING SEPARATE形式，及びDISPLAY SIGN TRAILING形式の入力データが，正又は負の符号と数字で構成されているかをチェックします。

YES：

入力データが正又は負の符号と数字で構成されているかをクライアント側でチェックします。

各形式の入力データの内容が，次のすべての条件を満たしているときは，クライアント側でエラーになりません。

DISPLAY SIGN LEADING SEPARATE形式の場合

・先頭1バイトが符号（'+'(0x2B)又は'-'(0x2D)）

・2バイトから最終バイトまで数字（0x30〜0x39）

DISPLAY SIGN TRAILING形式の場合

・先頭バイトから最終バイトの一つ前まで数字（0x30〜0x39）

・最終バイトが0x30〜0x39又は0x70〜0x79

上記以外の場合は，エラーとなりKFPA11326-Eメッセージが出力されます。

NO：

入力データが正又は負の符号と数字で構成されているかをチェックしません。この場合，入力データは無条件にDECIMAL形式に変換してサーバに送信します。

《適用基準》

HiRDBでは，外部10進項目の入力データを数字として扱います。外部10進項目のDISPLAY SIGN LEADING SEPARATE形式，及びDISPLAY SIGN TRAILING形式の入力データに，数字以外のデータが含まれているかどうかをチェックしたい場合に，PDEXTDECCHECK=YESを指定してください。

(44)　PDDEFAULTOPTION＝｛RECOM｜V0904｝

クライアント環境定義及びプリプロセスのオプションについて，省略時の動作を指定します。通常は，この環境変数を指定する必要はありません。互換モードを適用したい場合に，指定してください。

バージョンによって省略値が異なるクライアント環境定義及びプリプロセスのオプションについては，「バージョン，リビジョンによるクライアント環境定義及びプリプロセスオプションの変更点」を参照してください。

RECOM：

推奨モードを適用します。

V0904：

0904互換モードを適用します。

(45)　PDIPCFILEDIR=通信情報ファイルディレクトリ

　　　〜<パス名>((最大80バイト))《/dev/HiRDB/pth》

HiRDBクライアントとHiRDBサーバが同一マシンにある場合の通信情報ファイルディレクトリを指定します。このクライアント環境定義の有効範囲を次に示します。

プラットフォーム

クライアント環境定義PDIPCの値

有効/無効

HP-UX，AIX

MEMORY

○

DEFAULT

○

Linux

MEMORY

○

DEFAULT

×

Windows

MEMORY

×

DEFAULT

×

（凡例）

○：有効

×：無効

このクライアント環境定義には，同一マシンのHiRDBサーバのシステム共通定義pd_ipc_file_dirと同じ値を設定する必要があります。値が不一致であった場合の動作を次に示します。

プラットフォーム

クライアント環境定義PDIPCの値

HiRDBサーバへの接続可否

動作

HP-UX，AIX

MEMORY

×

HiRDBクライアント側で，KFPA11723-E（HiRDB NOT UP又はNETWORK）となります。

DEFAULT

Linux

MEMORY

○

プロセス間メモリ通信機能を使用しないで，デフォルトの通信方式（TCP/IP）を使用して，HiRDBサーバに接続します。

（凡例）

○：接続できる

×：接続できない

プロセス間メモリ通信機能が有効になっているかどうかは，SQLトレースの「システムが使用する情報」で確認できます。詳細は「SQLトレース機能」を参照してください。

このクライアント環境定義が有効で，かつ/dev/HiRDB/pth以外の値を指定した場合，HiRDB 10-04より前のHiRDBサーバへの接続がエラーとなります。また，HiRDBグループが異なるユーザでのHiRDBサーバへの接続がエラーとなります。HiRDBサーバへの接続可否を次に示します。

プラットフォーム

クライアント環境定義PDIPCの値

クライアント環境定義PDIPCFILEDIRの値

10-04より前のHiRDBサーバへの接続

HiRDBグループが異なるユーザでのHiRDBサーバへの接続

HP-UX，AIX

MEMORY

指定あり

×

指定なし

〇

DEFAULT

指定あり

×

指定なし

〇

Linux

MEMORY

指定あり

×

指定なし

〇

（凡例）

○：接続できる

×：接続できない（/dev/HiRDB/pth以外の通信情報ファイルディレクトリを指定した場合）

(46)　PDASTHOST=HiRDB Control Manager - Agentのホスト名［，予備系HiRDB Control Manager - Agentのホスト名］

　　　〜＜識別子＞《PDHOSTの指定値》

UAPからコマンドを実行する場合，接続するHiRDB Control Manager - Agentのホスト名を指定します。なお，UAPからコマンドを実行するには，SQLのCOMMAND EXECUTEを使用します。

UAPからコマンドを実行すると，実際にはHiRDB Control Manager - Agentがそのコマンドを実行します。

HiRDB/パラレルサーバの場合は，システムマネジャがあるサーバマシンのホスト名を指定してください。

ホスト名以外にも，FQDN，及びIPアドレスでも指定できます。指定方法を次に示します。

ホスト名：

システム共通定義のpdunit -xオペランドで指定したホスト名を指定します。

（指定例）

PDASTHOST=host1

FQDN：

HiRDBサーバのホスト名とドメイン名とを，ピリオドで結んで指定します。

（指定例）

PDASTHOST=host1.soft.hitachi.co.jp

IPアドレス：

IPアドレスは，バイトごとにピリオドで区切られた10進数で指定します。

（指定例）

PDASTHOST=172.18.131.34

《IPアドレスを引き継がない系切り替えをする場合》

IPアドレスを引き継がない系切り替えをする場合，現用系及び予備系の二つのホスト名を指定してください。現用系のホスト名だけを指定すると，系が切り替わった後に，この環境変数の指定を新しく実行系になったホスト名に変更する必要があります。

(47)　PDASTPORT=HiRDB Control Manager - Agentのポート番号

　　　〜＜符号なし整数＞((5001〜49999))

UAPからコマンドを実行する場合，接続するHiRDB Control Manager - Agentのポート番号を指定します。

ポート番号は，servicesファイル（UNIX版の場合は/etc/services，Windows版の場合は%windir%¥system32¥drivers¥etc¥services）に登録したものを指定してください。

(48)　PDSYSTEMID=HiRDB Control Manager - Agentが管理するHiRDBサーバのHiRDB識別子

　　　〜＜識別子＞((4文字))

UAPからコマンドを実行する場合，接続するHiRDB Control Manager - Agentが管理しているHiRDBサーバのHiRDB識別子を指定します。HiRDB識別子は，システム定義のpd_system_idオペランドでの指定値を指定してください。

(49)　PDASTUSER=OSのユーザ名/パスワード

　　　〜《PDUSERの指定値》

UAPからコマンドを実行する場合，そのコマンドを実行するOSのユーザ名，及びパスワードを指定します。そのコマンドの実行権限を持つOSのユーザ名，及びパスワードでなければなりません。「ユーザ名/パスワード」の形式で指定してください。

パスワードの指定が必要ない（パスワードのないユーザに対して設定する）場合は，パスワードを省略できます。

OSのユーザ名，パスワードはそれぞれ大文字，小文字の指定に関係なく大文字として扱われます。ただし，小文字を引用符で囲んだ場合は，小文字として扱われます。

なお，簡易認証ユーザでHiRDBに接続している場合は，この環境変数を省略しないで，コマンドを実行するユーザ名，及びパスワードを指定してください。省略した場合は，エラーメッセージ（KFPA11724-E）が表示され，サーバへの接続に失敗します。

(50)　PDCMDWAITTIME=コマンド実行時のクライアントの最大待ち時間

　　　〜＜符号なし整数＞((0，6〜43200))《0》（単位：分）

UAPからコマンドを実行する場合，クライアントがHiRDB Control Manager - Agentへ要求をしてから応答が返るまでの，クライアントの最大待ち時間を指定します。

0を指定した場合，クライアントはHiRDB Control Manager - Agentから応答が返るまで待ち続けます。

指定した最大待ち時間を過ぎてもHiRDB Control Manager - Agentから応答が返らない場合，クライアント（UAP）にエラーリターンします。このとき，UAP中のコマンドがまだ処理中の場合は，HiRDB Control Manager - Agent，又は実行中のコマンドをキャンセルする必要があります。

(51)　PDCMDTRACE=コマンドトレースファイルのサイズ

　　　〜＜符号なし整数＞((0，4096〜2000000000))（単位：バイト）

UAPからコマンドを実行する場合，コマンドトレースを出力するファイルのサイズを指定します。

0を指定した場合はファイルの最大サイズとなり，最大サイズを超えるとコマンドトレースは出力されません。4,096〜2,000,000,000を指定した場合は指定値のファイルサイズとなり，指定値のファイルサイズを超えると出力先が切り替わります。この環境変数を省略した場合，コマンドトレースは取得されません。

コマンドトレースについては，「コマンドトレース機能」を参照してください。

《ほかの環境変数との関係》

コマンドトレースを出力するファイルは，PDCLTPATHに指定したディレクトリに作成されます。PDCLTPATHを省略している場合，UAPを実行したときのカレントディレクトリ（OpenTP1から実行するUAPの場合はOpenTP1のインストールディレクトリ¥tmp¥home¥サーバ名XX）下に作成されます。

(52)　PDIPC=｛MEMORY｜DEFAULT｝

サーバとクライアントが同一ホストにある場合，プロセス間の通信方法を指定します。

MEMORY：

プロセス間の通信にメモリを使用します。これを，プロセス間メモリ通信機能といいます。

DEFAULT：

プロセス間の通信に，各プラットフォームでのデフォルトの通信方式（TCP/IP又はPIPE）を使用します。

《留意事項》

クライアントとサーバが同一ホストでない場合，PDIPCの指定は無効になります（DEFAULTが仮定されます）。このとき，接続処理が遅くなることがあります。

マルチスレッド用XAインタフェースライブラリ（Windows版クライアントの場合はpdcltxm.dll，UNIX版クライアントの場合はlibzcltxk.sl(so)，又はlibzcltyk.sl(so)）を使用してXAインタフェースでHiRDBにアクセスし，かつTPBroker for C++下のUAPをクライアントとする場合，この環境変数の指定は無効になり，DEFAULTが仮定されます。

UNIX版クライアントでPDIPC=MEMORYを指定した場合，クライアントの接続ごとにPDSENDMEMSIZE及びPDRECVMEMSIZEの指定値分の共用メモリが確保されます。したがって，複数のクライアントを同時に実行した場合，共用メモリが不足することがあるため，使用できる共用メモリのサイズを考慮して，PDSENDMEMSIZE及びPDRECVMEMSIZEを指定する必要があります。

PDIPC=MEMORYを指定した場合，PDCLTRCVADDRの指定は無効になります。

PDIPC=MEMORYを指定して，同時にPDUAPREPLVLにp，r，若しくはaを指定している場合，又はPDWRTLNFILSZを指定している場合，PDIPCの指定は無効になります。

(53)　PDSENDMEMSIZE=クライアント側のデータ送信用メモリサイズ

　　　〜＜符号なし整数＞((4〜2097152))《16》（単位：キロバイト）

プロセス間メモリ通信機能を使用する場合，クライアントからサーバへデータを送るときの，データ格納領域サイズを4の倍数で指定します。この環境変数は，PDIPC=MEMORYの場合に有効になります。

指定値が4の倍数でない場合，4の倍数の値に切り上げられます。

ここで指定したサイズ以上のデータを送ると，プロセス間メモリ通信機能は使用できなくなります（PDIPC＝DEFAULTの通信方法となります）。

《見積もり方法》

指定値は，次の計算式から見積もってください。

指定値（単位：バイト）＝
　↑（400＋16×検索列数＋16×？パラメタ数＋SQL文長）÷4096↑×4

なお，この計算式は，実際の通信で送信するデータ量とは異なります。

(54)　PDRECVMEMSIZE=クライアント側のデータ受信用メモリサイズ

　　　〜＜符号なし整数＞((4〜2097152))《32》（単位：キロバイト）

プロセス間メモリ通信機能を使用する場合，クライアントがサーバからデータを受け取るときの，データ格納領域サイズを4の倍数で指定します。この環境変数は，PDIPC=MEMORYの場合に有効になります。

指定値が4の倍数でない場合，4の倍数の値に切り上げられます。

ここで指定したサイズ以上のデータを受け取ると，プロセス間メモリ通信機能は使用できなくなります（PDIPC＝DEFAULTの通信方法となります）。

《見積もり方法》

指定値は，次の計算式から見積もってください。

指定値（単位：バイト）＝
　↑（600＋25×検索列数＋Σ 列のデータ長）÷4096↑×4

列のデータ長は，VARCHARの場合は構造体長にしてください。また，配列FETCH，又は繰返し列を受け取る場合は，「列のデータ長×配列数」，又は「列のデータ長×繰り返し数の要素」にしてください。

PDBLKFを指定している場合は，次の計算式から値を求めてください。

指定値（単位：バイト）＝
　↑（600＋19×検索列数＋（7×検索列数＋Σ 列のデータ長）
　　　×PDBLKFの値）÷4096↑×4

なお，この計算式は，実際の通信で送信するデータ量とは異なります。

(55)　PDCWAITTIME=クライアントの最大待ち時間

　　　〜<符号なし整数>((0〜65535))《0》（単位：秒）

HiRDBクライアントからHiRDBサーバへ要求をしてから，応答が戻ってくるまでのHiRDBクライアントの最大待ち時間を指定します。長時間SQLの時間監視をする場合など指定してください。

《見積もり方法》

指定値は次の条件を満たすようにしてください。SQL処理に時間が掛かったときの原因を特定しやすくなります。

OpenTP1システム定義のwatch_time又はtrn_expiration_time＞PDCWAITTIME＞pd_lck_wait_timeout

なお，OpenTP1を使用していない場合，OpenTP1システム定義は無視してください。

《留意事項》

0を指定した場合，HiRDBクライアントはHiRDBサーバからの応答があるまで待ち続けます。

最大待ち時間を経過してもHiRDBサーバから応答がない場合には，UAPにエラーリターンします。このとき，トランザクション処理中の場合は，HiRDBサーバ側のプロセスをキャンセルします。

0を指定した場合に，次のような障害が発生すると，HiRDBクライアントが無応答状態になることがあります。

・通信障害（HiRDBクライアントとHiRDBサーバ，及びHiRDBサーバとHiRDBサーバの通信障害（一時的な障害も含む））

・ディスク障害などでのプロセスの沈み込み

したがって，設定値には，0以外で，かつ各SQL実行時間の最大値より大きな値を指定することをお勧めします。設定値は次に示す点を考慮してください。

・排他待ち限界経過時間を迎えても待ち状態が解除されない場合に，排他待ちのタイムアウト情報を出力したい場合は，次の条件を満たす値となるよう設定してください。

　PDCWAITTIME＞pd_lck_wait_timeout（PDLCKWAITTIME指定時はPDLCKWAITTIME）

タイムアウト情報については，マニュアル「HiRDB システム運用ガイド」の「タイムアウト情報の出力内容」，pd_lck_wait_timeoutオペランドについては，マニュアル「HiRDB システム定義」の「システム共通定義」を参照してください。

・トランザクションキューイング機能によってトランザクションをリトライ，又はキューイングしている間に，PDCWAITTIMEに指定した時間を超過してトランザクションをエラーとしたくない場合は，次の条件を満たす値となるよう設定してください。

　PDCWAITTIME＞pd_ha_trn_queuing_wait_time＋pd_ha_trn_restart_retry_time

トランザクションキューイング機能については，マニュアル「HiRDB システム運用ガイド」の「トランザクションキューイング機能」，pd_ha_trn_queuing_wait_time及びpd_ha_trn_restart_retry_timeオペランドについては，マニュアル「HiRDB システム定義」の「システム共通定義」を参照してください。

(56)　PDSWAITTIME=トランザクション処理中のサーバの最大待ち時間

　　　〜<符号なし整数>((0〜65535))《600》（単位：秒）

HiRDBサーバがHiRDBクライアントからの要求に対する応答を返してから，次にHiRDBクライアントから要求が来るまでのHiRDBサーバの最大待ち時間を指定します。この時間監視は，トランザクション処理中（SQL実行開始からコミット，ロールバックまでの区間）の時間を対象とします。監視時間は，次の時点でリセットされます。

HiRDBクライアントからの要求がHiRDBサーバへ到着した時点

HiRDBクライアントが定期的に送信するパケットをHiRDBサーバが受信した時点

ただし，上記2の時点でリセットするのは，次のどれかの条件に該当する場合です。

環境変数PDKALVLに2を指定

環境変数PDKALVLを省略し，環境変数PDDEFAULTOPTIONにRECOMを指定

環境変数PDKALVL，及び環境変数PDDEFAULTOPTIONを省略

指定した時間内にHiRDBクライアントから次の要求が来なかった場合，HiRDBクライアントに異常が発生したものとみなし，実行中のトランザクションをロールバックします。また，HiRDBクライアントとの接続をHiRDBクライアントへ通知しないで切断します。

0を指定した場合，HiRDBサーバはHiRDBクライアントからの要求があるまで待ち続けます。また，クライアントマシンやネットワークがダウンしたとき，ダウンを検知できないことがあります。

大き過ぎる値を指定した場合，クライアントマシンやネットワークがダウンしたとき，ダウンの検知までに時間が掛かります。

この環境変数は，プロセスの残存を回避する場合など指定してください。

《留意事項》

ブロック転送機能（PDBLKF）を使用していると，HiRDBサーバからブロック転送されてきた行がなくなるまでHiRDBクライアント内でFETCH文処理をします。このため，FETCH文処理が終了するまでHiRDBクライアントからHiRDBサーバへ要求をしません。したがって，ブロック転送機能を使用する場合，この環境変数には，ブロック転送数分のFETCH文処理の時間を含めた値を設定してください。

OLTP下のUAPをクライアントとする運用形態の場合，必ずこの環境変数を指定してください。指定しない場合は，600秒が仮定され，不当に接続が切れる場合があります。

(57)　PDSWATCHTIME=トランザクション処理以外のサーバの最大待ち時間

　　　〜<符号なし整数>((0〜65535))（単位：秒）

HiRDBサーバがHiRDBクライアントからの要求に対する応答を返してから，次にHiRDBクライアントから要求が来るまでのHiRDBサーバの最大待ち時間を指定します。この監視時間は，トランザクション処理以外（SQL実行開始からコミット，又はロールバックするまでの区間外）の時間を対象とします。監視時間は，次の時点でリセットされます。

HiRDBクライアントからの要求がHiRDBサーバへ到着した時点

HiRDBクライアントが定期的に送信するパケットをHiRDBサーバが受信した時点

ただし，上記2の時点でリセットするのは，次のどれかの条件に該当する場合です。

環境変数PDKALVLに2を指定

環境変数PDKALVLを省略し，環境変数PDDEFAULTOPTIONにRECOMを指定

環境変数PDKALVL，及び環境変数PDDEFAULTOPTIONを省略

指定した時間内にHiRDBクライアントからの要求がなかった場合，HiRDBクライアントに異常が発生したものとみなし，HiRDBサーバがHiRDBクライアントとの接続を切断します。この場合，HiRDBクライアントへは切断の通知をしません。

0を指定した場合，HiRDBサーバはHiRDBクライアントからの要求があるまで待ち続けます。

なお，0を指定した場合，クライアントマシンやネットワークがダウンしたとき，ダウンを検知できないことがあります。

大き過ぎる値を指定した場合，クライアントマシンやネットワークがダウンしたとき，ダウンの検知までに時間が掛かります。

この環境変数は，プロセスの残存を回避する場合など指定してください。

《システム定義との関係》

この環境変数を省略すると，次の値を使用してトランザクション開始までの時間を監視します。

UNIX版の場合：0

Windows版の場合：システム定義のpd_watch_pc_client_timeオペランドで指定した値

pd_watch_pc_client_timeオペランドについては，マニュアル「HiRDB システム定義」を参照してください。

《留意事項》

OLTP下のUAPをクライアントとする運用形態の場合，及びJava EEアプリケーションサーバのコネクションプーリングを使用する場合など，HiRDBシステムと常に接続しているUAPでは，次に示すどれかの設定をしてください。

1.PDSWATCHTIMEに0を指定する。

2.PDSWATCHTIMEに0以外を指定し，PDKALVLには2（デフォルト）を指定する。PDKATIMEには，PDSWATCHTIMEより短い値を指定する。

3.（Windows環境の場合だけ）PDSWATCHTIMEを未指定とし，PDKALVLには2（デフォルト）を指定する。PDKATIMEには，システム定義のpd_watch_pc_client_timeオペランドで指定した値より短い値を指定する。

上記1の場合，通信障害が発生したときにサーバ側プロセスが残存するおそれがあるため，2,3を推奨します。ただし，シングルスレッド版のクライアントライブラリを使用しているUAPの場合には，PDKALVLが無効になるため，1を設定してください。

HiRDBサーバがHiRDBクライアントとの接続を切断しても，HiRDBサーバはHiRDBクライアントに切断したことを通知しないので，注意が必要です。

《ほかの環境変数との関係》

PDCWAITTIME，PDSWAITTIME，及びPDSWATCHTIMEの関係を次の図に示します。

図6‒5　PDCWAITTIME，PDSWAITTIME，及びPDSWATCHTIMEの関係

(58)　PDCWAITTIMEWRNPNT=SQL実行時間警告出力の契機

SQL実行時間警告出力機能使用時に，SQL実行時間警告情報ファイルを出力する契機を指定します。

SQL実行時間警告出力機能とは，SQLの実行時間がある一定時間を超えた場合，SQL実行時間警告情報ファイルと警告メッセージ（KFPA20009-W）を出力する機能のことをいいます。SQL実行時間警告出力機能については，マニュアル「HiRDB システム運用ガイド」を参照してください。

SQL実行時間警告情報ファイルを出力する契機は，次のどれかの方法で指定します。

PDCWAITTIMEの指定値に対する比率（小数点を指定しない場合）：

　　　〜<符号なし整数>((0〜99))（単位：％）

PDCWAITTIMEの指定値に対する比率を指定します。例えば，PDCWAITTIMEオペランドに100（秒）を指定し，PDCWAITTIMEWRNPNTに90（％）を指定すると，SQLの実行後にHiRDBがSQLの実行時間を調べます。その結果，SQLの実行時間が90秒以上100秒未満の場合に警告情報が出力されます。

PDCWAITTIMEの指定値に対する比率（小数点を指定する場合）：

　　　〜<符号なし10進数>((0〜99.999999))（単位：％）

PDCWAITTIMEの指定値に対する比率（小数点を含む比率）を指定します。

SQL実行時間警告出力の契機となる時間（auto指定なし）：

　　　〜<符号なし10進数>sec((0〜PDCWAITTIME))（単位：秒）

SQL実行時間警告出力の契機となる時間を指定します（例えば，60秒の場合はPDCWAITTIMEWRNPNT=60secと指定します）。このとき，時間には小数点を指定できます。なお，上限値は，PDCWAITTIMEの指定値未満となります。

SQL実行時間警告出力の契機となる時間（auto指定あり）：

　　　〜<符号なし整数>sec,auto((0〜PDCWAITTIME))（単位：秒）

SQL実行時間警告出力の契機となる時間を指定します（例えば，60秒の場合はPDCWAITTIMEWRNPNT=60sec,autoと指定します）。上限値は，PDCWAITTIMEの指定値未満となります。

autoを使用した場合，PDCWAITTIMEの指定有無に関係なく，SQLの実行時間がPDCWAITTIMEWRNPNTに指定した時間以上であったとき，そのSQLに対して警告情報を出力します。

《システム定義との関係》

この環境変数を省略すると，システム定義のpd_cwaittime_wrn_pntオぺランドの省略値又は指定値が仮定されます。pd_cwaittime_wrn_pntオペランドについては，マニュアル「HiRDB システム定義」を参照してください。

(59)　PDKALVL=｛0｜1｜2｝

・0904互換モードの場合：《0》

HiRDBクライアントからHiRDBサーバに対して，定期的にパケットを送信する機能を使用するかどうかを指定します。

この環境変数の有効範囲を次の表に示します。

表6‒39　PDKALVLの有効範囲

クライアント種別

有効/無効

埋込み型UAP

シングルスレッド

X/Open準拠のAPI使用

×

X/Open準拠のAPI未使用

×

マルチスレッド

X/Open準拠のAPI使用

○

X/Open準拠のAPI未使用

○

JDBCドライバ

Type2

JTA使用

×

JTA未使用

○

Type4

JDBC2.0

JTA使用

○

JTA未使用

○

JDBC4.0

JTA使用

○

JTA未使用

○

ODBCドライバ

○

OLE DBプロバイダ

○

HiRDBデータプロバイダ for .NET Framework

○

SQLJ

○

（凡例）

○：有効

×：無効

0以外を指定した場合，HiRDBとの接続ごとにパケット送信スレッドを一つ生成します。アプリケーションサーバを使用するなどしてHiRDBとの接続を多数生成する場合は，システムやプロセスでの作成スレッド数を制御するOSのパラメタを見直してください。パケットの送信間隔は，PDKATIMEで指定できます。

0：

定期的にパケットを送信する機能を使用しません。

1：

定期的にパケットを送信する機能を使用します。パケット送信スレッドは，一定時間間隔でHiRDBサーバとの接続経路にパケットを送信します。

HiRDBサーバで時間監視しているPDSWAITTIME，及びPDSWATCHTIMEの監視時間をリセットしません。

HiRDBクライアントとHiRDBサーバが同一マシンの場合，1を指定しないでください。

2：

定期的にパケットを送信する機能を使用します。パケット送信スレッドは，一定時間間隔でHiRDBサーバとの接続経路にパケットを送信し，HiRDBサーバからの返信パケットを受信します。

HiRDBサーバで時間監視しているPDSWAITTIME，及びPDSWATCHTIMEの監視時間をリセットします。

このパケット通信でエラーが発生した場合，SQL実行スレッドが次のSQLを実行するときに，対応するエラーをアプリケーションに返却します。

パケット送信スレッドがHiRDBサーバからの応答の返却を待っている間に，SQL実行スレッドにアプリケーションからSQL要求があった場合，パケット送信スレッドがHiRDBサーバからの応答を受信するまでSQL実行スレッドは待ち状態になります。このため，SQL実行時間が遅くなることがあります。また，設定値に1を指定した場合よりもCPU使用率が高くなります。HiRDBサーバで時間監視しているPDSWAITTIME，及びPDSWATCHTIMEの監視時間をリセットする必要のない場合は，設定値に１を指定することをお勧めします。

《適用基準》

ルータやファイアウォールなどのネットワーク管理アプリケーションでは，一定時間パケットが流れないと接続を切断する，無通信時間監視機能を備えていることがあります。この環境変数に0以外を指定することで，HiRDBの接続を保持したまま，サービスの要求を待機するWebアプリケーションなどが，ネットワーク管理アプリケーションによってHiRDBの接続を不当に切断されることを防げます。

また，HiRDBサーバでの時間監視（PDSWAITTIME，及びPDSWATCHTIME）を無限にしておくと，HiRDBクライアント側のマシンダウンやネットワーク障害の場合，HiRDBサーバプロセスが残ることがあります。この環境変数に2を指定することで，HiRDBサーバの時間監視を無限に設定しないで，HiRDBサーバの時間監視での接続の切断も防げます。この時，PDKATIMEはHiRDBサーバでの時間監視の指定値より小さい値を指定してください。HiRDBサーバでの時間監視の指定値より大きい値を指定すると，HiRDBサーバの時間監視で接続が切断されます。

《適用例》

次の条件の場合には，PDKALVLに1を設定し，PDKATIMEにFirewallの監視時間（例：1,200秒）より少し短い時間（1,000秒）を指定します。

WebアプリケーションでのDBサーバへのSQL実行要求が不定期で，長時間SQLが実行されないことがある。

WebサーバとDBサーバとの間にFirewallがあり，一定時間パケットが流れないで接続が切られてしまうことがある。

次の条件の場合には，PDKALVLに2を設定し，PDKATIMEにPDSWATCHTIMEの監視時間（例：3,600秒）より少し短い時間（3,000秒）を指定します。

コネクションをプーリングするアプリケーションから，HiRDBにアクセスする。

SQL実行要求ごとに接続を再利用するが，長時間使用されない接続があり，PDSWATCHTIMEの監視時間で接続が切られることがある。

DBサーバへのSQL実行要求の間隔が長くなることがあり，PDSWAITTIMEの監視時間で接続が切られることを避けたい場合には，PDKALVLに2を指定し，PDKATIMEにPDSWAITTIMEの監視時間（例：600秒）より少し短い時間（500秒）を指定します。

PDSWATCHTIMEでHiRDBクライアント側のマシンダウンやネットワーク障害を監視し，PDSWAITTIMEでクライアントアプリケーション内の処理遅延を監視したい場合には，PDKALVLに2を指定し，PDKATIMEは次の条件を満たす値となるよう設定してください。

PDSWAITTIME ＜ PDKATIME ＜ PDSWATCHTIME

例として，PDKATIMEにPDSWAITTIMEの監視時間（例：600秒）とPDSWATCHTIMEの監視時間（例：800秒）の間の時間（700秒）を指定します。

(60)　PDKATIME=パケットの送信間隔

　　　〜＜符号なし整数＞((60〜65535))《600》（単位：秒）

・0904互換モードの場合：《3000》

HiRDBクライアントからHiRDBサーバに対して，定期的にパケットを送信する間隔を指定します。リセットしたい監視時間よりも，短い時間を設定してください。

この環境変数は，PDKALVLに0以外を指定した場合にだけ有効になります。

パケット送信時に，SQL実行スレッドがSQL実行中の場合は，パケット送信スレッドはパケット送信をしないで，次回の送信まで待ち状態になります。

(61)　PDTIMEDOUTRETRY=ETIMEDOUT発生時のリトライ回数

　　　〜<符号なし整数>((0〜32767))《2》

HiRDBクライアントがHiRDBサーバと接続する場合に実行する，connect()システムコールでwinsockのWSAETIMEDOUTエラー（UNIX版の場合はETIMEDOUTエラー）が発生したときに，connect()システムコールをリトライする回数を指定します。

《利点》

HiRDBサーバへのconnect()が集中し，listenキューが一杯になった場合，connect()からWSAETIMEDOUTエラー又はETIMEDOUTエラーが返されます。このとき，connect()システムコールをリトライすることで，接続エラーを回避できます。

《留意事項》

ネットワーク障害，及びサーバマシン電源ダウンが原因で発生するWSAETIMEDOUTエラー又はETIMEDOUTエラーの場合，connect()システムコールからのリターンに時間が掛かることがあります。したがって，リトライ回数を多く設定した場合，UAPに接続エラーが返却されるまで時間が掛かることになります。特に，系切り替え時にクライアント接続用のIPアドレスを引き継がない場合，ネットワーク障害などが発生したときには，待機系に切り替わるまで時間が掛かります。このような環境では，リトライ回数を少なく設定することで待機系への切り替え時間を短くできます。

また，クライアント環境変数PDNBLOCKWAITTIMEに0以上を指定している場合，PDTIMEDOUTRETRYの指定は無効になります。

(62)　PDCONREFRCOUNT=ECONNREFUSED発生時のリトライ回数

　　　〜<符号なし整数>((0〜32767))《9》

HiRDBクライアントがHiRDBサーバと接続する場合に実行する，connect()システムコールでwinsockのWSAECONNREFUSEDエラー（UNIX版の場合はECONNREFUSEDエラー）が発生したときに，connect()システムコールをリトライする回数を指定します。

《利点》

このクライアント環境定義に1以上の値を指定すると，HiRDBクライアントはクライアント環境定義PDCONREFRINTERVALに指定した間隔でconnect()システムコールをリトライします。これによって，一時的なネットワーク障害やHiRDBサーバが起動中の場合に発生する接続エラーを回避できます。

《留意事項》

connect()システムコールのリトライにかかる最大時間は，このクライアント環境定義とクライアント環境定義PDCONREFRINTERVALの指定値を乗算した値になります。このため，停止中のHiRDBサーバに接続しようとしてWSAECONNREFUSEDエラー又はECONNREFUSEDエラーが発生した場合，UAPに接続エラーが返却されるまでの時間が遅くなります。したがって，接続エラーを即時検知したい場合はこのクライアント環境定義に0を指定してください。

(63)　PDCONREFRINTERVAL=ECONNREFUSED発生時のリトライ間隔

　　　〜<符号なし整数>((0〜32767))（単位：ミリ秒）

・UNIX版の場合：《700》

・Windows版の場合：《0》

HiRDBクライアントがHiRDBサーバと接続する場合に実行する，connect()システムコールでwinsockのWSAECONNREFUSEDエラー（UNIX版の場合はECONNREFUSEDエラー）が発生したときに，connect()システムコールをリトライする間隔を指定します。

このクライアント環境定義は，クライアント環境定義PDCONREFRCOUNTに0を指定した場合は無効になります。

(64)　PDNBLOCKWAITTIME=ノンブロックモードでのコネクション確立監視時間

　　　〜<符号なし整数>((0〜120))《0》（単位：秒）

HiRDBサーバ，HiRDBクライアント間でコネクション接続完了を監視する場合，ノンブロックモード時のコネクション確立監視時間を指定します。

この環境変数に1以上を指定すると，HiRDBサーバ，HiRDBクライアント間の通信をノンブロック通信にして，connect()システムコールの終了を監視します。これをノンブロックモードといいます。0を指定した場合は，OSのタイムアウト時間までコネクション接続完了を待ちます。これをブロックモードといいます。

《適用基準》

LAN障害時の，connect()システムコールが数十秒（OSに依存）待たされることを回避したいときに指定します（ノンブロックモードにします）。これを指定することで，LAN障害を早く検知できます。なお，この環境変数に0以上を指定した場合，PDTIMEDOUTRETRYの指定の有無に関係なく，PDTIMEDOUTRETRYの指定は無効になります。

この環境変数の指定を省略した場合，又は0を指定した場合，HiRDBサーバからHiRDBクライアントへの通信時のコネクション確立方式は，システム共通定義pd_ipc_clt_conn_nblockオペランドに指定した値によって決まります。

この環境変数とpd_ipc_clt_conn_nblockオペランドとの組み合わせで，コネクション確立をどちらのモードで行うかを次の表に示します。

クライアント環境変数PDNBLOCKWAITTIMEの指定値

pd_ipc_clt_conn_nblockオペランドの指定値

Y

N

0

クライアントがサーバにコネクション確立する場合

ブロックモード。

サーバがクライアントにコネクション確立する場合

ノンブロックモード。

このとき，pd_ipc_clt_conn_nblock_timeオペランドに指定した監視時間で監視します。

ブロックモード。

1以上

ノンブロックモード。

このとき，クライアント環境変数のPDNBLOCKWAITTIMEに指定した監視時間で監視します。

《見積もり方法》

指定値が小さ過ぎる場合，ネットワークの状態によっては不当にエラーとなることがあります。指定値には，次の計算式以上の値を設定してください。

MAX（A＋1，8）

A：

pingなどのOSコマンドで，HiRDBサーバ，HiRDBクライアント間の到達時間を計測した値です。なお，ネットワークの負荷によっては，pingなどの到達時間は変動します。最も負荷の高い状態を想定して測定してください。

《注意事項》

この環境変数には，コネクション確立をブロックモードで行ったときのOS待ち時間よりも大きい値を指定しないでください。指定した場合は，OSの待ち時間で接続タイムアウトになります。

HiRDBサーバとの接続処理は，大きく分けて次の2つから成ります。

TCP/IPのコネクション確立処理(connect()システムコール)

HiRDBサーバとのユーザ認証などのネゴシエーション

この環境変数は1.を監視対象としており，2.は監視対象に含みません。2.を監視する場合，クライアント環境定義PDCONNECTWAITTIMEを指定する必要があります。

(65)　PDCONNECTWAITTIME=サーバ接続時のHiRDBクライアントの最大待ち時間

　　　〜<符号なし整数>((1〜300))《300》（単位：秒）

HiRDBサーバとの接続時，HiRDBサーバから応答が戻ってくるまでのHiRDBクライアントの最大待ち時間を指定します。

HiRDBサーバがHiRDBクライアントから接続要求を受け取った状態で，系切り替えやシステムダウンが発生した場合，HiRDBクライアントは指定した時間だけ応答を待ちます。

《適用基準》

系切り替え機能を使用している場合，早期にアプリケーションに障害を検知させるときに指定します。この環境変数と同時にPDNBLOCKWAITTIMEを指定すると，更に検知が早くなります。

《見積もり方法》

指定値が小さ過ぎる場合，ネットワークの状態や接続時のスケジュール待ちで時間が掛かって，正常な接続処理がエラーとなることがあります。指定値には，次の計算式以上の値を設定してください。

MIN（システム定義pd_max_usersオペランドの値×0.2，300）

《ほかの環境変数との関係》

PDTIMEDOUTRETRY，PDNBLOCKWAITTIME，及びPDCONNECTWAITTIMEの関係を次の図に示します。

図6‒6　PDTIMEDOUTRETRY，PDNBLOCKWAITTIME，及びPDCONNECTWAITTIMEの関係

(66)　PDCLTPATH=トレースファイル格納ディレクトリ

　　　〜<パス名>((最大256バイト))《カレントディレクトリのパス名》

HiRDBクライアントが作成するSQLトレースファイル及びクライアントエラーログファイルの格納先ディレクトリを指定します。

(67)　PDSQLTRACE=SQLトレースファイルのサイズ

　　　〜<符号なし整数>((0，4096〜2000000000))（単位：バイト）

UAPのSQLトレースを出力する，SQLトレースファイルのサイズを指定します。

0を指定した場合は，ファイルを切り替えないで，一つのファイルへ出力し続けます。サイズの制限はありません。4,096〜2,000,000,000を指定した場合は指定値のサイズとなり，指定値のサイズを超えると出力先が切り替わります。省略した場合は，SQLトレースを出力しません。

SQLトレースについては，「SQLトレース機能」を参照してください。

《ほかの環境変数との関係》

SQLトレースは，PDCLTPATHで指定したディレクトリに出力されます。PDCLTPATHの指定がない場合，UAPを起動したときのカレントディレクトリ（OpenTP1から起動されるUAPの場合，%DCDIR%¥tmp¥home¥サーバ名xxのディレクトリ）の下に出力されます。

《見積もり方法》

SQLトレースファイルのサイズは，取得したいSQL文の数から求めてください。取得したいSQL文の，それぞれの「1行（80バイト）＋SQL文のサイズ」を求めて，すべてを合計した値を指定値の目安としてください。

(68)　PDUAPERLOG=クライアントエラーログファイルのサイズ

　　　〜<符号なし整数>((0，4096〜2000000000))《65536》（単位：バイト）

UAPのエラーログを出力する，クライアントエラーログファイルのサイズを指定します。

0を指定した場合はファイルの最大サイズとなり，最大サイズを超えるとクライアントエラーログは出力されません。4,096〜2,000,000,000を指定した場合は指定値のサイズとなり，指定値のサイズを超えると出力先が切り替わります。

クライアントエラーログについては，「クライアントエラーログ機能」を参照してください。

《ほかの環境変数との関係》

クライアントエラーログは，PDCLTPATHで指定したディレクトリに出力されます。PDCLTPATHの指定がない場合，UAPを起動したときのカレントディレクトリ（OpenTP1から起動されるUAPの場合，%DCDIR%¥tmp¥home¥サーバ名××のディレクトリ）の下に出力されます。

(69)　PDERRSKIPCODE=SQLCODE［，SQLCODE］…

クライアントエラーログへのメッセージ出力を抑止するSQLCODEを指定します。SQLCODEは最大10個指定できます。

例えば，SQLCODE−901と−917を抑止する場合は，次のように指定します。

 PDERRSKIPCODE=-901,-917

《利点》

UAPの構造によっては，SQLの処理で必然的にエラーが発生することがあります。通常の業務でこのようなエラーが頻繁に発生すると，ファイルシステムを圧迫してしまうおそれがあります。特に，X/Openに従ったAPIを使用するUAPの場合，プロセスごとにクライアントエラーログファイルを二つ作成してしまいます。この環境変数を指定すると，特定のエラーについてはメッセージの出力を抑止できるので，ファイルシステムへの負荷を軽減できます。

《適用基準》

次の条件をすべて満たす場合に適用してください。

UAPの構造上エラーが頻繁に発生する。

あらかじめ障害の原因が特定できて，その要因を調査する必要がない。

この環境変数を指定すると，不慮の障害が発生したときにその原因を調査できなくなります。適用する場合には注意してください。

(70)　PDPRMTRC=｛YES｜NO｜IN｜OUT｜INOUT｝

SQLトレースにパラメタ情報及び検索データを出力するかどうかを指定します。出力内容については，「SQLトレース機能」を参照してください。

YES：

SQLトレースに入力用パラメタ情報を出力します。YESを指定した場合，検索データ情報と入力パラメタを出力します。

NO：

SQLトレースにパラメタ情報を出力しません。

IN：

SQLトレースに入力用パラメタ情報を出力します。CALL文のINパラメタとINOUTパラメタ※も該当します。

OUT：

SQLトレースに出力用パラメタ情報，及び検索データ情報を出力します。CALL文のOUTパラメタとINOUTパラメタ※も該当します。

INOUT：

SQLトレースに入力用パラメタ情報，出力用パラメタ情報，及び検索データ情報を出力します。CALL文のINOUTパラメタ※は2回出力します。

注※

CALL文のINOUTパラメタの情報は，出力データだけとなります。

(71)　PDPRMTRCSIZE=SQLトレースに出力するパラメタ情報の最大データ長

　　　〜<符号なし整数>((4〜32008))《256》（単位：バイト）

SQLトレースに出力するパラメタ情報及び検索データの最大データ長を指定します。可変長文字列型，BLOB型，及びBINARY型の場合，文字列長の領域もデータ長に含まれます。

この環境変数は，PDPRMTRC=NO以外の場合に有効になります。

この環境変数の指定値を大きくすると，出力する情報量が増えます。そのため，SQLトレースファイルのサイズ（PDSQLTRACEの指定値）も大きくする必要があります。

(72)　PDTRCMODE=｛ERR｜NONE｝

SQLトレース以外のトラブルシュート情報（pderr*.trcの情報）を出力するかどうかを指定します。

ERR：pderr*.trcの情報を出力します。

NONE：pderr*.trcの情報を出力しません。

(73)　PDUAPREPLVL=｛[s] [u[o][t]] [p] [r] ｜[a [o][t]]｝

UAP統計レポートの出力情報を指定します。UAP統計レポートを出力するファイルをUAP統計レポートファイルといいます。この環境変数は，PDSQLTRACEを指定しているときに有効になります。

省略した場合，SQLトレース情報だけ出力されます。

なお，UAP統計レポートについては，「UAP統計レポート機能」を参照してください。

s：SQL単位の情報が出力されます。また，SQLトレース情報も出力されます。

u：UAP単位の情報が出力されます。

p：アクセスパス情報が出力されます。

r：SQL実行時の中間結果情報が出力されます。

o：UAP単位の情報にスレッド間ロック待ち時間が出力されます。u又はaが指定されていない場合，このオプションを指定しても無視されます。このオプションを指定すると，システム全体の性能に影響を与えるおそれがあります。通常の運用では指定しないでください。

t：UAP単位の情報をトランザクション単位に集計して出力します。u又はaが指定されていない場合，このオプションを指定しても無視されます。

a：suprを指定した場合と同じ情報が出力されます。

s，u，p，及びrを組み合わせて指定できます（su，sr，uprなど）。u又はaを指定した場合，o，tも指定できます。

a，o，及びtを組み合わせた指定方法と，同じ情報が出力されるs，u，o，t，p，及びrを組み合わせた指定方法を次に示します。

a，o，及びtを組み合わせた指定方法

s，u，o，t，p，及びrを組み合わせた指定方法

a

supr

ao

suopr

aot

suotpr

at

sutpr

例えば，aを指定した場合とsuprを指定した場合では同じ情報が出力されます。なお，s又はaを指定しない場合，SQLトレース情報は出力されません。

《留意事項》

アクセスパス情報，又はSQL実行時の中間結果情報を取得する場合，SQLオブジェクトがバッファ中にあってもSQLオブジェクトを再作成するため，サーバの負荷が増えることがあります。

次の場合でUAP単位の情報を出力したい場合は，tを指定してトランザクション単位に集計して出力してください。tを指定しない場合は，情報は出力しません。

・OLTP下のX/Openに従ったAPIを使用するプログラムの場合

・DISCONNECTをしないでUAPが終了した場合

・接続プーリング機能を使用している場合

アクセスパス情報，及びSQL実行時の中間結果情報は，1ギガバイトを超えると出力されません。

時間の表示（SQLの実行時間，排他待ち時間，CPU時間など）は，OSのシステムコールで取得できない小さい値があると，0が表示されます。

HiRDB/パラレルサーバの場合，CONNECTしたディクショナリサーバでの権限チェック処理は，UAP単位の情報には含まれません。

アクセスパス情報，又はSQL実行時の中間結果情報の出力を指定して，プロセス間メモリ通信機能を指定した場合（クライアント環境定義PDIPC=MEMORYを指定した場合），PDIPCの指定は無効になりPDIPC=DEFAULTとなります。

tを指定している場合でも，手続き中で決着したトランザクションについては出力されません。手続き中で決着したトランザクションの情報については，後続のトランザクションの情報に含めて集計します。

(74)　PDREPPATH=UAP統計レポートファイルの格納ディレクトリ

　　　〜＜パス名＞((最大256バイト))

UAP統計レポートファイルを，PDCLTPATHで指定したディレクトリとは別のディレクトリに作成する場合に指定します。この環境変数は，PDUAPREPLVLを指定しているときだけ有効になります。

PDREPPATHを指定したUAP統計レポートファイルの出力ファイル名については，「SQLトレース機能」を参照してください。

(75)　PDTRCPATH=動的SQLトレースファイルの格納ディレクトリ

　　　〜＜パス名＞((最大256バイト))

HiRDBクライアントが作成する動的SQLトレースファイルの格納先ディレクトリを指定します。トレース取得コマンド（pdtrcmgr）で動的SQLトレースファイルを取得する場合には，この環境変数を必ず指定してください。

ここで指定したディレクトリをpdtrcmgrで指定すると，次回のCONNECTから，指定したディレクトリにSQLトレースファイルが作成されます。pdtrcmgrについては，「SQLトレース動的取得機能」を参照してください。SQLトレースについては，「SQLトレース機能」を参照してください。

(76)　PDSQLTRCOPENMODE=｛CNCT｜SQL｝

SQLトレースファイルのオープンモードを指定します。

CNCT：

CONNECT，DISCONNECT単位にSQLトレースファイルをオープン，クローズして，トレース情報を出力します。CNCTを指定した場合，PDSQLTRCOPENMODEにSQLを指定するよりオーバヘッドが削減されるため，SQLトレースを出力するための時間が短縮できます。

SQL：

オペレーション単位（SQL単位）にSQLトレースファイルをオープン，クローズして，トレース情報を出力します。

《留意事項》

CNCTを指定した場合，SQLトレースファイルをオープンしたままで情報を書き込むため，正常にDISCONNECTできなかったときには，SQLトレース情報が欠落することがあります。

ほかのクライアント環境変数の指定値によってはCNCTを指定しても無効となります。この場合はSQLとして動作します。ほかのクライアント環境変数の指定値によるCNCTが有効となる組み合わせを次の表に示します。ほかのクライアント環境変数については，各クライアント環境変数の説明を参照してください。

表6‒40　ほかのクライアント環境定義指定値によるCNCTが有効となる組み合わせ

クライアント環境変数PDSQLTRCFMT

クライアント環境変数PDREPPATH

指定なし

指定あり

X/Openに従ったAPIを使用した接続形態以外（非XA接続）

X/Openに従ったAPIを使用した接続形態（XA接続）

クライアント環境変数PDXATRCFILEMODE

SEPARATE

LUMP

1

×

×

×

○

2

○

○

×

○

（凡例）

○：CNCTは有効になります。

×：CNCTは有効になりません（SQLとして動作します）。

(77)　PDSQLTEXTSIZE=SQL文のサイズ

　　　〜＜符号なし整数＞((4096〜2000000))《4096》

　　　Type4 JDBCドライバ使用時（単位：Unicodeコード単位の数）

　　　上記以外（単位：バイト）

SQLトレースに出力するSQL文のサイズを指定します。

アクセスパス取得時に省略した場合，4096ではなく，2000000が仮定されます。

Type4 JDBCドライバではSQL文のサイズをUnicodeコード単位※で扱うため，サロゲートペアの場合は1文字を表現するUnicodeコード単位の数が2以上となります。

（例）

「[図データ]」は「0xD840 0xDC0B」のサロゲートペアです。文字数は1でUnicodeコード単位の数は2となります。

このため，SQL文中にサロゲートペアを含んでいる場合，SQL文の文字数が指定値の範囲内であってもSQLトレースに出力するSQL文が欠落することがあります。

注※

Unicodeコード単位とは，UTF-16エンコーディングのコード単位である16ビットchar値を示します。

(78)　PDSQLEXECTIME={YES｜NO}

・0904互換モードの場合：《NO》

SQLトレースにSQL実行時間を出力するかどうかを指定します。

推奨モードを適用している場合は，指定する必要はありません。0904互換モードを適用している場合は，YESを指定することを検討してください。

YES：

SQL実行時間を出力します。

出力されるSQL実行時間の単位はマイクロ秒となります。SQLトレースに出力される値は，実行時間が24時間以上のものは正常に出力されません。

NO：

SQL実行時間を出力しません。

(79)　PDRCTRACE=再接続トレースファイルのサイズ

　　　〜＜符号なし整数＞((0，4096〜2000000000))（単位：バイト）

UAPの再接続トレースを出力するファイルのサイズを指定します。

0を指定した場合はファイルの最大サイズとなり，最大サイズを超えるとUAPの再接続トレースは出力されません。また，省略した場合もUAPの再接続トレースは出力されません。

4,096〜2,000,000,000を指定した場合は指定値のサイズとなり，指定値のサイズを超えると出力先が切り替わります。

再接続トレースは，PDCLTPATHで指定したディレクトリに出力されます。PDCLTPATHを指定していない場合は，UAPを実行したときのカレントディレクトリ（Cosminexusから実行されるUAPの場合はJ2EEサーバの実行時のカレントディレクトリ）下に出力されます。再接続トレースについては，「再接続トレース機能」を参照してください。

(80)　PDWRTLNPATH=WRITE LINE文の値式の値を出力するファイルの格納先ディレクトリ

　　　〜＜パス名＞((最大256バイト))

WRITE LINE文の値式の値を出力する，ファイルの格納先ディレクトリを指定します。WRITE LINE文については，マニュアル「HiRDB SQLリファレンス」を参照してください。

この環境変数を省略した場合，PDCLTPATHで指定したディレクトリが仮定されます。

ファイルは，指定したディレクトリ（省略した場合はPDCLTPATHで指定したディレクトリ）に二つ作成されます。作成されるファイルは，X/Openに従がったAPI（TX_関数）の使用有無で異なります。作成されるファイル名を次に示します。

TX_関数を使用していない場合：

pdwrtln1.trc，及びpdwrtln2.trc

TX_関数を使用している場合：

pdwrtlnxxxxx-1.trc，及びpdwrtlnxxxxx-2.trc

xxxxx：UAP実行時のプロセスID

(81)　PDWRTLNFILSZ=WRITE LINE文の値式の値を出力するファイルの最大サイズ

　　　〜＜符号なし整数＞((0，4096〜2000000000))（単位：バイト）

WRITE LINE文の値式の値を出力する，ファイルの最大サイズを指定します。

0を指定した場合のファイルの最大サイズはOSで管理できる最大サイズとなり，最大サイズを超えるとWRITE LINE文の値式の値は出力されません。また，省略した場合も，WRITE LINE文の値式の値は出力されません。

4,096〜2,000,000,000を指定した場合は指定値のサイズとなり，指定値のサイズを超えると出力先が切り替わります。

《留意事項》

この環境変数を指定して，かつPDIPC=MEMORYを指定した場合，PDIPCの指定が無効になります。

ファイルは，PDWRTLNPATHで指定したディレクトリに出力されます。

値を出力しているときにファイルの容量が一杯になると，もう一方のファイルに値を出力します。このとき，切り替え先のファイルに格納されている情報は消去され，新しい情報が書き込まれます。このため，必要な情報がある場合は，切り替えが発生する前に退避するなどしておいてください。なお，現在使用しているファイルを知りたい場合，次の方法で確認できます。このとき，最終更新日付の新しい方が現在使用しているファイルとなります。

・UNIX版の場合は，OSのls -lコマンドを実行します。

・Windows版の場合は，コマンドプロンプトからDIRコマンドを実行，又はエクスプローラで参照します。

(82)　PDWRTLNCOMSZ=WRITE LINE文の値式の値の合計サイズ

　　　〜＜符号なし整数＞((1024〜131072))《1024》（単位：バイト）

WRITE LINE文の値式の値の合計サイズを指定します。

WRITE LINE文の値式の値の合計サイズが，この環境変数の指定値を超えた場合，超えた分の情報は無効になります。また，この場合，次の行に「**PDWRTLNCOMSZover**」が出力されます。

(83)　PDUAPEXERLOGUSE＝{YES｜NO}

拡張SQLエラー情報出力機能を使用するかどうかを指定します。

拡張SQLエラー情報出力機能については，「拡張SQLエラー情報出力機能」を参照してください。

YES：

拡張SQLエラー情報出力機能を使用します。

NO：

拡張SQLエラー情報出力機能を使用しません。

《システム定義との関係》

この環境変数を省略すると，システム定義のpd_uap_exerror_log_useオペランドの省略値又は指定値が仮定されます。

(84)　PDUAPEXERLOGPRMSZ＝パラメタ情報の最大データ長

　　　〜＜符号なし整数＞((0〜32008))（単位：バイト）

拡張SQLエラー情報出力機能使用時に，クライアントエラーログファイル及びSQLエラーレポートファイルに出力するパラメタ情報の最大データ長を指定します。1以上を指定した場合はパラメタ情報を出力しますが，0を指定した場合はパラメタ情報を出力しません。

《システム定義との関係》

この環境変数を省略すると，システム定義のpd_uap_exerror_log_param_sizeオペランドの指定値が仮定されます。

《留意事項》

可変長文字列型，BLOB型，及びBINARY型のデータの場合，データ長の領域も環境変数の指定値に含まれます。

出力するパラメタ情報のデータ長が，この環境変数の指定値を超えた場合，超えた分の情報は切り捨てられます。

(85)　PDDNDPTRACE＝メソッドトレースのファイルサイズ

　　　〜＜符号なし整数＞((0，65536〜2147483647))（単位：バイト）

ADO.NET 2.0に対応したHiRDBデータプロバイダ for .NET Frameworkで出力するメソッドトレースのファイルサイズを指定します。

指定値がある場合は，PDCLTPATHで指定されたディレクトリにメソッドトレースを出力します。

0を指定した場合はマシンのディスクに空き領域がある限り出力します。65536〜2147483647を指定した場合は指定値が最大サイズとなり，最大サイズを超えるとトレース出力先が切り替わります。省略した場合は，メソッドトレースを出力しません。メソッドトレースについては，「HiRDBデータプロバイダ for .NET Frameworkのトラブルシュート機能」を参照してください。

(86)　PDSQLTRCFMT={1｜2}

・0904互換モードの場合：《1》

SQLトレースの出力形式を指定します。出力形式により出力ファイル名称が異なります。出力ファイル名称及び指定値ごとの出力形式については，「SQLトレース機能」を参照してください。この環境変数は，PDSQLTRACEを指定しているときに有効になります。

出力形式2は，出力形式1よりも詳細情報を出力します。このため，通常は指定を省略するか2を指定してください。

1：

出力形式1で出力します。

2：

出力形式2で出力します。

《留意事項》

HiRDB SQL Tuning Advisor 08-03以前を使用してSQLトレースの解析を行う場合，出力形式2には対応していないため1を指定してください。

(87)　PDVWOPTMODE={0｜1｜2}

アクセスパス表示ユティリティ用のアクセスパス情報を取得するかどうかを指定します。

アクセスパス情報ファイルは，UAPが接続したシングルサーバ又はフロントエンドサーバがあるユニットのSQL情報ディレクトリ（%PDDIR%¥spool¥pdsqldump）下に作成されます。

アクセスパス表示ユティリティについては，マニュアル「HiRDB コマンドリファレンス」を参照してください。

0：

アクセスパス情報を取得しません。

1：

アクセスパス情報を取得し，アクセスパス情報ファイルに出力します。このとき，SQLオブジェクトがバッファ中にあるSQLについては，情報を出力しません。

2：

アクセスパス情報を取得し，アクセスパス情報ファイルに出力します。このとき，SQLオブジェクトがバッファ中にあるSQLについてもSQLオブジェクトを再作成し，情報を出力します。

《留意事項》

HiRDB SQL Tuning Advisor用にアクセスパス情報を取得する場合は，PDTAAPINFPATHを指定してください。HiRDB SQL Tuning Advisor用アクセスパス情報ファイルについては，「HiRDB SQL Tuning Advisor用アクセスパス情報ファイル」を参照してください。

1を指定した場合，SQLオブジェクトがバッファ中にあるSQLについては，情報が出力されないので注意してください。SQLオブジェクトがバッファ中にあるSQLについても情報を出力したい場合は，2を指定してください。

2を指定した場合，SQLオブジェクトがバッファ中にあるSQLについてもSQLオブジェクトを再作成するため，1よりもサーバの負荷が増えることがあります。

Windows版HiRDBで，%PDDIR%のパス長＋認可識別子の長さ＋UAP名の長さの合計が220文字より大きい場合は，アクセスパス情報ファイルの作成に失敗することがあります。この場合，UAP統計レポート機能を使用して，アクセスパス情報を取得します。UAP統計レポート機能については，「UAP統計レポート機能」を参照してください。

SQL種別とPDVWOPTMODEの指定値の関係を次に示します。

SQL種別

条件

PDVWOPTMODEの指定値

0

1

2

静的SQL

SQLオブジェクトがバッファ中にない

×

○

○

SQLオブジェクトがバッファ中にある

×

×

○

動的SQL

SQLオブジェクトがバッファ中にない

×

○

○

SQLオブジェクトがバッファ中にある

×

×

○

ルーチン定義

なし

×

○

○

CALL文

インデクスの追加又は削除で，手続きのSQLオブジェクトのインデクス情報が無効になった場合

×

○

○

上記以外の場合

×

×

×

（凡例）

○：アクセスパス情報を出力します。

×：アクセスパス情報を出力しません。

(88)　PDTAAPINFPATH=アクセスパス情報ファイル出力ディレクトリ名

　　　〜＜パス名＞((最大256バイト))

HiRDB SQL Tuning Advisor用のアクセスパス情報ファイルを出力する場合に，出力先ディレクトリを指定します。この環境変数を指定しても，出力先ディレクトリがなかったり，書き込み権限がなかったりして，出力処理でエラーが発生した場合，アクセスパス情報を出力しません。なお，出力処理でエラーが発生しても，実行中のSQLはエラーにはなりません。ただし，JDBC4.0のType4 JDBCドライバでは例外を投入します。HiRDB SQL Tuning Advisor用アクセスパス情報ファイルについては，「HiRDB SQL Tuning Advisor用アクセスパス情報ファイル」を参照してください。

《留意事項》

HiRDB SQL Tuning Advisorのダイナミックブラウジング機能を使用する場合は，この環境変数の指定は無効になります。

この環境変数を指定している場合，プロセス間メモリ通信機能は使用できません。クライアント環境定義のPDIPCオペランドにMEMORYを指定していても，DEFAULTを指定した場合の動作となります。

(89)　PDTAAPINFMODE=｛0｜1｝

HiRDB SQL Tuning Advisor用のアクセスパス情報ファイルを出力する場合に，アクセスパス情報ファイルのファイル名の形式を指定します。

0：

ファイル名はpdtaapinf1及びpdtaapinf2となります。

1：

接続ごとに，pdtaapinfHHMMSSmmm_XXX_1及びpdtaapinfHHMMSSmmm_XXX_2のファイル名で出力します。

HHMMSSmmm：

接続した時刻（SQLトレースに出力される，該当するCONNECTの接続開始時間と同じ）

XXXXXXXXXX：

接続通番（最大10けた）

(90)　PDTAAPINFSIZE=アクセスパス情報ファイルサイズ

　　　〜＜符号なし整数＞((100000〜2000000000))《409600》（単位：バイト）

HiRDB SQL Tuning Advisor用のアクセスパス情報ファイルを出力する場合に，アクセスパス情報ファイルのファイルサイズを指定します。ここで指定したファイルサイズを超えると，出力先をもう一方のファイルに切り替えます。以降，これを繰り返しながら二つのファイルを交互に使用します。

(91)　PDSTJTRNOUT=｛YES｜NO｝

・0904互換モードの場合：OLTP環境下ではトランザクションごとに統計ログファイルに出力します。それ以外の環境下では，コネクションごとに統計ログファイルに出力します。

UAPに関する統計情報を，トランザクションごとに統計ログファイルに出力するかどうかを指定します。

YES：

UAPに関する統計情報を，トランザクションごとに統計ログファイルに出力します。

NO：

UAPに関する統計情報を，コネクションごとに統計ログファイルに出力します。

UAPに関する統計情報の出力の開始は，システム定義のpdstbeginオペランド，又はpdstbeginコマンドで指定します。pdstbeginオペランドについてはマニュアル「HiRDB システム定義」を，pdstbeginコマンドについてはマニュアル「HiRDB コマンドリファレンス」を参照してください。

(92)　PDLOCKLIMIT=ユーザ当たりの最大排他資源要求数

　　　〜<符号なし整数>((0〜200000000))《0》（単位：件）

一つのサーバに対して，UAPから発行する排他要求の上限値（排他資源数の上限値）を指定します。

0を指定するか省略した場合は，排他要求上限数のチェックをしません。この場合，できる限りの排他要求が発行されます。

排他資源数が不足した場合は，SQLエラーとなります。

《見積もり方法》

見積もり方法には，次の2種類があります。

一つのUAPで使用する排他資源数から，上限値を算出します。

排他資源数はSQLによって異なります。排他制御による排他資源数を概算し，その値からこの指定値を算出してください。排他資源数の見積もりについては，マニュアル「HiRDB システム定義」を参照してください。また，排他制御については，「排他制御」を参照してください。

UAPを接続するHiRDBサーバ側が持つ排他資源数の総数のうち，一つのUAPで使用できる排他資源数から，上限値を算出します。

排他資源数の見積もりについては，マニュアル「HiRDB システム定義」を参照してください。

(93)　PDDLKPRIO=｛96｜64｜32｝

UAPのデッドロックプライオリティ値を指定します。

この環境変数は，システム定義のpd_deadlock_priority_useオペランドにYを指定した場合に有効になります。

この環境変数で指定した値の小さい方が，デッドロックが発生した場合にプログラムが優先的に処理されます。また，値が一番大きいと，デッドロックが発生した場合にプログラムはエラーとなり，ロールバックします。

なお，デッドロックプライオリティ値が同一の場合，トランザクションの開始が早い方を優先的に処理します。デッドロックプライオリティ値は次のようになります。

PDDLKPRIOの指定値

デッドロック

プライオリティ値

96

96

64

64

32

32

省略

X/Open XAインタフェース使用の場合

96

X/Open XAインタフェース未使用の場合

64

−

ユティリティ

64

運用コマンド

pddbchg，pdhold（-b及び-s），pdorbegin，及びpdorend

システム定義のpd_command_deadlock_priorityオペランドの指定値

上記以外

64

（凡例）−：該当しません。

(94)　PDLOCKSKIP={YES｜NO}

無排他条件判定をするかどうかを指定します。

YES：無排他条件判定をします。

NO：無排他条件判定をしません。

この環境変数にYESを指定した場合，検索処理（DELETE，UPDATE時の検索処理を含みます）の条件判定処理を無排他で実行します。無排他条件判定については，「無排他条件判定」を参照してください。

(95)　PDFORUPDATEEXLOCK={YES｜NO}

・0904互換モードの場合：《NO》

UAP中のFOR UPDATE句を指定した（又は仮定された）SQLの排他オプションに，WITH EXCLUSIVE LOCKを適用するかどうかを指定します。適用する場合，クライアント環境定義PDISLLVLの指定値は無効になります。

YES：

FOR UPDATE句を指定したSQLの排他オプションに，WITH EXCLUSIVE LOCKを適用します。

NO：

FOR UPDATE句を指定したSQLの排他オプションに，PDISLLVLの指定値を適用します。

ルーチン中のSQLに対して，PDFORUPDATEEXLOCKの指定は無効になります。ルーチン中のFOR UPDATE句を指定したSQLに，WITH EXCLUSIVE LOCKを適用する場合，ルーチン定義時のSQLコンパイルオプションで指定します。

(96)　PDISLLVL=データ保証レベル

　　　〜<符号なし整数>((0〜2))

SQL文のデータ保証レベルを指定します。データ保証レベルとは，トランザクションのどの時点までデータの内容を保証するかのレベルのことをいいます。この環境変数は，SQL文に指定する排他オプションに相当します。

この環境変数を指定すると，UAP中のSQL文の排他オプションを一括して決定できます。ただし，SQL文中で排他オプションを指定している場合は，SQL文中の排他オプションの指定が優先されます。

なお，このオペランドの指定，SQL文中の排他オプションの指定，及びシステム定義のpd_isolation_levelオペランド指定の優先順位は次のとおりです。

SQL文中の排他オプションの指定（SQL文単位で制御する場合に指定）

このオペランドの指定（UAP単位で制御する場合に指定）

システム定義のpd_isolation_levelオペランド指定（システム単位で制御する場合に指定）

上記三つをすべて省略した場合，排他オプションのWITH SHARE LOCKが仮定されます。排他オプションについては，マニュアル「HiRDB SQLリファレンス」を参照してください。

データ保証レベルについては，「データ保証レベル」を参照してください。

0：

ほかのユーザが更新中のデータでも更新完了を待たないで参照できます。そのため，より同時実行性を向上できますが，同一トランザクション中で同じ行を2度検索した場合，同じデータを受け取れないときがあります。例えば，SELECT * FROM ZAIKOで在庫表を検索する場合，ほかのユーザが在庫表を更新中でも，排他待ちをしないで検索できます。これは，SELECT文のWITHOUT LOCK NOWAIT指定に相当します。

なお，更新を伴うカーソル宣言に対しては0を指定しても無効になり，1が仮定されます。

1：

検索処理が終了するまで（HiRDBがページ又は行を見終わるまで），検索しているデータの内容をほかのユーザに更新させない場合に指定します。検索が終了すれば，そのトランザクションが終了していなくてもほかのユーザからの参照，及び更新を許可します。そのため，より同時実行性を向上できますが，同一トランザクション中で同じ行を2度検索した場合，同じデータを受け取れないときがあります。例えば，SELECT * FROM ZAIKOで在庫表を検索する場合，検索終了後にトランザクションの終了を待たないで，ほかのユーザからの在庫表の更新，又は参照を許可します。これは，SELECT文のWITHOUT LOCK WAIT指定に相当します。

2：

検索処理のトランザクションが終了するまで，検索しているデータの内容をほかのユーザに更新させない場合に指定します。例えば，SELECT * FROM ZAIKOで在庫表を検索する場合，トランザクションが終了するまで在庫表の内容を保証します。これは，SELECT文のWITH SHARE LOCK指定に相当します。

なお，更新を伴うカーソル宣言に対しては，WITH EXCLUSIVE LOCKが仮定されます。

《留意事項》

手続き（ストアドプロシジャ）中のSQL文のデータ保証レベルは，CREATE PROCEDURE，CREATE TYPE，ALTER PROCEDURE，又はALTER ROUTINEの指定で決まり，手続き実行時にはこの環境変数によって影響を受けることはありません。

この環境変数を省略し，かつSQL文中の排他オプションも省略している場合は，そのSQL文に対して排他オプションのWITH SHARE LOCKが仮定されます。排他オプションについては，マニュアル「HiRDB SQLリファレンス」を参照してください。

(97)　PDSQLOPTLVL=SQL最適化オプション［，SQL最適化オプション］…

　　　〜<識別子，又は符号なし整数>

データベースの状態を考慮して，最も効率的なアクセスパスを決定するための最適化の方法を指定します。

SQL最適化オプションには，識別子（文字列）で指定する方法と，数値で指定する方法がありますが，通常時は識別子で指定する方法をお勧めします。

識別子で指定する場合：

PDSQLOPTLVL="識別子"［，"識別子"］…

＜指定例＞

ネストループジョイン優先とグループ分け高速化処理を適用する場合

PDSQLOPTLVL="PRIOR_NEST_JOIN","RAPID_GROUPING"

すべての最適化を適用しない場合

PDSQLOPTLVL="NONE"

＜規則＞

識別子は一つ以上指定してください。

識別子を二つ以上指定する場合は，コンマで区切ってください。

識別子に指定できる内容（最適化方法）については，《SQL最適化オプションの指定値》を参照してください。

すべての最適化を適用しない場合は，識別子に"NONE"を指定してください。ただし，同時に"NONE"以外の識別子を指定すると，"NONE"は無効になります。

識別子は大文字及び小文字で指定できます。

同じ識別子を二つ以上指定しても，一つ指定したものとみなされますが，なるべく同じ識別子は指定しないようにしてください。

"識別子"［，"識別子"］…に指定できる文字列は，最大575バイトです。

数値で指定する場合：

PDSQLOPTLVL=符号なし整数［，符号なし整数］…

＜指定例＞

複数のSQLオブジェクト作成，ANDの複数インデクス利用の抑止，及び複数インデクス利用の強制を適用する場合

符号なし整数をコンマで区切って指定する場合：

PDSQLOPTLVL=4,10,16

符号なし整数の和を指定する場合：

PDSQLOPTLVL=30

既に14（4+10）を指定していて，新たに16を追加する場合

PDSQLOPTLVL=14,16

すべての最適化を適用しない場合

PDSQLOPTLVL=0

＜規則＞

バージョン06-00より前のHiRDBから，バージョン06-00以降のHiRDBにバージョンアップする場合，バージョン06-00より前の合計値指定も有効になります。最適化オプションを変更する必要がない場合は，バージョン06-00以降のHiRDBにバージョンアップしたときにこのオペランドの指定値を変更する必要はありません。

符号なし整数は一つ以上指定してください。

符号なし整数を二つ以上指定する場合は，コンマで区切ってください。

符号なし整数に指定できる内容（最適化方法）については，《SQL最適化オプションの指定値》を参照してください。

すべての最適化を適用しない場合は，符号なし整数に0を指定してください。ただし，同時に0以外の識別子を指定すると，0は無効になります。

同じ符号なし整数を二つ以上指定しても，一つ指定したものとみなされますが，なるべく同じ符号なし整数は指定しないようにしてください。

複数の最適化方法を指定する場合，その符号なし整数の和を指定することもできます。ただし，同じ最適化方法の値は二つ以上足さないでください（足した結果が別の最適化方法とみなされることもあるため）。

複数の最適化方法の値を足して指定する場合，どの最適方法を指定しているのか分かりにくくなるため，コンマで区切って指定する方法をお勧めします。また，既に複数の最適化方法の値を足して指定している場合で，新たに別の最適化方法が必要になったときは，追加する値をコンマで区切って後ろに指定できます。

符号なし整数［，符号なし整数］…に指定できる文字列は，最大575バイトです。

《システム定義との関係》

この環境変数を省略するとシステム定義のpd_optimize_levelオぺランドの指定値が仮定されます。pd_optimize_levelオペランドについては，マニュアル「HiRDB システム定義」を参照してください。

システム定義のpd_floatable_besオペランド，又はpd_non_floatable_besオペランドを指定している場合，「フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）」及び「フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）」の指定は無効になります。

システム定義のpd_indexlock_modeオペランドにKEYを指定している場合（インデクスキー値排他の場合），「更新SQLの作業表作成抑止」の指定は無効になります。

《SQLとの関係》

ストアドルーチン中のSQL文のSQL最適化オプションは，CREATE PROCEDURE，CREATE TYPE，ALTER PROCEDURE，又はALTER ROUTINEの指定で決まり，PDSQLOPTLVLの指定によって影響を受けることはありません。

SQL文中にSQL最適化指定を指定している場合は，SQL最適化オプションよりもSQL最適化指定が優先されます。SQL最適化指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

《SQL最適化オプションの指定値》

SQL最適化オプションの指定値を次の表に示します。

表6‒41　SQL最適化オプションの指定値

項番

最適化方法

指定値

識別子

符号なし整数

1

ネストループジョイン強制

"FORCE_NEST_JOIN"

4

2

複数のSQLオブジェクト作成

"SELECT_APSL"

10

3

フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）※１※２

"FLTS_INC_DATA_BES"

16

4

ネストループジョイン優先

"PRIOR_NEST_JOIN"

32

5

フロータブルサーバ候補数の拡大※２

"FLTS_MAX_NUMBER"

64

6

ORの複数インデクス利用の優先

"PRIOR_OR_INDEXES"

128

7

自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理※２

"SORT_DATA_BES"

256

8

ANDの複数インデクス利用の抑止

"DETER_AND_INDEXES"

512

9

グループ分け高速化処理

"RAPID_GROUPING"

1024

10

フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）※１※２

"FLTS_ONLY_DATA_BES"

2048

11

データ収集用サーバの分離機能※１※２

"FLTS_SEPARATE_COLLECT_SVR"

2064

12

インデクス利用の抑止（テーブルスキャン強制）

"FORCE_TABLE_SCAN"

4096

13

複数インデクス利用の強制

"FORCE_PLURAL_INDEXES"

32768

14

更新SQLの作業表作成抑止

"DETER_WORK_TABLE_FOR_UPDATE"

131072

15

探索高速化条件の導出

"DERIVATIVE_COND"

262144

16

スカラ演算を含むキー条件の適用

"APPLY_ENHANCED_KEY_COND"

524288

17

プラグイン提供関数からの一括取得機能

"PICKUP_MULTIPLE_ROWS_PLUGIN"

1048576

18

導出表の条件繰り込み機能

"MOVE_UP_DERIVED_COND"

2097152

注※1

フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ），及びフロータブルサーバ対象限定（データ取り出しバックエンドサーバ）を共に指定した場合，それぞれの最適化方法は有効にはなりません。代わりに，データ収集用サーバの分離機能として動作します。

注※2

HiRDB/シングルサーバの場合，指定しても無効になります。

《指定値の目安》

指定値の目安を「更新SQLの作業表作成抑止」の適用条件を満たす場合と満たさない場合に分けて説明します。

なお，指定値の目安で項番XXと表記していますが，これは表「SQL最適化オプションの指定値」の項番のことを示しています。

●HiRDB/シングルサーバ

≪「更新SQLの作業表作成抑止」の適用条件を満たさない場合≫

項番4，6，8，9，16，及び18を指定してください。識別子で指定した場合の例を次に示します。

  PDSQLOPTLVL＝"PRIOR_NEST_JOIN",
               "PRIOR_OR_INDEXES",
               "DETER_AND_INDEXES",
               "RAPID_GROUPING",
               "APPLY_ENHANCED_KEY_COND",
               "MOVE_UP_DERIVED_COND"

≪「更新SQLの作業表作成抑止」の適用条件を満たす場合≫

項番4，6，8，9，14，16，及び18を指定してください。識別子で指定した場合の例を次に示します。

  PDSQLOPTLVL＝"PRIOR_NEST_JOIN",
               "PRIOR_OR_INDEXES",
               "DETER_AND_INDEXES",
               "RAPID_GROUPING",
               "DETER_WORK_TABLE_FOR_UPDATE",
               "APPLY_ENHANCED_KEY_COND",
               "MOVE_UP_DERIVED_COND"

●HiRDB/パラレルサーバ

≪「更新SQLの作業表作成抑止」の適用条件を満たさない場合≫

表6‒42　HiRDB/パラレルサーバのSQL最適化オプションの指定値の目安（1/2）

条件

指定値

SQL処理になるべく多くのバックエンドサーバを使用し，個々のSQL処理を速くしたい場合

大量検索のSQLを速くしたい場合

項番3〜9，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"FLTS_INC_DATA_BES",

"PRIOR_NEST_JOIN",

"FLTS_MAX_NUMBER",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

結果が数十件程度の検索を速くしたい場合

項番3，4，6〜9，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"FLTS_INC_DATA_BES",

"PRIOR_NEST_JOIN",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

業務ごとにバックエンドサーバを切り分けて使用したい場合

大量検索のSQLを速くしたい場合

項番4〜10，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"PRIOR_NEST_JOIN",

"FLTS_MAX_NUMBER",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"FLTS_ONLY_DATA_BES",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

数十件程度に絞り込む検索を速くしたい場合

項番4，6〜10，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"PRIOR_NEST_JOIN",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"FLTS_ONLY_DATA_BES",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

上記の条件に該当しない場合

項番4，6〜9，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"PRIOR_NEST_JOIN",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

≪「更新SQLの作業表作成抑止」の適用条件を満たす場合≫

表6‒43　HiRDB/パラレルサーバのSQL最適化オプションの指定値の目安（2/2）

条件

指定値

SQL処理になるべく多くのバックエンドサーバを使用し，個々のSQL処理を速くしたい場合

大量検索のSQLを速くしたい場合

項番3〜9，14，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"FLTS_INC_DATA_BES",

"PRIOR_NEST_JOIN",

"FLTS_MAX_NUMBER",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"DETER_WORK_TABLE_FOR_UPDATE",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

結果が数十件程度の検索を速くしたい場合

項番3，4，6〜9，14，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"FLTS_INC_DATA_BES",

"PRIOR_NEST_JOIN",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"DETER_WORK_TABLE_FOR_UPDATE",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

業務ごとにバックエンドサーバを切り分けて使用したい場合

大量検索のSQLを速くしたい場合

項番4〜10，14，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"PRIOR_NEST_JOIN",

"FLTS_MAX_NUMBER",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"FLTS_ONLY_DATA_BES",

"DETER_WORK_TABLE_FOR_UPDATE",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

数十件程度に絞り込む検索を速くしたい場合

項番4，6〜10，14，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"PRIOR_NEST_JOIN",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"FLTS_ONLY_DATA_BES",

"DETER_WORK_TABLE_FOR_UPDATE",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

上記の条件に該当しない場合

項番4，6〜9，14，16，及び18を指定してください。

（識別子で指定した例）

PDSQLOPTLVL＝"PRIOR_NEST_JOIN",

"PRIOR_OR_INDEXES",

"SORT_DATA_BES",

"DETER_AND_INDEXES",

"RAPID_GROUPING",

"DETER_WORK_TABLE_FOR_UPDATE",

"APPLY_ENHANCED_KEY_COND",

"MOVE_UP_DERIVED_COND"

《各最適化方法の内容》

1．ネストループジョイン強制

結合条件の列にインデクスを定義してある場合，結合処理にネストループジョインだけを使用します。ネストループジョインの結合処理方式については，「結合方式」を参照してください。

ただし，次のどれかの条件に当てはまる場合，ネストループジョイン以外の結合処理をすることがあります。

結合条件にスカラ演算など，列指定以外を指定している。

結合条件が＝述語以外である。

結合条件の列が，インデクスの先頭構成列でない。かつ，結合条件の列がインデクスの第n構成列の場合は，第1構成列から第n−1構成列まで，=述語，又はIS NULL述語の制限条件を指定していない。

外結合で，結合条件をON探索条件に指定していない。

探索条件中に，結合する両方の表に対して，それぞれインデクスを使用した検索をするプラグイン提供関数，又は構造化繰返し述語を指定している。

HiRDB/パラレルサーバで，分割表を内表とする外結合に対して，内表の分割列を結合条件に指定していない。

HiRDB/パラレルサーバで，フレキシブルハッシュ分割表を内表とする外結合である。

＜ネストループジョイン強制の留意事項＞

結合表をネストループジョインで処理する場合は，SQLの外表に指定した表を外表とします。

結合条件の一方の列にだけインデクスが定義してある結合をネストループジョインで処理する場合，インデクスを定義してある表の列を内表とします。

結合表以外で，結合条件の両辺の列にインデクスが定義してある結合をネストループジョインで処理する場合，ネストループジョインの外表，内表はHiRDBが判断して決定します。ただし，FROM句にビュー表又はWITH句問合せ名の指定がなく，探索条件に結合条件だけを指定している場合は，次の規則に従って外表，内表を決定します。

(i) HiRDB/パラレルサーバの分割表の結合の場合，一方の表のすべての分割列を結合条件に指定していて，その結合相手の表の分割列のうち，結合条件に指定していない列があるときは，すべての分割列を結合条件に指定してある表が内表になります。

(ii) (i)に当てはまらない場合は，FROM句の先に指定した表が外表になります。

HiRDB/パラレルサーバで「ネストループジョイン強制」を適用する場合，大量データのジョインをするときには，できる限り結合列で表を分割するようにしてください。

2．複数のSQLオブジェクト作成

あらかじめ複数のSQLオブジェクトを作成し，実行時に埋込み変数，又は?パラメタの値によって，最適なSQLオブジェクトを選択します。

3．フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）

通常はデータ取り出しに使用しないバックエンドサーバをフロータブルサーバとして使用しています。この最適化方法を適用すると，データ取り出しに使用するバックエンドサーバについてもフロータブルサーバとして使用します。

ただし，フロータブルサーバとして使用するバックエンドサーバ数はHiRDBが計算して求めるのですべてのバックエンドサーバを使用するとは限りません。すべてのバックエンドサーバを使用したい場合は，「フロータブルサーバ候補数の拡大」とともに指定してください。

フロータブルサーバの割り当て方法については，「フロータブルサーバの割り当て方法（HiRDB/パラレルサーバ限定）」を参照してください。

この指定は，HiRDB/パラレルサーバのときだけ有効になります。

4．ネストループジョイン優先

結合条件の列にインデクスを定義してある場合，結合処理にネストループジョインを優先して使用します。ネストループジョインの結合処理方式については，「結合方式」を参照してください。

「ネストループジョイン強制」との違いは，ネストループジョイン強制は結合条件にインデクスが定義してあれば，絞り込み条件がなくても（制限に該当する場合を除く）必ずネストループジョインします。これに対して，ネストループジョイン優先は，絞り込み条件を指定している場合は必ずネストループジョインしますが，絞り込み条件がないときは結合方式をHiRDBが判断します。ただし，次のどれかの条件に当てはまる場合，絞り込み条件を指定していても，ネストループジョイン以外の結合処理をすることがあります。

結合条件にスカラ演算など，列指定以外を指定している。

結合条件が＝述語以外である。

結合条件の列が，インデクスの先頭構成列でない。かつ，結合条件の列がインデクスの第n構成列の場合は，第1構成列から第n−1構成列まで=述語，又はIS NULL述語の制限条件を指定していない。

外結合で結合条件をON探索条件に指定していない。

探索条件中に結合する両方の表に対して，それぞれインデクスを使用した検索をするプラグイン提供関数，又は構造化繰返し述語を指定している。

HiRDB/パラレルサーバで，分割表を内表とする外結合に対して，内表の分割列を結合条件に指定していない。

HiRDB/パラレルサーバで，フレキシブルハッシュ分割表を内表とする外結合である。

最適化情報収集ユティリティ（pdgetcst）を実行している。

絞り込み条件が，定義長256バイト以上のCHAR，VARCHAR，MCHAR，MVARCHARの列，若しくは定義長128文字以上のNCHAR，NVARCHARの列，又はBLOB型の列を含む探索条件だけである。

絞り込み条件が，否定，又はOR演算子を含む探索条件だけである。

＜ネストループジョイン優先の留意事項＞

結合表をネストループジョインで処理する場合は，SQLの外表に指定した表を外表とします。

結合条件の一方の列にだけインデクスが定義してある結合をネストループジョインで処理する場合，インデクスを定義してある表の列を内表とします。

結合表以外で，結合条件の両辺の列にインデクスが定義してある結合をネストループジョインで処理する場合，ネストループジョインの外表，内表はHiRDBが判断して決定します。ただし，FROM句にビュー表及びWITH句の問合せ名の指定がなく，探索条件に結合条件だけを指定している場合は，次の規則に従って外表，内表を決定します。

・HiRDB/パラレルサーバの分割表の結合時には，一方の表のすべての分割列を結合条件に指定して，その結合相手の表の分割列のうち，結合条件に指定していない列がある場合は，すべての分割列を結合条件に指定している表が内表になります。

・上記に該当しない場合は，FROM句の最初に指定した表が外表になります。

「ネストループジョイン強制」とともに指定した場合，「ネストループジョイン優先」は無効になります。

5．フロータブルサーバ候補数の拡大

通常使用するフロータブルサーバ数は，利用できるフロータブルサーバから必要数をHiRDBが計算して割り当てます。この最適化方法を適用すると，利用できるフロータブルサーバをすべて利用します。ただし，データ取り出しに使用するバックエンドサーバはフロータブルサーバとして使用できません。

データ取り出しに使用するバックエンドサーバもフロータブルサーバとして使用したいときは，「フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）」とともに指定してください。

フロータブルサーバの割り当て方法については，「フロータブルサーバの割り当て方法（HiRDB/パラレルサーバ限定）」を参照してください。

この指定は，HiRDB/パラレルサーバのときだけ有効になります。

6．ORの複数インデクス利用の優先

ORの複数インデクスを利用して検索する方法を，優先して適用したい場合に指定します。

ORの複数インデクス利用とは，探索条件中のORで結ばれた複数の条件に対して，それぞれの条件をインデクスを使用して検索し，検索結果の和集合をとることで探索条件を評価する方式をいいます。

WHERE句又はON 探索条件にA OR B OR C … OR Zを指定して検索している場合で，ORで結ばれたすべての条件に対して=を使用して絞り込んでいるときに，「ORの複数インデクス利用の優先」を適用すると，高速に検索できます。

「ORの複数インデクス利用の優先」を指定しない場合でも，ORの数が少ないときは，HiRDBはORの複数インデクス利用を適用して検索しますが，ORの数が多くなるとHiRDBが内部的に計算している検索コストが大きくなるため，ORの複数インデクス利用が適用されなくなることもあります。そこで，「ORの複数インデクス利用の優先」を指定して，ORの数が多くなっても常にORの複数インデクス利用が適用されるようにします。

＜ORの複数インデクス利用の優先の留意事項＞

ORと並列にANDで条件を指定していて，その条件がインデクスを使用して絞り込める場合は，このインデクスを使用することがあります。

ORで指定したすべての条件が，比較述語の=で絞り込んでいる場合に適用されます。また，=で絞り込まれたすべての列に対して，単一列インデクス，又は複数列インデクスの第1構成列となるインデクスを定義していることが前提となります。

2表以上の結合検索時には，結合列のインデクスを使用して検索した方が高速に検索できるとHiRDBが判断した場合，適用されないことがあります。

SQL文によっては，ORの複数インデクス利用ではなく，和集合を伴ったANDの複数インデクス利用が適用される場合があります。この場合もORの複数インデクス利用と同様に，高速に検索できます。ただし，ANDを伴った条件を指定していると，積集合と和集合を組み合わせてANDの複数インデクス利用を適用する場合があります。

積集合を伴ったANDの複数インデクス利用を適用していて性能が良くない場合には，次のどちらかの方法で改善できることがあります。

(a) 「ORの複数インデクス利用の優先」と同時に，「ANDの複数インデクス利用の抑止」を指定してください。積集合だけ抑止されるようになります。

(b) ANDで連結した複数の列の条件が絞り込める場合，これらの条件列を含む複数列インデクスを定義してください。

SQL拡張最適化オプションでコストベース最適化モード2の適用を使用しない場合は，結合検索時に複数インデクスを利用しません。ただし，複数インデクス利用を適用しないと評価できない条件がある場合には，このオプションの指定に関係なく複数インデクスを利用します。

7．自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理

通常，グループ化，ORDER BY，及びDISTINCT集合関数処理はフロータブルサーバを使用して処理しますが，1表検索の場合にはこの最適化を適用することで，表が定義されているバックエンドサーバ（自バックエンドサーバ）でグループ化，ORDER BY，及びDISTINCT集合関数処理をします。

グループ分け処理方式については，「グループ分け処理方式（HiRDB/パラレルサーバ限定）」を参照してください。

グループ分け高速化処理を適用する場合や，インデクスを使用して検索した結果，グループ化，ORDER BY，及びDISTINCT集合関数のためのソートをする必要がないとHiRDBが判断した場合には，より高速な処理方式が選択されます。

8．ANDの複数インデクス利用の抑止

ANDの複数インデクス利用をするアクセスパスを常に使わないようにします。

ANDの複数インデクス利用とは，探索条件にANDで結ばれた条件が複数あり，それぞれの列に異なるインデクスが定義してある場合（例えば，SELECT ROW FROM T1 WHERE C1 = 100 AND C2 = 200），それぞれのインデクスを使って条件を満たす行の作業表を作成し，これらの積集合を求める方式です。

ANDの複数インデクス利用中にORが含まれる場合，ANDの部分については複数インデクス利用を抑止しますが，ORの部分については抑止しません。

積集合は，データの特性によって有効な場合と，性能的に悪くなる場合とがあります。複数のインデクスを利用する場合に，それぞれのインデクスを使用することで，ある程度の件数に絞り込めて，更に積集合をとることで重なっている部分が少なくなる場合には有効になります。

ANDの複数インデクスの利用が有効でないと考えられる場合は，この最適化を適用してください。

ただし，一つの問合せ指定中に，同一表の列を含む条件を次の箇所に複数指定したときは，ANDの複数インデクス利用の抑止はできません。

構造化繰返し述語の探索条件中

インデクスを使用した検索をするプラグイン提供関数の第1引数

9．グループ分け高速化処理

SQLのGROUP BY句で指定したグループ分けを，ハッシングを使って高速に処理します。

グループ分け高速化機能については，「グループ分け高速化機能」を参照してください。

10．フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）

通常はデータ取り出しに使用しないバックエンドサーバをフロータブルサーバとして使用しています。この最適化方法を適用すると，データ取り出しに使用するバックエンドサーバだけをフロータブルサーバとして使用します。この適用は，HiRDB/パラレルサーバのときだけ有効になります。

フロータブルサーバの割り当て方法については，「フロータブルサーバの割り当て方法（HiRDB/パラレルサーバ限定）」を参照してください。

11．データ収集用サーバの分離機能

「フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）」，又は「フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）」を指定した場合は，データ収集用サーバの分離機能となります。

データ収集用サーバの分離機能を適用した場合，複数のバックエンドサーバから1か所のバックエンドサーバにデータを集める必要があるSQLに対しては，データ転送元以外のバックエンドサーバをデータ収集用に割り当てます。これ以外の用途のフロータブルサーバとしては，データ収集用以外のバックエンドサーバ（データ取り出しバックエンドサーバも含みます）を割り当てます。

フロータブルサーバの割り当て方法については，「フロータブルサーバの割り当て方法（HiRDB/パラレルサーバ限定）」を参照してください。

12．インデクス利用の抑止（テーブルスキャン強制）

通常はインデクスの利用判定をHiRDBが決定します。この最適化方法を適用すると，インデクスを使用しない方式を強制的に使用するようにします。

ただし，ジョインを使用してネストループ結合になる場合，構造化繰返し述語を探索条件に指定した場合，又はインデクス型プラグイン専用関数の条件の場合は，インデクス利用を抑止できません。

13．複数インデクス利用の強制

ANDの複数インデクス利用を強制的に選択して，表を検索する場合に指定します。

ANDで結ばれた条件を複数指定している場合，この最適化を指定しないとANDの複数インデクス利用が選択されたときでも，通常は最大二つ程度のインデクスしか使用しません。使用するインデクスの数は，表定義，インデクス定義，及び探索条件によって変わります。

この最適化を指定すると，インデクスを使用することでサーチ範囲が絞り込める条件をすべて使用するようになります。

ANDの複数インデクス利用は，それぞれのインデクスを使用することで，ある程度の件数に絞り込めて，更に積集合をとることで重なっている部分が少なくなる場合に有効になります。

2表以上の結合検索時には，結合列のインデクスを使用して検索した方が高速に検索できるとHiRDBが判断した場合，適用されないことがあります。

SQL拡張最適化オプションでコストベース最適化モード2を使用しない場合は，結合検索時に複数インデクスを利用しません。ただし，複数インデクス利用を適用しないと評価できない条件がある場合には，このオプションの指定に関係なく複数インデクスを利用します。

14．更新SQLの作業表作成抑止

この機能は，カーソルを使って検索している表に対して行の更新，削除，及び挿入を行う場合に，検索で使用しているインデクスの構成列を更新すると，同一行を複数回検索，更新するおそれがあります。そのため，次に示す適用条件を満たす場合にだけ適用してください。

なお，この機能は，SQL最適化オプションの指定を省略した場合にもデフォルトで適用されます。既にこの機能を使用していて，上記のケースに当てはまる場合は，《注意事項》の10.を参照して対策してください。

＜適用条件＞

次に示す条件を満たす場合には，この機能の適用をお勧めします。

検索で使用するインデクスの構成列を更新※する可能性がない

注※　UPDATE，DELETE，又はINSERT文の実行です。

検索で使用するインデクスの構成列を更新する可能性がある場合は，この機能を適用しないでください。

インデクスキー値無排他を適用している場合にこの最適化を指定すると，FOR UPDATE句を指定した検索，UPDATE文，又はDELETE文に対してインデクスを使用したときでも，HiRDBは内部処理のための作業表を作成しません。したがって，高速にSQL文を処理できます。

なお，インデクスキー値無排他を適用していない場合，作業表は作成されます。

インデクスを使用しているかどうかについては，アクセスパス表示ユティリティで確認できます。

更新SQLの作業表作成抑止を指定して，更にインデクスキー値無排他機能を使用している場合，カーソル使用時の表操作の制限が緩和されます。

作業表を作成するSQL文と，更新SQLの作業表作成抑止との関係を次の表に示します。

表6‒44　作業表を作成するSQL文と，更新SQLの作業表作成抑止との関係

SQL文

インデクスを使用する場合

インデクスを使用しない場合

この最適化を適用する

この最適化を適用しない

SELECT文

FOR UPDATE※１

×

○

×

FOR UPDATE OF

×

○※２

×

FOR READ ONLY

○

○

○

ORDER BY

○※４※５

○※４

○

上記の指定なし

×※５

×

×

UPDATE文

SET句の更新値に値指定だけを指定している

×

○※３

×

SET句の更新値に値指定以外の指定がある

○※３

○※３

×

DELETE文

×

○

×

（凡例）

○：作業表を作成します。

×：作業表を作成しません。

注※1

このSELECT文のカーソルを使用して更新した場合に，仮定されるFOR UPDATEを含みます。

注※2

FOR UPDATE OF 列名に，使用するインデクスの構成列を指定していない場合，作業表は作成されません。

注※3

SET句の左辺の更新する列名に，使用するインデクスの構成列を指定していない場合，作業表は作成されません。

注※4

インデクスの利用によって，ORDER BYのための作業表が作成されない場合があります。

注※5

カーソルを使用して検索中の表に対して，別のSQLでの表の更新ができます。ただし，カーソルの検索で使用しているインデクスを更新した場合，カーソルでの検索結果は保証されません。

15．探索高速化条件の導出

この最適化を指定すると，探索高速化条件の導出をします。

探索高速化条件とは，WHERE句の探索条件，FROM句のON 探索条件から，CNF変換，又は条件推移で新たに導出される条件のことをいいます。探索高速化条件を導出すると，検索する行が早い段階で絞り込まれるため，検索性能が向上します。ただし，探索高速化条件の生成及び実行に時間が掛かったり，アクセスパスが意図したとおりにならなかったりする場合があるため，できるだけこの最適化は指定しないで，探索高速化条件を直接SQL文中に指定するようにしてください。探索高速化条件の導出については，「探索高速化条件の導出」を参照してください。

16．スカラ演算を含むキー条件の適用

この最適化を指定すると，スカラ演算を指定した制限条件のうち，スカラ演算中に含まれる列がすべてインデクス構成列である場合に，インデクスのキー値ごとに条件を判定して絞り込みをします。この条件はキー条件として評価されます。

＜スカラ演算を含むキー条件の適用を指定した場合のHiRDBの動作＞

HiRDBは，インデクスを使用した検索の場合，次の順序で評価をします。

インデクスのサーチ範囲を絞り込みます（サーチ条件）。

1.で絞り込んだ結果に対して，インデクスのキー値ごとに条件を判定して更に絞り込みます（キー条件）。

2.で真となったキー値に対して，行識別子（ROWID）を使用してデータページを参照し，条件を評価します。

スカラ演算を含む条件は，この最適化を指定しない場合は3.で評価されます。この最適化を指定した場合は，2.で評価されるため，データページを参照する行数が少なくなり，入出力を削減できます。サーチ条件，及びキー条件については，マニュアル「HiRDB コマンドリファレンス」を参照してください。

＜スカラ演算を含むキー条件の適用についての留意事項＞

この最適化を指定すると，HiRDBはインデクスでの絞り込みが有効に行われていると判断します。その結果，インデクスがより使用されやすくなるため，スカラ演算を含む条件のインデクスでの絞り込みがあまり期待できない場合には，この最適化は指定しないでください。

次のどれかの条件に該当する場合，その条件はキー条件として評価されません。

・インデクス構成列以外の列を含む場合

・システム定義スカラ関数を含む場合

・システム組込みスカラ関数IS_USER_CONTAINED_IN_HDS_GROUPを含む場合

・関数呼出しを含む場合

・添字が整数の繰返し列を含む場合

スカラ演算を含む構造化繰返し述語は，インデクスを使用しないと評価できないため，エラーとなります。そのため，この最適化を指定しなくても，キー条件が適用されます。

17．プラグイン提供関数からの一括取得機能

探索条件にプラグイン提供関数を指定し，HiRDBがプラグインインデクスを使用して検索する場合，通常，HiRDBはプラグイン提供関数からの返却結果（行位置情報と，必要に応じて受渡し値）を1行ごとに取得します。

この最適化を適用すると，プラグイン提供関数の返却結果を複数行まとめて取得できるため，プラグイン提供関数の呼び出し回数を削減できます。このため，検索性能も向上します。なお，プラグイン提供関数からの一括取得機能を適用する場合，HiRDBが内部的に作業表を作成します。

この最適化を指定していなくても，HiRDBが常にプラグイン提供関数からの一括取得機能を適用した方が高速に検索できると判断した場合には，無条件にプラグイン提供関数からの一括取得機能を適用することがあります。プラグイン提供関数からの一括取得機能の適用有無を次に示します。

指定したSQL文の種類

プラグイン提供関数からの一括取得機能の指定

なし

あり

実表の検索結果に対して作業表が必要なSQL文※

一括取得に対応していない関数

×

×

一括取得に対応している関数

○

○

実表の検索結果に対して作業表が不要なSQL文※

一括取得に対応していない関数

×

×

一括取得に対応している関数

×

△

（凡例）

○：無条件にプラグイン提供関数からの一括取得機能を適用します。

△：新たに作業表を作成して，プラグイン提供関数からの一括取得機能を適用します。

×：プラグイン提供関数からの一括取得機能を適用しません。

注※

作業表用ファイルを必要とするSQLについては，マニュアル「HiRDB システム導入・設計ガイド」の「作業表用ファイルの概要」を参照してください。

＜プラグイン提供関数からの一括取得機能の留意事項＞

プラグイン提供関数の返却結果を取得する場合，HiRDBが内部的に作業表を作成する必要があります。通常は，行ごとに返却結果を受け取る時間よりも，作業表を作成する時間の方が短いため，検索性能が向上します。ただし，この最適化を指定することで検索性能が低下する場合もあるため，性能低下による影響が大きいときにはこの最適化を指定しないでください。

作業表を作成しない検索の場合に，この最適化を指定すると，1件目のFETCHまでの時間が遅くなります。これは，1行取り出すごとにクライアントへ結果を返却していた処理が，プラグイン提供関数を指定した探索条件を満たすすべての行を取り出して作業表を作成した後に，クライアントへ結果を返却するように変わるためです。1件目のFETCHの性能低下が問題になる場合は，この最適化を指定しないでください。

この最適化を適用すると，プラグイン提供関数の返却結果を複数行まとめて取得するため，メモリ所要量が増加します。メモリ所要量については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

18．導出表の条件繰り込み機能

通常，導出表のための作業表には，導出表の列に対する探索条件に一致しない行も格納します。この最適化方法を適用すると，導出表の列に対する探索条件に一致しない行を除いた後に，導出表のための作業表を作成します。これによって，作業表の容量，及び作業表への入出力回数を削減できます。また，このようなアクセスパスを使用することによって，検索する行をより有効に絞り込めるインデクスを利用できる場合があります。

バージョン08-02以降のHiRDBを初めて導入する場合は，この機能の使用をお勧めします。

＜導出表の条件繰り込み機能の留意事項＞

バージョン08-02より前のHiRDBからバージョンアップする場合，この機能を使用することでアクセスパスが変わることがあります。アクセスパスが変わることによって，検索する行を有効に絞り込めないインデクスを選択し，性能が劣化するおそれがあります。その場合は，この機能を使用する前後でアクセスパスを確認し，最適なインデクスを使用しているかどうかを確認してください。最適なインデクスを使用できていない場合は，使用インデクスのSQL最適化指定で使用するインデクスを指定するか，この機能の使用をやめてください。

《注意事項》

注意事項を次に示します。

インデクスを定義していない表については，次の最適化を指定しても影響はありません。

「ネストループジョイン強制」

「複数のSQLオブジェクト作成」

「ネストループジョイン優先」

「ORの複数インデクス利用の優先」

「ANDの複数インデクス利用の抑止」

「インデクス利用の抑止（テーブルスキャン強制）」

「複数インデクス利用の強制」

「更新SQLの作業表作成抑止」

「スカラ演算を含むキー条件の適用」

ASSIGN LIST文（副問合せ中を除く）については，必ずインデクスを使用して検索するため，次の最適化を指定しても影響はありません。

「ANDの複数インデクス利用の抑止」

「インデクス利用の抑止（テーブルスキャン強制）」

最適化情報収集ユティリティ（pdgetcst）で最適化情報を取得しない場合は，「複数のSQLオブジェクト作成」を指定しても無効になります。

グループ分け高速化処理を利用する場合，グループ分けされるグループ数が多いときは効果がないことがあります。この場合は，PDAGGRを見積もって必要な大きさの値を指定します。見積もり値以上の値を指定しても効果はありません。なお，指定値に応じてプロセス固有メモリの使用量が多くなるので注意が必要です。

「フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）」を指定しなくてもすべてのバックエンドサーバをデータ取り出しに使用するSQLに対しては，データ取り出しに使用するバックエンドサーバをフロータブルサーバとして使用します。

「ORの複数インデクス利用の優先」と「インデクス利用の抑止（テーブルスキャン強制）」を同時に指定した場合，「ORの複数インデクス利用の優先」は無効になります。

「ANDの複数インデクス利用の抑止」と「複数インデクス利用の強制」を同時に指定した場合，ANDの部分については複数インデクス利用を抑止し，ORの部分については複数インデクスを強制的に利用します。

「複数インデクス利用の強制」と「インデクス利用の抑止（テーブルスキャン強制）」を同時に指定した場合，「複数インデクス利用の強制」は無効になります。

ディクショナリ表SQL_ROUTINESに格納されるSQL最適化オプションの値は，10進数の形式（各最適化方法の符号なし整数の和）となります。

「更新SQLの作業表作成抑止」を適用した場合，次のすべての条件を満たすときは，同一行を複数回更新してデータベース不正になる，又は同一行を延々と更新し続けてトランザクションが終了しないことがあります。

（発生条件）

(a) インデクスキー値無排他を使用している

(b) カーソルを使って検索している表に対して，UPDATE，INSERT，又はDELETE文を実行する

(c) (b)の検索のWHERE句にインデクス構成列に対する条件を指定している

(d) (c)の条件をHiRDBがインデクスを用いて評価する※

(e) (b)がUPDATEの場合，(c)のインデクス構成列の値を変更する

注※

アクセスパス表示ユティリティ（pdvwopt）を使用することでHiRDBが検索で使用するインデクスを確認できます。

（例）

<インデクス定義>
  CREATE INDEX X1 ON T1(C1) ;

<カーソル宣言>
  DECLARE CR1 CURSOR FOR SELECT C1 FROM T1 WHERE C1>0 FOR UPDATE ;

上記のカーソルを使用して，次のFETCH文，UPDATE文を繰り返すと，C1=C1+10に更新した行が再度検索され，再度C1=C1+10に更新されます。

  WHILE(SQLCODE == 0){
    FETCH CR1 INTO :XX ;
    UPDATE T1 SET C1=C1+10 WHERE CURRENT OF CR1 ;
  }

（対策方法）

二重更新が発生しないようにUAPを修正してください。修正例を次に示します。

更新後の値が，更新対象のすべての行の更新前の値と異なる場合

UPDATE文の更新後の値が検索の探索条件を満たさないように探索条件を変更してください。

（例）C1の更新前の値が0以上10未満の場合，WHERE C1>0 AND C1<10を追加する。

UPDATE文の更新値が，更新列の値を単純に増加させる操作の場合

SELECT文にORDER BY 更新列 DESCを指定し，大きい順に更新してください。

（例）C1=C1+10の場合，SELECT C1 FROM T1 WHERE C1>0 ORDER BY C1 DESC FOR UPDATEとする。

UPDATE文の更新値が，更新列の値を単純に減少させる操作の場合

SELECT文にORDER BY 更新列 ASCを指定し，小さい順に更新してください。

（例）C1=C1-10の場合，SELECT C1 FROM T1 WHERE C1>0 ORDER BY C1 ASC FOR UPDATEとする。

同一行が複数回検索されると困るUAPについては，「更新SQLの作業表作成抑止」を適用しないようにしてください。ストアドルーチンの場合は，ルーチン定義時のSQL最適化オプションで「更新SQLの作業表作成抑止」を指定しないで，ルーチンを定義し直してください。

検索に使用するインデクスの構成列から，該当する列を削除してください。ただし，インデクス構成列の一部を削除した場合，その列が探索条件で十分に絞り込める列のときは，性能が劣化するため注意してください。また，インデクスの一部を削除した場合，インデクスキーの重複数が多くなり，排他待ち及びデッドロックが多発する可能性があります。したがって，この対策方法はあまりお勧めできる対処でないため，採用する場合には十分に検証してください。

また，UPDATE文のSET句の列名に，このUPDATE文で使用するインデクスの構成列を指定し，その更新値にWHERE句の探索条件を満たす値を指定した場合も，同一行を複数回更新することがあります。

(98)　PDADDITIONALOPTLVL=SQL拡張最適化オプション［，SQL拡張最適化オプション］…

　　　〜<識別子，又は符号なし整数>

データベースの状態を考慮して，最も効率的なアクセスパスを決定するための最適化の方法を指定します。

SQL拡張最適化オプションは，識別子（文字列）で指定する方法と，数値で指定する方法があります。

識別子で指定する場合：

PDADDITIONALOPTLVL="識別子"［，"識別子"］…

＜指定例＞

「コストベース最適化モード2の適用」及び「ハッシュジョイン，副問合せのハッシュ実行」を適用する場合

PDADDITIONALOPTLVL="COST_BASE_2","APPLY_HASH_JOIN"

すべての最適化を使用しない場合

PDADDITIONALOPTLVL="NONE"

＜規則＞

識別子は一つ以上指定してください。

識別子を二つ以上指定する場合は，コンマで区切ってください。

識別子に指定できる内容（最適化方法）については，《SQL拡張最適化オプションの指定値》を参照してください。

すべての機能を使用しない場合は，識別子に"NONE"を指定してください。

識別子は大文字及び小文字で指定できます。

同じ識別子を二つ以上指定しても，一つ指定したものとみなされますが，なるべく同じ識別子は指定しないようにしてください。

"識別子"［，"識別子"］…に指定できる文字列は，最大575バイトです。

数値で指定する場合：

PDADDITIONALOPTLVL=符号なし整数［，符号なし整数］…

＜指定例＞

「コストベース最適化モード2の適用」及び「ハッシュジョイン，副問合せのハッシュ実行」を適用する場合

PDADDITIONALOPTLVL=1,2

すべての最適化を使用しない場合

PDADDITIONALOPTLVL=0

＜規則＞

符号なし整数は一つ以上指定してください。

符号なし整数を二つ以上指定する場合は，コンマで区切ってください。

符号なし整数に指定できる内容（最適化方法）については，《SQL拡張最適化オプションの指定値》を参照してください。

すべての機能を使用しない場合は，符号なし整数に0を指定してください。

同じ符号なし整数を二つ以上指定しても，一つ指定したものとみなされますが，なるべく同じ符号なし整数は指定しないようにしてください。

符号なし整数［，符号なし整数］…に指定できる文字列は，最大575バイトです。

《システム定義との関係》

この環境変数を省略するとシステム定義のpd_additional_optimize_levelオぺランドの指定値が仮定されます。pd_additional_optimize_levelオペランドについては，マニュアル「HiRDB システム定義」を参照してください。

《SQLとの関係》

ストアドルーチン中のSQL文のSQL拡張最適化オプションは，CREATE PROCEDURE，CREATE TYPE，ALTER PROCEDURE，又はALTER ROUTINEの指定で決まり，PDADDITIONALOPTLVLの指定によって影響を受けることはありません。

SQL文中にSQL最適化指定を指定している場合は，SQL最適化拡張オプションよりもSQL最適化指定が優先されます。SQL最適化指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

《SQL拡張最適化オプションの指定値》

SQL拡張最適化オプションの指定値を次の表に示します。

表6‒45　SQL拡張最適化オプションの指定値

項番

最適化方法

指定値

識別子

符号なし整数

1

コストベース最適化モード2の適用

"COST_BASE_2"

1

2

ハッシュジョイン，副問合せのハッシュ実行

"APPLY_HASH_JOIN"

2

3

値式に対する結合条件適用機能

"APPLY_JOIN_COND_FOR_VALUE_EXP"

32

4

スカラ演算を含む条件に対するサーチ条件適用

"APPLY_SRCH_COND_FOR_VALUE_EXP"

64

5

パラメタを含むXMLEXISTS述語への部分構造インデクスの有効化

"ENABLE_INDEX_XMLEXISTS_PARAM"

256

6

プラグインインデクスでの他インデクス絞り込み結果の利用の抑止

"DETER_IS_TRUE_AND"

2048

7

FROM句の導出表のマージ適用

"MERGE_FROM_DERIVED_TABLE"

4096

8

外結合内結合変換機能

"CONVERT_OUTER_INNER_JOIN"

8192

注

項番2〜8は，「コストベース最適化モード2の適用」を指定した場合，有効になります。

《各最適化方法の内容》

1.コストベース最適化モード2の適用

コストベース最適化モード2を使用して最適化処理をします。コストベース最適化モード2については，「SQL最適化モード」を参照してください。

留意事項

HiRDBを初めて導入した場合

この機能の使用をお勧めします。この機能を使用する場合，最適化の精度を更に向上させるために，必要に応じて最適化情報収集ユティリティを実行してください。最適化情報収集ユティリティの実行要否については，マニュアル「HiRDB コマンドリファレンス」を参照し，性能について十分に検証するようにしてください。

最適化情報収集ユティリティを実行する場合，テスト環境と本番環境でDB規模が異なると（表の行数が異なると），テスト環境と本番環境でアクセスパスが変わることがあります。テスト環境では，本番での表の行数(NROWS)を最適化情報パラメタファイルに記述して，最適化情報収集ユティリティに-sオプションを指定して実行してください。

バージョン06-00より前のバージョンからHiRDBをバージョンアップした場合

この機能を使用するかどうかを検討してください。バージョンアップ前と同じ動作環境にするならば，この機能を使用しないでください。ただし，バージョン06-00以降にサポートするSQL文によっては，常にこの機能を使用して最適化処理をすることがあります。

2.ハッシュジョイン，副問合せのハッシュ実行

結合検索の場合にハッシュジョインを適用して最適化をします。副問合せを伴った検索については，ハッシングによって副問合せを処理します。この最適化を適用するかどうかについては，結合方式，外への参照のない副問合せの実行方式，及び外への参照のある副問合せの実行方式を考慮して決めてください。なお，これらの詳細については，それぞれ「結合方式」，「外への参照のない副問合せの実行方式」，及び「外への参照のある副問合せの実行方式」を参照してください。

また，この最適化を適用する場合は，事前にシステム定義を指定しておく必要があります。ハッシュジョイン，副問合せのハッシュ実行を適用する場合の準備については，「ハッシュジョイン，副問合せのハッシュ実行を適用する場合の準備」を参照してください。

留意事項

ハッシュジョインを使用しない場合は，この機能を指定する必要はありません。

3.値式に対する結合条件適用機能

この機能を指定した場合，値式を含む条件に対して結合条件を作成します。

（例）

次の式の場合，結合条件を作成します。

substr(t1.c1,1,100)=t2.c1

値式を含む結合条件しかない場合，この機能によってアクセスパスが直積からネストループジョイン，ハッシュジョイン，又はマージジョインになり，SQL実行の高速化が期待できます。

留意事項

バージョン08-04以降のHiRDBを初めて導入した場合

この機能の使用をお勧めします。

バージョン08-04より前のHiRDBをバージョンアップした場合

この機能を使用することで結合条件が増えるため，結合順序と結合方式が変わることがあります。結合順序と結合方式が変わると，絞り込みが有効に行われない結合順序，又は性能が悪い結合方式を選択するおそれがあり，これによって，性能が低下することがあります。また，有効に行が絞り込めない結合順序を選択した場合，ジョインの途中結果を作業表に入れることができなくなり，結果がエラーになるおそれがあります。

このため，この機能を適用する前後でアクセスパスを確認し，この機能の適用によって性能の低下やエラーが発生しないことを確認してください。性能の低下やエラーが発生した場合は，この機能の使用をやめるか，結合表のINNER又はLEFT OUTERで結合順序を指定し，結合方式のSQL最適化指定で適切な結合方式を指定してください。

4.スカラ演算を含む条件に対するサーチ条件適用

この機能を指定した場合，強制的にコストベース最適化モード2が適用されます。スカラ演算を含む探索条件のうち，次の条件をすべて満たす場合にスカラ演算をあらかじめ演算し，その結果を使ってインデクスのサーチ条件として評価し，絞り込みます。

次の述語を指定している。

・比較述語

・IN述語

・SIMILAR述語

・BETWEEN述語

・構造化繰返し述語中の上記のどれかの述語

1.の述語の左辺※1が，その問合せのFROM句に指定した表の列指定※2である。

2.で指定した列指定にインデクスを定義している。

1.の述語の右辺※1が，その問合せのFROM句に指定した表の列指定を含まないスカラ演算である。

注※1

比較述語の場合は左辺と右辺の指定が逆でも適用されます。

注※2

繰返し列を指定する場合は，添字としてANYを指定した場合に適用されます。

この機能を指定した場合のHiRDBの動作

HiRDBは，インデクスを使用した検索の場合，次の順序で評価をします。

インデクスのサーチ範囲を絞り込みます（サーチ条件）。

1.で絞り込んだ結果に対して，インデクスのキー値ごとに条件を判定して更に絞り込みます（キー条件）。

2.で真となったキー値を持つ行のデータページを参照し，残りの探索条件を評価します。

スカラ演算を含む条件は，この最適化を指定しない場合は2.（「スカラ演算を含むキー条件の適用」指定時）又は3.で評価されますが，この最適化を指定した場合は，1.で評価されます。スカラ演算を含む探索条件の評価タイミングが2.から1.に変わる場合には，インデクスのサーチ範囲を絞り込めます。3.から1.に変わる場合には，データページを参照する行数が少なくなり入出力を削減できます。サーチ条件及びキー条件については，マニュアル「HiRDB コマンドリファレンス」を参照してください。

留意事項

バージョン09-50以降のHiRDBを初めて導入した場合

この機能の使用をお勧めします。

バージョン09-50より前のHiRDBをバージョンアップした場合

この機能はSQL拡張最適化オプション省略時にデフォルトで適用されます。

この機能を使用することで，この機能を適用できるSQLで使用するインデクスやサーチ条件種別が変わり，アクセスパスが変更になることがあります。それによって，SQL文の検索性能が低下するおそれがあります。この機能を使用する前後でアクセスパスを確認し，アクセスパスの変更によって性能低下が見られる場合は，この機能の使用を取りやめてください。

この機能を使用することで，強制的にコストベース最適化モード2が適用されます。そのため，バージョンアップ前にコストベース最適化モード1で運用していた場合に，すべてのSQLで使用するインデクスやサーチ条件種別などのアクセスパスが変更になることがあり，SQL文の検索性能が低下するおそれがあります。この機能を使用する前後でアクセスパスを確認し，アクセスパスの変更によって性能低下が見られる場合は，この機能の使用を取りやめてください。

5.パラメタを含むXMLEXISTS述語への部分構造インデクスの有効化

次の二つの条件を満たす検索をするときに部分構造インデクスを使用できるようにします。

XMLEXISTS述語のXML問い合わせ関数にCAST指定を指定して，かつCAST指定の値式に?パラメタ，SQLパラメタ，又はSQL変数を指定

定義されているインデクスの部分構造指定と，XMLEXISTS述語のXQuery問い合わせ中で条件として指定した部分構造パスが一致

部分構造インデクスが使用できることで，検索処理の性能向上が期待できます。部分構造インデクスの使用条件については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

部分構造インデクスを使用して検索処理の性能を向上させる場合の例を次に示します。

SQL例

表定義

CREATE TABLE T1(C1 XML);

インデクス定義

CREATE INDEX T1C1 ON T1(C1) KEY USING UNIQUE TAG FROM ‘/a/b/c’ AS VARCHAR(30);

データ挿入

INSERT INTO T1(C1) VALUES(XMLPARSE(DOCUMENT '<?xml version="1.0" encoding="Shift_JIS"?><a><b><c>aaa</c></b></a>'));

検索

SELECT XMLSERIALIZE(C1 AS VARCHAR(256)) FROM T1 WHERE

XMLEXISTS(‘/a/b[c=$AAA]’ PASSING BY VALUE C1,CAST(? AS VARCHAR(256)) AS AAA);

留意事項

バージョン09-03以降のHiRDBを初めて導入した場合

この機能の使用をお勧めします。

バージョン09-03より前のHiRDBをバージョンアップした場合

この機能を使用すると，HiRDBがXMLEXISTS述語を指定して検索する際に部分構造インデクスを使用する可能性があり，一部の検索処理で性能が低下するおそれがあります。

このため，この機能の使用前後でアクセスパスを確認し，使用後にアクセスパスが変更されていないか確認してください。アクセスパスが変更され，性能低下が見られる場合は，この機能の使用を中止してください。

6.プラグインインデクスでの他インデクス絞り込み結果の利用の抑止

プラグインインデクスで他インデクス絞り込み結果を利用しないアクセスパスにする場合，この最適化を指定してください。プラグインインデクスでの他インデクス絞り込み結果の利用については，「プラグインインデクスでの他インデクス絞り込み結果の利用」を参照してください。

7.FROM句の導出表のマージ適用

この機能を指定した場合，強制的にコストベース最適化モード2が適用されます。FROM句の導出表を，上位問合せにマージして作業表を作成しないことで性能を向上させます。

マージを適用する条件については，マニュアル「HiRDB SQLリファレンス」の「表参照」の「FROM句の導出表についての規則」を参照してください。

留意事項

バージョン09-50以降のHiRDBを初めて導入した場合

この機能の使用をお勧めします。

バージョン09-50より前のHiRDBをバージョンアップした場合

この機能はSQL拡張最適化オプション省略時にデフォルトで適用されます。

この機能を使用することによって，従来使用していたインデクスを使用しなくなり，検索方式や結合方式が変化するため，性能が低下するおそれがあります。

そのため，この機能を使用する前後で意図したインデクスを使用しているかどうかをアクセスパスで確認してください。

アクセスパスの変更によって性能低下が見られるときは，この機能の使用を取りやめてください。

この機能を使用することで，強制的にコストベース最適化モード2が適用されます。そのため，バージョンアップ前にコストベース最適化モード1で運用していた場合に，すべてのSQLで使用するインデクスやサーチ条件種別などのアクセスパスが変更になることがあり，SQL文の検索性能が低下するおそれがあります。この機能を使用する前後でアクセスパスを確認し，アクセスパスの変更によって性能低下が見られるときは，この機能の使用を取りやめてください。

8.外結合内結合変換機能

この機能を指定した場合，強制的にコストベース最適化モード2が適用されます。この機能を指定した場合，外結合を含む問合せ指定のWHERE句に指定した探索条件をチェックし，外結合でナル拡張して生成される行（結合条件を満たさない外表の行）が確実に選択されないことが分かるとき，外結合から内結合に変換します。

外結合から内結合に変換することで不要な処理を省略できるだけでなく，WHERE句に指定した内表の列に対する探索条件へのインデクスの適用ができるようになり，実行性能の向上が期待できます。

また，導出表の条件繰り込み機能と組み合わせて使用することで，変換対象の外結合の内表として指定した表に対してWHERE句で指定した探索条件の導出表作成前の評価ができるようになり，実行性能の向上が期待できます。

留意事項

バージョン09-50以降のHiRDBを初めて導入した場合

この機能の使用をお勧めします。

バージョン09-50より前のHiRDBをバージョンアップした場合

この機能はSQL拡張最適化オプション省略時にデフォルトで適用されます。

この機能を使用することで，アクセスパスが変わった結果として選択されたインデクスが，検索する行を有効に絞り込めなくなり，性能が低下するおそれがあります。

そのため，この機能を使用する前後でアクセスパスを確認し，この機能を使用した後に，検索する行を有効に絞り込めないインデクスを使用していないことを確認してください。

検索する行を有効に絞り込めないインデクスを使用している場合は，使用インデクスのSQL最適化指定で使用するインデクスを指定するか，又はこの機能の使用をやめるなどの対策をしてください。

この機能を使用することで，強制的にコストベース最適化モード2が適用されます。そのため，バージョンアップ前にコストベース最適化モード1で運用していた場合に，すべてのSQLで使用するインデクスやサーチ条件種別などのアクセスパスが変更になることがあり，SQL文の検索性能が低下するおそれがあります。この機能を使用する前後でアクセスパスを確認し，アクセスパスの変更によって性能低下が見られるときは，この機能の使用を取りやめてください。

(99)　PDHASHTBLSIZE=ハッシュジョイン，副問合せのハッシュ実行適用時のハッシュ表サイズ

　　　32ビットモードの場合

　　　　〜＜符号なし整数＞((128〜524288))（単位：キロバイト）

　　　64ビットモードの場合

　　　　〜＜符号なし整数＞((128〜2097152))（単位：キロバイト）

SQL拡張最適化オプションで「ハッシュジョイン，副問合せのハッシュ実行」を適用した場合，ハッシュ表のサイズを指定します。

指定値は，128の倍数で指定してください。指定値が128の倍数でない場合，128の倍数に切り上げられます。

サーバ側が32ビットモードの場合，524289〜2097152の値を指定すると，上限値524288が仮定されます。

《指定値の目安》

「ハッシュジョイン，副問合せのハッシュ実行を適用する場合の準備」を参照してください。

《システム定義との関係》

この環境変数を省略した場合，システム定義のpd_hash_table_sizeオペランドの指定値が仮定されます。

(100)　PDDFLNVAL={USE｜NOUSE}

表中のデータを埋込み変数に取り出す場合，取り出した値がナル値のときに埋込み変数に既定値を設定するかどうかを指定します。

USE：ナル値の既定値設定機能を使用します。

NOUSE：ナル値の既定値設定機能を使用しません。

ナル値の既定値設定機能については，マニュアル「HiRDB SQLリファレンス」を参照してください。

Javaストアドプロシジャで動作するType4 内部JDBCドライバの場合は，Javaストアドプロシジャ呼び出し元のこの環境変数の指定と同じ指定をしてください。

(101)　PDAGGR=グループ分けのときに発生するグループ数

　　　32ビットモードの場合

　　　　〜〈符号なし整数〉((0〜30000000))《1024》

　　　64ビットモードの場合

　　　　〜〈符号なし整数〉((0〜2147483647))《1024》

GROUP BY処理に使用するメモリ量を決定するため，サーバごとに発生するグループ数の最大値を指定します。なお，この環境変数は，SQL最適化オプションでグループ分け高速化処理を指定した場合に有効になります。

《見積もり方法》

1024以上のグループ数が発生する場合，又は期待していた性能が得られない場合

この環境変数の値を大きくしてください。ただし，メモリ所要量との兼ね合いを考えて，少しずつ指定値を大きくしてください。

1024を指定すると，メモリが足りなくなるユーザはメモリに合わせて指定してください。

1024未満のグループ数が発生する場合，又はメモリが足りなくなる場合

この環境変数の値を小さくしてください。また，メモリ所要量が多くなり，必要な大きさの値が指定できない場合，グループ数以下の値でも指定できる最大値を指定してください。

《留意事項》

指定値が大き過ぎると，メモリ不足となることがあります。また，指定値を超えたグループ数が発生した場合，割り当てられたメモリが不十分なため，処理が遅くなることがあります。なお，グループ分け高速化機能で使用するメモリ所要量の計算式については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

(102)　PDCMMTBFDDL=｛YES｜NO｝

操作系SQLを実行しているトランザクションで定義系SQLを実行する場合，自動的にコミットしてから定義系SQLを実行するときに指定します。なお，定義系SQL実行前に自動的にコミットをした場合，開いているホールダブルカーソルは閉じて，前処理したSQL文の結果は無効になります。

YES：

操作系SQLを実行しているトランザクションを自動的にコミットしてから，定義系SQLを実行します。また，開いているホールダブルカーソルは閉じて，前処理したSQL文の結果は無効になります。

NO：

操作系SQLを実行しているトランザクションを明示的に決着してから，定義系SQLを実行します。

(103)　PDPRPCRCLS＝｛YES｜NO｝

開いているカーソルで使用しているSQL識別子を再度PREPRARE文で使用する場合，開いているカーソルを自動的にクローズするかどうかを指定します。

この環境変数は，プリプロセス時に-Xeオプションを指定しない場合に有効になります。プリプロセスについては，「プリプロセス」を参照してください。

YES：開いているカーソルを自動的にクローズします。

NO：開いているカーソルを自動的にクローズしません。

(104)　PDAUTOCONNECT＝｛ON｜OFF｝

HiRDBと接続していない状態でSQL文を実行した場合，自動的にCONNECTするかどうかを指定します。

ON：自動的にCONNECTしてからSQL文を実行します。

OFF：自動的にCONNECTしません。このときSQL文はエラー（SQLCODE=-563）となります。

HiRDBサーバと接続していない状態でSET SESSION AUTHORIZATION文を実行した場合，この環境変数の指定に関係なく常にエラー（SQLCODE=-563）となります。

UAPを開発する場合は，HiRDBに正しくCONNECTしているかどうかを判断する必要があるため，この環境変数にはOFFを指定することをお勧めします。

(105)　PDDDLDEAPRPEXE=｛YES｜NO｝

先行するトランザクション（以降，先行トランザクションと呼びます）が，定義系SQLを実行するトランザクション（以降，定義系トランザクションと呼びます）で操作する表，ストアドルーチン，抽象データ型などを既に使用していると，通常，定義系トランザクションは先行トランザクションの決着を待ちます。この環境変数にYESを指定すると，先行トランザクションの前処理結果を無効にし，定義系トランザクションを優先的に実行できます。

参考

次に示す環境変数を指定することで，定義系トランザクションを実行するタイミングを指定できます。

PDDDLDEAPRPEXE

先行トランザクションの前処理結果を無効にし，定義系トランザクションを実行できます。

PDDDLDEAPRP

先行トランザクションのホールダブルカーソルが閉じた後，そのホールダブルカーソルを含むトランザクションの決着後に定義系トランザクションを実行できます。定義系トランザクションが実行されると，ホールダブルカーソルの前処理結果は無効になります。

PDLCKWAITTIME

排他待ち限界経過時間を指定できます。PDDDLDEAPRPとPDLCKWAITTIMEを組み合わせて使用すると，先行トランザクションの決着までに定義系トランザクションがタイムアウトエラーになることを防止できます。

また，PDDDLDEAPRPEXE及びPDDDLDEAPRPを組み合わせた場合の，先行トランザクションの前処理結果無効の可否を次に示します。

クライアント環境定義

ホールダブルカーソルで使用する前処理結果

ホールダブルカーソルで使用しない前処理結果

PDDDLDEAPRPEXE

PDDDLDEAPRP

YES

YES

○

○

NO

○

○

NO

YES

△

×

NO

×

×

（凡例）

○：無効にできます。

△：先行トランザクションの決着後，無効にできます。

×：無効にできません。

YES：

先行トランザクションの前処理結果を無効にし，定義系トランザクションの実行を優先します。YESを指定した場合の例を次に示します。

［説明］

定義系トランザクションは，先行トランザクションの決着を待ちません。

定義系トランザクションを実行すると，先行トランザクションの前処理結果が無効になり，先行トランザクションは実行できなくなり，SQLCODE=-1512エラーとなります。

《留意事項》

前処理結果を無効にできるのは，定義系トランザクションが次の操作をした場合です（ただし，先行トランザクションが前処理実行中の場合を除く）。

定義系SQLを実行した場合

ストアドルーチンのSQLオブジェクトを格納するデータディクショナリLOB用RDエリアをクローズした場合・

データベース構成変更ユティリティ（pdmod）で次に示す操作をした場合

・RDエリアの削除（remove rdarea文）で解析情報表（SQL_DB_STATE_ANALYZED），及び運用履歴表（SQL_DB_MANAGEMENT）を格納するデータディクショナリ用RDエリアを削除したとき

・ディクショナリ表の属性定義変更（alter system文）で参照権限，又は混在文字データの使用有無を変更したとき

・RDエリアの属性変更（alter rdarea文）でRDエリアの名称を変更したとき

ただし，先行トランザクションで定義系SQL（リバランスユティリティなども含む）が実行中の場合，その定義変更中の表，手続き，関数などを使用する定義系トランザクションはエラーになります。

前処理結果を無効にした場合，先行トランザクションでは再度前処理を行う必要があります。

Java EEアプリケーションサーバのステートメントプーリング／ステートメントキャッシュ機能を使用している場合，無効になったStatementオブジェクトを再利用してSQLエラーとなる場合があります。詳細はマニュアル「HiRDB システム導入・設計ガイド」の「ステートメントプーリング／ステートメントキャッシュ」の注意事項を参照してください。

NO：

定義系トランザクションの実行を優先しません。NOを指定した場合の例を次に示します。

［説明］

定義系トランザクションは，先行トランザクションで実行中のSQL文に関係なく，先行トランザクションの決着を待ちます。

先行トランザクションの決着後に，定義系トランザクションが実行されます。

《指定値の目安》

先行するトランザクションの終了を待たないで，先行するトランザクション中に使用する表に対する定義変更，インデクス定義変更などを行う場合の，クライアント環境定義PDDDLDEAPRPEXEとPDDDLDEAPRPの指定値の目安を次に示します。

使用している機能

無効にする前処理結果のSQL形式

PDDDLDEAPRPEXEの指定値の目安

PDDDLDEAPRPの指定値の目安

接続プーリング機能

ステートメントプーリング機能

ホールダブルカーソル

○

○

○

YES

YES

○

×

○

NO

YES

○

○

×

YES

NO

○

×

×

NO

NO

×

×

○

NO

YES

×

×

×

NO

NO

（凡例）

○：使用しています。

×：使用していません。

(106)　PDDDLDEAPRP=｛YES｜NO｝

閉じているホールダブルカーソルで使用している表の定義情報を，トランザクション間に他UAPからの変更を許可するかどうかを指定します。なお，定義系SQLが実行されると，ホールダブルカーソルの前処理は無効になります。

YES：

ホールダブルカーソルを使用しているUAPのトランザクション間に，他UAPから表の定義情報の変更を許します。

YESを指定した場合の例を次に示します。

［説明］

UAP2で実行した定義系SQLは，UAP1のホールダブルカーソルが閉じた後，そのホールダブルカーソルを含んだトランザクションが決着すると，実行できます。また，UAP1のホールダブルカーソルを再度開くと，SQLCODE=-1512エラーとなります（前処理は無効になります）。

《留意事項》

定義系SQL実行後，そのホールダブルカーソルの前処理が無効になるため，後続のトランザクションでは再度ホールダブルカーソルを前処理する必要があります。

NO：

ホールダブルカーソルを使用しているUAPのトランザクション間に，他UAPから表の定義情報の変更を許しません。

NOを指定した場合の例を次に示します。

［説明］

UAP2で実行した定義系SQLは，UAP1のDISCONNECT後に実行できます。

《指定値の目安》

HiRDBの接続を保持したまま，サービスの要求を待機するWebアプリケーションで，ホールダブルカーソル使用中に表の定義変更を行うSQL文を実行する場合は，YESを指定してください。

《ほかの環境変数との関係》

PDLCKWAITTIMEで排他待ち限界経過時間を指定できます。PDDDLDEAPRPとPDLCKWAITTIMEを組み合わせて使用すると，トランザクションの決着までに定義系SQLがタイムアウトエラーになることを防止できます。

(107)　PDLCKWAITTIME=排他待ち限界経過時間

　　　〜<符号なし整数>((0〜65535))《システム定義pd_lck_wait_timeoutの値》（単位：秒）

排他要求が待ち状態になってから解除されるまでの最大監視時間を指定します。指定した最大時間を過ぎても排他が解除されない場合，SQLはエラーリターンします。0を指定した場合，待ち状態を監視しないで，排他が解除されるまで待ち続けます。

(108)　PDCURSORLVL=｛0｜1｜2｝

カーソルを使用した検索をする場合に，HiRDBクライアントからHiRDBサーバに対するカーソルオープン・クローズの要求を，どのタイミングで行うかを指定します。この環境変数を指定することで，アプリケーションからカーソルオープンの要求を受けた場合に，HiRDBサーバに対しては要求をしないで，初回取り出し時にカーソルオープン要求をします。また，検索データなし（SQLCODE=100）を検知した時点で，カーソルクローズをします。これによって，通信オーバヘッドを削減できます。

0：

アプリケーションから，カーソルオープン・クローズの要求を受けた場合，HiRDBクライアントはHiRDBサーバに対して，そのまま実行要求をします。

1：

検索データがない場合，HiRDBサーバはSQLCODE=100の返却と同時に，HiRDBクライアントからの要求なしでカーソルをクローズします。HiRDBクライアントは，アプリケーションからのカーソルクローズ要求を受けた場合に，既にSQLCODE=100を検知していれば，HiRDBサーバに対してカーソルクローズ要求をしません。SQLCODE=100を検知していない場合にだけ，カーソルクローズ要求をします。

カーソルオープン要求については，0を指定した場合と同じです。

2：

アプリケーションからのカーソルオープン要求を受けた場合に，HiRDBサーバに対しては実行を要求しないで，初回取り出し要求と同時にカーソルオープン要求を行います。

カーソルクローズ要求については，1を指定した場合と同じです。

指定値ごとの処理概要を次の図に示します。

図6‒7　PDCURSORLVLの指定値ごとの処理概要

《注意事項》

この環境変数に1又は2を指定した場合でも，手続きから返却された結果集合に対するカーソルのクローズ要求を受けたときは，HiRDBサーバに対して実行要求を行います。

この環境変数に1又は2を指定した場合のカーソルクローズは，UAPに関する統計情報のSQL実行回数には加算されますが，SQLに関する統計情報には出力されません。また，この環境変数に2を指定した場合のカーソルオープンも，UAPに関する統計情報のSQL実行回数に加算されますが，SQLに関する統計情報には出力されません。

この環境変数に1又は2を指定した場合でも，SQLトレースにはカーソルオープン・クローズのオペレーションコードが出力されます。また，FETCH文でカーソルオープン・クローズした場合，カーソルオープン・クローズのSQLに関する統計情報，アクセスパス情報，及びSQL実行時の中間結果情報はFETCH側に出力されます。

HiRDB/パラレルサーバの場合，カーソルオープン実行後から初回取り出しを実行するまでの間が長いと，初回取り出しに時間が掛かることがあります。

この環境変数に2を指定した場合に，初回取り出しのコール前のオープン中カーソルに対して，再度PREPARE文を実行しても，HiRDBサーバへのカーソルオープン実行要求は行われていないため，エラーになりません。再度PREPARE文を実行した場合は，そのPREPARE文の情報をカーソル情報として使用するため，カーソルのオープンも再実行する必要があります。

この環境変数に1又は2を指定した場合，SQLCODE=100を検知後，CLOSE文を実行しないでPREPARE文又はOPEN文を実行しても，カーソルは既にクローズされているため，エラーになりません。また，SQLCODE=100を検知後に続けてFETCH文を実行した場合は，検索データなしにはならないで，カーソルが開かれていないことを示すSQLCODE=-501が返却されます。

(109)　PDDELRSVWDFILE=SQL予約語削除ファイル名

　　　〜＜識別子＞((最大8文字))

SQL予約語削除機能を使用する場合に，SQL予約語削除ファイル名を指定します。SQL予約語削除ファイルには，SQLの予約語から削除するキーワードを記述します。

《システム定義との関連》

PDDELRSVWDFILEを指定する場合，システム定義のpd_delete_reserved_word_fileオペランドでSQL予約語削除ファイルを指定しておく必要があります。SQL予約語削除ファイルについては，マニュアル「HiRDB システム定義」を参照してください。

《注意事項》

Windows版のHiRDBの場合，SQL予約語削除ファイル名は，大文字，小文字が区別されません。したがって，大文字，小文字が異なるだけのファイル名は，同一ファイルとして扱われるため注意してください。

(110)　PDCALCMDWAITTIME=CALL COMMAND文の最大待ち時間

　　　〜<符号なし整数>((0〜65535))《PDCWAITTIMEの指定値》（単位：秒）

CALL COMMAND文によってコマンド，又はユティリティを開始してから終了するまでの，HiRDBクライアントの最大待ち時間を指定します。最大待ち時間を経過してもサーバから応答がない場合は，UAPにエラーを返し，サーバ側のプロセスをキャンセルします。0を指定した場合，HiRDBクライアントはHiRDBサーバからの応答があるまで待ち続けます。

(111)　PDSTANDARDSQLSTATE=｛YES｜NO｝

SQLSTATEの値を詳細に出力するかどうかを指定します。

YES：

SQLSTATEの値を詳細に出力します。

NO：

SQLSTATEの値を詳細に出力しません。

《システム定義との関連》

この環境変数を省略した場合，システム共通定義のpd_standard_sqlstateオペランドの指定値が仮定されます。ただし，サーバとの接続が完了するまでにエラーが発生した場合，HiRDBはこの環境変数を省略したときにはNOが指定されたものとして動作し，環境変数を指定したときには指定した内容で動作します。

SQLSTATEについては，マニュアル「HiRDB メッセージ」を参照してください。

なお，Javaストアドプロシジャで使用するドライバがType4 JDBCドライバの場合，Javaストアドプロシジャに返されるSQLSTATEの値を詳細に設定するかどうかは，クライアント（Javaストアドプロシジャ呼び出し元）のPDSTANDARDSQLSTATE，システム共通定義のpd_standard_sqlstateの値，及びJavaストアドプロシジャのPDSTANDARDSQLSTATEの指定値の組み合わせによって決まります。指定値の組み合わせを次に示します。

クライアント環境変数PDSTANDARDSQLSTATEの指定値

システム共通定義pd_standard_sqlstateの値

JavaストアドプロシジャPDSTANDARDSQLSTATEの指定値

SQLSTATEの値を詳細に設定するかどうか

YES

−

YES

詳細に設定する

省略

Y

YES

NO

−

NO又は省略

詳細に設定しない

省略

N

NO又は省略

（凡例）

−：pd_standard_sqlstateの値はSQLSTATEの詳細設定に影響しません。

上記以外の組み合わせは指定できません。

ODBCドライバから返却するSQLSTATEはこの環境変数，及びシステム共通定義のpd_standard_sqlstateの指定に関係なく，ODBCの規格に従った値となります。

(112)　PDBLKF=ブロック転送の行数

　　　〜<符号なし整数>((1〜4096))《1》

サーバからクライアントに検索結果を転送する場合の，一回の転送処理で送信する行数を指定します。

なお，実際に送信する行数は，クライアント環境定義PDBLKBUFFSIZEの指定値によって変わります。送信する行数については，「1回の通信で転送する行数」を参照してください。

この値を大きくすると通信オーバヘッドが減り，検索時間を短縮できますが，その分メモリが余計に必要となります。したがって，メモリとの兼ね合いを考慮して値を決めてください。

サーバ側で必要なメモリの計算式については，マニュアル「HiRDB システム導入・設計ガイド」の「ブロック転送又は配列FETCHで必要なメモリ所要量」を参照してください。クライアント側で必要なメモリの計算式を次に示します。

メモリ計算式（単位：キロバイト）
＝↑(600＋19×検索列数＋(7×検索列数＋Σ 列の定義長※)×PDBLKFの値)
　÷4096↑×4

注※　単位はバイトです。

(113)　PDBINARYBLKF={YES｜NO}

定義長が32,001バイト以上のBINARY型の選択式がある表を検索する場合，ブロック転送機能を適用するかどうかを指定します。ブロック転送機能については，「ブロック転送機能」を参照してください。

YES：

ブロック転送機能を適用します。

NO：

ブロック転送機能を適用しません。

この場合，クライアント環境定義PDBLKFに2以上，PDBLKBUFFSIZEに1以上を指定しても，1件ずつの転送となります。

(114)　PDBLKBUFFSIZE=通信バッファサイズ

　　　〜＜符号なし整数＞（単位：キロバイト）

・Type4 JDBCドライバ使用時：((0〜2000000))《0》

・上記以外：

　・PDBLKFを省略した場合：((0〜2000000))《10》

　・PDBLKFを指定した場合：((0〜2000000))《0》

　・0904互換モードの場合：((0〜2000000))《0》

ブロック転送機能で使用する，サーバ，クライアント間の通信バッファのサイズを指定します。

0を指定した場合，クライアント環境定義PDBLKFの値と1行の最大長から，HiRDBが通信バッファサイズ（単位：バイト）を算出します。

PDBLKBUFFSIZEで指定した値は，次のバッファサイズ，及び行数に影響します。

検索結果の転送で使用するサーバ，クライアント間の通信バッファサイズ

シングルサーバ又はフロントエンドサーバからクライアントに送信する，1回の通信での検索結果の行数

(115)　PDBINDRETRYCOUNT=bindシステムコールのリトライ回数

　　　〜＜整数＞((-1〜1000))《10》

UNIXドメインでのbindシステムコールでEADDRINUSEが返却された場合のリトライ回数を指定します。

クライアントサーバ間が同一ホストの場合，HiRDBクライアントではUNIXドメイン通信の準備として名前付きファイルをソケットに割り当てるため，bindシステムコールを発行します。

-1を指定した場合は，EADDRINUSEが返却されなくなるまでリトライします。0を指定した場合は，リトライをしないでUAPにエラーを返します。

《指定値の目安》

KFPA11723-Eメッセージのネットワーク障害（reason=NETWORK）で，クライアントエラーログファイルにKFPZ02444-Eメッセージが出力されている場合，内容がfunc=bind，errno=EADDRINUSEでcountとintervalが表示されているときは，この環境変数とPDBINDRETRYINTERVALの値を大きくしてください。

(116)　PDBINDRETRYINTERVAL=bindシステムコールのリトライ間隔

　　　〜＜符号なし整数＞((0〜1000))《0》（単位：ミリ秒）

UNIXドメインでのbindシステムコールでEADDRINUSEが返却された場合のリトライ間隔を指定します。0を指定した場合は，即時にリトライを行います。

(117)　PDDBACCS=アクセスするRDエリアの世代番号

　　　〜＜符号なし整数＞((0〜10))

インナレプリカ機能を使用している場合，インナレプリカグループ内でカレントRDエリアでないRDエリアをアクセスしたいときに，そのRDエリアの世代番号を指定します。0はオリジナルRDエリアとなります。省略した場合は，UAP環境定義PDDBACCSの値が仮定されます。

この環境変数は，HiRDBに定義されているすべてのインナレプリカグループに対して適用されます。この環境変数で指定した世代のレプリカRDエリアが定義されていない場合，該当するインナレプリカグループ内のカレントのRDエリアが処理対象となります。このため，レプリカRDエリアを使用するテスト環境を設定する場合，誤って本番用のRDエリアをアクセスしないように，アクセスするすべてのRDエリアについて，指定する世代のレプリカRDエリアが定義されているか確認する必要があります。

(118)　PDDBORGUAP={YES｜NO}

レプリカRDエリアでのオンライン業務中に，オリジナルRDエリアに対してUAPを実行する場合に指定します。

YES：

オンライン再編成閉塞のオリジナルRDエリアに対して，UAPを実行する場合に指定します。

NO：

オンライン再編成閉塞のオリジナルRDエリアに対して，UAPを実行しない場合に指定します。

(119)　PDSPACELVL＝｛0｜1｜3｝

データの格納，比較，及び検索時の，空白変換レベルを指定します。なお，定義系SQL実行時には，空白変換はされません。

０：

空白は変換しません。

１：

操作系SQLでの定数，埋込み変数，又は？パラメタのデータの空白を，次のように変換します。

文字列定数を各国文字列定数とみなした場合，半角空白2バイトを全角空白1文字に変換します。このとき，半角空白が1バイト単独で現れる場合，変換はしません。

混在文字列定数は，全角空白1文字を半角空白2バイトに変換します。

各国文字列型の列へのデータの格納時，及び各国文字列型の値式との比較時は，埋込み変数，又は？パラメタの半角空白2バイトを全角空白1文字に変換します。このとき，半角空白が1バイト単独で現れる場合，変換しません。

混在文字列型の列へのデータの格納時，及び混在文字列型の値式との比較時は，埋込み変数，又は？パラメタの全角空白1文字を半角空白2バイトに変換します。

３：

空白変換レベル1に加えて，各国文字列型の値式のデータを検索するときに，全角空白1文字を半角空白2バイトに変換します。

《システム定義との関連》

この環境変数を省略した場合，システム共通定義のpd_space_levelオペランドの指定値が仮定されます。

《注意事項》

空白変換レベルを変更した場合，変更の前後でUAPの結果が異なる場合があります。UAPの結果を同じにしたい場合には，空白変換レベルを変更しないでください。

空白変換レベル3を指定してソートをした場合，HiRDBはソートの結果に対して空白変換をするため，期待した結果を得られないことがあります。

クラスタキーの列へデータを格納する場合，空白変換によってユニークエラーとなることがあります。この場合，空白変換をしないでデータを格納するか，又は既存のデータベースの空白を統一（データベース再編成ユティリティで空白変換）してください。

各国文字列の空白変換は，先頭から２バイト単位で変換します。

空白変換レベル1，又は3を指定した場合，ハッシュ分割した表に対してUAPで表分割ハッシュ関数を使用して格納先RDエリアを求めるときは，表分割ハッシュ関数の引数に空白変換レベルを指定しないと，表分割ハッシュ関数の結果が不正になることがあります。表分割ハッシュ関数については，「表分割ハッシュ関数」を参照してください。

空白変換レベル1，又は3を指定した場合，キーレンジ分割した表に対してUAPでキーレンジ分割処理をしていて分割キーに各国文字列型，又は混在文字列型の列があるときは，その分割キー値を空白変換関数で変換しないとキーレンジ分割の結果が不正になることがあります。空白変換関数については，「空白変換関数」を参照してください。

(120)　PDCLTRDNODE=XDM/RD E2のデータベース識別子

　　　〜＜識別子＞

XDM/RD E2接続機能使用時に，接続するXDM/RD E2のデータベース識別子を指定します。データベース識別子とは，XDMのサブシステム定義で指定するRDノード名のことです。

(121)　PDTP1SERVICE=｛YES｜NO｝

XDM/RD E2接続機能使用時に，XDM/RD E2にOpenTP1のサービス名称を通知するかどうかを指定します。

Windows版のHiRDBクライアントライブラリでcltdll.dllを使用している場合，この環境変数は指定できません。ほかのHiRDBクライアントライブラリ（pdcltm32.dllなど）と再リンケージすれば指定できます。

YES：

OpenTP1のサービス名称をXDM/RD E2に通知します。

OpenTP1のサービス名称をXDM/RD E2に通知すると，XDM/RD E2の統計情報をサービス単位に分析できます。なお，XDM/RD E2のバージョンが09-01以降であることが前提です。

OpenTP1を使用しない場合，及びOpenTP1のサービスではない場合（SUPなど），YESを指定してもサービス名称は通知されません。

NO：

OpenTP1のサービス名称の通知はしません。

(122)　PDRDCLTCODE={SJIS｜UTF-8}

この環境変数は，Windows版クライアントの場合に有効になります。UNIX版クライアントの場合は指定しても無効になります。

XDM/RD E2接続機能使用時に，クライアントで使用する文字コード種別を指定します。

SJIS：

シフトJIS漢字コードを使用します。

UTF-8：

Unicode（UTF-8）を使用します。UTF-8を指定する場合，クライアント環境定義PDCLTCNVMODEにはNOUSEを指定するか，又は省略してください。

《UTF-8指定時の規則》

埋込み変数で扱う入出力データ，及び？パラメタで扱うデータにUnicode（UTF-8）を使用できます。

UAPで記述するSQL文には，ASCIIコードだけ指定できます。SQL文中でASCIIコード以外の文字（漢字，半角片仮名，外字など）を指定する場合，PREPARE文又はEXECUTE IMMEDIATE文を使用して，埋込み変数でSQL文を指定してください。

XDM/RD E2から返却される，SQL連絡領域に格納されるエラーメッセージ，列名記述領域に格納される列名，型名記述領域に格納されるデータ型名など，Unicode（UTF-8）となります。このため，これらの値にASCIIコード以外の文字が含まれている場合，シフトJIS漢字コードとして出力すると，正しく表示されないことがあります。

XDM/RD E2側で，文字コードをUnicode（UTF-8）からEBCDIKコード若しくはKEISコード，又はEBCDIKコード若しくはKEISコードからUnicode（UTF-8）に変換する場合，データの長さが変化することがあります。このため，埋込み変数の定義長などに注意してください。

(123)　PDCNSTRNTNAME={LEADING｜TRAILING}

参照制約，及び検査制約を定義する場合，制約名定義の位置を指定します。

LEADING：

制約名定義を，制約定義の前に指定します。

TRAILING：

制約名定義を，制約定義の後に指定します。

《システム定義との関係》

省略した場合は，システム定義のpd_constraint_nameオペランドの値が仮定されます。

(124)　PDTMPTBLRDAREA=RDエリア名［，RDエリア名…］

　　　〜<文字列>((最大3299バイト))

使用する一時表及び一時インデクスを格納する一時表用RDエリア名の候補を指定します。

一時表のデータ有効期間外にINSERT文を実行した場合，この環境変数に指定したRDエリアの中からデータ格納先の一時表用RDエリアを決定します。この環境変数を省略した場合，HiRDBが自動的にデータ格納先の一時表用RDエリアを決定します。一時表の格納先RDエリアの決定規則については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

《指定値の規則》

指定値には，最大100個のRDエリア名を指定できます。

RDエリア名は，重複して指定できません。

(125)　PDBESCONHOLD={YES｜NO}

この環境変数は，HiRDB/パラレルサーバの場合に指定できます。

バックエンドサーバ接続保持機能を使用するかどうかを指定します。バックエンドサーバ接続保持機能については，マニュアル「HiRDB システム運用ガイド」を参照してください。

YES：

バックエンドサーバ接続保持機能を使用します。

NO：

バックエンドサーバ接続保持機能を使用しません。

《システム定義との関係》

省略した場合は，システム定義のpd_bes_connection_holdオペランドの値が仮定されます。

(126)　PDBESCONHTI=バックエンドサーバ接続保持期間

　　　〜＜符号なし整数＞((0〜3600))（単位：秒）

バックエンドサーバ接続保持機能を使用する場合，バックエンドサーバ接続保持期間を指定します。

バックエンドサーバ接続保持機能を使用した場合，バックエンドサーバはトランザクション終了後，次のトランザクションが実行されるまでの時間を監視します。次のトランザクションが実行されるまでの時間がPDBESCONHTIの指定値の範囲内であれば，バックエンドサーバ接続保持機能を続行します。PDBESCONHTIの指定値を超えている場合は，トランザクション終了後にフロントエンドサーバとの接続を切り離します。

《留意事項》

0を指定した場合，時間監視はしません。SQLのDISCONNECT（XAライブラリ使用時はxa_close），クライアント環境定義PDCWAITTIMEのタイムオーバなどで，フロントエンドサーバとクライアントの接続が切り離された場合にだけ，フロントエンドサーバとバックエンドサーバの接続を切り離します。

PDBESCONHTIは，PDBESCONHOLDにYESを指定している場合に有効になります。

(127)　PDODBSTATCACHE={0｜1}

ODBC関数のSQLColumns()関数，SQLStatistics()関数で，1度発行して取得したカラム情報，又はインデクス情報をキャッシュするかどうかを指定します。

0：

キャッシュしません。

SQLColumns()関数，SQLStatistics()関数を呼び出すごとにサーバにアクセスして，カラム情報，又はインデクス情報を取得します。

1：

１度取得したカラム情報，及びインデクス情報をキャッシュします。

ただし，サーバと接続中のときはキャッシュのリフレッシュはしません。したがって，接続中にテーブル定義を変更した場合は，実際の定義と異なるカラム情報，又はインデクス情報を返すことになるため，1度サーバとの接続を切断する必要があります。

《利点》

SQLColumns()関数，SQLStatistics()関数が同一のパラメタで呼び出された場合は，キャッシュ上の検索結果をAPに返すことで，サーバとの通信回数を削減できます。

《留意事項》

このオプションの指定が効果的かどうかを判断するには，ODBCのトレースを取得し同一接続中に同じパラメタのSQLColumns()関数，SQLStatistics()関数が発行されているかどうかを調査する必要があります。

キャッシュできる行数を次に示します。

SQLColumns()：

約60000/(50＋表オーナ名長＋表名長＋列名長＋コメント長)行数文

SQLStatistics()：

約60000/(50＋表オーナ名長＋表名長＋インデクス名長＋列名長)行数文

(128)　PDODBESCAPE={0｜1}

カタログ系のODBC関数(SQLTables()，SQLColumns()など)の検索で，パターン文字に対してESCAPE文字('&')を指定するかどうかを指定します。

0：パターン文字に対してESCAPE文字を('&')を指定しません。

1：パターン文字に対してESCAPE文字を('&')を指定します。

《留意事項》

ディクショナリ表の列属性がCHAR型(データベース初期設定ユティリティでdictionary datatype mchar nouseを指定)で，かつ表名，列名にコード'0x26'を含む2バイト文字を使用している場合，このオプションには0を指定してください。1を指定してODBC経由でアクセスした場合，特定の表，列が認識されないことがあります。

表名などの識別子にアンダスコア(_)を使用している場合，このオプションには，1を指定してください。0を指定した場合，一部のODBC対応ソフトからアンダスコア(_)を使用した識別子にアクセスできないことがあります。

(129)　PDGDATAOPT=｛YES｜NO｝

ODBC関数のSQLGetData関数を使用してデータを取り出す場合，データ取得が完了した列に対して繰り返しデータを取得する場合に指定します。

通常，データ取得が完了した列に対して繰り返しデータを取得すると，戻り値としてSQL_NO_DATAが返ります。

YES：

SQLGetData関数でデータ取得が完了した列に対して，繰り返しデータを取得できます。

NO：

SQLGetData関数でデータ取得が完了した列に対して，繰り返しデータ取得をすると，戻り値としてSQL_NO_DATAが返ります。

《適用基準》

同じ列に対して複数回データ取得をしたい場合に指定します。例えば，複数回のデータ取得でSQL_SUCCESSを期待する上位APなどを使用する場合など，この環境変数を指定してください。

《留意事項》

Internet Banking Serverを使用している場合，HiRDBクライアント側のHiRDB.iniにPDGDATAOPT=YESを設定してください。設定しないと，Internet Banking Serverの顧客情報管理ユティリティ，及び取引履歴管理ユティリティを使用してHiRDBへログインした後，「顧客登録」「顧客情報の更新」「顧客情報の参照」などの機能選択ボタンを押した後，［戻る］ボタン以外の画面操作ができなくなることがあります。

(130)　PDODBLOCATOR=｛YES｜NO｝

DBアクセス部品を使用して，BLOB型，又はBINARY型の列を検索する場合に，位置付け子機能を使用してデータを分割取得するかどうかを指定します。DBアクセス部品とは，ODBCドライバ，OLE DBプロバイダ，及びHiRDBデータプロバイダ for .NET Frameworkを示します。

YES：

DBアクセス部品を使用して，BLOB型，又はBINARY型の列を検索する場合に，位置付け子機能を使用してデータを分割取得します。

NO：

DBアクセス部品を使用して，BLOB型，又はBINARY型の列を検索する場合に，位置付け子機能を使用しません。

《適用基準》

NOを指定した場合（省略時仮定値の場合），DBアクセス部品側が列の定義長分のデータ受信領域を確保します。また，HiRDBクライアント側でも列の定義長分のデータ受信領域を必要とします。

列の定義長が大きいと，実行時にメモリ不足になったりすることがあるため，メモリ不足になることを回避する場合はYESを指定してください。なお，YESを指定すると，HiRDBサーバとの通信回数が分割取得回数分増えます。

(131)　PDODBSPLITSIZE=分割取得サイズ

　　　〜＜符号なし整数＞((4〜2097152))《100》（単位：キロバイト）

PDODBLOCATOR=YESを指定している場合に，分割取得のサイズを指定します。

《指定値の目安》

実データ長の分布を考慮して，分割取得回数が少なくなり，かつメモリ不足が発生しない値を指定してください。

(132)　PDODBCWRNSKIP=｛YES｜NO｝

ODBC，OLE DB接続時のワーニングを回避するかどうかを指定します。なお，ODBC，OLE DB接続以外の場合，この環境変数を指定しても無効になります。

YES：

ODBCドライバ使用時にSQLFetch()の延長でSQLWARNが設定された場合でも，ODBCドライバでSQLFetch()の戻り値としてSQL_SUCCESSを返却します。

OLE DBプロバイダ使用時にSQLWARNが設定された場合でも，エラーオブジェクトの生成をスキップします。

NO：

ODBCドライバ使用時にSQLFetch()の延長でSQLWARNが設定された場合，ODBCドライバでSQLFetch()の戻り値としてSQL_SUCCESS_WITH_INFOを返却します。

OLE DBプロバイダ使用時にSQLWARNが設定された場合，エラーオブジェクトを生成します。

《適用基準》

ODBCドライバでは，検索処理でHiRDBのSQL連絡領域のSQLWARNが設定された場合，SQLFetch()の戻り値としてSQL_SUCCESS_WITH_INFOを返却します。しかし，ODBCドライバを呼び出す上位アプリケーション※によっては，SQL_SUCCESS_WITH_INFOで検索処理を打ち切るものがあります。この環境変数にYESを指定すると，検索処理でSQL連絡領域のSQLWARNが設定された場合でも，SQLFetch()の戻り値をSQL_SUCCESSとすることで，検索処理が続行できるようになります。

OLE DBプロバイダでは，SQL実行時にHiRDBのSQL連絡領域のSQLWARNが設定された場合，エラーオブジェクトを生成します。しかし，OLE DBプロバイダを呼び出す上位アプリケーションによっては，エラーオブジェクトの生成に伴い例外が発生するときがあります。この機能を適用すれば，SQL実行時に警告が発生した場合でもエラーオブジェクトの生成をスキップすることで，上位アプリケーションによる例外の発生を回避できるようになります。

注※

例えば，ADO.NETを使用してODBC経由でHiRDBに接続している場合，SQL_SUCCESS_WITH_INFOで検索処理が打ち切られることがあります。

(133)　PDJETCOMPATIBLE=｛YES｜NO｝

ODBC3.5ドライバを，ODBC3.5の規格ではなくMicrosoft Access互換モードで動作させるかどうかを指定します。

YES：

ODBC3.5ドライバは，Microsoft Access互換モードで動作します。

NO：

ODBC3.5ドライバは，ODBC3.5の規格どおりに動作します。

《適用基準》

Microsoft Accessを使用してHiRDBにアクセスする場合に指定します。この環境変数を指定しないと，検索結果が"#Delete"と表示されたり，挿入したデータが不正に変換されることがあります。なお，Microsoft社が提供するほかの製品やインタフェースでこのような現象が発生した場合，この環境変数を指定することで回避できることがあります。

(134)　PDODBGINFOSUPPRESS=｛YES｜NO｝

この環境変数は，HiRDB ODBC3.5ドライバがODBC関数のSQLGetInfoW()関数でODBC規格に準拠した情報を返却するかどうかを指定します。ODBC規格に準拠した情報を返却するHiRDB ODBC3.5ドライバのバージョンを次に示します。

07-02-65以降

07-03-47以降

08-01-45以降

08-02-41以降

08-03-26以降

08-04-43以降

08-05-30以降

09-00以降

上記より前のバージョンのHiRDB ODBC3.5ドライバを，上記のバージョンにバージョンアップした場合，ADO及びADO.NETのインターフェースからODBC3.5ドライバを経由したSQLの実行でエラーが発生するおそれがありますが，この環境変数にYESを指定することでエラーを回避できることがあります。発生するエラーの詳細については，「ADO及びADO.NETからODBCを経由してHiRDBサーバにアクセスする場合の留意事項」を参照してください。

通常は，この環境変数を省略するか，又はNOを指定してください。

YES：

HiRDB ODBC3.5ドライバがSQLGetInfoW()関数で返却する情報を制限します。SQLGetInfoW()関数の第3引数InfoValuePtr にNULLが指定された場合，第5引数StringLengthPtrがポイントする領域に0を設定します。

NO：

HiRDB ODBC3.5ドライバがSQLGetInfoW()関数で返却する情報を制限しないで，ODBC規格に準拠した情報を返却します。SQLGetInfoW()関数の第3引数InfoValuePtrにNULLが指定された場合，第5引数StringLengthPtrがポイントする領域に取得対象となる情報の長さを設定します。

(135)　PDODBSTANDARDARGSIZE=｛YES｜NO｝

64ビットモードで動作するODBC3.5ドライバについて，一部のODBC関数の引数に指定されたポインタが指すバッファを4バイト整数として扱うか，8バイト整数として扱うかを指定します。

YES：

ODBC3.5ドライバの一部のODBC関数について，引数に指定されたポインタが指すバッファを8バイト整数として扱います（ODBC規格に準拠）。

NO：

ODBC3.5ドライバの一部のODBC関数について，引数に指定されたポインタが指すバッファを4バイト整数として扱います（HiRDB独自）。

.NET Framework 4の.NET Framework Data Provider for ODBCから64ビットモードで動作するODBC3.5ドライバを経由してHiRDBにアクセスする場合，この環境変数にYESを指定してください。

この環境変数の指定値と，8バイト整数として扱うODBC関数の引数の関係を次の表に示します。「パラメタの名称」列のパラメタに「パラメタの属性」列のパラメタのどれかを指定した場合，「8バイト整数として扱う引数の名称」列の引数に指定したポインタが指すバッファが8バイト整数として扱われます。

表6‒46　環境変数PDODBSTANDARDARGSIZEの指定値と8バイト整数として扱うODBC関数の引数の関係

ODBC関数名

8バイト整数として扱う引数の名称

パラメタの名称

パラメタの属性

環境変数の指定値がPDODBSTANDARDARGSIZE=NO又は指定を省略した場合

環境変数の指定値が

PDODBSTANDARDARGSIZE=YESの場合

SQLColAttribute

NumericAttribute

FieldIdentifier

SQL_DESC_DISPLAY_SIZE

SQL_DESC_LENGTH

SQL_DESC_OCTET_LENGTH

SQL_DESC_DISPLAY_SIZE

SQL_DESC_LENGTH

SQL_DESC_OCTET_LENGTH

SQL_DESC_AUTO_UNIQUE_VALUE

SQL_DESC_CASE_SENSITIVE

SQL_DESC_CONCISE_TYPE

SQL_DESC_FIXED_PREC_SCALE

SQL_DESC_NULLABLE

SQL_DESC_NUM_PREC_RADIX

SQL_DESC_PRECISION

SQL_DESC_SCALE

SQL_DESC_SEARCHABLE

SQL_DESC_TYPE

SQL_DESC_UNNAMED

SQL_DESC_UNSIGNED

SQL_DESC_UPDATABLE

SQLGetDescField

ValuePtr

FieldIdentifier

SQL_DESC_ARRAY_SIZE

SQL_DESC_ARRAY_STATUS_PTR

SQL_DESC_BIND_OFFSET_PTR

SQL_DESC_DATA_PTR

SQL_DESC_INDICATOR_PTR

SQL_DESC_OCTET_LENGTH_PTR

SQL_DESC_ROWS_PROCESSED_PTR

SQL_DESC_ARRAY_SIZE

SQL_DESC_ARRAY_STATUS_PTR

SQL_DESC_BIND_OFFSET_PTR

SQL_DESC_DATA_PTR

SQL_DESC_DISPLAY_SIZE

SQL_DESC_INDICATOR_PTR

SQL_DESC_LENGTH

SQL_DESC_OCTET_LENGTH

SQL_DESC_OCTET_LENGTH_PTR

SQL_DESC_ROWS_PROCESSED_PTR

SQLGetDiagField

DiagInfoPtr

DiagIdentifier

SQL_DIAG_CURSOR_ROW_COUNT

SQL_DIAG_ROW_COUNT

SQL_DIAG_ROW_NUMBER

SQL_DIAG_CURSOR_ROW_COUNT

SQL_DIAG_ROW_COUNT

SQL_DIAG_ROW_NUMBER

SQLGetInfo

InfoValuePtr

InfoType

SQL_DRIVER_HENV

SQL_DRIVER_HDBC

SQL_DRIVER_HLIB

SQL_DRIVER_HSTMT

SQL_DRIVER_HDESC

SQL_DRIVER_HENV

SQL_DRIVER_HDBC

SQL_DRIVER_HLIB

SQL_DRIVER_HSTMT

SQL_DRIVER_HDESC

SQLGetStmtAttr

ValuePtr

Attribute

SQL_ATTR_APP_PARAM_DESC

SQL_ATTR_APP_ROW_DESC

SQL_ATTR_IMP_PARAM_DESC

SQL_ATTR_IMP_ROW_DESC

SQL_ATTR_MAX_LENGTH

SQL_ATTR_MAX_ROWS

SQL_ATTR_ROW_ARRAY_SIZE

SQL_ATTR_ROWS_FETCHED_PTR

SQL_ATTR_PARAM_STATUS_PTR

SQL_ATTR_PARAMS_PROCESSED_PTR

SQL_ATTR_PARAMSET_SIZE

SQL_ATTR_RETRIEVE_DATA

SQL_ATTR_ROW_OPERATION_PTR

SQL_ATTR_ROW_STATUS_PTR

SQL_ATTR_APP_PARAM_DESC

SQL_ATTR_APP_ROW_DESC

SQL_ATTR_IMP_PARAM_DESC

SQL_ATTR_IMP_ROW_DESC

SQL_ATTR_MAX_LENGTH

SQL_ATTR_MAX_ROWS

SQL_ATTR_ROW_ARRAY_SIZE

SQL_ATTR_ROWS_FETCHED_PTR

SQL_ATTR_ASYNC_ENABLE

SQL_ATTR_CONCURRENCY

SQL_ATTR_CURSOR_SCROLLABLE

SQL_ATTR_CURSOR_SENSITIVITY

SQL_ATTR_CURSOR_TYPE

SQL_ATTR_ENABLE_AUTO_IPD

SQL_ATTR_METADATA_ID

SQL_ATTR_NOSCAN

SQL_ATTR_PARAM_OPERATION_PTR

SQL_ATTR_PARAM_STATUS_PTR

SQL_ATTR_PARAMS_PROCESSED_PTR

SQL_ATTR_PARAMSET_SIZE

SQL_ATTR_RETRIEVE_DATA

SQL_ATTR_ROW_OPERATION_PTR

SQL_ATTR_ROW_STATUS_PTR

(136)　PDODBSTANDARDSQLSTATE=｛YES｜NO｝

HiRDBサーバでのSQLエラー発生時，ODBC3.5ドライバからODBC規格に準拠したSQLSTATEを返却するかどうかを指定します。

YES：

ODBC3.5ドライバからODBC規格に準拠したSQLSTATEが返却されます。

NO：

ODBC3.5ドライバからHiRDB独自のSQLSTATEが返却されます。

この環境変数にYESを指定すると，ODBC3.5ドライバは，HiRDBサーバから返却されたSQLSTATEについて，対応するODBC規格のSQLSTATEにマッピングします。このため，この機能を使用する場合，HiRDBサーバでSQLSTATEの値の詳細を出力する設定が必要です。

SQLSTATEの値の詳細を出力するには，環境変数PDSTANDARDSQLSTATEにYESを指定するか，又はシステム共通定義のpd_standard_sqlstateの値をYにしてください。

この環境変数の指定値，システム共通定義の値，及びODBC3.5ドライバが返却するSQLSTATEの関係を次の表に示します。

表6‒47　環境変数PDSTANDARDSQLSTATE，システム共通定義の値，及びODBC3.5ドライバが返却するSQLSTATEの関係

環境変数

PDSTANDARDSQLSTATEの指定値

システム共通定義pd_standard_sqlstateの値

ODBC3.5ドライバが返却するSQLSTATE

環境変数の指定値が

PDODBSTANDARDSQLSTATE=YESの場合

環境変数の指定値が

PDODBSTANDARDSQLSTATE=NO又は指定を省略した場合

YES

−

ODBC準拠

HiRDB独自

NO

−

HiRDB独自

省略

Y

ODBC準拠

N

HiRDB独自

(凡例)

−：pd_standard_sqlstateの値は返却されるSQLSTATEに影響しません。

HiRDB独自：HiRDB独自のSQLSTATEが返却されます（ODBC規格に非準拠）。

ODBC準拠：ODBC規格に準拠したSQLSTATEが返却されます。

ODBC3.5ドライバを呼び出す他製品を利用している場合，この環境変数にYESを指定してください。SQLSTATEについては，「ODBC3.5ドライバが返却するSQLSTATE」を参照してください。

(137)　PDODBSTANDARDDESCCOL=｛YES｜NO｝

ODBC3.5ドライバのSQLDescribeCol関数の検索対象列が数データ型の場合，返却する列のサイズとして，ODBC規格に準拠した値を返却するかどうかを指定します。

YES：

SQLDescribeCol関数の検索対象列が数データ型の場合，ColumnSizePtrに指定されたポインタが指すバッファに対して，ODBC規格に準拠した列のサイズ（数データの最大けた数）を返却します。

NO：

SQLDescribeCol関数の検索対象列が数データ型の場合，ColumnSizePtrに指定されたポインタが指すバッファに対して，HiRDB独自の列のサイズ（データ型がSQL_DECIMALの場合は数データの精度，SQL_DECIMAL以外の場合は数データのバイト数）を返却します。

検索した数データについて，ODBC3.5ドライバを呼び出す上位アプリケーションが文字列形式で扱う場合，この環境変数にYESを指定してください。通常の運用では，この環境変数にはNOを指定するか，指定を省略してください。

この環境変数の指定値と，SQLDescribeCol関数で返却する数データ型の列のサイズの関係を次の表に示します。

表6‒48　環境変数PDODBSTANDARDDESCCOLの指定値とSQLDescribeCol関数で返却する数データ型の列のサイズの関係

ODBCのデータ型

HiRDBのデータ型

SQLDescribeCol関数で返却する列のサイズ

環境変数の指定値が

PDODBSTANDARDDESCCOL=NO又は指定を省略した場合

環境変数の指定値が

PDODBSTANDARDDESCCOL=YESの場合

SQL_DECIMAL

DECIMAL，NUMERIC

精度（全体のけた数）

SQL_SMALLINT

SMALLINT

2

5

SQL_INTEGER

INTEGER

4

10

SQL_REAL

SMALLFLT，REAL

4

7

SQL_FLOAT

FLOAT，DOUBLE PRECISION

8

15

SQL_DOUBLE

FLOAT，DOUBLE PRECISION

8

15

(138)　PDODBSTANDARDGTYPEINFO=｛YES｜NO｝

ODBC3.5ドライバのSQLGetTypeInfo関数で，ODBC規格に準拠した値を返却するかどうかを指定します。

DataStageを使用してHiRDB ODBC3.5ドライバを使用する場合は，このクライアント環境定義にYESを指定してください。

YES：

SQLGetTypeInfo関数の第2引数に指定されたデータ型に対して，ODBC規格に準拠した結果セットを返却します。

NO：

SQLGetTypeInfo関数の第2引数に指定されたデータ型に対して，HiRDB独自の結果セットを返却します。

この環境定義の指定値と，SQLGetTypeInfo関数で返却する戻り値，結果セットの関係を次の表に示します。

表6‒49　環境変数PDODBSTANDARDGTYPEINFOの指定値とSQLGetTypeInfo関数で返却する戻り値の関係

第2引数への指定値

SQLGetTypeInfo関数で返却する戻り値

環境変数の指定値がPDODBSTANDARDGTYPEINFO=NOの場合

環境変数の指定値がPDODBSTANDARDGTYPEINFO =YESの場合

SQL_GUID

SQL_INTERVAL_DAY

SQL_INTERVAL_DAY_TO_HOUR

SQL_INTERVAL_DAY_TO_MINUTE

SQL_INTERVAL_DAY_TO_SECOND

SQL_INTERVAL_HOUR

SQL_INTERVAL_HOUR_TO_MINUTE

SQL_INTERVAL_HOUR_TO_SECOND

SQL_INTERVAL_MINUTE

SQL_INTERVAL_MINUTE_TO_SECOND

SQL_INTERVAL_MONTH

SQL_INTERVAL_SECOND

SQL_INTERVAL_YEAR

SQL_INTERVAL_YEAR_TO_MONTH

SQL_ERROR

SQL_SUCCESS

表6‒50　環境変数PDODBSTANDARDGTYPEINFOの指定値とSQLGetTypeInfo関数で返却する結果セットの関係

第2引数への指定値

SQLGetTypeInfo関数で返却する結果セット

結果セットの差異内容

環境変数の指定値がPDODBSTANDARDGTYPEINFO=NOの場合

環境変数の指定値がPDODBSTANDARDGTYPEINFO =YESの場合

SQL_ALL_TYPE

DATA_TYPE列に次のデータ型を含むかどうか

SQL_DOUBLE

SQL_NUMERIC

SQL_LONGVARCHAR

SQL_INTERVAL_HOUR_TO_SECOND

SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR

含まない

含む

TYPE_NAME列がBINARYのDATE_TYPE列とSQL_DATETIME_SUB列の値

SQL_BINARY

SQL_LONGVARBINARY

TYPE_NAME列がDATEのDATA_TYPE列の値

SQL_DATE

SQL_TYPE_DATE

TYPE_NAME列がDATEのSQL_DATETIME_SUB列の値

SQL_TYPE_DATE

SQL_CODE_DATE

TYPE_NAME列がTIMEのDATA_TYPE列の値

SQL_TIME

SQL_TYPE_TIME

TYPE_NAME列がTIMEのSQL_DATETIME_SUB列の値

SQL_TYPE_TIME

SQL_CODE_TIME

TYPE_NAME列がTIMESTAMPのDATA_TYPE列の値

SQL_TIMESTAMP

SQL_TYPE_TIMESTAMP

TYPE_NAME列がTIMESTAMPのSQL_DATETIME_SUB列の値

SQL_TYPE_TIMESTAMP

SQL_CODE_TIMESTAMP

SQL_DOUBLE

SQL_NUMERIC

SQL_LONGVARCHAR

SQL_INTERVAL_HOUR_TO_SECOND

SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR

結果セットの返却

返却する

返却しない

SQL_BINARY

結果セットの返却

返却する

返却しない

SQL_LONGVARBINARY

DATA_TYPE列に次のデータ型を含むかどうか

BLOB

BINARY

BLOBだけ含む

含む

SQL_DATE

SQL_TYPE_DATE

DATA_TYPE列の値

SQL_DATE

SQL_TYPE_DATE

SQL_DATETIME_SUB列の値

SQL_TYPE_DATE

SQL_CODE_DATE

SQL_TIME

SQL_TYPE_TIME

DATA_TYPE列の値

SQL_TIME

SQL_TYPE_TIME

SQL_DATETIME_SUB列の値

SQL_TYPE_TIME

SQL_CODE_TIME

SQL_TIMESTAMP

SQL_TYPE_TIMESTAMP

DATA_TYPE列の値

SQL_TIMESTAMP

SQL_TYPE_TIMESTAMP

SQL_DATETIME_SUB列の値

SQL_TYPE_TIMESTAMP

SQL_CODE_TIMESTAMP

(139)　PDPLGIXMK=｛YES｜NO｝

プラグインインデクスの遅延一括作成をするかどうかを指定します。プラグインインデクスの遅延一括作成については，マニュアル「HiRDB システム運用ガイド」を参照してください。

YES：

プラグインインデクスの遅延一括作成をします。

NO：

プラグインインデクスの遅延一括作成をしません。

(140)　PDPLUGINNSUB

詳細については，各プラグインマニュアルを参照してください。

(141)　PDPLGPFSZ=遅延一括作成用のインデクス情報ファイルの初期容量

　　　〜〈符号なし整数〉((1〜1048574000))《8192》（単位：キロバイト）

プラグインインデクスの遅延一括作成用のインデクス情報ファイルの初期容量を指定します。なお，指定値は4の倍数に切り上げられます。

インデクス情報ファイルをHiRDBファイルシステム領域に作成する場合に，この指定が有効になります。

この環境変数を指定する場合，同時にPDPLGIXMK=YESも指定してください。

(142)　PDPLGPFSZEXP＝遅延一括作成用のインデクス情報ファイルの増分値

　　　〜〈符号なし整数〉((1〜1048573000))《8192》（単位：キロバイト）

プラグインインデクスの遅延一括作成用のインデクス情報ファイルの増分値を指定します。インデクス情報ファイルが満杯になった場合，ここで指定した値で増分します。なお，指定値は4の倍数に切り上げられます。

インデクス情報ファイルをHiRDBファイルシステム領域に作成する場合に，この指定が有効になります。

この環境変数を指定する場合，同時にPDPLGIXMK=YESも指定してください。

(143)　PDHSICOPTIONS＝集積モード［，集積モード］…

　　　〜〈識別子〉

HSICを使用する運用の場合に，HSICで集積する情報を指定します。

集積モードの指定値を次に示します。

ROOTAP：

この指定値は，Type4 JDBCドライバを使用しているときだけ有効になります。

クライアントからサーバへの電文にルートアプリケーション情報を常に付加する場合に指定します。指定がない場合は，製品付加情報に変更が発生したときだけ電文に付加します。

UAPREP：

PDSQLTRACEが指定されていなくても，PDUAPREPLVLにutが指定されていた場合，UAP統計レポート情報をサーバからクライアントへの電文に付加します。

PDUAPREPLVL，PDSQLTRACEの指定値とUAPREPとの対応を次の表に示します。

表6‒51　PDUAPREPLVL，PDSQLTRACEの指定値とUAPREPとの対応

PDUAPREPLVL=ut

PDSQLTRACE

UAPREP

指定なし

指定あり

指定あり

指定あり

○

○

指定なし

×

指定なし

指定あり

×

指定なし

（凡例）

○：電文にUAP統計レポートを付加します。

×：電文にUAP統計レポートを付加しません。

ALL：

上記のすべての指定値を適用したい場合に指定します。

PDHSICOPTIONSの指定値とHSICで集積できる情報を次の表に示します。

表6‒52　PDHSICOPTIONSの指定値とHSICで集積できる情報

PDHSICOPTIONSの

指定値

クライアントライブラリ

Type4 JDBCドライバ

未指定

なし

なし

UAPREP

UAP統計レポート情報

UAP統計レポート情報

ROOTAP

指定できません

ルートアプリケーション情報

ALL

UAP統計レポート情報

UAP統計レポート情報

および

ルートアプリケーション情報

《注意事項》

HSICを使用しない場合は，このクライアント環境定義を指定しないでください。

指定値については，HSICのマニュアルを参照してください。

UAPREP又はALLを指定している場合，pdclttrcコマンドを使用してSQLトレースを取得しないでください。UAPREPの情報が取得できなくなることがあります。pdclttrcコマンドの詳細は，マニュアル「HiRDB コマンドリファレンス」の「pdclttrc（SQLトレースの動的取得）」を参照してください。

UAPREP又はALLを指定している場合，pdtrcmgrコマンドを使用してSQLトレースを取得するときは，-kオプションにutを指定してください。pdtrcmgrコマンドの詳細は「SQLトレース動的取得機能」を参照してください。

(144)　PDJDBFILEDIR=Exceptionトレースログのファイル出力先

　　　〜<パス名>((最大256バイト))《PDCLTPATHの指定値》

Type4 JDBCドライバでのExceptionトレースログ及び不正電文トレースのファイル出力先を指定します。ファイル出力先には，ディレクトリの絶対パスを256バイトまでで指定してください。この環境変数は，Type4 JDBCドライバを使用する場合にだけ指定できます。

Exceptionトレースログの詳細は，「Exceptionトレースログ」を参照してください。不正電文トレースの詳細は，「不正電文トレース」を参照してください。そのほかの詳細は，「システムプロパティの設定」のシステムプロパティ「HiRDB_for_Java_FileDIR」を参照してください。

(145)　PDJDBFILEOUTNUM=Exceptionトレースログのファイルへの出力数

　　　〜<符号なし整数>((1〜50))《5》

Type4 JDBCドライバでのExceptionトレースログのファイルへの出力数を指定します。この環境変数は，Type4 JDBCドライバを使用する場合にだけ指定できます。

クライアント環境定義PDJDBFILESIZE，又はシステムプロパティHiRDB_for_Java_FileSizeを指定している場合，このクライアント環境定義の値は無視されます。

Exceptionトレースログの詳細は，「Exceptionトレースログ」を参照してください。そのほかの詳細は，「システムプロパティの設定」のシステムプロパティ「HiRDB_for_Java_FileOutNUM」を参照してください。

(146)　PDJDBONMEMNUM=Exceptionトレースログのメモリ内取得情報数

　　　〜<符号なし整数>((500〜10000))《1000》

Type4 JDBCドライバでのExceptionトレースログのメモリ内取得情報数を指定します。この環境変数は，Type4 JDBCドライバを使用する場合にだけ指定できます。

Exceptionトレースログの詳細は，「Exceptionトレースログ」を参照してください。そのほかの詳細は，「システムプロパティの設定」のシステムプロパティ「HiRDB_for_Java_OnMemNUM」を参照してください。

(147)　PDJDBTRACELEVEL=Exceptionトレースログのトレース取得レベル

　　　〜<符号なし整数>((0〜5))《1》

Type4 JDBCドライバでのExceptionトレースログのトレース取得レベルを指定します。0を指定した場合，Exceptionトレースログを取得しません。この環境変数は，Type4 JDBCドライバを使用する場合にだけ指定できます。

Exceptionトレースログの詳細は，「Exceptionトレースログ」を参照してください。そのほかの詳細は，「システムプロパティの設定」のシステムプロパティ「HiRDB_for_Java_TraceLevel」を参照してください。

(148)　PDJDBFILESIZE=Exceptionトレースログの最大ファイルサイズ

　　　〜<符号なし整数>((4096〜2000000000))

Type4 JDBCドライバでのExceptionトレースログの最大ファイルサイズを指定します。この環境変数は，Type4 JDBCドライバを使用する場合にだけ指定できます。

Exceptionトレースログの詳細は，「Exceptionトレースログ」を参照してください。そのほかの詳細は，「システムプロパティの設定」のシステムプロパティ「HiRDB_for_Java_FileSize」を参照してください。

(149)　PDDNDPCOMPATIBLE＝｛NO｜ALL｝

HiRDBデータプロバイダ for .NET Frameworkでは，HiRDB独自の仕様から.NET Frameworkの規格に準拠した仕様へ変更したメソッドがあります。

このクライアント環境定義には，ADO.NET2.0に対応したHiRDBデータプロバイダ for .NET Frameworkのメソッドが，.NET Frameworkの規格に準拠した仕様とするか，又は以前のHiRDB独自の仕様とするかを指定します。

NO：

メソッドの仕様が.NET Frameworkの規格に準拠した仕様となります。

ALL：

メソッドの仕様が以前のHiRDB独自の仕様となります。指定値ごとのHiRDBデータプロバイダ for .NET Frameworkのメソッドの仕様を次の表に示します。

表6‒53　PDDNDPCOMPATIBLE指定値ごとのメソッドの仕様

対象クラス

対象メソッド

メソッドの仕様

環境変数の指定値が

PDDNDPCOMPATIBLE =NOの場合

環境変数の指定値が

PDDNDPCOMPATIBLE =ALLの場合

HiRDBCommand

ExecuteScalar

結果セットの最初の行の最初の列がナル値の場合，UAPにSystem.DBNull.Valueを返却します。

結果セットの最初の行の最初の列がナル値の場合，次の値をUAPに返却します。

Microsoft Visual C#の場合：null

Microsoft Visual Basicの場合：Nothing

6.6.5　HiRDBサーバと接続するための環境変数と接続形態との関係

HiRDBサーバと接続するための環境変数と接続形態との関係を次の表に示します。

表6‒54　環境変数と接続形態との関係

環境変数

HiRDB/シングルサーバ

HiRDB/パラレルサーバ

シングルフロント

エンドサーバ

マルチフロントエンドサーバ

通常接続

高速接続

通常接続

高速接続

通常接続

フロントエンド

サーバ指定接続

FESホストダイレクト接続

高速接続

PDHOST

○

○

○

○

○

○

○

PDFESHOST

−

−

−

○※

−

○

○※

PDNAMEPORT

○

○

○

○

○

○

○

PDSERVICEPORT

−

○

−

○※

−

−

○※

PDSERVICEGRP

−

○

−

○※

−

○

○※

PDFESGRP

−

−

−

○※

−

−

○※

PDSRVTYPE

−

△

−

△

−

−

△

（凡例）

○：必ず指定します。

△：HiRDBサーバがLinux版又はWindows版の場合，指定が必要です。

−：指定する必要はありません。

注1

高速接続，FESホストダイレクト接続，通常接続の順に，必ず指定する環境変数がすべて指定されている接続形態が選択されます。このとき，不要な環境変数は使用されません。

注2

推奨する接続形態を次に示します。

項番

運用形態

推奨する接続形態

備考

1

下記の項番2，3以外の場合

高速接続

−

2

マルチフロントエンドサーバを適用した構成で，フロントエンドサーバを効率良く利用したい場合

通常接続

通常接続，及びFESホストダイレクト接続の場合，UAPがシステムマネジャプロセスやノードマネジャプロセスに対して接続を行います。このため，多数のUAPが同時に接続をした際など，システムマネジャプロセスやノードマネジャプロセスに負荷が掛かり，システム全体の性能に影響を与えるおそれがあります。

3

FESホストダイレクト接続を適用した構成の場合

高速接続

通常接続から高速接続に変更する場合，表「環境変数と接続形態との関係」で示す環境変数のほかに，スケジューラのポート番号を設定する必要があります。

スケジューラのポート番号の設定については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

注3

HiRDBサーバへの接続時間，及び接続時に使用するTCPポート数の関係を次に示します。

　通常接続＞FESホストダイレクト接続＞高速接続

注※

高速接続で接続する場合，次の二つの指定方法があります。

PDFESHOST，PDSERVICEGRP，及びPDSERVICEPORTで指定する

PDFESGRPで指定する

PDFESHOST又はPDFESGRPにホスト名を一つだけ指定する場合は，上記のどちらで指定しても同じ扱いになります。ホスト名を複数指定する場合は，次の表の条件によって指定方法が変わります。

項番

ホスト名を複数指定する場合の条件

指定する環境変数

系切り替え機能

FESの数

1

FESのあるユニットで系切り替え機能を使用していて，かつクライアントからの接続で使用するIPアドレスが現用系と予備系で異なる場合

一つ

PDFESHOST，PDSERVICEGRP，及びPDSERVICEPORT

2

複数

PDFESHOST，PDSERVICEGRP，及びPDSERVICEPORT

3

上記以外の場合

複数

PDFESGRP

項番2はFESの数が複数（マルチフロントエンドサーバ）ですが，PDFESHOST，PDSERVICEGRP，及びPDSERVICEPORTを指定し，接続先のFESは一つだけにしてください。PDFESGRPで複数のFESを指定すると，実行系で接続ユーザ数オーバー（KFPA11932-E）となったときに次の問題が発生します。

むだに待機系にも接続を試みる。

すべてのFESグループで接続エラーとなった場合に，最後に接続を試みたFESグループが待機系のときは，待機系で発生したエラー情報だけUAPに返却されるため，実行系で接続ユーザ数オーバーになったことが検知できない。

6.7　環境変数のグループ登録

クライアントの環境変数を，グループとして登録しておくことができます。環境変数を登録しておくと，接続ごとに環境変数を変更できるようになります。したがって，接続するたびに環境変数を変えるような場合に便利です。

登録先はUNIX環境の場合は通常ファイル，Windows環境の場合はレジストリ又はファイルです。登録した環境変数は，HiRDBサーバ接続時に情報を取得します。

なお，OLTP下のX/Openに従ったAPIを使用したUAPをクライアントとする場合で，かつオープン文字列を指定する場合，「OLTP下のX/Openに従ったAPIを使用したUAPをクライアントとする場合の指定方法」に従って指定した環境変数より，オープン文字列に指定した環境変数グループの環境変数が優先されます。オープン文字列については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

6.7.1　UNIX環境の場合

環境変数を通常ファイルに登録する場合は，次に示す規則に従ってください。

１行１環境変数で設定してください。

「クライアント環境変数＝指定値」の形式で指定してください。

コメントは，スラント及びアスタリスク（/*）とアスタリスク及びスラント（*/）で囲んでください。コメントの入れ子はできません。また，コメント中で改行をしないでください。

同一の環境変数を複数記述した場合は，最後に記述してある環境変数が有効になります。

指定値に空白を含む場合は，引用符（"）で指定値を囲んでください。囲まれていない場合は，空白が指定値から削除されます。

1行目に[HIRDB]又は[HiRDB]を記述できます。

odbc.iniのINIFLNAMEにクライアント環境定義を指定する場合は，1行目に[HIRDB]又は[HiRDB]を必ず記述してください。記述されていない場合，クライアント環境定義が読み込まれません。

指定値に引用符（ " ）で囲む値を含む場合の注意事項については，「クライアント環境定義の一覧」の「注※5」を参照してください。

通常ファイル（/HiRDB_P/Client/HiRDB.ini）への設定例を次に示します。

（例）

[HIRDB]
PDCLTPATH=トレースファイル格納ディレクトリ
PDHOST=システムマネジャのホスト名
PDUSER="認可識別子"/"パスワード"
PDNAMEPORT=システムマネジャプロセスのポート番号
PDCLTAPNAME=実行するUAPの識別名称

注意事項

この方法では，Type4 JDBCドライバを用いたUAPを除いて，PDJDBで始まるクライアント環境定義は有効になりません。

6.7.2　Windows環境の場合（レジストリ登録）

環境変数をレジストリに登録する場合，HiRDBクライアント環境変数登録ツールを使用します。

HiRDBクライアント環境変数登録ツールを使用する場合，xxxx¥UTL¥pdcltadm.exeを実行します（xxxxはHiRDBサーバの場合は%PDDIR%¥client，HiRDBクライアントの場合はHiRDBクライアントのインストールディレクトリ）。

HiRDBクライアント環境変数登録ツールを実行するユーザの権限によって操作の可否が異なります。ユーザ権限と操作の可否を次の表に示します。

表6‒55　HiRDBクライアント環境変数登録ツールを実行するユーザの権限と操作の可否

項番

操作の対象

操作

HiRDBクライアント環境変数登録ツールを実行するユーザの権限

Administrators権限

PowerUsers権限

Users権限

1

ユーザグループ

更新

○

○

○

2

参照

○

○

○

3

システムグループ

更新

○

×

×

4

参照

○

○

○

5

OLE DBプロバイダ用トレース

更新

○

×

×

6

参照

○

○

○

（凡例）

○：操作できます。

×：権限がないため操作できません。

ユーザアカウント制御（UAC）を有効にしたマシンである場合，HiRDBクライアント環境変数登録ツールは，管理者として実行してください。管理者として実行しないと，システムグループに環境変数を登録できません。

HiRDBクライアント環境変数登録ツールで環境変数をレジストリに登録する手順を次に示します。

なお，OLE DB接続の場合，ユーザ環境変数，及びHIRDB.INIよりも，HiRDBクライアント環境変数登録ツールで登録した環境変数が優先されます。

Type4 JDBCドライバを使用する場合，この方法で設定したクライアント環境定義は有効になりません。また，PDJDBで始まるクライアント環境定義は，この方法で設定しても有効になりません。

(1)　HiRDBクライアント環境変数登録ツールの起動

xxxx¥UTL¥pdcltadm.exeを実行してください。すると，次の「HiRDBクライアント環境変数登録ツール」画面が表示されます。

［説明］

ユーザグループ：

ユーザごとに，環境変数グループの追加，削除，又は構成ができます。この情報は，HKEY_CURRENT_USER下に登録されます。

システムグループ：

コンピュータに対して，環境変数グループの追加，削除，又は構成ができます。この情報は，HKEY_LOCAL_MACHINE下に登録されます。

ユーザグループ，又はシステムグループのどちらかを選択したら，［追加］ボタンをクリックしてください。

注意事項：

OLTP下のX/Openに従ったAPIを使用したUAPをクライアントとする場合で，オープン文字列に指定する環境変数グループ名称を「HiRDBクライアント環境変数登録ツール」で登録するときは，「システムグループ」を選択してください。オープン文字列については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

Windows起動時に起動されるサービスによって自動起動されるUAPの場合，「ユーザグループ」が読み込めないため，「システムグループ」を選択してください。

(2)　環境変数グループの登録

「HiRDBクライアント環境変数セットアップ」画面が表示されます。

［説明］

グループ名称：

グループ名称を最大30バイトで指定します。

各環境変数を指定してください：

各環境変数の内容については，「クライアント環境定義の設定内容」を参照してください。

設定が終了したら，［OK］ボタンをクリックしてください。

［OK］ボタンをクリックすると，クライアント環境変数の設定をレジストリに登録して，「HiRDBクライアント環境変数登録ツール」画面に戻ります。

［キャンセル］ボタンをクリックすると，クライアント環境変数の設定を無効にして，「HiRDBクライアント環境変数登録ツール」画面に戻ります。

(3)　環境変数グループの設定内容の変更

環境変数グループを一つ以上登録すると，次の画面のように環境変数グループ名のリストが表示されます。

リスト中の環境変数グループ名を選択すると，［削除］，［構成］，［テスト］ボタンが有効になるので，［構成］ボタンをクリックしてください。又は，リスト中の環境変数グループ名をダブルクリックしてください。

すると，次の画面が表示されます。

環境変数の内容を変更したら，［OK］ボタンをクリックしてください。

［OK］ボタンをクリックすると，変更後のクライアント環境変数の設定をレジストリに登録して，「HiRDBクライアント環境変数登録ツール」画面に戻ります。

［キャンセル］ボタンをクリックすると，変更後のクライアント環境変数の設定を無効にして，「HiRDBクライアント環境変数登録ツール」画面に戻ります。

(4)　登録した環境変数グループでのHiRDB接続の確認

登録した環境変数グループを使用して，HiRDBへの接続確認ができます。

「HiRDBクライアント環境変数登録ツール」画面の環境変数グループ名のリストから，接続確認したい環境変数グループ名を選択して，［接続］ボタンをクリックしてください。

すると，次の画面が表示されます。

［はい］ボタンをクリックしてください。

HiRDBへの接続が成功した場合には，次の画面が表示されます。

HiRDBへの接続が失敗した場合には，次の画面が表示されます。エラー要因が環境変数の内容の場合は，環境変数グループの設定内容を変更してください。

(5)　環境変数グループの削除

「HiRDBクライアント環境変数登録ツール」画面の環境変数グループ名のリストから，削除したい環境変数グループ名を選択して，［削除］ボタンをクリックしてください。

すると，次の画面が表示されます。

(6)　OLE DBプロバイダ用トレースの設定

OLE DBプロバイダ用トレースは，トラブルシュート用なので，トラブル調査以外では指定しないでください。トレースを取ると，極端に性能が劣化する場合があるので注意してください。

OLE DB接続時にOLE DBプロバイダ用トレースの設定をする場合は，「HiRDBクライアント環境変数登録ツール」画面の［OLE DBトレース］ボタンをクリックしてください。

すると，次の画面が表示されます。

トレースを取る場合は「トレースする」を選択して，［OK］ボタンをクリックしてください。ただし，「トレースしない」を選択して［OK］ボタンをクリックするまで，トレースを取り続けるので注意してください。

ログファイル名は，必ず絶対パス名で指定してください。

データサイズは，void*型データのダンプ出力サイズをバイト単位で指定してください。

なお，「トレースする」を選択している場合，ログファイル名及びデータサイズの指定は必須です。

複数接続機能を使用した場合に無効になる環境変数：

複数接続機能を使用する場合は，次に示す環境変数を接続先ごとに設定できません。次に示す環境変数を通常ファイル又はレジストリに登録して，接続先ごとに指定しても無効になります。

HiRDB_PDHOST

HiRDB_PDNAMEPORT

HiRDB_PDTMID

HiRDB_PDXAMODE

PDTMID

PDXAMODE

PDTXACANUM

(7)　レジストリ登録でエラーが発生した場合

レジストリ登録時にレジストリ操作のAPIでエラーが発生した場合，次のどちらかの画面が表示されます。

［中止］ボタンをクリックすると，現在の操作を中止して元の画面に戻ります。

［無視］ボタンをクリックすると，エラーを無視して次の処理に進みます。

［OK］ボタンをクリックすると，現在の操作を中止して元の画面に戻ります。

画面の出力内容を次の表に示します。

項番

項目

内容

1

RegXXX

エラーが発生したAPI名を示します。

2

レジストリキー

対象のレジストリキーを示します。64ビットのレジストリビューが対象の場合は，先頭に「(64bit)」が付きます。

3

レジストリエントリ

対象のレジストリエントリを示します。レジストリキーが対象の場合は空となります。

4

エラーコード

APIからの戻り値，及びエラーコードに対応する文字列（OSから取得）を示します。

エラーコードが5の場合は，表「HiRDBクライアント環境変数登録ツールを実行するユーザの権限と操作の可否」を参照してツールを実行するユーザの権限を見直してください。

6.7.3　Windows環境の場合（ファイル登録）

クライアント環境定義をファイルに設定し，HiRDBサーバ接続時にファイルから環境変数を取得できます。

環境変数グループをファイルに登録する場合，1行目に[HIRDB]又は[HiRDB]を記述する必要があります。odbc.iniのINIFLNAMEにクライアント環境定義を指定する場合は，1行目に[HIRDB]又は[HiRDB]を必ず記述してください。記述されていない場合，クライアント環境定義が読み込まれません。

指定値に引用符（ " ）で囲む値を含む場合の注意事項については，「クライアント環境定義の一覧」の「注※5」を参照してください。

ファイル（c:¥HiRDB_P¥Client¥HiRDB.ini）への設定例を次に示します。

（例）

[HIRDB]
PDCLTPATH=トレースファイル格納ディレクトリ
PDHOST=システムマネジャのホスト名
PDUSER=認可識別子/パスワード
PDNAMEPORT=システムマネジャプロセスのポート番号
PDCLTAPNAME=実行するUAPの識別名称

注意事項

Type4 JDBCドライバを用いたUAPの場合は，「UNIX環境の場合」に示す規則に従います。

6.8　クライアントライブラリのメモリ容量見積もり

6.8.1　クライアントライブラリのメモリ容量の見積もり方法

クライアントライブラリのメモリ容量の見積もりについて説明します。

1接続当たりでのSQL実行時に使用するクライアントライブラリのメモリ容量を次に示します。

クライアントライブラリのメモリ容量（単位：バイト）＝
　クライアントライブラリの管理情報長
　＋複数接続機能のハンドル情報長
　＋送信バッファ長
　＋受信バッファ長
　＋ブロック転送機能の管理バッファ長
　＋カーソルの管理バッファ長

それぞれの項目について，以降で説明します。

(1)　クライアントライブラリの管理情報長

次の値を加算します。

32ビットモードの環境の場合：10970

64ビットモードの環境の場合：11390

(2)　複数接続機能のハンドル情報長

複数接続機能を使用する場合，次の値を加算します。

32ビットモードの環境の場合：2620

64ビットモードの環境の場合：2856

(3)　送信バッファ長

送信バッファ長の見積もり式を次に示します。

なお，複数のSQL文を実行する場合は，SQL文ごとに送信バッファ長を求め，その最大値を使用します。

送信バッファ長＝↑送信電文長÷4096↑×4096

送信電文長

見積もり式を次に示します。

送信電文長は最大2ギガバイト（2,147,483,647バイト）まで指定できます。

(a)　CONNECT実行時

送信電文長＝
　↑（896＋（106×ユーザ任意接続情報の指定数）
　＋一時表用RDエリア情報長）÷4↑×4

ユーザ任意接続情報の指定数

CONNECT文の実行前にDECLARE AUDIT INFO SETでユーザ任意接続情報を設定した場合に加算します。

一時表用RDエリア情報長

クライアント環境変数PDTMPTBLRDAREAを指定した場合に加算します。

見積もり式を次に示します。

一時表用RDエリア情報長＝
　6＋↑PDTMPTBLRDAREA指定長÷2↑×2

(b)　そのほかのSQL実行時

送信電文長＝
　↑（920＋（106×ユーザ任意接続情報の指定数）
　＋SQL文長
　＋入力パラメタ情報長
　＋出力パラメタ情報長
　＋入力文字集合名記述領域長
　＋出力文字集合名記述領域長
　）÷4↑×4

ユーザ任意接続情報の指定数

SQL文の実行前にDECLARE AUDIT INFO SETでユーザ任意接続情報を設定した場合に加算します。

SQL文長

SQL文長です。文字コード変換機能を使用する場合は，文字コード変換後の長さとなります。ただし，クライアント環境定義PDCLTCNVMODEにUOCを指定した場合は，SQL文長にPDCLTCNVBYTERATIOの値を乗算した値を加算します。

入力パラメタ情報長

入力パラメタがある場合に加算します。

クライアント環境定義PDCURSORLVLに2を指定した場合で，SELECT文にWHERE句を指定しているときは，カーソルオープン後の1回目のFETCH実行時にWHERE句に指定した入力パラメタ情報長を加算してください。

見積もり式を次に示します。

入力パラメタ情報長＝
　　 入力パラメタ数
（16 ＋　Σ　（16＋入力データ長i ））
　　　　i=1
　×配列数
　＋標識変数長

入力パラメタ数

入力したパラメタの個数です。

入力データ長

入力データがある場合に，入力データの定義長を加算します。各データの定義長については，「SQLのデータ型とデータ記述」を参照してください。

なお，文字コード変換機能を使用する場合で，入力データのデータ型がCHAR，VARCHAR，NCHAR，NVARCHAR，MCHAR，又はMVARCHARのときは，次の表に示す値を加算します。

PDCLTCNVMODE

加算する値

UTF8_TXT，UTF8MS_TXT

ユーザ定義長

UOC

ユーザ定義長×PDCLTCNVBYTERATIOの指定値

上記以外

ユーザ定義長×3

配列数

配列を使用したSQLを実行する場合に乗算します。

標識変数長

標識変数を指定したパラメタ数分を加算します。値は入力データのデータ型によって異なります。

BLOB，BINARY，BLOB位置付け子，又はBINARY位置付け子の場合：4

上記以外の場合：2

また，配列を使用したSQLを実行する場合は，配列数分を乗算します。

出力パラメタ情報長

出力パラメタがある場合に加算します。

見積もり式を次に示します。

出力パラメタ情報長＝
　16＋16×出力パラメタ数

出力パラメタ数

検索系SQL実行時の検索列数，又はOUTパラメタとINOUTパラメタの合計数となります。

入力文字集合名記述領域長

入力パラメタに対する文字集合名記述領域の指定がある場合に加算します。

見積もり式を次に示します。

入力文字集合名記述領域長＝
　32＋2×文字集合名記述領域のSQLCVARNの指定値
　＋64×文字集合名記述領域のSQLCSNDの指定値

出力文字集合名記述領域長

出力パラメタに対する文字集合名記述領域の指定がある場合に加算します。

見積もり式は，入力文字集合名記述領域長の見積もり式と同じです。

(4)　受信バッファ長

受信バッファ長の見積もり式を次に示します。

なお，複数のSQL文を実行する場合は，SQL文ごとに受信バッファ長を求め，その最大値を使用します。

受信バッファ長＝↑受信電文長÷4096↑×4096

受信電文長

受信電文長は最大2ギガバイト（2,147,483,647バイト）まで指定できます。

見積もり式を次に示します。

(a)　CONNECT実行時

受信電文長：836

(b)　DISCONNECT実行時

受信電文長：1388

(c)　そのほかのSQL実行時

受信電文長＝
　↑（196＋↑（656
　＋入力パラメタ情報格納長
　＋出力パラメタ情報格納長
　＋入力文字集合名記述領域情報格納長
　＋出力文字集合名記述領域情報格納長
　＋列名記述領域情報格納長
　＋型名記述領域情報格納長
　）÷36864↑×36864※
）÷4↑×4

注※

アクセスパス情報又は中間結果情報を取得する場合は36キロバイトで切り上げます。

入力パラメタ情報格納長

入力パラメタ情報を受け取る場合に加算します。

見積もり式を次に示します。

入力パラメタ情報格納長＝
　16＋16×入力パラメタ情報格納数

入力パラメタ情報格納数

DESCRIBE INPUT文又はPREPARE文のINPUT句に指定したSQL記述領域の入力？パラメタ数（SQL記述領域のSQLDの指定値）となります。

出力パラメタ情報格納長

出力データ又は出力パラメタ情報を受け取る場合に加算します。

見積もり式を次に示します。

出力パラメタ情報長＝
　　 出力パラメタ数
（16 ＋　Σ　（16＋出力データ長i ））
　　　　i=1
　×配列数
　＋標識変数長

出力パラメタ数

検索系SQL実行時の検索列数，OUTパラメタ及びINOUTパラメタの合計数，DESCRIBE OUTPUT文又はPREPARE文のOUTPUT句に指定したSQL記述領域の出力？パラメタ数（SQL記述領域のSQLDの指定値）となります。

出力データ長

出力データがある場合に，出力データの定義長を加算します。各データの定義長については，「SQLのデータ型とデータ記述」を参照してください。

なお，文字コード変換機能を使用する場合で，出力データのデータ型がCHAR，VARCHAR，NCHAR，NVARCHAR，MCHAR，又はMVARCHARのときは，次の表に示す値を加算します。

PDCLTCNVMODE

加算する値

UTF8_TXT，UTF8MS_TXT，

UCS2_UJIS，UCS2_UJIS2，UCS2_UTF8

ユーザ定義長

UJIS，UJIS2，

UTF8，UTF8MS，UTF8_EX，UTF8_EX2

ユーザ定義長×3

UOC

ユーザ定義長×PDCLTCNVBYTERATIOの指定値

配列数

配列を使用したSQLを実行する場合に乗算します。

標識変数長

標識変数を取得するパラメタ数分を加算します。値は出力データのデータ型によって異なります。

BLOB，BINARY，BLOB位置付け子，又はBINARY位置付け子の場合：4

上記以外の場合：2

また，配列を使用したSQLを実行する場合は，配列数分を乗算します。

出力パラメタ情報格納長（ブロック転送機能使用時）

ブロック転送機能を使用する場合は，次に示す見積もり式で出力パラメタ格納情報長を算出します。

出力パラメタ情報格納長（ブロック転送機能使用時）＝
　（4×1回の通信で転送する行数×検索列数）
　＋MAX（出力パラメタ情報格納長×PDBLKF，PDBLKBUFFSIZE×1024）

1回の通信で転送する行数

「1回の通信で転送する行数」を参照してください。

検索列数

検索系SQL実行時の検索列数です。

出力パラメタ情報格納長

前述の「出力パラメタ情報格納長」の見積もり式で算出します。

PDBLKF

クライアント環境変数PDBLKFの指定値です。指定していない場合は1となります。

PDBLKBUFFSIZE

クライアント環境変数PDBLKBUFFSIZEの指定値です。指定していない場合は0となります。

入力文字集合名記述領域情報格納長

入力パラメタ情報の文字集合名記述領域情報を受け取る場合に加算します。

見積もり式を次に示します。

入力文字集合名記述領域情報格納長＝
　32＋2×文字集合名記述領域のSQLCVARNの指定値
　＋64×文字集合名記述領域のSQLCSNDの指定値

出力文字集合名記述領域情報格納長

出力パラメタ情報の文字集合名記述領域情報を受け取る場合に加算します。

見積もり式は，入力文字集合名記述領域情報格納長の見積もり式と同じです。

列名記述領域情報格納長

列名記述領域情報を受け取る場合に加算します。

見積もり式を次に示します。

列名記述領域情報格納長＝
　2＋32×SQL記述領域のSQLNの指定値

型名記述領域情報格納長

型名記述領域情報を受け取る場合に加算します。

見積もり式を次に示します。

型名記述領域情報格納長＝
　2＋42×SQL記述領域のSQLNの指定値

(5)　ブロック転送機能の管理バッファ長

ブロック転送機能を使用する場合に加算します。

見積もり式を次に示します。

ブロック転送機能の管理バッファ長＝
　（ブロック転送機能の管理情報
　＋出力パラメタ情報長
　＋出力文字集合名記述領域長
　＋受信電文長）
　×カーソル数

ブロック転送機能の管理情報

次の値を加算します。

32ビットモードの環境の場合：156

64ビットモードの環境の場合：184

出力パラメタ情報長

「送信バッファ長」の「そのほかのSQL実行時」の「出力パラメタ情報長」の見積もり式で算出します。

出力文字集合名記述領域長

「送信バッファ長」の「そのほかのSQL実行時」の「出力文字集合名記述領域長」の見積もり式で算出します。

受信電文長

「受信バッファ長」の「そのほかのSQL実行時」の受信電文長の見積もり式で算出します。

カーソル数

同時にオープンするカーソル数です。

(6)　カーソルの管理バッファ長

クライアント環境定義PDCURSORLVLに1，又は2を指定した場合に加算します。

見積もり式を次に示します。

カーソルの管理バッファ長＝
　（カーソルオープン及びカーソルクローズの管理情報
　＋入力パラメタ情報長
　＋入力文字集合名記述領域長
　＋SQL文（SELECT文）長）
　×カーソル数

カーソルオープン及びカーソルクローズの管理情報

次の値を加算します。

32ビットモードの環境の場合：200

64ビットモードの環境の場合：216

入力パラメタ情報長

「送信バッファ長」の「そのほかのSQL実行時」の「入力パラメタ情報長」の見積もり式で算出します。

入力文字集合名記述領域長

「送信バッファ長」の「そのほかのSQL実行時」の「入力文字集合名記述領域長」の見積もり式で算出します。

SQL文（SELECT文）長

SQL文（SELECT文）長です。文字コード変換機能を使用する場合でも，文字コード変換前の長さとなります。

カーソル数

同時にオープンするカーソル数です。

7　UAPの作成

この章では，C言語，又はCOBOL言語を使った埋込み型UAPの作成方法について説明します。

7.1　埋込み型UAPの概要

埋込み型のUAPを作成する場合，C言語，又はCOBOL言語で記述されたソースプログラム中にSQLを埋め込みます。

ここでは，埋込み型のUAPの基本構成と規則について説明します。

7.1.1　UAPの基本構成

埋込み型で記述したUAPの基本構成の例としてC言語の記述例を次の図に示します。

図7‒1　埋込み型で記述したUAPの基本構成の例

7.1.2　UAPの構成要素

埋込み型のUAPの構成は，次に示す四つの要素を基本にしています。

埋込み変数，及び標識変数の宣言

SQL連絡領域の宣言

特異状態発生時の処理の指定

SQLの実行

(1)　埋込み変数，及び標識変数の宣言

SQL文で使用する埋込み変数，及び標識変数を宣言します。

埋込み変数，及び標識変数については，マニュアル「HiRDB SQLリファレンス」を参照してください。

(2)　SQL連絡領域の宣言

HiRDBから返される情報（リターンコード）を受け取るための領域を宣言します。SQL連絡領域は，UAPをプリプロセスすることでソースプログラム中に自動的に展開されるため，UAP内に記述する必要はありません。

SQL連絡領域については，「SQL連絡領域」を参照してください。

(3)　特異状態発生時の処理の指定

SQL実行後，HiRDBから返されるリターンコードによって，UAPが取らなければならない処理をWHENEVER文で宣言します。

なお，WHENEVER文を宣言しなくても，SQL実行後に直接リターンコードを判定すると，特異状態発生時の処理を指定できます。

WHENEVER文の宣言，及びリターンコードの判定については，「SQLのエラーの判定と処置」を参照してください。

(4)　SQLの実行

実行するSQL文を指定します。

C言語の記述規則については，「記述規則」を参照してください。また， COBOL言語の記述規則については，「記述規則」を参照してください。

7.2　C言語によるUAPの作成

ここでは，C言語による埋込み型UAPの記述規則，及び作成例について説明します。

7.2.1　記述規則

UAPを作成するとき，SQLの文法の規則以外に，名標の付け方やSQLの記述についての規則があります。

(1)　名標の付け方の規則

名標を付ける場合，基本的にC言語の規則に従います。

C言語の規則以外に，使用できない名標を次に示します。

大文字の「SQL」で始まる名標

小文字の「p_ 」で始まる名標

小文字の「pd」で始まる名標

大文字の「PD」で始まる名標

なお，SQL中で使用する埋込み変数，標識変数，及び分岐先ラベルの名称の付け方は，名標の付け方，及びC言語の規則に従います。

(2)　SQLの記述規則

SQLは，一つのSQL文ごとにSQL先頭子（EXEC SQL）とSQL終了子（;）とで囲みます。

<正しい指定例>

  EXEC SQL  SQL文  ;

埋込みSQL文，又はその一部にC言語のマクロ機能を使用できません。

<誤った指定例>

  #define X USER.MEMBER

  EXEC SQL
    SELECT NAME INTO :MANNAME FROM X;

注　　部分が誤りです。

SQLの予約語は，大文字でも小文字でも使用できます。

<指定例1>

  EXEC SQL
    SELECT MEM INTO :NAME FROM TABLE;

<指定例2>

  exec sql
    select MEM into :NAME from TABLE;

<指定例3>

  exec SQL
    SELECT MEM Into :NAME From TABLE;

SQL先頭子，埋込みSQL開始宣言，及び埋込みSQL終了宣言は，各1行で記述します。また，各々を構成する字句を区切るため，半角空白文字を挿入します。

なお，改行文字の次の文字から次の改行文字までの文字列が1行です。ただし，プリプロセスするUAPのソースプログラムは，1行の長さが32000文字を超える記述ができないので，1行の長さを32000文字以内にしてください。

<正しい指定例>

  EXEC SQL
    BEGIN DECLARE SECTION;
      :

  EXEC SQL
    END DECLARE SECTION;

  EXEC SQL
    SELECT  ...    ;

<誤った指定例>

  EXEC SQL
    BEGIN
    DECLARE SECTION;
      :

  EXEC SQL
    END
    DECLARE SECTION;

  EXEC ¥
    SQL
    SELECT ...    ;

注　　部分が誤りです。

埋込みSQL宣言節の定義は，埋込み変数，又は標識変数を使用するSQLよりも前に宣言します。

<指定例>

  EXEC SQL
    BEGIN DECLARE SECTION;
  short URIAGE;
  EXEC SQL
    END DECLARE SECTION;
       :

  EXEC SQL
    SELECT KINGAKU INTO :URIAGE
      FROM TABLE;

埋込み変数，及び標識変数を指定する場合，次の規則に従います。

宣言文は複数行にわたって記述できます。また，同じ行に二つ以上の定義文を記述することもできます。

<指定例>

  short URIAGE,
     SURYO;
  short URIAGE;     short SURYO;

埋込みSQL宣言節内で記述できる項目を次の表に示します。

表7‒1　埋込みSQL宣言節内で記述できる項目

記述する項目

埋込み宣言節内での記述

注釈

○

C言語の命令文

×

C言語の制御文

×

SQL文

×

埋込み変数宣言

○

標識変数宣言

○

（凡例）

○：記述できます。

×：記述できません。

一つのソースファイル内では，同一名称の埋込み変数，及び標識変数を二つ以上宣言できません。

一つの宣言文で複数の埋込み変数，又は標識変数を宣言できます。

<指定例>

  short URIAGE, SURYO ;     埋込み変数の宣言
  short XURIAGE, XSURYO ;   標識変数の宣言

埋込み変数に使用できるデータ型については，「SQLのデータ型とデータ記述」を参照してください。

関数内で宣言した埋込み変数はローカル変数になり，関数外で宣言した埋込み変数はグローバル変数になります。

関数ブロック内でC言語の命令文を記述できる箇所には，埋込みSQL文も記述できますが，ほかのSQL文，及びC言語で記述した文と同じ行には記述できません。

なお，ラベルはSQL先頭子の前に付けることができます。

SQL文を記述できる箇所を次の表に示します。

表7‒2　SQL文を記述できる箇所

同一行内の記述箇所

SQL文の記述

C言語と命令文

前

×

中

×

後

×

C言語制御文

前

×

中

×

後

×

ラベル

前

×

後

○

注釈

前

○

中

×

後

○

SQL文※

前

×

中

×

後

×

（凡例）

○：記述できます。

×：記述できません。

注※

SQL先頭子で始まり，SQL終了子で終わることを前提にします。

VisualC++コンパイラでMFC（MicrosoftFoundationClass）用ヘッダファイル（AFXxxxxx.H）をHiRDBのUAPソースにインクルードする場合，次のSQL文でMFC用ヘッダファイルより後にHiRDBのヘッダファイルをインクルードしてください。HiRDBが提供するヘッダファイルを，このSQL文を記述した箇所でインクルードします。

EXEC SQL INCLUDE HIRDB_HEADERS ;

INCLUDE HIRDB_HEADERSは，ポストソースの先頭で自動的にインクルードしていたHiRDBのヘッダファイルを，指定した箇所でインクルードするものです。

INCLUDE HIRDB_HEADERSは，C言語，及びC++言語でだけ使用できます。ほかの言語では使用できません。

INCLUDE HIRDB_HEADERSは，UAP中で一回だけ使用できます。

INCLUDE HIRDB_HEADERSを使用しない場合，ポストソースの先頭にHiRDBのヘッダファイルがインクルードされます。

VisualC++が提供しているMFC用のヘッダファイルには，インクルードする順番に順序関係があり，WINDOWS.Hヘッダファイル（HiRDBが使用しているヘッダファイル）が先にインクルードされているとエラーになることがあります。この場合，INCLUDE HIRDB_HEADERSを使用してください。

HiRDBは，次のVisualC++のヘッダファイルを使用しています。

WINDOWS.H

STRING.H

INCLUDE HIRDB_HEADERSの使用例を次に示します。

#include <afx.h>
EXEC SQL INCLUDE HIRDB_HEADERS ;

注釈の規則を次に示します。

SQL先頭子からSQL終了子までの間に記述した囲み注釈（/*〜*/）及び単純注釈（-- 〜 改行）はSQLプリプロセサが削除します。ただし，SQL最適化指定（/*>>〜<<*/）は削除しないで，SQL文として扱います。また，引用符（"）やアポストロフィ（'）で囲まれた部分にある「/*〜*/」及び「--〜改行」は削除しません。

プリプロセスオプション-Xs又は/Xsを指定した場合にだけ，SQL先頭子からSQL終了子までの間に単純注釈を記述できます。

単純注釈とSQL終了子を同じ行に記述することはできません。

<単純注釈の正しい指定例>

EXEC SQL -- 注釈1
    CALL PROC1(0) -- 注釈2
;

<単純注釈の誤った指定例1>

EXEC SQL CALL PROC1(0) -- 注釈1 ;

この場合，単純注釈の中にセミコロン（;）があるため，セミコロンがSQL終了子としてみなされません。

<単純注釈の誤った指定例2>

EXEC SQL CALL PROC1(0) ; -- 注釈1

この場合，「-- 〜 改行」がSQL先頭子からSQL終了子（;）の範囲外にあるため，「-- 〜 改行」が注釈としてみなされません。

SQL文中での囲み注釈，単純注釈，及びSQL最適化指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

¥記号での行の継続は使用できません。

-E又は/Eオプションを使用すると，Cコンパイラのプリプロセサ宣言文が有効となるため，#ifdefでのSQL文の切り替えができ，また，埋込みSQL宣言節の定数をマクロ定数で記述できます。ただし，次の制限があります。

SQL先頭子からSQL終了子までの間に，プリプロセサ宣言文を記述できません。

SQL先頭子とSQL終了子のカラム位置が変わるマクロは使用できません。

SQL先頭子，及びSQL終了子のマクロ定義はできません。

-E又は/Eオプションを使用すると，C言語の文法に従って宣言された，SQLのデータ型に対応した変数であれば，埋込みSQL宣言節で埋込み変数を宣言しなくても，埋込み変数を使用できます。同じ名称の変数がある場合は，C言語の文法に従って，それぞれの変数の有効範囲を判定します。ただし，次の制限があります。

変数名は，先頭から63文字までが区別されます。64文字目以降は区別されません。なお，ユニバーサル文字名（¥uxxxxと¥Uxxxxxxxx）は1文字としてカウントされます。

ネストした構造体は使用できません。

宣言文の中で，添字に式を使用している埋込み変数は使用できません。

const型の埋込み変数は，入力用の変数としてだけ使用できます。

変数名，関数名などのC言語の識別子として，大文字，小文字に関係なく「varchar」は使用できません。

-E又は/Eオプションを使用すると，複数個の埋込み変数をメンバとして持つ構造体を，埋込み変数として宣言できます。すべてのメンバは，SQLのデータ型に対応した形式でなければなりません。構造体の中に，構造体及び共用体を含めることはできません。ただし，可変長文字列型，及びBINARY型に対応する構造体は使用できます。

-E又は/Eオプションを使用すると，ポインタを埋込み変数として宣言できます。宣言の形式はC言語の文法に従います。SQL文中で使用する場合は，埋込み変数名の前にアスタリスクを付けないで，通常の埋込み変数と同じ形式で記述します。

-E又は/Eオプションを使用すると，構造体のメンバを埋込み変数として明示的に指定する場合は，構造体名で修飾して"：構造体．メンバ名"と記述します。構造体へのポインタを使用する場合は，ポインタで修飾して"：ポインタ名->メンバ名"と記述します。

Windows版の場合に/Eオプションを指定したときは，次の制限があります。

typedefで，同じtypedef名を二回定義しても構文エラーになりませんが，定義内容が同じかどうかのチェックはされません。

匿名構造体のメンバは，埋込み変数として使用できません。

記憶クラス，及びデータ型なしで記述した宣言子は，埋込み変数として使用できません。

-E又は/Eオプション指定時にも，SQLのCOPY文を使用できます。COPY文を使用できる条件については，表「プリプロセスオプション（UNIX環境のC言語の場合）」又は表「プリプロセスオプション（Windows環境のC言語の場合）」を参照してください。

可変長配列は，埋込み変数として使用できません。

-E又は/Eオプション指定時には，2文字表記「<:」，「<%」など，及び3文字表記「??(」，「??=」などの文字は使用できません。また，-E又は/Eオプションを指定しない場合でも，SQL文と埋込みSQL宣言節では使用できません。使用すると，通常の文字として扱われます。

-E又は/Eオプション指定時には，次に示すCの標準規格（C99）に規定されていない予約語を使用できます。

用途

処理

環境※1

予約語

型修飾子，又は型指定子※2

構文解析で型修飾子，又は型指定子として扱われる。

Windows

__int8，__int16，__int32，__int64，_int8，_int16，_int32，_int64

UNIX

__volatile__，__builtin_va_list，__complex__，__signed__

その他

構文解析で意味のない語句として扱うため無視される。

Windows

__based，__cdecl，__export，__far，__fastcall，__forceinline，__inline，__near，__pascal，__ptr32，__ptr64，__stdcall，__unaligned，__w64，_based，_cdecl，_export，_far，_fastcall，_forceinline，_inline，_near，_pascal，_stdcall__declspec，__pragma，_declspec__try，__except，__finally__asm，_asm

UNIX

__const，__const__，__extension__，__inline，__inline__，__restrict，__attribute__，__asm__

注※1

Windows環境の予約語は，Visual C++で使用されるものです。2文字の下線（__）で始まる予約語は，VisualC++6.0以降で定義されているものです。下位バージョンのVisual C++で作成したソースのために，1文字の下線（_）で始まる場合も含めます。

UNIX環境の予約語は，gccで使用されるものです。

注※2

型修飾子，又は型指定子として扱う予約語は，埋込み変数の宣言には使用できません。

-E又は/Eオプション指定時には，ビットフィールドは任意の整数型として宣言できます。ただし，ビットフィールドは埋込み変数の宣言には使用できません。

ソースにヘッダファイルを引き込む方法として，#includeとSQLのCOPY文があります。それぞれヘッダファイル中に記述できる項目を次に示します。

項番

記述項目

ヘッダファイルを引き込む方法

#include

COPY文

1

SQL文

COPY

×

×

2

COPY以外

×

○

3

埋込み変数宣言

「SQL TYPE IS」で始まる

×

○

4

「VARCHAR」で始まる

×

○

5

「CHARACTER SET」を含む

×

○

6

C言語による変数宣言※

△

○

7

標識変数宣言

△

○

（凡例）

○：記述できます。

×：記述できません。

△：-E3又は/E3オプション指定時にだけ記述できます。

注※

SQLプリプロセサが変換しなくてもCコンパイラが構文解析できる変数宣言のことです。

なお，項番3〜5の埋込み変数宣言はSQLプリプロセサが変換しないとCコンパイラが構文解析できません。ただし，繰返し列用の埋込み変数宣言に使用するPD_MV_SINTなどはC言語のマクロとして定義しているため，繰返し列用の埋込み変数宣言はそのままでCコンパイラが構文解析できます。したがって，繰返し列用の埋込み変数宣言はC言語による変数宣言になります。

7.2.2　プログラム例題

C言語による埋込み型UAPのプログラム例題を示します。

なお，SQLの文法の詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

(1)　基本的な操作の例

(a)　PADチャート

プログラム例題1のPADチャートを次の図に示します。

図7‒2　プログラム例題1のPADチャート（1/2）

図7‒3　プログラム例題1のPADチャート（2/2）

(b)　コーディング例

プログラム例題1のコーディング例を次に示します。

    1  #include <string.h>
    2  #include <stdlib.h>
    3
    4  #define MAXCOLUMN 80           /* max column in one line */
    5  #define INFILE   "inputf1"     /* input data file name   */
    6
    7  /* declare functions */
    8  void abnormalend();
    9  void connecterror();
   10
   11  FILE *input = NULL;
   12
   13  main()
   14  {
   15    /* input data */
   16    char indata[MAXCOLUMN + 1];
   17
   18    char in_userid[31];
   19    char in_passwd[31];
   20    char in_kubun;
   21    char in_scode[5];
   22    char in_sname[17];
   23    char in_col[3];
   24    int in_tanka;
   25    int in_gryo;
   26    char in_okubun;
   27
   28    /* variables for SQL */
   29    EXEC SQL BEGIN DECLARE SECTION;                               1
   30      char xuserid[31];                                           1
   31      char xpasswd[31];                                           1
   32      char xscode[5];                                             1
   33      char xsname[17];                                            1
   34      char xcol[3];                                               1
   35      long xtanka;                                                1
   36      long xgryo;                                                 1
   37    EXEC SQL END DECLARE SECTION;                                 1
   38
   39    /* input file open */                                         2
   40    input = fopen(INFILE, "r");                                   2
   41    if (input == NULL) {                                          2
   42      /* input file open error */                                 2
   43      fprintf(stderr, "can't open %s.", INFILE);                  2
   44      goto FIN;                                                   2
   45    }                                                             2
   46                                                                  2
   47    /* get userid/passwd */                                       2
   48    fgets(indata, 81, input);                                     2
   49    sscanf(indata, "%30s %30s", xuserid, xpasswd);                2
   50    if (feof(input)) {                                            2
   51      fprintf(stderr, "*** error *** no data for connect ***");   2
   52      goto FIN;                                                   2
   53    }                                                             2
   54    printf("connect start,¥n");                                   2
   55    EXEC SQL WHENEVER SQLERROR PERFORM connecterror;         (a)  2
   56    EXEC SQL CONNECT USER :xuserid USING :xpasswd;           (b)  2
   57    printf("connected,¥n");                                       2
   58
   59    /* read data from inputfile */
   60    EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;
   61    fgets(indata, MAXCOLUMN, input);
   62
   63    while (!feof(input)) {
   64      sscanf(indata, "%c %4s %16s %2s %8d %8d %c",
   65        &in_kubun, in_scode, in_sname, in_col,
   66        &in_tanka, &in_gryo, &in_okubun);
   67      switch (in_kubun) {
   68      case 'I':
   69        strncpy(xscode, in_scode, 4);
   70        strncpy(xsname, in_sname, 8);
   71        strncpy(xcol, in_col, 2);
   72        xtanka = in_tanka;
   73        xgryo = in_gryo;
   74        EXEC SQL                                                  3
   75          INSERT INTO ZAIKO(SCODE,SNAME,COL,TANKA,ZSURYO)         3
   76            VALUES(:xscode,:xsname,:xcol,:xtanka,:xgryo);         3
   77        break;
   78      case 'U':
   79        strncpy(xscode, in_scode, 4);                             4
   80        xgryo = in_gryo;                                          4
   81        if (in_okubun == '1') {                                   4
   82          EXEC SQL                                           (a)  4
   83            UPDATE ZAIKO SET ZSURYO=ZSURYO+:xgryo            (a)  4
   84              WHERE SCODE=:xscode;                           (a)  4
   88        } else {                                                  4
   86          EXEC SQL                                           (b)  4
   87            UPDATE ZAIKO SET ZSURYO=ZSURYO-:xgryo            (b)  4
   88              WHERE SCODE=:xscode;                           (b)  4
   89        }
   90        break;
   91      case 'D':
   92        strncpy(xscode, in_scode, 4);
   93        EXEC SQL                                                  5
   94          DELETE FROM ZAIKO WHERE SCODE=:xscode;                  5
   95        break;
   96      }
   97      fgets(indata, MAXCOLUMN, input);
   98    }
   99
  100    /* print zaiko list */
  101    EXEC SQL                                                      6
  102      DECLARE CR1 CURSOR FOR                                      6
  103          SELECT SCODE,SNAME,COL,TANKA,ZSURYO FROM ZAIKO;         6
  104    EXEC SQL OPEN CR1;                                            7
  105
  106    /* print midashi */
  107    printf("¥n¥n");
  108    printf("  ***** 在庫表 リスト *****¥n¥n");
  109    printf("  商品コート゛ 商品名      色 単価   現在庫量¥n");
  110    printf("  ----   ---------------- -- -------- --------¥n");
  111
  112    /* FETCH */
  113    SQLCODE = 0;
  114    while (SQLCODE <= 100) {
  115      EXEC SQL WHENEVER NOT FOUND GO TO OWARI;
  116      EXEC SQL                                                    8
  117        FETCH CR1 INTO :xscode,:xsname,:xcol,:xtanka,:xgryo;      8
  118      EXEC SQL WHENEVER NOT FOUND CONTINUE;
  119      printf("  %4s   %-16s %2s %8d %8d¥n",
  120          xscode, xsname, xcol, xtanka, xgryo);
  121    }
  122
  123  OWARI:
  124    /* finish */
  125    EXEC SQL CLOSE CR1;                                      (a)  9
  126    EXEC SQL COMMIT;                                         (b)  9
  127    printf(" *** normal ended ***¥n");
  128
  129  FIN:
  130    if (input != NULL) {
  131      fclose(input);
  132    }
  133    EXEC SQL WHENEVER SQLERROR  CONTINUE;
  134    EXEC SQL WHENEVER NOT FOUND CONTINUE;
  135    EXEC SQL WHENEVER SQLWARNING CONTINUE;
  136    EXEC SQL DISCONNECT;                                         10
  137    return(0);
  138  }
  139
  140
  141  void connecterror()
  142  {
  143
  144    printf("¥n************ error *** cannot connect ***¥n");
  145    fclose(input);
  146    EXEC SQL DISCONNECT;
  147    exit(1);
  148  }
  149
  150
  151  void abnormalend()
  152  {
  153    int  wsqlcode;
  154
  155    wsqlcode = -SQLCODE;
  156    printf("¥n*** HiRDB SQL ERROR SQLCODE = %d ¥n", wsqlcode);
  157    printf("SQLERRMC = %s¥n", SQLERRMC);
  158
  159    EXEC SQL ROLLBACK;                                       (a)  11
  160    EXEC SQL DISCONNECT;                                     (b)  11
  161    exit(2);
  162  }

＜説明＞

埋込みSQL宣言節の始まりと終わり

UAP中で使用する変数をBEGIN DECLARE SECTIONとEND DECLARE SECTIONとで囲んで，埋込みSQL宣言節の始まりと終わりを示します。

HiRDBとの接続

(a) 特異状態発生時の指定

以下のSQLの実行後に，エラー（SQLERROR）が発生した場合の処理として，分岐先（connecterror）を指定します。

(b) 接続

HiRDBに認可識別子及びパスワードを連絡して，UAPがHiRDBを使用できる状態にします。

在庫表への行の挿入

在庫表の各列に，埋込み変数に読み込まれた値を挿入します。

在庫表の行の更新

(a) 入庫

在庫表から，埋込み変数（:xgno）に読み込んだ品番をキーとして，更新する行を検索します。検索した行の数量（SURYO）の値に，埋込み変数（:xsuryo）に読み込んだ値を加算して，行を更新します。

(b) 在庫

在庫表から，埋込み変数(:xgno)に読み込んだ品番をキーとして，更新する行を検索します。検索した行の数量（SURYO）の値に，埋込み変数（:xsuryo）に読み込んだ値を減算して，行を更新します。

在庫表の行の削除

在庫表から，埋込み変数(:xgno)に読み込んだ品番をキーとして，それと等しいキーを持つ行を削除します。

カーソルCR1の宣言

在庫表（ZAIKO）の行を検索するために，カーソルCR1を宣言します。

カーソルCR1のオープン

在庫表（ZAIKO）の検索行の直前にカーソルを位置づけて，行を取り出せる状態にします。

在庫表の行の取り出し

在庫表（ZAIKO）から，カーソルCR1の示す行を１行取り出し，各埋込み変数に設定します。

カーソルCR1のクローズとトランザクションの終了

(a) カーソルCR1のクローズ

カーソルCR1を閉じます。

(b) トランザクションの終了

現在のトランザクションを正常終了させて，そのトランザクションによるデータベースへの追加，更新，削除の結果を有効にします。

HiRDBの切り離し

UAPをHiRDBから切り離します。

トランザクションの取り消し

(a) トランザクションの無効化

現在のトランザクションを取り消して，そのトランザクションによるデータベースへの追加，更新，削除の結果を無効にします。

(b) HiRDBの切り離し

UAPをHiRDBから切り離します。

(2)　ユーザ定義のSQL記述領域を使用した例

(a)　PADチャート

プログラム例題2のPADチャートを次の図に示します。

図7‒4　プログラム例題2のPADチャート（1/4）

図7‒5　プログラム例題2のPADチャート（2/4）

図7‒6　プログラム例題2のPADチャート（3/4）

図7‒7　プログラム例題2のPADチャート（4/4）

(b)　コーディング例

プログラム例題2のコーディング例を次に示します。

    1  /******************************************************/
    2  /*                                                    */
    3  /* ALL RIGHTS RESERVED,COPYRIGHT (C)1997,HITACHI,LTD. */
    4  /* LICENSED MATERIAL OF HITACHI,LTD.                  */
    5  /*                                                    */
    6  /* SQLDAを使用したFETCHのサンプル                    */
    7  /*                                                    */
    8  /******************************************************/
    9
   10
   11  #include <stdio.h>
   12  #include <stdlib.h>
   13  #include <string.h>
   14  #include "pdbsqlda.h"                                          1
   15
   16
   17  static void Describe();
   18  static void Fetch();
   19  static void ClearSqlda(short);
   20  static void errmsg();
   21
   22  /***********************************************************/
   23  /*  GLOBAL VARIABLE                                        */
   24  /***********************************************************/
   25  short ErrFlg;
   26
   27  /***********************************************************/
   28  /*  GLOBAL VARIABLE                                        */
   29  /***********************************************************/
   30
   31  /* sqlda */
   32  PDUSRSQLDA(10) xsqlda;                                         2
   33
   34  /* sqlcnda */                                                  3
   35  struct {                                                       3
   36      short    sqlnz;                                            3
   37      struct {                                                   3
   38           short    sqlnamel;                                    3
   39           char     sqlnamec[30];                                3
   40      } SQLNAME[10];                                             3
   41  } ucnda;                                                       3
   42
   43
   44  /***********************************************************/
   45  /*                                                         */
   46  /*  MAIN ROUTINE                                           */
   47  /*                                                         */
   48  /***********************************************************/
   49  int main(
   50  int   argc,
   51  char  *argv[])
   52  {
   53
   54  /***********************************************************/
   55  /*  CONNECT                                                */
   56  /***********************************************************/
   57      EXEC SQL
   58        WHENEVER SQLERROR  GOTO :ERR_EXIT;
   59
   60      printf("***** connect start ¥n");
   61      EXEC SQL
   62         CONNECT;                                                4
   63      printf("***** connect : END¥n");
   64
   65  /***********************************************************/
   66  /*  DESCRIBE                                               */
   67  /***********************************************************/
   68      Describe();                                                5
   69      if(ErrFlg < 0){                                            5
   70          goto ERR_EXIT;                                         5
   71      }                                                          5
   72                                                                 5
   73  /***********************************************************/  5
   74  /*  FETCH                                                  */  5
   75  /***********************************************************/  5
   76      Fetch();                                                   5
   77      if(ErrFlg < 0){                                            5
   78          goto ERR_EXIT;                                         5
   79      }                                                          5
   80
   81  /***********************************************************/
   82  /*  END OF ALL                                             */
   83  /***********************************************************/
   84  ERR_EXIT:
   85      if(SQLCODE < 0){
   86          errmsg();
   87          ErrFlg = -1;
   88      }
   89
   90      EXEC SQL
   91        WHENEVER SQLERROR  CONTINUE;
   92      EXEC SQL
   93        WHENEVER NOT FOUND CONTINUE;
   94      EXEC SQL
   95        WHENEVER SQLWARNING CONTINUE;
   96
   97      EXEC SQL
   98        DISCONNECT;                                              6
   99
  100      return(ErrFlg);
  101  }
  102
  103
  104  /***********************************************************/
  105  /*                                                         */
  106  /*  DYNAMIC CURSOR                                         */
  107  /*                                                         */
  108  /***********************************************************/
  109  static void Fetch()
  110  {
  111      EXEC SQL BEGIN DECLARE SECTION;
  112      char XCUSTOM_CD[6];
  113      char XCUSTOM_NAME[31];
  114      char XTELNO[13];
  115      char XZIPCD[4];
  116      char XADDRESS[31];
  117      EXEC SQL END DECLARE SECTION;
  118
  119      EXEC SQL
  120        WHENEVER SQLERROR  GOTO :Exit_Fetch;
  121
  122      EXEC SQL
  123         DECLARE CUR2 CURSOR FOR SEL1;                           7
  124
  125  /***********************************************************/
  126  /*  OPEN CURSOR                                            */
  127  /***********************************************************/
  128      printf("***** DYNAMIC CURSOR open start¥n");
  129      EXEC SQL
  130        OPEN CUR2;                                               8
  131      printf("***** DYNAMIC CURSOR open : END¥n");
  132
  133
  134  /***********************************************************/
  135  /*  FETCH                                                  */
  136  /***********************************************************/
  137      printf("***** fetch (use sqlda) start¥n");
  138
  139
  140      EXEC SQL
  141        WHENEVER NOT FOUND GOTO FETCH2_END;
  142
  143      for(;;) {
  144          ClearSqlda(5);                                         9
  145          PDSQLDATA(xsqlda, 0) = (void *)XCUSTOM_CD;        (a)  9
  146          PDSQLCOD(xsqlda, 0) = PDSQL_CHAR;                 (a)  9
  147          PDSQLLEN(xsqlda, 0) = sizeof(XCUSTOM_CD)-1;       (a)  9
  148          PDSQLDATA(xsqlda, 1) = (void *)XCUSTOM_NAME;      (b)  9
  149          PDSQLCOD(xsqlda, 1) = PDSQL_CHAR;                 (b)  9
  150          PDSQLLEN(xsqlda, 1) = sizeof(XCUSTOM_NAME)-1;     (b)  9
  151          PDSQLDATA(xsqlda, 2) = (void *)XTELNO;            (c)  9
  152          PDSQLCOD(xsqlda, 2) = PDSQL_CHAR;                 (c)  9
  153          PDSQLLEN(xsqlda, 2) = sizeof(XTELNO)-1;           (c)  9
  154          PDSQLDATA(xsqlda, 3) = (void *)XZIPCD;            (d)  9
  155          PDSQLCOD(xsqlda, 3) = PDSQL_CHAR;                 (d)  9
  156          PDSQLLEN(xsqlda, 3) = sizeof(XZIPCD)-1;           (d)  9
  157          PDSQLDATA(xsqlda, 4) = (void *)XADDRESS;          (e)  9
  158          PDSQLCOD(xsqlda, 4) = PDSQL_CHAR;                 (e)  9
  159          PDSQLLEN(xsqlda, 4) = sizeof(XADDRESS)-1;         (e)  9
  160
  161          memset(XCUSTOM_CD, 0, sizeof(XCUSTOM_CD));
  162          memset(XCUSTOM_NAME, 0, sizeof(XCUSTOM_NAME));
  163          memset(XTELNO, 0, sizeof(XTELNO));
  164          memset(XZIPCD, 0, sizeof(XZIPCD));
  165          memset(XADDRESS, 0, sizeof(XADDRESS));
  166
  167          EXEC SQL FETCH CUR2
  168            USING DESCRIPTOR :xsqlda;                            10
  169
  170          printf("%s ", XCUSTOM_CD);
  171          printf("%s ", XCUSTOM_NAME);
  172          printf("%s ", XTELNO);
  173          printf("%s ", XZIPCD);
  174          printf("%s¥n", XADDRESS);
  175      }
  176  FETCH2_END:
  177      printf("***** fetch : END¥n");
  178
  179  /***********************************************************/
  180  /*  CLOSE CURSOR                                           */
  181  /***********************************************************/
  182      printf("*****  close start¥n");
  183      EXEC SQL
  184        WHENEVER NOT FOUND  CONTINUE;
  185      EXEC SQL
  186        CLOSE CUR2;                                              11
  187      printf("*****  close : END¥n");
  188
  189  /***********************************************************/
  190  /*                                                         */
  191  /***********************************************************/
  192  Exit_Fetch:
  193      if(SQLCODE < 0){
  194          errmsg();
  195          ErrFlg = -1;
  196      }
  197      return;
  198  }
  199
  200
  201  /***********************************************************/
  202  /*  DESCRIBE                                               */
  203  /***********************************************************/
  204  static void Describe()
  205  {
  206      short  i;
  207
  208      EXEC SQL
  209        WHENEVER SQLERROR  GOTO :Exit_Describe;
  210
  211  /***********************************************************/
  212  /*  PREPARE                                                */
  213  /***********************************************************/
  214      printf("***** prepare start¥n");
  215      EXEC SQL                                                   12
  216        PREPARE SEL1                                             12
  217          FROM 'SELECT * FROM CUSTOM'                            12
  218          WITH SQLNAME OPTION;                                   12
  219      printf("***** prepare  : END¥n");
  220
  221  /***********************************************************/
  222  /*  DESCRIBE                                               */
  223  /***********************************************************/
  224      PDSQLN(xsqlda) = 10;
  225      printf("***** describe start¥n");
  226      EXEC SQL
  227         DESCRIBE SEL1 INTO :xsqlda :ucnda;                      13
  228      printf("***** describe : END¥n");
  229
  230      printf(" describe result¥n");
  231      printf("  NUMBER OF DATA = %d¥n", PDSQLD(xsqlda));
  232      printf("  NUMBER OF COLUMN NAME = %d¥n", ucnda.sqlnz);
  233      for (i = 0 ; i < ucnda.sqlnz ; i++ ) {
  234          printf(" [%d]", i );
  235          printf(" DATA TYPE(%d)", PDSQLCOD(xsqlda, i));
  236          printf(" DATA LENGTH(%d)", PDSQLLEN(xsqlda, i));
  237          printf(" COLUMN NAME(%s)¥n", ucnda.SQLNAME[i].sqlnamec);
  238      }
  239
  240  /***********************************************************/
  241  /*                                                         */
  242  /***********************************************************/
  243  Exit_Describe:
  244      if(SQLCODE < 0){
  245          errmsg();
  246          ErrFlg = -1;
  247      }
  248      return;
  249  }
  250
  251
  252  /***********************************************************/
  253  /*  Clear SQLDA                                            */
  254  /***********************************************************/
  255  static void ClearSqlda(
  256  short num)
  257  {
  258      PDSQLN(xsqlda) = num;                                      14
  259      PDSQLD(xsqlda) = num;                                      14
  260      while(num-->0){
  261          PDSQLDATA(xsqlda, num) = NULL;                         15
  262          PDSQLIND(xsqlda, num)  = NULL;                         15
  263          PDSQLDIM(xsqlda, num) = 0;                             15
  264          PDSQLXDIM(xsqlda, num) = 1;                            15
  265          PDSQLSYS(xsqlda, num) = 0;                             15
  266          PDSQLCOD(xsqlda, num) = 0;                             15
  267          PDSQLLEN(xsqlda, num) = 0;                             15
  268      }
  269      return;
  270  }
  271
  272
  273  /**********************************************************/
  274  /*                                                         */
  275  /*  WARNING                                                */
  276  /*                                                         */
  277  /***********************************************************/
  278  static void errmsg()
  279  {
  280      int wsqlcode;
  281
  282      if(SQLCODE > 0){
  283          printf(">>>警告¥n");
  284      }
  285      if(SQLCODE < 0){
  286          printf(">>> 異常発生¥n");
  287      }
  288      wsqlcode = SQLCODE;
  289      printf(">>> sqlcode = %d¥n", SQLCODE);
  290      printf(">>> sqlwarn = %c", SQLWARN0);
  291      printf("%c", SQLWARN1);
  292      printf("%c", SQLWARN2);
  293      printf("%c", SQLWARN3);
  294      printf("%c", SQLWARN4);
  295      printf("%c", SQLWARN5);
  296      printf("%c", SQLWARN6);
  297      printf("%c", SQLWARN7);
  298      printf("%c", SQLWARN8);
  299      printf("%c", SQLWARN9);
  300      printf("%c", SQLWARNA);
  301      printf("%c", SQLWARNB);
  302      printf("%c¥n", SQLWARNC);
  303
  304  #if defined(HIUXWE2) || defined(WIN32)
  305      printf(">>> message = %s¥n", SQLERRMC);
  306  #else
  307      printf(">>> message = %Fs¥n", SQLERRMC);
  308  #endif
  309      return;
  310  }

＜説明＞

提供ヘッダファイルのインクルード

SQL記述領域に設定・参照するとき用いるデータコードの定数宣言や，SQL記述領域自体のデータ型を宣言します。

SQL記述領域の宣言

UAPでユーザが独自に使用するSQL記述領域を定義します。データ型は提供ヘッダファイルの中で定義されているものです。

列名記述領域の宣言

列名をDESCRIBE文で取得するときに用いる，変数を定義します。

HiRDBへの接続

環境変数PDUSERに定義されている認可識別子とパスワードを使用してサーバに接続します。

顧客表（CUSTOM）の検索

顧客表（CUSTOM）の各列の列名を取得し，表に格納されているすべての行をユーザ定義のSQL記述領域を用いて検索して表示します。

HiRDBの切り離し

UAPをサーバから切り離します。

カーソルCUR2の宣言

顧客表（CUSTOM）の行を検索するために，カーソルCUR2を宣言します。

カーソルCUR2のオープン

顧客表（CUSTOM）の検索行の直前にカーソルを位置づけて，行を取り出せる状態にします。

ユーザ定義のSQL記述領域の設定

FETCH文実行時に指定する，ユーザ定義のSQL記述領域の設定をします。

(a) １列目のデータを格納する領域のアドレスとデータコード，データ長を設定します。

(b) ２列目のデータを格納する領域のアドレスとデータコード，データ長を設定します。

(c) ３列目のデータを格納する領域のアドレスとデータコード，データ長を設定します。

(d) ４列目のデータを格納する領域のアドレスとデータコード，データ長を設定します。

(e) ５列目のデータを格納する領域のアドレスとデータコード，データ長を設定します。

顧客表の行の取り出し

顧客表（CUSTOM）から，カーソルCUR2の示す行を１行取り出し，ユーザ定義のSQL記述領域が示す領域に設定します。

カーソルCUR2のクローズ

カーソルCUR2を閉じます。

SQLの動的実行の用意

DESCRIBE文で顧客表（CUSTOM）の各列の列名とデータ型，データ長を取得するために，表を検索するSELECT文を用意します。

列名とデータ型の取得

顧客表（CUSTOM）の各列のデータ型，データ長を取り出して，ユーザ定義のSQL記述領域に設定します。また，各列の列名を取り出して，ユーザ列名記述領域に設定します。

ユーザ定義のSQL記述領域の列数の設定

ユーザ定義のSQL記述領域に，SQL記述領域の大きさと取得する列の個数を設定します。

ユーザ定義のSQL記述領域のクリア

ユーザ定義のSQL記述領域の中の，各列に対応した領域をクリアします。

(3)　LOBデータを操作する例

(a)　PADチャート

プログラム例題3のPADチャートを次の図に示します。

図7‒8　プログラム例題3のPADチャート（1/3）

図7‒9　プログラム例題3のPADチャート（2/3）

図7‒10　プログラム例題3のPADチャート（3/3）

(b)　コーディング例

プログラム例題3のコーディング例を次に示します。

    1  /******************************************************/
    2  /*                                                    */
    3  /* ALL RIGHTS RESERVED,COPYRIGHT (C)1997,HITACHI,LTD. */
    4  /* LICENSED MATERIAL OF HITACHI,LTD.                  */
    5  /*                                                    */
    6  /******************************************************/
    7
    8
    9  #include <stdio.h>
   10  #include <stdlib.h>
   11  #include <stddef.h>
   12  #include <ctype.h>
   13  #include <string.h>
   14
   15  static void InitTable();
   16  static void TestBlob();
   17  static void warning();
   18
   19
   20  /***********************************************************/
   21  /*  GLOBAL VARIABLE                                        */
   22  /***********************************************************/
   23  short ErrFlg;
   24
   25  EXEC SQL BEGIN DECLARE SECTION;
   26     short XSINT_IN;
   27     short XSINT_OUT;
   28     long  XINT_IN;
   29     long  XINT_OUT;
   30     SQL TYPE IS BLOB(16K) XBLOB_IN;                             1
   31     SQL TYPE IS BLOB(16K) XBLOB_OUT;                            1
   32  EXEC SQL END DECLARE SECTION;
   33
   34  /*
   35   *   name = MAIN
   36   *   func =  SAMPLE
   37   *   io   =  argc : i :
   38   *           argv : i :
   39   *   return = 0,-1
   40   *   note   =  This program needs "RDUSER02" rdarea on Server.
   41   *   date =  98.04.24 by matsushiba
   42   */
   43  int main(
   44  int   argc,
   45  char  *argv[])
   46  {
   47      ErrFlg = 0;
   48
   49  /*************************************************************/
   50  /*                                                           */
   51  /*************************************************************/
   52      EXEC SQL
   53        WHENEVER SQLERROR goto ERREXIT;
   54
   55      EXEC SQL
   56        WHENEVER SQLWARNING PERFORM :warning;
   57
   58      EXEC SQL CONNECT;                                          2
   59
   60
   61  /***********************************************************/
   62  /*  INIT                                                   */
   63  /***********************************************************/
   64      InitTable();                                               3
   65      if(ErrFlg < 0){                                            3
   66          goto ERREXIT;                                          3
   67      }                                                          3
   68
   69  /**************************************************/
   70  /*                                                */
   71  /**************************************************/
   72      TestBlob();                                                4
   73      if(ErrFlg < 0){                                            4
   74          goto ERREXIT;                                          4
   75      }                                                          4
   76
   77  /*************************************************************/
   78  /*                                                           */
   79  /*************************************************************/
   80  ERREXIT:
   81      if(SQLCODE < 0){
   82          printf(":> ERROR HAPPENED!!¥n");
   83          warning();
   84          ErrFlg = -1;
   85      }
   86
   87      EXEC SQL
   88        WHENEVER SQLERROR  CONTINUE;
   89      EXEC SQL
   90        WHENEVER NOT FOUND CONTINUE;
   91      EXEC SQL
   92        WHENEVER SQLWARNING CONTINUE;
   93
   94      EXEC SQL DISCONNECT;                                       5
   95
   96      return(ErrFlg);
   97  }
   98
   99
  100  /***********************************************************/
  101  /*  INIT                                                   */
  102  /***********************************************************/
  103  static void InitTable()
  104  {
  105
  106  /************************************************************/
  107  /*                                                          */
  108  /************************************************************/
  109      EXEC SQL
  110        WHENEVER SQLERROR  CONTINUE;
  111
  112      EXEC SQL                                                   6
  113       DROP TABLE SMPTBL;                                        6
  114                                                                 6
  115      EXEC SQL                                                   6
  116        CREATE SCHEMA;                                           6
  117
  118      printf("## CREATE TABLE¥n");
  119
  120      EXEC SQL
  121        WHENEVER SQLERROR  GOTO INIT_ERROR;
  122
  123      printf("## CREATE SMPTBL¥n");
  124      EXEC SQL                                                   7
  125        CREATE TABLE SMPTBL(CLM1  BLOB(30K) IN RDUSER02,         7
  126                            CLM2  SMALLINT,                      7
  127                            CLM3  INTEGER);                      7
  128
  129      return;
  130
  131  INIT_ERROR:
  132      warning();
  133      ErrFlg = -1;
  134      return;
  135  }
  136
  137
  138
  139  /**********************************************************/
  140  /*  TEST BLOB                                             */
  141  /**********************************************************/
  142  static void TestBlob()
  143  {
  144      short cnt;
  145
  146      EXEC SQL
  147        WHENEVER  SQLERROR goto :ExitTestBlob;
  148
  149      EXEC SQL
  150        WHENEVER  SQLWARNING PERFORM :warning;
  151
  152  /**********************************************************/
  153  /*  INSERT                                                */
  154  /**********************************************************/
  155      memset(XBLOB_IN.XBLOB_IN_data,
  156             0x55,
  157             sizeof(XBLOB_IN.XBLOB_IN_data));
  158      XBLOB_IN.XBLOB_IN_length = sizeof(XBLOB_IN.XBLOB_IN_data);
  159
  160      printf("## INSERT ¥n");
  161      for(cnt=1; cnt<5; cnt++){
  162          XSINT_IN = cnt;
  163          XINT_IN = 100+cnt;
  164          EXEC SQL                                               8
  165            INSERT INTO SMPTBL                                   8
  166                VALUES(:XBLOB_IN, :XSINT_IN, :XINT_IN);          8
  167      }
  168      EXEC SQL COMMIT;
  169
  170  /**********************************************************/
  171  /*  FETCH                                                 */
  172  /**********************************************************/
  173      printf("## FETCH ¥n");
  174
  175      EXEC SQL                                                   9
  176        DECLARE CUR_BLOB CURSOR FOR                              9
  177           SELECT * FROM SMPTBL;                                 9
  178
  179      EXEC SQL
  180        OPEN CUR_BLOB;                                           10
  181
  182      EXEC SQL
  183        WHENEVER NOT FOUND GOTO FETCH_END;
  184
  185      for(;;){
  186          memset(XBLOB_OUT.XBLOB_OUT_data,
  187                 0,
  188                 sizeof(XBLOB_OUT.XBLOB_OUT_data));
  189          XBLOB_OUT.XBLOB_OUT_length = 0;
  190          EXEC SQL                                               11
  191            FETCH CUR_BLOB INTO :XBLOB_OUT,                      11
  192                                :XSINT_OUT,                      11
  193                                :XINT_OUT;                       11
  194
  195              printf("CLM1 XBLOB_length == %d¥n",
  196                      XBLOB_OUT.XBLOB_OUT_length);
  197              printf("CLM2 = %d¥n", XSINT_OUT);
  198              printf("CLM3 = %ld¥n", XINT_OUT);
  199      }
  200  FETCH_END:
  201      EXEC SQL
  202        WHENEVER NOT FOUND CONTINUE;
  203
  204      EXEC SQL
  205        CLOSE CUR_BLOB;                                          12
  206
  207  /**********************************************************/
  208  /*  UPDATE                                                */
  209  /**********************************************************/
  210      memset(XBLOB_IN.XBLOB_IN_data,
  211             0x38,
  212             sizeof(XBLOB_IN.XBLOB_IN_data));
  213      XBLOB_IN.XBLOB_IN_length = sizeof(XBLOB_IN.XBLOB_IN_data);
  214
  215      printf("## UPDATE¥n");
  216      EXEC SQL
  217        UPDATE SMPTBL SET CLM1=:XBLOB_IN;                        13
  218
  219      EXEC SQL COMMIT;
  220
  221  /***********************************************************/
  222  /*                                                         */
  223  /***********************************************************/
  224  ExitTestBlob:
  225      if(SQLCODE < 0){
  226          warning();
  227          ErrFlg = -1;
  228      }
  229      return;
  230  }
  231
  232
  233  /***********************************************************/
  234  /*  WARNING                                                */
  235  /***********************************************************/
  236  static void warning()
  237  {
  238      if(SQLCODE < 0){
  239          printf(">>>ERROR¥n");
  240          printf(">>> sqlcode = %d¥n", SQLCODE);
  241  #if defined(HIUXWE2) || defined(WIN32)
  242          printf(":> message = %s¥n", SQLERRMC);
  243  #else
  244          printf(":> message = %Fs¥n", SQLERRMC);
  245  #endif
  246      }
  247      else{
  248          printf(">>>WARNING¥n");
  249          printf(">>> sqlwarn = %c", SQLWARN0);
  250          printf("%c", SQLWARN1);
  251          printf("%c", SQLWARN2);
  252          printf("%c", SQLWARN3);
  253          printf("%c", SQLWARN4);
  254          printf("%c", SQLWARN5);
  255          printf("%c", SQLWARN6);
  256          printf("%c", SQLWARN7);
  257          printf("%c", SQLWARN8);
  258          printf("%c", SQLWARN9);
  259          printf("%c", SQLWARNA);
  260          printf("%c", SQLWARNB);
  261          printf("%c¥n", SQLWARNC);
  262      }
  263      return;
  264  }

＜説明＞

LOB型の埋込み変数の宣言

書き込み用のLOB型の埋込み変数(：XBLOB_IN)と，読み取り用のLOB型の埋込み変数（:XBLOB_OUT）を宣言します。

HiRDBへの接続

環境変数PDUSERに定義されている認可識別子とパスワードを使用してサーバに接続します。

表の初期化

LOB型の列を持つ表（SMPTBL）を定義します。

LOBデータの挿入・検索・更新

空の表（SMPTBL）にLOB型の列を含む行を挿入し，すべての行を検索した後，LOB型の列の内容を新しいLOBデータに更新します。

HiRDBの切り離し

UAPをサーバから切り離します。

表（SMPTBL）を作成するための準備

LOB型の列を含む表（SMPTBL）を作成するため，同名の表があった場合は削除し，スキーマがないときのためにスキーマを生成します。

LOB型の列を含む表（SMPTBL）を作成する

LOB型の列を含む表（SMPTBL）を作成します。LOBデータはLOB専用のRDエリア（RDUSER02）に格納するように定義するので，サーバにユーザLOB用RDエリアを作成しておかなければなりません。ユーザLOB用RDエリアがない場合はエラーとなります。

LOBデータの追加

LOB型の列を持つ表（SMPTBL）に，埋込み変数（:XBLOB_IN，:XINT_IN，:XSINT_IN）に設定した値を追加します。

カーソルCUR_BLOBの宣言

LOB型の列を含む表（SMPTBL）を検索するために，カーソルCUR_BLOBを宣言します。

カーソルCUR_BLOBのオープン

LOB型の列を含む表（SMPTBL）の検索行の直前にカーソルを位置づけて，各行を取り出せる状態にします。

LOB型データの取り出し

LOB型の列を含む表（SMPTBL）のカーソルCUR_BLOBの示す行を１行取り出し，埋込み変数（:XBLOB_OUT，:XINT_OUT，:XSINT_OUT）に設定します。

カーソルCUR_BLOBのクローズ

カーソルCUR_BLOBを閉じます。

LOBデータの更新

表（SMPTBL）のLOB型の列の値を，埋込み変数（：XBLOB_IN）の値で更新します。

7.3　COBOL言語によるUAPの作成

ここでは，COBOL言語による埋込み型UAPの記述規則，及び作成例について説明します。

7.3.1　記述規則

UAPを作成するとき，SQLの文法の規則以外に，名標の付け方やSQLの記述についての規則があります。

(1)　名標の付け方の規則

名標を付ける場合，基本的にCOBOL言語の規則に従います。

COBOL言語の規則以外に，名標を付けるときの規則を次に示します。

(a)　SQLの予約語

大文字でも小文字でも使用できます。

大文字と小文字を混在できます。

(b)　ホスト名

「SQL」で始まる名標は使用できません。

ホスト名中のコロンの後ろに空白を記述できます。

大文字と小文字は同等に使用できます。

大文字と小文字は混在できます。

全角と半角の，英字，数字，記号，片仮名，及び空白は異なる文字として扱われます。

なお，使用する埋込み変数，標識変数，及び分岐先の名前の付け方は，名標の付け方の規則，及びCOBOL言語の規則に従います。また，次に示す名標は外部属性を持つため，使用できないので注意してください。

大文字の「SQL」で始まる名標

小文字の「p_」で始まる名標

小文字の「pd」で始まる名標

(2)　SQLの記述規則

SQLは，一つのSQL文ごとにSQL先頭子（EXEC SQL）とSQL終了子（END-EXEC）とで囲みます。

<指定例>

  EXEC SQL  SQL文    END-EXEC.

COBOL言語とSQLとを同一行に混在できません。

SQLは，SQL先頭子，及びSQL終了子も含めてすべてB領域（第12欄〜72欄）に記述します。

SQLの継続規則は，原則としてCOBOL言語の「行のつなぎ」の規則に従います。

SQLで空白を必ず挿入する箇所，又は空白を挿入できる箇所であれば，自由に行を変えて記述できます。また，複数行にわたって記述することもできます。

SQLで空白を挿入できない箇所で行を変えるときは，次の行の標識領域にハイフン（-）を記述して，B領域の任意の欄から行の続きを記述します。

文字列定数の途中で行を変えるときは，必ず第72欄まで記述し，続きを次の行のB領域に記述します。また，文字列の続きは，最初に引用符又はアポストロフィ（引用符又はアポストロフィの最初に記述した方）を記述し，その引用符又はアポストロフィの次の欄から記述します。

SQL先頭子の直前に，段落の見出しを記述できます。

なお，段落の見出しを同一行には記述できません。

<正しい指定例>

  OWARI.
      EXEC SQL  SQL文    END-EXEC.

<誤った指定例>

  OWARI.  EXEC SQL  SQL文
             END-EXEC.

注　　部分が誤りです。

一つのSQLは，COBOL言語での一つの命令として扱われます。したがって，SQLが一つの完結文の最後の命令になる場合，SQL終了子の後ろに終止符と空白を指定します。

<一つのSQLが一つの完結文の場合の指定例>

  EXEC SQL
       SQL文
  END-EXEC.

<SQLが完結文中の最後の命令の場合の指定例>

  IF U-IOKBN = '2'
  THEN
      EXEC SQL   SQL文   END-EXEC.

<SQLが完結文の途中の命令の場合の指定例>

  IF U-IOKBN = '1'
  THEN
    EXEC SQL   SQL文
    END-EXEC
  ELSE  IF  U-IOKBN = '2'
    THEN  NEXT  SENTENCE.

SQL中には注記行を記述できませんが，SQL先頭子とSQL終了子の間には，注記行を何行でも記述できます。

<指定例>

  EXEC SQL
  *ZAIKO表を検索するSELECT文に対して　　…注記行
  *カーソルを宣言する　　　　　　　　　　　…注記行
    SQL文
  END-EXEC.

埋込み変数の宣言は，次に示す規則に従います。

埋込みSQL宣言節は，次のどれかの節内で記述します。

・データ部（DATA DIVISION）のファイル節（FILESECTION）

・作業場所節（WORKING-STORAGE SECTION）

・局所記憶節（LOCAL-STORAGE SECTION）

・連絡節（LINKAGE SECTION）

SQLのデータ型に対応する埋込み変数については，「SQLのデータ型とデータ記述」を参照してください。

埋込み変数のデータ記述項には，JUSTIFIED，BLANK，及びWHEN ZERO句を指定できません。

レベル番号66の再命令項目，及びレベル番号88の条件名項目を埋込み変数としては使用できませんが，埋込みSQL宣言節で定義できます。

埋込みSQL宣言節内のデータ記述項目の行のつなぎは，COBOL言語の「行のつなぎ」の規則に従います。

「FILLER」は埋込み変数として使用できません。

TYPE句，TYPEDEF句，及びSAME AS句を使用したデータ項目は，埋込み変数として使用できます。

REDEFINES句を使用した場合，再定義する項目と再定義される項目のけた詰めが同じかどうかはチェックしていません。領域の大きさは，どちらか大きい方に合わせます。

PICTURE句を省略し，VALUE句だけを指定したデータ項目は，埋込み変数として使用できません。

-E又は/Eオプションを使用すると，埋込みSQL宣言節を使用しなくても，宣言したデータ項目を埋込み変数として使用できます。ただし，SQL文で埋込み変数として使用できるのは，「SQLのデータ型とデータ記述」の形式で宣言したデータ項目だけです。そのほかの形式のデータ項目は，埋込み変数として使用できません。

データ項目名は，COBOL言語の文法に従って各データ項目名の有効範囲が判定されます。

COBOL2002のクラス継承機能を使用して，親クラスから継承したデータ項目は，埋込み変数として使用できません。

COBOL2002のUnicode機能を使用するUAPでは，SQLプリプロセサ実行時に-XU16又は/XU16オプションを指定すると，UTF-16の文字データを格納する日本語項目を埋込み変数として使用できます。日本語項目を使用した埋込み変数は，SQL文中で混在文字データ型（MCHAR又はMVARCHAR）に対応する埋込み変数が使用できる箇所なら，どこにでも埋め込むことができます。なお，使用できる文字の範囲はCOBOL2002のUnicode機能がサポートする範囲内に限定されます。

COBOL2002のUnicode機能を使用したUAPの実行については「COBOL2002のUnicode機能を使用したUAPの実行」を参照してください。

標識変数の宣言は，次に示す規則に従います。

標識変数は，レベル番号01〜49の基本項目，又はレベル番号77の独立項目であることが前提になります。

標識変数のデータ記述項については，「SQLのデータ型とデータ記述」を参照してください。

標識変数のデータ記述項目には，SIGN，JUSTIFIED，BLANK，及びWHEN ZERO句を指定できません。

「FILLER」は，標識変数名として使用できません。

-E又は/Eオプションを使用すると，埋込みSQL宣言節を使用しなくても，宣言したデータ項目を標識変数として使用できます。ただし，SQL文で標識変数として使用できるのは，「SQLのデータ型とデータ記述」の形式で宣言したデータ項目だけです。そのほかの形式のデータ項目は，標識変数として使用できません。

データ項目名は，COBOL言語の文法に従って各データ項目名の有効範囲が判定されます。

COBOL2002のクラス継承機能を使用して，親クラスから継承したデータ項目は，標識変数として使用できません。

COBOL言語でのSQLを記述できる部（DIVISION）を次の表に示します。

表7‒3　COBOL言語でのSQLを記述できる部

SQL文

データ部※

手続き部

定義系SQL

×

○

操作系SQL

×

○

制御系SQL

×

○

埋込み言語

BEGIN DECLARE SECTION

○

×

END DECLARE SECTION

○

×

COPY

○

○

WHENEVER

×

○

DECLARE CONNECTION HANDLE UNSET

×

×

COMMAND EXECUTE

×

×

上記以外

×

○

（凡例）

○：記述できます。

×：記述できません。

注※

作業場所節，ファイル節，又は連絡節の中の一つを指します。

WHENEVER文，及びカーソル宣言は宣言文なので，IF命令，及びEVALUATE命令中には記述できません。

SQL先頭子とSQL終了子で囲まれたSQL文の途中には，コンパイルリスト出力制御（EJECT，SKIP1，SKIP2，SKIP3，又はTITLE）を記述しないでください。表名や列名としてEJECT，SKIP1，SKIP2，SKIP3，又はTITLEを使用する場合は，必ず引用符で囲んでください。なお，表名や列名などが語句の一部分としてEJECT，SKIP1，SKIP2，SKIP3，又はTITLEを含む場合は，囲む必要はありません。

注釈の規則を次に示します。

SQL先頭子からSQL終了子までの間に記述した囲み注釈（/*〜*/）及び単純注釈（-- 〜 改行）はSQLプリプロセサが削除します。ただし，SQL最適化指定（/*>>〜<<*/）は削除しないで，SQL文として扱います。また，引用符（"）やアポストロフィ（'）で囲まれた部分にある「/*〜*/」及び「--〜改行」は削除しません。

SQL先頭子がある行とSQL終了子がある行の間にある注釈行，デバッグ行はポストソースから除かれます。

囲み注釈及びSQL最適化指定を複数行にわたって記述している場合は，*/が現れるまで行の先頭はB領域の先頭から始まっているとみなされます。

プリプロセスオプション-Xs又は/Xsを指定した場合にだけ，SQL先頭子からSQL終了子までの間に単純注釈を記述できます。

単純注釈の開始を示す「--」はB領域に記述します。「--」から行の末尾までにあるすべての文字が注釈になります。行の末尾が見出し領域にあってもかまいません。

行末に囲み注釈又は単純注釈がある場合に，次の行の標識領域に継続標識「−」を指定しないでください。この場合，継続標識を指定しても，注釈の前にある字句と次の行にある字句を，空白を挟まずにつなぐことはできません。

単純注釈とSQL終了子を同じ行に記述することはできません。

<単純注釈の正しい指定例>

EXEC SQL -- 注釈1
    CALL PROC1(0) -- 注釈2
END-EXEC.

<単純注釈の誤った指定例1>

EXEC SQL CALL PROC1(0) -- 注釈1  END-EXEC.

この場合，単純注釈の中にEND-EXECがあるため，END-EXECがSQL終了子としてみなされません。

<単純注釈の誤った指定例2>

EXEC SQL CALL PROC1(0) END-EXEC. -- 注釈1

この場合，「-- 〜 改行」がSQL先頭子からSQL終了子（END-EXEC）の範囲外にあるため，「-- 〜 改行」が注釈としてみなされません。

SQL文中での囲み注釈，単純注釈，及びSQL最適化指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

行内注記（*>）を使用できます。ただし，SQL先頭子からSQL終了子までの間は，行内注記を使用できません。使用した場合，行内注記ではなく文字列として扱われます。

埋込みSQL宣言節，及びSQLに記述した行では，タブコードを長さ1文字として扱います。また，-E2又は/E2，及び-E3又は/E3オプションを使用した場合，すべてのデータ部が同様に，タブコードを長さ1文字として扱います。

COBOL2002のオブジェクト指向機能を使用する場合，「SQLの記述規則」も適用されます。

ソースに登録集原文を引き込む方法として，COBOLのCOPY文又はINCLUDE文と，SQLのCOPY文があります。それぞれ登録集原文中に記述できる項目を次に示します。

記述項目

登録集原文を引き込む方法

COBOLのCOPY文

又はINCLUDE文

SQLのCOPY文

SQL文

COPY

×

×

COPY以外

×

○

埋込み変数と標識変数の宣言

×

○

（凡例）

○：記述できます。

×：記述できません。

-Xr又は/Xrオプションを指定しない場合，SQL文の種類によって，SQL文実行時のRETURN-CODE特殊レジスタの更新有無が変わります。SQL文の種類によるRETURN-CODE特殊レジスタの更新有無を次の表に示します。

表7‒4　SQL文の種類によるRETURN-CODE特殊レジスタの更新有無

SQL文

RETURN-CODE特殊レジスタ更新有無

分類

種類

-Xr又は/Xr

指定無し

-Xr又は/Xr

指定有り

定義系SQL

すべて

更新する

更新しない

操作系SQL

DECLARE CURSOR文

更新しない

上記以外

更新する

制御系SQL

すべて

更新する

埋込み言語

GET DIAGNOSTICS文

更新する

DECLARE AUDIT INFO SET文

上記以外

更新しない

-Xr又は/Xrオプション指定有無によるプログラム動作の差異の例を，次の図に示します。

図7‒11　-Xr又は/Xrオプション指定有無によるプログラム動作の差異の例

7.3.2　プログラム例題

COBOL言語による埋込み型UAPのプログラム例題を示します。

なお，SQLの文法の詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

(1)　基本的な操作の例

(a)　PADチャート

プログラム例題4のPADチャートを次の図に示します。

図7‒12　プログラム例題4のPADチャート（1/3）

図7‒13　プログラム例題4のPADチャート（2/3）

図7‒14　プログラム例題4のPADチャート（3/3）

(b)　コーディング例

プログラム例題4のコーディング例を次に示します。

000010*ZAIKO KANRI PROG.
000020*
000030*
000040* ALL RIGHTS RESERVED,COPYRIGHT (C)1997 HITACHI,LTD.
000050* LICENSED MATERIAL OF HITACHI,LTD.
000060*
000070 IDENTIFICATION DIVISION.
000080 PROGRAM-ID. ECOBUAP.
000090*
000100 ENVIRONMENT DIVISION.
000110 CONFIGURATION SECTION.
000120 SOURCE-COMPUTER. HITAC.
000130 OBJECT-COMPUTER. HITAC.
000140 INPUT-OUTPUT SECTION.
000150 FILE-CONTROL.
000160     SELECT INPUT-CARD-FILE
000170       ASSIGN TO  DISK
000180       ORGANIZATION IS LINE SEQUENTIAL.
000190     SELECT PRINT-ZAIKO-FILE
000200       ASSIGN TO  LP.
000210*
000220 DATA DIVISION.
000230 FILE SECTION.
000240 FD  INPUT-CARD-FILE
000250                    DATA RECORD USER-CARD-REC I-ZAIKO-REC.
000260*
000270 01  USER-CARD-REC.
000280     02 IUSERID          PIC X(20).
000290     02 IPSWD            PIC X(20).
000300     02 FILLER           PIC X(40).
000310*
000320 01  I-ZAIKO-REC.
000330     02 IKUBUN           PIC X(1).
000340     02 FILLER           PIC X(2).
000350     02 ISCODE           PIC X(4).
000360     02 FILLER           PIC X(2).
000370     02 ISNAME           PIC N(8).
000380     02 ICOL             PIC N(1).
000390     02 ITANKA           PIC X(9).
000400     02 IGRYO            PIC X(9).
000410     02 IIOKBN           PIC X(1).
000420     02 FILLER           PIC X(34).
000430*
000440 FD  PRINT-ZAIKO-FILE RECORDING MODE IS F
000450                      LABEL RECORD IS OMITTED
000460                      DATA RECORD PRINT-ZAIKO-REC.
000470 01  PRINT-ZAIKO-REC      PIC X(132).
000480*
000490 WORKING-STORAGE SECTION.
000500*
000510     EXEC SQL                                            1
000520           BEGIN DECLARE SECTION                         1
000530     END-EXEC.                                           1
000540 77  XUSERID            PIC X(30).                       1
000550 77  XPSWD              PIC X(30).                       1
000560 77  XSCODE             PIC X(4)  VALUE '0000'.          1
000570 77  XSNAME             PIC N(8).                        1
000580 77  XCOL               PIC N(1).                        1
000590 77  XTANKA             PIC S9(9) COMP.                  1
000600 77  XGRYO              PIC S9(9) COMP.                  1
000610* INDICATOR VARIABLE                                     1
000620 77  XISCODE            PIC S9(4) COMP  VALUE 1040.      1
000630 77  XISNAME            PIC S9(4) COMP  VALUE 1050.      1
000640 77  XICOL              PIC S9(4) COMP  VALUE 1060.      1
000650 77  XITANKA            PIC S9(4) COMP  VALUE 1070.      1
000660 77  XIGRYO             PIC S9(4) COMP  VALUE 1080.      1
000670*                                                        1
000680*                                                        1
000690     EXEC SQL                                            1
000700           END DECLARE SECTION                           1
000710     END-EXEC.                                           1
000720*
000730 01  MIDASHI-REC.
000740     02 FILLER          PIC X(13) VALUE SPACE.
000750     02 FILLER          PIC X(32)
000760           VALUE '******  ZAIKO TABLE LIST  ******'.
000770     02 FILLER          PIC X(87) VALUE SPACE.
000780*
000790 01  RETSUMEI-REC.
000800     02 FILLER          PIC X(14) VALUE SPACE.
000810     02 FILLER          PIC X(9)  VALUE 'SCODE'.
000820     02 FILLER          PIC X(16) VALUE 'SNAME'.
000830     02 FILLER          PIC X(8)  VALUE 'COLOR'.
000840     02 FILLER          PIC X(8)  VALUE 'TANKA'.
000850     02 FILLER          PIC X(8)  VALUE 'SURYO'.
000860     02 FILLER          PIC X(69) VALUE SPACE.
000870*
000880 01  LINE-REC.
000890     02 FILLER          PIC X(14) VALUE SPACE.
000900     02 FILLER          PIC X(9)  VALUE '-----  '.
000910     02 FILLER          PIC X(16) VALUE '--------  '.
000920     02 FILLER          PIC X(8)  VALUE '------- '.
000930     02 FILLER          PIC X(8)  VALUE '------- '.
000940     02 FILLER          PIC X(8)  VALUE '------- '.
000950     02 FILLER          PIC X(69) VALUE SPACE.
000960*
000970 01  SELECT-OUT-REC.
000980     02 FILLER          PIC X(14) VALUE SPACE.
000990     02 O-SCODE         PIC X(5).
001000     02 FILLER          PIC X(2)  VALUE SPACE.
001010     02 O-KANJI         CHARACTER TYPE KEIS.
001020        03 O-SNAME         PIC N(8).
001030        03 FILLER          PIC X(2)  VALUE SPACE.
001040        03 O-COL           PIC N(1).
001050        03 FILLER          PIC X(6)  VALUE SPACE.
001060        03 O-TANKA         PIC X(8)  JUST RIGHT.
001070        03 FILLER          PIC X(2)  VALUE SPACE.
001080        03 O-GRYO          PIC X(8)  JUST RIGHT.
001090        03 FILLER          PIC X(69) VALUE SPACE.
001100 77  O-SCODE-NULL       PIC X(5) VALUE '*****'.
001110 77  O-SNAME-NULL       PIC N(8) VALUE NC'−−−−−−'.
001120 77  O-COL-NULL         PIC N(1) VALUE NC'−'.
001130 77  O-TANKA-NULL       PIC X(8) VALUE '********'.
001140 77  O-GRYO-NULL        PIC X(8) VALUE '********'.
001150*
001160 01  I-CARD-ERROR-REC.
001170     02 FILLER          PIC X(14) VALUE SPACE.
001180     02 FILLER          PIC X(41)
001190           VALUE '***  ERROR  ***  NO CARD FOR CONNECT  ***'.
001200     02 FILLER          PIC X(77) VALUE SPACE.
001210*
001220 01  CONNECT-ERROR-REC.
001230     02 FILLER          PIC X(14) VALUE SPACE.
001240     02 FILLER          PIC X(45)
001250           VALUE '***  ERROR  ***  CANNOT CONNECT  ***  CODE = '.
001260     02 CNCT-EC         PIC X(5).
001270     02 FILLER          PIC X(68) VALUE SPACE.
001280*
001290 01  NORMAL-END-REC.
001300     02 FILLER          PIC X(14) VALUE SPACE.
001310     02 FILLER          PIC X(22)
001320           VALUE '***  NORMAL ENDED  ***'.
001330     02 FILLER          PIC X(96) VALUE SPACE.
001340*
001350 01  SQLERR-PRINT-REC.
001360     02 FILLER          PIC X(14) VALUE SPACE.
001370     02 FILLER          PIC X(34)
001380           VALUE '***  HiRDB SQL ERROR MESSAGE-ID = '.
001390     02 RC-MSGID        PIC X(8).
001400     02 FILLER          PIC X(14) VALUE ' SQLERRORMC ='.
001500     02 RC-SQLERRMC     PIC X(62).
001510*
001520 01  WSQLCODE           PIC -(10)9.
001530*
001540 01  WMSGID.
001550     02 FILLER          PIC X(8).
001560     02 MSGID           PIC X(3).
001570*
001580 01  ERRORMSGID.
001590     02 FILLER          PIC X(5) VALUE 'KFPA1'.
001600     02 E-MSGID         PIC X(4).
001610     02 FILLER          PIC X(2) VALUE '-E'.
001620*
001630 01  EOF                PIC X(1) VALUE '0'.
001640 01  ERR-FLG            PIC X(1) VALUE '0'.
001650*
001660*
001670 PROCEDURE DIVISION.
001680 MAIN SECTION.
001690 M-1.
001700     OPEN INPUT  INPUT-CARD-FILE
001710             OUTPUT PRINT-ZAIKO-FILE.
001720     READ INPUT-CARD-FILE
001730           AT END
001740             MOVE '1' TO ERR-FLG
001750             GO TO M-3
001760     END-READ.
001770     MOVE IUSERID TO XUSERID.
001780     MOVE IPSWD TO XPSWD.
001790*
001800     EXEC SQL                                           (a) 2
001810           WHENEVER SQLERROR                            (a) 2
001820              GO TO M-2                                 (a) 2
001830     END-EXEC.                                          (a) 2
001840     EXEC SQL                                           (b) 2
001850           CONNECT USER :XUSERID USING :XPSWD           (b) 2
001860     END-EXEC.                                          (b) 2
001870     PERFORM HENKOU.
001880     GO TO M-3.
001890 M-2.
001900     MOVE '2' TO ERR-FLG.
001910*
001920 M-3.
001930     EVALUATE ERR-FLG
001940       WHEN '0'
001950         PERFORM FUTSUU
001960       WHEN '1'
001970         WRITE PRINT-ZAIKO-REC
001980           FROM I-CARD-ERROR-REC
001990           AFTER ADVANCING 2 LINES
002000       WHEN '2'
002010         MOVE SQLCODE  TO CNCT-EC
002020         WRITE PRINT-ZAIKO-REC
002030           FROM CONNECT-ERROR-REC
002040           AFTER ADVANCING 2 LINES
002050       WHEN '3'
002060         PERFORM IJYOU
002070     END-EVALUATE.
002080 M-4.
002090     CLOSE INPUT-CARD-FILE
002100           PRINT-ZAIKO-FILE.
002110 M-EX.
002120     EXEC SQL
002130        WHENEVER SQLERROR   CONTINUE
002140     END-EXEC.
002150     EXEC SQL
002160        WHENEVER NOT FOUND  CONTINUE
002170     END-EXEC
002180     EXEC SQL
002190        WHENEVER SQLWARNING CONTINUE
002200     END-EXEC.
002210     EXEC SQL
002220        DISCONNECT
002230     END-EXEC.
002240     GOBACK.
002250 HENKOU SECTION.
002260 H-1.
002270     READ INPUT-CARD-FILE
002280       AT END
002290         MOVE '1' TO ERR-FLG
002300     END-READ.
002310     EXEC SQL
002320          WHENEVER SQLERROR
002330            GO TO H-2
002340     END-EXEC.
002350     PERFORM UNTIL EOF = '1' OR ERR-FLG NOT = '0'
002360       EVALUATE IKUBUN
002370         WHEN 'I'
002380           PERFORM TSUIKA
002390         WHEN 'U'
002400           PERFORM KOUSHIN
002410         WHEN 'D'
002420           PERFORM SAKUJO
002430       END-EVALUATE
002440       READ INPUT-CARD-FILE
002450         AT END
002460           MOVE '1' TO EOF
002470       END-READ
002480     END-PERFORM.
002490     GO TO H-EX.
002500 H-2.
002510     MOVE '3' TO ERR-FLG.
002520 H-EX.
002530     EXIT.
002540*
002550 TSUIKA SECTION.
002560 T-1.
002570     MOVE ISCODE  TO XSCODE.
002580     MOVE ISNAME  TO XSNAME.
002590     MOVE ICOL    TO XCOL.
002600     MOVE ITANKA  TO XTANKA.
002610     MOVE IGRYO   TO XGRYO.
002620     EXEC SQL
002610           WHENEVER SQLERROR GO TO T-2
002620     END-EXEC.
002630     EXEC SQL                                                    3
002640           INSERT INTO ZAIKO(SCODE, SNAME, COL, TANKA, ZSURYO)   3
002650              VALUES(:XSCODE, :XSNAME, :XCOL, :XTANKA, :XGRYO)   3
002660     END-EXEC.                                                   3
002670     GO TO T-EX.
002680 T-2.
002690     MOVE '3' TO ERR-FLG.
002700 T-EX.
002710     EXIT.
002720 KOUSHIN SECTION.
002730 K-1.
002740     MOVE ISCODE TO XSCODE.
002750     MOVE IGRYO  TO XGRYO.
002760     EXEC SQL
002770           WHENEVER SQLERROR GO TO K-2
002780     END-EXEC.
002790     EVALUATE IIOKBN
002800       WHEN '1'                                                  4
002810         EXEC SQL                                            (a) 4
002820               UPDATE ZAIKO SET ZSURYO = ZSURYO + :XGRYO     (a) 4
002830                  WHERE SCODE=:XSCODE                        (a) 4
002840         END-EXEC                                            (a) 4
002850       WHEN '2'                                                  4
002860         EXEC SQL                                            (b) 4
002870               UPDATE ZAIKO SET ZSURYO = ZSURYO - :XGRYO     (b) 4
002880                  WHERE SCODE=:XSCODE                        (b) 4
002890         END-EXEC                                            (b) 4
002900     END-EVALUATE.
002910     GO TO K-EX.
002920 K-2.
002930     MOVE '3' TO ERR-FLG.
002940 K-EX.
002950     EXIT.
002960*
002970 SAKUJO SECTION.
002980 S-1.
002990     MOVE ISCODE TO XSCODE.
003010     EXEC SQL
003020           WHENEVER SQLERROR GO TO S-2
003030     END-EXEC.
003040     EXEC SQL                                                   5
003050           DELETE FROM ZAIKO                                    5
003060              WHERE SCODE=:XSCODE                               5
003070     END-EXEC.                                                  5
003080     GO TO S-EX.
003090 S-2.
003100     MOVE '3' TO ERR-FLG.
003110 S-EX.
003120     EXIT.
003130*
003140 FUTSUU SECTION.
003150 F-0.
003160     WRITE PRINT-ZAIKO-REC
003170        FROM MIDASHI-REC
003180        AFTER ADVANCING 4 LINES.
003190     WRITE PRINT-ZAIKO-REC
003200        FROM RETSUMEI-REC
003210        AFTER ADVANCING 2 LINES.
003220     WRITE PRINT-ZAIKO-REC
003230        FROM LINE-REC
003240        AFTER ADVANCING 2 LINES.
003250 F-1.
003260     EXEC SQL
003270           WHENEVER SQLERROR GO TO F-4
003280     END-EXEC.
003290     EXEC SQL                                                (a) 6
003300           DECLARE CR1 CURSOR FOR                            (a) 6
003310             SELECT SCODE,SNAME,COL,TANKA,ZSURYO FROM ZAIKO  (a) 6
003320     END-EXEC.                                               (a) 6
003330     EXEC SQL                                                (b) 6
003340           OPEN CR1                                          (b) 6
003350     END-EXEC.                                               (b) 6
003360 F-2.
003370     EXEC SQL                                                (a) 7
003380           WHENEVER NOT FOUND                                (a) 7
003390              GO TO F-3                                      (a) 7
003400     END-EXEC.                                               (a) 7
003410     EXEC SQL                                                (b) 7
003420           FETCH CR1                                         (b) 7
003430              INTO :XSCODE:XISCODE, :XSNAME:XISNAME,         (b) 7
003440                :XCOL:XICOL, :XTANKA:XITANKA, :XGRYO:XIGRYO  (b) 7
003450     END-EXEC.                                               (b) 7
003460     EXEC SQL
003470          WHENEVER NOT FOUND
003480             CONTINUE
003490     END-EXEC.
003500     IF XISCODE IS >= 0 THEN
003510       MOVE XSCODE TO O-SCODE
003520     ELSE
003530       MOVE O-SCODE-NULL TO O-SCODE
003540     END-IF.
003550     IF XISNAME IS >= 0 THEN
003560       MOVE XSNAME TO O-SNAME
003570     ELSE
003580       MOVE O-SNAME-NULL TO O-SNAME
003590     END-IF.
003600     IF XICOL IS >= 0 THEN
003610       MOVE XCOL TO O-COL
003620     ELSE
003630       MOVE O-COL-NULL TO O-COL
003640     END-IF.
003650     IF XITANKA IS >= 0 THEN
003660       MOVE XTANKA TO O-TANKA
003670     ELSE
003680       MOVE O-TANKA-NULL TO O-TANKA
003690     END-IF.
003700     IF XIGRYO IS >= 0 THEN
003710       MOVE XGRYO TO O-GRYO
003720     ELSE
003730       MOVE O-GRYO-NULL TO O-GRYO
003740     END-IF.
003750     WRITE PRINT-ZAIKO-REC
003760           FROM SELECT-OUT-REC
003770           AFTER ADVANCING 2 LINES.
003780     GO TO F-2.
003790 F-3.
003800     EXEC SQL
003810        WHENEVER SQLERROR   CONTINUE
003820     END-EXEC.
003830     EXEC SQL
003840        WHENEVER NOT FOUND  CONTINUE
003850     END-EXEC
003860     EXEC SQL
003870        WHENEVER SQLWARNING CONTINUE
003880     END-EXEC.
003890     EXEC SQL                                              (a) 8
003900        CLOSE CR1                                          (a) 8
003910     END-EXEC.                                             (a) 8
003920*
003930     EXEC SQL                                              (b) 8
003940        COMMIT                                             (b) 8
003950     END-EXEC.                                             (b) 8
003960*
003970     WRITE PRINT-ZAIKO-REC
003980           FROM NORMAL-END-REC
003990           AFTER ADVANCING 2 LINES.
004000     GO TO F-EX.
004010 F-4.
004020     PERFORM IJYOU.
004030 F-EX.
004040     EXIT.
004050 IJYOU SECTION.
004060 I-1.
004070     MOVE SQLCODE TO WSQLCODE.
004080     MOVE WSQLCODE TO WMSGID.
004090     MOVE MSGID TO E-MSGID.
004100     MOVE ERRORMSGID TO RC-MSGID.
004110     MOVE SQLERRMC TO RC-SQLERRMC.
004120     WRITE PRINT-ZAIKO-REC
004130           FROM SQLERR-PRINT-REC
004140           AFTER ADVANCING 2 LINES.
004150     EXEC SQL                                            (a) 9
004160        WHENEVER SQLERROR   CONTINUE                     (a) 9
004170     END-EXEC.                                           (a) 9
004180     EXEC SQL                                            (a) 9
004190        WHENEVER NOT FOUND  CONTINUE                     (a) 9
004200     END-EXEC.                                           (a) 9
004210     EXEC SQL                                            (a) 9
004220        WHENEVER SQLWARNING CONTINUE                     (a) 9
004230     END-EXEC.                                           (a) 9
004240     EXEC SQL                                            (b) 9
004250        ROLLBACK                                         (b) 9
004260     END-EXEC.                                           (b) 9
004270 I-EX.
004280     EXIT.

＜説明＞

埋込みSQL宣言節の始まりと終わり

UAP中で使用する変数を，BEGIN DECLARE SECTIONとEND DECLARE SECTIONとで囲んで，埋込みSQL宣言節の始まりと終わりを示します。

HiRDBとの接続

(a) 特異状態発生時の指定

以下のSQLの実行後に，エラー（SQLERROR）が発生した場合の処理として，分岐先（M-2）を指定します。

(b) HiRDBへの接続

HiRDBに認可識別子（XUSERID）及びパスワード（XPSWD）を連絡して，UAPがHiRDBを使用できる状態にします。

在庫表への行の追加

在庫表の各列に，埋込み変数に読み込まれた値を追加します。

在庫表の行の更新

(a) 入庫

在庫表から，埋込み変数（:XGNO）に読み込んだ品番をキーとして，更新する行を検索します。検索した行の数量（SURYO）の値に，埋込み変数（:XSURYO）に読み込んだ値を加算して，行を更新します。

(b) 在庫

在庫表から，埋込み変数(:XGNO)に読み込んだ品番をキーとして，更新する行を検索します。検索した行の数量（SURYO）の値に，埋込み変数（:XSURYO）に読み込んだ値を減算して，行を更新します。

在庫表の行の削除

在庫表から，埋込み変数(:XGNO)に読み込んだ品番をキーとして，それと等しいキーを持つ行を削除します。

カーソルCR1の宣言とオープン

(a) カーソルCR1の宣言

在庫表（ZAIKO）の行を検索するために，カーソルCR1を宣言します。

(b) カーソルCR1のオープン

在庫表（ZAIKO）の検索行の直前にカーソルを位置づけて，行を取り出せる状態にします。

在庫表の行の取り出し

(a) 特異状態発生時の処理の指定

以下の在庫表の検索で，FETCH文で取り出す行がない場合（NOT FOUND）の処理として，分岐先（M-３）を指定します。

(b) FETCH文の実行

在庫表（ZAIKO）から，カーソルCR1の示す行を１行取り出して，各埋込み変数に設定します。

トランザクションの終了

(a) カーソルCR1のクローズ

カーソルCR1を閉じます。

(b) トランザクションの終了

現在のトランザクションを正常終了させて，そのトランザクションによるデータベースへの追加，更新，削除の結果を有効にします。

トランザクションの取り消し

(a) 特異状態発生時の処理の指定

以下のSQLの実行でエラー（SQLERROR）や警告（SQLWARNING）が発生した場合，何もしないで次の命令に進むことを指定します。

(b) トランザクションの取り消し

現在のトランザクションを取り消して，そのトランザクションによるデータベースへの追加，更新，削除の結果を無効にします。

(2)　行インタフェースを使用した例

(a)　PADチャート

プログラム例題5のPADチャートを次の図に示します。

図7‒15　プログラム例題5のPADチャート（1/4）

図7‒16　プログラム例題5のPADチャート（2/4）

図7‒17　プログラム例題5のPADチャート（3/4）

図7‒18　プログラム例題5のPADチャート（4/4）

(b)　コーディング例

000010***************************************************************
000020*                                                             *
000030*       埋込み型SQL  COBOL  UAP                               *
000040*        ROW インタフェースサンプル                           *
000050*                           1997/11/27                        *
000060***************************************************************
000070 IDENTIFICATION DIVISION.
000080 PROGRAM-ID.            ROW-SAMPLE.
000090 AUTHOR.                CLIENT.
000100 DATA-WRITTEN.          1997/11/27.
000110 DATA-COMPILED.         ROW-SAMPLE.
000120 REMARKS.
000130*
000140 ENVIRONMENT DIVISION.
000150 CONFIGURATION SECTION.
000160 SOURCE-COMPUTER. HITAC.
000170 OBJECT-COMPUTER. HITAC.
000180 INPUT-OUTPUT SECTION.
000190 FILE-CONTROL.
000200     SELECT OUTLIST  ASSIGN TO LP.
000210*
000220 DATA DIVISION.
000230 FILE SECTION.
000240 FD OUTLIST RECORDING MODE IS F
000250            LABEL RECORD IS OMITTED
000260            DATA RECORD OUTREC.
000270 01  OUTREC             PIC X(80).
000280*
000290 WORKING-STORAGE SECTION.
000300     EXEC SQL
000310       BEGIN DECLARE SECTION
000320     END-EXEC.
000330 01 IN-REC1 IS GLOBAL.
000340   02  IN-CHR1       PIC X(15)       VALUE 'EVA-00'.
000350   02  IN-INT1       PIC S9(9) COMP  VALUE 255.
000360   02  IN-INT2       PIC S9(9) COMP  VALUE 1.
000370
000380 01 XSQLROW  IS GLOBAL.                                          1
000390   02 ROW-CHR1 PIC X(30).                                        1
000400   02 ROW-INT1 PIC S9(9) COMP.                                   1
000410   02 ROW-INT2 PIC S9(9) COMP.                                   1
000420
000430     EXEC SQL
000440       END DECLARE SECTION
000450     END-EXEC.
000460
000470 01 DISP-REC IS GLOBAL.
000480   02  DISP-CHR1       PIC X(15).
000490   02  DISP-INT1       PIC S9(9).
000500   02  DISP-INT2       PIC S9(4).
000510 01  ERRFLG  PIC S9(4) COMP IS GLOBAL.
000520
000530 01  MSG-ERR      PIC X(10) VALUE '!! ERROR'.
000540 01  MSG-CODE IS GLOBAL.
000550     02  FILLER     PIC X(15) VALUE '!! SQLCODE ='.
000560     02  MSG-SQLCODE    PIC S9(9) DISPLAY.
000570 01  MSG-MC IS GLOBAL.
000580     02  FILLER     PIC X(15) VALUE '!! SQLERRMC ='.
000590     02  MSG-SQLERRMC   PIC X(100).
000600
000610 PROCEDURE DIVISION.
000620**********************************************
000630* DISPLAY TITLE
000640**********************************************
000650 MAIN SECTION.
000660    CALL 'DISPLAY-TITLE'.
000670    MOVE ZERO TO ERRFLG.
000680
000690**********************************************
000700* CONNECT
000710**********************************************
000720      EXEC SQL
000730        WHENEVER SQLERROR GOTO ERR-EXIT
000740      END-EXEC
000750
000760      DISPLAY '***** CONNECT '.
000770      EXEC SQL                                                   2
000780        CONNECT                                                  2
000790      END-EXEC.                                                  2
000800      DISPLAY '***** CONNECT : END'.
000810
000820*********************************************************
000830* INIT
000840*********************************************************
000850      DISPLAY '## テーブルの初期化を行います'.
000860      CALL 'INIT-TABLE'.
000870      IF ERRFLG < ZERO
000880        GO TO ERR-EXIT
000890      END-IF
000900      DISPLAY '## 正常です'.
000910
000920*********************************************************
000930* INSERT
000940*********************************************************
000950      DISPLAY '## DATAをINSERT'.
000960      CALL 'TEST-INSERT'.
000970      IF ERRFLG < ZERO
000980        GO TO ERR-EXIT
000990      END-IF
001000      DISPLAY '## 正常です'.
001010
001020*********************************************************
001030* ROW
001040*********************************************************
001050      DISPLAY '## ROW型のテストを行います'.
001060      CALL 'TEST-ROW'.
001070      IF ERRFLG < ZERO
001080        GO TO ERR-EXIT
001090      END-IF
001100      DISPLAY '## 正常です'.
001110
001120*********************************************************
001130* DISCONNECT
001140*********************************************************
001150 ERR-EXIT.
001160      IF SQLCODE < ZERO
001170        MOVE SQLCODE TO MSG-SQLCODE
001180        MOVE SQLERRMC TO MSG-SQLERRMC
001190        DISPLAY MSG-ERR
001200        DISPLAY MSG-CODE
001210        DISPLAY MSG-MC
001220        MOVE -1 TO ERRFLG
001230      END-IF
001240
001250      EXEC SQL
001260        WHENEVER SQLERROR  CONTINUE
001270      END-EXEC
001280      EXEC SQL
001290        WHENEVER NOT FOUND CONTINUE
001300      END-EXEC
001310      EXEC SQL
001320        WHENEVER SQLWARNING CONTINUE
001330      END-EXEC
001340
001350      DISPLAY '##DISCONNECT'
001360
001370      EXEC SQL                                                   3
001380        DISCONNECT                                               3
001390      END-EXEC                                                   3
001400      STOP RUN.
001410
001420************************************************************
001430*  INSERT文のテスト
001440************************************************************
001450 IDENTIFICATION DIVISION.
001460 PROGRAM-ID. TEST-INSERT.
001470 DATA DIVISION.
001480 WORKING-STORAGE SECTION.
001490   01 DCNT PIC S9(9) COMP.
001500 PROCEDURE DIVISION.
001510       EXEC SQL
001520         WHENEVER SQLERROR  GOTO :Exit-Test-Insert
001530       END-EXEC.
001540*********************************************************
001550* INSERT HOST
001560*********************************************************
001570       DISPLAY '***** 埋込み変数によるINSERT start'
001580       MOVE ZERO TO DCNT.
001590 INSERT-LOOP.
001600       COMPUTE IN-INT1 = DCNT
001610       COMPUTE IN-INT2 = DCNT + 100
001620       COMPUTE DCNT = DCNT + 1
001630       EXEC SQL                                                  4
001640         INSERT INTO TT1(CLM1,                                   4
001650                         CLM2,                                   4
001660                         CLM3)                                   4
001670           VALUES (:IN-CHR1,                                     4
001680                   :IN-INT1,                                     4
001690                   :IN-INT2)                                     4
001700       END-EXEC                                                  4
001710       IF DCNT < 20 THEN
001720         GO TO INSERT-LOOP
001730       END-IF
001740       DISPLAY '***** insert : SUCCESS'.
001750*********************************************************
001760*
001770*********************************************************
001780 EXIT-TEST-INSERT.
001790       IF SQLCODE < ZERO
001800         MOVE SQLCODE TO MSG-SQLCODE
001810         MOVE SQLERRMC TO MSG-SQLERRMC
001820         DISPLAY MSG-CODE
001830         DISPLAY MSG-MC
001840         MOVE -1 TO ERRFLG
001850       END-IF
001860       DISPLAY '>> TEST-INSERT <<'
001870       GOBACK.
001880******************************************************
001890*  WARNING
001900******************************************************
001910 INSERT-WARNING.
001920     DISPLAY 'WARINING'
001930     MOVE SQLCODE TO MSG-SQLCODE
001940     MOVE SQLERRMC TO MSG-SQLERRMC
001950     DISPLAY MSG-CODE
001960     DISPLAY MSG-MC.
001970 END PROGRAM TEST-INSERT.
001980
001990******************************************************
002000*  ROWのテスト
002010******************************************************
002020 IDENTIFICATION DIVISION.
002030 PROGRAM-ID. TEST-ROW.
002040 DATA DIVISION.
002050 WORKING-STORAGE SECTION.
002060 PROCEDURE DIVISION.
002070        DISPLAY '***** ROW CURSOR OPEN'
002080        EXEC SQL                                                 5
002090          DECLARE CUR_ROW CURSOR FOR                             5
002100             SELECT ROW FROM TT1                                 5
002110              WHERE CLM2 = 10                                    5
002120              FOR UPDATE OF CLM3                                 5
002130        END-EXEC                                                 5
002140******************************************************
002150*  ROW CURSOR
002160******************************************************
002170        DISPLAY '***** ROW CURSOR OPEN'.
002180        EXEC SQL
002190          WHENEVER SQLERROR  GOTO :Exit-Test-ROW
002200        END-EXEC
002210        EXEC SQL                                                 6
002220          OPEN CUR_ROW                                           6
002230        END-EXEC                                                 6
002240
002250******************************************************
002260*  FETCH ROW CURSOR
002270******************************************************
002280        DISPLAY '***** ROW CURSOR FETCH'
002290        EXEC SQL
002300          WHENEVER NOT FOUND GOTO :Exit-Test-ROW
002310        END-EXEC
002320        EXEC SQL
002330          WHENEVER SQLERROR GOTO :Exit-Test-ROW
002340        END-EXEC
002350        MOVE SPACE TO XSQLROW
002360        EXEC SQL                                                 7
002370          FETCH CUR_ROW INTO :XSQLROW                            7
002380        END-EXEC                                                 7
002390        DISPLAY '## FETCH DATA'
002400        MOVE ROW-CHR1 TO DISP-CHR1
002410        MOVE ROW-INT1 TO DISP-INT1
002420        MOVE ROW-INT2 TO DISP-INT2
002430        DISPLAY DISP-REC
002440
002450        DISPLAY '***** ROW UPDATE'
002460        MOVE 'ANGEL' TO ROW-CHR1
002470        EXEC SQL                                                 8
002480          UPDATE TT1 SET ROW = :XSQLROW                          8
002490           WHERE CURRENT OF CUR_ROW                              8
002500        END-EXEC                                                 8
002510
002520******************************************************
002530*  FETCH ROW CURSOR
002540******************************************************
002550        DISPLAY '***** ROW CURSOR CLOSE'
002560        EXEC SQL
002570          WHENEVER NOT FOUND CONTINUE
002580        END-EXEC
002590        EXEC SQL
002600          WHENEVER SQLERROR CONTINUE
002610        END-EXEC
002620        EXEC SQL                                                 9
002630          CLOSE  CUR_ROW                                         9
002640        END-EXEC.                                                9
002650******************************************************
002660*
002670******************************************************
002680 EXIT-TEST-ROW.
002690        IF SQLCODE < ZERO THEN
002700          MOVE SQLCODE  TO MSG-SQLCODE
002710          MOVE SQLERRMC TO MSG-SQLERRMC
002720          DISPLAY MSG-CODE
002730          DISPLAY MSG-MC
002740          MOVE -1 TO ERRFLG
002750        END-IF
002760        EXEC SQL
002770          WHENEVER NOT FOUND CONTINUE
002780        END-EXEC
002790        EXEC SQL
002800          WHENEVER SQLERROR CONTINUE
002810        END-EXEC
002820        EXEC SQL
002830          COMMIT
002840        END-EXEC
002850        DISPLAY '>> TEST-ROW END <<'
002860        GOBACK.
002870
002880******************************************************
002890*  WARNING
002900******************************************************
002910 ROW-WARNING.
002920     DISPLAY 'WARINING'
002930     MOVE SQLCODE TO MSG-SQLCODE
002940     MOVE SQLERRMC TO MSG-SQLERRMC
002950     DISPLAY MSG-CODE
002960     DISPLAY MSG-MC.
002970 END PROGRAM TEST-ROW.
002980
002990
003000 *****************************************************
003010 *  テーブルの初期化
003020 *****************************************************
003030 IDENTIFICATION DIVISION.
003040 PROGRAM-ID. INIT-TABLE.
003050 DATA DIVISION.
003060 WORKING-STORAGE SECTION.
003070 PROCEDURE DIVISION.
003080       EXEC SQL
003090         WHENEVER SQLERROR CONTINUE
003100       END-EXEC
003110
003120*****************************************************
003130* DROP TABLE
003140*****************************************************
003150       DISPLAY '***** DROP TABLE'.
003160       EXEC SQL                                                  10
003170         DROP TABLE TT1                                          10
003180       END-EXEC                                                  10
003190       DISPLAY '***** CREATE SCHEMA'.
003200       EXEC SQL                                                  11
003210         CREATE SCHEMA                                           11
003220       END-EXEC                                                  11
003230
003240*********************************************************
003250* COMMIT
003260*********************************************************
003270       DISPLAY '***** COMMIT START'.
003280       EXEC SQL
003290         WHENEVER SQLERROR GOTO EXIT-INIT-TABLE
003300       END-EXEC
003310       EXEC SQL
003320         COMMIT
003330       END-EXEC
003340       DISPLAY '***** COMMIT : END'.
003350
003360*********************************************************
003370* CREATE TABLE
003380*********************************************************
003390       DISPLAY '***** create table'.
003400       EXEC SQL                                                  12
003410         CREATE FIX TABLE TT1(CLM1 CHAR(30),                     12
003420                               CLM2 INTEGER,                     12
003430                               CLM3 INTEGER)                     12
003440       END-EXEC                                                  12
003450
003460       DISPLAY '***** create table : SUCCESS'.
003470
003480******************************************************
003490*
003500******************************************************
003510 EXIT-INIT-TABLE.
003520       IF SQLCODE < ZERO THEN
003530         MOVE SQLCODE  TO MSG-SQLCODE
003540         MOVE SQLERRMC TO MSG-SQLERRMC
003550         DISPLAY MSG-CODE
003560         DISPLAY MSG-MC
003570         MOVE -1 TO ERRFLG
003580       END-IF
003590       GOBACK.
003600
003610******************************************************
003620*  WARNING
003630******************************************************
003640 INIT-TABLE-WARNING.
003650     DISPLAY 'WARINING'
003660     MOVE SQLCODE TO MSG-SQLCODE
003670     MOVE SQLERRMC TO MSG-SQLERRMC
003680     DISPLAY MSG-CODE
003690     DISPLAY MSG-MC.
003700 END PROGRAM INIT-TABLE.
003710
003720******************************************************
003730*  DISPLAY
003740******************************************************
003750 IDENTIFICATION DIVISION.
003760 PROGRAM-ID. DISPLAY-TITLE.
003770 DATA DIVISION.
003780 WORKING-STORAGE SECTION.
003790 PROCEDURE DIVISION.
003800     DISPLAY '##############################################'
003810     DISPLAY '#                                            #'
003820     DISPLAY '# このプログラムはROW型インタフェースの     #'
003830     DISPLAY '#   サンプルプログラムです                   #'
003840     DISPLAY '#                                            #'
003850     DISPLAY '##############################################'.
003860 END PROGRAM DISPLAY-TITLE.
003870 END PROGRAM ROW-SAMPLE.

＜説明＞

ROW型の埋込み変数の宣言

行インタフェースで使用する埋込み変数（:XSQLROW）を宣言します。

HiRDBへの接続

環境変数PDUSERに定義されている認可識別子とパスワードを使用して，サーバに接続します。

HiRDBの切り離し

UAPをサーバから切り離します。

行の追加

FIX表（TT1）にデータを追加します。

カーソルCUR_ROWの宣言

行インタフェースを使用してFIX表（TT1）を検索するので，カーソルCUR_ROWを宣言します。

カーソルCUR_ROWのオープン

FIX表（TT1）の検索行の直前にカーソルを位置づけて，各行を取り出せる状態にします。

行の取り出し

FIX表（TT1）から，カーソルCUR_ROWの示す行を１行取り出し，埋込み変数（:XSQLROW）に設定します。

行の更新

カーソルCUR_ROWが位置づけられているFIX表（TT1）の行を，埋込み変数（:XSQLROW）の値で更新します。

カーソルCUR_ROWのクローズ

カーソルCUR_ROWを閉じます。

表（TT1）を削除する

FIX表（TT1）を作成するために，同名の表があった場合は削除します。

スキーマの生成

スキーマがないときのために，スキーマを生成します。

FIX表（TT1）の作成

FIX表（TT1）を作成します。行インタフェースはFIX属性の表に対してだけ使用できます。

(3)　TYPE句，TYPEDEF句，及びSAME AS句を使用した例

TYPE句，TYPEDEF句，及びSAME AS句を使用したコーディング例を次に示します。

000100 IDENTIFICATION  DIVISION.
000200 PROGRAM-ID.     CBL001.
000300 DATA            DIVISION.
000400 WORKING-STORAGE SECTION.
000500     EXEC SQL BEGIN DECLARE SECTION END-EXEC.
000600* -- type declaration --
000700 01  VCHR20 TYPEDEF.
000800     05  LEN  PIC S9(4) COMP.
000900     05  STR  PIC X(20).
001000
001100* -- data declaration --
001200 01  D-4C.
001300     05  XCUT     TYPE VCHR20.
001400     05  XCOLOR   PIC X(10).
001500     05  XCLARITY SAME AS XCOLOR.
001600     05  XCARAT   PIC S9(4) COMP.
001700
001800     EXEC SQL END DECLARE SECTION END-EXEC.
   :                 :
   :                 :
002000 PROCEDURE DIVISION.
002100 CB_001 SECTION.
   :                 :
   :                 :
003400 INS-1.
003500       EXEC SQL
003600        INSERT INTO A_DIM (C1, C2, C3, C4)
003700            VALUES (:XCUT, :XCOLOR, :XCLARITY, :XCARAT)
003800       END-EXEC.
   :                :
   :                :
005000 INS-EX.
005100     EXIT.
005200 END PROGRAM CBL001.

7.4　C++言語によるUAPの作成

ここでは，C++言語による埋込み型UAPの記述規則について説明します。

7.4.1　記述規則

UAPを作成するとき，SQLの文法の規則以外に，名標の付け方やSQLの記述についての規則があります。

(1)　名標の付け方の規則

名標を付けるときの規則は，基本的にC言語の場合の規則に従います。

C言語の規則以外に，使用できない名標を次に示します。

大文字の「SQL」で始まる名標

小文字の「p_」で始まる名標

小文字の「pd」で始まる名標

なお，SQL中で使用する埋込み変数，標識変数，及び分岐先ラベルの名称の付け方は，名標の付け方，及びC言語の規則に従います。

(2)　SQLの記述規則

注釈文として，//を使用できます。

埋込み変数にオブジェクトのメンバを使用できません。

WHENEVER文で，オブジェクトのメソッドを指定できません。

クラス定義内でSQLを記述できません。

上記以外の記述規則については，C言語の場合と同じなので，「SQLの記述規則」を参照してください。

7.5　OOCOBOL言語によるUAPの作成

ここでは，OOCOBOL言語による埋込み型UAPの記述規則について説明します。

7.5.1　記述規則

UAPを作成するとき，SQLの文法の規則以外に，名標の付け方やSQLの記述についての規則があります。

(1)　名標の付け方の規則

名標を付けるときの規則は，基本的にCOBOL言語の場合の規則に従います。

COBOL言語の規則以外に，名標を付けるときの規則を次に示します。

(a)　SQLの予約語

大文字でも小文字でも使用できます。

大文字と小文字を混在できます。

(b)　ホスト名

「SQL」で始まる名標は使用できません。

ホスト名中のコロンの後ろに空白を記述できます。

大文字と小文字は同等に使用できます。

大文字と小文字は混在できます。

なお，使用する埋込み変数，標識変数，及び分岐先の名前の付け方は，名標の付け方の規則，及びCOBOL言語の規則に従います。また，次に示す名標は外部属性を持つため，使用できないので注意してください。

大文字の「SQL」で始まる名標

小文字の「p_」で始まる名標

小文字の「pd」で始まる名標

(2)　SQLの記述規則

埋込み変数にオブジェクトのメンバを使用できません。

WHENEVER文で，オブジェクトのメソッドを指定できません。

クラス定義内でSQLを記述できません。

上記以外の記述規則については，COBOL言語の場合と同じなので，「SQLの記述規則」を参照してください。

7.6　64ビットモードでのUAPの作成

HiRDBクライアントを使用した64ビットモード対応のUAPを作成する方法について説明します。

7.6.1　64ビットモード対応のUAPで使用できる言語，及び機能

(1)　言語

C言語，C++言語，及びCOBOL言語（COBOL2002）でUAPを作成できます。OOCOBOL言語では作成できません。

(2)　機能

HiRDBクライアントの機能は基本的に使用できます。また，複数接続機能では，擬似スレッドではなく，リアルスレッドを提供しています。

7.6.2　SQL連絡領域の違い

HiRDBを64ビットモードにすると，SQL連絡領域の構成が変わります。また，次の表に示す連絡領域名の長さが変わります。SQL連絡領域については，「SQL連絡領域」を参照してください。

表7‒5　変更になる連絡領域名

連絡領域名

長さ（単位：バイト）

32ビットモード

64ビットモード

SQLCA

336

368

SQLCABC

4

8

SQLCODE

4

8

SQLERRD

4×6

8×6

7.6.3　SQL記述領域の違い

HiRDBを64ビットモードにすると，SQL記述領域の構成が変わります。また，次の表に示す記述領域名の長さとデータ型が変わります。SQL記述領域については，「SQL記述領域」を参照してください。

表7‒6　変更になる記述領域名

記述領域名

32ビットモード

64ビットモード

長さ（バイト）

データ型

長さ（バイト）

データ型

SQLDA

16＋16×n

−

24＋24×n

−

SQLDABC

4

−

8

−

SQLVAR

16×n

−

24×n

−

SQLVAR_LOB

16×n

−

24×n

−

SQLLOBLEN

−

long

−

int

SQLDATA

4

−

8

−

SQLIND

4

−

8

−

SQLLOBIND

4

long *

8

int *

（凡例）

n：記述領域名SQLNに指定したSQLVARの数です。

−：長さ又はデータ型の変更はありません。

7.6.4　SQLのデータ型とC言語のデータ記述の違い

64ビットモード対応のC言語UAPでは，long型のサイズが8バイトのため，longを使用していた埋込み変数はlongの代わりにintを使用します。したがって，次の表に示すC言語のデータ記述が変わります。C言語のデータ記述については，「SQLのデータ型とC言語のデータ記述」を参照してください。

表7‒7　変更になるC言語のデータ記述

SQLのデータ型

C言語のデータ記述

項目の記述

備考

INTEGER

単純形

int 変数名;

変数

なし

配列形

int 変数名[n];

配列

1≦n≦4096

BLOB用標識変数

int 標識変数名;

−

なし

SQL文

struct{

int len;

char str[n];

}変数名;

構造体

なし

（凡例）

n：長さ（単位：バイト）。

−：記述できません。

7.6.5　表分割ハッシュ関数を使用したUAPの作成方法の違い（HP-UX版及びLinux版限定）

表分割ハッシュ関数を使用したUAPのコンパイル及びリンケージをするときに指定する共用ライブラリが変わります。表分割ハッシュ関数を使用したUAPの作成方法については，「表分割ハッシュ関数」を参照してください。

7.6.6　32ビットモードから64ビットモードへのHiRDBクライアントへの移行

32ビットモードから64ビットモードへHiRDBクライアントを移行するには，HiRDBクライアントを64ビットモードにバージョンアップする必要があります（64ビットモードのHiRDBクライアントをインストールして，クライアントの環境設定をします）。クライアントの環境設定については，「クライアントの環境設定」を参照してください。

64ビットモードのHiRDBクライアントをインストールした場合，64ビットモード用のファイルが作成されます。インストールしたときに作成されるファイルについては，「HiRDBクライアントのディレクトリ及びファイル構成」を参照してください。

クライアントの環境設定が終わったら，次の手順でUAPを64ビットモード対応にしてください。

＜手順＞

埋込み変数の宣言でlong型を使用している場合，その箇所をint型に置き換えます。

UAPのプリプロセスを実行します。このとき，64ビットモード用のポストソースを生成するオプション（UNIXの場合は-h64，Windowsの場合は/h64）を指定します。

UAPのコンパイルを実行します。このとき，64ビットモード用のオブジェクトを生成するオプションを指定します。

UAPのリンケージを実行します。このとき，リンケージするクライアントライブラリに64ビットモードのクライアントライブラリを指定します。

注

プリプロセス，及びコンパイル，リンケージについては，それぞれ「プリプロセス」，「コンパイルとリンケージ」を参照してください。

8　UAP実行前の準備

この章では，UAPを実行する前の準備作業について説明します。

8.1　UAPの実行手順

SQLを埋め込んで作成したUAPは，そのままでは実行できません。ここでは，作成したUAPを実行するための手順について説明します。

8.1.1　C言語で作成したUAPの実行手順

C言語で記述されたソースプログラム中に直接SQLを埋め込んだUAPは， SQLプリプロセサでポストソースに変換してください。変換されたポストソースは，専用の言語コンパイラでコンパイル，及びリンケージをするとロードモジュール（実行可能ファイル）になります。

C言語で作成したUAPの実行までの手順を次の図に示します。

図8‒1　C言語で作成したUAPの実行までの手順

8.1.2　COBOL言語で作成したUAPの実行手順

COBOL言語で記述されたソースプログラム中に直接SQLを埋め込んだUAPは，SQLプリプロセサでポストソースに変換してください。変換されたポストソースは，専用の言語コンパイラでコンパイル，及びリンケージをするとロードモジュール（実行可能ファイル）になります。

COBOL言語で作成したUAPの実行までの手順を次の図に示します。

図8‒2　COBOL言語で作成したUAPの実行までの手順

8.2　プリプロセス

8.2.1　プリプロセスの概要

(1)　プリプロセスとは

SQLを埋め込んだUAPのソースファイルは，そのままではコンパイルできないため，SQLプリプロセサを実行する必要があります。SQLプリプロセサを実行すると，埋め込まれたSQL文は，高級言語用の記述に変換されます。このSQLプリプロセサを実行して，UAPソースを言語コンパイラで変換できるポストソースに変換することをプリプロセスといいます。

SQLプリプロセサは，SQL文に対応した高級言語の関数を生成し，ソース中に埋め込みます。このとき，変数のデータ型の妥当性，値の妥当性，及び各種名称のシンタクスについてチェックします。チェックした結果，入力ソースプログラム中にエラーを検出すると，メッセージを標準エラー出力に出力します。

(2)　SQLプリプロセサでチェックされない項目

SQLプリプロセサを実行しても，次に示す内容についてはチェックされません。

サーバに問い合わせが必要な表名があるかどうか

サーバに問い合わせが必要な列名があるかどうか

サーバに問い合わせが必要な，ほかの識別子，データ型，関数があるかどうか

表に対するアクセス権限

(3)　プリプロセスをする場合の注意事項

SQLプリプロセサは，ソースプログラムに使用している高級言語，及び環境によって，環境変数の設定，及びコマンドの指定方法が異なるため，使用している言語や環境に合わせる必要があります。

Windows環境でのSQLプリプロセサでは，/Xpを指定しないと厳密なSQLの構文チェックができないため，SQL文に文法上のエラーがあっても発見できないことがあります。また，AIX版のクライアントで文字コードがSJIS以外の場合，厳密なSQLの構文チェックはできません。

Windows環境ではEUCコードを認識できないため，使用できる文字コードはsjis又はlang-cだけです。HiRDBサーバの文字コード種別にsjis又はlang-c以外を指定している場合，HiRDBクライアントでUAPを実行するとエラーになります。

8.2.2　UNIX環境でのプリプロセス

(1)　C言語の場合

(a)　環境変数の設定

UAPをプリプロセスする前に，次に示す環境変数を必要に応じて設定します。

PDDIR：

HiRDB（サーバ，又はクライアント）のインストールディレクトリを絶対パス名で指定します。この環境変数を設定しないと，/HiRDBが仮定されます。

なお，インストール先が/HiRDBの場合，この変数を設定する必要はありません。

PDCLIB：

COPY文でソースファイルに引き込まれるヘッダファイルを検索するディレクトリを指定します。複数のディレクトリを指定する場合，ディレクトリ同士をコロンで区切ります。この環境変数を省略すると，カレントディレクトリだけが検索されます。

LANG：

HiRDBクライアント環境の文字コード種別を設定します。

SQLプリプロセサは，この環境変数に設定されたロケール名から，UAPのソースファイルの文字コード種別を識別します。ただし，SQLプリプロセサがサポートしていないロケール名を指定すると，SQLプリプロセサはC（単一バイト文字コード）を指定したとみなします。UAPソースの文字コード種別を示すロケール名をSQLプリプロセサがサポートしていない場合は，LANGの代わりに環境変数PDCLTLANGを指定してください。

SQLプリプロセサがサポートしているロケール名を次の表に示します。

表8‒1　SQLプリプロセサがサポートしているロケール名

UAPソースの文字コード種別

環境変数LANGに設定するロケール名

HP-UX

AIX

Linux

シフトJIS漢字コード

ja_JP.SJIS

又は未指定※

Ja_JP

又は未指定※

−

EUC中国語漢字コード

−

−

−

EUC日本語漢字コード

ja_JP.eucJP

ja_JP

ja_JP.eucJP，ja_JP，ja_JP.ujis又は未指定※

単一バイト文字コード

C

C

C

Unicode（UTF-8）

−

−

−

Unicode（IVS対応UTF-8）

−

−

−

中国語漢字コード（GB18030）

−

−

−

（凡例）

−：該当する文字コード種別を示すロケール名を，SQLプリプロセサがサポートしていません。LANGの代わりにPDCLTLANGを指定してください。

注※

PDCLTLANGとLANGが共に未指定の場合，SQLプリプロセサは該当する文字コード種別を仮定します。

PDCLTLANGを指定した場合，SQLプリプロセサはLANGの指定を無視します。ただし，-Eプリプロセスオプションを指定した場合に，SQLプリプロセサが呼び出すCコンパイラの動作にLANGの指定が影響する可能性があります。Cコンパイラの正常動作のために必要な場合は，PDCLTLANGの指定有無に関わらず，LANGに適切な値を設定してください。

PDCLTLANG：

UAPソースの文字コード種別をLANGで指定できない場合，及びLANGで指定した文字コード種別を無視して，ほかの文字コード種別でプリプロセスする場合に指定します。詳細については「クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。

PDDEFAULTOPTION：

プリプロセスのオプションについて，省略時の動作を指定します。通常は，この環境変数を指定する必要はありません。互換モードを適用したい場合に，指定してください。詳細については，「クライアント環境定義の設定内容」の「PDDEFAULTOPTION」を参照してください。

＜例1＞（sh（ボーンシェル）で環境設定をする場合）

prdbディレクトリがインストールディレクトリの場合

   $ PDDIR="/prdb"
   $ export PDDIR

＜例2＞（csh（Cシェル）で環境設定をする場合）

prdbディレクトリがインストールディレクトリの場合

   % setenv   PDDIR "/prdb"

(b)　SQLプリプロセサの起動

SQLプリプロセサの起動は，pdcppコマンド（C言語の場合），又は，pdoccコマンド（C++言語の場合）を使用します。

SQLプリプロセサを起動するコマンドの入力形式を次に示します。

  pdcpp 入力ファイル名称 ［オプション［出力ファイル名称｜認可識別子］］

注　C++言語の場合，下線で示す部分をpdoccに置き換えてください。

入力ファイル名称：

UAPソースファイルの名称を指定します。

ファイル識別子は，.ec（C言語の場合），又は.EC（C++言語の場合）にします。

出力ファイル名称：

ポストソースファイルの名称を指定します。

出力ファイル名称を省略した場合，ファイル識別子は.c（C言語の場合），又は.C（C++言語の場合）になります。

認可識別子：

SQLで認可識別子を省略した場合に仮定する認可識別子を指定します。認可識別子を省略した場合，CONNECT時のユーザ識別子が仮定されます。

オプション：

必要に応じて次の表に示すオプションを指定します。なお，オプションは大文字，小文字を区別しません。

表8‒2　プリプロセスオプション（UNIX環境のC言語の場合）

プリプロセスオプション

内容

-s

構文チェックだけをして，ポストソースを出力しない場合に指定します。このオプションを省略すると，ポストソースが出力されます。

-o ファイル名

出力するポストソースのファイル名称を指定します。

このオプションを省略すると，入力ファイル名称のファイル識別子を.c（C言語の場合），又は.C（C++言語の場合）に変更されたものが出力ファイル名称になります。

-A 認可識別子

静的SQLで認可識別子を省略した場合，及び仮定する認可識別子を変更する場合に指定します。

静的SQLとは，INSERT文，UPDATE文，DELETE文，1行SELECT文，OPEN文（形式1），CALL文，LOCK文，及びPURGE TABLE文を示します。

認可識別子を引用符（"）で囲んで指定することはできません。指定した認可識別子は常に大文字と小文字を区別して扱います。SQL文中に引用符で囲まないで指定した認可識別子は小文字を大文字として扱います。そのため，ほかのUAPなどに記述したSQL文中に引用符で囲まないで小文字を使って指定した認可識別子と同じ認可識別子をこのオプションに指定する場合は，すべての英字を大文字で指定してください。

最大30バイトの認可識別子を指定できます。

認可識別子を省略した場合に仮定する認可識別子については，マニュアル「HiRDB SQLリファレンス」の「名前の修飾」を参照してください。

-h64

64ビットモード用のポストソースを作成する場合に指定します。ただし，32ビット版のプリプロセサを使用した場合は指定できません。

long型を使用した埋込み変数の宣言はエラーになります。

-P

SQLの構文チェックをしない場合に指定します。次のどれかのUAPをプリプロセスする場合に指定できます。

XDM/RD E2接続用のUAP

SQL予約語削除機能を使用するUAP

集合演算子MINUSを使用するUAP

これらのUAPをプリプロセスするときにこのオプションを指定しないと，XDM/RD E2又はHiRDBサーバで使用できるSQLが構文エラーとなることがあります。

-Xo

UAPから抽出したSQL文を標準出力へ出力する場合に指定します。このとき，出力方法は次のようになります。

SQL文中の埋込み変数は?パラメタに置換します。

1行SELECT文のINTO句を削除します。

SQL文中の語句間の空白が2文字以上の場合，空白1文字に置き換えます。

複数行に分割して記述しているSQLは1行にまとめます。

実行時にサーバに送られるSQLだけ出力します。実行されないSQL文（WHENEVER文，BEGIN DECLARE SECTIONなど）は出力しません。

SQLの末尾にはセミコロン（;）を付けます。

埋込み変数の宣言は出力しません。

動的SQLは，SQLがリテラルで指定されている場合にだけ出力します。そのほかの場合は出力しません。

OPEN文は，形式1のカーソルの場合だけ，問合せ式を出力します。

ポストソースは生成しません。

-Xe｛y｜n｝

PREPRARE文実行時のカーソルを，自動的にクローズするかどうかを指定します。

y：

カーソルを自動的にクローズするポストソースを生成します。

n：

カーソルを自動的にクローズしないポストソースを生成します。

省略した場合，クライアント環境定義PDPRPCRCLSの指定値に従いポストソースを生成します。

-Xv

-E2オプションを指定した場合に，VARCHAR型，及びBINARY型に対応する構造体を，通常の構造体として解析するときに指定します。VARCHAR型，及びBINARY型に対応する埋込み変数を宣言するためには，SQL TYPE IS〜を使用します。このオプションは，-E2オプションと同時に指定する必要があります。なお，繰返し列のマクロを使用している場合，このオプションを指定しないでください。

-E｛1｜2｜3｝["オプション文字列"]

UAP中で使用しているプリプロセサ宣言文の有効化と，埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。なお，このオプションはpdoccでは無効となります。

-E1：

プリプロセサ宣言文の有効化を指定します。

-E2：

埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。また，ポインタでの埋込み変数指定，及び構造体の参照を使用する場合にも指定します。

-E3：

-E1と-E2の両方を指定します。

"オプション文字列"：

インクルードするファイルを検索するディレクトリのパス名を，Cコンパイラに指定する-Iオプションの形式で指定します。オプション文字列に複数のオプションを記述する場合は，セミコロンで区切ってください。また，任意のCコンパイラも指定できます。なお，-E2オプション指定時には無視されます。

≪留意事項≫

-E1又は-E3を指定すると，内部的にCコンパイラが呼び出されるため，PATH環境変数にコンパイラへのパス名を設定しておく必要があります。

-E1又は-E3を指定するとUAPソースファイルがあるディレクトリに作業用の一時ファイルを作成します。詳細は表「構文解析の対象ファイルとプリプロセスオプションの関係」の注7を参照してください。

-E1又は-E3を指定し，UAPソースファイル中でSQLのCOPY文を使用する場合は，-Ecオプションを同時に指定する必要があります。

-XU16[L｜B][T"型指定子"]

UTF-16のバイトオーダを指定します。

埋込み変数の宣言で文字集合名UTF16を指定した場合に，埋込み変数に格納するUTF-16のバイトオーダを指定します。

-XU16L〔T"型指定子"〕：

UTF-16のバイトオーダをリトルエンディアンにします。

-XU16B〔T"型指定子"〕：

UTF-16のバイトオーダをビッグエンディアンにします。

L/Bを省略，又はこのオプションを省略した場合，UTF-16のバイトオーダを，プリプロセスを実行するOSのバイトオーダにします。

UTF-16の埋込み変数の展開に使用する型指定子を指定します。

SQL TYPE IS CHAR，又はSQL TYPE IS VARCHARで始まるデータ記述で埋込み変数を宣言した場合に，ポストソース中に展開されるCの宣言の中でUTF-16の文字データを格納する変数，又は構造体メンバに付ける型指定子を指定します。

型指定子が示す型の配列要素1個に，UTF-16の2バイトの文字データ1個を格納するので，sizeof（型指定子）==2となる型指定子だけを指定できます。

<型指定子の指定例>

次に示す指定例は，sizeof(wchar_t)==2となるコンパイラでだけ使用できます。

-XU16T"wchar_t"

次に示す指定例は，sizeof(unsigned short)==2なので，どのコンパイラでも使用できます。

-XU16T"unsigned short"

T"型指定子"を省略，又はこのオプションを省略した場合，型指定子にcharが使用されます。このとき，char型の配列要素2個にUTF-16の2バイトの文字データ１個を格納します。

-g｛c89｜c99｝

-E2，-E3オプションを指定した場合，SQLプリプロセサがUAPソースを解析するとき準拠するCの標準規格を指定します。

-gc89：

C89（ISO/IEC 9899:1990, Programming languages - C）に準拠します。

-gc99：

C99（ISO/IEC 9899:1999, Programming languages - C）に準拠します。

省略した場合，-gc99が仮定されます。

-E2，-E3オプションを指定しない場合，このオプションを指定しても無視されます。

-Ec

-E1又は-E3オプションを指定した場合に，UAPソースファイル中でSQLのCOPY文を使用できるようにします。

なお，それ以外の場合，このオプションの指定に関係なくCOPY文は使用できます（このオプションの指定は無視されます）。

≪留意事項≫

このオプションを指定するとUAPソースファイルがあるディレクトリに作業用の一時ファイルを作成します。詳細は表「構文解析の対象ファイルとプリプロセスオプションの関係」の注7を参照してください。

-Xs

UAPに埋め込んだSQL文中に単純注釈（-- 〜 改行）を記述する場合に指定します。

単純注釈の記述規則については，「SQLの記述規則」の10.を参照してください。

このオプションは，省略時にも仮定されます。ただし，0904互換モードを適用した場合は仮定されませんので，オプションを指定することを検討してください。

注1

-Eオプション指定時に使用できる機能を次に示します。

機能

省略

-E1

-E2

-E3

#defineで定義したマクロを有効にする

×

○

×

○

#includeでインクルードしたヘッダファイルを有効にする※

×

○

×

○

#if，#ifdefなどの条件コンパイルを有効にする

×

○

×

○

UAP中の任意の場所で宣言した変数を，埋込み変数として使用する

×

×

○

○

構造体を埋込み変数として使用する

×

×

○

○

ポインタを埋込み変数として使用する

×

×

○

○

（凡例）

○：該当する機能を使用できます。

×：該当する機能は使用できません。

注※

ヘッダファイル中に記述できる項目については，「SQLの記述規則」の23.を参照してください。

注2

-Eオプションを指定した場合，プリプロセサはCコンパイラを内部的に呼び出します。プラットフォームごとのCコンパイラを次に示します。

プラットフォーム

コンパイラの種類

呼び出し時のロード名

HP-UX

HP-Cコンパイラ

cc

AIX

C for AIXコンパイラ

xlc

Linux

gccコンパイラ

gcc

Windows

Microsoft Visual C++コンパイラ

CL.EXE

これ以外のCコンパイラを使用する場合は，オプション文字列の先頭に，コンパイラのロードのディレクトリを含めた絶対パス名で指定します。ディレクトリ名，及びロード名には，空白及びセミコロンを含めることはできません。環境変数PATHにパス名を追加している場合は，絶対パス名でなくてもかまいません。

ロード名を指定する場合は，ロード名とオプションの間をセミコロンで区切ってください。

使用するコンパイラは，-Cオプションと-Eオプションをサポートしている必要があります。プリプロセサは，#define，#includeなどの擬似命令を処理するために，内部的にCコンパイラに対して-Cオプション，及び-Eオプションを指定して，作業用の一時ファイルを作成します。Linuxでは，-Cオプション，及び-Eオプションのほかに，-xcオプションを使用しています。

それ以外のオプション文字列に指定できるオプションは，使用するコンパイラの仕様に依存しますが，-Cオプション又は-Eオプションに背反するオプションを指定すると，プリプロセサはエラーとなります。ヘルプなどを表示するオプションを使用した場合は，動作が保証されません。

例を次に示します。

例1：デフォルトのCコンパイラを使用する場合

pdcpp connect.ec -E1"-I$PDDIR/include;-DDEBUG"

例2：ユーザ指定のCコンパイラを使用する場合

pdcpp connect.ec -E1"/usr/bin/gcc;-I$PDDIR/include;-DDEBUG"

-E2，-E3オプションを指定すると，プリプロセサはUAP中の任意の箇所で宣言されている埋込み変数を認識するために，-gオプションで指定，又は仮定されたCの標準規格（C89又はC99）に準拠して構文を解析します。

構文解析の対象ファイルとプリプロセスオプションの関係を次の表に示します。

表8‒3　構文解析の対象ファイルとプリプロセスオプションの関係

項番

構文解析の対象となるファイル

プリプロセスオプション

-E2

-E3

-E2及び-E3の指定なし

1

UAPソースファイル

○

○

×※

2

COPY文で引き込むヘッダファイル

○

○

×※

3

#includeで引き込むヘッダファイル

×

○

×

（凡例）

○：構文解析します。

×：構文解析しません。

注※

選択した規格に準拠した構文解析はしないで，埋込みSQL宣言節の中だけを埋込み変数のデータ記述形式に合わせて解析します。

なお，構文解析の対象ファイルの中で選択した規格に準拠しない構文が使用されている場合，構文エラーになることがあります。

構文エラーを回避するには，構文解析の対象ファイルの中で選択した規格に準拠した構文を使用するようにします。コンパイラ製品に付属しているヘッダファイル中で選択した規格に準拠しない構文が使用されているために構文エラーになる場合は，選択した規格に準拠したコンパイルをするコンパイラオプションを-E3オプション文字列に指定することで，問題を回避できることがあります。

例3：IBM XL C V9.0を使う場合に，C89準拠オプション（-qlanglvl=extc89）を指定する場合

pdcpp connect.ec -E3"-qlanglvl=extc89;-I$PDDIR/include" -gc89

注3

埋込み変数の宣言に文字集合名UTF16を指定した場合に，SQLプリプロセサは文字集合名記述領域に文字集合名を設定するソースコードをポストソース中に展開します。そのソースコードは，-XU16オプションの指定に依存して，リトルエンディアンの場合にはUTF-16LEを設定し，ビッグエンディアンの場合にはUTF-16BEを設定します。

埋込み変数を使用しないで，SQL記述領域と文字集合名記述領域を使用してUAP実行時に入出力変数の文字集合名を動的に決定する場合には，-XU16オプションで指定したバイトオーダは無効になります。この場合に，文字集合名をUTF16にするとバイトオーダがビッグエンディアンになります。

注4

-XU16オプションで型指定子を指定する機能の対象となるデータ記述を，次に示します。

SQL TYPE IS CHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名;

SQL TYPE IS CHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名[m];

SQL TYPE IS CHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 *変数名;

SQL TYPE IS VARCHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名;

SQL TYPE IS VARCHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名[m];

SQL TYPE IS VARCHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 *変数名;

注5

-gオプションの指定内容によって，C99で追加された予約語の扱いが変わります。C99で追加された予約語を次に示します。

restrict，inline，_Bool，_Complex，_Imaginary，_Pragma

ただし，restrictとinlineについては，C89では変数名などの識別子として使用できましたが，C99では識別子として使用できません。C89に準拠している既存のUAPで，restrictとinlineを識別子として使用している場合，そのUAPをC99に準拠して解析するとエラーになります。

C99で追加された予約語の扱いを次の表に示します。

-gオプション

扱い

省略

-gc99指定

C99に準拠して予約語として扱います。

-gc89指定

識別子として扱います。※

注※

先頭文字が下線文字（_）で2文字目が英大文字（A〜Z），又は下線文字の名前がC89の場合も，Cのライブラリ用として予約されています。このため，_Bool，_Complex，_Imaginary，_PragmaをUAP中で識別子として使用した場合，プリプロセサの動作は保証できません。

-gオプションの指定内容を次の表に示します。-gオプションの指定内容は，C99で追加された予約語の扱い以外には影響しません。

C99で追加された予約語の使用状況

-gオプションの指定内容

予約語として使用する

-gオプションを省略，又は-gc99を指定します。

識別子として使用する

-gc89を指定します。

予約語としても識別子としても使用しない

-gオプションを指定する必要はありません。コメントとして任意に指定できます。

-gオプションを指定する場合は，次の点に注意してください。

C99に準拠したコンパイルができるコンパイラ製品を使用する場合，コンパイラ製品に付属しているヘッダファイルの中で，C99で追加された予約語が予約語として使用されていることがあります。-E3オプションを指定すると，そのヘッダファイルが#include文で引き込まれるおそれがあります。

コンパイラ製品の中には，予約語の扱いを個別に指定できるものがあります（例えば，restrictは予約語とし，inlineは予約語としない，と指定できます）。SQLプリプロセサは予約語の扱いを個別に指定できません。

なお，UNIX環境では，トラブルを避けるためコンパイラが準拠する標準規格と同じ標準規格を-gオプションで指定することを推奨します。また，C99で追加された予約語の扱いを個別に指定するコンパイラオプションは指定しないでください。

注6

-E2，-E3オプションを指定しない場合，埋込みSQL宣言節で，C99で追加された予約語を識別子として扱います。また，埋込みSQL宣言節とSQL文（EXEC SQL 〜 ;）以外は解析しません。

注7

-E1，-E3，又は-Ecオプションを指定すると，プリプロセサはUAPソースファイルがあるディレクトリに一時ファイルを作成します。一時ファイルはプリプロセス終了時にプリプロセサが削除します。一時ファイルの名称は拡張子を除いてUAPソースファイルと同じです。拡張子を次に示します。

プリプロセスオプションが-E1又は-E3の場合：.i2

プリプロセスオプションが-Ecの場合：.i3

-E1又は-E3オプションと-Ecオプションを同時に指定した場合は，両方の拡張子の一時ファイルが作成されます。

プリプロセス実行時に一時ファイルと同名のファイルが既に存在すると，プリプロセサはそのファイルを上書きしてから削除します。ただし，プリプロセサの実行ユーザにそのファイルを上書きする権限がない場合，プリプロセサは次のメッセージを出力して処理を終了します。

拡張子.i2のファイルの場合：KFPZ13576-Eメッセージ（内部コンパイラ処理でエラー）

拡張子.i3のファイルの場合：KFPZ13706-Eメッセージ（ファイルのオープンでエラー）

また，プリプロセサの実行ユーザにそのファイルを削除する権限がない場合，プリプロセサはファイルの削除エラーを無視して処理を続行します。

誤って削除されないように，SQLプリプロセサ以外が作成するファイルの拡張子にはこれらの一時ファイルと同じ拡張子を使用しないことをお勧めします。同じ拡張子の同名のファイルを既に使用している場合は，それらをUAPソースファイルがあるディレクトリに置かないように注意してください。

なお，プリプロセサが異常終了すると，一時ファイルが削除されないで残ることがあります。残った一時ファイルは，同じUAPソースファイルに対するプリプロセスが再実行され正常終了すれば，削除されます。

C言語の場合のコマンド指定例

＜例1＞

UAPソースファイルの名称がsampleで，ポストソースを出力しない場合

  pdcpp sample.ec -s

＜例2＞

UAPソースファイルの名称がsampleで，出力するポストソースのファイル名称をmainにする場合

  pdcpp sample.ec -o main.c

C++言語の場合のコマンド指定例

＜例1＞

UAPソースファイルの名称がsampleで，ポストソースを出力しない場合

  pdocc sample.EC -s

＜例2＞

UAPソースファイルの名称がsampleで，出力するポストソースのファイル名称をmainにする場合

  pdocc sample.EC -o main.C

(c)　SQLプリプロセサのリターンコード

SQLプリプロセサは，処理終了後にリターンコードをOSに返します。

リターンコードは，シェル変数$?（ボーンシェルの場合），又は$status（Cシェルの場合）の内容を表示させることで参照できます。

リターンコードとその内容を次の表に示します。

表8‒4　SQLプリプロセサのリターンコード（UNIX環境でのC言語の場合）

リターンコード

内　　　　　容

0

正常終了

4，8

エラー発生（プリプロセスを最後まで続行）

12，16

エラー発生（プリプロセスを途中で終了）

(d)　エラーの出力

SQLプリプロセサは，SQL文に文法上のエラーが発生した場合，そのSQL文を無視して処理を続行します。しかし，オプションの指定に誤りがある場合，処理を中断します。また，メモリ不足やファイル入出力エラーなど，システム上でエラーが発生し，それ以降の処理ができない場合，処理の途中でも終了します。

SQL文に文法上のエラーが発生したとき，SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると，エラーメッセージをファイルに格納できます。ファイルを参照すると，エラー内容，UAPソースファイル名，エラーが発生した箇所（SQL文の行番号）などが分かります。

SQLプリプロセサの標準入出力を次の表に示します。

表8‒5　SQLプリプロセサの標準入出力（UNIX環境でのC言語の場合）

ファイル

用　　　　　途

標準入力

ファイルの入力（ユーザは使用不可）

標準出力

ファイルの出力（ユーザは使用不可）

標準エラー出力

エラーメッセージの出力

(2)　COBOL言語の場合

(a)　環境変数の設定

UAPをプリプロセスする前に，次に示す環境変数を必要に応じて設定します。

PDDIR：

HiRDB（サーバ，又はクライアント）のインストールディレクトリを絶対パス名で指定します。この環境変数を設定しないと，/HiRDBが仮定されます。

なお，インストール先が/HiRDBの場合，この変数を設定する必要はありません。

PDCBLFIX：

UAPソースファイルの規定の識別子以外に，任意のファイル識別子を使用する場合に指定します。

ファイル識別子は，ピリオドで始まる4文字までの任意の文字列を設定します。なお，この環境変数に設定したファイル識別子は，入力ファイルにだけ使用できます。

PDCBLLIB：

SQLのCOPY文でソースファイルに引き込まれる登録集原文を検索するディレクトリを指定します。複数のディレクトリを指定する場合，ディレクトリ同士をコロンで区切ります。この環境変数を省略すると，カレントディレクトリだけが検索されます。

LANG：

HiRDBクライアント環境の文字コード種別を設定します。

SQLプリプロセサは，この環境変数に設定されたロケール名から，UAPのソースファイルの文字コード種別を識別します。ただし，SQLプリプロセサがサポートしていないロケール名を指定すると，SQLプリプロセサはC(単一バイト文字コード)を指定したとみなします。UAPソースの文字コード種別を示すロケール名をSQLプリプロセサがサポートしていない場合は，LANGの代わりに環境変数PDCLTLANGを指定してください。

SQLプリプロセサがサポートしているロケール名については，表「SQLプリプロセサがサポートしているロケール名」を参照してください。

PDCLTLANGを指定した場合，SQLプリプロセサはLANGの指定を無視します。

PDCLTLANG：

UAPソースの文字コード種別をLANGで指定できない場合，及びLANGで指定した文字コード種別を無視して，ほかの文字コード種別でプリプロセスする場合に指定します。詳細については「クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。

PDDEFAULTOPTION：

プリプロセスのオプションについて，省略時の動作を指定します。通常は，この環境変数を指定する必要はありません。互換モードを適用したい場合に，指定してください。詳細については，「クライアント環境定義の設定内容」の「PDDEFAULTOPTION」を参照してください。

＜例1＞（sh（ボーンシェル）で環境設定をする場合）

  $ PDDIR="/prdb"                                   … 1
  $ PDCBLFIX=".Cob"                                 … 2
  $ PDCBLLIB=$HOME/cobol/include:$HOME/cobol/source … 3
  $ export PDDIR PDCBLFIX PDCBLLIB                  … 4

＜説明＞

インストールディレクトリ（この例では/prdb）を指定します。

UAPソースファイルの識別子として，.Cobも有効にします。

登録集原文を検索するディレクトリ（この例では$HOME/cobol/include，及び$HOME/cobol/source）を指定します。

SQLプリプロセサで参照できるようにします。

＜例2＞（csh（Cシェル）で環境設定をする場合）

  % setenv   PDDIR "/prdb"                                   … 1
  % setenv   PDCBLFIX ".Cob"                                 … 2
  % setenv   PDCBLLIB $HOME/cobol/include:$HOME/cobol/source … 3

＜説明＞

インストールディレクトリ（この例では/prdb）を指定します。

UAPソースファイルの識別子として，.Cobも有効にします。

登録集原文を検索するディレクトリ（この例では$HOME/cobol/include，及び$HOME/cobol/source）を指定します。

(b)　SQLプリプロセサの起動

SQLプリプロセサの起動は，pdcblコマンド（COBOL言語の場合），又はpdocbコマンド（OOCOBOL言語の場合）を使用します。

SQLプリプロセサを起動するコマンドの入力形式を次に示します。

  pdcbl 入力ファイル名称 ［オプション［出力ファイル名称｜認可識別子］］

注　OOCOBOL言語の場合，下線で示す部分をpdocbに置き換えてください。

入力ファイル名称：

UAPソースファイルの名称を指定します。

ファイル識別子は，.ecb，.cob，.cblのどれか（COBOL言語の場合），又は.eoc（OOCOBOL言語の場合）にします。

なお，環境設定で任意のファイル識別子を登録してある場合，その識別子を使用することもできます。

出力ファイル名称：

ポストソースファイルの名称を指定します。

出力ファイル名称を省略した場合，ファイル識別子は.cbl（COBOL言語の場合），又は.ocb（OOCOBOL言語の場合）になります。

認可識別子：

SQLで認可識別子を省略した場合に仮定する認可識別子を指定します。認可識別子を省略した場合，CONNECT時のユーザ識別子が仮定されます。

オプション：

必要に応じて次の表に示すオプションを指定します。なお，オプションは大文字，小文字を区別しません。

表8‒6　プリプロセスオプション（UNIX環境のCOBOL言語の場合）

プリプロセスオプション

内容

-s

構文チェックだけをして，ポストソースを出力しない場合に指定します。このオプションを省略すると，ポストソースが出力されます。

-o ファイル名

出力するポストソースのファイル名称を変更する場合に指定します。

このオプションを省略すると，入力ファイル名称のファイル識別子を.cbl（COBOL言語の場合），又は.ocb（OOCOBOL言語の場合）に変更されたものが出力ファイル名称になります。

入力ファイルの識別子が.cbl（COBOL言語の場合），又は.ocb（OOCOBOL言語の場合）の場合，必ずこのオプションを指定して，ポストソースのファイル名称を.cbl（COBOL言語の場合）以外，又は.ocb以外（OOCOBOL言語の場合）の識別子に変更してください。

-Xc

次の英数字定数を囲む分離符を，引用符（"）に変更する場合に指定します。

このオプションを省略すると，次の英数字定数を囲む分離符はアポストロフィ（'）になります。

SQLプリプロセサが生成するソースコード中の英数字定数

SQLプリプロセサが生成するCOPY文でポストソースに引き込む登録集原文ファイル中の英数字定数

-A 認可識別子

静的SQLで認可識別子を省略した場合，及び仮定する認可識別子を変更する場合に指定します。

静的SQLとは，INSERT文，UPDATE文，DELETE文，1行SELECT文，OPEN文（形式1），CALL文，LOCK文，及びPURGE TABLE文を示します。

認可識別子を引用符（"）で囲んで指定することはできません。指定した認可識別子は常に大文字と小文字を区別して扱います。SQL文中に引用符で囲まないで指定した認可識別子は小文字を大文字として扱います。そのため，ほかのUAPなどに記述したSQL文中に引用符で囲まないで小文字を使って指定した認可識別子と同じ認可識別子をこのオプションに指定する場合は，すべての英字を大文字で指定してください。

最大30バイトの認可識別子を指定できます。

認可識別子を省略した場合に仮定する認可識別子については，マニュアル「HiRDB SQLリファレンス」の「名前の修飾」を参照してください。

-h64

64ビットモード用のポストソースを作成する場合に指定します。ただし，32ビット版のプリプロセサを使用した場合は指定できません。

-P

SQLの構文チェックをしない場合に指定します。次のどれかのUAPをプリプロセスする場合に指定できます。

XDM/RD E2接続用のUAP

SQL予約語削除機能を使用するUAP

集合演算子MINUSを使用するUAP

これらのUAPをプリプロセスするときにこのオプションを指定しないと，XDM/RD E2又はHiRDBサーバで使用できるSQLが構文エラーとなることがあります。

-Xo

UAPから抽出したSQL文を標準出力へ出力する場合に指定します。このとき，出力方法は次のようになります。

SQL文中の埋込み変数は?パラメタに置換します。

1行SELECT文のINTO句を削除します。

SQL文中の語句間の空白が2文字以上の場合，空白1文字に置き換えます。

複数行に分割して記述しているSQLは1行にまとめます。

実行時にサーバに送られるSQLだけ出力します。実行されないSQL文（WHENEVER文，BEGIN DECLARE SECTIONなど）は出力しません。

SQLの末尾にはセミコロン（;）を付けます。

埋込み変数の宣言は出力しません。

動的SQLは，SQLがリテラルで指定されている場合にだけ出力します。そのほかの場合は出力しません。

OPEN文は，形式1のカーソルの場合だけ，問合せ式を出力します。

ポストソースは生成しません。

-Xe｛y｜n｝

PREPRARE文実行時のカーソルを，自動的にクローズするかどうかを指定します。

y：

カーソルを自動的にクローズするポストソースを生成します。

n：

カーソルを自動的にクローズしないポストソースを生成します。

省略した場合，クライアント環境定義PDPRPCRCLSの指定値に従いポストソースを生成します。

-E2

埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。

-XU16[L｜B]

COBOL2002のUnicode機能を使用する場合に指定します。COBOL2002のUnicode機能を使用したUAPの実行については，「COBOL2002のUnicode機能を使用したUAPの実行」を参照してください。

日本語項目の文字コード（UTF-16）のバイトオーダを指定します。

-XU16L：

UTF-16のバイトオーダをリトルエンディアンにします。

-XU16B：

UTF-16のバイトオーダをビッグエンディアンにします。

-XU16：

UTF-16のバイトオーダを，プリプロセスを実行するOSのバイトオーダにします。

Windows，Linuxの場合はリトルエンディアンにします。

AIXの場合はビッグエンディアンにします。

上記以外のOSでこのオプションを指定した場合は，プリプロセサの動作は保証できません。

COBOL2002のUnicode機能を使用しない場合は，このオプションを指定しないでください。指定すると，埋込み変数の宣言に日本語項目を使用できなくなります。

-Xm

複数接続機能を使用したUAPをプリプロセスする場合に指定します。詳細は，「COBOL言語で複数接続機能を使用する場合の注意事項」を参照してください。

このオプションは，省略時にも仮定されます。ただし，0904互換モードを適用した場合は仮定されませんので，オプションを指定することを検討してください。

-Xs

UAPに埋め込んだSQL文中に単純注釈（-- 〜 改行）を記述する場合に指定します。

単純注釈の記述規則については，「SQLの記述規則」の13.を参照してください。

このオプションは，省略時にも仮定されます。ただし，0904互換モードを適用した場合は仮定されませんので，オプションを指定することを検討してください。

-Xb

Linux環境で，COBOL2002のコンパイラオプション-BigEndian,Binを使用して2進項目のバイトオーダをビッグエンディアンにする場合に指定します。詳細は，「COBOLのビッグエンディアンオプションへの対応」を参照してください。

Linux以外のUNIX環境では，このオプションを指定できません。

-Xr

SQL文の実行時にCOBOLのRETURN-CODE特殊レジスタを更新しないポストソースを生成します。

UAPが呼び出し元プログラムに返すリターンコードをRETURN-CODE特殊レジスタに設定してから，呼び出し元プログラムに制御を戻すまでの間にSQL文を実行する場合，このオプションを指定してください。

省略した場合，SQL文の種類によってRETURN-CODE特殊レジスタの更新有無が変わります。SQL文の種類によるRETURN-CODE特殊レジスタの更新有無については，「SQLの記述規則」の18.を参照してください。

COBOL言語の場合のコマンド指定例

＜例1＞

UAPソースファイルの名称がsampleで，ポストソースを出力しない場合

  pdcbl sample.ecb -s

＜例2＞

UAPソースファイルの名称がsampleで，出力するポストソースのファイル名称をmainにする場合

  pdcbl sample.ecb -o main.cbl

OOCOBOL言語の場合のコマンド指定例

＜例1＞

UAPソースファイルの名称がsampleで，ポストソースを出力しない場合

  pdocb sample.eoc -s

＜例2＞

UAPソースファイルの名称がsampleで，出力するポストソースのファイル名称をmainにする場合

  pdocb sample.eoc -o main.ocb

(c)　SQLプリプロセサのリターンコード

SQLプリプロセサは，処理終了後にリターンコードをOSに返します。

リターンコードは，シェル変数$?（ボーンシェルの場合），又は$status（Cシェルの場合）の内容を表示させることで参照できます。

リターンコードとその内容を次の表に示します。

表8‒7　SQLプリプロセサのリターンコード（UNIX環境でのCOBOL言語の場合）

リターンコード

内　　　　　容

0

正常終了

4，8

エラー発生（プリプロセスを最後まで続行）

12，16

エラー発生（プリプロセスを途中で終了）

(d)　エラーの出力

SQLプリプロセサは，SQL文に文法上のエラーが発生した場合，そのSQL文を無視して処理を続行します。しかし，オプションの指定に誤りがある場合，処理を中断します。また，メモリ不足やファイル入出力エラーなど，システム上でエラーが発生し，それ以降の処理ができない場合，処理の途中でも終了します。

SQL文に文法上のエラーが発生したとき，SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると，エラーメッセージをファイルに格納できます。ファイルを参照すると，エラー内容，UAPソースファイル名，エラーが発生した箇所（SQL文の行番号）などが分かります。

SQLプリプロセサの標準入出力を次の表に示します。

表8‒8　SQLプリプロセサの標準入出力（UNIX環境でのCOBOL言語の場合）

ファイル

用　　　　　途

標準入力

ファイルの入力（ユーザは使用不可）

標準出力

ファイルの出力（ユーザは使用不可）

標準エラー出力

エラーメッセージの出力

8.2.3　Windows環境でのプリプロセス

(1)　C言語の場合

(a)　環境変数の設定

UAPをプリプロセスする前に，必要に応じてHiRDB.INIファイルに次に示す環境変数を設定します。

なお，HiRDB.INIファイルは，%windir%ディレクトリに格納されています。

PDCLIB：

COPY文でソースファイルに引き込まれるヘッダファイルを検索するディレクトリを指定します。複数のディレクトリを指定する場合，ディレクトリ同士をセミコロンで区切ります。この環境変数を省略すると，カレントディレクトリだけが検索されます。

PDCLTLANG：

特に文字コード種別を指定してプリプロセスする場合に指定します。省略した場合は，sjisが仮定されます。詳細については，「クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。

PDDEFAULTOPTION：

プリプロセスのオプションについて，省略時の動作を指定します。通常は，この環境変数を指定する必要はありません。互換モードを適用したい場合に，指定してください。詳細については，「クライアント環境定義の設定内容」の「PDDEFAULTOPTION」を参照してください。

(b)　SQLプリプロセサの起動

SQLプリプロセサの起動は，次に示す三つの方法があります。

アイコンの重ね合わせによる実行

ファイル名の指定による実行

コマンドプロンプト又はMS-DOSプロンプトからの実行

アイコンの重ね合わせによる実行

エクスプローラでプリプロセスしたいファイルをドラッグして，プリプロセサのファイル（PDCPP.EXE（C言語の場合），又はPDOCC.EXE（C++言語の場合））に重ねると実行できます。

ファイル名の指定による実行

プリプロセサのアイコン（PDCPP.EXE（C言語の場合），又はPDOCC.EXE（C++言語の場合））をクリックし，次に示す手順で実行します。

ファイルメニューから「ファイル名を指定して実行」を選択します。

コマンドラインにファイル名，及びオプションを指定して実行します。

コマンドプロンプト又はMS-DOSプロンプトからの実行

コマンドプロンプト又はMS-DOSプロンプトを起動し，PDCPP.EXE（C言語の場合），又はPDOCC.EXE（C++言語の場合）コマンドを入力して実行します。

コマンドラインに入力するコマンドの形式を次に示します。

  PDCPP.EXE　入力ファイル名称 ［オプション［出力ファイル名称］］

注　C++言語の場合，下線で示す部分をPDOCC.EXEに置き換えてください。

入力ファイル名称：

UAPソースファイルの名称を指定します。

ファイル識別子は，.EC（C言語の場合），又は.ECP（C++言語の場合）にします。

出力ファイル名称：

ポストソースファイルの名称を指定します。

出力ファイル名称を省略した場合，ファイル識別子は.C（C言語の場合），又は.CPP（C++言語の場合）になります。

認可識別子：

SQLで認可識別子を省略した場合に仮定する認可識別子を指定します。認可識別子を省略した場合，CONNECT時のユーザ識別子が仮定されます。

オプション：

必要に応じて次の表に示すオプションを指定します。なお，オプションは大文字，小文字を区別しません。

表8‒9　プリプロセスオプション（Windows環境のC言語の場合）

プリプロセスオプション

内容

/S

構文チェックだけをして，ポストソースを出力しない場合に指定します。このオプションを省略すると，ポストソースが出力されます。

なお，同時に/Xpも指定しないと，SQLプリプロセサは厳密なSQLの構文チェックができないため，SQL文に文法上のエラーが発生していても発見できない場合があるので注意が必要です。

/O ファイル名

出力するポストソースのファイル名称を指定します。

このオプションを省略すると，入力ファイル名称のファイル識別子を.C（C言語の場合），又は.CPP（C++言語の場合）に変更されたものが出力ファイル名称になります。

/A 認可識別子

静的SQLで認可識別子を省略した場合，及び仮定する認可識別子を変更する場合に指定します。

静的SQLとは，INSERT文，UPDATE文，DELETE文，1行SELECT文，OPEN文（形式1），CALL文，LOCK文，及びPURGE TABLE文を示します。

認可識別子を引用符（"）で囲んで指定することはできません。指定した認可識別子は常に大文字と小文字を区別して扱います。SQL文中に引用符で囲まないで指定した認可識別子は小文字を大文字として扱います。そのため，ほかのUAPなどに記述したSQL文中に引用符で囲まないで小文字を使って指定した認可識別子と同じ認可識別子をこのオプションに指定する場合は，すべての英字を大文字で指定してください。

最大30バイトの認可識別子を指定できます。

認可識別子を省略した場合に仮定する認可識別子については，マニュアル「HiRDB SQLリファレンス」の「名前の修飾」を参照してください。

/h64

64ビットモード用のポストソースを作成する場合に指定します。ただし，32ビット版のプリプロセサを使用した場合は指定できません。

long型を使用した埋込み変数の宣言はエラーになります。

/Xe｛y｜n｝

PREPRARE文実行時のカーソルを，自動的にクローズするかどうかを指定します。

y：

カーソルを自動的にクローズするポストソースを生成します。

n：

カーソルを自動的にクローズしないポストソースを生成します。

省略した場合，クライアント環境定義PDPRPCRCLSの指定値に従いポストソースを生成します。

/Xv

/E2オプションを指定した場合に，VARCHAR型，及びBINARY型に対応する構造体を，通常の構造体として解析するときに指定します。VARCHAR型，及びBINARY型に対応する埋込み変数を宣言するためには，SQL TYPE IS〜を使用します。このオプションは，/E2オプションと同時に指定する必要があります。なお，繰返し列のマクロを使用している場合，このオプションを指定しないでください。

/XA

X/Openに準じたAPIを使用して，UAPを作成する場合に指定してください。

/Xo

UAPから抽出したSQL文を標準出力へ出力する場合に指定します。このとき，出力方法は次のようになります。

SQL文中の埋込み変数は?パラメタに置換します。

1行SELECT文のINTO句を削除します。

SQL文中の語句間の空白が2文字以上の場合，空白1文字に置き換えます。

複数行に分割して記述しているSQLは1行にまとめます。

実行時にサーバに送られるSQLだけ出力します。実行されないSQL文（WHENEVER文，BEGIN DECLARE SECTIONなど）は出力しません。

SQLの末尾にはセミコロン（;）を付けます。

埋込み変数の宣言は出力しません。

動的SQLは，SQLがリテラルで指定されている場合にだけ出力します。そのほかの場合は出力しません。

OPEN文は，形式1のカーソルの場合だけ，問合せ式を出力します。

ポストソースは生成しません。

/E｛1｜2｜3｝["オプション文字列"]

UAP中で使用しているプリプロセサ宣言文の有効化と，埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。なお，このオプションはPDOCC.EXEでは無効となります。

/E1：

プリプロセサ宣言文の有効化を指定します。

/E2：

埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。また，ポインタでの埋込み変数指定，及び構造体の参照を使用する場合にも指定します。

/E3：

/E1と/E2の両方を指定します。

"オプション文字列"：

インクルードするファイルを検索するディレクトリのパス名を，Cコンパイラに指定する/Iオプションの形式で指定します。オプション文字列に複数のオプションを記述する場合は，セミコロンで区切ってください。また，任意のCコンパイラも指定できます。なお，/E2オプション指定時には無視されます。

≪留意事項≫

/E1又は/E3を指定すると，内部的にCコンパイラが呼び出されるため，PATH環境変数にコンパイラへのパス名を設定しておく必要があります。

/E1又は/E3を指定すると，UAPソースファイルがあるディレクトリに作業用の一時ファイルを作成します。詳細は表「構文解析の対象ファイルとプリプロセスオプションの関係」の注7を参照してください。

/E1又は/E3を指定し，UAPソースファイル中でSQLのCOPY文を使用する場合は，-Ecオプションを同時に指定する必要があります。

-E3オプション指定時にインクルードするヘッダファイルについては，ISO/IEC 9899:1999で定義された標準ヘッダファイルをサポートしています。それ以外のヘッダファイルについては，プリプロセス実行時にエラーとなることがあります。

/Xp

厳密なSQLの構文チェックをする場合に指定してください。ただし，次のUAPをプリプロセスする場合は指定しないでください。

XDM/RD E2接続用のUAP

SQL予約語削除機能を使用するUAP

集合演算子MINUSを使用するUAP

これらのUAPをプリプロセスするときにこのオプションを指定すると，XDM/RD E2又はHiRDBサーバで使用できるSQLが構文エラーとなることがあります。

/XU16[L｜B][T"型指定子"]

UTF-16のバイトオーダを指定します。

埋込み変数の宣言で文字集合名UTF16を指定した場合に，埋込み変数に格納するUTF-16のバイトオーダを指定します。

/XU16L[T"型指定子"]：

UTF-16のバイトオーダをリトルエンディアンにします。

/XU16B[T"型指定子"]：

UTF-16のバイトオーダをビッグエンディアンにします。

L/Bを省略，又はこのオプションを省略した場合は，UTF-16のバイトオーダを，プリプロセスを実行するOSのバイトオーダにします。

UTF-16の埋込み変数の展開に使用する型指定子を指定します。

SQL TYPE IS CHAR，又はSQL TYPE IS VARCHARで始まるデータ記述で埋込み変数を宣言した場合に，ポストソース中に展開されるCの宣言の中でUTF-16の文字データを格納する変数，又は構造体メンバに付ける型指定子を指定します。

型指定子が示す型の配列要素１個に，UTF-16の2バイトの文字データ１個を格納するので，sizeof(型指定子)==2となる型指定子だけが指定できます。

<型指定子の指定例>

次に示す指定例は，sizeof(wchar_t)==2となるコンパイラでだけ使用できます。

/XU16T"wchar_t"

次に示す指定例は，sizeof(unsigned short)==2なので，どのコンパイラでも使用できます。

/XU16T"unsigned short"

T"型指定子"を省略，又はこのオプションを省略した場合，型指定子にcharが使用されます。このとき，char型の配列要素2個にUTF-16の2バイトの文字データ１個を格納します。

/g｛c89｜c99｝

/E2，/E3オプションを指定した場合，SQLプリプロセサがUAPソースを解析するとき準拠するCの標準規格を指定します。

/gc89：

C89（ISO/IEC 9899:1990, Programming languages - C）に準拠します。

/gc99：

C99（ISO/IEC 9899:1999, Programming languages - C）に準拠します。

省略した場合，/gc89が仮定されます。

/E2，/E3オプションを指定しない場合，このオプションを指定しても無視されます。

/Ec

/E1又は/E3オプションを指定した場合に，UAPソースファイル中でSQLのCOPY文を使用できるようにします。

なお，それ以外の場合，このオプションの指定に関係なくCOPY文は使用できます（このオプションの指定は無視されます）。

≪留意事項≫

このオプションを指定するとUAPソースファイルがあるディレクトリに作業用の一時ファイルを作成します。詳細は表「構文解析の対象ファイルとプリプロセスオプションの関係」の注7を参照してください。

/Xs

UAPに埋め込んだSQL文中に単純注釈（-- 〜 改行）を記述する場合に指定します。

単純注釈の記述規則については，「SQLの記述規則」の10.を参照してください。

このオプションは，省略時にも仮定されます。ただし，0904互換モードを適用した場合は仮定されませんので，オプションを指定することを検討してください。

注1

/Eオプション指定時に使用できる機能を次に示します。

機能

省略

/E1

/E2

/E3

#defineで定義したマクロを有効にする

×

○

×

○

#includeでインクルードしたヘッダファイルを有効にする※

×

○

×

○

#if，#ifdefなどの条件コンパイルを有効にする

×

○

×

○

UAP中の任意の場所で宣言した変数を，埋込み変数として使用する

×

×

○

○

構造体を埋込み変数として使用する

×

×

○

○

ポインタを埋込み変数として使用する

×

×

○

○

（凡例）

○：該当する機能を使用できます。

×：該当する機能は使用できません。

注※

ヘッダファイル中に記述できる項目については，「SQLの記述規則」の23.を参照してください。

注2

/Eオプションを指定した場合，プリプロセサはMicrosoft Visual C++コンパイラ（呼び出し時のロード名：CL.EXE）を内部的に呼び出します。

これ以外のCコンパイラを使用する場合は，オプション文字列の先頭に，コンパイラのロードのディレクトリを含めた絶対パス名で指定します。ディレクトリ名，及びロード名には，空白及びセミコロンを含めることはできません。環境変数PATHにパス名を追加している場合は，絶対パス名でなくてもかまいません。

ロード名を指定する場合は，ロード名とオプションの間をセミコロンで区切ってください。

使用するコンパイラは，/Cオプションと/Eオプションをサポートしている必要があります。プリプロセサは，#define，#includeなどの擬似命令を処理するために，内部的にCコンパイラに対して/Cオプション，及び/Eオプションを指定して，作業用の一時ファイルを作成します。それ以外のオプション文字列に指定できるオプションは，使用するコンパイラの仕様に依存しますが，/Cオプション又は/Eオプションに背反するオプションを指定すると，プリプロセサはエラーとなります。ヘルプなどを表示するオプションを使用した場合は，動作が保証されません。

/E2，/E3オプションを指定すると，プリプロセサはUAP中の任意の箇所で宣言されている埋込み変数を認識するために，/gオプションで指定，又は仮定されたCの標準規格（C89又はC99）に準拠して構文を解析します。

構文解析の対象ファイルとプリプロセスオプションの関係を次の表に示します。

表8‒10　構文解析の対象ファイルとプリプロセスオプションの関係

項番

構文解析の対象となるファイル

プリプロセスオプション

-E2

-E3

-E2及び-E3の指定なし

1

UAPソースファイル

○

○

×※

2

COPY文で引き込むヘッダファイル

○

○

×※

3

#includeで引き込むヘッダファイル

×

○

×

（凡例）

○：構文解析します。

×：構文解析しません。

注※

選択した規格に準拠した構文解析はしないで，埋込みSQL宣言節の中だけを埋込み変数のデータ記述形式に合わせて解析します。

なお，構文解析の対象ファイルの中で選択した規格に準拠しない構文が使用されている場合，構文エラーになることがあります。

構文エラーを回避するには，構文解析の対象ファイルの中で選択した規格に準拠した構文を使用するようにします。コンパイラ製品に付属しているヘッダファイル中で選択した規格に準拠しない構文が使用されているために構文エラーになる場合は，選択した規格に準拠したコンパイルをするコンパイラオプションを/E3オプション文字列に指定することで，問題を回避できることがあります。

注3

埋込み変数の宣言に文字集合名UTF16を指定した場合に，SQLプリプロセサは文字集合名記述領域に文字集合名を設定するソースコードをポストソース中に展開します。そのソースコードは，/XU16オプションの指定に依存して，リトルエンディアンの場合にはUTF-16LEを設定し，ビッグエンディアンの場合にはUTF-16BEを設定します。

埋込み変数を使用しないで，SQL記述領域と文字集合名記述領域を使用してUAP実行時に入出力変数の文字集合名を動的に決定する場合には，/XU16オプションで指定したバイトオーダは無効になります。この場合に，文字集合名をUTF16にするとバイトオーダがビッグエンディアンになります。

注4

/XU16オプションで型指定子を指定する機能の対象となるデータ記述を，次に示します。

SQL TYPE IS CHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名;

SQL TYPE IS CHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名[m];

SQL TYPE IS CHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 *変数名;

SQL TYPE IS VARCHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名;

SQL TYPE IS VARCHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 変数名[m];

SQL TYPE IS VARCHAR(2n) CHARACTER SET [IS] [MASTER.]UTF16 *変数名;

注5

/gオプションの指定内容によって，C99で追加された予約語の扱いが変わります。C99で追加された予約語を次に示します。

restrict，inline，_Bool，_Complex，_Imaginary，_Pragma

ただし，restrictとinlineについては，C89では変数名などの識別子として使用できましたが，C99では識別子として使用できません。C89に準拠している既存のUAPで，restrictとinlineを識別子として使用している場合，そのUAPをC99に準拠して解析するとエラーになります。

C99で追加された予約語の扱いを次の表に示します。

/gオプション

扱い

省略

識別子として扱います。※

/gc99指定

C99に準拠して予約語として扱います。

/gc89指定

識別子として扱います。※

注※

先頭文字が下線文字（_）で2文字目が英大文字（A〜Z），又は下線文字の名前がC89の場合も，Cのライブラリ用として予約されています。このため，_Bool，_Complex，_Imaginary，_PragmaをUAP中で識別子として使用した場合，プリプロセサの動作は保証できません。

/gオプションの指定内容を次の表に示します。/gオプションの指定内容は，C99で追加された予約語の扱い以外には影響しません。

C99で追加された予約語の使用状況

/gオプションの指定内容

予約語として使用する

/gc99を指定することで，SQLプリプロセサを実行できます。ただし，Visual C++(バージョン2008まで)はC99に対応していないので，ポストソースをコンパイルできません。Visual C++以外のコンパイラを使用した場合，動作は保証できません。

識別子として使用する

/gオプションを省略，又は/gc89を指定します。

予約語としても識別子としても使用しない

/gオプションを指定する必要はありません。コメントとして任意に指定できます。

/gオプションを指定する場合は，次の点に注意してください。

C99に準拠したコンパイルができるコンパイラ製品を使用する場合，コンパイラ製品に付属しているヘッダファイルの中で，C99で追加された予約語が予約語として使用されていることがあります。/E3オプションを指定すると，そのヘッダファイルが#include文で引き込まれるおそれがあります。

コンパイラ製品の中には，予約語の扱いを個別に指定できるものがあります（例えば，restrictは予約語とし，inlineは予約語としない，と指定できます）。SQLプリプロセサは予約語の扱いを個別に指定できません。

注6

/E2，/E3オプションを指定しない場合，埋込みSQL宣言節で，C99で追加された予約語を識別子として扱います。また，埋込みSQL宣言節とSQL文（EXEC SQL 〜 ;）以外は解析しません。

注7

-E1，-E3，又は-Ecオプションを指定すると，プリプロセサはUAPソースファイルがあるディレクトリに一時ファイルを作成します。一時ファイルはプリプロセス終了時にプリプロセサが削除します。一時ファイルの名称は拡張子を除いてUAPソースファイルと同じです。拡張子を次に示します。

プリプロセスオプションが-E1又は-E3の場合：.I2

プリプロセスオプションが-Ecの場合：.I3

-E1又は-E3オプションと-Ecオプションを同時に指定した場合は，両方の拡張子の一時ファイルが作成されます。

プリプロセス実行時に一時ファイルと同名のファイルが既に存在すると，プリプロセサはそのファイルを上書きしてから削除します。ただし，プリプロセサの実行ユーザにそのファイルを上書きする権限がない場合，プリプロセサは次のメッセージを出力して処理を終了します。

拡張子.I2のファイルの場合：KFPZ13576-Eメッセージ（内部コンパイラ処理でエラー）

拡張子.I3のファイルの場合：KFPZ13706-Eメッセージ（ファイルのオープンでエラー）

また，プリプロセサの実行ユーザにそのファイルを削除する権限がない場合，プリプロセサはファイルの削除エラーを無視して処理を続行します。

誤って削除されないように，SQLプリプロセサ以外が作成するファイルの拡張子にはこれらの一時ファイルと同じ拡張子を使用しないことをお勧めします。同じ拡張子の同名のファイルを既に使用している場合は，それらをUAPソースファイルがあるディレクトリに置かないように注意してください。

なお，プリプロセサが異常終了すると，一時ファイルが削除されないで残ることがあります。残った一時ファイルは，同じUAPソースファイルに対するプリプロセスが再実行され正常終了すれば，削除されます。

C言語の場合のコマンド指定例

＜例1＞

UAPソースファイルの名称がSAMPLEで，ポストソースを出力しない場合

  PDCPP SAMPLE.EC /S

＜例2＞

UAPソースファイルの名称がSAMPLEで，出力するポストソースのファイル名称をMAINにする場合

  PDCPP SAMPLE.EC /O MAIN.C

C++言語の場合のコマンド指定例

＜例1＞

UAPソースファイルの名称がSAMPLEで，ポストソースを出力しない場合

  PDOCC.EXE SAMPLE.ECP /S

＜例2＞

UAPソースファイルの名称がSAMPLEで，出力するポストソースのファイル名称をMAINにする場合

  PDOCC.EXE SAMPLE.ECP /O MAIN.CPP

(c)　SQLプリプロセサのリターンコード

SQLプリプロセサは，処理終了後にリターンコードをOSに返します。

リターンコードは，OSのバッチコマンドERRORLEVELで参照できます。

リターンコードとその内容を次の表に示します。

表8‒11　SQLプリプロセサのリターンコード（Windows環境でのC言語の場合）

リターンコード

内　　　　　容

0

正常終了

4，8

エラー発生（プリプロセスを最後まで続行）

12，16

エラー発生（プリプロセスを途中で終了）

(d)　エラーの出力

SQLプリプロセサは，SQL文に文法上のエラーが発生した場合，そのSQL文を無視して処理を続行します。しかし，オプションの指定に誤りがある場合，処理を中断します。また，メモリ不足やファイル入出力エラーなど，システム上でエラーが発生し，それ以降の処理ができない場合，処理の途中でも終了します。

SQL文に文法上のエラーが発生したとき，SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると，エラーメッセージをファイルに格納できます。ファイルを参照すると，エラー内容，UAPソースファイル名，エラーが発生した箇所（SQL文の行番号）などが分かります。

SQLプリプロセサの標準入出力を次の表に示します。

表8‒12　SQLプリプロセサの標準入出力（Windows環境でのC言語の場合）

ファイル

用　　　　　途

標準入力

ファイルの入力（ユーザは使用不可）

標準出力

ファイルの出力（ユーザは使用不可）

標準エラー出力

エラーメッセージの出力

(2)　COBOL言語の場合

(a)　環境変数の設定

UAPをプリプロセスする前に，必要に応じてHIRDB.INIファイルに次に示す環境変数を設定します。

なお，HIRDB.INIファイルは，%windir%ディレクトリに格納されています。

PDCBLFIX：

UAPソースファイルの規定の識別子以外に，任意のファイル識別子を使用する場合に指定します。ファイル識別子は，ピリオドで始まる4文字までの任意の文字列を設定します。なお，この環境変数に設定したファイル識別子は，入力ファイルにだけ使用できます。

PDCBLLIB：

SQLのCOPY文でソースファイルに引き込まれる登録集原文を検索するディレクトリを指定します。複数のディレクトリを指定する場合，ディレクトリ同士をセミコロンで区切ります。この環境変数を省略すると，カレントディレクトリだけが検索されます。

PDCLTLANG：

特に文字コード種別を指定してプリプロセスする場合に指定します。省略した場合は，sjisが仮定されます。詳細については，「クライアント環境定義の設定内容」の「PDCLTLANG」を参照してください。

PDDEFAULTOPTION：

プリプロセスのオプションについて，省略時の動作を指定します。通常は，この環境変数を指定する必要はありません。互換モードを適用したい場合に，指定してください。詳細については，「クライアント環境定義の設定内容」の「PDDEFAULTOPTION」を参照してください。

＜例＞

[HiRDB]                         … 1
PDCBLFIX=.AAA                   … 2
PDCBLLIB=E:¥USER¥COPY           … 3

＜説明＞

[HiRDB]と記述します。

UAPソースファイルの識別子として，.AAAも有効にします。

COPY文で引き込む登録集原文を検索するディレクトリ（この例ではE:¥USER¥COPY）を指定します。

(b)　SQLプリプロセサの起動

SQLプリプロセサの起動は，次に示す三つの方法があります。

アイコンの重ね合わせによる実行

ファイル名の指定による実行

コマンドプロンプト又はMS-DOSプロンプトからの実行

アイコンの重ね合わせによる実行

エクスプローラでプリプロセスしたいファイルをドラッグして，プリプロセサのファイル（PDCBL.EXE（COBOL言語の場合），又はPDOCB.EXE（OOCOBOL言語の場合））に重ねると実行できます。

ファイル名の指定による実行

プリプロセサのアイコン（PDCBL.EXE（COBOL言語の場合），又はPDOCB.EXE（OOCOBOL言語の場合））をクリックし，次に示す手順で実行します。

ファイルメニューから「ファイル名を指定して実行」を選択します。

コマンドラインにファイル名，及びオプションを指定して実行します。

コマンドプロンプト又はMS-DOSプロンプトからの実行

コマンドプロンプト又はMS-DOSプロンプトを起動し，PDCBL.EXE（COBOL言語の場合），又はPDOCB.EXE（OOCOBOL言語の場合）コマンドを入力して実行します。

コマンドラインに入力するコマンドの形式を次に示します。

PDCBL.EXE 入力ファイル名称 ［オプション［出力ファイル名称｜認可識別子］］

注　OOCOBOL言語の場合，下線で示す部分をPDOCB.EXEに置き換えてください。

入力ファイル名称：

UAPソースファイルの名称を指定します。ファイル識別子は，.ECB，.COB，.CBLのどれか（COBOL言語の場合），又は.EOC（OOCOBOL言語の場合）を指定します。

出力ファイル名称：

ポストソースファイルの名称を指定します。出力ファイル名称を省略した場合，ファイル識別子は.CBL（COBOL言語の場合），又は.OCB（OOCOBOL言語の場合）を指定します。

認可識別子：

SQLで認可識別子を省略した場合に仮定する認可識別子を指定します。認可識別子を省略した場合，CONNECT時のユーザ識別子が仮定されます。

オプション：

必要に応じて次の表に示すオプションを指定します。なお，オプションは大文字，小文字を区別しません。

表8‒13　プリプロセスオプション（Windows環境のCOBOL言語の場合）

プリプロセスオプション

内容

/S

構文チェックだけをして，ポストソースを出力しない場合に指定します。このオプションを省略すると，ポストソースファイルが出力されます。なお，同時に/Xpも指定しないと，SQLプリプロセサは厳密なSQLの構文チェックができないため，SQL文に文法上のエラーが発生していても発見できない場合があるので注意が必要です。

/O ファイル名

出力するポストソースのファイル名称を変更する場合に指定します。

このオプションを省略すると，入力ファイル名称のファイル識別子を.CBL（COBOL言語の場合），又は.OCB（OOCOBOL言語の場合）に変更されたものが出力ファイル名称になります。

入力ファイルの識別子が.CBL（COBOL言語の場合），又は.OCB（OOCOBOL言語の場合）の場合，必ずこのオプションを指定して，ポストソースのファイル名称を.CBL以外（COBOL言語の場合），又は.OCB以外（OOCOBOL言語の場合）の識別子に変更してください。

/XC

次の英数字定数を囲む分離符を，引用符（"）に変更する場合に指定します。

このオプションを省略すると，次の英数字定数を囲む分離符はアポストロフィ（'）になります。

SQLプリプロセサが生成するソースコード中の英数字定数

SQLプリプロセサが生成するCOPY文でポストソースに引き込む登録集原文ファイル中の英数字定数

/A 認可識別子

静的SQLで認可識別子を省略した場合，及び仮定する認可識別子を変更する場合に指定します。

静的SQLとは，INSERT文，UPDATE文，DELETE文，1行SELECT文，OPEN文（形式1），CALL文，LOCK文，及びPURGE TABLE文を示します。

認可識別子を引用符（"）で囲んで指定することはできません。指定した認可識別子は常に大文字と小文字を区別して扱います。SQL文中に引用符で囲まないで指定した認可識別子は小文字を大文字として扱います。そのため，ほかのUAPなどに記述したSQL文中に引用符で囲まないで小文字を使って指定した認可識別子と同じ認可識別子をこのオプションに指定する場合は，すべての英字を大文字で指定してください。

最大30バイトの認可識別子を指定できます。

認可識別子を省略した場合に仮定する認可識別子については，マニュアル「HiRDB SQLリファレンス」の「名前の修飾」を参照してください。

/h64

64ビットモード用のポストソースを作成する場合に指定します。ただし，32ビット版のプリプロセサを使用した場合は指定できません。

/XD

DLLを作成する場合に指定します。

DLLを作成する場合，コンパイラはCOBOL85 Version4.0 04-02以降が前提となります。/XDオプションを指定してプリプロセスしたUAPと，指定しないでプリプロセスしたUAPを混在させてアプリケーションを作成しないでください。実行時にCOBOLのランタイムライブラリでエラー（KCCBO204R-S）が発生します。

/Xe｛y｜n｝

PREPRARE文実行時のカーソルを，自動的にクローズするかどうかを指定します。

y：

カーソルを自動的にクローズするポストソースを生成します。

n：

カーソルを自動的にクローズしないポストソースを生成します。

省略した場合，クライアント環境定義PDPRPCRCLSの指定値に従いポストソースを生成します。

/XAD

X/Openに準じたAPIを使用したUAPを，DLLとして作成する場合に指定してください。

/XA

X/Openに準じたAPIを使用して，UAPを作成する場合に指定してください。

/Xo

UAPから抽出したSQL文を標準出力へ出力する場合に指定します。このとき，出力方法は次のようになります。

SQL文中の埋込み変数は?パラメタに置換します。

1行SELECT文のINTO句を削除します。

SQL文中の語句間の空白が2文字以上の場合，空白1文字に置き換えます。

複数行に分割して記述しているSQLは1行にまとめます。

実行時にサーバに送られるSQLだけ出力します。実行されないSQL文（WHENEVER文，BEGIN DECLARE SECTIONなど）は出力しません。

SQLの末尾にはセミコロン（;）を付けます。

埋込み変数の宣言は出力しません。

動的SQLは，SQLがリテラルで指定されている場合にだけ出力します。そのほかの場合は出力しません。

OPEN文は，形式1のカーソルの場合だけ，問合せ式を出力します。

ポストソースは生成しません。

/E2

埋込み変数を埋込みSQL宣言節で宣言しないで使用する場合に指定します。

/Xp

厳密なSQLの構文チェックをする場合に指定してください。ただし，次のUAPをプリプロセスする場合は指定しないでください。

XDM/RD E2接続用のUAP

SQL予約語削除機能を使用するUAP

集合演算子MINUSを使用するUAP

これらのUAPをプリプロセスするときにこのオプションを指定すると，XDM/RD E2又はHiRDBサーバで使用できるSQLが構文エラーとなることがあります。

/XU16[L｜B]

COBOL2002のUnicode機能を使用する場合に指定します。COBOL2002のUnicode機能を使用したUAPの実行については，「COBOL2002のUnicode機能を使用したUAPの実行」を参照してください。

日本語項目の文字コード（UTF-16）のバイトオーダを指定します。

/XU16L：

UTF-16のバイトオーダをリトルエンディアンにします。

/XU16B：

UTF-16のバイトオーダをビッグエンディアンにします。

/XU16：

UTF-16のバイトオーダを，プリプロセスを実行するOSのバイトオーダにします。

Windows，Linuxの場合はリトルエンディアンにします。

AIXの場合はビッグエンディアンにします。

上記以外のOSでこのオプションを指定した場合は，プリプロセサの動作は保証できません。

COBOL2002のUnicode機能を使用しない場合は，このオプションを指定しないでください。指定すると，埋込み変数の宣言に日本語項目を使用できなくなります。

/Xm

複数接続機能を使用したUAPをプリプロセスする場合に指定します。詳細は，「COBOL言語で複数接続機能を使用する場合の注意事項」を参照してください。

このオプションは，省略時にも仮定されます。ただし，0904互換モードを適用した場合は仮定されませんので，オプションを指定することを検討してください。

/Xs

UAPに埋め込んだSQL文中に単純注釈（-- 〜 改行）を記述する場合に指定します。

単純注釈の記述規則については，「SQLの記述規則」の13.を参照してください。

このオプションは，省略時にも仮定されます。ただし，0904互換モードを適用した場合は仮定されませんので，オプションを指定することを検討してください。

/Xb

COBOL2002のコンパイラオプション-BigEndian,Binを使用して2進項目のバイトオーダをビッグエンディアンにする場合に指定します。詳細は，「COBOLのビッグエンディアンオプションへの対応」を参照してください。

/Xr

SQL文の実行時にCOBOLのRETURN-CODE特殊レジスタを更新しないポストソースを生成します。

UAPが呼び出し元プログラムに返すリターンコードをRETURN-CODE特殊レジスタに設定してから，呼び出し元プログラムに制御を戻すまでの間にSQL文を実行する場合，このオプションを指定してください。

省略した場合，SQL文の種類によってRETURN-CODE特殊レジスタの更新有無が変わります。SQL文の種類によるRETURN-CODE特殊レジスタの更新有無については，「SQLの記述規則」の18.を参照してください。

COBOL言語の場合のコマンド指定例

＜例1＞

UAPソースファイルの名称がSAMPLEで，ポストソースを出力しない場合

  PDCBL SAMPLE.ECB /S

＜例2＞

UAPソースファイルの名称がSAMPLEで，出力するポストソースのファイル名称をMAINにする場合

  PDCBL SAMPLE.ECB /O MAIN.CBL

OOCOBOL言語の場合のコマンド指定例

＜例1＞

UAPソースファイルの名称がSAMPLEで，ポストソースを出力しない場合

  PDOCB.EXE SAMPLE.EOC /S

＜例2＞

UAPソースファイルの名称がSAMPLEで，出力するポストソースのファイル名称をMAINにする場合

  PDOCB.EXE SAMPLE.EOC /O MAIN.OCB

(c)　SQLプリプロセサのリターンコード

SQLプリプロセサは，処理終了後にリターンコードをOSに返します。

リターンコードは，OSのバッチコマンドERRORLEVELで参照できます。

リターンコードとその内容を次の表に示します。

表8‒14　SQLプリプロセサのリターンコード（Windows環境でのCOBOL言語の場合）

リターンコード

内　　　　　容

0

正常終了

4，8

エラー発生（プリプロセスを最後まで続行）

12，16

エラー発生（プリプロセスを途中で終了）

(d)　エラーの出力

SQLプリプロセサは，SQL文に文法上のエラーが発生した場合，そのSQL文を無視して処理を続行します。しかし，オプションの指定に誤りがある場合，処理を中断します。また，メモリ不足やファイル入出力エラーなど，システム上でエラーが発生し，それ以降の処理ができない場合，処理の途中でも終了します。

SQL文に文法上のエラーが発生したとき，SQLプリプロセサはエラーメッセージを標準エラー出力へ出力します。標準エラー出力をリダイレクトすると，エラーメッセージをファイルに格納できます。ファイルを参照すると，エラー内容，UAPソースファイル名，エラーが発生した箇所（SQL文の行番号）などが分かります。

SQLプリプロセサの標準入出力を次の表に示します。

表8‒15　SQLプリプロセサの標準入出力（Windows環境でのCOBOL言語の場合）

ファイル

用　　　　　途

標準入力

ファイルの入力（ユーザは使用不可）

標準出力

ファイルの出力（ユーザは使用不可）

標準エラー出力

エラーメッセージの出力

8.2.4　プリプロセサ宣言文の有効化

(1)　概要

プリプロセサでは，オプションでCコンパイラのプリプロセサ宣言文を使用できるようにしています。

/Eオプション（UNIX版の場合は-Eオプション）を指定した場合，プリプロセサでは次の機能を実行できます。

#define宣言文を使用した定数及びマクロの定義

#include文で引き込んだインクルードファイル内の定数及びマクロの定義※

#ifdef文，#ifなどの条件付きコンパイル

埋込み変数宣言時のマクロでの定数指定

注※

SQL文，及びSQL TYPE IS 型の変数宣言は，インクルードファイルの中には記述できません（プリプロセサは，ヘッダのポストソースは生成しないため，コンパイル時にエラーとなります）。詳細は，「SQLの記述規則」の23.を参照してください。

(2)　使用例

(a)　定数の使用

UAPソースファイル中で，次の埋込み変数宣言が記述されているとします。

#include  “user.h”
EXEC SQL BEGIN DECLARE SECTION;
  char  xchar1[MAX_CHAR_LEN];
EXEC SQL END DECLARE SECTION;

UAPがインクルードしているヘッダファイル（user.h）の中で，次のような定数が定義されているとします。

#define  MAX_CHAR_LEN  256

プリプロセサは，インクルードファイルを読み込み，MAX_CHAR_LENの定義値を使用して，埋込み変数宣言を「char xchar1[256];」に変換してから解析します。ただし，マクロ定数は，SQL先頭子とSQL終了子の間（SQL文中） には使用できません。

インクルードファイルを検索するためのディレクトリパスは，オプションの引数として指定します。Cコンパイラのデフォルトのディレクトリは指定する必要はありません。

(b)　条件付きコンパイル

#ifdefなどを使用して，プリプロセスするSQL文を選択できます。例を次に示します。

#ifdef  DEF_SWITCH
    EXEC SQL DECLARE CUR1 CURSOR FOR SELECT * FROM TABLE1;
#else
    EXEC SQL DECLARE CUR1 CURSOR FOR SELECT * FROM TABLE2;
#endif

ただし，Cコンパイラのプリプロセサ宣言文は，SQL先頭子とSQL終了子の間（SQL文中）には記述できません。

8.2.5　埋込みSQL宣言節の不要化

(1)　概要

プリプロセサでは，/Eオプション（UNIX版の場合は-Eオプション）を指定すると，UAPソースファイル中の任意の箇所で宣言されているSQLのデータ型に対応した変数を，埋込み変数として使用できます。ただし，register記憶クラスの変数は，埋込み変数として使用できません。

変数の有効範囲は，UAPソースファイルを記述しているホスト言語の規則に従います。この機能を使用できるのは，C言語又はCOBOL言語でUAPソースファイルを記述している場合だけです。

この機能を使用すると，次のことができます。

変数宣言を，埋込みSQL開始宣言（BEGIN DECLARE SECTION）及び埋込みSQL終了宣言（END DECLARE SECTION）で囲まなくても，埋込み変数として使用できます。また，併用もできます。

大域変数，局所変数，及び関数の引数の有効範囲を，ホスト言語の文法に従って判定します。埋込み変数の有効範囲が異なれば，同じ名称の変数を宣言しても，異なる埋込み変数として区別されます。この場合，その変数を使用しているSQL文を含む最も内側の変数が指定されたとみなされます。

(2)　使用例

使用例を次に示します。

int fetchdata(long  xtanka){
  char    xscode[5];
  char    xsname[17];
  char    xcol[3];
  long    xgryo;
      ：
  EXEC SQL
      DECLARE CR3 CURSOR FOR
         SELECT SCODE,SNAME,COL,ZSURYO
         FROM ZAIKO WHERE TANKA=:xtanka;
      ：
  EXEC SQL OPEN CR3 ;
      ：
  /*  見出し */
  printf("    *****  在庫表 リスト  *****¥n¥n");
  printf("    商品コード  商品名            色  単価      現在庫量¥n");
  printf("    ----        ----------------  --  --------  --------¥n");

  EXEC SQL WHENEVER SQLERROR GOTO OWARI;
  EXEC SQL WHENEVER NOT FOUND GOTO OWARI;

  /* FETCH */
  for(;;){
      EXEC SQL
          FETCH CR3 INTO :xscode,:xsname,:xcol,:xgryo;
          printf("    %4s      %-16s  %2s  %8d  %8d¥n",
                  xscode, xsname, xcol, xtanka, xgryo);
    }
  }
OWARI:

8.2.6　ポインタでの埋込み変数指定

(1)　概要

C言語では，/Eオプション（UNIX版の場合は-Eオプション）でポインタを埋込み変数として宣言して使用できます。この機能を使用すると，動的に確保した領域をSQL文で直接指定できます。

オプションについては，「UNIX環境でのプリプロセス」又は「Windows環境でのプリプロセス」のオプションの説明を参照してください。また，ポインタを使用できるSQLについては，「プリプロセサの/E2，/E3オプションを指定した場合のポインタ，構造体，及び構造体修飾の使用可否」を参照してください。

ポインタ変数は，C言語の文法に従って宣言します。例を次に示します。

long  *xtanka;
long  *xgryo;
char  *xsname;
:
xtanka  =  (long *)malloc(sizeof(long));
xgryo  =  (long *)malloc(sizeof(long));
xsname  =  (char *)malloc(MAX_CHAR_LEN+1);
memset(xsname, ‘ ‘, MAX_CHAR_LEN);
xsname [MAX_CHAR_LEN] = '¥0';
EXEC SQL FETCH CUR1 INTO :xtanka,:xgryo,:xsname;

(2)　規則

ポインタ変数は，SQL文中では変数名の前にコロンを付けます。アスタリスクは付けません。

参照される値のサイズは，宣言で指定した型のサイズになります。ただし，固定長文字列型（CHAR）を除きます。

固定長文字列型のポインタのデータ長は，プリプロセス時ではなく，実行時に求められます。値のサイズは，ポインタが指している領域が格納している，文字列の終端（¥0）までの長さ（strlen（ポインタ変数））になります。1行SELECT文やFETCH文の検索結果を格納する場合も，SQL文を実行する前に，あらかじめ領域全体を¥0以外の文字でクリアして，末尾に¥0を設定しておく必要があります。

ポインタが指す領域は，ユーザが確保しておく必要があります。固定長文字列型のポインタの場合は，¥0を格納するために1バイト余分に領域を確保します。ポインタが不正な値の場合，及びデータを格納するのに十分な領域が確保できない場合は，動作が保証されません。

ポインタへのポインタは使用できません。

構造体へのポインタは指定できます。

クラスへのポインタは使用できません。

配列へのポインタは使用できません。配列へのポインタを使用する場合は，構造体を使用して次のように宣言します。

struct {
long  xtanka[50];
long  xgryo[50];
char  xsname[50][17];
} *xrec_ptr;

(3)　RISC型のCPUを使用しているマシンで繰り返し型のポインタを使用する場合の注意事項

繰り返し列型の変数は，次の構造となっているため，語境界に合わせたアドレス(1)をポインタに設定する必要があります。

通常，malloc()などで確保した領域は，既に語境界に調整されているため，特に問題は発生しません。ただし，ユーザが独自にメモリアドレスを計算して割り当てる場合は，語境界に調整する必要があります。

ポインタに設定するアドレスが語境界に設定されていないと，繰返し列の操作用のマクロを利用して，データを参照，設定したときにメモリアクセス例外が発生します。繰返し列の埋込み変数の構造については，「繰返し列の展開形式」を参照してください。

FLOAT型の繰返し列の場合，繰り返し回数を格納する領域よりも繰返し要素の方がデータ長が大きくなります。そのため，繰返し要素の語長に合わせたアドレスに，境界調整をしておく必要があります。ポインタには，先頭の空き領域を含めたアドレス(2)を設定します。

プリプロセサは，自動的に先頭から4バイト後ろのアドレス(3)を，繰返し列の先頭として使用するポストソースを生成します。FLOAT型の繰返し列を操作するマクロも，アドレス(3)を先頭として使用しています。ただし，SQL記述領域を使用して繰返し列のアドレスを直接設定する場合は，(3)のアドレスを設定してください。

繰返し要素数の最大値は宣言時の値で決まるため，それより小さい領域を割り当てると，メモリアクセス例外が発生するおそれがあります。

通常は，次のコーディングのようにメモリを確保すれば問題は発生しません。

PD_MV_SINT(32) *ptr;              /* 最大要素数32 */
ptr = malloc(sizeof(*ptr));
EXEC SQL FETCH CUR1 INTO :ptr;

8.2.7　構造体の参照

(1)　概要

オプションを指定すると，C言語の構造体を使用して，複数個の埋込み変数を一度に指定できます。

構造体は，次の箇所に埋込み変数として使用できます。

1行SELECT文又はFETCH文のINTO句

INSERT文のVALUES句

EXECUTE文のUSING句又はINTO句

オプションについては，「UNIX環境でのプリプロセス」又は「Windows環境でのプリプロセス」のオプションの説明を参照してください。また，構造体を使用できるSQLについては，「プリプロセサの/E2，/E3オプションを指定した場合のポインタ，構造体，及び構造体修飾の使用可否」を参照してください。

(2)　規則

構造体を埋込み変数として指定すると，プリプロセサは構造体の各メンバが埋込み変数として記述されたとみなして，メンバが個別に記述された場合と同じポストソースを展開します。ポストソース中に展開されるメンバの順序は，構造体のメンバの宣言順序と同じです。構造体が記述されたSQL文の検索項目や列の順序と，メンバの順序は一致している必要があります。

構造体のメンバを埋込み変数として個別に記述することもできます。

共用体を含む構造体は使用できません。

構造体を含む構造体は使用できません。ただし，可変長文字列型，及びBINARY型に対応する構造体は使用できます。

(3)　使用例

構造体の使用例

構造体の使用例を次に示します。

  struct {
    char    xscode[5];
    char    xsname[17];
    char    xcol[3];
    long    xgryo;
    long    xtanka;
  } xrec;
     ：
  EXEC SQL
    DECLARE CR3 CURSOR FOR
      SELECT SCODE,SNAME,COL,ZSURYO, TANKA FROM ZAIKO;
     ：
  EXEC SQL OPEN CR3 ;

  /*  見出し */
  printf("    *****  在庫表 リスト  *****¥n¥n");
  printf("    商品コード  商品名            色  単価      現在庫量¥n");
  printf("    ----        ----------------  --  --------  --------¥n");

  EXEC SQL WHENEVER SQLERROR GOTO OWARI;
  EXEC SQL WHENEVER NOT FOUND GOTO OWARI;

  /* FETCH */
  for(;;){
    EXEC SQL FETCH CR3 INTO :xrec;
    printf("    %4s      %-16s  %2s  %8d  %8d¥n",
        xrec.xscode, xrec.xsname, xrec.xcol, xrec.xtanka, xrec.xgryo);
    }
OWARI:
            :

標識変数を含む構造体の使用例

埋込み変数として構造体を使用する場合に，標識変数も使用するときは，標識変数も構造体で宣言します。標識変数用の構造体の各メンバは，埋込み変数用の構造体の各メンバに，宣言順に対応させます。例を次に示します。

  struct {
      char    xscode[5];
      char    xsname[17];
      char    xcol[3];
      long    xgryo;
      long    xtanka;
  } xrec;
  struct {
      short    xscode_ind;
      short    xsname_ind;
      short    xcol_ind;
      short    xgryo_ind;
      short    xtanka_ind;
  } xrec_ind;
       ：
  /* FETCH */
  for(;;){
    EXEC SQL FETCH CR3 INTO :xrec :xrec_ind;
      printf("    %4s      %-16s  %2s  %8d  %8d¥n",
         xrec.xscode, xrec.xsname, xrec.xcol, xrec.xtanka, xrec.xgryo);
  }
      :

構造体へのポインタで埋込み変数を指定した例

構造体へのポインタで埋込み変数を指定することもできます。ポインタが指す領域は，あらかじめユーザが確保しておく必要があります。

struct  tag_xrec {
  char    xscode[5];
  char    xsname[17];
  char    xcol[3];
  long    xgryo;
  long    xtanka;
} *xrec_ptr;
struct tag_xrec_ind {
  short    xscode_ind;
  short    xsname_ind;
  short    xcol_ind;
  short    xgryo_ind;
  short    xtanka_ind;
} *xrec_ind_ptr;
      :
/* FETCH */
xrec_ptr = (struct tag_xrec *)malloc(sizeof(struct tag_xrec));
xrec_ind_ptr = (struct tag_xrec_ind *)
                 malloc(sizeof(struct tag_xrec_ind));
  for(;;){
    EXEC SQL FETCH CR3 INTO :xrec_ptr :xrec_ind_ptr;
      printf("    %4s      %-16s  %2s  %8d  %8d¥n",
             xrec_ptr->xscode, xrec_ptr->xsname，xrec_ptr->xcol,
             xrec_ptr->xtanka, xrec_ptr->xgryo);
  }
        :

8.2.8　プリプロセサの/E2，/E3オプションを指定した場合のポインタ，構造体，及び構造体修飾の使用可否

プリプロセサで/E2，/E3オプション（UNIX版の場合は-E2，-E3オプション）を指定した場合の，ポインタ，構造体，及び構造体修飾の使用可否を次の表に示します。

なお，ポインタとは，(型名* 変数名)で宣言した変数を示します。構造体とは，(struct 構造体型名 変数名)で宣言した変数を示します（ただし，SQL文を指定する構造体，並びにVARCHAR型，及びBINARY型に対応する構造体を除きます）。構造体修飾とは，(構造体.メンバ変数名)(構造体->メンバ変数名)の形式の変数を示します。

表8‒16　プリプロセサの/E2，/E3オプションを指定した場合のポインタ，構造体，及び構造体修飾の使用可否

埋込み変数又は標識変数を指定するSQL

ポインタ

構造体

構造体修飾

操作系SQL

CALL文

○

×

○

DECLARE CURSOR

○

×

○

DELETE文

○

×

○

DESCRIBE TYPE文

○

×

×

EXECUTE文INTO指定

○

○

○

EXECUTE文USING指定

○

○

○

EXECUTE文BY指定

○

×

○

EXECUTE IMMEDIATE文のSQL文字列の箇所

○

×

×

EXECUTE IMMEDIATE文INTO指定

○

○

○

EXECUTE IMMEDIATE文USING指定

○

○

○

FETCH文INTO指定

○

○

○

FETCH文USING DESCRIPTOR指定

○

×

○

INSERT文VALUES指定

○

○

○

OPEN文

○

×

○

PREPARE文

○

×

×

SELECT文INTO指定

○

○

○

UPDATE文

○

×

○

FREE LOCATOR

○

○

○

SET

○

×

○

ALLOCATE CURSOR

○

×

×

制御系SQL

CONNECT文

○

×

○

CONNECT文TO指定

○

×

○

SET SESSION AUTHORIZATION文

○

×

○

埋込み言語

GET DIAGNOSTICS

×

×

×

COMMAND EXECUTE

×

×

×

INSTALL JAR

○

×

×

REPLACE JAR

○

×

×

REMOVE JAR

○

×

×

ALLOCATE CONNECTION HANDLE

×

×

×

FREE CONNECTION HANDLE

×

×

×

DECLARE CONNECTION HANDLE SET

×

×

×

GET CONNECTION HANDLE

×

×

×

（凡例）

○：指定できます。

×：指定できません。

8.2.9　COBOL言語で複数接続機能を使用する場合の注意事項

COBOL言語で複数接続機能を使用する場合，次のSQL文のSQL終了子（END-EXEC）の後ろに終止符（.）を付けても，ポストソース中に生成したCOBOLの文の後ろに終止符が付かないことがあります。このとき，SQLは完結文になりません。

DECLARE CONNECTION HANDLE SET

ALLOCATE CONNECTION HANDLE

FREE CONNECTION HANDLE

GET CONNECTION HANDLE

この問題を回避するために，プリプロセスのオプションに/Xmオプション（UNIX版の場合は-Xmオプション）を指定します。/Xmオプションを指定すると，プリプロセス後のポストソースから終止符が削除されなくなります。

/Xmオプション指定とポストソースの終止符の有無を次の表に示します。

SQL

UAPソース中の終止符

/Xmオプション指定

ポストソース中の終止符

DECLARE CONNECTION HANDLE SET

ALLOCATE CONNECTION HANDLE

FREE CONNECTION HANDLE

GET CONNECTION HANDLE

あり

あり

終止符を付けます。

なし

終止符を付けません。

なし

−

終止符を付けません。

DECLARE CURSOR

BEGIN DECLARE SECTION

END DECLARE SECTION

WHENEVER

−

−

左記のSQL文の位置にはCOBOLの文を生成しないため，終止符はありません。

COPY※１

−※２

あり

ポストソース中に生成するCOBOLの文は，COPYで引き込んだ登録集原文の内容をUAPソース中に直接記述した場合と同じ内容となります。

なし

上記以外のSQL

あり

−

終止符を付けます。

なし

−

終止符を付けません。

（凡例）

−：終止符，又は/Xmオプション指定の有無はポストソースに影響しません。

注※1

COPYで引き込む登録集原文の中にはCOBOLの文とCOPY以外のSQLが記述されています。

注※2

COPYのSQL終了子の後ろの終止符の有無はポストソースに影響しません。

(1)　/Xmオプション指定時の注意事項

次に該当する場合，/Xmオプションを指定することで，それまで正常に動作していたUAPがエラーになることがあります。次のようにSQL文を記述しているとエラーになります。

文法上完結文を記述できない場所に終止符を付けたSQL文を記述している場合

終止符の有無によってプログラムの動作が変わる場所にSQL文を記述している場合

(a)　文法上完結文を記述できない場所に終止符を付けたSQL文を記述している場合

例えば，END-IF，END-EVALUATEなどの明示範囲終了子で終了させた範囲内には，文法上完結文を記述できません。この場合，SQL文に誤って終止符を付けていても，/Xmオプションを指定しないでプリプロセスすると終止符が削除されるため，エラーにはなりません。しかし，/Xmオプションを指定すると，終止符が削除されないため，ポストソースのコンパイルでエラーとなります。

文法上完結文を記述できない場所に終止符を付けたSQL文を記述している場合の例を次に示します。

/Xmオプションを指定する場合は，文法上完結文を記述できない場所に終止符を付けたSQL文を記述しないようにUAPを修正してください。

(b)　終止符の有無によってプログラムの動作が変わる場所にSQL文を記述している場合

例えば，END-IF，END-EVALUATEなどの範囲終了子で終了させていない条件文でも，文末に終止符を付けることで暗黙的に終了します。そのため，終止符の有無によってプログラムの動作が変わることになります。この場合，条件文のSQL文に誤って終止符を付けていても，/Xmオプションを指定しないでプリプロセスすると終止符が削除され，意図していた動作をします。しかし，/Xmオプションを指定するとプログラムの内容が変わるため，意図していない動作をしてしまいます。

終止符の有無によってプログラムの動作が変わる場所にSQL文を記述している場合の例を次に示します。

/Xmオプションを指定する場合は，条件文のSQL文に終止符を付けないようにUAPを修正してください。

8.2.10　バージョンによるプリプロセスオプションの変更点

SQLプリプロセサのオプションには，HiRDBのバージョンによってオプション省略時も適用するものがあります。オプション省略時も適用するオプションについて次の表に示します。

表8‒17　プリプロセスオプション省略時に適用するオプション値

HiRDBのバージョン

クライアント環境定義PDDEFAULTOPTION

省略時も適用するプリプロセスオプション

09-50より前

−

適用なし

09-50以降

RECOMの場合

-Xs

-Xm

V0904の場合

適用なし

（凡例）　−：該当しません。

なお，省略時に適用されるオプションによっては，生成するポストソースの内容が変わる場合があるため，バージョンアップ以前に動作実績のあるアプリケーションに対して再プリプロセスする必要がある場合は，PDDEFAULTOPTIONにV0904を指定してください。詳細については，「バージョン，リビジョンによるクライアント環境定義及びプリプロセスオプションの変更点」を参照してください。

8.2.11　COBOLのビッグエンディアンオプションへの対応

プリプロセスオプション-Xb（Windows版の場合は/Xb）を指定してプリプロセスすることで，COBOLのビッグエンディアンオプションが利用できるようになります。

(1)　COBOLのビッグエンディアンオプション

COBOLのプログラムをAIXなどのビッグエンディアンのプラットフォームからLinuxなどのリトルエンディアンのプラットフォームに移行する場合，2進項目（2進形式の数字項目）のバイトオーダが変わるために，ソースプログラムの変更が必要になることがあります。これを回避するために，COBOL2002のコンパイラオプション-BigEndian,Binがあります。-BigEndian,Binは，Linux及びWindows環境で，2進項目のバイトオーダをビッグエンディアンにするオプションです。なお，HiRDBの埋込み型UAPではCOBOL2002のコンパイラオプション-BigEndian,Floatに対応していません。

COBOL2002では，2進項目のデータ記述で，USAGE句にBINARY，COMP，COMP-4，COMP-5のどれかを指定します。Linux及びWindows環境では，2進項目のバイトオーダはUSAGE句の指定内容とコンパイラオプション-BigEndian,Binの指定有無で決まります。詳細を次の表に示します。

表8‒18　Linux及びWindows環境の2進項目のバイトオーダ（COBOL2002の仕様）

2進項目のデータ記述のUSAGE句

コンパイラオプション-BigEndian,Binの指定

2進項目のバイトオーダ

BINARY，COMP又はCOMP-4

指定しない

リトルエンディアン

指定する

ビッグエンディアン

COMP-5※

指定しない

リトルエンディアン

指定する

注※

COMP-5を使用する場合は，コンパイラオプション-Comp5を指定する必要があります。-Comp5を指定しないでCOMP-5を使用するとコンパイルエラーになります。

(2)　クライアントライブラリ内で行うバイトオーダ変換

COBOLの埋込み型UAPでは，SQL文で使用する2進項目のデータ記述のUSAGE句に，一部の例外を除いて※，COMPを指定することになっています。したがって，-BigEndian,Binを指定してコンパイルすると，UAPの実行時にSQL文で使用する2進項目のバイトオーダがビッグエンディアンになります。クライアントライブラリはSQL文で使用する2進項目をC言語の整数型データ（Linux及びWindows環境ではリトルエンディアン）として処理するので，クライアントライブラリ内ではSQL文で使用する2進項目をリトルエンディアンに変換して処理します。

注※

ROW型変数にCOMP-5を使用できます。

クライアントライブラリ内で行うバイトオーダ変換を次の図に示します。

図8‒3　クライアントライブラリ内で行うバイトオーダ変換

バイトオーダ変換の対象となる「SQL文で使用する2進項目」とは，次のデータ項目に含まれる2進項目です。

埋込み変数

？パラメタの値を格納するデータ項目

標識変数

？パラメタの標識を格納するデータ項目

SQL連絡領域

SQL記述領域

列名記述領域

型名記述領域

文字集合名記述領域

ただし，ROW型変数※に格納する行データに含まれる2進項目については，前述のバイトオーダ変換を行いません。このため，Linux及びWindows環境で，ROW型変数に含まれる2進項目のバイトオーダは，-BigEndian,Binオプションの有無に関係なく，リトルエンディアンにする必要があります。したがって，ROW型変数に含まれる2進項目はビッグエンディアンを前提にした処理で使用できません。

注※

ROW型変数とは，SQLの行単位インタフェースで使用するROW型の埋込み変数，及びROW型の？パラメタの値を格納するデータ項目です。

(3)　埋込み型UAPでCOBOLのビッグエンディアンオプションを使用する方法

埋込み型UAPのコンパイルで-BigEndian,Binオプションを使用する場合は，プリプロセスオプション-Xb（Windows環境では/Xb）を指定してプリプロセスします。プリプロセスオプション-Xbを指定すると，クライアントライブラリ内で，SQL文で使用する2進項目のバイトオーダを変換します。コンパイル時には-BigEndian,Binオプションと同時に-Comp5オプションを指定します。Linux及びWindows環境で，SQL文で使用する2進項目（ただし，ROW型変数を除く）のバイトオーダと，データ記述，オプション指定の関係を次の表に示します。

表8‒19　SQL文で使用する2進項目のバイトオーダと，データ記述，オプション指定の関係

項番

項目

各項目の指定内容

SQL文で使用する2進項目（ROW型変数を除く）のバイトオーダをリトルエンディアンにする場合

SQL文で使用する2進項目（ROW型変数を除く）のバイトオーダをビッグエンディアンにする場合

1

SQL文で使用する2進項目（ROW型変数を除く）のデータ記述のUSAGE句

COMP

COMP

2

SQLプリプロセサの-Xbオプション

指定しない

指定する

3

コンパイラオプション

-BigEndian,Bin

指定しない

指定する

4

-Comp5

任意

指定する※

注※

-Xbオプションを指定すると，SQLプリプロセサが展開するポストソース中でCOMP-5を使用するため，コンパイラオプションに-Comp5を指定する必要があります。

プリプロセスオプション-Xbを使用する場合は，ROW型変数に含まれる2進項目のデータ記述のUSAGE句をCOMP-5にする必要があります。なお，プリプロセスオプション-Xbを使用しない場合は，ROW型変数に含まれる2進項目のデータ記述のUSAGE句にCOMPとCOMP-5のどちらも指定できます。ROW型変数に含まれる2進項目のデータ記述にCOMP-5を指定することによって，Linux及びWindows環境で，ROW型変数に含まれる2進項目のバイトオーダは，-BigEndian,Binオプションの有無に関係なく，リトルエンディアンになります。

埋込み型UAPをビッグエンディアンのプラットフォームからリトルエンディアンのプラットフォームに移行する場合，コンパイラオプション-BigEndian,Binとプリプロセスオプション-Xbを組み合わせて使用することによって，ROW型の変数を使用する場合を除き，2進項目のバイトオーダの違いに対応するためにUAPソースを変更する必要がなくなります。COBOLの埋込み型UAPをバイトオーダの異なるプラットフォームへ移行する手順の例を次の図に示します。

図8‒4　COBOLの埋込み型UAPをバイトオーダの異なるプラットフォームへ移行する手順の例

(4)　注意事項

コンパイラオプション-BigEndian,Binとプリプロセスオプション-Xbは必ず組み合わせて使用してください。一方を指定して他方を指定しなかった場合，クライアントライブラリの動作を保証しません。

コンパイラオプション-BigEndian,Binとプリプロセスオプション-Xbを指定した場合，クライアントライブラリ内でバイトオーダ変換のためのオーバヘッドが発生します。このため，必要のないかぎりこのオプションは指定しないでください。コンパイラオプション-BigEndian,Binが必要になる条件についてはCOBOL2002のマニュアルを参照してください。

コンパイラオプション-BigEndian,Binとプリプロセスオプション-Xbを指定し，かつインタフェース領域の内容の誤りによってSQL文で使用する2進項目のバイトオーダ変換が失敗した場合は，クライアント環境定義のPDPRMTRCの指定に関係なく，SQLトレースにパラメタ情報を出力しません。

インタフェース領域については，「インタフェース領域」を参照してください。

コンパイラオプション-BigEndian,Binとプリプロセスオプション-Xbを指定した場合，SQL文で使用する入力用2進項目の内容をSQL文の実行中だけ一時的にリトルエンディアンに変換します。このため，複数のプロセスやスレッドで同時に入力用2進項目のデータ領域を共用しないでください。共用すると，同時に実行するプログラムが，バイトオーダが逆転したデータを参照して，不正な動作をします。また，1つのSQL文中の複数個所に入力用2進項目を含む同じ埋込み変数を指定すると，SQL文を正常に実行できないことがあるため，そのような指定をしないでください。

8.3　コンパイルとリンケージ

8.3.1　コンパイル，リンケージ時に指定するライブラリ

コンパイル，及びリンケージをするときには，HiRDBが提供するライブラリを指定します。コンパイル，及びリンケージをするときに指定するライブラリを次の表に示します。

表「コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下でない場合（UNIX環境））」

表「コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下でない場合（Windows環境））」

表「コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下の場合（UNIX環境））」

表「コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下の場合（Windows環境））」

表8‒20　コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下でない場合（UNIX環境））

プラットフォーム

複数接続機能

スレッドモード

アドレッシングモード

ライブラリファイル名

共有ライブラリ

アーカイブライブラリ

HP-UX

使用する

シングルスレッド

32ビット

libzclts.so

−

マルチスレッド（カーネルスレッド）

32ビット

libzcltk.so

64ビット

libzcltk64.so

使用しない

−

32ビット

libzclt.so

64ビット

libzclt64.so

AIX

使用する

シングルスレッド

32ビット

libzclt6k.a

libzclts.a※

libclts.a

マルチスレッド（POSIXスレッド）

32ビット

libzclt6k.a

libzcltk.a※

libcltk.a

64ビット

libzclt6k64.a

libzcltk64.a※

libcltk64.a

使用しない

−

32ビット

libzclt6k.a

libzclt.a※

libclt.a

64ビット

libzclt6k64.a

libzclt64.a※

libclt64.a

Linux

使用する

シングルスレッド

32ビット

libzclts.so

libclts.a

マルチスレッド（POSIXスレッド）

32ビット

libzcltk.so

libcltk.a

使用しない

−

32ビット

libzclt.so

libclt.a

Linux(EM64T)

使用する

シングルスレッド

32ビット

libzclts.so

−

マルチスレッド（POSIXスレッド）

32ビット

libzcltk.so

64ビット

libzcltk64.so

使用しない

−

32ビット

libzclt.so

64ビット

libzclt64.so

（凡例）

−：該当しません。

注※

互換性のために提供しています。この共用ライブラリを使用すると，リンケージ時にシンボル重複の警告が発生するおそれがあるため，ほかの共用ライブラリの使用を検討してください。

表8‒21　コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下でない場合（Windows環境））

プラットフォーム

複数接続機能

アドレッシングモード

共有ライブラリファイル名

推奨されるUAP開発環境※

Windows(x86)

使用する

32ビット

PDCLTM32.LIB

Visual Studio 6.0

Visual Studio .NET 2002

PDCLTM71.LIB

Visual Studio .NET 2003

PDCLTM80S.LIB

Visual Studio 2005

PDCLTM90.LIB

Visual Studio 2008

PDCLTM100.LIB

Visual Studio 2010

Visual Studio 2012

Visual Studio 2013

Visual Studio 2015

PDCLTM140.LIB

Visual Studio 2017

使用しない

32ビット

CLTDLL.LIB

Visual Studio 6.0

Visual Studio .NET 2002

PDCLTM71.LIB

Visual Studio .NET 2003

PDCLTM80S.LIB

Visual Studio 2005

PDCLTM90.LIB

Visual Studio 2008

PDCLTM100.LIB

Visual Studio 2010

Visual Studio 2012

Visual Studio 2013

Visual Studio 2015

PDCLTM140.LIB

Visual Studio 2017

Windows(x64)

使用する

32ビット

PDCLTM80S.LIB

Visual Studio 2005

PDCLTM90.LIB

Visual Studio 2008

PDCLTM100.LIB

Visual Studio 2010

Visual Studio 2012

Visual Studio 2013

Visual Studio 2015

PDCLTM140.LIB

Visual Studio 2017

64ビット

PDCLTM64.LIB

Visual Studio 2005

PDCLTM90X.LIB

Visual Studio 2008

PDCLTM100X.LIB

Visual Studio 2010

Visual Studio 2012

Visual Studio 2013

Visual Studio 2015

PDCLTM140X.LIB

Visual Studio 2017

使用しない

32ビット

PDCLTM80S.LIB

Visual Studio 2005

PDCLTM90.LIB

Visual Studio 2008

PDCLTM100.LIB

Visual Studio 2010

Visual Studio 2012

Visual Studio 2013

Visual Studio 2015

PDCLTM140.LIB

Visual Studio 2017

64ビット

PDCLTM64.LIB

Visual Studio 2005

PDCLTM90X.LIB

Visual Studio 2008

PDCLTM100X.LIB

Visual Studio 2010

Visual Studio 2012

Visual Studio 2013

Visual Studio 2015

PDCLTM140X.LIB

Visual Studio 2017

注※

Windows環境で動作する埋込み型UAPの開発時は，HiRDBのライフサイクルだけでなく，Visual Studioのライフサイクルを意識する必要があります。「推奨されるUAP開発環境」列のVisual Studioのサポートが終了しているクライアントライブラリは，今後のHiRDBバージョンアップ時に，新機能をサポートしないことがあります。

このため，UAPを再作成する場合，HiRDBのバージョンアップ以外に，Visual Studioのバージョンアップ，及び指定するクライアントライブラリの変更についても検討する必要があります。

表8‒22　コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下の場合（UNIX環境））

プラットフォーム

トランザクション登録方式

複数接続機能

スレッドモード

アドレッシングモード

ライブラリファイル名

共有ライブラリ

アーカイブライブラリ

HP-UX

動的登録

使用しない

シングルスレッド

32ビット

libzcltx.so

−

使用する

シングルスレッド

32ビット

libzcltxs.so

動的登録又は静的登録

使用しない

シングルスレッド

32ビット

libzclty.so

−

64ビット

libzclty64.so

使用する

シングルスレッド

32ビット

libzcltys.so

64ビット

libzcltys64.so

マルチスレッド（カーネルスレッド）

64ビット

libzcltyk64.so

AIX

動的登録

使用しない

シングルスレッド

32ビット

libzclt6ys.a

libzcltx.a※

libcltxa.a

使用する

シングルスレッド

32ビット

libzclt6ys.a

libzcltxs.a※

libcltxas.a

マルチスレッド（POSIXスレッド）

32ビット

libzclt6yk.a

libzcltxk.a※

libcltxak.a

動的登録又は静的登録

使用しない

シングルスレッド

32ビット

libzclt6ys.a

libzclty.a※

libcltya.a

64ビット

libzclt6ys64.a

libzclty64.a※

−

使用する

シングルスレッド

32ビット

libzclt6ys.a

libzcltys.a※

libcltyas.a

64ビット

libzclt6ys64.a

libzcltys64.a※

−

マルチスレッド（POSIXスレッド）

32ビット

libzclt6yk.a

libzcltyk.a※

libcltyak.a

64ビット

libzclt6yk64.a

−

Linux

動的登録

使用しない

シングルスレッド

32ビット

libzcltx.so

libcltxa.a

使用する

シングルスレッド

32ビット

libzcltxs.so

libcltxas.a

マルチスレッド（POSIXスレッド）

32ビット

libzcltxk.so

libcltxak.a

動的登録又は静的登録

使用しない

シングルスレッド

32ビット

libzclty.so

libcltya.a

使用する

シングルスレッド

32ビット

libzcltys.so

libcltyas.a

マルチスレッド（POSIXスレッド）

32ビット

libzcltyk.so

−

Linux(EM64T)

動的登録

使用しない

シングルスレッド

32ビット

libzcltx.so

−

使用する

シングルスレッド

32ビット

libzcltxs.so

マルチスレッド（POSIXスレッド）

32ビット

libzcltxk.so

動的登録又は静的登録

使用しない

シングルスレッド

32ビット

libzclty.so

64ビット

libzclty64.so

使用する

シングルスレッド

32ビット

libzcltys.so

64ビット

libzcltys64.so

マルチスレッド（POSIXスレッド）

32ビット

libzcltyk.so

64ビット

libzcltyk64.so

（凡例）

−：該当しません。

注※

互換性のために提供しています。この共用ライブラリを使用すると，リンケージ時にシンボル重複の警告が発生するおそれがあるため，ほかの共用ライブラリの使用を検討してください。

表8‒23　コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下の場合（Windows環境））

プラットフォーム

トランザクション登録方式

複数接続機能

スレッドモード

アドレッシングモード

共有ライブラリファイル名

推奨されるUAP開発環境※

Windows(x86)

動的登録又は静的登録

使用しない

シングルスレッド

32ビット

PDCLTX32.LIB

Visual Studio 6.0

Visual Studio .NET 2002

Visual Studio .NET 2003

Visual Studio 2005

Visual Studio 2008

Visual Studio 2010

Visual Studio 2012

Visual Studio 2013

Visual Studio 2015

Visual Studio 2017

使用する

シングルスレッド

32ビット

PDCLTXS.LIB

マルチスレッド

32ビット

PDCLTXM.LIB

Windows(x64)

動的登録又は静的登録

使用しない

シングルスレッド

32ビット

PDCLTX32.LIB

Visual Studio 2005

Visual Studio 2008

Visual Studio 2010

Visual Studio 2012

Visual Studio 2013

Visual Studio 2015

Visual Studio 2017

使用する

シングルスレッド

32ビット

PDCLTXS.LIB（OTS用）

マルチスレッド

32ビット

PDCLTXM.LIB

注

動的登録，及び静的登録については，マニュアル「HiRDB システム導入・設計ガイド」のHiRDBをトランザクションマネジャに登録する方法を参照してください。

注※

Windows環境で動作する埋込み型UAPの開発時は，HiRDBのライフサイクルだけでなく，Visual Studioのライフサイクルを意識する必要があります。「推奨されるUAP開発環境」列のVisual Studioのサポートが終了しているクライアントライブラリは，今後のHiRDBバージョンアップ時に，新機能をサポートしないことがあります。

このため，UAPを再作成する場合，HiRDBのバージョンアップ以外に，Visual Studioのバージョンアップ，及び指定するクライアントライブラリの変更についても検討する必要があります。

8.3.2　UNIX環境でのコンパイルとリンケージ

SQLプリプロセサで生成したポストソースプログラムは，SQLを埋め込んだUAPの言語に従ったコンパイラで，コンパイル，及びリンケージをします。

ここでは，コンパイル，及びリンケージを実行するときのコマンドの指定方法について，言語別に説明します。

(1)　C言語の場合

C言語のポストソースプログラムは，ANSI Cに従ったコンパイラでコンパイルをし，C++言語のポストソースプログラムは，C++に従ったコンパイラでコンパイルをします。ANSI Cに従ったコンパイラを起動するには，ccコマンドを使用し，C++に従ったコンパイラを起動するには，CCコマンドを使用します。ccコマンド，又はCCコマンドを実行すると，コンパイル，及びリンケージができます。

コンパイラを起動するコマンドの入力形式を次に示します。

  cc ［オプション］ ファイル名称  ディレクトリ  提供ライブラリ

注　C++言語の場合，下線で示す部分をCCに置き換えてください。

ファイル名称：

ポストソースファイルの名称を指定します。

サフィックスは，.c（C言語の場合），又は.C（C++言語の場合）にします。

ディレクトリ：

インクルードディレクトリ（HiRDBが提供するライブラリのヘッダファイルがあるディレクトリ）を指定します。

提供ライブラリ：

HiRDBが提供するライブラリを指定します。

HiRDBが提供するライブラリには，共用ライブラリとアーカイブライブラリがあります。通常時は，共用ライブラリを使用してください。使用するライブラリのバージョンを限定したい場合や，共用ライブラリが使用できないときだけ，アーカイブライブラリを使用してください。

UAPがスレッドを使用する場合，そのスレッドに対応した複数接続用ライブラリをリンクしてください。

オプション：

必要に応じて次に示すオプションを指定します。

-o：

出力する実行形式ファイルの名称を指定する場合に指定します。このオプションを省略すると，ファイル名称はa.outになります。

-I：

インクルードディレクトリを特定する場合に必ず指定します。このオプションを省略すると，コンパイルできません。

-Wl,+s：

UAP作成時とUAP実行時とで，HiRDBの提供ライブラリのディレクトリが異なる場合に指定します。なお，このオプションはHP-UX版の場合で，かつ共用ライブラリを使用するときに指定してください。また，リンケージ時と実行時とで提供ライブラリのディレクトリが異なるので，実行時には環境変数SHLIB_PATH※で，提供ライブラリがあるディレクトリを設定する必要があります。

注※　Linux版の場合はLD_LIBRARY_PATHに，AIX版の場合はLIBPATHになります。

(a)　C言語の場合のコマンド指定例

C言語の場合の例を次に示します。なお，下線で示す部分はHiRDBのインストールディレクトリです。

●32ビットモード対応のUAPの場合

＜例1＞（共用ライブラリの場合）

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

cc -I/HiRDB/include  sample.c -L/HiRDB/client/lib -lzclt

＜例2＞（アーカイブライブラリの場合）

ポストソースファイルの名称がsampleで，実行形式ファイルの名称をSAMPLEにする場合

aCC  +DD32 -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzclt

＜例3＞（HP-UX (IPF)版の場合）

aCC -Ae -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzclt

＜例4＞（HP-UX (IPF)版のマルチスレッドの場合）

aCC -Ae -mt -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzcltk

＜例5＞（Linux(EM64T)版の場合）

gcc -m32 -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzclt

＜例6＞（Linux(EM64T)版のマルチスレッドの場合）

gcc -m32 -D_REENTRANT -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzcltk

●64ビットモード対応のUAPの場合

＜例1＞（共用ライブラリの場合）

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

HP-UX (IPF)版の場合

aCC -Ae  +DD64 -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzclt64

HP-UX (IPF)版のマルチスレッドの場合

aCC -Ae -mt +DD64 -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzcltk64

AIXの場合

xlc -q64 -I/HiRDB/include  sample.c -Wl,-L/HiRDB/client/lib -lzclt64

Linux(EM64T)版の場合

gcc -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzclt64

Linux(EM64T)版のマルチスレッドの場合

gcc -D_REENTRANT -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzcltk64

注　シングルスレッドのUAPで複数接続機能を使用する場合も，libzcltk64.soを使用してください。

＜例2＞（アーカイブライブラリの場合）

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

AIXの場合

xlc -q64 -I/HiRDB/include  sample.c -Wl,-L/HiRDB/client/lib -lclt64

(b)　C++言語の場合のコマンド指定例

C++言語の場合の例を次に示します。なお，下線で示す部分はHiRDBのインストールディレクトリです。

●32ビットモード対応のUAPの場合

＜例1＞（共用ライブラリの場合）

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

CC -I/HiRDB/include  sample.C -L/HiRDB/client/lib -lzclt

＜例2＞（アーカイブライブラリの場合）

ポストソースファイルの名称がsampleで，実行形式ファイルの名称をSAMPLEにする場合

CC -o SAMPLE -I/HiRDB/include  sample.C /HiRDB/client/lib/libclt.a

●64ビットモード対応のUAPの場合

＜例1＞（共用ライブラリの場合）

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

HP-UXの場合

aCC +DD64 -I/HiRDB/include  sample.C -L/HiRDB/client/lib -lzclt64

AIXの場合

xlc -q64 -I/HiRDB/include  sample.C -Wl,-L/HiRDB/client/lib,-lzclt64

＜例2＞（アーカイブライブラリの場合）

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

AIXの場合

xlc -q64 -I/HiRDB/include  sample.C -Wl,-L/HiRDB/client/lib,-lclt64

(2)　COBOL言語の場合

COBOL言語のポストソースプログラムは，COBOL85，又はCOBOL2002でコンパイルをし，OOCOBOL言語のポストソースプログラムは，OOCOBOLに従ったコンパイラでコンパイルをします。

COBOL85に従ったコンパイラを起動するには，ccblコマンドを使用し，OOCOBOLに従ったコンパイラを起動するには，ocblコマンドを使用します。ccblコマンド，又はocblコマンドを実行すると，コンパイル，及びリンケージができます。

コンパイラを起動するときのコマンドの入力形式を次に示します。

ccbl  ［オプション］  ファイル名称  ディレクトリ  提供ライブラリ

注　OOCOBOL言語の場合，下線で示す部分をocblに置き換えてください。

ファイル名称：

ポストソースファイルの名称を指定します。

サフィックスは，.cbl（COBOL言語の場合），又は.ocb（OOCOBOL言語の場合）にします。

ディレクトリ：

インクルードディレクトリ（HiRDBが提供するライブラリのヘッダファイルがあるディレクトリ）を指定します。

提供ライブラリ：

HiRDBが提供するCOBOL言語，又はOOCOBOL言語のライブラリを指定します。

オプション：

次に示すオプションを指定します。

また，注意が必要なオプションについては「注意事項」を参照してください。

-Wl,+s：

UAP作成時とUAP実行時とで，HiRDBの提供ライブラリのディレクトリが異なる場合に指定します。なお，このオプションはHP-UX版の場合で，かつ共用ライブラリを使用するときに指定してください。また，リンケージ時と実行時とで提供ライブラリのディレクトリが異なるので，実行時には環境変数SHLIB_PATHで，提供ライブラリがあるディレクトリを設定する必要があります。

-o：

出力する実行形式ファイルの名称を指定する場合に指定します。

このオプションを省略すると，ファイル名称はa.outになります。

オプションには，-Kl，又は-Xbオプションは指定しないでください。また，-Xcオプションと-Hf，-Hv，又は-V3を同時に指定しないでください。

環境変数：

次に示す環境変数を指定します。

CBLLIB：

インクルードディレクトリを指定します。

(a)　COBOL言語の場合のコマンド指定例

COBOL言語の場合の例を次に示します。下線で示す部分はHiRDBのインストールディレクトリです。なお，HP-UX (IPF)版のCOBOL2002の場合は，「ccbl」が「ccbl2002」となります。

●32ビットモード対応のUAPの場合

＜例1＞（共用ライブラリの場合）

ポストソースファイルの名称がsampleの場合

CBLLIB=/HiRDB/include
export CBLLIB
ccbl sample.cbl -L/HiRDB/client/lib -lzclt

＜例2＞（アーカイブライブラリの場合）

ポストソースファイルの名称がsampleの場合

CBLLIB=/HiRDB/include
export CBLLIB
ccbl sample.cbl /HiRDB/client/lib/libclt.a

●64ビットモード対応のUAPの場合

＜例1＞（共用ライブラリの場合）

ポストソースファイルの名称がsampleの場合

CBLLIB=/HiRDB/include
export CBLLIB
ccbl2002 sample.cbl -L/HiRDB/client/lib -lzclt64

(b)　OOCOBOL言語の場合のコマンド指定例

OOCOBOL言語の場合の例を次に示します。なお，下線で示す部分はHiRDBのインストールディレクトリです。

＜例1＞（共用ライブラリの場合）

ポストソースファイルの名称がsampleの場合

CBLLIB=/HiRDB/include
export CBLLIB
ocbl sample.ocb -L/HiRDB/client/lib -lzclt

＜例2＞（アーカイブライブラリの場合）

ポストソースファイルの名称がsampleの場合

CBLLIB=/HiRDB/include
export CBLLIB
ocbl sample.ocb /HiRDB/client/lib/libclt.a

(3)　注意事項

(a)　COBOL2002のコンパイラオプション-DynamicLinkについて

HiRDBクライアントライブラリを使用するアプリケーションのコンパイルでは，COBOL2002のコンパイラオプション-DynamicLinkの指定を次のどちらかにしてください。

-DynamicLinkオプションを指定しない

-DynamicLink,IdentCallオプションを指定する（一意名指定のCALL文だけを動的なリンクとする）

なお，-DynamicLink,Callオプションを指定した場合は，次の点に注意してください。

AIXの場合，HiRDBクライアントライブラリは，アーカイブ化された共用ライブラリです。そのため，COBOL2002の実行時環境変数CBLLTAGにNOARMBRを指定しないでください。NOARMBRを指定すると，アーカイブ化された共用ライブラリは動的なリンク時の検索対象になりません。

COBOL2002コンパイラオプション，実行時環境変数の詳細は，マニュアル「COBOL2002 使用の手引 手引編」を参照してください。

8.3.3　Windows環境でのコンパイルとリンケージ

プリプロセサで生成したポストソースプログラムは，SQLを埋め込んだUAPの言語に従ったコンパイラで，コンパイル，及びリンケージをします。

コンパイル，及びリンケージの方法については，各言語に従ったコンパイラのマニュアルを参照してください。ここでは，コンパイル，及びリンケージをするときのオプションについて，言語別に説明します。また，Windows(x64)版での指定を示します。

(1)　C言語の場合

C言語のポストソースプログラムは，Microsoft Visual C++でコンパイルをします。

Microsoft Visual C++を使用してコンパイル，及びリンケージをするときにオプションを設定する場合，プロジェクトメニューから「設定」を選択します（Microsoft Visual C++のバージョンによっては，設定方法が異なります）。

「設定」で設定する項目を次の表に示します。

表8‒24　「設定」で設定する項目

項　目

カテゴリ

カテゴリの設定

設　定　値

コンパイラ

コード生成

構造体メンバのアライメント

8バイト

使用するランタイムライブラリ

マルチスレッド※

プリプロセサ

インクルードファイルのパス

¥HiRDB¥include

リンカ

インプット

ライブラリ

¥HiRDB¥lib¥cltdll

注　下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

注※　ライブラリがCLTDLL以外の場合，マルチスレッドとなります。

64ビットモードでUAPを作成する場合は，次の条件で作成してください。

構成メンバのアライメント：8バイト

使用するランタイムライブラリ：マルチスレッドDLL

インクルードファイルのパス：¥HiRDB¥INCLUDE

リンケージライブラリ：¥HiRDB¥LIB¥PDCLTM64.LIB

(2)　COBOL言語の場合

COBOL言語のポストソースプログラムは，COBOL85又はCOBOL2002に従ったコンパイラでコンパイルをし，OOCOBOL言語のポストソースプログラムは，OOCOBOLに従ったコンパイラでコンパイルをします。

COBOL85（01-00以降）を使用してコンパイル，及びリンケージをするときにオプションを設定する場合，編集メニューから「プロジェクト編集」を選択します。

Windowsの場合は，オプションメニューから「コンパイラ」，及び「リンカ」メニューを選択します。

COBOL2002の場合は，「プロジェクトの設定」メニューから「リンカ」タブを選択します。

COBOL85の「プロジェクト編集」で設定する項目を次の表に示します。オプションには，-Kl，-Xb，-Bb，又は-Fbオプションは指定しないでください。また，-Xcオプションと-Hf，-Hv，又は-V3を同時に指定しないでください。

表8‒25　COBOL85の「プロジェクト編集」で設定する項目

項　　　目

設定項目

設　定　値

リンケージオプション設定

インポートライブラリ

¥HIRDB¥lib¥cltdll.lib

翻訳オプション

/NOI（ファイル識別子の大文字と小文字の区別）

注　下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

COBOL2002の「プロジェクトの設定」で設定する項目を次の表に示します。

表8‒26　COBOL2002の「プロジェクトの設定」で設定する項目

項　　　目

設定項目

設　定　値

リンク

ライブラリの指定

¥HIRDB¥lib¥cltdll.lib

注　下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

COBOL85の「翻訳環境」に対して設定するオプションがあります。COBOL85の「翻訳環境」に対して設定する項目を次の表に示します。なお，COBOL2002の場合は，環境変数に設定します。

表8‒27　COBOL85の「翻訳環境」に対して設定する項目

項　　　目

設定項目

設　定　値

環境変数設定※

CBLLIB変数

¥HIRDB¥include

注　下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

注※　COBOL2002の場合，「環境変数」となります。

(3)　Windows(x64)版での指定

Windows(x64)版では，32ビットモード用と64ビットモード用のクライアントライブラリをそれぞれ提供しています。32ビットモードでUAPを作成する場合は，32ビットモード用のコンパイルオプション及びライブラリを指定します。64ビットモードでUAPを作成する場合は，64ビットモード用のコンパイルオプション及びライブラリを指定します。

UAPの作成条件を次に示します。

UAPの作成

32ビットモード

64ビットモード

構造体メンバのアライメント

既定値（8バイト）

既定値（8バイト）

使用するランタイムライブラリ

マルチスレッドDLL

マルチスレッドDLL

インクルードファイルのディレクトリ

¥HiRDB¥INCLUDE

¥HiRDB¥INCLUDE

リンケージライブラリ※

¥HiRDB¥LIB¥PDCLTM80S.LIB

¥HiRDB¥LIB¥PDCLTM64.LIB

注

下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

注※

複数接続機能を使用するかどうかに関係なく指定します。

8.3.4　複数接続機能を使用する場合のコンパイルとリンケージ

(1)　マルチスレッドの場合

OLTP用でない通常のUAPで複数接続機能を使用する場合の，UAPのコンパイルとリンケージについて説明します。

(a)　UNIX環境の場合

複数接続機能使用時にリンケージするライブラリについては，表「コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下でない場合（UNIX環境））」及び表「コンパイル，及びリンケージをするときに指定するライブラリ（OLTP下の場合（UNIX環境））」を参照してください。なお，マルチスレッドを利用するためにリンケージしなければならないライブラリについては，各OSのマニュアルを参照してください。

C言語の例

C言語の場合の例を次に示します。なお，下線で示す部分は，HiRDBのインストールディレクトリです。

＜例1＞HP-UXで，UAPと共用ライブラリをリンクする場合

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

aCC -Ae -mt -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzcltk

＜例2＞HP-UXで，UAPと64ビットモード用の共用ライブラリをリンクする場合

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

aCC -Ae -mt +DD64 -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzcltk64

＜例3＞Linuxで，UAPと共用ライブラリをリンクする場合

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

cc -I/HiRDB/include sample.c -D_REENTRANT -L/HiRDB/client/lib/ -lzcltk -lthread

＜例4＞AIXで，UAPと共用ライブラリをリンクする場合

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

xlc_r -I/HiRDB/include sample.c -L/HiRDB/client/lib/ -lzclt6k

＜例5＞AIXで，UAPと64ビットモード用の共用ライブラリをリンクする場合

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

xlc_r -I/HiRDB/include sample.c -q64 -L/HiRDB/client/lib/ -lzclt6k64

COBOL言語の例

COBOL言語の場合，マルチスレッドに対応したバージョン（03-01以降）のCOBOL85コンパイラが必要となります。

コンパイル時には，-Mtオプション（POSIXスレッドの場合は-Mpも必要）を指定します。-Mtオプションを指定してコンパイルしたオブジェクトと，指定しないでコンパイルしたオブジェクトをリンクすると，動作は保証されません。COBOL言語の場合のコンパイルについては，マニュアル「COBOL85 使用の手引」を参照してください。

COBOL言語の場合の例を次に示します。なお，下線で示す部分は，HiRDBのインストールディレクトリです。

＜例1＞HP-UXでカーネルスレッドを使用する場合

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

setenv CBLLIB /HiRDB/include
ccbl -Mt -Mp sample.cbl -L/HiRDB/client/lib/ -lzcltk -lpthread

＜例2＞Linuxで，POSIXスレッド用のUAPと共用ライブラリをリンクする場合

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

setenv CBLLIB /HiRDB/include
ccbl -Mt -Mp sample.cbl -L/HiRDB/client/lib/ -lcltk -lpthread

＜例3＞AIXで，POSIXスレッド用のUAPと共用ライブラリをリンクする場合

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

setenv CBLLIB /HiRDB/include
ccbl -Mt -Mp sample.cbl -L/HiRDB/client/lib/ -lzclt6k -lpthread

(b)　Windows環境の場合

CLTDLL.LIBの代わりに，PDCLTM32.LIBをリンケージします。なお，OLTP下でX/Openに従ったAPIを使用したUAPの場合，PDCLTXM.LIBをリンケージします。

C言語の場合

ここでは，Microsoft Visual C++ Version 4.2を前提として説明します。プロジェクトメニューから「設定」を選択して，各項目を設定します。「設定」で設定する項目を次の表に示します。マルチスレッドを利用するときに，リンケージする必要があるライブラリについては，各OSのマニュアルを参照してください。

表8‒28　「設定」で設定する項目

項　目

カテゴリ

カテゴリの設定

設　定　値

コンパイラ

コード生成

構造体メンバのアライメント

8バイト

使用するランタイムライブラリ

マルチスレッドDLL

プリプロセサ

インクルードファイルのパス

¥HIRDB¥INCLUDE

リンカ

インプット

ライブラリ

¥HIRDB¥LIB¥PDCLTM32.LIB

注　下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

COBOL言語の場合

COBOL言語の場合，マルチスレッドに対応したバージョンのCOBOL85コンパイラが必要となります。ここでは，COBOL85 Version 5.0を前提に説明します。

コンパイル時には，コンパイラオプションダイアログボックスで-Mtオプションを指定します。-Mtオプションを指定してコンパイルしたオブジェクトと，指定しないでコンパイルしたオブジェクトをリンクすると，動作は保証されません。COBOL言語の場合のコンパイルについては，マニュアル「COBOL85 操作ガイド」を参照してください。

「オプション」メニューで設定する項目を次の表に示します。

表8‒29　「オプション」メニューで設定する項目

サブメニュー

ダイアログ

設定項目

設定値

コンパイラ

COBOL85コンパイラオプション

COBOL85コンパイラオプション

-Mtの項目をチェック

環境変数設定

CBLLIB=C:¥HIRDB¥INCLUDE

リンカ

リンカオプションの設定

インポート／ユーザ指定ライブラリ

C:¥HIRDB¥LIB¥PDCLTM32

注　下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

(2)　シングルスレッドの場合

シングルスレッドのUAPで複数接続機能を使用する場合の，コンパイルとリンケージの方法について説明します。なお，ここではHP-UXを例に説明します。

(a)　HP-UX版でのコンパイルとリンケージ

C言語の例

C言語の場合の例を次に示します。なお，下線で示す部分は，HiRDBのインストールディレクトリです。

＜例1＞（共用ライブラリの場合）

ポストソースファイルの名称がsampleで，実行形式ファイルの名称を指定しない場合

aCC -Ae -I /HiRDB/include sample.c -L/HiRDB/client/lib -lzclts

8.4　注意事項

8.4.1　UAP実行時の注意事項

UAPを実行する場合の注意事項を次に示します。

(1)　文字コード種別についての注意事項

UNIX版のHiRDBクライアントを使ってUAPを実行する場合は，HiRDBサーバとの接続時に，HiRDBサーバの文字コード種別（サーバがUNIX版の場合はpdsetupコマンド，Windows版の場合はpdntenvコマンドで指定した文字コード種別）をチェックできます。

HiRDBサーバの文字コード種別をチェックする場合は，HiRDBサーバの文字コード種別に合わせて，環境変数LANG，又はクライアント環境定義PDLANGを設定してください。LANG又はPDLANGで指定した文字コード種別とHiRDBサーバの文字コード種別が異なると，サーバ接続時にエラーとなります。このとき出力するエラーメッセージ（KFPA11990-E）にHiRDBサーバの文字コード種別が表示されます。

HiRDBサーバの文字コード種別をチェックする場合の，LANG又はPDLANGの設定値を次の表に示します。この表でPDLANGを設定するケースでは，PDLANGを省略してLANGでHiRDBサーバの文字コード種別を指定しても有効になりません。

表8‒30　HiRDBサーバの文字コード種別をチェックする場合の環境変数の設定値

HiRDBサーバの文字コード種別※

HiRDBクライアントのプラットフォームの環境変数

HP-UX

AIX

Linux

LANG

PDLANG

LANG

PDLANG

LANG

PDLANG

lang-c

C

−

C

−

C

−

sjis

ja_JP.SJIS

−

Ja_JP

−

任意

SJIS

ujis

ja_JP.eucJP

−

ja_JP

−

ja_JP.eucJP又はja_JP

−

chinese

任意

CHINESE

任意

CHINESE

任意

CHINESE

utf-8

utf-8_ivs

任意

UTF-8

任意

UTF-8

任意

UTF-8

chinese-gb18030

任意

CHINESE-GB18030

任意

CHINESE-GB18030

任意

CHINESE-GB18030

（凡例）

−：

PDLANGには値を設定しないでください。LANGにはこの表に記載されている値（HiRDBサーバの文字コード種別に対応するロケール名）を設定してください。各プラットフォームで，PDLANGにこの表に記載されていない値を設定した場合は，PDLANGの設定を無視します。例えば，この表のHP-UXの列にはPDLANGの値としてSJISが記載されてないため，HP-UXでPDLANGにSJISを設定しても，PDLANGを省略しても，結果は同じになります。

任意：

PDLANGにこの表に記載されている値を設定すると，HiRDBクライアントはLANGを参照しないため，LANGにはプラットフォームがサポートしている任意のロケール名を設定できます。

注※

pdsetupコマンド又はpdntenvコマンドで指定したHiRDBサーバの文字コード種別を表します。

(2)　SHLIB_PATHについての注意事項

UAP実行時には，SHLIB_PATHに$PDDIR/client/libを追加してください。なお，SHLIB_PATHは，それぞれのプラットフォームの環境変数に読み替えてください。

(3)　HiRDBに回復不要FESがある場合の注意事項

HiRDBに回復不要FESがある場合，X/Open XAインタフェースを使用するUAPから回復不要FESに接続したときは，そのUAPからはSQLが実行できません。この場合，クライアント環境定義PDFESHOST及びPDSERVICEGRPを指定して，回復不要FESでないフロントエンドサーバに接続してください。

(4)　Windowsでの注意事項

Windowsでは，HiRDBクライアントが取得した通信用ソケットに対して他プログラムが既に使用している受信ポートが割り当てられることがあります。同一の受信ポートが割り当てられると，接続時にHiRDBサーバからの電文が他プログラムに送信され，HiRDBクライアントは電文を受信することができなくなり，KFPA11732-Eエラー（受信タイムアウト）となります。このようなことを防ぐため，UAPを実行する場合は，受信ポートが重複しないように対策する必要があります。

受信ポートが重複する場合の条件と対策方法を次の表に示します。

表8‒31　受信ポートが重複する場合の条件と対策方法（1/2）

後発のクライアント

先発のクライアント

バージョン08-03より前のライブラリ

バージョン08-03以降のライブラリ

PDCLTBINDLOOPBACKADDR=YES

PDCLTBINDLOOPBACKADDR=NO

PDCLTRCVPORT指定あり

PDCLTRCVPORT指定なし

PDCLTRCVPORT指定あり

PDCLTRCVPORT指定なし

PDCLTRCVPORT指定あり

PDCLTRCVPORT指定なし

バージョン08-03より前のライブラリ

PDCLTRCVPORT指定あり

−

−

−

−

−

−

PDCLTRCVPORT指定なし

−

−

−

−

−

×1

バージョン08-03以降のライブラリ

PDCLTBINDLOOPBACKADDR=YES

PDCLTRCVPORT指定あり

−

−

−

−

−

−

PDCLTRCVPORT指定なし

−

−

−

−

−

−

PDCLTBINDLOOPBACKADDR=NO

PDCLTRCVPORT指定あり

−

−

−

−

−

−

PDCLTRCVPORT指定なし

−

×1

−

−

−

−

Type4 JDBCドライバ

PDCLTBINDLOOPBACKADDR=YES

PDCLTRCVPORT指定あり

−

−

−

−

−

−

PDCLTRCVPORT指定なし

−

−

−

−

−

×1

PDCLTBINDLOOPBACKADDR=NO

PDCLTRCVPORT指定あり

−

−

−

−

−

−

PDCLTRCVPORT指定なし

−

×1

−

×1

−

×1

表8‒32　受信ポートが重複する場合の条件と対策方法（2/2）

後発のクライアント

先発のクライアント，HiRDBサーバ，又はその他のプログラム

Type4 JDBCドライバ

HiRDBサーバ又はその他プログラム

PDCLTBINDLOOPBACKADDR=YES

PDCLTBINDLOOPBACKADDR=NO

PDCLTRCVPORT指定あり

PDCLTRCVPORT指定なし

PDCLTRCVPORT指定あり

PDCLTRCVPORT指定なし

バージョン08-03より前のライブラリ

PDCLTRCVPORT指定あり

−

−

−

−

−

PDCLTRCVPORT指定なし

−

−

−

×1

×2

バージョン08-03以降のライブラリ

PDCLTBINDLOOPBACKADDR=YES

PDCLTRCVPORT指定あり

−

−

−

−

−

PDCLTRCVPORT指定なし

−

−

−

×1

×2

PDCLTBINDLOOPBACKADDR=NO

PDCLTRCVPORT指定あり

−

−

−

−

−

PDCLTRCVPORT指定なし

−

×1

−

×1

×2

Type4 JDBCドライバ

PDCLTBINDLOOPBACKADDR=YES

PDCLTRCVPORT指定あり

−

−

−

−

−

PDCLTRCVPORT指定なし

−

−

−

×1

×2

PDCLTBINDLOOPBACKADDR=NO

PDCLTRCVPORT指定あり

−

−

−

−

×2

PDCLTRCVPORT指定なし

−

×1

−

×1

×2

（凡例）

−：

受信ポートは重複しないため，対策の必要はありません。

×1：

受信ポートが重複します。先発のクライアント，及び後発のクライアントのクライアント環境変数PDCLTRCVPORTでポート番号の範囲を指定し，それぞれのプログラムが使用するポート番号が重複しないようにしてください。

×2：

受信ポートが重複します。後発のクライアントのクライアント環境変数PDCLTRCVPORTで，HiRDBサーバ又はその他のプログラムが使用しないポート番号を指定し，それぞれのプログラムが使用するポート番号が重複しないようにしてください。

8.4.2　X/Openに従ったAPI（TX_関数）を使用したUAPの実行

X/Openに従ったAPI（TX_関数）を使用したUAPは，専用のライブラリを使用します。TX_関数を使用したUAPをコンパイル，及びリンケージする場合，TX_関数専用のライブラリとHiRDBが提供するライブラリとを結合させる必要があります。

(1)　X/Openに従ったAPI（TX_関数）を使用したUAPのプリプロセス

TP1/LiNK（トランザクション制御）と連携しているHiRDBでUAPを実行する場合の注意事項について説明します。

TP1/LiNKと連携できるのは，HiRDBサーバ，HiRDBクライアントが，Windows同士の場合です。

(a)　UAPのプリプロセス，リンケージ

TP1/LiNK環境下で実行するUAPをプリプロセス，リンケージする場合，次のようにしてください。

プリプロセス

SQLプリプロセサ実行時に，次のオプションを指定してください。

/XAD：COBOL言語でUAPをDLLとして作成する場合に指定してください。

/XA：上記以外の場合はすべてこちらを指定してください。

C言語の場合のコマンド指定例：

　　PDCPP SAMPLE /XA

COBOL言語の場合のコマンド指定例：

　　PDCBL SAMPLE.ECB /XAD

リンケージ

UAPをリンケージする場合に，次のライブラリをリンクしてください。

%PDDIR%¥CLIENT¥LIB¥PDCLTX32.LIB

CLTDLL.LIBはリンクしないでください。

(2)　OpenTP1を使用する場合

OpenTP1を使用した場合の，UAPのコンパイル及びリンケージについて説明します。

なお，OpenTP1でのコンパイル，及びリンケージの詳細については，マニュアル「OpenTP1 プログラム作成リファレンス C言語編」，又はマニュアル「OpenTP1 プログラム作成リファレンス COBOL言語編」を参照してください。

(a)　C言語の場合

トランザクションオブジェクトファイルの作成

OpenTP1でHiRDBをアクセスするUAPを作成するとき，OpenTP1運用コマンドでトランザクション制御用オブジェクトファイルを作成する必要があります。

トランザクション制御用オブジェクトファイルは，trnmkobjコマンドを使用します。トランザクション制御用オブジェクトファイルを作成する場合，次のように指定します。

  trnmkobj　-o　制御用オブジェクトファイル名称　-r　HiRDB_DB_SERVER

＜例＞

トランザクション制御用オブジェクトファイル名称をseigyoとする場合

     trnmkobj -o seigyo -r HiRDB_DB_SERVER

コンパイル，及びリンケージ

APIを使用したUAPをコンパイル，及びリンケージする場合，次のように指定します。

共用ライブラリを使用する場合：

/usr/bin/cc　-c　-I$DCDIR/include　-I/HiRDB/include　ファイル名称.c

  /usr/bin/cc　-o　UAP実行形式ファイル名称　UAPファイル名称.o
  $DCDIR/spool/trnrmcmd/userobj/制御用オブジェクトファイル名称.o
  -L/HiRDB/client/lib　-lzclty　-L$DCDIR/lib　-Wl，-B，immediate
  -Wl，-a，default　-lbetran　-L/usr/lib　-ltactk　-lbsd　-lc

注1

下線で示す部分はHiRDBのインストールディレクトリです。

注2

HP-UX版の場合で，かつUAP作成時とUAP実行時とでHiRDBの提供ライブラリのディレクトリが異なるときは，オプション（-Wl,+s）を指定してください。また，リンケージ時と実行時とで提供ライブラリのディレクトリが異なるので，実行時には環境変数SHLIB_PATHで，提供ライブラリがあるディレクトリを設定する必要があります。

注3

HiRDBがX/Openに従ったAPIを使用したUAPのために提供するライブラリは，OLTPへ登録する方法によって次に示す4種類があります。リンケージで指定するライブラリ名は，OLTPへ登録する方法に合わせた名称を指定してください。

-lzcltx（動的登録）

-lzclty（静的登録/動的登録）

-lzcltxs（動的登録で，複数接続機能を使用する場合）

-lzcltys（静的登録/動的登録で，複数接続機能を使用する場合）

静的登録/動的登録は，TMに登録するスイッチ名称で静的登録又は動的登録のどちらかに切り替えられます。なお，登録方法については，マニュアル「HiRDB システム導入・設計ガイド」のHiRDBをトランザクションマネジャに登録する方法を参照してください。

注4

AIXで，X/Openに従ったAPIを使用したUAPを作成する場合，リンケージオプションに-brtlを指定する必要があります。

＜例＞

ファイル名称（UAP名）をsample，UAP実行形式ファイル名称をSAMPLE，トランザクション制御用オブジェクトファイル名称をseigyoとする場合

/usr/bin/cc -c -I$DCDIR/include -I/HiRDB/include sample.c

  /usr/bin/cc -o SAMPLE sample.o $DCDIR/spool/trnrmcmd/userobj/
  seigyo.o -L/HiRDB/client/lib -lzclty -L$DCDIR/lib
  -Wl,-B,immediate -Wl,-a,default
  -lbetran -L/usr/lib -ltactk -lbsd -lc

アーカイブライブラリを使用する場合：

/usr/bin/cc　-c　-I$DCDIR/include　-I/HiRDB/include　ファイル名称.c

  /usr/bin/cc　-o　UAP実行形式ファイル名称　UAPファイル名称.o
  $DCDIR/spool/trnrmcmd/userobj/制御用オブジェクトファイル名称.o
  -L/HiRDB/client/lib　-lcltxa　-L$DCDIR/lib　-Wl，-B，immediate
  -Wl，-a，default　-lbetran　-L/usr/lib　-ltactk　-lbsd　-lc

注1

下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

注2

HiRDBが提供するアーカイブライブラリ（-lcltxa）は，OpenTP1が提供するライブラリ（-lbetran）より前に指定してください。

注3

HiRDBがX/Openに従ったAPIを使用したUAPのために提供するライブラリは，OLTPへ登録する方法によって次に示す2種類があります。リンケージで指定するライブラリ名は，OLTPへ登録する方法に合わせた名称を指定してください。

-lcltxa（動的登録）

-lcltya（静的登録/動的登録）

静的登録/動的登録は，TMに登録するスイッチ名称で静的登録又は動的登録のどちらかに切り替えられます。なお，登録方法については，マニュアル「HiRDB システム導入・設計ガイド」のHiRDBをトランザクションマネジャに登録する方法を参照してください。

＜例＞

ファイル名称（UAP名）をsample，UAP実行形式ファイル名称をSAMPLE，トランザクション制御用オブジェクトファイル名称をseigyoとする場合

/usr/bin/cc -c -I$DCDIR/include -I/HiRDB/include sample.c

  /usr/bin/cc -o SAMPLE sample.o $DCDIR/spool/trnrmcmd/userobj/
  seigyo.o -L/HiRDB/client/lib -lcltxa -L$DCDIR/lib
  -Wl,-B,immediate -Wl,-a,default
  -lbetran -L/usr/lib -ltactk -lbsd -lc

(b)　COBOL言語の場合

トランザクションオブジェクトファイルの作成

OpenTP1でHiRDBをアクセスするUAPを作成するとき，OpenTP1運用コマンドでトランザクション制御用オブジェクトファイルを作成する必要があります。

トランザクション制御用オブジェクトファイルは，trnmkobjコマンドを使用します。トランザクション制御用オブジェクトファイルを作成する場合，次のように指定します。

  trnmkobj　-o　制御用オブジェクトファイル名称　-r　HiRDB_DB_SERVER

＜例＞

トランザクション制御用オブジェクトファイル名称をseigyoとする場合

  trnmkobj -o seigyo -r HiRDB_DB_SERVER

コンパイル，及びリンケージ

APIを使用したUAPをコンパイル，及びリンケージする場合，次のように指定します。

共用ライブラリの場合：

ccbl　-o　UAP実行形式ファイル名称　-Mw　ファイル名称.cbl
  $DCDIR/spool/trnrmcmd/userobj/制御用オブジェクトファイル名称.o
  -L/HiRDB/client/lib　-lzclty　-L$DCDIR/lib　-Wl，-B，immediate
  -Wl，-a，default　-lbetran　-L/usr/lib　-ltactk　-lbsd　-lc

注1

下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

注2

HP-UX版の場合で，かつUAP作成時とUAP実行時とでHiRDBの提供ライブラリのディレクトリが異なるときは，オプション（-Wl,+s）を指定してください。また，リンケージ時と実行時とで提供ライブラリのディレクトリが異なるので，実行時には環境変数SHLIB_PATHで，提供ライブラリがあるディレクトリを設定する必要があります。

注3

HiRDBがX/Openに従ったAPIを使用したUAPのために提供するライブラリは，OLTPへ登録する方法によって次に示す4種類があります。リンケージで指定するライブラリ名は，OLTPへ登録する方法に合わせた名称を指定してください。

-lzcltx（動的登録）

-lzclty（静的登録/動的登録）

-lzcltxs（動的登録で，複数接続機能を使用する場合）

-lzcltys（静的登録/動的登録で，複数接続機能を使用する場合）

静的登録/動的登録は，TMに登録するスイッチ名称で静的登録又は動的登録のどちらかに切り替えられます。なお，登録方法については，マニュアル「HiRDB システム導入・設計ガイド」のHiRDBをトランザクションマネジャに登録する方法を参照してください。

注4

AIX版で，X/Openに従ったAPIを使用したUAPを作成する場合，リンケージオプションに-brtlを指定する必要があります。

＜例＞

ファイル名称（UAP名）をsample，UAP実行形式ファイル名称をSAMPLE，トランザクション制御用オブジェクトファイル名称をseigyoとする場合

ccbl -o SAMPLE -Mw sample.cbl
  $DCDIR/spool/trnrmcmd/userobj/seigyo.o
  -L/HiRDB/client/lib -lzclty -L$DCDIR/lib -Wl,-B,immediate
  -Wl,-a,default -lbetran -L/usr/lib -ltactk -lbsd -lc

アーカイブライブラリの場合：

ccbl　-o　UAP実行形式ファイル名称　-Mw　ファイル名称.cbl
  $DCDIR/spool/trnrmcmd/userobj/制御用オブジェクトファイル名称.o
  -L/HiRDB/client/lib　-lcltxa　-L$DCDIR/lib　-Wl，-B，immediate
  -Wl，-a，default　-lbetran　-L/usr/lib　-ltactk　-lbsd　-lc

注1

下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

注2

HiRDBが提供するアーカイブライブラリ（-lcltxa）は，OpenTP1が提供するライブラリ（-lbetran）より前に指定してください。

注3

HiRDBがX/Openに従ったAPIを使用したUAPのために提供するライブラリは，OLTPへ登録する方法によって次に示す2種類があります。リンケージで指定するライブラリ名は，OLTPへ登録する方法に合わせた名称を指定してください。

-lcltxa（動的登録）

-lcltya（静的登録/動的登録）

静的登録/動的登録は，TMに登録するスイッチ名称で静的登録又は動的登録のどちらかに切り替えられます。なお，登録方法については，マニュアル「HiRDB システム導入・設計ガイド」のHiRDBをトランザクションマネジャに登録する方法を参照してください。

＜例＞

ファイル名称（UAP名）をsample，UAP実行形式ファイル名称をSAMPLE，トランザクション制御用オブジェクトファイル名称をseigyoとする場合

ccbl -o SAMPLE -Mw sample.cbl
  $DCDIR/spool/trnrmcmd/userobj/seigyo.o
  -L/HiRDB/client/lib -lcltxa -L$DCDIR/lib -Wl,-B,immediate
  -Wl,-a,default -lbetran -L/usr/lib -ltactk -lbsd -lc

(3)　TPBroker for C++を使用する場合

TPBroker for C++を使用した場合の，UAPのコンパイル及びリンケージについて説明します。なお，UAPはマルチスレッド対応のXAインタフェースを使用しているものとします。

なお，TPBroker for C++でのコンパイル及びリンケージ方法については，マニュアル「TPBroker ユーザーズガイド」を参照してください。

また，マルチスレッド対応のXAインタフェース専用ライブラリは，Ｃ言語及びＣ++言語にだけ対応しています。

(a)　トランザクションオブジェクトファイルの作成

TPBroker for C++でHiRDBをアクセスするUAPを作成するとき，TPBroker for C++のコマンド（tsmkobjコマンド）でトランザクション制御用オブジェクトファイルを作成します。指定例を次に示します。

tsmkobj -o 制御用オブジェクトファイル名 -r HiRDB_DB_SERVER

(b)　コンパイル及びリンケージ

UAPをコンパイル及びリンケージする場合の指定例を次に示します。

aCC +inst_implicit_include +DAportable -c -I$TPDIR/include
    -I$TPDIR/include/dispatch -I/HiRDB/include -D_REENTRANT
    -D_HP_UX_SOURCE -D_POSIX_C_SOURCE=199506Lファイル名.c
aCC +inst_implicit_include +Daportable -o UAP実行形式ファイル名 UAPファイル名.o
    $TPDIR/otsspool/XA/制御用オブジェクトファイル名称.o
    -L/HiRDB/client/lib -lzcltxk -L$TPDIR/lib -Wl,+s -lots_r -lorb_r
    -Wl,-B,immediate -Wl,-a,default -L/usr/lib -lpthread

注1

下線で示す部分は，HiRDBクライアントのインストールディレクトリを指定してください。

注2

HP-UX版の場合で，かつUAP作成時とUAP実行時とでHiRDBの提供ライブラリのディレクトリが異なるときは，オプション（-Wl,+s）を指定してください。また，リンケージのときと実行時とで提供ライブラリのディレクトリが異なるので，実行時には環境変数SHLIB_PATHで，提供ライブラリがあるディレクトリを設定する必要があります。

注3

マルチスレッド対応のXAインタフェースを使用したUAPのため，HiRDBが提供するライブラリは，OLTPへ登録する方法（動的登録又は静的登録）によって，二種類（-lzcltxk又は-lzcltyk）あります。リンケージで指定するライブラリ名は，それに合わせた名称を指定してください。

(4)　TUXEDOを使用する場合

TUXEDOを使用した場合の，UAPのコンパイル及びリンケージについて説明します。なお，XAインタフェース専用のライブラリは，C言語又はC++言語にだけ対応しています。

(a)　UNIX版の場合

トランザクションマネジャサーバ（TMS）のロードモジュールの構築

buildtms -r HiRDB_DB_SERVER -o TMSロードモジュールファイル名

TUXEDOシステムのサーバのロードモジュールの構築

buildserver -r HiRDB_DB_SERVER -s サービス名 -o サーバロードモジュールファイル名
           -f サーバファイル名.o

TUXEDOクライアントモジュールの作成

buildclient -o クライアントロードモジュール名 -f クライアントファイル名.c

(b)　Windows版の場合

トランザクションマネジャサーバ（TMS）のロードモジュールの構築

set LINK=/EXPORT:_imp_pdtxa_switch=pdtxa_switch
            /EXPORT:_inp_pdtxa_switch_y=pdtxa_switch_y
buildtms -r HiRDB_DB_SERVER -o TMSロードモジュールファイル名

TUXEDOシステムのサーバのロードモジュールの構築

set LINK=/EXPORT:_imp_pdtxa_switch=pdtxa_switch
            /EXPORT:_inp_pdtxa_switch_y=pdtxa_switch_y
buildserver -r HiRDB_DB_SERVER -s サービス名 -o サーバロードモジュールファイル名
           -f サーバファイル名.obj

TUXEDOクライアントモジュールの作成

buildclient -o クライアントロードモジュール名 -f クライアントファイル名.c

(5)　TP1/EEを使用する場合（UNIX版限定）

TP1/EEを使用した場合の，UAPのコンパイル及びリンケージについて説明します。なお，TP1/EEのコマンドについては，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

(a)　Ｃ言語の場合

リソースマネジャ連携用オブジェクトファイルの作成

TP1/EEでHiRDBをアクセスするUAPを作成する場合，TP1/EE運用コマンドでリソースマネジャ連携用オブジェクトファイルを作成する必要があります。リソースマネジャ連携用オブジェクトファイルは，eetrnmkobjコマンドで作成します。

リソースマネジャ連携用オブジェクトファイルを作成する場合，次のように指定します。

eetrnmkobj -o リソースマネジャ連携用オブジェクトファイル名称 -r HiRDB_DB_SERVER  ¥
           -s RMスイッチ名称 -O RM関連オブジェクトファイル名称  ¥
           -i HiRDB提供ヘッダパス

＜例＞

リソースマネジャ連携用オブジェクトファイル名称をseigyoとして，静的登録方式で作成する場合

eetrnmkobj -o seigyo -r HiRDB_DB_SERVER -s pdtxa_switch_y  ¥
           -O /HiRDB/client/lib/libzcltyk.sl -i /HiRDB/include

コンパイル，及びリンケージ

マルチスレッド対応XAインタフェースを使用したUAPをコンパイル，及びリンケージする場合，次のように指定します。

共用ライブラリを使用する場合

/usr/vac/bin/xlc_r -o 実行形式ファイル名 $DCDIR/lib/ee_main.o
    リソースマネジャ連携用オブジェクト -brtl -bdynamic -L/HiRDB/lib -L/HiRDB/client/lib
    -L$DCDIR/lib -lpthread -lisode -lc_r -ldl -lzcltyk -lee -lee_rm
    -lbetran2 -ltactk

注1

下線で示す部分は，HiRDBクライアントのインストールディレクトリを指定してください。

注2

マルチスレッド対応XAインタフェースを使用した，TP1/EEのUAPのためのライブラリとして，-lzcltykを使用します。リンケージで指定するライブラリ名は，それに合わせた名称を指定してください。なお，登録方法については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

＜例＞

UAP実行形式ファイル名称をSAMPLE，リソースマネジャ連携用オブジェクトファイル名称をseigyoとする場合

/usr/vac/bin/xlc_r -o SAMPLE $DCDIR/lib/ee_main.o seigyo.o
     -brtl -bdynamic -L/HiRDB/lib -L/HiRDB/client/lib -L$DCDIR/lib
     -lpthread -lisode -lc_r -ldl -lzcltyk -lee -lee_rm -lbetran2 -ltactk

(b)　COBOL言語の場合

リソースマネジャ連携用オブジェクトファイルの作成

TP1/EEでHiRDBをアクセスするUAPを作成する場合，TP1/EE運用コマンドでリソースマネジャ連携用オブジェクトファイルを作成する必要があります。リソースマネジャ連携用オブジェクトファイルは，eetrnmkobjコマンドで作成します。

リソースマネジャ連携用オブジェクトファイルを作成する場合，次のように指定します。

eetrnmkobj -o リソースマネジャ連携用オブジェクトファイル名称 -r HiRDB_DB_SERVER  ¥
           -s RMスイッチ名称 -O RM関連オブジェクトファイル名称  ¥
           -i HiRDB提供ヘッダパス

＜例＞

リソースマネジャ連携用オブジェクトファイル名称をseigyoとして，静的登録方式で作成する場合

eetrnmkobj -o seigyo -r HiRDB_DB_SERVER -s pdtxa_switch_y  ¥
           -O /HiRDB/client/lib/libzcltyk.sl -i /HiRDB/include

コンパイル，及びリンケージ

マルチスレッド対応XAインタフェースを使用したUAPをコンパイル，及びリンケージについては，マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

8.4.3　COBOL2002のUnicode機能を使用したUAPの実行

COBOL2002のUnicode機能を使用するUAPでは，UTF-16の文字データを格納する日本語項目を，埋込み変数として使用できます。

(1)　SQLに関係する文字データの文字コード

COBOL2002のUnicode機能を使用するUAPでの，UAP内の文字データと文字コードを次の表に示します。

表8‒33　COBOL2002のUnicode機能を使用するUAPでの，UAP内の文字データと文字コード

UAP内の文字データ

文字コード

SQL文

UTF-8

埋込み変数

英数字項目

UTF-8

日本語項目

UTF-16LE又はUTF-16BE

(2)　HiRDBサーバが行う文字コード変換

COBOL2002のUnicode機能を使用するUAPでSQLを実行する場合に，HiRDBサーバが行う文字コード変換を次の表に示します。

表8‒34　COBOL2002のUnicode機能を使用するUAPでSQLを実行する場合に，HiRDBサーバが行う文字コード変換

UAP内の文字データ

SQL実行時にHiRDBサーバが行う文字コード変換

SQL文

クライアント側とサーバ側の文字コードは両方ともUTF-8のため，変換しません。

埋込み変数

英数字項目

代入，比較処理の対象となるサーバ側の文字データの文字集合がUTF-16の場合，文字コードを変換します。※

日本語項目

代入，比較処理の対象となるサーバ側の文字データの文字集合が既定文字集合(UTF-8)の場合，文字コードを変換します。※

なお，変換前のデータに半角文字がある場合は，半角文字（UTF-16では2バイト）を格納します。

また，埋込み変数内のデータは-XU16オプションの指定に従って，文字集合名UTF-16LE，又はUTF-16BEを指定した文字データ型（CHAR又はVARCHAR）のデータとして扱います。

注※

変換（代入，比較）できるデータ型については，マニュアル「HiRDB SQLリファレンス」を参照してください。

(3)　SQLを実行できる条件

COBOL2002のUnicode機能を使用するUAPでSQLを実行するには，次に示す条件をすべて満たす必要があります。

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8である

SQLプリプロセサ実行時に-XU16オプションを指定する

埋込みSQL文中にJIS X0213の第3・4水準漢字コードの文字を含まない

クライアント環境定義PDCLTCNVMODEにNOUSE（省略値）を指定する

(a)　HiRDBサーバの既定文字集合

pdntenvコマンド（UNIX版の場合はpdsetupコマンド）で，文字コード種別にutf-8，又はIVS対応UTF-8を指定した場合に，HiRDBサーバの既定文字集合がUTF-8になります。

(b)　プリプロセスオプション

-XU16オプションについては，表「プリプロセスオプション（UNIX環境のCOBOL言語の場合）」，又は表「プリプロセスオプション（Windows環境のCOBOL言語の場合）」を参照してください。

(c)　埋込みSQL文中の文字の制限

UAPのソース中に埋め込んだSQL文にJIS X0213の第3・4水準漢字コードの文字が含まれていると，プリプロセス時にエラーになります。なお，埋込み変数に格納する文字データは，COBOL2002のUnicode機能がサポートする範囲の文字をすべて使用できます。

(d)　クライアント環境定義

HiRDBクライアントが文字コード変換を行わないように，クライアント環境定義PDCLTCNVMODEにNOUSEを指定します。

8.4.4　XDM/RDとUNIFY2000で作成したUAPの移行性

XDM/RD，又はUNIFY2000で作成したUAPは，SQLの互換性があるものについてはSQLプリプロセサを実行することでHiRDBで使用できます。しかし，互換性がないSQLについては書き替えが必要です。HiRDBで使用するSQLについては，「HiRDBで使用できるSQL一覧」を参照してください。また，SQLの詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

XDM/RD，又はUNIFY2000からのUAPの移行性を次の表に示します。

表8‒35　XDM/RD，又はUNIFY2000からのUAPの移行性

クライアントUAP種別

移行性

移行の条件

作成したシステム

API

XDM/RD

埋込み型

○

SQLプリプロセサの再実行

モジュール型

×

−

CALL型

×

−

UNIFY2000

埋込み型SQL/A

○

SQLプリプロセサの再実行

RHLI

×

−

（凡例）

○：移行できます。

×：移行できません。

−：該当しません。

8.4.5　HiRDBをバージョンアップした場合に必要な作業

HiRDBが提供しているAPIは上位互換性があります。そのため，基本的にはHiRDBをバージョンアップしてもUAPの修正は必要ありません。

ただし，HiRDBの新機能を使用する場合は，再度プリプロセス，コンパイル，リンケージする必要があります。

8.4.6　バージョン，リビジョンによるクライアント環境定義及びプリプロセスオプションの変更点

クライアント環境定義及びプリプロセスオプションの見直しを行い，省略値の変更及び指定が必要なクライアント環境定義の削減を実施しました。これによって，より安全なシステムを構築することができます。ここでは，次の区分で変更となるクライアント環境定義及びプリプロセスオプションの一覧を示します。

バージョン，リビジョンによって省略値が異なるクライアント環境定義及びプリプロセスオプション

指定不要となったクライアント環境定義

バージョンアップ後は推奨モードの省略値を適用します。バージョンアップを行う場合は，省略値変更によるメリット及びデメリットを確認してください。確認の結果，旧バージョンとの互換性を重視する場合は，旧バージョンと同等の省略値になる互換モードを適用してください。ただし，この場合は推奨値を指定できるクライアント環境定義があれば，個別に指定することを検討してください。

(1)　バージョン，リビジョンによって省略値が異なるクライアント環境定義及びプリプロセスオプション

バージョン，リビジョンによって省略値が異なるクライアント環境定義を次の表に示します。省略値変更によるメリット及びデメリットを確認してください。確認の結果，旧バージョンとの互換性を重視する場合は，旧バージョンと同等の省略値になる互換モードを適用してください。互換モードはクライアント環境定義PDDEFAULTOPTIONで指定できます。PDDEFAULTOPTIONの詳細は，「クライアント環境定義の設定内容」の「PDDEFAULTOPTION」を参照してください。

表8‒36　バージョン，リビジョンによって省略値が異なるクライアント環境定義

クライアント環境定義名

バージョン09-50以降の省略値

0904互換モードを適用している場合の省略値

バージョン09-50より前の省略値

省略値変更によるメリット

省略値変更によるデメリット

PDSTJTRNOUT

YES

→

通常環境：NO

OLTP環境：YES

コネクションプーリング機能を使用している場合など物理的な接続の切断が行われない場合でも，トランザクション単位で統計情報を取得するため，トラブルシュート情報が拡充します。

通常環境の場合，UAPに関する統計情報のログ出力量が増加します。サーバ側の統計情報ログファイル容量を確認してください。UAPに関する統計情報の出力量については，マニュアル「HiRDB システム定義」の「統計ログファイル（pd_stj_file_size）の見積もり式」を参照してください。

PDKALVL

2

→

0

ルータやファイアウォールなどのネットワーク管理アプリケーションが備えている無通信時間監視機能によって，HiRDBの接続を不当に切断されることを防ぎます。また，サーバで時間監視しているPDSWAITTIME，及びPDSWATCHTIMEの監視時間をリセットするため，サーバでの時間監視による切断を防げます。

詳細は，「クライアント環境定義の設定内容」の「PDKALVL」を参照してください。

1接続当たり1スレッド（KeepAlive通信用スレッド）増加します。スレッド数に関するOSパラメタやプロセスサイズ増加による影響がないか確認してください。

詳細は，「クライアント環境定義の設定内容」の「PDKALVL」を参照してください。

PDKATIME

600

→

3000

PDBLKBUFFSIZE（Type4 JDBCドライバ使用時以外）

PDBLKF指定なし：10

PDBLKF指定あり：0

→

0

サーバからクライアントに検索結果を転送する場合の通信オーバヘッドが減り，検索時間を短縮できます。

クライアント及びサーバでブロック転送用のメモリが増加します。クライアント側のメモリ所要量については，「クライアントライブラリのメモリ容量見積もり」，サーバ側のメモリ所要量については，マニュアル「HiRDB システム導入・設計ガイド」の「SQL実行時に必要なメモリ所要量の計算式」を参照し，メモリ増加による影響がないか確認してください。

また，「ブロック転送機能」の「注意事項」を参照し，ブロック転送機能の適用によって問題が発生しないか確認してください。

PDFORUPDATEEXLOCK

YES

→

NO

更新を前提とした検索に対する排他モードのロックを自動設定するので，信頼性が向上します。

排他モードのロックを設定しないことを意図していたUAPがないか見直しが必要です。

PDCLTAPNAME（Type4 JDBCドライバ使用時）

Cosminexus使用時

JDBC4.0版：JDBC40_XXXX

JDBC2.0版：JDBC20_XXXX

XXXX：J2EEサーバ名

Cosminexus使用時

JDBC4.0版：JDBC40_XXXX

JDBC2.0版：JDBC20_XXXX

XXXX：J2EEサーバ名

JDBC4.0版：HiRDB_Type4_JDBC40_Driver

JDBC2.0版：HiRDB_Type4_JDBC_Driver

pdls -d prcコマンドで接続中のアプリケーションを確認する際，J2EEサーバ名が出力されるため，接続元の判別が容易になります。

この環境変数はPDDEFAULTOPTIONにV0904を指定した場合もバージョン09-50以降の省略値を適用します。

バージョン09-50より前の省略値を適用したい場合は，UAP名称に明示的にバージョン09-50より前の省略値を指定してください。UAP名称の指定方法については，「接続情報の優先順位」を参照してください。

Cosminexus未使用時

→

Cosminexus未使用時

→

PDSQLTRCFMT

2

1

−

SQLトレースの出力情報が詳細になるため，トラブルシュート情報が拡充します。

HiRDB SQL Tuning Advisor 08-03以前を使用してSQLトレースの解析を行う場合，出力形式2には対応していないため，明示的に1を指定するか，PDDEFAULTOPTIONにV0904を指定してください。

PDSQLEXECTIME

YES

→

NO

SQLトレースにSQL実行時間が出力されるため，トラブルシュート情報が拡充します。

なし

PDTCPCONOPT

1

1

0

サーバとの通信で消費するTCPポートの数を削減できます。

なし

PDNODELAYACK

YES

YES

NO

AIXでは，OSパラメタ（tcp_nodelayack）の指定で，パケットを受信して即時にACKを送信できます。これによって，通信処理のレスポンスに遅延が発生する場合，遅延が改善されることがあります。

OSパラメタを指定した場合，システム全体に影響しますが，この機能によってHiRDBの通信にだけ即時ACKを適用できます。

なし

PDARYERRPOS

YES

YES

NO

配列を使った更新でエラーとなった場合，エラーとなった配列要素を示す値をSQL連絡領域に設定するため，トラブルシュート情報が拡充します。

なし

PDBLKFERRBREAK

YES

YES

NO

ブロック転送機能でHiRDBサーバから複数行を取得している間に暗黙的ロールバックが行われた場合，HiRDBクライアントが保持する複数行の検索結果のうち，UAPが最初の行を取得するときにエラーを返却するため，エラーを早く検知することができます。

なし

PDCLTSIGPIPE

IGNORE

IGNORE

CATCH

UNIX版マルチスレッド用クライアントライブラリで複数接続機能を使用時，UAP実行プロセス中にHiRDBクライアントのシグナルハンドラを設定しません。

これによって，UAP実行プロセスからHiRDBクライアントライブラリがアンロード後にSIGPIPEが発生した場合，プロセスが異常終了するのを回避できます。

なし

（凡例）

→：バージョン09-50より前の省略値と同じ省略値であることを示します。

−：バージョン09-50より前では，未サポートのクライアント環境定義です。

バージョン，リビジョンによって省略時の適用有無が異なるプリプロセスオプションを次の表に示します。オプション適用によるメリット及びデメリットを確認してください。確認の結果，旧バージョンとの互換性を重視する場合は，旧バージョンと同等の省略値になる互換モードを適用してください。互換モードはクライアント環境定義PDDEFAULTOPTIONで指定できます。詳細は，「UNIX環境でのプリプロセス」又は「Windows環境でのプリプロセス」を参照してください。

表8‒37　バージョン，リビジョンによって省略時の適用有無が異なるプリプロセスオプション

省略するプリプロセスオプション

バージョン09-50以降のオプション適用有無

0904互換モードを適用している場合のオプション適用有無

バージョン09-50より前のオプション適用有無

省略値変更によるメリット

省略値変更によるデメリット

Xm

適用あり

→

適用なし

複数接続機能を使用したUAPをプリプロセスする場合に指定が必要なオプションのため，オプションの指定漏れを回避できます。

生成するポストソースの内容が変わります。

バージョン09-50より前のHiRDBで動作実績のあるアプリケーションに対して再度プリプロセスを実行する場合は，「COBOL言語で複数接続機能を使用する場合の注意事項」を確認してください。Xmオプション指定により問題が発生する可能性がある場合は，PDDEFAULTOPTIONにV0904を指定してプリプロセスを実行してください。

Xs

適用あり

→

適用なし

単純注釈を使用したUAPをプリプロセスする場合に指定が必要なオプションのため，オプションの指定漏れを回避できます。

生成するポストソースの内容が変わります。

バージョン09-50より前のHiRDBで動作実績のあるアプリケーションに対して再度プリプロセスを実行する場合は，プログラムソース中のSQL文の中に単純注釈を使用しているかどうか確認してください。単純注釈を使用していない場合は，PDDEFAULTOPTIONにV0904を指定してプリプロセスを実行してください。

（凡例）

→：バージョン09-50より前のオプション適用有無と同じであることを示します。

(2)　バージョン，リビジョンによって指定不要となったクライアント環境定義

バージョンアップによって次の表に示すクライアント環境定義を指定する必要がなくなりました。バージョンアップした場合にこれらのオペランドを指定したままでもエラーになりませんが，オペランドを省略することを検討してください。

表8‒38　指定不要となったクライアント環境定義

クライアント環境定義名

バージョン09-50の省略値

0904互換モードを適用している場合の省略値

PDTCPCONOPT

→

1

PDNODELAYACK

→

YES

PDHJHASHINGMODE

→

pd_hashjoin_hashing_mode指定値

PDBLKFUPD

→

YES

PDARYERRPOS

→

YES

PDBLKFERRBREAK

→

YES

PDCLTSIGPIPE

→

IGNORE

（凡例）

→：0904互換モード適用時の省略値と同じ省略値であることを示します。

9　Javaストアドプロシジャ，Javaストアドファンクション

この章では，処理手続きをJavaで記述するJavaストアドプロシジャ，Javaストアドファンクションの作成方法，実行方法について説明します。

9.1　概要

処理手続きをJavaで記述したストアドプロシジャ，ストアドファンクションを，Javaストアドプロシジャ，Javaストアドファンクションといいます。

この章では，以降Javaストアドプロシジャ，Javaストアドファンクションを総称して，外部Javaストアドルーチンと呼びます。

なお，HiRDBの稼働プラットフォームによっては外部Javaストアドルーチンを使用できません。詳細については，マニュアル「HiRDB システム運用ガイド」の「Javaストアドプロシジャ，Javaストアドファンクションを使用できる環境」を参照してください。

外部Javaストアドルーチンの作成から実行までの流れを次の図に示します。

図9‒1　外部Javaストアドルーチンの作成から実行までの流れ

[説明]

外部Javaストアドルーチンを作成します。詳細については，「外部Javaストアドルーチンの作成」を参照してください。

クライアントのAPとして，テスト，デバッグをします。詳細については，「外部Javaストアドルーチンの作成」を参照してください。

HiRDBにJARファイルを登録します。詳細については，「JARファイルの新規登録」を参照してください。

外部Javaストアドルーチンを定義します。詳細については，「外部Javaストアドルーチンの定義」を参照してください。

外部Javaストアドルーチンを実行します。詳細については，「外部Javaストアドルーチンの実行」を参照してください。

外部Javaストアドルーチンの特長

サーバ，クライアント間の通信オーバヘッドがありません

外部Javaストアドルーチンは，SQLストアドプロシジャ，SQLストアドファンクションと同様に，サーバ側で処理をします。したがって，サーバ，クライアント間での通信によるオーバヘッドはありません。

手続き本体，関数本体をJavaで記述できます

記述言語がJavaなので，SQLで記述するよりも高度な制御ができます。

異種DBMSでも動作できます

Javaはプラットフォームに依存しない言語です。したがって，Javaで作成したプログラムは，外部Javaストアドルーチンを使用できる異種DBMSでも動作できます。

デバッグが簡単です

SQLストアドプロシジャ，SQLストアドファンクションのデバッグをする場合，実際にサーバ側で動作させる必要があります。これに対して，外部Javaストアドルーチンのデバッグは，クライアント側にJava言語のデバッガを用意することで，データベースアクセスを含めたデバッグができます。

外部Javaストアドルーチン実行前の準備

外部Javaストアドルーチンを実行する場合，事前にJDBCドライバをインストールしておく必要があります。JDBCドライバのインストールについては，「インストールと環境設定」を参照してください。

9.2　外部Javaストアドルーチンの作成から実行までの各作業

外部Javaストアドルーチンの作成から実行までの手順を次に示します。

外部Javaストアドルーチンの作成

JARファイルの新規登録

外部Javaストアドルーチンの定義

外部Javaストアドルーチンの実行

JARファイルの再登録・削除

9.2.1　外部Javaストアドルーチンの作成

外部Javaストアドルーチンを記述する場合，次の手順でします。

Javaプログラムの記述（Javaファイルの作成）

コンパイル（Classファイルの作成）

テスト，デバッグ

JAR形式へのアーカイブ（JARファイルの作成）

(1)　Javaプログラムの記述（Javaファイルの作成）

外部Javaストアドルーチンとして登録するJavaプログラムを記述します。

Javaプログラムを記述する場合の注意事項については，「Javaプログラム作成時の注意事項」を参照してください。

Javaプログラムの記述例を次の図に示します。

図9‒2　Javaプログラムの記述例

(2)　コンパイル（Classファイルの作成）

javacコマンドを使用して，JavaファイルからClassファイルを作成します。

コンパイルの例を次の図に示します。

図9‒3　コンパイルの例

[説明]

Javaファイルでpackage指定をした場合は，コンパイル時に-dオプションを指定してください。

コンパイルすると，package名のディレクトリが作成され，その下にClassファイルが作成されます。

(3)　テスト，デバッグ

コンパイルしたファイルを，クライアント側のJava仮想マシン上で実行し，テスト，デバッグをします。

テスト，デバッグをするときの注意事項については，「テスト，デバッグ時の注意事項」を参照してください。

テスト，デバッグの概要を次の図に示します。

図9‒4　テスト，デバッグの概要

(4)　JAR形式へのアーカイブ（JARファイルの作成）

jarコマンドを使用して，複数のClassファイルからJARファイルを作成します。

JARファイルを作成するときの注意事項については，「JARファイル作成時の注意事項」を参照してください。

JAR形式へのアーカイブ例を次の図に示します。

図9‒5　JAR形式へのアーカイブ例

9.2.2　JARファイルの新規登録

作成したJARファイルを，HiRDBサーバに新規登録（コピー）します。

登録するには，次の四つの方法があります。

SQLのINSTALL JARの実行

UAP中にINSTALL JARを指定して実行するか，又はデータベース定義ユティリティでINSTALL JARを指定して実行します。

pdjarsyncコマンドの実行

pdjarsyncコマンド（-Iオプション指定）を実行します。pdjarsyncコマンドはHiRDB管理者だけが実行できます。

インストール用Javaメソッドの呼び出し

インストール用Javaメソッド「Jdbh_JARAccessクラスのJdbh_JARReInstall」を呼び出すことで，JARファイルを登録できます。

JARファイルの登録の概要を次の図に示します。

図9‒6　JARファイルの登録の概要

参考

JARファイルを再登録する場合は，SQLのREPLACE JARを実行します。JARファイルを削除する場合は，SQLのREMOVE JARを実行します。また，HiRDB管理者がJARファイルを再登録又は削除する場合は，pdjarsyncコマンドを実行します。

なお，JARファイルの再登録及び削除は，JARファイルを新規登録したユーザ，又はHiRDB管理者だけが実行できます。

9.2.3　外部Javaストアドルーチンの定義

外部Javaストアドルーチンを定義する場合は，CREATE PROCEDURE又はCREATE FUNCTIONを使用します。CREATE PROCEDURE又はCREATE FUNCTIONで，Javaメソッドと手続き名，又はJavaメソッドと関数名との関連づけをします。

Javaストアドプロシジャの場合

CREATE PROCEDUREを使用して，JavaメソッドをJavaストアドプロシジャとして登録します。

Javaストアドファンクションの場合

CREATE FUNCTIONを使用して，JavaメソッドをJavaストアドファンクションとして登録します。

外部Javaストアドルーチンの定義例を次の図に示します。

図9‒7　外部Javaストアドルーチンの定義例

パブリックルーチンの定義

他ユーザが定義した外部Javaストアドルーチンを使用する場合は，UAP中からストアドルーチンを呼び出すときに，所有者の認可識別子とルーチン識別子を指定する必要があります。

しかし，CREATE PUBLIC PROCEDURE又はCREATE PUBLIC FUNCTIONを実行してパブリックルーチンとして定義すると，他ユーザが定義した外部Javaストアドルーチンを使用する場合でも，UAP中からストアドルーチンを呼び出すときに，所有者の認可識別子を指定する必要がなくなります（ルーチン識別子だけ指定します）。

外部Javaストアドルーチンの再定義

javaプログラムの修正などによって，一度定義した外部Javaストアドルーチンを再度定義する場合は，ALTER PROCEDURE又はALTER ROUTINEを使用します。

外部Javaストアドルーチンの削除

外部Javaストアドルーチンを削除する場合は，DROP PROCEDURE又はDROP FUNCTIONを使用します。

また，パブリックルーチンを削除する場合は，DROP PUBLIC PROCEDURE又はDROP PUBLIC FUNCTIONを使用します。なお，パブリックルーチンを削除できるのは，パブリックルーチンを定義したユーザ，又はDBA権限を持っているユーザだけです。

9.2.4　外部Javaストアドルーチンの実行

外部Javaストアドルーチンを実行する場合は，CALL文又は関数呼出しを使用します。CALL文又は関数呼出しを指定したSQLを実行することで，Javaメソッドが外部Javaストアドルーチンとして呼び出され，サーバ側のJava仮想マシン上で実行されます。

Javaストアドプロシジャの場合

CALL文を使用して，JavaメソッドをJavaストアドプロシジャとして実行します。

Javaストアドファンクションの場合

関数呼出しを指定したSQLを使用して，JavaメソッドをJavaストアドファンクションとして実行します。

CALL文及び関数呼出しについては，マニュアル「HiRDB SQLリファレンス」を参照してください。

外部Javaストアドルーチンの実行例を次の図に示します。

図9‒8　外部Javaストアドルーチンの実行例

9.3　外部Javaストアドルーチンのプログラム例

9.3.1　プログラム例

表picsにBLOB型として格納されているデータをSELECT文で検索し，ZIP圧縮してから呼び出し側に返却するストアドプロシジャの例を次に示します。

≪Javaストアドプロシジャの定義≫

CREATE PROCEDURE get_pic   .............................................1
  (IN pic_num INTEGER, OUT pic_data BLOB)   ............................1
  LANGUAGE JAVA   ......................................................2
  EXTERNAL NAME 'mypack.jar:JStrPics.getZippedPic(int, byte[][])'   ....3
  PARAMETER STYLE JAVA;   ..............................................4

[説明]

プロシジャ名，パラメタの定義

LANGUAGEの設定

Javaメソッドとの関連づけ

PARAMETER STYLEの設定

≪Javaストアドプロシジャの手続き本体≫

import java.sql.*;
import java.io.*;
import java.util.zip.*;

public class JStrPics{   ...............................................1
  public static void getZippedPic(int jpic_num, byte[][] jpic_data)   ..2
    throws SQLException, IOException{   ................................3
    Connection con = DriverManager.getConnection(   ....................4
                     "jdbc:hitachi:hirdb");         ....................4

    PreparedStatement pstmt = con.prepareStatement   ...................5
        ("select p_name,p_data from pics where p_num = ?");  ...........5
    pstmt.setInt(1, jpic_num);   .......................................5
    ResultSet rs = pstmt.executeQuery();   .............................6
    String name;   .....................................................7
    byte[] srcPic;   ...................................................7

    while(rs.next()){
      name = rs.getString("p_name");   .................................8
      srcPic = rs.getBytes("p_data");   ................................9
    }
    ByteArrayOutputStream baos = new ByteArrayOutputStream();   ........10
    ZipOutputStream zos = new ZipOutputStream(baos);   .................10
    ByteArrayInputStream bais = new ByteArrayInputStream(srcPic);   ....10
    ZipEntry ze = new ZipEntry(name);   ................................10
    zos.putNextEntry(ze);   ............................................10

    int len = 0;   .....................................................10
    byte[] buff = new byte[1024];   ....................................10
    while((len = bais.read(buff)) != -1){   ............................10
    zos.write(buff, 0, len);   .........................................10
    }   ................................................................10
    zos.closeEntry();   ................................................11
    bais.close();   ....................................................11
    zos.close();   .....................................................11

    jpic_data[0] = baos.toByteArray();   ...............................12
    baos.close();   ....................................................12

    return;   ..........................................................13
  }
}

[説明]

クラス名の定義

メソッド名，パラメタ名の定義

例外が発生した場合の定義

Connectionオブジェクトの取得（ただし，HiRDB接続ユーザ数が増えるのではなく，Javaストアドプロシジャはコール元の接続内で動作します）

SELECT文の前処理

SELECT文の実行，結果集合取得

変数の宣言

結果集合からp_name列の値を取得

結果集合からp_data列の値を取得

srcPic配列内のデータをZIP形式で圧縮し，zosストリーム内に格納

入力，出力ストリームのクローズ

baosストリーム内のbyte列を，メソッドのOUTパラメタに設定

メソッド実行の終了

≪Javaストアドプロシジャの実行≫

import java.sql.*;
import java.io.* ;

public class Caller{   ...................................................1
  public static void main(String[] args)   ...............................2
    throws SQLException, IOException{   ..................................3
    Connection con = DriverManager.getConnection(   ......................4
                     "jdbc:hitachi:hirdb”,”USER1”,”PASS1");   ............4
    CallableStatement cstmt = con.prepareCall("{call get_pic(?,?)}");   ..5
    cstmt.setInt(1, 10);   ...............................................5
    cstmt.registerOutParameter(2, java.sql.Types.LONGVARBINARY);   .......5

    cstmt.executeUpdate();   .............................................6
    byte[] getPic = cstmt.getBytes(2);   .................................7

    ......

  }
}

[説明]

Javaストアドプロシジャを呼び出すJavaアプリケーションのプログラム例です。

クラス名の定義

メソッド名，パラメタ名の定義

例外が発生した場合の定義

Connectionオブジェクトの取得（このConnectionオブジェクトを取得することで，HiRDBに接続するため，ユーザ数が増えます）

CALL文の前処理

CALL文の実行

byte配列型のOUTパラメタの取得

9.3.2　HiRDBが提供する外部Javaストアドルーチンのサンプル

(1)　サンプル1

指定した年月のカレンダーを取得するJavaストアドプロシジャの例です。

外部Java手続き本体（ファイル名：sample1.java）

/* ALL RIGHTS RESERVED,COPYRIGHT (C)2000,HITACHI,LTD. */
/* LICENSED MATERIAL OF HITACHI,LTD. */
/************************************************************************/
/* name = HiRDB 06-00 Javaストアドプロシジャ サンプルプログラム １      */
/************************************************************************/
import java.lang.*;
import java.util.*;
/************************************************************************/
/* name = サンプル１ クラス                                             */
/************************************************************************/
public class sample1 {
    /*==================================================================*/
    /* name = デバッグ用メインメソッド                                  */
    /*==================================================================*/
    public static void main(java.lang.String[] args) {
        java.lang.Integer year = new Integer(args[0]);
        java.lang.Integer month = new Integer(args[1]);
        java.lang.String calendar[] = new String[1];
        calendar(year, month, calendar);
        System.out.println(calendar[0]);
    }
    /*====================================================================*/
    /* name = サンプル１ メソッド                                         */
    /*====================================================================*/
    public static void calendar(java.lang.Integer year,
                               java.lang.Integer month,
                                java.lang.String[] calendar) {
        int DayOfWeek;          // 指定月の1日の曜日
        int week;               // 改行制御用
        int wyear = year.intValue();    // 年ワーク
        int wmonth = month.intValue();  // 月ワーク
        // カレンダーヘッダ作成
        calendar[0] = "         " +  wyear + " / " + wmonth + "¥n";
        calendar[0] += "Sun Mon Thu Wed Tue Fri Sat¥n";

        // カレンダーオブジェクト生成
        Calendar target_cal = new GregorianCalendar(wyear, wmonth - 1, 1);
        // 指定月の1日の曜日算出
        DayOfWeek = target_cal.get(Calendar.DAY_OF_WEEK);

        // 開始曜日まで空白設定
        for (week = 1; week < DayOfWeek; week++) {
            calendar[0] += "    ";
        }
        // 日付設定
        for (;
             target_cal.get(Calendar.MONTH) == wmonth - 1;
             target_cal.add(Calendar.DATE, 1), week++) {
            // 日付設定と桁数に応じたスペース調整
            if (target_cal.get(Calendar.DATE) < 10) {
                calendar[0] += "  " + target_cal.get(Calendar.DATE);
            } else {
                calendar[0] += " " + target_cal.get(Calendar.DATE);
            }
            // 日付間のパディング文字の設定
            if (week == 7) {
                calendar[0] += "¥n";
                week = 0;
            } else {
                calendar[0] += " ";
            }
        }

        return;
    }
}

上記の外部Java手続き本体を使用して，Javaストアドプロシジャを定義，実行する例を次に示します。

Javaファイルのコンパイル（HP-UXの場合の例です）

javac sample1.java

JARファイルの作成（HP-UXの場合の例です）

jar -cvf sample1.jar sample1.class

HiRDBへのJARファイルの登録（SQLのINSTALL JARを使用した例です）

INSTALL JAR 'sample1.jar' ;

Javaストアドプロシジャの定義

CREATE PROCEDURE calendar(IN pyear INT, IN pmonth INT, OUT calendar VARCHAR(255))
  LANGUAGE JAVA
  EXTERNAL NAME 'sample1.jar:sample1.calendar(java.lang.Integer, java.lang.Integer,
                 java.lang.String[]) returns void'
  PARAMETER STYLE JAVA
end_proc;

Javaストアドプロシジャの実行

CALL calendar(?,?,?)

(2)　サンプル2

処理する範囲を年月日で指定し，その範囲のgoods_no列に対応した合計数を更新する例です。

なお，表は次のように定義されているものとします。

CREATE TABLE master_t1 (goods_no int,total_quantity dec(17,2))
CREATE TABLE tran_t1(goods_no int,quantity_1 dec(17,2),entrydate date)

外部Java手続き本体（ファイル名：sample2.java）

/* ALL RIGHTS RESERVED,COPYRIGHT (C)2000,HITACHI,LTD. */
/* LICENSED MATERIAL OF HITACHI,LTD. */
/************************************************************************/
/* name = HiRDB 06-00 Javaストアド サンプル２                           */
/************************************************************************/
import java.lang.*;
import java.math.*;
import java.sql.*;
/************************************************************************/
/* name = サンプル２クラス                                              */
/************************************************************************/
public class sample2 {
    /*==================================================================*/
    /* name = デバッグ用メインメソッド                                  */
    /*==================================================================*/
    public static void main(String args[]) throws SQLException {
        java.sql.Date fromdate = Date.valueOf("1996-06-01");
        java.sql.Date todate = Date.valueOf("1996-06-30");
        try {
        // Driverクラスの登録
            Class.forName("JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver");
        } catch (ClassNotFoundException ex) {
                System.out.println("¥n*** ClassNotFoundException caught ***¥n");
                ex.printStackTrace();
                System.out.println ("");
                System.out.println("¥n*************************************¥n");
                return;
        }

        jproc1(fromdate, todate);
    }
    /*==================================================================*/
    /* name = サンプル２メソッド                                        */
    /*==================================================================*/
    public static void jproc1(java.sql.Date fromdate, java.sql.Date todate)
                                                         throws SQLException {

        java.lang.Integer x_goods_no;
        java.math.BigDecimal x_quantity_1, x_total_quantity;
        try {
            // コネクトオブジェクト生成(Java手続き内ではCONNECTは発行されない)
            java.sql.Connection con =
              DriverManager.getConnection("jdbc:hitachi:hirdb");

            con.setAutoCommit(false);  // 自動コミットの抑止
            // SELECT(stmt1)前処理
            java.sql.PreparedStatement stmt1 =
              con.prepareStatement("SELECT goods_no, quantity_1, entrydate FROM tran_t1
              WHERE entrydate BETWEEN ? AND ? ORDER BY entrydate");
            // SELECT(stmt2)前処理(ループの外で前処理しておく)
            java.sql.PreparedStatement stmt2 =
              con.prepareStatement("SELECT total_quantity FROM master_t1
              WHERE goods_no = ?");
            // INSERT(stmt3)前処理(ループの外で前処理しておく)
            java.sql.PreparedStatement stmt3 =
              con.prepareStatement("INSERT INTO master_t1 VALUES(?, ?)");

            // UPDATE(stmt4)前処理(ループの外で前処理しておく)
            java.sql.PreparedStatement stmt4 =
              con.prepareStatement("UPDATE master_t1 SET total_quantity = ?
              WHERE goods_no = ?");
             // SELECT(stmt1)入力パラメタ設定
            stmt1.setDate(1, fromdate);
            stmt1.setDate(2, todate);

            // SELECT(stmt1)実行
            java.sql.ResultSet rs1 = stmt1.executeQuery();
            while (rs1.next()) {
                // SELECT(stmt1)検索結果取得
                x_goods_no = (Integer)rs1.getObject("goods_no");
                x_quantity_1 = rs1.getBigDecimal("quantity_1");
                // SELECT(stmt2)入力パラメタ設定
                stmt2.setObject(1, x_goods_no);

                // SELECT(stmt2)実行
                java.sql.ResultSet rs2 = stmt2.executeQuery();
                // goods_noが登録済/未登録で処理分け
                if (!rs2.next()) {      // 未登録==>新規エントリ追加
                    // 更新前にSELECT(stmt2)カーソルクローズ
                    rs2.close();

                    // INSERT(stmt3)入力パラメタ設定
                    stmt3.setObject(1, x_goods_no);
                    stmt3.setBigDecimal(2, x_quantity_1);
                    // INSERT(stmt3)実行
                    stmt3.executeUpdate();
                } else {                // 登録済==>既存エントリ更新
                    // 現在値取得
                    x_total_quantity = rs2.getBigDecimal("total_quantity");
                    // 増分
                    x_total_quantity = x_total_quantity.add(x_quantity_1);

                    // 更新前にSELECT(stmt2)カーソルクローズ
                    rs2.close();
                    // UPDATE(stmt4)入力パラメタ設定
                    stmt4.setBigDecimal(1, x_total_quantity);
                    stmt4.setObject(2, x_goods_no);
                    stmt4.executeUpdate() ;

                }
            }
            // SELECT(stmt1)カーソルクローズ
            rs1.close();

            // 各ステートメントオブジェクト解放
            stmt1.close();
            stmt2.close();
            stmt3.close();
            stmt3.close();
            // コネクション切断
            con.close();

        } catch (SQLException ex) { // SQLエラー処理
            SQLException fast_ex = ex;
            System.out.println("¥n***** SQLException caught *****¥n");
            while (ex != null) {
                System.out.println ("SQLState: " + ex.getSQLState ());
                System.out.println ("Message:  " + ex.getMessage ());
                System.out.println ("Vendor:   " + ex.getErrorCode ());
                ex.printStackTrace();
                ex = ex.getNextException ();
                System.out.println ("");
            }
            System.out.println("*******************************¥n");

            throw fast_ex;
        }
        return;
    }
}

上記の外部Java手続き本体を使用して，Javaストアドプロシジャを定義，実行する例を次に示します。

Javaファイルのコンパイル（HP-UXの場合の例です）

javac sample2.java

JARファイルの作成（HP-UXの場合の例です）

jar -cvf sample2.jar sample2.class

HiRDBへのJARファイルの登録（SQLのINSTALL JARを使用した例です）

INSTALL JAR 'sample2.jar' ;

Javaストアドプロシジャの定義

CREATE PROCEDURE jproc1(IN fromdate DATE, IN todate DATE)
  LANGUAGE JAVA
  EXTERNAL NAME 'sample2.jar:sample2.jproc1(java.sql.Date, java.sql.Date)
                 returns void'
  PARAMETER STYLE JAVA
end_proc;

Javaストアドプロシジャの実行

CALL jproc1(IN ?,IN ?)

(3)　サンプル3

gzip，ungzipを使用して，BLOB型データを圧縮，伸長する例です。

外部Java関数本体（ファイル名：sample3.java）

/* ALL RIGHTS RESERVED,COPYRIGHT (C)2000,HITACHI,LTD. */
/* LICENSED MATERIAL OF HITACHI,LTD. */
/************************************************************************/
/* name = HiRDB 06-00 Javaストアド サンプル３                           */
/************************************************************************/
import java.util.zip.*;
import java.io.*;
public class sample3 {
    private final static int BUFF_SIZE = 4096;

    /*==================================================================*/
    /* name = デバッグ用メインメソッド                                  */
    /*==================================================================*/
    public static void main(String[] args) throws IOException {
        // 入力データ取得
        String sin = args[0];
        byte[] bin = args[0].getBytes();
        System.out.println("input data : " + sin);
        // GZIP(BLOB)
        byte[] bwork = gzip(bin);
        System.out.println("gzip(BLOB)  : " +
                           bin.length +  "=>" + bwork.length +
                           "(" + (bwork.length * 100 / bin.length) + "%): " +
                           "");
        // GUNZIP(BLOB)
        byte[] bout = gunzip(bwork);
        System.out.println("gunzip(BLOB): " +
                           bwork.length +  "=>" + bout.length +
                           "(" + (bout.length * 100 / bwork.length) + "%): " +
                           new String(bout));

        return;
    }
    /*==================================================================*/
    /* name = サンプル３メソッド[gzip(BLOB)]                            */
    /*==================================================================*/
    public static byte[] gzip(byte indata[]) {
        // 圧縮データ出力用のストリーム生成
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 圧縮データ出力
        try {
            GZIPOutputStream zos = new GZIPOutputStream(baos);
            zos.write(indata, 0, indata.length);
            zos.close();
            baos.close();
        } catch (IOException ex) {
            System.out.println("gzip(BLOB): IOException: " + ex);
        ex.printStackTrace();
        }
        // 返却値の圧縮後バイト配列生成
        byte[] outdata = baos.toByteArray();
        return outdata;
    }
    /*==================================================================*/
    /* name = サンプル３メソッド[gunzip(BLOB)]                          */
    /*==================================================================*/
    public static byte[] gunzip(byte[] indata) {
        int rlen;                    // 入出力実長
        byte[] buff = new byte[BUFF_SIZE]; // 入出力用バッファ
        // 圧縮データ入力用のストリーム生成
        ByteArrayInputStream bais = new ByteArrayInputStream(indata);
        // 伸長データ出力用のストリーム生成
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 圧縮データ入力・伸長データ出力
        try {
            GZIPInputStream zis = new GZIPInputStream(bais);

            while ((rlen = zis.read(buff, 0, buff.length)) >= 0) {
              baos.write(buff, 0, rlen);
            }
            zis.close();
            bais.close();
            baos.close();
        } catch (IOException ex) {
            System.out.println("gunzip(BLOB): IOException: " + ex);
        ex.printStackTrace();
        }
        // 返却値の伸長後バイト配列生成
        byte[] outdata = baos.toByteArray();

        return outdata;
    }
}

上記の外部Java関数本体を使用して，Javaストアドファンクションを定義，実行する例を次に示します。

Javaファイルのコンパイル（HP-UXの場合の例です）

javac sample3.java

JARファイルの作成（HP-UXの場合の例です）

jar -cvf sample3.jar sample3.class

HiRDBへのJARファイルの登録（SQLのINSTALL JARを使用した例です）

INSTALL JAR 'sample3.jar' ;

Javaストアドファンクションの定義

CREATE FUNCTION gzip(indata BLOB(1M)) RETURNS BLOB(1M)
  LANGUAGE JAVA
  EXTERNAL NAME 'sample3.jar:sample3.gzip(byte[]) returns byte[]'
  PARAMETER STYLE JAVA
end_proc;
CREATE FUNCTION gunzip(indata BLOB(1M)) RETURNS BLOB(1M)
  LANGUAGE JAVA
  EXTERNAL NAME 'sample3.jar:sample3.gunzip(byte[]) returns byte[]'
  PARAMETER STYLE JAVA
end_proc;

Javaストアドファンクションの実行

INSERT INTO t1 values(10, ?, gzip(? AS BLOB(1M)))
     :
SELECT c1, c2, gunzip(c3), length(c2), length(c3) from t1

(4)　サンプル4

動的結果集合を使用して，2表の検索した結果を返す例です。

外部Java手続き本体（ファイル名：sample4rs.java）

/* ALL RIGHTS RESERVED,COPYRIGHT (C)2000,HITACHI,LTD. */
/* LICENSED MATERIAL OF HITACHI,LTD. */
/************************************************************************/
/* name = HiRDB 06-00 Javaストアド Result Set 導通用ジョブ              */
/************************************************************************/
import java.lang.*;
import java.math.*;
import java.sql.*;
/************************************************************************/
/* name = Result Set 導通用クラス(プロシジャ側)                         */
/************************************************************************/
public class sample4rs {
    /*==================================================================*/
    /* name = デバッグ用メインメソッド                                  */
    /*==================================================================*/
    public static void main(String args[]) throws SQLException {
        java.lang.Integer p1 = new Integer(10);
    int[]   cr_cnt = null;
    java.sql.ResultSet[] rs1 = null;
    java.sql.ResultSet[] rs2 = null;
    try {
        // Driverクラスの登録
        Class.forName("JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver");
    } catch (ClassNotFoundException ex) {
        System.out.println("¥n***** ClassNotFoundException caught *****¥n");
        ex.printStackTrace();
        System.out.println ("");
        System.out.println("*******************************¥n");
        return;
    }

    rs_proc(p1, cr_cnt, rs1, rs2);
    }
    /*==================================================================*/
    /* name = Result Set 導通用メソッド                                 */
    /*==================================================================*/
    public static void rs_proc(java.lang.Integer p1,int icnt_cr[],
                    java.sql.ResultSet[] rs1,
                    java.sql.ResultSet[] rs2) throws SQLException {
        java.lang.Integer x_goods_no;
        java.math.BigDecimal x_quantity_1, x_total_quantity;
        try {
            // コネクトオブジェクト生成(Java手続き内ではCONNECTは発行されない)
            java.sql.Connection con =
                DriverManager.getConnection("jdbc:hitachi:hirdb");

            con.setAutoCommit(false);  // 自動コミットの抑止

            // SELECT(stmt1)前処理
            java.sql.PreparedStatement stmt1 =
                con.prepareStatement("SELECT c1, c2 FROM rs_t1 WHERE c1 > ?");
            // SELECT(stmt1)入力パラメタ設定
            stmt1.setInt(1, p1.intValue());

            // SELECT(stmt2)前処理
            java.sql.PreparedStatement stmt2 =
                con.prepareStatement("SELECT c1, c2 FROM rs_t2 WHERE c1 > 10");
            // SELECT(stmt1)実行
            rs1[0] = stmt1.executeQuery();

            // SELECT(stmt2)実行
            rs2[0] = stmt2.executeQuery();

            // 動的結果集合の数
            icnt_cr[0] = 2;
            // SELECT(stmt2)実行(一行だけ取り出す)
            rs2[0].next();

         } catch (SQLException ex) { // SQLエラー処理
            SQLException fast_ex = ex;
            System.out.println("¥n***** SQLException caught *****¥n");
            while (ex != null) {
                System.out.println ("SQLState: " + ex.getSQLState ());
                System.out.println ("Message:  " + ex.getMessage ());
                System.out.println ("Vendor:   " + ex.getErrorCode ());
                ex.printStackTrace();
                ex = ex.getNextException ();
                System.out.println ("");
            }
            System.out.println("*******************************¥n");
            throw fast_ex;
        }

        return;
    }
}

UAP（sample4ap.java）

/* ALL RIGHTS RESERVED,COPYRIGHT (C)2000,HITACHI,LTD. */
/* LICENSED MATERIAL OF HITACHI,LTD. */
/************************************************************************/
/* name = HiRDB 06-00 Javaストアド Result Set 導通用ジョブ              */
/************************************************************************/
import java.lang.*;
import java.math.*;
import java.sql.*;
/************************************************************************/
/* name = Result Set 導通用クラス(CALL側)                               */
/************************************************************************/
public class sample4ap {
    /*==================================================================*/
    /* name = デバッグ用メインメソッド                                  */
    /*==================================================================*/
    public static void main(String args[]) throws SQLException {
        try {
        // Driverクラスの登録
                Class.forName("JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver");
        } catch (ClassNotFoundException ex) {
            System.out.println("¥n***** ClassNotFoundException caught *****¥n");
            ex.printStackTrace();
            System.out.println ("");
            System.out.println("*******************************¥n");
            return;
        }
        rs_call();
    }
    /*==================================================================*/
    /* name = Result Set 導通用メソッド                                 */
    /*==================================================================*/
    public static void rs_call() throws SQLException {
        java.lang.Integer xc1;
        java.lang.String xc2;
        int cr_cnt[] = new int[1];
        try {
            // コネクトオブジェクト生成(Java手続き内ではCONNECTは発行されない)
            java.sql.Connection con =
               DriverManager.getConnection
                              ("jdbc:hitachi:hirdb", "¥"USER1¥"", "¥"PASS1¥"");
            con.setAutoCommit(false);  // 自動コミットの抑止

            // CALL(stmt1)前処理
            java.sql.CallableStatement stmt1 =
                con.prepareCall("{CALL rs_proc(?,?)}");

            // CALL(stmt1)入力パラメタ設定
            stmt1.setInt(1, 10);
            stmt1.registerOutParameter(2, java.sql.Types.INTEGER);
            // CALL(stmt1)実行
            stmt1.execute();

            // CALL(stmt1)出力パラメタ取得
            cr_cnt[0] = stmt1.getInt(2);

            System.out.println("cr_cnt=" + cr_cnt[0] + "¥n");
            // 動的結果集合の取得
            java.sql.ResultSet rs = stmt1.getResultSet();

            while (rs.next()) {
                // SELECT(stmt1)検索結果取得
                xc1 = (Integer)rs.getObject("c1");
                xc2 = (String)rs.getObject("c2");
                System.out.println("xc1=" + xc1 + ",xc2=" + xc2 + "¥n");
            }
            // カーソルクローズ
            rs.close();

            if (stmt1.getMoreResults()) {
                rs = stmt1.getResultSet();
                while (rs.next()) {
                    // SELECT(stmt1)検索結果取得
                    xc1 = (Integer)rs.getObject("c1");
                    xc2 = (String)rs.getObject("c2");
                    System.out.println("xc1=" + xc1 + ",xc2=" + xc2 + "¥n");
                }
            }
            // カーソルクローズ
            rs.close();

            // 各ステートメントオブジェクト解放
            stmt1.close();

            // コネクション切断
            con.close();
        } catch (SQLException ex) { // SQLエラー処理
            SQLException fast_ex = ex;

            System.out.println("¥n***** SQLException caught *****¥n");
            while (ex != null) {
                System.out.println ("SQLState: " + ex.getSQLState ());
                System.out.println ("Message:  " + ex.getMessage ());
                System.out.println ("Vendor:   " + ex.getErrorCode ());
                ex.printStackTrace();
                ex = ex.getNextException ();
                System.out.println ("");
            }
            System.out.println("*******************************¥n");
            throw fast_ex;
        }

        return;
    }
}

Javaストアドプロシジャの定義

CREATE PROCEDURE rs_proc(IN p1 INT,OUT cr_cnt INT)
  DYNAMIC RESULT SETS 2
  LANGUAGE JAVA
  EXTERNAL NAME 'sample4.jar:sample4rs.rs_proc(java.lang.Integer, int[], java.sql.
ResultSet[], java.sql.ResultSet[]) returns void'
  PARAMETER STYLE JAVA
end_proc;

9.4　Javaプログラム作成時の注意事項

Javaプログラムを作成する場合の注意事項について説明します。なお，Javaで制御処理を記述する場合，次の制限があります。

スレッドは作成できません。

GUIは使用できません。

ほかのDBMSへ接続できません。

ファイルは操作できません。

Java Runtime Environmentのセキュリティポリシーは変更しないでください。

9.4.1　Type2 JDBCドライバ又はType4 JDBCドライバの使用

Type2 JDBCドライバ又はType4 JDBCドライバを使用してJavaストアドプロシジャを動作させる場合は，「Type2 JDBCドライバからの移行」の設定内容を確認してください。ドライバ名称，HiRDBへの接続時のURLで設定するプロトコル名称，サブプロトコル名称，及びサブネームをJavaストアドプロシジャで記述することで，その設定内容によってType2 JDBC ドライバとType4 JDBCドライバのどちらを使用するかが決まります。

9.4.2　実行できないメソッド

Java仮想マシン上では，セキュリティポリシーでのアクセス権の設定によって，実行できるメソッドを制限します。HiRDB内のJava仮想マシンでは，アクセス権が必要なメソッドはすべて実行できません。

セキュリティポリシーでのアクセス権の設定，及び実行できないメソッドの一覧については，JDK付属のドキュメントを参照してください。

セキュリティポリシーでのメソッドの実行制限を次の図に示します。

図9‒9　セキュリティポリシーでのメソッドの実行制限

9.4.3　パッケージ，クラス，及びメソッドの定義

パッケージ，クラス，及びメソッドを定義する場合の注意事項について説明します。

パッケージ，クラス，及びメソッドについては，JDK付属のドキュメントを参照してください。

(1)　パッケージ

パッケージ名は省略できます。

パッケージ名を指定する場合，「パッケージ名.クラス名」の文字列長を255文字以内にしてください。

次のパッケージ名は使用できません。

JREにあるパッケージの名称

HiRDBが提供するパッケージの名称

(2)　クラス

クラス名の文字列長は，255文字以内にしてください。

クラスの定義は，「public class <クラス名>」の形式にしてください。

(3)　メソッド

メソッド名の文字列長は，255文字以内にしてください。

メソッドの定義は次のようにしてください。

Javaストアドプロシジャの場合：

public static void <メソッド名>

Javaストアドファンクションの場合：

public static <返り値の型> <メソッド名>

メソッド内で例外が発生する可能性がある場合，発生する例外をthrow節で宣言するか，又はtry.catchを記述する必要があります。Javaストアドプロシジャの場合，JDBC内のほとんどのメソッドが，「SQLException」例外を発生する可能性があります。

メソッドから参照できるクラスは，JavaプラットフォームコアAPIに含まれるクラス，及び実行中のメソッドがあるJARファイルに含まれるクラスです。

9.4.4　パラメタ入出力モードのマッピング（Javaストアドプロシジャ限定）

Javaストアドプロシジャでの，SQLのパラメタ入出力モード（IN，OUT，又はINOUT）のマッピングについて説明します。なお，Javaストアドファンクションについては，パラメタ入出力モードの指定はありません。

マッピングについては，マニュアル「HiRDB SQLリファレンス」の型マッピングを参照してください。

パラメタ入出力モードのマッピング例を次の図に示します。

図9‒10　パラメタ入出力モードのマッピング例

(1)　INパラメタ

SQLでINパラメタとして定義したパラメタの場合，Javaプログラムでは，対応するデータ型をそのまま使用します。

例えば，CREATE PROCEDUREで，SQLのINTEGER型として定義したINパラメタは，Javaプログラムでは対応するint型又はjava.lang.Integer型で定義します（図「パラメタ入出力モードのマッピング例」のparam1とjparam1）。

(2)　OUTパラメタ又はINOUTパラメタ

SQLでOUTパラメタ又はINOUTパラメタとして定義したパラメタの場合，Javaプログラムでは，対応するデータ型の配列型として定義します。Java言語でのポインタ表現の手法が，「該当するデータ型の要素数1の配列としてパラメタを渡す」であるため，OUT又はINOUTパラメタはこのように実現されます。

例えば，CREATE PROCEDUREで，SQLのSMALLINT型として定義したOUTパラメタは，Javaプログラムでは対応するshort型又はjava.long.Short型の配列型で定義します（図「パラメタ入出力モードのマッピング例」のparam2とjparam2，param3とjparam3）。また，Javaメソッド内で，OUTパラメタ又はINOUTパラメタに値を返却する場合，配列の先頭に値を設定します（図「パラメタ入出力モードのマッピング例」のjparam2，jparam3）。

9.4.5　結果集合返却機能（Javaストアドプロシジャ限定）

Javaストアドプロシジャ定義時に，CREATE PROCEDUREのDYNAMIC RESULT SETS句に1以上の値を指定した場合，結果集合返却機能を使用できます。なお，Javaストアドファンクションについては，結果集合返却機能は使用できません。

(1)　結果集合返却機能とは

Javaストアドプロシジャ内での，SELECT文の実行によって得られるカーソルを，Javaストアドプロシジャの呼び出し元で参照する機能を，結果集合返却機能といいます。

結果集合返却機能の概要を次の図に示します。

図9‒11　結果集合返却機能の概要（Javaストアドプロシジャの場合）

(2)　結果集合返却機能を使用できる呼び出し元の言語

結果集合返却機能を使用できる呼び出し元の言語を次に示します。

Java

C

C++

COBOL※

OOCOBOL

注※

RDBファイル入出力機能を使用していない場合，使用できます。

(3)　結果集合返却機能の使用例

Javaストアドプロシジャ内で，表emps_1及び表emps_2に対して，rank<10の条件を満たす列rank，name，及びageを取得します。呼び出し元で2個の結果集合を受け取り，これらを操作します。

≪Javaストアドプロシジャの定義≫

CREATE PROCEDURE proc2(IN param1 INTEGER)   .........................1
  DYNAMIC RESULT SETS 2   ...........................................2
  LANGUAGE JAVA   ...................................................3
  EXTERNAL NAME   ...................................................4
    'mypack.jar:JStrSmp1.getEmp2(int, ResultSet[], ResultSet[])'   ..4
  PARAMETER STYLE JAVA;   ...........................................5

[説明]

プロシジャ名，パラメタの定義

返却する検索結果情報数の指定

LANGUAGEの設定

Javaメソッドとの関連づけ

PARAMETER STYLEの設定

≪Javaストアドプロシジャの手続き本体≫

import java.sql.*;   ................................................1

public class JStrSmp1{   ............................................2
  public static void getEmp2   ......................................3
    (int jparam1, ResultSet[] rs1_out, ResultSet[] rs2_out)   .......4
          throws SQLException {   ...................................4
    Connection con = DriverManager.getConnection (   ................5
                     "jdbc:hitachi:hirdb");         .................5
    con.setAutoCommit(false);    ....................................6

    PreparedStatement pstmt1 = con.prepareStatement   ...............7
        ("select rank,name,age from emps_1 where rank < ?   .........7
         order by rank");   .........................................7
    pstmt1.setInt(1, jparam1);   ....................................7
    ResultSet rs1 = pstmt1.executeQuery();   ........................8
    rs1_out[0] = rs1;   .............................................9
    PreparedStatement pstmt2 = con.prepareStatement   ...............10
        ("select rank,name,age from emps_2 where rank < ?   .........10
         order by rank");   .........................................10
    pstmt2.setInt(1, jparam1);   ....................................10
    ResultSet rs2 = pstmt2.executeQuery();   ........................11
    rs2_out[0] = rs2;   .............................................12
    return;   .......................................................13
  }
}

[説明]

java.sqlパッケージのインポート

クラス名の定義

メソッド名の定義

パラメタ名の定義（第2，第3引数が結果集合返却用）

Connectionオブジェクトの取得

自動コミットの抑止

SELECT文の前処理

SELECT文の実行

ResultSet[]型の第2引数に，取得した結果集合rs1を設定

SELECT文の前処理

SELECT文の実行

ResultSet[]型の第3引数に，取得した結果集合rs1を設定

呼び出し終了，及び結果集合返却

≪Javaストアドプロシジャの実行（呼び出し元）≫

import java.sql.*;   ....................................................1

public class Caller{   ..................................................2
  public static void main(String[] args) throws SQLException {   ........3
    Connection con = DriverManager.getConnection(   .....................4
                     "jdbc:hitachi:hirdb”,”USER1”,”PASS1");   ...........4
    CallableStatement cstmt = con.prepareCall("{call proc2(?)}");   .....5
    cstmt.setInt(1, 10);   ..............................................5
    ResultSet rs;   .....................................................6
    int emp_rank;   .....................................................6
    String emp_name;   ..................................................6
    int emp_age;   ......................................................6

    if(cstmt.execute()){   ..............................................7
       rs = cstmt.getResultSet();   .....................................8
       System.out.println("*** emps_1 ***");   ..........................9
       while(rs.next()){   ..............................................9
         emp_rank = rs.getInt(1);   .....................................9
         emp_name = rs.getString(2);   ..................................9
         emp_age = rs.getInt(3);   ......................................9
         System.out.println("RANK =" + emp_rank +   .....................9
           "  NAME = " + emp_name + "  AGE = " + emp_age);   ............9
         }
    }
    if(cstmt.getMoreResults()){   .......................................10
       rs= cstmt.getResultSet();   ......................................11
       System.out.println("*** emps_2 ***");   ..........................12
       while(rs.next()){   ..............................................12
         emp_rank = rs.getInt(1);   .....................................12
         emp_name = rs.getString(2);   ..................................12
         emp_age = rs.getInt(3);   ......................................12

         System.out.println("RANK =" + emp_rank +   .....................12
           "  NAME = " + emp_name + "  AGE = " + emp_age);   ............12
       }
       rs.close();   ....................................................13
    }
  }
}

[説明]

java.sqlパッケージのインポート

クラス名の定義

メソッド名の定義

Connectionオブジェクトの取得

CALL文の前処理

変数の宣言

CALL文の実行

結果集合の取得

1個目の結果集合からの情報を出力

次の結果集合があるかどうかの確認

次の結果集合を取得

2個目の結果集合からの情報を出力

結果集合のクローズ

(4)　結果集合返却機能を使用する場合の注意事項

(a)　CREATE PROCEDUREでのJavaストアドプロシジャ定義時

DYNAMIC RESULT SETS句に，Javaストアドプロシジャ内から返却する結果集合数の最大値を指定します。ここに0を指定した場合，結果集合返却機能は使用できません。

Javaストアドプロシジャのパラメタに設定するResultSet[]型のOUTパラメタは，CREATE PROCEDUREのパラメタには設定しないでください。

EXTERNAL NAMEでJavaプログラムとの対応付けをする場合，ResultSet[]型の引数を含めてください。

(b)　呼び出し元のメソッド作成時

CALL文のパラメタには，Javaストアドプロシジャ用メソッドのResultSet[]型のパラメタを含めないでください。

返却される結果集合が2個以上の場合，2個目以降の結果集合を受け取るときは，getMoreResult（次の検索結果があるかどうかの確認），及びgetResultSet（次の検索結果を受け取る）メソッドを使用してください。

(c)　Javaストアドプロシジャ用のメソッド作成時

検索結果（ResultSet）は，クローズしないでResultSet[]型のOUTパラメタに設定してください。

9.4.6　Javaストアドプロシジャ中のコネクション

Javaストアドプロシジャ中では，アクティブなコネクションは1回だけ生成できます。Javaストアドプロシジャの終了前にガベージコレクターに任せたデータベースとJDBCリソースの解除，又はclose()メソッドで明示的なデータベースとJDBCリソースの解除をした場合，コネクションオブジェクトを使用したデータベースの操作はできません。

9.4.7　結果集合の解放

結果集合のオブジェクトを解放する場合は，close()メソッドで明示的に解放してください。ガベージコレクターでの暗黙的な解放では，Javaストアドプロシジャ終了までリソースが解放されません。

9.5　テスト，デバッグ時の注意事項

外部Javaストアドルーチンは，通常のJavaプログラムをDBMSサーバで動作させるというアーキテクチャであるため，そのテスト，デバッグ方法も通常のJavaアプリケーションのテスト，デバッグと同様に実行できます。

Javaプログラムを作成した後，Javaプログラムがストアドプロシジャ又はストアドファンクションとして正常に動作するかを，テスト，デバッグします。ここでは，テスト，デバッグ時の注意事項について説明します。

9.5.1　Javaストアドプロシジャ用のJavaプログラムの場合

Javaストアドプロシジャ用のJavaプログラムのテスト，デバッグをする場合，次の点を考慮してください。

Javaストアドプロシジャ用のJavaプログラムは，サーバ実行時にデバッグ時のものを修正しなくても使用できます。

呼び出し元のJavaプログラムは，デバッグ時にはJavaストアドプロシジャ用のJavaプログラムのメソッドを直接コールします。サーバ実行時には，CALL文として呼び出します。

デバッグ時とサーバ実行時とでは，Java仮想マシンの環境が同じでないため，使用できるメソッドが異なる場合もあります。実行できないメソッドについては，「実行できないメソッド」を参照してください。

Javaストアドプロシジャ用のJavaプログラムのテスト，デバッグ手順を次の図に示します。

図9‒12　Javaストアドプロシジャ用のJavaプログラムのテスト，デバッグ手順

9.5.2　Javaストアドファンクション用のJavaプログラムの場合

Javaストアドファンクション用のJavaプログラムのテスト，デバッグをする場合，次の点を考慮してください。

Javaストアドファンクション用のJavaプログラムは，サーバ実行時にデバッグ時のものを修正しなくても使用できます。

呼び出し元のJavaプログラムは，デバッグ時にはJavaストアドファンクション用のJavaプログラムのメソッドを直接コールします。サーバ実行時には，関数呼出しとして呼び出します。

デバッグ時とサーバ実行時とでは，Java仮想マシンの環境が同じでないため，使用できるメソッドが異なる場合もあります。実行できないメソッドについては，「実行できないメソッド」を参照してください。

Javaストアドファンクション用のJavaプログラムのテスト，デバッグ手順を次の図に示します。

図9‒13　Javaストアドファンクション用のJavaプログラムのテスト，デバッグ手順

9.6　JARファイル作成時の注意事項

JARファイルを作成するときの注意事項について説明します。

Javaには，プログラムを機能ごとに分割管理するための，「パッケージ」という概念があります。実際には，パッケージはディレクトリ構造として表現されるため，コンパイル後はパッケージ名のディレクトリ下にClassファイルが作成されます。

Classファイルが作成される場所を次の図に示します。

図9‒14　Classファイルが作成される場所

Javaファイルを作成する場合，ディレクトリ構造を含めたファイルの統合，圧縮ができます。

JARファイルには，ClassファイルだけでなくJavaファイルも同時に統合できます。HiRDBに登録したJARファイル内から，GET_JAVA_STORED_ROUTINE_SOURCE指定の検索で特定のClassのJavaプログラムソースを取得する場合には，Javaファイルも同時に統合する必要があります。GET_JAVA_STORED_ROUTINE_SOURCE指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

9.6.1　Classファイルを統合する場合

Javaプログラム作成時にパッケージ指定をした場合，JARファイルへの統合はパッケージディレクトリごとにします。なお，このときClassファイルだけ単体で指定しないでください。

ClassファイルをJARファイルへ統合する例を次の図に示します。

図9‒15　ClassファイルをJARファイルへ統合する例

同一のClassファイル名の場合でも，パッケージが異なっていれば，同一のJARファイルへ統合できます。

9.6.2　Javaファイルを統合する場合

Javaファイルを統合する場合の注意事項を次に示します。

Classファイルに対応するJavaプログラムのソースを検索する場合，JavaファイルもClassファイルと同時に統合する必要があります。

JARファイルに統合するJavaファイルは，任意のディレクトリに格納しておきます。

同一のClassファイル名が複数のパッケージにある場合，Javaファイルを異なるディレクトリに格納することで，それぞれのJavaプログラムのソースを検索できるようになります。例を次に示します。

（例）

Classファイルが次のようなパッケージで構成されている場合，pack1.aaa.JStrAAAとpack2.ccc.JStrAAAは，生成されるClassファイル名が同じになります。

./pack1/aaa/JstrAAA.class

./pack1/bbb/JstrBBB.class

./pack2/ccc/JstrAAA.class

Javaファイルは，ディレクトリ構造下で管理する必要はありませんが，同一名のファイルがある場合は同一ディレクトリ下には格納できません。このような場合，次のように格納すれば，同一名のファイルでも格納できます。

./src1/JStrAAA.java

./src1/JStrBBB.java

./src2/JStrAAA.java

なお，この場合，指定したClassファイルに対応するJavaファイルが特定できないため，同一名称のすべてのJavaファイルが検索結果として取得されます。

例えば，JStrAAA.javaを検索した場合，pack1.aaa.JStrAAA.java，及びpack2.ccc.JStrAAA.javaの両方の情報が取得されます。JStrBBB.javaを検索した場合は，pack1.bbb.JStrBBB.javaの情報が取得されます。

10　Cストアドプロシジャ，Cストアドファンクション

この章では，処理手続きをC言語で記述するCストアドプロシジャ，Cストアドファンクションの作成方法，実行方法について説明します。

10.1　概要

処理手続きをC言語で記述したストアドプロシジャ，ストアドファンクションを，Cストアドプロシジャ，Cストアドファンクションといいます。

この章では，以降Cストアドプロシジャ，Cストアドファンクションを総称して，外部Cストアドルーチンと呼びます。

外部Cストアドルーチンの特長

サーバ，クライアント間の通信オーバヘッドがありません

外部Cストアドルーチンは，SQLストアドプロシジャ，SQLストアドファンクションと同様に，サーバ側で処理をします。したがって，サーバ，クライアント間での通信によるオーバヘッドはありません。

手続き本体，関数本体をC言語で記述できます

C言語の命令を直接記述できるため，SQL制御文よりも柔軟に処理を記述できます。

デバッグが簡単です

SQLストアドプロシジャ，SQLストアドファンクションのデバッグをする場合，実際にサーバ側で動作させる必要があります。これに対して，外部Cストアドルーチンのデバッグは，クライアント側にC言語のデバッガを用意することで，デバッグができます。

10.2　外部Cストアドルーチンの作成から実行までの各作業

外部Cストアドルーチンの作成から実行までの手順を次に示します。

外部Cストアドルーチンの作成

Cライブラリファイルの新規登録

外部Cストアドルーチンの定義

外部Cストアドルーチンの実行

外部Cストアドルーチンの作成から実行までの流れを次の図に示します。

図10‒1　外部Cストアドルーチンの作成から実行までの流れ

注

Cライブラリファイルの拡張子はOSによって異なります。

[説明]

Cストアドルーチンを作成します。詳細については，「外部Cストアドルーチンの作成」を参照してください。

HiRDBにCライブラリファイルを新規登録します。詳細については，「Cライブラリファイルの新規登録」を参照してください。

外部Cストアドルーチンを定義します。詳細については，「外部Cストアドルーチンの定義」を参照してください。

外部Cストアドルーチンを実行します。詳細については，「外部Cストアドルーチンの実行」を参照してください。

10.2.1　外部Cストアドルーチンの作成

外部Cストアドルーチンを作成する手順を次に示します。

Cプログラムの記述（Cファイルの作成）

コンパイル（オブジェクトファイルの作成）

リンケージ（Cライブラリファイルの作成）

(1)　Cプログラムの記述（Cファイルの作成）

外部Cストアドルーチンとして登録するCプログラムを記述します。

(a)　Cプログラムを作成するときの規則

Cプログラムを作成するときの規則を次に示します。なお，「Cプログラム作成時の制限事項」も併せて参照してください。

C言語の既定の呼出し規約（__cdecl）を指定してください。

正常終了する場合は，SQLSTATEを表す出力パラメタに，00000を設定してください。

（例）memcpy(sqlstate, "00000", 5);

異常終了する場合は，SQLSTATEを表す出力パラメタに，38XYYを設定してください。XとYは次の範囲で設定してください。

X：I〜Z

Y：0〜9又はA〜Z

（例1）memcpy(sqlstate, "38I01", 5);

（例2）memcpy(sqlstate, "38ZCB", 5);

異常終了する場合は，エラーの原因を意味するメッセージテキストを設定してください。

Cプログラムの記述例を次の図に示します。

図10‒2　Cプログラムの記述例

(b)　パラメタ入出力モードのマッピング

外部Cストアドルーチンでの，SQLのパラメタ入出力モード（IN，OUT，又はINOUT）のマッピング例を次の図に示します。マッピングについては，マニュアル「HiRDB SQLリファレンス」の型マッピングを参照してください。

図10‒3　パラメタ入出力モードのマッピング例（外部Cストアドルーチン）

(2)　コンパイル（オブジェクトファイルの作成）

ccコマンドなどを使用して，Cファイルからオブジェクトファイルを作成します。

コンパイルの例を次の図に示します。コンパイルオプションについては，OSのマニュアルを参照してください。

図10‒4　コンパイルの例（外部Cストアドルーチン）

注

コンパイルオプションについては，各OSのマニュアルを参照してください。

(3)　リンケージ（Cライブラリファイルの作成）

ldコマンドなどを使用して，複数のオブジェクトファイルからCライブラリファイルを作成します。ライブラリ関数を使用する場合は，-lオプションなどを使用して必要なライブラリをリンクしてください。

リンケージ例を次の図に示します。

図10‒5　リンケージの例

注1

Cライブラリファイルの拡張子はOSによって異なります。

注2

リンカオプションについては，各OSのマニュアルを参照してください。

(4)　各OSでのCライブラリファイルの作成例

Cファイル（sample.c）からCライブラリファイルを作成する例を，OSごとに説明します。Cライブラリファイルの作成方法はOSによって異なるため，詳細については，各OSのマニュアルを参照してください。

なお，例ではコンパイラ及びリンカにパスが通っていることを前提とします。

(a)　HP-UXの場合

sample.cからsample.slという名称のCライブラリファイルを作成する例を次に示します。

ccコマンドに+zオプションを指定して，オブジェクトファイルを作成します。

$ cc -c +z sample.c

ldコマンドに-bオプションを指定して，Cライブラリファイルを作成します。

$ ld -b -o sample.sl sample.o

64ビットモードの場合：

64ビットモードのHiRDBで使用するCライブラリファイルは，64ビットモードでコンパイルしてください。コンパイルオプションに+DD64を指定します。

POSIXライブラリ版の場合：

64ビットモードのHiRDBで使用するCライブラリファイルは，マルチスレッドに対応する必要があるため，次に示す条件を満たしてください。

コンパイル時に次のオプションを指定します。

-D_REENTRANT -D_POSIX_C_SOURCE=199506L -D_THREAD_SAFE -D_HPUX

スレッドセーフな関数を使用します。

(b)　Linuxの場合

gccコマンドに-sharedオプションを指定して，Cライブラリファイルを作成します。sample.cからsample.soという名称のCライブラリファイルを作成する例を次に示します。

$ gcc -shared -fPIC -o sample.so sample.c

(c)　AIXの場合

sample.cからsample.soという名称のCライブラリファイルを作成する例を次に示します。

xlcコマンドでオブジェクトファイルを作成します。

$ xlc -c -o sample.o sample.c

xlcコマンドに-Gオプションを指定して，Cライブラリファイルを作成します。

$ xlc -G -bexpall -o sample.so sample.o

64ビットモードの場合：

64ビットモードのHiRDBで使用するCライブラリファイルは，64ビットモードでコンパイル及びリンケージしてください。コンパイルオプションに-q64 を指定して，リンカオプションに-b64を指定します。

POSIXライブラリ版の場合：

64ビットモードのHiRDBで使用するCライブラリファイルは，マルチスレッドに対応する必要があるため，次に示す条件を満たしてください。

コンパイル時にxlc_rコマンドを使用してCファイルをコンパイルします。

スレッドセーフな関数を使用します。

(d)　Windowsの場合

sample.cからsample.dllという名称のCライブラリファイル（DLLファイル）を作成する例を次に示します。

clコマンドでオブジェクトファイルを作成します。

cl /MD /c sample.c

linkコマンドでCライブラリファイル（DLLファイル）を作成します。また，モジュール定義ファイル（sample.def）を作成して，エクスポートする関数を指定します。

link /dll /def:sample.def sample.obj

注

作成するDLLのベースアドレス（デフォルト・ロード・アドレス）は指定しないでください。指定した場合，HiRDBやシステムのDLLとアドレスが競合して，DLLのローディング処理に負荷が掛かることがあります。

使用するMicrosoft Visual C++ランタイムライブラリは，マルチスレッドDLL版（/MD）でなければなりません。それ以外のライブラリを使用すると，領域管理の処理が不正となり，サーバプロセスが異常終了するおそれがあります。

10.2.2　Cライブラリファイルの新規登録

作成したCライブラリファイルを，HiRDBサーバに新規登録（コピー）します。Cライブラリファイルの新規登録は，UAP開発者又はHiRDB管理者が実施します。

UAP開発者が新規登録する場合

SQLのINSTALL CLIBをUAPに記述して実行します。

HiRDB管理者が新規登録する場合

pdclibsyncコマンド（-Iオプション指定）を実行します。pdclibsyncコマンドはHiRDB管理者だけが実行できます。

なお，Cライブラリファイルはpd_c_library_directoryオペランドに指定したディレクトリに格納されます。

Cライブラリファイルの登録の概要を次の図に示します。

図10‒6　Cライブラリファイルの登録の概要

参考

Cライブラリファイルを再登録する場合は，SQLのREPLACE CLIBを実行します。Cライブラリファイルを削除する場合は，SQLのREMOVE CLIBを実行します。また，HiRDB管理者がCライブラリファイルを再登録又は削除する場合は，pdclibsyncコマンドを実行します。

なお，Cライブラリファイルの再登録及び削除は，Cライブラリファイルを新規登録したユーザ，又はHiRDB管理者だけが実行できます。

10.2.3　外部Cストアドルーチンの定義

外部Cストアドルーチンを定義する場合は，CREATE PROCEDURE又はCREATE FUNCTIONを使用します。CREATE PROCEDURE又はCREATE FUNCTIONで，C関数と手続き名，又はC関数と関数名との関連づけをします。

Cストアドプロシジャの場合

CREATE PROCEDUREを使用して，C言語で記述したC関数をCストアドプロシジャとして登録します。

Cストアドファンクションの場合

CREATE FUNCTIONを使用して，C言語で記述したC関数をCストアドファンクションとして登録します。

外部Cストアドルーチンの定義例を次の図に示します。

図10‒7　外部Cストアドルーチンの定義例

パブリックルーチンの定義

他ユーザが定義した外部Cストアドルーチンを使用する場合は，UAP中からストアドルーチンを呼び出すときに，所有者の認可識別子とルーチン識別子を指定する必要があります。

しかし，CREATE PUBLIC PROCEDURE又はCREATE PUBLIC FUNCTIONを実行してパブリックルーチンとして定義すると，他ユーザが定義した外部Cストアドルーチンを使用する場合でも，UAP中からストアドルーチンを呼び出すときに，所有者の認可識別子を指定する必要がなくなります（ルーチン識別子だけ指定します）。

外部Cストアドルーチンの再定義

Cプログラムの修正などによって，一度定義した外部Cストアドルーチンを再度定義する場合は，ALTER PROCEDURE又はALTER ROUTINEを使用します。

外部Cストアドルーチンの削除

外部Cストアドルーチンを削除する場合は，DROP PROCEDURE又はDROP FUNCTIONを使用します。

また，パブリックルーチンを削除する場合は，DROP PUBLIC PROCEDURE又はDROP PUBLIC FUNCTIONを使用します。なお，パブリックルーチンを削除できるのは，パブリックルーチンを定義したユーザ，又はDBA権限を持っているユーザだけです。

10.2.4　外部Cストアドルーチンの実行

外部Cストアドルーチンを実行する場合は，CALL文又は関数呼出しを使用します。CALL文又は関数呼出しを指定したSQLを実行することで，C関数が外部Cストアドルーチンとして呼び出され，サーバマシン上で実行されます。

Cストアドプロシジャの場合

CALL文を使用して，C関数をCストアドプロシジャとして実行します。

Cストアドファンクションの場合

関数呼出しを指定したSQLを使用して，C関数をCストアドファンクションとして実行します。

CALL文及び関数呼出しについては，マニュアル「HiRDB SQLリファレンス」を参照してください。

外部Cストアドルーチンの実行例を次の図に示します。

図10‒8　外部Cストアドルーチンの実行例

10.3　外部Cストアドルーチンのプログラム例

実数から小数部を取得する外部C関数の例を次に示します。

C関数本体（ファイル名：sample1.c）

/* ALL RIGHTS RESERVED,COPYRIGHT (C)2007,HITACHI,LTD. */
/* LICENSED MATERIAL OF HITACHI,LTD. */
/************************************************************************/
/* name = HiRDB 08-03 Ｃストアドファンクション サンプルプログラム １    */
/************************************************************************/
#include <math.h>
#include <stdio.h>

/*---------------------------------------------------------------------*/
/* VARCHAR形式のデータを受け取るための構造体を定義する                 */
/*---------------------------------------------------------------------*/
typedef struct varchar{
  short len;
  char str[80];
}VCH;

/************************************************************************/
/* name = サンプル１                                              */
/************************************************************************/
 void func_modf(double *value, double *ret,
                short *ind1, short *ind_ret,
                char *sqlstate, VCH *routine_name,
                VCH *specific_name, VCH *message_text )
{
    double int_value;

    /* modf関数を呼出して得られた小数部を戻り値に設定 */
    *ret = modf(*value, &int_value);

    /* 戻り値の標識部を設定(非ナル) */
    *ind_ret = 0;

    /* SQLSTATEを設定（正常終了） */
    memcpy(sqlstate, “00000”, 5);

    /* メッセージテキストに空文字列を設定 */
    message_text->len = sprintf(message_text->str, “”);
}

上記のC関数本体を使用して，Cストアドファンクションを定義，実行する例を次に示します。

Cファイルのコンパイル

HP-UX（32ビットモード）の場合の例です。そのほかのOSの例については，「各OSでのCライブラリファイルの作成例」を参照してください。

cc +z -c sample1.c

Cライブラリファイルの作成

HP-UX（32ビットモード）の場合の例です。そのほかのOSの例については，「各OSでのCライブラリファイルの作成例」を参照してください。

ld -b -o sample1.sl sample1.o

Cライブラリファイルの新規登録（SQLのINSTALL CLIBを使用した例です）

INSTALL CLIB 'sample1.sl' ;

Cストアドファンクションの定義

CREATE function func_modf( parm1 FLOAT ) RETURNS FLOAT
  LANGUAGE C
  EXTERNAL NAME 'sample1.sl!func_modf'
  PARAMETER STYLE RDSQL;

Cストアドファンクションの実行

select func_modf(double_value) from t1

10.4　Cプログラム作成時の制限事項

C言語で制御処理を記述する場合，次の制限があります。

次の関数は使用しないでください。使用した場合，HiRDBの動作に深刻な影響を与えるおそれがあります。

fork()，exit()，abort()，exec()などのプロセス操作関数

sleep()，select()，wait()

スタック操作関数（setjmp()，longjmp()など）

共用メモリ操作関数

セマフォ操作関数

ソケット操作関数

システム資源操作関数(setrlimitなど)

mmap()，munmap()

gethostent()，sethostent()，endhostent()，gethostbyname()，gethostbyaddr()，herror()

tempnam()，tmpnam()

pstat()

system()

スレッドを作成しないでください。

GUIは使用しないでください。

SQLは記述できません。

ファイルは操作しないでください。

PIPEなどのスペシャルファイルは使用しないでください。

標準入力，標準出力，標準エラー出力は使用しないでください。

関数を再起呼び出ししないでください。

グローバル変数及び関数名には，次の名称を使用できません。

大文字の「SQL」，大文字の「Y」，及び大文字の「Z」で始まる名称

小文字の「p_」，小文字の「pd」，小文字の「yy」及び小文字の「z」で始まる名称

小文字の「_p」で始まる名称

小文字の「da」，小文字の「dbr」及び小文字の「dp」で始める名称

環境変数の設定及び変更はしないでください。

シグナル操作はしないでください。

システムの日付や時刻は変更しないでください。

メモリを確保した場合は，ルーチンが終了するときに必ず解放してください。

使用するスタックサイズの最大値は4,096バイト以下にしてください。

11　UAPの障害対策

この章では，UAP実行時の履歴やエラー情報を取得するトラブルシュート，及びUAPの障害の種別と回復方法について説明します。

11.1　トラブルシュート

UAPに障害が発生した場合に，トラブルシュート機能を利用して障害要因を調査できます。トラブルシュート機能には，次のものがあります。

SQLトレース機能

クライアントエラーログ機能

拡張SQLエラー情報出力機能

UAP統計レポート機能

コマンドトレース機能

SQLトレース動的取得機能

再接続トレース機能

HiRDB SQL Tuning Advisor用アクセスパス情報ファイル

11.1.1　SQLトレース機能

実行したUAPのSQLトレース情報をSQLトレースファイルに取得します。

UAP実行時にSQLエラーが発生した場合，SQLトレース情報を参照すると，エラーの原因となるSQL文を特定できます。

SQLトレースファイルは，取得した情報で満杯になると，最も古い情報から順次新しい情報に書き替えられます。

(1)　SQLトレース情報の取得方法

SQLトレース情報に関するクライアント環境定義を次の表に示します。各クライアント環境定義については，「クライアント環境定義（環境変数の設定）」を参照してください。

表11‒1　SQLトレース情報に関するクライアント環境定義

種別

クライアント環境定義

説明

SQLトレース取得有無

PDSQLTRACE

SQLトレースファイルのサイズを指定する。省略した場合はSQLトレースを取得しない。

ファイル出力先

PDCLTPATH

SQLトレースファイルの格納先ディレクトリを指定する。

出力ファイル名

PDXATRCFILEMODE

X/Openに従ったAPIを使用した接続形態での，トレースファイル名の形式を指定する。

ファイルオープン契機

PDSQLTRCOPENMODE

SQLトレースファイルのオープンモードを指定する。

出力形式

PDSQLTRCFMT

SQLトレースの出力形式を指定する。

PDPRMTRC

SQLトレースにパラメタ情報及び検索データを出力するかどうかを指定する。

PDPRMTRCSIZE

SQLトレースに出力するパラメタ情報及び検索データの最大データ長を指定する。

PDSQLTEXTSIZE

SQLトレースに出力するSQL文のサイズを指定する。

PDSQLEXECTIME

SQLトレースにSQL実行時間を出力するかどうかを指定する。

SQLトレースの出力先及びファイル名称は，トレース取得機能及びクライアント環境定義の指定値によって異なります。SQLトレースの出力先及びファイル名称を次の表に示します。

注意事項

表11-2，表11-3，及び表11-4で，SQLトレースの出力ファイル名称がpdsql1.trc，pdsql2.trcやpd2sql1.trc，pd2sql2.trcとなるクライアント環境定義を指定している場合，複数の接続からSQLを実行すると各接続のSQLトレース情報が混在します。また，複数の接続が同時にSQLを実行すると，SQLトレース情報が正しく出力されないことがあります。この場合，表11-2，表11-3，及び表11-4でSQLトレースの出力ファイル名称がコネクト要求時間やコネクト通番を含む名称となるようクライアント環境定義を指定してください。

表11‒2　SQLトレース取得機能及びクライアント環境定義の指定値による出力ファイル名称（1/3）

項番

取得機能

出力先（数字は出力先の優先順位を示す）

クライアント環境定義PDXATRCFILEMODE

クライアント環境定義PDSQLTRCOPENMODE

クライアント環境定義PDSQLTRCFMT

クライアントライブラリ（通常ライブラリ※1）出力ファイル名称

1

クライアント環境定義PDSQLTRACE指定による取得

クライアント環境定義PDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

SEPARATE又は指定なし

SQL又は指定なし

1

pdsql1.trc

pdsql2.trc

2

2又は指定なし

pd2sql1.trc

pd2sql2.trc

3

CNCT

1

PDSQLTRCOPENMODE指定値に依存しないため，項番1，2と同様。

4

2又は指定なし

サーバと接続できた場合：

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2sql1.trc

pd2sql2.trc

5

LUMP

−

1

PDXATRCFILEMODE指定値に依存しないため，項番1〜4と同様。

6

2又は指定なし

7

クライアント環境定義PDUAPREPLVL指定によるUAP統計レポートの取得※2

PDREPPATHで指定したディレクトリ

クライアント環境定義PDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

−

−

1

pdHHMMSSfff_YYYYYYYYYY_1.trc

pdHHMMSSfff_YYYYYYYYYY_2.trc

8

2又は指定なし

サーバと接続できた場合：

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2sql1.trc

pd2sql2.trc

9

pdtrcmgrコマンド※3による取得

クライアント環境定義PDTRCPATHで指定したディレクトリ

−

−

1

pdHHMMSSfff_YYYYYYYYYY_1.trc

pdHHMMSSfff_YYYYYYYYYY_2.trc

10

2又は指定なし

サーバと接続できた場合：

pd2csqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2csqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2csql1.trc

pd2csql2.trc

11

pdclttrcコマンド※4による取得

-lオプション指定なし：

クライアント環境定義PDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

-lオプション指定あり：

クライアント環境定義PDREPPATHで指定したディレクトリ

PDREPPATH指定なしの場合はPDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

−

−

1

pdXXXXXXXXyyyyyyyyyy_1.trc

pdXXXXXXXXyyyyyyyyyy_2.trc

12

2又は指定なし

pd2XXXXXXXXyyyyyyyyyy_1.trc

pd2XXXXXXXXyyyyyyyyyy_2.trc

（凡例）

−：指定値に依存しない。

HHMMSSfff：コネクト要求時間（HH：時，MM：分，SS：秒，fff：ミリ秒）

XXXXXXXX：接続サーバ名

YYYYYYYYYY：コネクト通番

yyyyyyyyyy：サーバプロセスID

注※1　ライブラリ種別の詳細は，「ライブラリ種別」を参照してください。

注※2　UAP統計レポートの詳細は，「UAP統計レポート機能」を参照してください。

注※3　pdtrcmgrコマンドの詳細は，「SQLトレース動的取得機能」を参照してください。

注※4　pdclttrcコマンドの詳細は，マニュアル「HiRDB コマンドリファレンス」の「pdclttrc（SQLトレースの動的取得）」を参照してください。

表11‒3　SQLトレース取得機能及びクライアント環境定義の指定値による出力ファイル名称（2/3）

項番

取得機能

出力先（数字は出力先の優先順位を示す）

クライアント環境定義PDXATRCFILEMODE

クライアント環境定義PDSQLTRCOPENMODE

クライアント環境定義PDSQLTRCFMT

クライアントライブラリ（XAライブラリ※1）出力ファイル名称

1

クライアント環境定義PDSQLTRACE指定による取得

クライアント環境定義PDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

SEPARATE又は指定なし

SQL又は指定なし

1

TX_関数使用なしの場合：

pdsql1.trc

pdsql2.trc

TX_関数使用ありの場合：

pdsqlxxxxx-1.trc

pdsqlxxxxx-2.trc

2

2又は指定なし

サーバと接続できた場合：

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2sql1.trc

pd2sql2.trc

3

CNCT

1

PDSQLTRCOPENMODE指定値に依存しないため，項番1と同様。

4

2又は指定なし

サーバと接続できた場合：

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2sql1.trc

pd2sql2.trc

5

LUMP

−

1

pdsql1.trc

pdsql2.trc

6

2又は指定なし

pd2sql1.trc

pd2sql2.trc

7

クライアント環境定義PDUAPREPLVL指定によるUAP統計レポートの取得※2

PDREPPATHで指定したディレクトリ

クライアント環境定義PDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

−

−

1

pdHHMMSSfff_YYYYYYYYYY_1.trc

pdHHMMSSfff_YYYYYYYYYY_2.trc

8

2又は指定なし

サーバと接続できた場合：

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2sqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2sql1.trc

pd2sql2.trc

9

pdtrcmgrコマンド※3による取得

クライアント環境定義PDTRCPATHで指定したディレクトリ

−

−

1

pdHHMMSSfff_YYYYYYYYYY_1.trc

pdHHMMSSfff_YYYYYYYYYY_2.trc

10

2又は指定なし

サーバと接続できた場合：

pd2csqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2csqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2csql1.trc

pd2csql2.trc

11

pdclttrcコマンド※4による取得

-lオプション指定なし：

クライアント環境定義PDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

-lオプション指定あり：

クライアント環境定義PDREPPATHで指定したディレクトリ

PDREPPATH指定なしの場合はPDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

−

−

1

pdXXXXXXXXyyyyyyyyyy_1.trc

pdXXXXXXXXyyyyyyyyyy_2.trc

12

2又は指定なし

pd2XXXXXXXXyyyyyyyyyy_1.trc

pd2XXXXXXXXyyyyyyyyyy_2.trc

（凡例）

−：指定値に依存しない。

HHMMSSfff：コネクト要求時間（HH：時，MM：分，SS：秒，fff：ミリ秒）

XXXXXXXX：接続サーバ名

YYYYYYYYYY：コネクト通番

xxxxx：クライアントプロセスID

yyyyyyyyyy：サーバプロセスID

注※1　ライブラリ種別の詳細は，「ライブラリ種別」を参照してください。

注※2　UAP統計レポートの詳細は，「UAP統計レポート機能」を参照してください。

注※3　pdtrcmgrコマンドの詳細は，「SQLトレース動的取得機能」を参照してください。

注※4　pdclttrcコマンドの詳細は，マニュアル「HiRDB コマンドリファレンス」の「pdclttrc（SQLトレースの動的取得）」を参照してください。

表11‒4　SQLトレース取得機能及びクライアント環境定義の指定値による出力ファイル名称（3/3）

項番

取得機能

出力先（数字は出力先の優先順位を示す）

クライアント環境定義PDXATRCFILEMODE

クライアント環境定義PDSQLTRCOPENMODE

クライアント環境定義PDSQLTRCFMT

Type4 JDBCドライバ出力ファイル名称

1

クライアント環境定義PDSQLTRACE指定による取得

クライアント環境定義PDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

SEPARATE又は指定なし

SQL又は指定なし

1

PDSQLTRCOPENMODE指定値に依存しないため，項番3，4と同様。

2

2又は指定なし

3

CNCT

1

サーバと接続できた場合：

pdjsqlXXXXXXXX_ppppp_1.trc

pdjsqlXXXXXXXX_ppppp_2.trc

サーバと接続できなかった場合：

pdjsql1.trc

pdjsql2.trc

4

2又は指定なし

サーバと接続できた場合：

pd2jsqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2jsqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2jsql1.trc

pd2jsql2.trc

5

LUMP

−

1

PDXATRCFILEMODE指定値に依存しないため，項番1〜4と同様。

6

2又は指定なし

7

クライアント環境定義PDUAPREPLVL指定によるUAP統計レポートの取得※1

PDREPPATHで指定したディレクトリ

クライアント環境定義PDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

−

−

1

サーバと接続できた場合：

pdjsqlXXXXXXXX_ppppp_1.trc

pdjsqlXXXXXXXX_ppppp_2.trc

サーバと接続できなかった場合：

pdjsql1.trc

pdjsql2.trc

8

2又は指定なし

サーバと接続できた場合：

pd2jsqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2jsqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2jsql1.trc

pd2jsql2.trc

9

pdtrcmgrコマンド※2による取得

クライアント環境定義PDTRCPATHで指定したディレクトリ

−

−

1

サーバと接続できた場合：

pdjsqlXXXXXXXX_ppppp_1.trc

pdjsqlXXXXXXXX_ppppp_2.trc

サーバと接続できなかった場合：

pdjsql1.trc

pdjsql2.trc

10

2又は指定なし

サーバと接続できた場合：

pd2jcsqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_1.trc

pd2jcsqlHHMMSSfff_XXXXXXXX_YYYYYYYYYY_2.trc

サーバと接続できなかった場合：

pd2jcsql1.trc

pd2jcsql2.trc

11

pdclttrcコマンド※3による取得

-lオプション指定なし：

クライアント環境定義PDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

-lオプション指定あり：

クライアント環境定義PDREPPATHで指定したディレクトリ

PDREPPATH指定なしの場合はPDCLTPATHで指定したディレクトリ

PDCLTPATH指定なしの場合はカレントディレクトリ

−

−

1

pdjsqlXXXXXXXX_ppppp_1.trc

pdjsqlXXXXXXXX_ppppp_2.trc

12

2又は指定なし

pd2jXXXXXXXXyyyyyyyyyy_1.trc

pd2jXXXXXXXXyyyyyyyyyy_2.trc

（凡例）

−：指定値に依存しない。

HHMMSSfff：コネクト要求時間（HH：時，MM：分，SS：秒，fff：ミリ秒）

XXXXXXXX：接続サーバ名

YYYYYYYYYY：コネクト通番

yyyyyyyyyy：サーバプロセスID

ppppp：クライアント受信ポート番号

注※1　UAP統計レポートの詳細は，「UAP統計レポート機能」を参照してください。

注※2　pdtrcmgrコマンドの詳細は，「SQLトレース動的取得機能」を参照してください。

注※3　pdclttrcコマンドの詳細は，マニュアル「HiRDB コマンドリファレンス」の「pdclttrc（SQLトレースの動的取得）」を参照してください。

ライブラリ種別

ライブラリ種別を次に示します。

ライブラリ種別

UNIX環境のライブラリ名※１

Windows環境のライブラリ名

通常ライブラリ

libzclt.sl，ibzclt64.sl，libzclts.sl，libzclts64.sl，libzcltk.sl，libzcltk64.sl，libzcltm.sl，libclt.a，libclt64.a，libclts.a，libclts64.a，libcltk.a，libcltk64.a，libcltm.a，libzclt6k.a，libzclt6k64.a

cltdll.dll，pdcltm32.dll，pdcltp32.dll，pdcltm50.dll，pdcltm71.dll，pdcltm80s.dll，pdcltm90s.dll，pdcltm90.dll，pdcltm100.dll，pdcltm64.dll，pdcltm90s64.dll，pdcltm90x.dll，pdcltm100x.dll，pdcltl32.dll，pdcltm140.dll，pdcltm140x.dll

シングルスレッド版XAライブラリ

libzcltx.sl，libzclty.sl，libzcltx64.sl，libzclty64.sl，libzcltxs.sl，libzcltys.sl，libcltxa.a，libcltya.a，libcltxas.a，libcltyas.a，libzclt6ys.a，libzclt6ys64.a

pdcltx32.dll，pdcltxs.dll，pdcltx64.dll，pdcltxs64.dll

マルチスレッド版XAライブラリ

libzcltxk.sl，libzcltyk.sl，libzcltxk64.sl，libzcltyk64.sl，libcltxak.a，libclttyak.a，libzclt6yk.a

pdcltxm5.dll，pdcltxm64.dll，pdclto32.dll，pdclto64.dll

注※1

共用ライブラリのサフィックスは，プラットフォームによって異なります。Linuxの場合は「.so」，AIXの場合は「.a」となります。

(2)　SQLトレースの解析

HiRDB SQL Tuning AdvisorのSQLトレース解析機能では，次のような解析処理ができるため性能上の問題点を特定するのに便利です。

SQLトレースのSQL開始時間とSQL終了時間を基に実行時間を算出し，表示します。

実行時間順に表示できるため，時間の掛かっているSQLが容易に特定できます。

複数のトランザクションを同時に実行してSQLトレースを取得した場合でも，トランザクションごと，又はSQLごとにトレース情報を表示できます。

SQLトレースを解析する手順を次に示します。

[手順]

［スタート］−［プログラム］−［HiRDB SQL Tuning Advisor］−［HiRDB SQL Tuning Advisor］を選択し，HiRDB SQL Tuning Advisorを起動します。

［オプション］メニューから［対象ファイル指定］を選択します。

［対象ファイルの指定］画面が表示されます。

［SQLトレース］タブでSQLトレースのファイルを指定します。クライアント環境変数PDCLTPATHで指定したディレクトリ下のすべてのSQLトレースを解析する場合は，［PDCLTPATH上のpdsql*.trcファイル］を選択します。それ以外の場合は，［指定ファイル］を選択し，SQLトレースファイル名を入力します。設定後，［OK］ボタンをクリックします。

［SQLトレース］ボタンから［SQL一覧］をクリックします。

各SQLの情報が時系列順に表示されます。

［合計実行時間］の列をクリックすると，各SQLの情報が実行時間の値順に表示されます。

行をダブルクリックすると，［SQLトレース詳細］画面が表示されます。ここでは，各SQLのオペレーションの情報が表示されます。

(3)　SQLトレース情報の見方

SQLトレース情報は，SQL文の実行終了時に出力されます。

出力されるSQLトレース情報の例とその説明を次に示します。

[クライアント環境定義PDSQLTRCFMTに1を指定した出力例（出力形式1）]

                             [25]                   [19] [22]
  ** UAP TRACE (CLT:VV-RR(Mmm dd yyyy) SVR:VV-RR US) WIN32(WIN32) **

    USER APPLICATION PROGRAM FILE NAME : XXXXXXXX [1]
    USERID : YYYYYYYY [2]
    UAP START TIME : YYYY/MM/DD HH:MM:SS [3]
    UAP ENVIRONMENT : [4]
      LANG(ja_JP.SJIS)
      USER("hirdb")
      HOST(h9000vr5)
      NAMEPORT(20281)
      FESHOST()
      SVCGRP()  SVCPORT()  SRVTYPE()
      SWAIT(600)  CWAIT(0)  SWATCH(0)
      BLKF(1)  RDABLKF(-1)  LCKLMT(0)  ISLLVL(2)  DBLOG(ALL)  DFLNVAL(NOUSE)
      AGGR(1024)  DLKPRIO(64)  EXWARN(NO)  VWOPTMODE(0)
      LOCKSKIP(NO) CLTGRP(A)  DSQLOBJCACHE(YES)  PLGIXMK(NO)
      CLTRCVPORT(5000)  CLTRCVADDR(192.134.35.4)  PLGPFSZ(8192)
      PLGPFSZEXP(8192)  SPACELVL(-1)  STJTRNOUT()
      OPTLVL("SELECT_APSL","RAPID_GROPING")
      ADDITIONALOPTLVL("COST_BASE_2","APPLY_HASH_JOIN")
      UAPREPLVL()  REPPATH()
      TRCPATH()
      IPC(MEMORY)  SENDMEMSIZE(16)  RECVMEMSIZE(32)
      HASHTBLSIZE(128)  CMMTBFDDL(NO)  PRPCRCLS( )
      SQLTRCOPENMODE(SQL)  AUTOCONNECT(ON)  CWAITTIMEWRNPNT(-1)  TCPCONOPT(0)
      WRTLNFILSZ(-1) WRTLNCOMSZ(1024)
      WRTLNPATH( ) UAPENVFILE( )
      TP1SERVICE(NO) AUTORECONNECT(NO) RCCOUNT(0) RCINTERVAL(0)
      KALVL(0) KATIME(0) CLTCNVMODE(NOUSE)
      PRMTRC(YES) PRMTRCSIZE(256) BESCONHOLD() BESCONHTI(-1)
      BLKBUFFSIZE(0) BINARYBLKF(NO) FORUPDATEEXLOCK(NO)
      CNSTRNTNAME() SQLTEXTSIZE(4096) RCTRACE(-1)
      FESGRP()
      NBLOCKWAITTIME(0) CONNECTWAITTIME(300) DBBUFLRU(YES)
      UAPEXERLOGUSE() UAPEXERLOGPRMSZ() HJHASHINGMODE(TYPE1)
      DDLDEAPRP(NO) DELRSVWDFILE() HATRNQUEUING()
      ODBSPLITSIZE(100) NODELAYACK(NO) CURSORLVL(0)
      TAAPINFPATH() TAAPINFMODE(0) TAAPINFSIZE(409600)
      JETCOMPATIBLE(NO) SUBSTRLEN() BLKFUPD() ARYERRPOS()
      CALCMDWAITTIME(0) BLKFERRBREAK(NO) XAAUTORECONNECT(NO)
      CLTBINDLOOPBACKADDR(NO)
      STANDARDSQLSTATE() LCKWAITTIME(-1) DDLDEAPRPEXE(NO)
      ODBGINFOSUPPRESS(NO) ODBSTANDARDARGSIZE(YES)
      ODBSTANDARDSQLSTATE(YES) ODBSTANDARDDESCCOL(YES)
      TMPTBLRDAREA(RDTMP01,RDTMP02,RDTMP03)
      EXTDECCHECK(NO)
      DNDPCOMPATIBLE(NO)
      RCTIMING(ALL)
      ODBSTANDARDGTYPEINFO(NO)
      HSICOPTIONS()
      DEFAULTOPTION(RECOM)
      TCPREDUCETIMEWAITPORT(YES) TCPREDUCECONCLOSERCVTIME(1000)
      AUTHTYPE(PA)
      CLTCNVBYTERATIO() CLTCNVUOCFUNC()
      CLTCNVUOCLIB()
      TIMEDOUTRETRY(2) BINDRETRYCOUNT(10) BINDRETRYINTERVAL(0)
      ODBCWRNSKIP(NO) ODBLOCATOR(NO) ODBESCAPE(1)
      ODBSTATCACHE(0) GDATAOPT(NO) DNDPTRACE()
      CLTRDNODE() RDCLTCODE() UAPERLOG(65536)
      ERRSKIPCODE()
      TRCMODE(ERR) XATRCFILEMODE(SEPARATE)
      RETRYCOUNT(10) RETRYINTERVAL(700)
      CONREFRCOUNT(9) CONREFRINTERVAL(700)
      IPCFILEDIR()
      ENVGROUP(/USERS/hirdb/envgroup/HiRDB.ini)
    CONNECTION STATUS : [5]
      CURHOST(dcm3500)  CURPORT(4439)  SRVNAME(fes1)
      CNCTNO(1)  SVRPID(8945)  CLTPID(9155)  CLTTID( ) CLTCNCTHDL(0x0)

  [6]  [7]   [8]  [9]     [10] [11] [12] [13]  [14]         [15]         [16] [23]
  CNCT CLPID CLTID NO     OP   SEC  SQL  SQL   START-TIME   END-TIME     OP   EXEC-TIME
  NO                      CODE NO   CODE WARN                            TION
  ---- ----- ----- -- ---- ---  ---- ----- ------------ ------------ ---- -----------
    1  9155      0      1 CNCT   0     0 WC040 16:03:55.720 16:03:58.080 0001     2356125
    1  9155      0      2 AUI2   1     0 -0000 16:03:58.630 16:03:59.400 M000      769651

 *SQL* INSERT INTO ZAIKO(GNO,GNAME,KIKAKU,TANKA,SURYO,GENKA) VALUES(?,?,   .........17
 ?,?,?,?)   ........................................................................17
    1  9155      0      3 SET    2     0 -0000 16:04:00.820 16:04:01.540 M000      719825

 *SQL* SELECT GNO,GNAME,KIKAKU,TANKA,SURYO,GENKA FROM ZAIKO   ......................17

    1  9155      0      4 OPEN   2     0 -0000 16:04:02.090 16:04:02.800 M000      709123
    1  9155      0      5 FETC   2  -204 -0000 16:04:03.080 16:04:03.790 M000      708902
    1  9155      0      6 SET    2     0 W8800 16:04:04.060 16:04:04.830 M000      765147

 *SQL(AUTHID)* INSERT INTO TBL01 VALUES('12345',12345)   ...........................17

    1  9155      0      7 SAUT   0     0 -0000 16:04:04.834 16:04:04.835 M000         912

 *USER* hirdb01   ..................................................................18

    1  9155      0      8 AUI2   3     0 -0000 16:05:05.110 16:05:05.121 M000        9456

 *SQL* INSERT INTO TBL01 VALUES(?,100)   ...........................................21
 *PARAM* NO=       1 COD=c5 XDIM=   1 SYS=     0 LEN=      15 IND=       0   .......21
         DATA=30 35 2d 30 35 00 00 00 00 00 00 00 00 00 00     *05-05.........*   ..21

    1  9155             9 DISC   0     0 -0000 16:05:55.110 16:05:56.660 M004     1547893

[クライアント環境定義PDSQLTRCFMTに2を指定した出力例（出力形式2）（1/2）]

               [24]       [25]    [20]                          [19]  [22]
  ** UAP TRACE TYPE2 (CLT:09-50-01(Nov  5 2013) SVR:09-04   US) WIN32(WIN_M32)**↓

  USER APPLICATION PROGRAM FILE NAME : TESTAP↓    [1]
  USERID : hirdb↓    [2]
  UAP START TIME : 2013/11/13 15:20:14↓    [3]
  UAP ENVIRONMENT :↓    [4]
    LANG(ja_JP.SJIS)↓
    USER("hirdb")↓
    HOST(eserver2)↓
    NAMEPORT(20280)↓
    FESHOST()↓
    SVCGRP()  SVCPORT()  SRVTYPE()↓
    SWAIT(600)  CWAIT(0)  SWATCH(0)↓
    BLKF(1)  RDABLKF(-1)  LCKLMT(0)  ISLLVL(2)  DBLOG(ALL)  DFLNVAL(NOUSE)↓
    AGGR(1024)  DLKPRIO(64)  EXWARN(NO)  VWOPTMODE(0)↓
    LOCKSKIP(NO) CLTGRP(A)  DSQLOBJCACHE(YES)  PLGIXMK(NO)↓
    CLTRCVPORT(5000)  CLTRCVADDR()  PLGPFSZ(8192)↓
    PLGPFSZEXP(8192)  SPACELVL(-1)  STJTRNOUT(YES)↓
    OPTLVL("SELECT_APSL","RAPID_GROPING")↓
    ADDITIONALOPTLVL("COST_BASE_2","APPLY_HASH_JOIN")↓
    UAPREPLVL()  REPPATH()↓
    TRCPATH()↓
    IPC(MEMORY)  SENDMEMSIZE(16)  RECVMEMSIZE(32)↓
    HASHTBLSIZE(128)  CMMTBFDDL(NO)  PRPCRCLS()  DBACCS()↓
    SQLTRCOPENMODE(SQL)  AUTOCONNECT(ON)  CWAITTIMEWRNPNT(-1)  TCPCONOPT(1)↓
    WRTLNFILSZ(-1) WRTLNCOMSZ(1024)↓
    WRTLNPATH() UAPENVFILE()↓
    TP1SERVICE(NO) AUTORECONNECT(NO) RCCOUNT(0) RCINTERVAL(0)↓
    KALVL(2) KATIME(600) CLTCNVMODE(NOUSE)↓
    PRMTRC(YES) PRMTRCSIZE(256) BESCONHOLD() BESCONHTI(-1)↓
    BLKBUFFSIZE(10) BINARYBLKF(NO) FORUPDATEEXLOCK(YES)  DBORGUAP(NO)↓
    CNSTRNTNAME() SQLTEXTSIZE(4096) RCTRACE(-1)↓
    FESGRP()↓
    NBLOCKWAITTIME(0) CONNECTWAITTIME(300) DBBUFLRU(YES)↓
    UAPEXERLOGUSE() UAPEXERLOGPRMSZ() HJHASHINGMODE(TYPE1)↓
    DDLDEAPRP(NO) DELRSVWDFILE() HATRNQUEUING()↓
    ODBSPLITSIZE(100) NODELAYACK(YES) CURSORLVL(0)↓
    TAAPINFPATH() TAAPINFMODE(0) TAAPINFSIZE(409600)↓
    JETCOMPATIBLE(NO) SUBSTRLEN() BLKFUPD(YES) ARYERRPOS(YES)↓
    CALCMDWAITTIME(0) BLKFERRBREAK(YES) XAAUTORECONNECT(NO)↓
    CLTBINDLOOPBACKADDR(NO)↓
    STANDARDSQLSTATE() LCKWAITTIME(-1) DDLDEAPRPEXE(NO)↓
    ODBGINFOSUPPRESS(NO) ODBSTANDARDARGSIZE(YES)↓
    ODBSTANDARDSQLSTATE(YES) ODBSTANDARDDESCCOL(YES)↓
    TMPTBLRDAREA(RDTMP01,RDTMP02,RDTMP03)↓
    EXTDECCHECK(NO)↓
    DNDPCOMPATIBLE(NO)↓
    RCTIMING(ALL)↓
    ODBSTANDARDGTYPEINFO(NO)↓
    HSICOPTIONS()↓
    DEFAULTOPTION(RECOM)↓
    TCPREDUCETIMEWAITPORT(YES) TCPREDUCECONCLOSERCVTIME(1000)↓
    AUTHTYPE(PA)↓
    CLTCNVBYTERATIO() CLTCNVUOCFUNC()↓
    CLTCNVUOCLIB()↓
    TIMEDOUTRETRY(2) BINDRETRYCOUNT(10) BINDRETRYINTERVAL(0)↓
    ODBCWRNSKIP(NO) ODBLOCATOR(NO) ODBESCAPE(1)↓
    ODBSTATCACHE(0) GDATAOPT(NO) DNDPTRACE()↓
    CLTRDNODE() RDCLTCODE() UAPERLOG(65536)↓
    ERRSKIPCODE()↓
    TRCMODE(ERR) XATRCFILEMODE(SEPARATE)↓
    RETRYCOUNT(10) RETRYINTERVAL(700)↓
    CONREFRCOUNT(9) CONREFRINTERVAL(700)↓
    IPCFILEDIR()↓
    ENVGROUP(C:¥envgroup¥HiRDB.ini)↓
  HIRDBINIPATH : C:¥WINDOWS¥HiRDB.ini↓    [26]
  CONNECTION STATUS :↓    [5]
    CURHOST(eserver2)↓
    CURPORT(4439)  SRVNAME(fes1)↓
    CNCTNO(1)  SVRPID(8945)  CLTPID(9155)  CLTTID() CLTCNCTHDL(0x0)↓
  SOCKET STATUS :↓    [27]
    2013/11/13 15:20:14.540  CLT(10.196.120.171 : 1071) -> RDM(10.197.10.244  : 20280)↓
    2013/11/13 15:20:14.545  CLT()                      <- RDM()↓
    2013/11/13 15:20:14.545  CLT(10.196.120.171 : 1072) -> NDM(10.197.10.244  : 20280)↓
    2013/11/13 15:20:14.550  CLT()                      <- NDM()↓
    2013/11/13 15:20:14.550  CLT(10.196.120.171 : 1073) -> SCD(10.197.10.244  : 4439)↓
    2013/11/13 15:20:14.560  CLT(10.196.120.171 : 5000) <- SRV(10.197.10.244  : 4440)↓

[クライアント環境定義PDSQLTRCFMTに2を指定した出力例（出力形式2）（2/2）]

[ 6]  [ 7]       [ 8]      [ 9]   [10] [11] [12]     [13]  [14]                    [15]                    [16]   [23]        [28]      [29]                           [30]        [31]
CNCT  CLPID      CLTID      NO     OP   SEC  SQL      SQL   START-TIME              END-TIME                OP     EXEC-TIME   TRACE     PREPROCESS FILE                PREPROCESS  ROOT AP↓
NO                                 CODE NO   CODE     WARN                                                  TION               OUTPUT                                   TIME        ↓
    　　                                                                                                                       TIME                                                 ↓
----- ---------- ---------- ------ ---- ---- -------- ----- ----------------------- ----------------------- ------ ----------- --------- ------------------------------ ----------- ------------------------------------------------ ↓
   10       2764       3968      1 CNCT    0        0 -0000 2013/11/13 15:20:14.538 2013/11/13 15:20:14.569 000000       35502         * *                                        *↓
   10       2764       3968      2 AUI2    1        0 -0000 2013/11/13 15:20:14.928 2013/11/13 15:20:14.944 000000       23362        44 test.ec                         1384327820 10.196.120.171/2764/0x0000000000000001↓
     *SQL* INSERT INTO ZAIKO VALUES(1,'AAA','C',100,5,80)↓    [17]
     *SQLLEN* 46↓                                             [32]
     *XID* 0x1234567890123456↓                                [33]
   10       2764       3968      3 CMIT    0        0 -0000 2013/11/13 15:20:14.959 2013/11/13 15:20:14.959 000000        2243         4 *                                        * 10.196.120.171/2764/0x0000000000000001↓
   11       2764       3968      4 SET     2        0 -0000 2013/11/13 15:20:14.959 2013/11/13 15:20:14.959 000003         328         0 test.ec                         1384327820 10.196.120.171/2764/0x0000000000000001↓
     *SQL* INSERT INTO T1 VALUES(?)↓
     *SQLLEN* 24↓
     *XID* 0x1234567890123456↓
     *EXSTMT* PRE1↓       [34]
     *EXWITHHOLD* USE↓    [36]
     *AUTORECONNECT INFORMATION*↓[38]
        2013/11/13 15:20:14.959  CLT(10.196.120.171 : 1071) -> RDM(10.197.10.244  : 20280)↓
        2013/11/13 15:20:14.964  CLT()                      <- RDM()↓
        2013/11/13 15:20:14.964  CLT(10.196.120.171 : 1072) -> NDM(10.197.10.244  : 20280)↓
        2013/11/13 15:20:14.969  CLT()                      <- NDM()↓
        2013/11/13 15:20:14.969  CLT(10.196.120.171 : 1073) -> SCD(10.197.10.244  : 4439)↓
        2013/11/13 15:20:14.979  CLT(10.196.120.171 : 5000) <- SRV(10.197.10.244  : 4440)↓
   11       2764       3968      8 SET     6        0 -0000 2013/11/13 15:20:14.979 2013/11/13 15:20:14.979 000000         578         1 test.ec                         1384327820 10.196.120.171/2764/0x0000000000000001↓
     *SQL* SELECT * FROM T1↓
     *SQLLEN* 16↓
     *EXSTMT* PRE2↓
   11       2764       3968     11 ALCR    9        0 -0000 2013/11/13 15:20:14.979 2013/11/13 15:20:14.979 000000         100         0 *                                        * 10.196.120.171/2764/0x0000000000000001↓
     *EXSTMT* PRE2↓
     *EXCURSOL* CUR1↓    [35]
     *HLDCURSOL* USE↓    [37]
   11       2764       3968     12 OPEN   10        0 -0000 2013/11/13 15:20:14.979 2013/11/13 15:20:14.979 000000           8         0 test.ec                         1384327820 10.196.120.171/2764/0x0000000000000001↓
     *EXCURSOL* CUR1↓
   11       2764       3968     13 FETC   11        0 -0000 2013/11/13 15:20:14.979 2013/11/13 15:20:14.995 000000       11287        21 *                                        * 10.196.120.171/2764/0x0000000000000001↓
     *EXCURSOL* CUR1↓
     *OUTPM* NO=    1 COD=f0 XDIM=    1 SYS=    0 LEN=         4 IND=         0↓     [21]
             DATA=64 00 00 00                                     *d...            *↓
   11       2764       3968     14 CLOS   12        0 -0000 2013/11/13 15:20:14.995 2013/11/13 15:20:14.995 000000         269         0 test.ec                         1384327820 10.196.120.171/2764/0x0000000000000001↓
     *EXCURSOL* CUR1↓
   11       2764       3968     18 CMIT    0        0 -0000 2013/11/13 15:20:15.011 2013/11/13 15:20:15.011 000000         310         0 *                                        * 10.196.120.171/2764/0x0000000000000001↓
   12       8275          0     12 SET     2        0 W8800 2013/11/13 15:20:15.011 2013/11/13 15:20:15.776 000000      765147       578 test.ec                         1384327820 10.196.120.171/2764/0x0000000000000001↓
     *SQL(AUTHID)* INSERT INTO TBL01 VALUES('12345',12345)↓
     *SQLLEN* 39↓
   12       8275          0     13 SAUT    0        0 -0000 2013/11/13 15:20:15.776 2013/11/13 15:20:15.776 000000         912       500 *                                        * 10.196.120.171/2764/0x0000000000000001↓
     *USER* hirdb01↓     [18]
   11       2764       3968     19 DISC    0        0 -0000 2013/11/13 15:20:15.776 2013/11/13 15:20:15.776 000000         434       200 *                                        * 10.196.120.171/2764/0x0000000000000001↓

（凡例）

↓：出力例（出力形式2）での1行の末尾を示します。実際に出力するファイルでは表示しません。

[説明]

UAP名称

環境変数PDCLTAPNAMEで指定した名称を表示します。

認可識別子

UAPを実行したユーザの認可識別子を表示します。OSログインユーザの簡易認証機能を使用している場合は，簡易認証ユーザを表示します。

UAP開始時刻

UAPの実行を開始した時刻を表示します。

UAP実行環境

UAPを実行したときの環境変数の値を表示します。

SWATCH※，RDABLKF，SPACELVL，HASHTBLSIZE，CWAITTIMEWRNPNT，WRTLNFILSZ，BESCONHTI，RCTRACE，UAPEXERLOGPRMSZ，又はLCKWAITTIME，ISLLVLについては，クライアント環境定義の指定を省略している場合，-1を表示します。

注※

HiRDBのバージョンが09-00より前の場合は，次の値が表示されます。

PDSWATCHTIMEの指定を省略したとき：SWATCH(0)

PDSWATCHTIMEに0を指定したとき：SWATCH(-1)

ENVGROUPは次の優先順位で環境変数グループを表示します（数字は優先順位を示します）。指定していない場合は表示しません。

●クライアントライブラリを使用している場合

X/Openに従ったAPI未使用時：

1.　環境変数グループ名又は環境変数グループファイルのファイルパス

X/Openに従ったAPI使用時：

1.　XAオープン文字列に指定した環境変数グループ名又は環境変数グループファイルのファイルパス

XAオープン文字列に指定した環境変数グループ識別子は表示しません。

●Type4 JDBCドライバを使用している場合

1.　ユーザプロパティHiRDB_for_Java_DBIDに指定したHiRDB環境変数グループファイルのファイルパス

2.　URL中のDBIDに指定したHiRDB環境変数グループファイルのファイルパス

3.　DataSource 系インタフェースのsetDescriptionメソッドに指定した環境変数グループ名のファイルパス，又はsetXAOpenStringに指定したXAオープン文字列中の環境変数グループ識別子及び環境変数グループファイル名のファイルパス

次に示す項目は，システムが使用する情報です。

項番

表示内容

1

TCPCONOPT()

2

HJHASHINGMODE()

3

NODELAYACK()

4

BLKFUPD()

5

ARYERRPOS()

6

BLKFERRBREAK()

7

TCPREDUCETIMEWAITPORT()

8

TCPREDUCECONCLOSERCVTIME()

9

RETRYCOUNT()

10

RETRYINTERVAL()

UAP実行ステータス

UAPを実行したときのサーバとの接続状態を表示します。

CURHOST：接続先ホスト名

CURPORT：接続ポート番号

SRVNAME：フロントエンドサーバ名，又はシングルサーバ名

CNCTNO：コネクト通番

SVRPID：接続サーバのプロセス番号

CLTPID：UAPのプロセス番号

Type4 JDBCドライバから接続している場合は，0を表示します。

CLTTID：UAPのスレッド番号

Type4 JDBCドライバではネイティブスレッドの番号を表示します。

ただし，次の場合は0を表示します。

・JDBC2.0のType4 JDBCドライバを使用している。

・クライアント環境定義PDSQLTRCFMTに1を指定し，JDBC4.0のType4 JDBCドライバを使用している。

CLTCNCTHDL：コネクションハンドル

なお，取得できない情報があるときは，不正な値となって表示されることがあります（Windows版の場合）。

コネクト通番

サーバがCONNECTを受け付けるごとに順次カウントするコネクト通番を表示します。

UAPのプロセス番号

UAPのプロセス番号を表示します。

Type4 JDBCドライバから接続している場合は，0を表示します。なお，取得できないプロセス番号がある場合，不正な値となって表示されることがあります（Windows版の場合）。

UAPのスレッド番号

UAPがマルチスレッドで動作している場合に，UAPのスレッド番号を表示します。スレッドで動作していない場合は，0が表示されます。取得できないスレッド番号が不正な値となって表示されることがあります。

Type4 JDBCドライバではネイティブスレッドの番号を表示します。

ただし，次の場合は0を表示します。

・JDBC2.0のType4 JDBCドライバを使用している。

・クライアント環境定義PDSQLTRCFMTに1を指定し，JDBC4.0のType4 JDBCドライバを使用している。

SQLカウンタ

SQL文を受け付けるごとに順次カウントして表示します。

1から999999までカウントできます。

なお，999999を超えると1に戻ります。

オペレーションコード

SQLに対応するオペレーションコードを表示します。

表示されるオペレーションコードに対応するSQL文を次に示します。

オペレーションコード

対応するSQL文

ALCR

ALLOCATE CURSOR文

AUI2

DELETE文（静的SQL），INSERT文（静的SQL），UPDATE文（静的SQL），LOCK文（静的SQL），PURGE TABLE文（静的SQL），1行SELECT文（静的SQL），FREE LOCATOR文（静的SQL）

AUI3

代入文（静的SQL）

AUX

EXECUTE文

AUXI

EXECUTE IMMEDIATE文，すべての定義系SQL

AUXO

EXECUTE文（INTO指定）

CALL

CALL文

CHBK

システムが使用

CHCT

システムが使用

CLIN

INSTALL CLIB

CLOS

CLOSE文

CLRM

REMOVE CLIB

CLRP

REPLACE CLIB

CMIT

COMMIT文

CNCT

CONNECT文

CPRP

コミットプリペア※

DESC

DESCRIBE文（OUTPUT指定）

DEST

DESCRIBE TYPE文

DISC

DISCONNECT文，COMMIT文（RELEASE指定）

DISR

ROLLBACK文（RELEASE指定）

DIST

Disconnect＋Tran Check※

DSCM

システムが使用

DSET

DEALLOCATE PREPARE文

DSPR

システムが使用

DSRL

システムが使用

FETC

FETCH文

GETD

GET DIAGNOSTICS

HVAR

DESCRIBE文（INPUT指定）

JARI

INSTALL JAR

JARR

REPLACE JAR

JARU

REMOVE JAR

OPEN

OPEN文（動的SQL）

OPN2

OPEN文（静的SQL）

OPNR

OPEN文（動的SQL(複数カーソル)）

RENV

システムが使用

RNCN

CONNECT文（TO指定）

RNDS

DISCONNECT文（TO指定）

ROLL

ROLLBACK文

RSDC

DESCRIBE文（OUTPUT，RESULT SET指定）

RSFT

FETCH文（RESULT SET指定）

RSCL

CLOSE文（RESULT SET指定）

SAUH

SET SESSION AUTHORIZATION文

SET

PREPARE文

SINF

システムが使用

SOPT

システムが使用

SVLS

システムが使用

THRE

システムが使用

THSU

システムが使用

TRCK

システムが使用

TRC2

システムが使用

TRST

システムが使用

TSCM

システムが使用

TSRL

Transfer Rollback※

TSPR

Transfer Prepare※

注※　XAインタフェースを使用した場合だけ出力されます。

セクション番号

SQLの対応を確認するための番号を表示します。

番号は，SQLプリプロセサが自動的に付けます。

SQLCODE

SQL文を実行した結果，発生したSQLCODEを表示します。

SQLWARN

警告情報を16進表記で表示します。SQLWARN0からSQLWARNFまでの警告情報にそれぞれ左から1ビットを割り当て，警告フラグが設定されているものは1，設定されていないものは0として16ビットの数値を求めます。これを4けたの16進数値として表示します。

一つ以上警告フラグが設定されている場合，先頭に'W'が，警告フラグが設定されていない場合は，'-'（ハイフン）が表示されます。

（例１）

（例２）

SQL実行要求受付時刻

SQLの実行要求が受け付られた時刻を表示します。クライアント環境定義PDSQLTRCFMTの指定値によって出力形式が異なります。

・PDSQLTRCFMTに1を指定した場合：hh:mm:ss.fffの形式

・PDSQLTRCFMTに2を指定した場合：YYYY/MM/DD hh:mm:ss.fffの形式

SQL実行要求終了時刻

SQLの実行要求が終了した時刻を表示します。クライアント環境定義PDSQLTRCFMTの指定値によって出力形式が異なります。

・PDSQLTRCFMTに1を指定した場合：hh:mm:ss.fffの形式

・PDSQLTRCFMTに2を指定した場合：YYYY/MM/DD hh:mm:ss.fffの形式

システムが使用する情報

システムが使用する情報を表示します。

1バイト目にはプロセス間通信の種別とKeepAliveパケットの送信有無を示します。KeepAliveパケットとは，クライアント環境定義PDKALVLに1又は2が指定された場合に使用されるパケットのことです。

1バイト目の文字の意味を次に示します。

1バイト目の文字

プロセス間通信の種別

KeepAliveパケットの送信有無

P

メモリ通信

KeepAliveパケットを送信した次のSQL実行

K

メモリ通信以外

M

メモリ通信

上記以外

0

メモリ通信以外

ほかの部分は，HiRDB開発者が使用する保守用の情報です。

SQL文

オペレーションコードが，SET，AUXI，AUI2，又はOPN2のときだけ，SQL文を表示します。

なお，出力するSQL文の長さは最大4096バイト（Type4 JDBCドライバを使用している場合は最大4096文字）で，最大値を超えると超過分は切り捨てられます（最大値は環境変数PDSQLTEXTSIZEで変更できます）。また，プリプロセス時に-Aオプション，又は/AオプションによってSQL文中の認可識別子が省略されたときに仮定する認可識別子を指定している場合は，*SQL*が*SQL（仮定した認可識別子）*と表示されます。

ユーザ識別子を変更した場合の情報

一つのコネクションの中でユーザ識別子を変更した場合，変更後のユーザ識別子を表示します。ユーザ識別子の変更に失敗した場合も表示されます。

UAPが動作しているプラットフォーム

プラットフォーム

表示される文字

AIX

AIX

AIX（64ビットモード）

AIX64

Linux

LINUX

Windows

WIN32

HP-UX (IPF)32ビットモード

HPI32

HP-UX (IPF)64ビットモード

HPI64

Linux (EM64T)

LINX64

Windows(x64)64ビットモード

WINX64

Type4 JDBCドライバ

Type4

HiRDBクライアントの作成日付

HiRDBクライアントの作成日付を表示します。日付の形式を次に示します。

Mmm：月（英語の先頭3文字（1文字目は大文字）。例えば，Juneの場合はJun）

dd：日

yyyy：西暦

パラメタトレース

クライアント環境定義でPDPRMTRC=YES，IN，OUT，又はINOUTを指定した場合，入力用パラメタ情報，出力用パラメタ情報，及び検索データを出力します。

なお，出力されるパラメタ情報のデータの長さは，PDPRMTRCSIZEの指定値（省略時は256バイト）を最大長として，最大長を超える部分は切り捨てられます。また，ASCIIコードの範囲外の文字はドット（.）で出力されます。詳細については，「パラメタトレースの出力例」を参照してください。

パラメタ情報を次に示します。

NO：

パラメタ番号

COD：

データ型コード

XDIM：

配列要素数

SYS：

ギャップを含む1要素の領域長

LEN：

データの長さ

入力用パラメタ：

・HiRDBデータプロバイダ for .NET Framework：

　　HiRDBParameter.Sizeの指定値

・上記以外：

　　パラメタの実長

出力用パラメタ：

　パラメタの定義長

IND：

標識変数の値

ARRAY NUM：

繰返し列の要素数

ROW NUM：

配列の埋込み変数を使用したSQLの実行行数

DATA：

データ（ダンプ形式）

可変長データのデータ型の形式を次に示します。

図11‒1　可変長データのデータ型の形式

リンクしたライブラリの名称

ライブラリ名称

表示される文字

右記以外

HP-UXの32ビットモードのHiRDBクライアント，及びHP-UX (IPF)の64ビットモードに同梱している32ビットモードのHiRDBクライアントの場合

libzclt.sl，libclt.a

UNIX

UNIX_32

libzclts.sl，libclts.a

UNIX_S

UNIX_32S

libzcltm.sl，libcltm.a

UNIX_M

UNIX_32M

libzcltk.sl，libcltk.a，libzclt6k.a

UNIX_K

UNIX_32K

libzcltx.sl，libcltxa.a

UNIX_XA

UNIX_XA_32

libzcltxs.sl，libcltxas.a，libzcltys.a，libzclt6ys.a

UNIX_XA_S

UNIX_XA_32S

libzcltxm.sl，libcltxam.a

UNIX_XA_M

UNIX_XA_32M

libzcltxk.sl，libcltxak.a，libzcltyk.a，libzclt6yk.a

UNIX_XA_K

UNIX_XA_32K

libzclt64.sl，libclt64.a

UNIX_64

−

libzcltk64.sl，libcltk64.a，libzclt6k64.a

UNIX_64K

−

libzclts64.sl

UNIX_64S

−

libzcltx64.sl，libzclty64.sl

UNIX_XA_64

−

libzcltxk64.sl，libzcltyk64.sl

UNIX_XA_64K

−

libzcltxs64.sl，libzcltys64.sl，libzclt6ys64.a

UNIX_XA_64S

−

CLTDLL.DLL

WIN_32

−

PDCLTM32.DLL

WIN_M32

−

PDCLTM50.DLL

WIN_M50

−

PDCLTM71.DLL

WIN_M71

−

PDCLTM80S.DLL

WIN_M80S

−

PDCLTM90S.DLL

WIN_M90S

−

PDCLTM90.DLL

WIN_M90

−

PDCLTM100.DLL

WIN_M100

−

PDCLTM140.DLL

WIN_M140

−

PDCLTP32.DLL

WIN_P32

−

PDCLTX32.DLL

WIN_XA_32

−

PDCLTXM.DLL

WIN_XA_32M

−

PDCLTXS.DLL

WIN_XA_32S

−

PDCLTXM5.DLL

WIN_XA_50M

−

PDCLTM64.DLL

WIN_M64

−

PDCLTM90S64.DLL

WIN_M90S64

−

PDCLTM90X.DLL

WIN_M90X

−

PDCLTM100X.DLL

WIN_M100X

−

PDCLTM140X.DLL

WIN_M140X

−

PDCLTX64.DLL

WIN_XA_64

−

PDCLTXM64.DLL

WIN_XA_64M

−

PDCLTXS64.DLL

WIN_XA_64S

−

PDCLTL32.DLL

WIN_L32

−

PDCLTO32.DLL

WIN_O32

−

PDCLTO64.DLL

WIN_O64

−

PDJDBC2.JAR

Type4

−

PDJDBC4.JAR

Type4_JDBC40

−

（凡例）

−：該当しません。

SQL実行時間

クライアント環境定義にPDSQLEXECTIME=YESを指定した場合，SQL実行時間をマイクロ秒単位で表示します。

NOを指定している場合，クライアント環境定義PDSQLTRCFMTの指定値によって表示内容が異なります。

・PDSQLTRCFMTに1を指定した場合：この情報を表示しません。

・PDSQLTRCFMTに2を指定した場合：'*'を表示します。

JDBC2.0のType4 JDBCドライバを使用している場合は，常に'*'を表示します。

SQLトレース出力形式

SQLトレースの出力形式を表示します。

HiRDBクライアント作成バージョン

HiRDBクライアントの作成バージョンを表示します。クライアント環境定義PDSQLTRCFMTの指定値によって出力形式が異なります。

・PDSQLTRCFMTに1を指定した場合：VV-RRの形式

・PDSQLTRCFMTに2を指定した場合：VV-RR-XXの形式

実際に使用しているHiRDB.iniファイルパス

次の優先順位で，どれか一つのHiRDB.iniのファイルパスを表示します（数字は優先順位を示します）。HiRDB.iniを使用していない場合，この情報は表示しません。

●クライアントライブラリを使用している場合

Windows版：

1.　Windowsディレクトリ下のHiRDB.ini

UNIX版：

表示しません。

●Type4 JDBCドライバを使用している場合

1.　ユーザプロパティHiRDB_for_Java_HiRDB_INIに指定したディレクトリ下のHiRDB.ini

2.　URL中のHIRDB_INIに指定したディレクトリ下のHiRDB.ini

3.　DataSource系インタフェースのsetHiRDBINIメソッドの引数に指定したディレクトリ下のHiRDB.ini

●ODBCドライバを使用している場合

Windows版：

1.　データソースで設定したHiRDBクライアント環境変数ファイル名

2.　Windowsディレクトリ下のHiRDB.ini

UNIX版：

1.　データソースで設定したHiRDBクライアント環境変数ファイル名

サーバとの接続処理で使用したソケット情報

サーバとの接続処理で使用したソケット情報を表示します。接続形態によって表示内容が異なります。

日時：クライアント−サーバ間で通信した日時

YYYY/MM/DD hh:mm:ss.fffの形式で表示します。

CLT：クライアント側のIPアドレス，送受信ポート番号

RDM，NDM，SCD，SRV：サーバ側のIPアドレス，送受信ポート番号

接続形態ごとの表示内容を次に示します。

●通常接続の場合

2013/11/13 15:20:14.540  CLT(10.196.120.171 : 1071) -> RDM(10.197.10.244  : 20280)
2013/11/13 15:20:14.545  CLT()                      <- RDM()
2013/11/13 15:20:14.545  CLT(10.196.120.171 : 1072) -> NDM(10.197.10.244  : 20280)
2013/11/13 15:20:14.550  CLT()                      <- NDM()
2013/11/13 15:20:14.550  CLT(10.196.120.171 : 1073) -> SCD(10.197.10.244  : 4439)
2013/11/13 15:20:14.560  CLT(10.196.120.171 : 5000) <- SRV(10.197.10.244  : 4440)

●FESホストダイレクト接続の場合

2013/11/13 15:20:14.540  CLT()                      -> RDM()
2013/11/13 15:20:14.545  CLT()                      <- RDM()
2013/11/13 15:20:14.545  CLT(10.196.120.171 : 1072) -> NDM(10.197.10.244  : 4437)
2013/11/13 15:20:14.550  CLT()                      <- NDM()
2013/11/13 15:20:14.550  CLT(10.196.120.171 : 1073) -> SCD(10.197.10.244  : 20280)
2013/11/13 15:20:14.560  CLT(10.196.120.171 : 5000) <- SRV(10.197.10.244  : 4440)

●高速接続の場合

2013/11/13 15:20:14.540  CLT()                      -> RDM()
2013/11/13 15:20:14.545  CLT()                      <- RDM()
2013/11/13 15:20:14.545  CLT()                      -> NDM()
2013/11/13 15:20:14.550  CLT()                      <- NDM()
2013/11/13 15:20:14.550  CLT(10.196.120.171 : 1073) -> SCD(10.197.10.244  : 4439)
2013/11/13 15:20:14.560  CLT(10.196.120.171 : 5000) <- SRV(10.197.10.244  : 4440)

SQLトレース出力処理時間

SQLトレースの出力に掛かった処理時間をマイクロ秒単位で表示します。前回のオペレーションコード実行時に掛かった処理時間を該当する行に表示します。最大は999999999マイクロ秒となり，超えた場合，999999999マイクロ秒を表示します。初回のSQLトレース出力時は'*'を表示します。

JDBC2.0のType4 JDBCドライバを使用している場合，精度はミリ秒となります。

プリプロセスファイル名

プリプロセスしたUAPソースファイル名を表示します。ファイル名を表示しない場合，'*'を表示します。Type4 JDBCドライバを使用している場合，この情報を表示しません。

プリプロセス時間

UAPをプリプロセスした時間を表示します。時間を表示しない場合，'*'を表示します。Type4 JDBCドライバを使用している場合，この情報を表示しません。

ルートアプリケーション情報

Cosminexus からType4 JDBCドライバを使用している場合，Cosminexus のルートアプリケーション情報を表示します。ルートアプリケーション情報については，Cosminexusのマニュアルを参照してください。

クライアントライブラリを使用している場合，この情報を表示しません。

SQL文長

SQL文の実長を表示します。単位を次に示します。

Type4 JDBCドライバを使用している場合：Unicodeコード単位の数

上記以外：バイト数

17.のSQL文と併せて表示します。SQL文を表示しない場合，この情報も表示しません。

Type4 JDBCドライバでのUnicodeコード単位の扱いについては，「クライアント環境定義の設定内容」の「PDSQLTEXTSIZE」を参照してください。

トランザクション識別子

X/Openに従ったAPIを使用した接続形態の場合にトランザクション識別子を表示します。

次の場合に表示します。

サーバと接続後の初回SQL実行

トランザクション決着後の初回SQL実行

xa_commit，xa_rollback，xa_prepare発行時

上記以外の場合，この情報は表示しません。

拡張文名

拡張文名を使用したSQL実行時，使用した拡張文名を表示します。拡張文名を使用していない場合，この情報は表示しません。

拡張カーソル名

拡張カーソル名を使用したSQL実行時，使用した拡張カーソル名を表示します。拡張カーソル名を使用していない場合，この情報は表示しません。

前処理結果保持機能指定情報

次に示すどれかの場合に表示します。

●Type4 JDBCドライバを使用している場合

システムプロパティのHiRDB_for_Java_DAB_STATEMENT_COMMIT_BEHAVIORの有効値がTRUEとなっている。

ユーザプロパティのHiRDB_for_Java_STATEMENT_COMMIT_BEHAVIORの有効値がTRUEとなっている。

URLのSTATEMENT_COMMIT_BEHAVIORの有効値がTRUEとなっている。

DataSource系インタフェースのsetStatementCommitBehaviorメソッドの引数にtrueを指定する。

●Type2 JDBCドライバを使用している場合

ユーザプロパティのCOMMIT_BEHAVIORの有効値がCLOSE又はPRESERVEとなっている。

URL中のCOMMIT_BEHAVIORの有効値がCLOSE又はPRESERVEとなっている。

DataSource系インタフェースのsetCommit_Behaviorメソッドの引数にCLOSE又はPRESERVEを指定する。

上記以外の場合，この情報は表示しません。

ホールダブルカーソル指定情報

ホールダブルカーソルを使用したSQL実行時に表示します。ホールダブルカーソルを使用していない場合，この情報は表示しません。

自動再接続時にサーバとの接続処理で使用したソケット情報

自動再接続時にサーバとの接続処理で使用したソケット情報を表示します。

表示内容については27.を参照してください。

自動再接続の詳細は，「自動再接続機能」を参照してください。

(4)　SQLトレースファイルのバックアップの取得

SQLトレース情報を出力中にSQLトレースファイルの容量が一杯になると，HiRDBはそのファイルへ出力しないで，もう一方のSQLトレースファイルにSQLトレース情報を出力します。このとき，切り替え先のSQLトレースファイルに格納されている古いSQLトレース情報から順に消去され，新しいSQLトレース情報に書き換えられます。このため，必要な情報はUAP終了時にSQLトレースファイルの内容をコピーしてバックアップを取得しておいてください。

なお，現在使用しているSQLトレースファイルを知りたい場合は，ファイルの最終更新日時を調べてください。最終更新日時の新しい方が現在使用しているSQLトレースファイルになります。

HiRDBクライアントがWindows版の場合はdirコマンド又はエクスプローラで，ファイルの最終更新日時を調べてください。

HiRDBクライアントがUNIX版の場合はOSのls -lコマンドで，ファイルの最終更新日時を調べてください。

(5)　パラメタトレースの出力例

代表的なパラメタトレースの出力例を次に示します。

(a)　INSERT文の場合（ナル値あり，繰返し列あり）

[説明]

INSERT文で，INTEGER，及びVARCHAR(10)の繰返し列（要素数5）を挿入する場合のパラメタトレース出力例です。？パラメタの指定順に出力されます。

入力パラメタの場合，"*INPRM*"と表示されます。ただし，PDPRMTRC=YESの場合は，"*PARAM*"と表示されます。

繰返し列の場合，ARRAY NUMに繰返し要素数が表示されます。

DATA句の前の数値は，繰返し列の要素ごとの標識変数です。

DATA句の括弧内の数値は，繰返し列の要素番号です。

VARCHAR型の場合，DATAの先頭2バイトはデータ長領域です。PDPRMTRCがYESの場合は，定義長＋データ領域長のサイズ分出力されます。PDPRMTRCがIN，OUT，又はINOUTの場合は，実データ長＋データ領域長のサイズ分出力されます。

標識変数がマイナス値の場合，"DATA="まで表示されます。

データが2行以上続く場合，"--- SAME x LINES ---"が出力されます（xは行数）。ただし，PDPRMTRC=YESの場合は，データがすべて出力されます。

(b)　1行SELECT文の場合

[説明]

PDPRMTRC=INOUT指定時のパラメタトレース出力例です。検索項目の順に検索データ情報が先に出力され，入力パラメタ情報が指定順で後に出力されます。

検索データ情報です。PDPRMTRC=INの場合は出力されません。また，PDPRMTRC=YESの場合は，"*OUTPM*"が"*PARAM*"になります。

入力パラメタ情報です。PDPRMTRC=OUTの場合は出力されません。また，PDPRMTRC=YESの場合は，"*INPRM*"が"*PARAM*"になります。

(c)　ストアドプロシジャの実行（CALL文）の場合

[説明]

INパラメタです。PDPRMTRC=OUTの場合は出力されません。

INOUTパラメタの入力パラメタです。ただし，DATA句の内容は出力データとなります。

OUTパラメタです。PDPRMTRC=IN，又はYESの場合は出力されません。

INOUTパラメタの出力パラメタです。PDPRMTRC=IN，又はYESの場合は出力されません。

(d)　検索（FETCH文）の場合

[説明]

FETCH文のパラメタトレース出力例です。PDPRMTRC=IN，又はYESの場合，パラメタトレースは出力されません。

FETCH文のSQLCODEが0以外の場合，パラメタトレースを出力されません。

(e)　検索（配列を使用したFETCH機能）の場合

[説明]

配列を使用したFETCH機能のパラメタトレース出力例です。PDPRMTRC=IN，又はYESの場合，パラメタトレースは出力されません。

ROW NUMには配列要素数（検索行数）が表示されます。

DATA句の前の数値は配列要素ごとの標識変数です。

DATA句の括弧内の数値は配列要素番号です。

FETCH文のSQLCODEが0以外の場合，サーバから返却された行数分のパラメタトレースが出力されます。

11.1.2　クライアントエラーログ機能

クライアントとHiRDBサーバ間の通信処理中，又はX/Openで規定したXAインタフェースでエラーが発生した場合，エラー情報をクライアントエラーログとしてクライアントエラーログファイルに取得します。

クライアントエラーログファイルは，取得した情報で満杯になると，最も古い情報から順次新しい情報に書き替えられます。

(1)　クライアントエラーログ情報の取得方法

クライアントエラーログは，クライアント環境定義のPDCLTPATH及びPDUAPERLOGに値を設定することで取得できます。各クライアント環境定義については，「クライアント環境定義（環境変数の設定）」を参照してください。

クライアント環境定義で指定した出力先ディレクトリが存在しない，又は書き込み権限がない場合，カレントディレクトリに出力をします。カレントディレクトリにも書き込み権限がない場合は，出力しません。

情報を取得するクライアントエラーログファイルは，指定したディレクトリに二つ作成されます。作成されるファイルは，X/Openに従ったAPI（TX_関数）の使用の有無によって異なります。

X/Openに従ったAPI（TX_関数）の使用の有無と作成されるクライアントエラーログファイルの関係を次の表に示します。

表11‒5　X/Openに従ったAPI（TX_関数）の使用の有無と作成されるクライアントエラーログファイルの関係

TX_関数の使用

作成されるクライアントエラーログファイル

なし

pderr1.trc，及びpderr2.trc

あり

pderr×××××-1.trc，及びpderr×××××-2.trc

（凡例）×××××：UAP実行時のプロセスID

(2)　クライアントエラーログ情報の見方

クライアントエラーログは，SQL文実行時，通信処理時，又はX/Openで規定したXAインタフェース関数実行時でエラーが発生したときに出力されます。

出力されるクライアントエラーログの例とその説明を次に示します。

[出力例]

[説明]

クライアントエラーログ先頭識別子

SQL実行でエラーが発生した場合には'>>'を，それ以外のエラーの場合には'>'を表示します。

UAPのプロセス番号

エラーが発生したUAPのプロセス番号を表示します。

なお，正しいプロセス番号が取得できない場合，不正な数値が表示される場合があります（Windows版の場合）。

UAPのスレッド番号

エラーが発生したUAPがマルチスレッドで動作している場合にUAPのスレッド番号を表示します。マルチスレッドで動作していない場合は0を表示します。正しいスレッド番号が取得できず，不正な数値が表示される場合があります。

サーバのプロセス番号

接続しているサーバのプロセス番号を表示します。

クライアントエラーログカウンタ

クライアントエラーログを受け付けるごとに順次カウントして表示します。

0から65535までカウントできます。

エラー取得日時

クライアントエラーログを取得した日時をYYYY/MM/DD HH：MM：SSの形式で表示します。

ログデータ

障害情報（エラーメッセージ）を表示します。

SQLCODE

クライアントエラーログがUAPに返すSQLCODEに対応している場合に，そのSQLCODEを表示します。

SQLカウンタ

エラーが発生したSQL文のSQLカウンタを表示します。SQLカウンタが6けたの場合，上5けたを表示します。SQLカウンタの詳細については，「SQLトレース機能」の出力例の説明を参照してください。

エラー取得時間

クライアントエラーログを取得した時間をミリ秒単位で表示します。

エラー検出箇所

エラーを検出したソースファイルの名前と行番号を表示します。

オペレーションコード

エラーが発生したSQL文のオペレーションコードを表示します。

(3)　クライアントエラーログファイルのバックアップの取得

クライアントエラーログ情報を出力中にクライアントエラーログファイルの容量が一杯になると，HiRDBはそのファイルへ出力しないで，もう一方のクライアントエラーログファイルにクライアントエラーログ情報を出力します。このとき，切り替え先のクライアントエラーログファイルに格納されている古いクライアントエラーログ情報から順に消去され，新しいクライアントエラーログ情報に書き換えられます。このため，必要な情報はUAP終了時にクライアントエラーログファイルの内容をコピーしてバックアップを取得しておいてください。

なお，現在使用しているクライアントエラーログファイルを知りたい場合は，ファイルの最終更新日時を調べてください。最終更新日時の新しい方が現在使用しているクライアントエラーログファイルになります。

HiRDBクライアントがWindows版の場合はdirコマンド又はエクスプローラで，ファイルの最終更新日時を調べてください。

HiRDBクライアントがUNIX版の場合はOSのls -lコマンドで，ファイルの最終更新日時を調べてください。

11.1.3　拡張SQLエラー情報出力機能

(1)　拡張SQLエラー情報出力機能とは

拡張SQLエラー情報出力機能とは，次の機能のことをいいます。

クライアントエラーログ機能の情報（JDBC4.0のType4 JDBCドライバの場合は，Exceptionトレースログのログファイル）に，SQL文，及びパラメタ情報を出力する（クライアントエラーログ機能の情報に，SQL文，及びパラメタ情報を加えた情報をSQLエラー情報といいます）。

サーバ側にもSQLエラー情報を出力する（SQLエラー情報を出力するファイルをSQLエラーレポートファイルといいます）。

(2)　利点

SQLエラー情報の一元管理

SQLエラーとなった場合，クライアント側だけではなくサーバ側にもSQLエラー情報を出力します。複数のクライアントのSQLエラー情報を，1サーバのSQLエラーレポートファイルに出力するため，SQLエラー情報を一元管理できます。

SQL文及びパラメタ情報の出力

エラーとなったSQL文，及びパラメタ情報を出力します。これらの情報から，エラーとなったSQLを調査できます。

(3)　使用方法

拡張SQLエラー情報出力機能を使用する場合，次のシステム定義，又はクライアント環境定義を設定します。

拡張SQLエラー情報出力機能の使用有無

pd_uap_exerror_log_useオペランド，又はPDUAPEXERLOGUSEを設定します。HiRDB全体に対して指定する場合はpd_uap_exerror_log_useオペランドを，アプリケーションごとに指定する場合はPDUAPEXERLOGUSEを指定します。

SQLエラーレポートファイルの出力先ディレクトリと最大容量

SQLエラーレポートファイルの出力先ディレクトリは，pd_uap_exerror_log_dirオペランドで設定します。また，SQLエラーレポートファイルの最大容量はpd_uap_exerror_log_sizeオペランドで設定します。

クライアントエラーログファイル及びSQLエラーレポートファイルに出力するパラメタ情報の最大データ長

pd_uap_exerror_log_param_sizeオペランド，又はPDUAPEXERLOGPRMSZを設定します。HiRDB全体に対して指定する場合はpd_uap_exerror_log_param_sizeオペランドを，アプリケーションごとに指定する場合はPDUAPEXERLOGPRMSZを指定します。

(4)　SQLエラー情報の見方

(a)　SQLエラーレポートファイルの出力形式

SQLエラーレポートファイルの出力形式を次に示します。

［出力形式］

** UAP ERROR INFORMATION aa....aa bbbbbbbbbbbbbbbbbbbbbbbbbb ** [1]

* UAP INFORMATION * [2]
  UAP_NAME(cc....cc) USERID(dd....dd)
  IPADDR(ee....ee) CLTPID(ff....ff) THRDID(gg....gg)
  START_TIME(hhhhhhhhhhhhhhhhhhh)

* SERVER INFORMATION * [3]
  HOST(ii....ii) PORT(jj....jj) PLATFORM(kk....kk)
  SVRNAME(ll....ll) SVRPID(mm....mm)

* SQL INFORMATION * [4]
  OPTIMIZE_LEVEL(nn....nn) ADDITIONAL_OPTIMIZE_LEVEL(oo....oo)
  ISOLATION_LEVEL(pp....pp)

CNCTNO     SQL-       OP   SEC  SQL   SQL   OP   ERROR
           COUNTER    CODE NO   CODE  WARN  TION COUNTER
---------- ---------- ---- ---- ----- ----- ---- -----
rrrrrrrrrr ssssssssss tttt uuuu vvvvv wwwww xxxx yyyyy

START-TIME      END-TIME        EXEC-TIME
--------------- --------------- -----------------
zzzzzzzzzzzzzzz AAAAAAAAAAAAAAA          BB....BB

* SQL MESSAGE * [5]
  "CC....CC" [DD....DD]

* SQL STATEMENT * [6]
  "EE....EE"

* PARAMETER * [7]
*ELM NO= FFFFF*
*GGGGG* NO=HHHHH COD=III XDIM=JJJJJ SYS=KKKKK LEN=LLLLLLLLLLL IND=MMMMMMMMMMM
          ARRAY NUM=NNNNN
        DATA=OO....OO

［説明］

SQLエラーレポートファイルのタイトル

UAP情報

サーバ情報

SQL情報

SQLメッセージ

SQL文

パラメタ情報

aa....aa：

HiRDBのバージョンを次の形式で出力します（出力文字数は最大8バイト）。

"vv-rr-zz"

-zzがない場合，-zzは出力されません。

bbbbbbbbbbbbbbbbbbbbbbbbbb：

エラー情報を出力した日時を次の形式で出力します（出力文字数は最大26バイト）。

"YYYY/MM/DD hh:mm:ss.uuuuuu"

YYYY：年

MM：月

DD：日

hh：時

mm：分

ss：秒

uuuuuu：マイクロ秒※

cc....cc：

クライアント環境定義PDCLTAPNAMEで指定したUAPの名称を出力します（出力文字数は最大30バイト）。

dd....dd：

コネクトしたユーザの認可識別子を出力します（出力文字数は最大30バイト）。

ee....ee：

UAPのIPアドレスを出力します（出力文字数は最大15バイト）。

ff....ff：

UAPのプロセス番号を表示します（出力文字数は最大10バイト）。

正しいプロセス番号を取得できない場合，不正な数値が表示されることがあります（Windows版の場合）。

gg....gg：

UAPがマルチスレッドで動作している場合，UAPのスレッド番号を表示します（出力文字数は最大11バイト）。マルチスレッドで動作していない場合は0を表示します。

正しいスレッド番号が取得できない場合，不正な数値が表示されることがあります。また，クライアントのバージョンが07-01以前の場合，"*"を出力します。

hhhhhhhhhhhhhhhhhhh：

UAPを実行した時刻を次の形式で出力します（出力文字数は最大19バイト）。

"YYYY/MM/DD hh:mm:ss"

YYYY：年

MM：月

DD：日

hh：時

mm：分

ss：秒

ii....ii：

サーバプロセスが動作しているホストの名称を出力します（出力文字数は最大30バイト）。

jj....jj：

サーバプロセスの通信ポート番号を出力します（出力文字数は最大5バイト）。

kk....kk：

クライアントライブラリが対応しているプラットフォームを出力します（出力文字数は最大6バイト）。

出力内容については，「SQLトレース情報の見方」のUAPが動作しているプラットフォームを参照してください。なお，クライアントのバージョンが07-01以前の場合，"*"を出力します。

ll....ll：

シングルサーバ又はフロントエンドサーバのサーバ名を出力します（出力文字数は最大8バイト）。

mm....mm：

サーバプロセスのプロセス番号を出力します（出力文字数は最大10バイト）。

nn....nn：

SQL最適化オプションの値を10進数形式で出力します（出力文字数は最大10バイト）。

oo....oo：

SQL拡張最適化オプションの値を10進数形式で出力します（出力文字数は最大10バイト）。

pp....pp：

データ保証レベルの値を出力します（出力文字数は最大10バイト）。

rrrrrrrrrr：

サーバがCONNECTを受け付けるごとに順次カウントするコネクト通番を出力します（出力文字数は最大10バイト）。コネクト通番は右詰めで出力し，余白には半角スペースが入ります。

ssssssssss：

SQL文を受け付けるごとにカウントするSQLカウンタを出力します（出力文字数は最大10バイト）。SQLカウンタは右詰めで出力し，余白には半角スペースが入ります。

tttt：

SQLに対応するオペレーションコードを出力します（出力文字数は最大4バイト）。

uuuu：

SQLに対応するセクション番号を出力します（出力文字数は最大4バイト）。セクション番号は右詰めで出力し，余白には半角スペースが入ります。制御系SQL実行時にエラーが発生した場合，"****"を出力します。

vvvvv：

SQLを実行した結果のSQLCODEを出力します（出力文字数は最大5バイト）。SQLCODEは右詰めで出力し，余白には半角スペースが入ります。

wwwww：

警告情報を16進数形式で出力します（出力文字数は最大5バイト）。SQLWARN0〜SQLWARNFの警告情報に，それぞれ左から1ビットを割り当て，警告フラグが設定されているものは1，設定されていないものは0とします。これを4けたの16進数の値として出力します。一つ以上の警告フラグが設定されている場合は先頭に"W"を，設定された警告フラグがない場合は"-"を付けます。例を次に示します。

（例）

xxxx：

システムが使用する情報を出力します（出力文字数は最大4バイト）。

1バイト目が"M"の場合，プロセス間メモリ通信機能を使用していることを示します。ほかの3バイトは，保守用の情報です。ただし，クライアントのバージョンが07-01以前の場合は，"****"を出力します。

yyyyy：

クライアントエラーログファイルに出力する同じSQL文に対応するクライアントエラーログカウンタの値を出力します（出力文字数は最大5バイト）。

この値は右詰めで出力し，余白には半角スペースが入ります。

ただし，クライアントのバージョンが07-01以前の場合は，"*****"を出力します。

zzzzzzzzzzzzzzz：

クライアントからSQL実行要求を受けた時刻を，次の形式で出力します（出力文字数は最大15バイト）。

"hh:mm:ss.uuuuuu"

hh：時

mm：分

ss：秒

uuuuuu：マイクロ秒

AAAAAAAAAAAAAAA：

クライアントからの要求に対する処理が終了した時刻を，次の形式で出力します（出力文字数は最大15バイト）。

"hh:mm:ss.uuuuuu"

hh：時

mm：分

ss：秒

uuuuuu：マイクロ秒※

BB....BB：

クライアントからの要求に対する処理時間を，次の形式で出力します（出力文字数は最大17バイト）。秒は右詰めで出力し，余白には半角スペースが入ります。

"ssssssssss.uuuuuu"

ssssssssss：秒

uuuuuu：マイクロ秒※

CC....CC：

SQL実行中に発生したメッセージを出力します（出力文字数は最大254バイト）。

DD....DD：

システムが使用する情報を出力します（出力文字数は最大21バイト）。

EE....EE：

SQL文を出力します（出力文字数は最大2000000バイト）。

SQL文中に注釈（コメント）やSQL最適化指定を記述している場合，それらも含めて出力します。制御系SQL実行時にエラーとなった場合，"*"を出力します。注釈，及びSQL最適化指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

FFFFF：

配列を使用したSQLでエラーが発生した場合，その要素の番号を出力します（出力文字数は最大5バイト）。

GGGGG：

入力用パラメタ情報の場合はINPRM，出力用パラメタ情報の場合はOUTRMを出力します。また，入出力用パラメタ情報の場合，入力情報はINPRM，出力情報はOUTRMを出力します（出力文字数は最大5バイト）。

HHHHH：

パラメタ番号を出力します（出力文字数は最大5バイト）。

III：

データ型コードを出力します（出力文字数は最大3バイト）。

JJJJJ：

配列要素数を出力します（出力文字数は最大5バイト）。

KKKKK：

ギャップを含む1要素の領域の長さを出力します（出力文字数は最大5バイト）。

LLLLLLLLLLL：

データの長さを出力します（出力文字数は最大11バイト）。

MMMMMMMMMMM：

標識変数の値を出力します（出力文字数は最大11バイト）。

NNNNN：

繰返し列を含む場合，繰返し列の要素数を出力します（出力文字数は最大5バイト）。繰返し列を含まない場合は出力されません。

OO....OO：

パラメタ情報を出力します（出力文字数はpd_uap_exerror_log_param_sizeオペランドの指定値）。パラメタ情報には入力用パラメタ情報，出力用パラメタ情報，及び入出力用パラメタ情報があります。パラメタ情報についての規則を次に示します。

入力用パラメタがBLOB型の位置付け子，又はBINARY型の位置付け子の場合，BLOB型の位置付け子，又はBINARY型の位置付け子の値を出力します。

標識変数がマイナスの値の場合，"DATA="まで出力します。

パラメタ情報が複数ある場合，パラメタ情報の指定順に出力します。

同様のデータが2行以上続く場合，"--- SAME x LINES ---"（xが行数）を出力します。

パラメタ情報は，実データ長＋データ領域長サイズ分出力します。

繰返し列の場合，ARRAY NUMに繰返し列の要素数を出力します。

繰返し列の場合，"DATA"の前に繰返し要素ごとの標識変数を出力します。

繰返し列の場合，"DATA"の後に括弧付きで繰返し列の要素番号を出力します。

注※

PDUAPEXERLOGUSEを省略し，pd_uap_exerror_log_useがAUTOの場合，「uuuuuu：マイクロ秒」を出力しません。

(b)　クライアントエラーログファイルの出力形式

拡張SQLエラー情報出力機能を使用した場合の，クライアントエラーログファイルの出力形式を次に示します。

［出力形式］

>  8355     0  8393     9 2005/08/12 14:06:30 KFPZ03000-I Error information, type=CONNECT STATUS,
 inf=CLT=07-02(Aug  4 2005):WS SVR=07-02   US:WS LIBTYPE=UNIX_32
>  8355     0  8393    10 2005/08/12 14:06:30 KFPZ03000-I Error information, type=SQL STREAM,
 inf=insert into t1 values ( ? , ? ,? )
>> 8355     0  8393    11 2005/08/12 14:06:30 SQLCODE:-404    47(140630218) sqaexp0.c   :2348 AUX
 KFPA11404-E Input data too long for column or assignment target in variable 3
 UAP userprog1,hiuser01 [1]
 SVR host03,1146,sds,hp [2]
 SQLINF 1034,1,2,7,17,-0000,0000,14:06:30.216463,14:06:30.217765,0.001302 [3]
 SQL INSERT INTO T1 VALUES(?,?,?) [4]
 PRM [5]
 INPRM 1,f1,1,0,4,0
         DATA=00 00 ff ff                                       *....            *
 INPRM 2,c1,10,258,255,9
         ARRAY NUM=    9
       0 DATA(    0)=00 01 61                                          *..a             *
       0 DATA(    1)=00 02 61 62                                       *..ab            *
       0 DATA(    2)=00 03 61 62 63                                    *..abc           *
       0 DATA(    3)=00 04 61 62 63 64                                 *..abcd          *
       0 DATA(    4)=00 05 61 62 63 64 65                              *..abcde         *
       0 DATA(    5)=00 06 61 62 63 64 65 66                           *..abcdef        *
       0 DATA(    6)=00 07 61 62 63 64 65 66 67                        *..abcdefg       *
       0 DATA(    7)=00 08 61 62 63 64 65 66 67 68                     *..abcdefgh      *
      -1 DATA(    8)=
 INPRM 3,93,1,0,32002,0
         DATA=00 00 00 00 00 00 7d 02 41 41 41 41 41 41 41 41   *......}.AAAAAAAA*
              41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41   *AAAAAAAAAAAAAAAA*
              --- SAME 14 LINES ---

［説明］

1.UAP情報

UAP名称：

クライアント環境定義PDCLTAPNAMEで指定したUAPの名称を出力します。

認可識別子：

コネクトしたユーザの認可識別子を出力します。

2.サーバ情報

ホスト名：

サーバプロセスが動作しているホストの名称を出力します。

ポート番号：

サーバプロセスの通信ポート番号を出力します。

サーバ名：

シングルサーバ又はフロントエンドサーバのサーバ名を出力します。

プラットフォーム：

クライアントライブラリが対応しているプラットフォームを出力します。

出力内容については，「SQLトレース情報の見方」のUAPが動作しているプラットフォームを参照してください。なお，クライアントのバージョンが07-01以前の場合，"*"を出力します。

3.SQL情報

SQL最適化オプション：

SQL最適化オプションの値を10進数形式で出力します。

SQL拡張最適化オプション：

SQL拡張最適化オプションの値を10進数形式で出力します。

データ保証レベル：

データ保証レベルの値を出力します。

コネクト通番：

サーバがCONNECTを受け付けるごとに順次カウントするコネクト通番を出力します。

セクション番号：

SQLに対応するセクション番号を出力します。

SQLWARN：

警告情報を16進数形式で出力します。SQLWARN0〜SQLWARNFの警告情報に，それぞれ左から1ビットを割り当て，警告フラグが設定されているものは1，設定されていないものは0とします。これを4けたの16進数の値として出力します。一つ以上の警告フラグが設定されている場合は先頭に"W"を，設定された警告フラグがない場合は"-"を付けます（例については，「SQLエラーレポートファイルの出力形式」のwwwwwを参照してください）。

システム情報：

システムが使用する情報を出力します。

1バイト目が"M"の場合，プロセス間メモリ通信機能を使用していることを示します。ほかの3バイトは，保守用の情報です。ただし，クライアントのバージョンが07-01以前の場合は，"****"を出力します。

SQL開始時刻：

クライアントからSQL実行要求を受けた時刻を，次の形式で出力します。

"hh:mm:ss.uuuuuu"

hh：時

mm：分

ss：秒

uuuuuu：マイクロ秒※

SQL終了時刻：

クライアントからの要求に対する処理が終了した時刻を，次の形式で出力します。

"hh:mm:ss.uuuuuu"

hh：時

mm：分

ss：秒

uuuuuu：マイクロ秒※

SQL実行時間：

クライアントからの要求に対する処理時間を，次の形式で出力します。秒は右詰めで出力し，余白には半角スペースが入ります。

"ssssssssss.uuuuuu"

ssssssssss：秒

uuuuuu：マイクロ秒※

4.SQL文

SQL文：

SQL文を出力します。

SQL文中に注釈（コメント）やSQL最適化指定を記述している場合，それらも含めて出力します。出力するSQL文のサイズは，クライアント環境定義のPDSQLTEXTSIZEの指定値になります。

制御系SQL実行時にエラーとなった場合，SQL文は取得できません。この場合，"*"を出力します。

注釈，及びSQL最適化指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

5.パラメタ情報

ELM NO：

配列を使用したSQLでエラーが発生した場合，その要素の番号を出力します。

パラメタ情報種別：

入力用パラメタ情報の場合はINPRM，出力用パラメタ情報の場合はOUTRMを出力します。また，入出力用パラメタ情報の場合，入力情報はINPRM，出力情報はOUTRMを出力します。

NO：

パラメタ番号を出力します。

COD：

データ型コードを出力します。

XDIM：

配列要素数を出力します。

SYS：

ギャップを含む1要素の領域の長さを出力します。

LEN：

データの長さを出力します。

IND：

標識変数の値を出力します。

ARRAY NUM：

繰返し列を含む場合，繰返し列の要素数を出力します。繰返し列を含まない場合は出力されません。

DATA：

パラメタ情報を出力します。

パラメタ情報には入力用パラメタ情報，出力用パラメタ情報，及び入出力用パラメタ情報があります。

パラメタ情報についての規則を次に示します。

入力用パラメタがBLOB型の位置付け子，又はBINARY型の位置付け子の場合，BLOB型の位置付け子，又はBINARY型の位置付け子の値を出力します。

標識変数がマイナスの値の場合，"DATA="まで出力します。

パラメタ情報が複数ある場合，パラメタ情報の指定順に出力します。

同様のデータが2行以上続く場合，"--- SAME x LINES ---"（xが行数）を出力します。

パラメタ情報は，実データ長＋データ領域長サイズ分出力します。

繰返し列の場合，ARRAY NUMに繰返し列の要素数を出力します。

繰返し列の場合，"DATA"の前に繰返し要素ごとの標識変数を出力します。

繰返し列の場合，"DATA"の後に括弧付きで繰返し列の要素番号を出力します。

注※

PDUAPEXERLOGUSEを省略し，pd_uap_exerror_log_useがAUTOの場合，「uuuuuu：マイクロ秒」を出力しません。

(5)　SQLエラーレポートファイルについての規則

SQLエラーレポートファイルについての規則を次に示します。なお，SQLエラーレポートファイルを参照する場合は，テキストエディタなどを使用してください。

SQLを実行し，エラーの発生を検知するたびにSQLエラーレポートファイルのオープン，SQLエラー情報の書き込み，クローズをします。SQLエラーレポートファイルの最終位置から追加書き込みをするため，SQLエラー情報はファイル内で時系列順に蓄積されます。

SQLエラーレポートファイルは二つ作成されます（pduaperrlog1及びpduaperrlog2）。現在書き込んでいるファイルのサイズが，システム定義のpd_uap_exerror_log_sizeオペランドの指定値を超えた場合に，もう一方のファイルに出力先を切り替えます。切り替わったファイルでも，これを繰り返しながら二つのファイルを交互に使用します（切り替え先の古い内容は削除されます）。HiRDB開始後は，ファイルの最終更新日付の新しい方が出力先となります。

SQL終了後は，SQLエラーレポートファイルはクローズしているため，SQLが実行されていないときにOSのコマンドを利用してバックアップを取得したり，ファイルを参照したりできます。また，SQL実行中であっても出力先でないもう一方のファイルはバックアップ取得やファイルの参照ができます。

現在使用中のSQLエラーレポートファイルは，OSのdirコマンド（UNIXの場合はls -lコマンド）でファイルの最終更新日付を調べることで知ることができます。このとき，最終更新日時の新しい方が現在使用中のSQLエラーレポートファイルとなります。

(6)　注意事項

PDUAPEXERLOGUSE，又はpd_uap_exerror_log_useにYESを指定して拡張SQLエラー情報出力機能を使用すると，SQLエラー情報を出力しない場合でも，SQLの開始時間と実行時間を採取するためにシステムコールを実行する時間が必要になります。性能への影響を最小限にしたい場合は，PDUAPEXERLOGUSEを省略し，pd_uap_exerror_log_useをAUTOにしてください。

クライアントエラーログファイル又はSQLエラーレポートファイルへの出力時にOSがエラーを検知した場合（ファイルシステム障害，ファイルの書き込み権限がないなど），クライアントエラーログファイル又はSQLエラーレポートファイルにSQLエラー情報は出力されません。

拡張SQLエラー情報出力機能を使用すると，パラメタ情報を出力するためのメモリが必要になります。

11.1.4　UAP統計レポート機能

UAP実行時のUAP統計レポートをUAP統計レポートファイルに出力します。

(1)　UAP統計レポートの取得方法

UAP統計レポートは，クライアント環境定義のPDCLTPATH，PDSQLTRACE，及びPDUAPREPLVLに値を設定すると取得できます。

UAP統計レポートファイルの出力先及びファイル名について説明します。

出力先

PDCLTPATHで指定したディレクトリ下に二つ出力されます。PDREPPATHを指定すると，PDCLTPATHで指定したディレクトリとは別のディレクトリに出力されます。

ファイル名

出力ファイル名は「SQLトレース機能」を参照してください。

取得する情報は，クライアント環境定義のPDUAPREPLVLで設定できます。複数のレベルを設定した場合，指定したレベルに対応する複数の情報が取得できます。PDUAPREPLVLの指定値と取得する情報の関係を次の表に示します。

表11‒6　PDUAPREPLVLの指定値と取得する情報の関係

PDUAPREPLVLの指定値

取得する情報

SQL単位の情報

UAP単位の情報※1

アクセスパス情報

SQL実行時の中間結果情報

右記以外の情報

スレッド間ロック待ち時間情報

s※2

○

−

−

−

−

u

−

○

−

−

−

uo

−

○

○

−

−

p

−

−

−

○

−

r

−

−

−

−

○

a又はsupr

○

○

−

○

○

ao又はsuopr

○

○

○

○

○

（凡例）

○：情報が取得されます。

−：情報が取得されません。

注※1

tを指定した場合は，UAP単位の情報をトランザクション単位に集計して出力します。

注※2

sを指定した場合は，SQLトレース情報も取得されます。

注意事項

アクセスパス情報，又はSQL実行時の中間結果情報を取得する場合，SQLオブジェクトがバッファ中にあってもSQLオブジェクトを再作成するため，サーバの負荷が増えることがあります。

スレッド間ロック待ち時間情報を取得する場合，システム全体の性能に影響を与えるおそれがあります。通常の運用ではスレッド間ロック待ち時間情報を取得しないでください。

次の場合は，UAP単位の情報は出力されません。

・OLTP下のX/Openに従ったAPIを使用するプログラムの場合

・DISCONNECTをしないでUAPが終了した場合

アクセスパス情報，及びSQL実行時の中間結果情報は，1ギガバイトを超えると出力されません。

時間の表示（SQLの実行時間，排他待ち時間，CPU時間など）は，OSのシステムコールで取得できない小さい値があると，0が表示されます。

HiRDB/パラレルサーバの場合，CONNECTしたディクショナリサーバでの権限チェック処理は，UAP単位の情報には含まれません。

アクセスパス情報，又はSQL実行時の中間結果情報の出力を指定して，プロセス間メモリ通信機能を指定した場合（クライアント環境定義PDIPC=MEMORYを指定した場合），PDIPCの指定は無効となりPDIPC=DEFAULTとなります。

SQLトレースファイルの容量

SQLトレースファイルの容量は，次の計算式から求められます。なお，SQL文長は環境変数PDSQLTEXTSIZEで変更できます。

SQLトレースファイルの容量
　＝3208＋A＋80×オペレーション数＋SQL文長(最大4096)の総和
　　（単位：バイト）

A：

クライアント環境定義のPDHOST，PDFESHOST，PDSQLOPTLVL，PDADDITIONALOPTLVL，PDREPPATH，及びPDTRCPATHの指定文字列長の合計

また，SQL単位情報，UAP単位情報，アクセスパス情報，及びSQL実行時の中間結果情報を出力する場合は，次のサイズ（単位：バイト）も加算してください。

SQL単位情報：

83※×SQL数

UAP単位情報：

2740※×DISCONNECT数

アクセスパス情報：

「アクセスパス情報」を参照してください。

SQL実行時の中間結果情報：

「SQL実行時の中間結果情報」を参照してください。

注※

最大値です。表示するけた数で値は変わります。

(2)　UAP統計レポートの見方

出力されるUAP統計レポートの例を次に示します。また，その説明を(a)〜(d)に示します。

[クライアント環境定義PDSQLTRCFMTに1を指定した出力例（出力形式1）]

 CNCT  CLPID  CLTID  NO  OP    SEC  SQL   SQL    START-TIME    END-TIME      OP
 NO                      CODE  NO   CODE  WARN                               TION
 ----  -----  -----  --  ----  ---  ----  -----  ------------  ------------  ----
    1   9155      0   1  CNCT    0     0  WC040  16:03:55.720  16:03:58.080  0001
    1   9155      0   2  AUI2    1     0  -0000  16:03:58.630  16:03:59.400  0000

*SQL*  INSERT INTO T1(C1,C2,C3,C4,C5,C6) VALUES(?,?,?,?,?,?)
00:00:00.770    00:00:00.430000    340    1    0    0    0    0    0 ........(a)
    [1]               [2]          [3]   [4]  [5]  [6]  [7]  [8]  [9]

    1   9155      0   3  SET     2     0  -0000  16:04:00.820  16:04:01.540  0000
*SQL*  SELECT * from T1, T2, T3 where ((T1.C1='a' and T1.C2='A')
 or (T1.C1='a' and T1.C2='B')) and T1.C1=T2.C1 and T1.C2=T2.C2 and T2.C3>=1995
 and T1.C1=T3.C1 and T1.C2=T3.C2 order by T1.C1

00:00:00.720    00:00:00.240000    480    1     0    0    0

Result of SQL Optimizer :   .........................................(b)
 Connect No     :   1
 --------------------------------------------------------------------------------
 Section No     : 2
 UAP Source     :XXXXXXXX.ec
 Optimize Mode  : COST_BASE_2
 SQL Opt Level  : 0x00000420(1056) = "PRIOR_NEST_JOIN"(32),"RAPID_GROUPING"(1024)
 Add Opt Level  : 0x00000003(3) = "COST_BASE_2"(1),"APPLY_HASH_JOIN"(2)
 Work Table     : 0
 Total Cost     : 12672.66944
 ----- QUERY EXPRESSION BODY ID : 1 -----
              :
 ----- QUERY ID : 1 -----
              :
 JOIN
   :
 SCAN
   :

 --------------------------------------------------------------------------------

    1   9155      0   4  OPEN    2     0  -0000  16:04:02.090  16:04:02.800  0000
Result of SQL Execution :   .........................................(c)
--------------------------------------------------------------------------------
Connect No     :    1
UAP Source     : XXXXXXXX.ec
Section No     : 2
----- QUERY EXPRESSION BODY ID : 1 -----
   :
----- QUERY ID : 1 -----
   :
JOIN
   :
SCAN
   :
--------------------------------------------------------------------------------

    1   9155      0   9  DISC    0     0  -0000  16:05:55.110  16:05:56.660  0004

UAP INFORMATION:   .................................................(d)
 [1]UAPNAME()
 [2]SVHOST(dcm3500) [3]SVPORT(4439)  [4]SVNAME(fes1)   [5]CNCTNO(1)
 [6]SVPID(8945)     [7]CLPID(9155)     [8]CLTTID(0)
 [9]WAITT(0)       [10]CTIME(0)
 [11]ROREQ(0)      [12]ROHITS(0)
 [13]SOREQ(10)     [14]SOHITS(3)   [15]SOCRT(0)       [16]SOMAX(0)
 [17]COMT(0)       [18]ROLB(0)     [19]FROW(0)    [20]DROW(0)     [21]IROW(3)
 [22]UROW(0)       [23]SET(1)     [24]OPEN(2)     [25]FETC(1)     [26]CLOS(0)
 [27]DESC(0)       [28]SEL(1)     [29]INS(3)      [30]UPD(0)      [31]DEL(0)
 [32]LOCK(0)      [33]CRTT(0)     [34]DRPT(0)     [35]ALTT(0)     [36]CRTI(0)
 [37]DRPI(0)     [38]CMTT(0)      [39]CMTC(0)     [40]CRTS(0)     [41]DRPS(0)
 [42]GRTR(0)     [43]GRTS(0)      [44]GRTA(0)     [45]GRTC(0)     [46]GRTD(0)
 [47]RVKR(0)     [48]RVKS(0)      [49]RVKA(0)     [50]RVKC(0)     [51]RVKD(0)
 [52]CRTV(0)     [53]DRPV(0)      [54]PRGT(0)     [55]CRTP(0)     [56]DRPP(0)
 [57]ALTP(0)     [58]CALL(0)      [59]DESI(0)     [60]MISC(0)
 [61]MAXIO(0)    [62]MAXIOM(0)    [63]MINIO(0)    [64]MINIOM(0)
 [65]IOTIM(0)    [66]IOTIMM(0)
 [67]DIDRC(0)    [68]DIDUC(0)     [69]DIDHC(0)    [70]DIDRD(0)    [71]DIDWT(0)
 [72]LBRFC(0)    [73]LBUPC(0)     [74]LBRHC(0)    [75]LBUHC(0)    [76]LBRDC(0)
 [77]LBWTC(0)    [78]BFSHC(2320)  [79]BRDWC(0)    [80]BWTWC(50)
 [81]BLKWC(2)    [82]MWFN(0)      [83]MWFEC(0)    [84]MWFVL(0)
 [85]WFRDC(0)    [86]WFWTC(0)     [87]WBFOC(0)
 [88]MWHTS(0)    [89]MBSL1(0)     [90]MBSL2(0)    [91]MBSL3(0)
 [92]SCHSKD(0)   [93]SCHCHG(0)
 [94]CINSM(0)    [95]CAFLS(0)     [96]CAFWR(0)    [97]CFMAX(0)    [98]CFAVG(0)
 [99]LDIRC(0)   [100]LDIUC(0)    [101]LDIHC(0)   [102]LDIRD(0)
[103]LDIWT(0)   [104]LBFSHC(0)
[105]ARREQ(0)   [106]ARWC(0)     [107]ARWT(0)    [108]ARWTM(0)
[109]ARWTA(0)   [110]ARWTMA(0)   [111]ARSTA(0)   [112]ARSTMA(0)
[113]HJMAX(0)   [114]HJCMC(0)    [115]HJHTC(0)
[138]LCKCTC(0)  [139]LCKCWC(0)  [140]LCKCWT(0)  [141]LCKCTM(0)
[142]LCKCWQ(0)  [143]LCKCQM(0)  [144]JNLFTC(0)  [145]JNLFWC(0)
[146]JNLFWT(0)  [147]JNLFTM(0)  [148]JNLFWQ(0)  [149]JNLFQM(0)
[150]BUFHTC(0)  [151]BUFHWC(0)  [152]BUFHWT(0)  [153]BUFHTM(0)
[154]BUFHWQ(0)  [155]BUFHQM(0)
[156]TUSEG(0)
[157]COMPC(0)  [158]COMPT(0)  [159]COMPTM(0)
[160]CMPMT(0)  [161]CMPMTM(0)
[162]EXTEC(0)  [163]EXTET(0)  [164]EXTETM(0)
[165]EXTMT(0)  [166]EXTMTM(0)

[クライアント環境定義PDSQLTRCFMTに2を指定した出力例（出力形式2）（1/2）]

CNCT  CLPID      CLTID      NO     OP   SEC  SQL      SQL   START-TIME              END-TIME                OP     EXEC-TIME   TRACE     PREPROCESS FILE                PREPROCESS  SQL INFORMATION↓
NO                                 CODE NO   CODE     WARN                                                  TION               OUTPUT                                   TIME        SQL EXEC-TIME   SVR EXEC-TIME   DIFF        EXEC   CREATE DELETE SQLOBJ HJCMP  HJSCH↓
                                                                                                                               TIME                                                                                             COUNT  COUNT  COUNT  SIZE   COUNT  COUNT↓  [a]
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　[1]             [2]             [3]         [4]    [5]    [6]    [7]    [8]    [9]
----- ---------- ---------- ------ ---- ---- -------- ----- ----------------------- ----------------------- ------ ----------- --------- ------------------------------ ----------- --------------- --------------- ----------- ------ ------ ------ ------ ------ ------↓
   10       2764       3968      1 CNCT    0        0 -0000 2013/11/13 15:20:14.538 2013/11/13 15:20:14.569 000000       35502         * *                                        *↓
   10       2764       3968      5 AUI2    4        0 -0000 2013/11/13 15:20:14.928 2013/11/13 15:20:14.944 000000       23362        44 test.ec                         1384327820 00:00:00.023362 00:00:00.016000        7362      1      0      0   2624      0      0↓
     *SQL* INSERT INTO T1 VALUES(100)↓
     *SQLLEN* 26↓
   10       2764       3968      8 SET     6        0 -0000 2013/11/13 15:20:14.959 2013/11/13 15:20:14.959 000000         578         1 test.ec                         1384327820 00:00:00.000578 00:00:00.000000         578      0      0      0   3024      0      0↓
     *SQL* SELECT * FROM T1↓
     *SQLLEN* 16↓
Result of SQL Optimizer :↓  [b]
Connect No     :   10↓
--------------------------------------------------------------------------------↓
Section No     : 4097↓
UAP Source     : test.ec↓
Optimize Mode  : COST_BASE_2↓
SQL Opt Level  : 0x000a07a0(657312) = "PRIOR_NEST_JOIN"(32),"PRIOR_OR_INDEXES"(128),"SORT_DATA_BES"(256),"DETER_AND_INDEXES"(512),"RAPID_GROUPING"(1024),"DETER_WORK_TABLE_FOR_UPDATE"(131072),"APPLY_ENHANCED_KEY_COND"(524288)↓
Add Opt Level  : 0x00000001(1) = "COST_BASE_2"(1)↓
Work Table     : 0↓
Total Cost     : 22023.06397924731↓
----- QUERY ID : 1 -----↓
Query Type     : QUERY↓
SCAN↓
 # Table Name  : T1 0x0002007a(131194)↓
   Cost        : N (10000000ROW)  {T-21865.88711410221}↓
   RDAREA      : NON DIVISION  (1RD/1BES) [0x07(7)] ALL↓
   Scan Type   : TABLE SCAN↓
--------------------------------------------------------------------------------↓
START-TIME : 2013/11/13 15:20:14.959↓
END-TIME   : 2013/11/13 15:20:14.959↓

   10       2764       3968     12 OPEN   10        0 -0000 2013/11/13 15:20:14.959 2013/11/13 15:20:14.959 000000           8          0 test.ec                         1384327820↓
     *EXCURSOL* CUR1↓
   10       2764       3968     13 FETC   11        0 -0000 2013/11/13 15:20:14.959 2013/11/13 15:20:14.975 000000       11287         21 *                                        * 00:00:00.011287 00:00:00.016000           0      1      0      0      0      0      0↓
     *EXCURSOL* CUR1↓
   10       2764       3968     14 CLOS   12        0 -0000 2013/11/13 15:20:14.975 2013/11/13 15:20:14.975 000000         269          0 test.ec                         1384327820 00:00:00.000269 00:00:00.000000         269      0      0      0      0      0      0↓
     *EXCURSOL* CUR1↓
Result of SQL Execution :↓  [c]
--------------------------------------------------------------------------------↓
Connect No     :   10↓
UAP Source     : test.ec↓
Section No     : 4097↓
----- QUERY ID : 1 -----↓
Query          : 1 ROWS↓
SCAN↓
 # Table Name  : T1 0x0002007a(131194) ↓
   Row Count   : 1 ROWS↓
--------------------------------------------------------------------------------↓
START-TIME : 2013/11/13 15:20:14.975↓
END-TIME   : 2013/11/13 15:20:14.975↓

[クライアント環境定義PDSQLTRCFMTに2を指定した出力例（出力形式2）（2/2）]

10       2764       3968     19 DISC    0        0 -0000 2013/11/13 15:20:14.991 2013/11/13 15:20:14.991 000000         434          0 *                                        *↓
UAP INFORMATION :↓  [d]
[1]UAPNAME(Unknown)↓
[2]SVHOST(k00b701) [3]SVPORT(22210) [4]SVNAME(fes1) [5]CNCTNO(10)↓
[6]SVPID(2836) [7]CLPID(2764) [8]CLTTID(3968)↓
[9]WAITT(0) [10]CTIME(0)↓
[11]ROREQ(0) [12]ROHITS(0 ↓
[13]SOREQ(0) [14]SOHITS(0) [15]SOCRT(3) [16]SOMAX(3024)↓
[17]COMT(2) [18]ROLB(0) [19]FROW(1) [20]DROW(0) [21]IROW(1)↓
[22]UROW(0) [23]SET(2) [24]OPEN(1) [25]FETC(1) [26]CLOS(1)↓
[27]DESC(1) [28]SEL(0) [29]INS(1) [30]UPD(0) [31]DEL(0)↓
[32]LOCK(0) [33]CRTT(1) [34]DRPT(1) [35]ALTT(0) [36]CRTI(0)↓
[37]DRPI(0) [38]CMTT(0) [39]CMTC(0) [40]CRTS(0) [41]DRPS(0)↓
[42]GRTR(0) [43]GRTS(0) [44]GRTA(0) [45]GRTC(0) [46]GRTD(0)↓
[47]RVKR(0) [48]RVKS(0) [49]RVKA(0) [50]RVKC(0) [51]RVKD(0)↓
[52]CRTV(0) [53]DRPV(0) [54]PRGT(0) [55]CRTP(0) [56]DRPP(0)↓
[57]ALTP(0) [58]CALL(0) [59]DESI(1) [60]MISC(0)↓
[61]MAXIO(0)  [62]MAXIOM(0)  [63]MINIO(0)  [64]MINIOM(0)↓
[65]IOTIM(0)  [66]IOTIMM(0)↓
[67]DIDRC(0)  [68]DIDUC(0)  [69]DIDHC(0)  [70]DIDRD(0)  [71]DIDWT(0)↓
[72]LBRFC(0)  [73]LBUPC(0)  [74]LBRHC(0)  [75]LBUHC(0)  [76]LBRDC(0)↓
[77]LBWTC(0)  [78]BFSHC(2320)  [79]BRDWC(0)  [80]BWTWC(50)↓
[81]BLKWC(2)  [82]MWFN(0)  [83]MWFEC(0)  [84]MWFVL(0)↓
[85]WFRDC(0)  [86]WFWTC(0)  [87]WBFOC(0)↓
[88]MWHTS(0)  [89]MBSL1(0)  [90]MBSL2(0)  [91]MBSL3(0)↓
[92]SCHSKD(0)  [93]SCHCHG(0)↓
[94]CINSM(0)  [95]CAFLS(0)  [96]CAFWR(0)  [97]CFMAX(0)  [98]CFAVG(0)↓
[99]LDIRC(0)  [100]LDIUC(0)  [101]LDIHC(0)  [102]LDIRD(0)↓
[103]LDIWT(0)  [104]LBFSHC(0)↓
[105]ARREQ(0)  [106]ARWC(0)  [107]ARWT(0)  [108]ARWTM(0)↓
[109]ARWTA (0)  [110]ARWTMA (0)  [111]ARSTA (0)  [112]ARSTMA (0)↓
[113]HJMAX(0)  [114]HJCMC(0)  [115]HJHTC(0)↓
[138]LCKCTC(0)  [139]LCKCWC(0)  [140]LCKCWT(0)  [141]LCKCTM(0)↓
[142]LCKCWQ(0)  [143]LCKCQM(0)  [144]JNLFTC(0)  [145]JNLFWC(0)↓
[146]JNLFWT(0)  [147]JNLFTM(0)  [148]JNLFWQ(0)  [149]JNLFQM(0)↓
[150]BUFHTC(0)  [151]BUFHWC(0)  [152]BUFHWT(0)  [153]BUFHTM(0)↓
[154]BUFHWQ(0)  [155]BUFHQM(0)↓
[156]TUSEG(0)↓
[157]COMPC(0)  [158]COMPT(0)  [159]COMPTM(0)↓
[160]CMPMT(0)  [161]CMPMTM(0)↓
[162]EXTEC(0)  [163]EXTET(0)  [164]EXTETM(0)↓
[165]EXTMT(0)  [166]EXTMTM(0)↓
START-TIME : 2013/11/13 15:20:14.991↓
END-TIME   : 2013/11/13 15:20:14.991↓

（凡例）

↓：出力例（出力形式2）での1行の末尾を示します。実際に出力するファイルでは表示しません。

(a)　SQL単位の情報

SQL実行時間（単位：マイクロ秒）

SQLの実行時間を，HH:MM:SS.mmmmmmの形式で表示します。クライアント環境定義PDSQLEXECTIMEにNOを指定した場合，単位はミリ秒となります。

サーバ側でのSQL実行時間（単位：マイクロ秒）

サーバ側でのSQLの実行時間を，HH:MM:SS.mmmmmmの形式で表示します。

1-2の差分（単位：マイクロ秒）

通信処理の時間の目安となります。クライアント環境定義PDSQLEXECTIMEにNOを指定した場合，単位はミリ秒となります。

処理行数

この接続中に発行したSQL文で処理した，行数を表示します。

作業表作成回数

この接続中に発行したSQL文の内部処理で作成した，作業表の作成回数を表示します。

作業表削除回数

この接続中に発行したSQL文の内部処理で削除した，作業表の削除回数を表示します。

SQLオブジェクトサイズ（単位：バイト）

この接続中に発行したSQL文で作成した，SQLオブジェクトの大きさを表示します。

ハッシュジョイン，副問合せのハッシュ実行でのハッシュ表探索時の総比較回数

この接続中に発行したSQL文での，ハッシュ表探索時の同一ハッシュ値を持つデータに対する比較回数の合計です。

ハッシュジョイン，副問合せのハッシュ実行での総ハッシュ表探索回数

この接続中に発行したSQL文で，ハッシュ表を探索した回数です。

(b)　アクセスパス情報

アクセスパス情報を表示します。Connect Noには，コネクト通番を表示します。コネクト通番を基に上方向にサーチすることで，SQLトレース情報中に表示されているSQL文を特定できます。動的SQLの場合はコネクト通番を基に下方向に，静的SQLの場合はコネクト通番を基に上方向にサーチすることで，SQLトレース情報中に表示されているSQLの実行要求開始時間，及び終了時間が分かります。また，SQL単位の情報を取得すると，SQL実行時間が表示されます。SQL実行時間が長いSQLがある場合は，チューニングを実施してください。

UAP統計レポートでアクセスパス情報を表示する場合，HiRDBのバージョン，バックエンドサーバ数，UAP名称，認可識別子，SQL最適化処理をした時間，及びSQL文は表示しません。ただし，ルーチン中に操作系SQLを指定した場合，SQL文に操作系SQLを表示します。

また，HiRDB/シングルサーバの場合に，アクセスパスがSELECT-APSL（複数のアクセスパスから，境界値によって実行時にアクセスパスを選択する）となるときは，最初に境界値の情報を表示し，後ろにSection Noで区切られた候補を複数表示します。

アクセスパス情報については，マニュアル「HiRDB コマンドリファレンス」のアクセスパス表示ユティリティを参照してください。

●アクセスパス情報出力時のSQL実行開始，終了時刻

［出力形式］

START-TIME : YYYY/MM/DD hh:mm:ss.fff....1
END-TIME   : YYYY/MM/DD hh:mm:ss.fff....2

［説明］

アクセスパス情報出力時に実行していたSQLの実行開始時刻を表示します。

アクセスパス情報出力時に実行していたSQLの実行終了時刻を表示します。

●注意事項

外部Javaストアドルーチンの実行では，アクセスパス情報は表示されません。

SQLルーチンの実行では，ルーチン内で使用している表に対して，インデクスの追加又は削除でSQLオブジェクトのインデクス情報が無効になった場合，アクセスパス情報を表示します。

アクセスパス情報を表示すると，SQLトレースファイルの容量が増えます。増加するアクセスパス情報の容量は，次の計算式から求められます。ただし，表定義，インデクス定義，及びSQLでアクセスパス情報の容量は変わるため，計算式の結果は一応の目安としてください。

(c)　SQL実行時の中間結果情報

SQL実行時の中間結果情報を表示します。

SQL実行時の中間結果情報を表示した場合，次の情報を確認できます（ここで表示される行数は，各中間段階で実際にHiRDBが処理した行数となります）。

一時表の格納先RDエリア名，及び一時インデクスの格納先RDエリア名

表から取り出した行数

インデクスで絞り込まれた行数

結合ごとの結果の行数

問合せに指定した重複排除，GROUP BY，ORDER BY，及びLIMITの入出力の行数，並びに問合せの結果の行数

集合演算ごとの結果の行数

このSQL実行時の中間結果情報とアクセスパス情報を使用して，SQLのチューニングを実施してください。なお，アクセスパス情報を使用したSQLのチューニングについては，マニュアル「HiRDB コマンドリファレンス」のアクセスパス表示ユティリティを参照してください。

[出力形式]

 -------------------------------------------------------
Connect No     : aa...a
UAP Source     : bb...b
Section No     : cc...c
 ----- INSERT : ... -----   ...............................1
  :
 ----- QUERY EXPRESSION BODY ID : ... -----   .............2
  :
 ----- QUERY ID : ... -----   .............................3
  :
 JOIN   ...................................................4
  :
 SCAN   ...................................................5
  :

[説明]

一時表行挿入情報

一時表行挿入情報については，「●一時表行挿入情報」を参照してください。

集合演算情報

集合演算情報については，「●集合演算処理情報」を参照してください。

問合せ処理情報

問合せ処理情報については，「●問合せ処理情報」を参照してください。

結合処理情報

結合処理情報については，「●結合処理情報」を参照してください。

実表検索処理情報

実表検索処理情報については，「●実表検索処理情報」を参照してください。

aa...a：

コネクト通番が表示されます。

bb...b：

UAPソースファイル名が表示されます。

cc...c：

セクション番号（SQL の対応を確認するための番号）が表示されます。

Connect No以降の情報は，SQLの個数分繰り返して表示されます。コネクト通番とセクション番号でサーチすることで，SQLトレース情報中に表示されているSQL文やアクセスパス情報と対応付けることができます。

●一時表行挿入情報

一時表挿入情報を次に示します。

 ----- INSERT : ----------
# Table Name  : aa...a 0xbbbbbbbb(bb...b) IN cc...c
  Index Name  : dd...d 0xeeeeeeee(ee...e)IN ff...f
  Index Name  : dd...d 0xeeeeeeee(ee...e)IN ff...f
  Index Name  : dd...d 0xeeeeeeee(ee...e)IN ff...f
                       :

[説明]

aa...a：

挿入対象となる一時表の表名が表示されます。

0xbbbbbbbb(bb...b)：

挿入対象となる一時表の表IDが16進数（10進数）で表示されます。

cc...c：

一時表を格納したRDエリア名が表示されます。

dd...d：

一時インデクス名が表示されます。

0xeeeeeeee(ee...e)：

一時インデクスのインデクスIDが16進数（10進数）で表示されます。

ff...f：

一時インデクスを格納したRDエリア名が表示されます。

dd...d，ee...e，ff...fは定義したすべてのインデクスの情報が表示されます。

●集合演算処理情報

集合演算処理情報を次に示します。

----- QUERY EXPRESSION BODY ID : aa...a -----
Query          : bb...b ROWS
Limit          : cc...c ROWS <-- dd...d ROWS
Order by       : ee...e ROWS
SetOpe Process : ff...f = gg...g ROWS <-- hh...h ii...i hh...h
                       :

[説明]

aa...a：

問合せ式本体IDが表示されます。

集合演算を含む問合せ式本体単位に番号を付けます。SQLが複数の問合せ式本体で構成される場合，この行で区切って情報が表示されます。

「アクセスパス情報」を表示している場合，アクセスパス情報で表示されている問合せ式本体IDに対応しています。

bb...b：

問合せ式の結果の行数が表示されます。

cc...c ROWS <-- dd...d ROWS：

最終的に，リミット行数分の検索結果を取得する処理（LIMIT処理）の行数が表示されます。

LIMIT句を指定していない場合，この行は表示されません。

cc...c：

LIMIT処理の出力行数が表示されます。

dd...d：

LIMIT処理の入力行数が表示されます。

ee...e：

ソート処理（ORDER BY処理）の行数が表示されます。

次のどれかに該当する場合，この行は表示されません。

ORDER BY句を指定していない。

ORDER BY句で指定したソート処理が省略される。

LIMIT句を指定している。

ff...f = gg...g ROWS <-- hh...h ii...i hh...h：

集合演算の結果の行数が表示されます。

集合演算を複数指定した場合，複数行に分けて表示されます。

UNION ALLの分割スキャンをする機能（作業表を作成しないで各問合せの検索結果を連続して返す）を適用した場合，この行は表示されません。

ff...f：

集合演算結果の集合演算番号が，"LID（集合演算番号）"で表示されます。

アクセスパス情報を表示している場合，アクセスパス情報で表示されている集合演算番号に対応しています。

gg...g：

集合演算結果の行数が表示されます。

hh...h：

演算する問合せ式本体が問合せ指定の場合，"QID(問合せID)"が表示されます。演算する問合せ式本体が複数の問合せ指定の結合結果の場合，"LID(集合演算番号)"が表示されます。

ii...i：

集合演算の種別（"UNION"，"UNION ALL"，"EXCEPT"，又は"EXCEPT ALL"）が表示されます。前後のhh...hは，演算する問合せ式本体となります。

●問合せ処理情報

問合せ処理情報を次に示します。

 ----- QUERY ID : aa...a -----
 Query          : bb...b ROWS
 Limit          : cc...c ROWS <-- dd...d ROWS
 Order by       : ee...e ROWS
 Distinct       : ff...f ROWS <-- gg...g ROWS
 Having         : hh...h ROWS
 Group by       : ii...i ROWS <-- jj...j ROWS

[説明]

aa...a：

問合せIDが表示されます。

問合せ指定に番号を付けます。SQLが複数の問合せ指定で構成される場合，この行で区切って情報が表示されます。

アクセスパス情報を表示している場合，アクセスパス情報で表示されている問合せIDに対応しています。

bb...b：

問合せの結果の行数が表示されます。

cc...c ROWS <-- dd...d ROWS：

最終的に，リミット行数分の検索結果を取得する処理（LIMIT処理）の行数が表示されます。

LIMIT句を指定していない場合，この行は表示されません。

cc...c：

LIMIT処理の出力行数が表示されます。

dd...d：

LIMIT処理の入力行数が表示されます。

ee...e：

ソート処理（ORDER BY処理）の行数が表示されます。ORDER BY句を指定していない場合でも，暗黙的にORDER BY処理をすることがあります。

次のどれかに該当する場合，この行は表示されません。

ORDER BY句を指定していない。

ORDER BY句で指定したソート処理が省略される。

暗黙的にORDER BY処理をしない。

LIMIT句を指定している。

ff...f ROWS <-- gg...g ROWS：

重複排除処理の処理行数が表示されます。重複排除を指定していない場合でも，暗黙的に重複排除処理をすることがあります。

次のどれかに該当する場合，この行は表示されません。

重複排除を指定していない。

暗黙的に重複排除処理をしない。

LIMIT句を指定している。

ff...f：

重複排除処理の出力行数が表示されます。

gg...g：

重複排除処理の入力行数が表示されます。

hh...h：

HAVING句を評価した後の行数が表示されます。

HAVING句を指定していない場合，この行は表示されません。

ii...i ROWS <-- jj...j ROWS：

グループ分け処理（暗黙的グループ分け処理を含む）の処理行数が表示されます。

グループ分け処理をしない場合，この行は表示されません。

ii...i：

グループ分け処理の出力行数が表示されます。

jj...j：

グループ分け処理の入力行数が表示されます。

●結合処理情報

結合処理情報を次に示します。

 JOIN
  # Join ID     : aa...a
    Row Count   : bb...b ROWS
    Left        : cc...c ROWS
    Right       : dd...d ROWS
    Join Type   : ee...e(ff...f)

[説明]

aa...a：

結合処理IDが表示されます。

結合処理単位で番号を付け，結合処理が複数ある場合にはこの行で区切られます。

アクセスパス情報を表示している場合，アクセスパス情報で表示されている結合処理IDに対応しています。

bb...b：

結合処理の結果の行数が表示されます。

cc...c：

左側の結合相手から取り出した行数が表示されます。

dd...d：

右側の結合相手から取り出した行数が表示されます。

ee...e：

HiRDB/シングルサーバの場合，又はHiRDB/パラレルサーバでSQL実行時に結合方式を動的に決定しない場合

結合処理の種別（"MERGE JOIN"，"NESTED LOOPS JOIN"，"CROSS JOIN"，又は"HASH JOIN"）が表示されます。

HiRDB/パラレルサーバでSQL実行時に結合方式を動的に決定する場合

結合処理の種別"SELECT-APSL"が表示されます。

ff...f：

結合処理の実行種別（"INNER"，"LEFT OUTER"，"EXIST"，"NOT EXIST"，"ALL"，又は"VALUE"）が表示されます。

●実表検索処理情報

実表検索処理情報を次に示します。

インデクスを使用しない，又は一つだけ使用して検索する場合

 SCAN
  # Table Name  : aa...a(aa...a) 0xbbbbbbbb(bb...b)
    Row Count   : cc...c ROWS
    Index Name  : dd...d 0xeeeeeeee(ee...e)
                      Search    : ff...f gg...g
                      Key       : hh...h gg...g

[説明]

aa...a(aa...a)：

検索対象となる表名（相関名）が表示されます。

相関名を使用していない場合，（相関名）は表示されません。検索処理が複数ある場合，この行で区切って情報が表示されます。

0xbbbbbbbb(bb...b)：

検索対象となる表IDが16進数（10進数）で表示されます。

cc...c：

実表から取り出した行数が表示されます。

dd...d：

検索で使用するインデクス名が表示されます。

次の場合，この行は表示されません。

インデクスを使用しないで検索する。

HiRDB/パラレルサーバでSQL実行時に検索方法を動的に決定する。

0xeeeeeeee(ee...e)：

検索で使用するインデクスIDが16進数（10進数）で表示されます。

ff...f：

サーチ条件で絞り込まれた結果の行数が表示されます。

サーチ条件がない場合でも，インデクスを使用した検索のときは，インデクスを構成している行数が表示されます。

なお，プラグインインデクスのサロゲート機能を使用して集合関数の結果を求めている合，この行は表示されません。

gg...g：

繰返し列を含むインデクスの場合，"ELEMENTS"が表示されます。それ以外の場合，"ROWS"が表示されます。

hh...h：

キー条件で絞り込まれた結果の行数が表示されます。

キー条件がない場合，この行は表示されません。

インデクスを二つ以上使用して検索する場合

 SCAN
  # Table Name  : aa...a(aa...a) 0xbbbbbbbb(bb...b)
    Row Count   : cc...c ROWS
    Index Name  : dd...d = ee...e 0xffffffff(ff...f)
                        Search    : gg...g hh...h
                        Key       : ii...i hh...h
                        Row Count : jj...j ROWS
                  dd...d = ee...e 0xffffffff(ff...f)
                        Search    : gg...g hh...h
                        Key       : ii...i hh...h
                        Row Count : jj...j ROWS
                  dd...d = kk...k ROWS <-- ll...l mm...m ll...l

[説明]

aa...a(aa...a)：

検索対象となる表名（相関名）が表示されます。

相関名を使用していない場合，（相関名）は表示されません。検索処理が複数ある場合，この行で区切って情報が表示されます。

0xbbbbbbbb(bb...b)：

検索対象となる表IDが16進数（10進数）で表示されます。

cc...c：

実表から取り出した行数が表示されます。

dd...d：

AND PLURAL INDEXES SCAN※のときに作成する作業表番号が，"LID(作業表番号)"で表示されます。

アクセスパス情報を表示している場合，アクセスパス情報で表示されている作業表番号に対応しています。

ee...e：

AND PLURAL INDEXES SCAN※，又はOR PLURAL INDEXES SCAN※の場合，作業表を作成するために使用するインデクス名が複数行表示されます。ただし，インデクスを使用しないで作成する作業表については，インデクス名に"(NO USE)"が表示されます。

0xffffffff(ff...f)：

検索で使用するインデクスIDが16進数（10進数）で表示されます。

gg...g：

サーチ条件で絞り込まれた結果の行数が表示されます。

サーチ条件がない場合でも，インデクスを使用した検索のときは，インデクスを構成している行数が表示されます。

hh...h：

繰返し列を含むインデクスの場合，"ELEMENTS"が表示されます。それ以外の場合，"ROWS"が表示されます。

ii...i：

キー条件で絞り込まれた結果の行数が表示されます。

キー条件がない場合，この行は表示されません。

jj...j：

実表から取り出した行数が表示されます。

dd...d = kk...k ROWS <-- ll...l mm...m ll...l：

AND PLURAL INDEXES SCAN※時の作業表の作成順序が表示されます。インデクスを三つ以上使用して検索する場合，複数行で表示されます。

kk...k：

演算結果の行数が表示されます。

ll...l：

演算をするための入力となる作業表が"LID(作業表番号)"で表示されます。

mm...m：

作業表間の演算の種別（"AND"，"OR"，又は"ANDNOT"）が表示されます。

注※

AND PLURAL INDEXES SCAN，及びOR PLURAL INDEXES SCANについては，マニュアル「HiRDB コマンドリファレンス」のアクセスパス表示ユティリティを参照してください。

ビュー表の結果を検索するために作業表を作成する場合

 SCAN
  # Table Name  : aa...a(aa...a) 0xbbbbbbbb(bb...b)
    Row Count   : cc...c ROWS

[説明]

aa...a(aa...a)：

ビュー名（相関名）が表示されます。

相関名を使用していない場合，（相関名）は表示されません。

0xbbbbbbbb(bb...b)：

ビューIDが16進数（10進数）で表示されます。

cc...c：

表から取り出した行数が表示されます。

WITH句のために作業表を作成する場合

 SCAN
  # Table Name  : aa...a(aa...a)
    Row Count   : bb...b ROWS

[説明]

aa...a(aa...a)：

WITH句問合せ名（相関名）が表示されます。

相関名を使用していない場合，（相関名）は表示されません。

bb...b：

表から取り出した行数が表示されます。

FROM句に指定した導出表のために作業表を作成する場合

 SCAN
  # Table Name  : aa...a(aa...a)
    Row Count   : bb...b ROWS

[説明]

aa...a(aa...a)：

"(NO NAME)"，又は"(NO NAME)(相関名)"が表示されます。

bb...b：

表から取り出した行数が表示されます。

HiRDBが内部的に作成する作業表を検索する場合

 SCAN
  # Table Name  : aa...a
    Row Count   : bb...b ROWS

[説明]

aa...a：

HiRDBが内部的に作成する作業表名が表示されます。

HiRDBが内部的に作成する作業表名は，"(DUMMY 作業表番号)"となります。

作業表番号は3けたの整数です。

bb...b：

HiRDBが内部的に作成する，作業表から取り出した行数が表示されます。

中間結果情報出力時のSQL実行開始，終了時刻

[出力形式]

START-TIME : YYYY/MM/DD hh:mm:ss.fff....1
END-TIME   : YYYY/MM/DD hh:mm:ss.fff....2

[説明]

中間結果情報出力時に実行していたSQLの実行開始時刻を表示します。

中間結果情報出力時に実行していたSQLの実行終了時刻を表示します。

注意事項：

次のSQLを実行した場合，SQL実行時の中間結果情報が表示されます。

定義系SQL※１

ASSIGN LIST文※５

CLOSE文

DELETE文

EXECUTE文※１

EXECUTE IMMEDIATE文※２

INSERT文※３

PREPARE文※４

PURGE TABLE文※１

1行SELECT文

UPDATE文

COMMIT文※１

DISCONNECT文※１

ROLLBACK文※１

暗黙的ロールバックありのエラーが発生した場合※１

注※1

閉じていないカーソルがある場合，SQL実行時の中間結果情報が表示されます。

注※2

次のSQLの場合，SQL実行時の中間結果情報が表示されます。

・ASSIGN LIST文

・DELETE文

・INSERT文

・UPDATE文

注※3

VALUES句にスカラ副問合せ，又は問合せ指定を指定した場合，SQL実行時の中間結果情報が表示されます。

注※4

クライアント環境定義PDPRPCRCLSにYESを指定していて，かつ開いているカーソルで使用しているSQL識別子を再度PREPRARE文で使用する場合，開いていたカーソルのSQL実行時の中間結果情報が表示されます。

注※5

FOR ALTER LISTを指定した場合，SQL実行時の中間結果は表示されません。

ストアドプロシジャに記述したSQLについては，CALL文を実行してもSQL実行時の中間結果情報は表示されません。

トリガに記述したトリガSQLについては，トリガが実行されてもSQL実行時の中間結果情報は表示されません。

HiRDB/パラレルサーバの場合，各サーバの合計行数が表示されます。

表示される行数は正確な値でないことがあります。

SQL実行時の中間結果情報を表示すると，SQLトレースファイルの容量が次の式で示す容量分増えます。SQLトレースファイルの見積もり時には注意してください。ただし，表定義，インデクス定義，及びSQLによって，中間結果情報の容量は大きく変わります。次の式で見積もった値は，ある程度の目安にしてください。

SQL実行時の中間結果情報容量
                               n
  ＝0.8＋0.1×集合演算数＋0.9×Σ (Si)  （単位：キロバイト）
                              i=1

ｎ：SQL文中の問合せ指定数

Si：i番目の問合せ指定中の表数

(d)　UAP単位の情報及びTRANSACTION単位の情報

出力する情報の単位は，次の情報から判断してください。

UAP INFORMATION：UAP単位（コネクション単位）の情報

TRANSACTION INFORMATION：TRANSACTION単位の情報

UAP名

統計情報を編集したUAPの名称です。

ホスト名

接続したサーバのホスト名です。

ポート番号

接続したサーバのポート番号です。

接続サーバ名

接続したフロントエンドサーバ又はシングルサーバのサーバ名です。

コネクト通番

サーバがCONNECTを受け付けるごとに，順次カウントする通番です。

サーバプロセス番号

接続したサーバのプロセス番号です。

クライアントプロセス番号

UAPのプロセス番号です。Type4 JDBCドライバから接続している場合は，0を表示します。

クライアントスレッド番号

マルチスレッドで動作しているUAPのスレッド番号です。Type4 JDBCドライバから接続している場合は，0を表示します。

排他待ち時間（単位：ミリ秒）※１

サーバ内で発生した排他取得要求に対して，ほかのユーザが排他を取得しているため排他取得待ちとなった時間です。

CPU時間（単位：ミリ秒）※１

UAP実行時のトランザクション中に使用した，サーバ側のCPU稼働時間です。

ストアドプロシジャのSQLオブジェクト取得要求回数

シングルサーバ又はフロントエンドサーバで，SQLオブジェクト用バッファに対して，ストアドプロシジャのSQLオブジェクトの取得要求をした回数です。

ストアドプロシジャオブジェクトバッファヒット回数

シングルサーバ又はフロントエンドサーバで，SQLオブジェクト用バッファから情報が見つかった回数です。

SQLオブジェクト取得要求回数

発行したSQL文に対して，SQLオブジェクトの取得要求をした回数です。

SQLオブジェクトバッファヒット回数

発行したSQL文に対して，取得要求をしたSQLオブジェクト用バッファで情報が見つかった回数です。

SQLオブジェクト作成回数

発行したSQL文に対して，SQLオブジェクトを作成した回数です。

作成したSQLオブジェクトサイズの最大値（単位：バイト）

発行したSQL文で作成した，SQLオブジェクトサイズの最大値です。

COMMIT文の実行回数

ROLLBACK文の実行回数

FETCH文，SELECT文の実行で，UAPに返した検索行数

DELETE文の実行で，削除した行数

INSERT文の実行で，挿入した行数

UPDATE文の実行で，更新した行数

前処理実行回数

OPEN文実行回数

FETCH文実行回数

CLOSE文実行回数

DESCRIBE文（OUTPUT）実行回数

SELECT文実行回数

INSERT文実行回数

UPDATE文実行回数

DELETE文実行回数

LOCK文実行回数

CREATE TABLE実行回数

DROP TABLE実行回数

ALTER TABLE実行回数

CREATE INDEX実行回数

DROP INDEX実行回数

COMMENT（TABLE）実行回数

COMMENT（COLUMN）実行回数

CREATE SCHEMA実行回数

DROP SCHEMA実行回数

GRANT RDAREA実行回数

GRANT SCHEMA実行回数

GRANTアクセス権限実行回数

GRANT CONNECT実行回数

GRANT DBA実行回数

REVOKE RDAREA実行回数

REVOKE SCHEMA実行回数

REVOKEアクセス権限実行回数

REVOKE CONNECT実行回数

REVOKE DBA実行回数

CREATE VIEW実行回数

DROP VIEW実行回数

PURGE TABLE文実行回数

CREATE PROCEDURE実行回数

DROP PROCEDURE実行回数

ALTER PROCEDURE実行回数

CALL文実行回数

DESCRIBE文（INPUT）実行回数

そのほかのSQLの実行回数

最大入出力時間（単位：秒）

最大入出力時間（単位：マイクロ秒）（秒値は含まれません）

最小入出力時間（単位：秒）

最小入出力時間（単位：マイクロ秒）（秒値は含まれません）

入出力時間が妥当かどうか検証してください。必要以上に時間が掛かっている場合はハード障害の可能性があるのでハードログを取得して検証してください。

非同期READ機能を使用した場合は，非同期READプロセスでの一括先読みの入出力時間は含まれません。

データベースに対する入出力時間の累計（単位：秒）

データベースに対する入出力時間の累計（単位：マイクロ秒）（秒値は含まれません）

原因が入出力なのか，又はCPUなのかの判断に使用してください。

非同期READ機能を使用した場合は，非同期READプロセスでの一括先読みの入出力時間は含まれません。

データ，インデクス，及びディレクトリページを参照した回数

データ，インデクス，及びディレクトリページを参照した回数が分かります。

データ，インデクス，及びディレクトリページを更新した回数

データ，インデクス，及びディレクトリページを更新した回数が分かります。

データ，インデクス，及びディレクトリページのバッファヒット回数

データ，インデクス，及びディレクトリページのバッファヒット回数が分かります。ヒット率（項番69÷項番67）×100が低い場合は，グローバルバッファの統計を取得して，ヒット率の悪いグローバルバッファのチューニングをしてください。チューニング対象となるのは，LOB用以外のグローバルバッファです。

データ，インデクス，及びディレクトリページの実READ回数

データ，インデクス，及びディレクトリページを実READした回数が分かります。

プリフェッチ機能を使用している場合は，プリフェッチで先読みしたREAD回数も含まれます。また，非同期READ機能を使用した場合は，非同期READプロセスで先読みしたREAD回数も含まれます。

バッファヒット率が悪いと，READ回数も多くなります。

データ，インデクス，及びディレクトリページの実WRITE回数

データ，インデクス，及びディレクトリページを実WRITEした回数が分かります。コミット出力機能を使用している場合は，コミット時にデータベースへ反映するために出力した回数もカウントされます。

LOBページを参照した回数

LOBページを参照した回数が分かります。LOBデータ，及びプラグインの検索はここにカウントされます。

LOBページを更新した回数

LOBページを更新した回数が分かります。LOBデータ，及びプラグインの更新はここにカウントされます。

LOBページの参照バッファヒット回数

LOB用のグローバルバッファを使用している場合，参照バッファヒット回数が分かります。ヒット率（項番74÷項番72）×100が低い場合は，グローバルバッファの統計を取得してグローバルバッファのチューニングをしてください。チューニング対象となるのは，LOB用のグローバルバッファです。LOB用のグローバルバッファを使用していない場合は，ヒット率は0になります。

LOBページの更新バッファヒット回数

LOB用のグローバルバッファを使用している場合，更新バッファヒット回数が分かります。LOBデータの更新，又はプラグインインデクスの更新でヒット率（項番75÷項番73）×100が低い場合は，グローバルバッファの統計を取得してグローバルバッファのチューニングをしてください。チューニング対象となるのは，LOB用のグローバルバッファです。LOB用のグローバルバッファを使用していない場合は，ヒット率は0になります。また，LOBデータの新規追加では更新バッファヒットはしません。

LOBページの実READ回数

LOBページを実READした回数が分かります。LOB用のグローバルバッファを使用している場合は，READバッファヒット率が低いとREAD回数も多くなります。

LOBページの実WRITE回数

LOBページを実WRITEした回数が分かります。プラグインインデクスを更新する場合は，LOB用のグローバルバッファを使用することで実WRITE回数を削減できます。

グローバルバッファフラッシュ回数

新たなページを入力する空きバッファを作成するために，バッファを無効にした回数です。バッファ満杯によってページをメモリから追い出した回数が分かります。※２

グローバルバッファのREAD待ち発生回数

バッファ上のページが，ほかのユーザによってHiRDBファイルからの入力中であったため，待ち状態になった回数です。他UAPがREAD中のページに対してページ参照要求があり，READ完了まで待ちになった回数が分かります。※２

グローバルバッファのWRITE待ち発生回数

バッファ上のページが，ほかのユーザによってHiRDBファイルへの出力中であったため，待ち状態になった回数です。WRITE中のページに対してページ更新要求があり，WRITE完了まで待ちになった回数が分かります。※２

グローバルバッファの排他待ち発生回数

バッファ上のページが，ほかのユーザによって使用中であったため，待ち状態になった回数です。他UAPが更新中のページに対してページの参照又は更新要求があり，他UAPの更新完了まで待ちになった回数が分かります。※２

最大作業表用ファイル数

作業表用ファイルの最大使用数です。※３

作業表用ファイル用のHiRDBファイルシステム領域を作成する，pdfmkfsコマンドの-lオプション（最大ファイル数）の指定値の妥当性をチェックできます。-lオプション指定値は次の式を満たしている必要があります。※４

-lオプション指定値
≧同時に実行するUAPのすべての作業表用ファイル数の合計値＋20

最大作業表用ファイル増分回数

作業表用ファイルの最大増分回数です。※３

作業表用ファイル用のHiRDBファイルシステム領域を作成する，pdfmkfsコマンドの-eオプション（最大増分回数）の指定値の妥当性をチェックできます。-eオプション指定値は次の式を満たしている必要があります。※４

-eオプション指定値
≧同時に実行するUAPのすべての作業表用ファイル増分回数の合計値

作業表用ファイルの最大容量（単位：メガバイト）

作業表用ファイルの最大容量です。作業表用ファイル用のHiRDBファイルシステム領域を作成する，pdfmkfsコマンドの-nオプション（最大増分回数）の指定値の妥当性をチェックできます。-nオプション指定値は次の式を満たしている必要があります。※４

-nオプション指定値
　≧同時に実行するUAPのすべての作業表用ファイル最大容量の合計値
　＋HiRDBファイルシステム領域の管理領域サイズ

作業表用ファイルのREAD回数

作業表のデータを，ファイルからバッファへ入力した回数です。※１

作業表用ファイルのWRITE回数

作業表のデータを，バッファからファイルに出力した回数です。※１

作業表用バッファの強制出力回数

作業表用バッファが不足したため，使用中バッファを強制的にファイル出力した回数です。※１

この値が0でない場合，システム定義のpd_work_buff_sizeオペランド（作業表用バッファ長）を大きくしてください。

ハッシュ表を一括して展開するための推定値（単位：キロバイト）

ハッシュジョイン，副問合せのハッシュ実行で，処理したハッシュデータを一括して展開するために必要なハッシュ表サイズの推定値です。※３

ハッシュ表サイズがこの値以上であれば，すべてバケット分割をしない一括ハッシュジョインになります※５。また，この値がハッシュ表サイズの指定範囲を超える場合は，一括ハッシュジョインにはできません。この値が0の場合は，ハッシュジョイン，副問合せのハッシュ実行が行われていません。

1レベル最大バケットサイズ（単位：キロバイト）

ハッシュジョイン，副問合せのハッシュ実行での，1レベルバケット分割後の最大バケットサイズです。※３

ハッシュ表サイズがこの値以上であれば，バケット分割が1レベルで完了しています。また，バケット分割が2レベル以上の場合は，ハッシュ表サイズにこの値を設定することで，バケット分割が1レベルで完了するようになります※６。すべてバケット分割をしない一括ハッシュジョインになった場合，この値は0となります。

2レベル最大バケットサイズ（単位：キロバイト）

ハッシュジョイン，副問合せのハッシュ実行での，2レベルバケット分割後の最大バケットサイズです。※３

ハッシュ表サイズがこの値以上であれば，バケット分割が2レベルで完了しています。また，バケット分割が3レベル以上の場合は，ハッシュ表サイズにこの値を設定することで，バケット分割が2レベルで完了するようになります※６。2レベルバケット分割がされなかった場合，この値は0となります。

3レベル最大バケットサイズ（単位：キロバイト）

ハッシュジョイン，副問合せのハッシュ実行での，3レベルバケット分割後の最大バケットサイズです。※３

ハッシュ表サイズがこの値以上であれば，最大3レベルのバケット分割で，バケット単位に処理されています。ハッシュ表サイズがこの値以下の場合，1バケットを部分的にハッシュ表展開する処理となり，処理効率が悪くなります。この場合，ハッシュ表サイズをこの値以上に設定してください※６。又は，ハッシュジョイン，副問合せのハッシュ実行を適用しないようにした方が性能が良くなる場合があります。3レベルバケット分割がされなかった場合，この値は0となります。

空き領域の再利用のページサーチ空回り回数

新規ページ追加モードから空きページ再利用モードに切り替えたときに，再利用できる空き領域がなく，新規ページ追加モードに戻した回数です。この値が0以外の場合，UAPが実行した更新，挿入処理で効率が悪いページサーチ処理が発生していることが考えられます。空き領域の再利用機能については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

新規ページ追加モードから空きページ再利用モードへのモード切り替え回数

空き領域の再利用機能実行時に，新規ページ追加モードから空きページ再利用モードへ切り替わった回数です。この値がUAPで実行した更新，挿入処理の回数に近い場合，効率が悪いページサーチ処理が発生していることが考えられます。

キャッシュバッファ領域不足発生回数

システムが使用する内部情報

キャッシュバッファ領域割り当てフラッシュ回数

システムが使用する内部情報

キャッシュバッファ領域割り当てフラッシュ時のwrite回数

システムが使用する内部情報

最大キャッシュバッファ領域割り当てフラッシュ回数

システムが使用する内部情報

平均キャッシュバッファ領域割り当てフラッシュ回数

システムが使用する内部情報

ローカルバッファを使用してデータページ，及びインデクスページを参照した回数

データページ，及びインデクスページを参照した回数です。

ローカルバッファを使用してデータページ，及びインデクスページを更新した回数

データページ，及びインデクスページを更新した回数です。

ローカルバッファでのデータページ，及びインデクスページのバッファヒット回数

データページ，及びインデクスページのバッファヒット回数です。

ランダムアクセスするUAPで，バッファヒット率（[101]÷[99]×100）が低い場合は，バッファヒット率の悪いバッファのチューニングをしてください。

ローカルバッファ使用時のデータページ，及びインデクスページの実READ回数

データページ，及びインデクスページを実READした回数です。

プリフェッチ機能を使用している場合は，プリフェッチで先読みしたREAD回数も含まれます。バッファヒット率が悪いとREAD回数も多くなります。

ローカルバッファ使用時のデータページ，及びインデクスページの実WRITE回数

データページ，及びインデクスページを実WRITEした回数です。

ローカルバッファフラッシュ回数

新たなページを入力する空きバッファを作成するために，バッファを無効にした回数（バッファ満杯によって，ページをメモリから追い出した回数）です。

非同期READ要求回数

非同期READ機能使用時，非同期READプロセスで一括先読み処理を要求した回数です。

非同期READ時の同期待ち回数

非同期READ機能使用時，非同期READプロセスで一括先読み処理での同期待ちが発生した回数です。

非同期READ時の同期待ち時間の累計（単位：秒）

非同期READ機能使用時，非同期READプロセスで一括先読み処理での同期待ちが発生した時間の累計です。

非同期READ時の同期待ち時間の累計（単位：マイクロ秒）（秒値は含まれません）

非同期READ機能使用時，非同期READプロセスで一括先読み処理での同期待ちが発生した時間の累計です。

非同期READ時の平均同期待ち時間（単位：秒）

非同期READ機能使用時，非同期READプロセスで一括先読み処理での同期待ちが発生した時間の平均です。

非同期READ時の平均同期待ち時間（単位：マイクロ秒）（秒値は含まれません）

非同期READ機能使用時，非同期READプロセスで一括先読み処理での同期待ちが発生した時間の平均です。

非同期READ時の平均同期入出力時間（単位：秒）

非同期READ機能使用時，初回の先頭ページ一括読み込みでの同期READ時間の平均です。

非同期READ時の平均同期入出力時間（単位：マイクロ秒）（秒値は含まれません）

非同期READ機能使用時，初回の先頭ページ一括読み込みでの同期READ時間の平均です。

ハッシュジョイン，副問合せのハッシュ実行でのハッシュ表探索時の最大比較回数※３

1回のハッシュ表探索時の，同一ハッシュ値を持つデータに対する比較回数の最大値です。

ハッシュジョイン，副問合せのハッシュ実行でのハッシュ表探索時の総比較回数※１

ハッシュ表探索時の，同一ハッシュ値を持つデータに対する比較回数の合計です。

ハッシュジョイン，副問合せのハッシュ実行での総ハッシュ表探索回数※１

ハッシュ表を探索した回数です。

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

欠番

排他制御用プールパーティションのスレッド間ロック要求回数

排他制御用プールパーティションのスレッド間ロック要求回数の総和です。

排他制御用プールパーティションのスレッド間ロック待ち回数

排他制御用プールパーティションのスレッド間ロック待ち回数の総和です。

排他制御用プールパーティションのスレッド間ロック待ち時間の合計値（単位：マイクロ秒）※7※8

排他制御用プールパーティションのスレッド間ロック待ち時間の総和です。

排他制御用プールパーティションのスレッド間ロック待ち時間の最大値（単位：マイクロ秒）※7※8

排他制御用プールパーティションのスレッド間ロック待ち時間の最大値です。

排他制御用プールパーティションのスレッド間ロック待ち行列数の合計値

排他制御用プールパーティションのスレッド間ロック時の待ち行列数の総和です。

排他制御用プールパーティションのスレッド間ロック待ち行列数の最大値

排他制御用プールパーティションのスレッド間ロック待ち行列数の最大値です。

ログフラッシュ要求回数

ログフラッシュ要求回数の総和です。

ログフラッシュ待ち回数

ログフラッシュ待ち回数の総和です。

ログフラッシュ待ち時間の合計値（単位：マイクロ秒）※7※8

のログフラッシュ待ち時間の総和です。

ログフラッシュ待ち時間の最大値（単位：マイクロ秒）※7※8

ログフラッシュ待ち時間の最大値です。

ログフラッシュ待ち行列数の合計値

ログフラッシュ待ち行列数の総和です。

ログフラッシュ待ち行列数の最大値

ログフラッシュ待ち行列数の最大値です。

グローバルバッファプールのスレッド間ロック要求回数

グローバルバッファプールのスレッド間ロック要求回数の総和です。

グローバルバッファプールのスレッド間ロック待ち回数

グローバルバッファプールのスレッド間ロック待ち回数の総和です。

グローバルバッファプールのスレッド間ロック待ち時間の合計値（単位：マイクロ秒）

グローバルバッファプールのスレッド間ロック待ち時間の総和です。※7※8

グローバルバッファプールのスレッド間ロック待ち時間の最大値（単位：マイクロ秒）

グローバルバッファプールのスレッド間ロック待ち時間の最大値です。※7※8

グローバルバッファプールのスレッド間ロック待ち行列数の合計値

グローバルバッファプールのスレッド間ロック待ち行列数の総和です。

グローバルバッファプールのスレッド間ロック待ち行列数の最大値

グローバルバッファプールのスレッド間ロック待ち行列数の最大値です。

一時表を使うSQLを実行した時の使用セグメント数の合計

データ圧縮処理の総実行回数※9

圧縮列へのデータ挿入及び圧縮列のデータを更新する際に発生した，データ圧縮処理の総実行回数です。

データ圧縮処理の総実行時間（単位：秒）※9

データ圧縮処理の総実行時間（単位：マイクロ秒）※9

圧縮列へのデータ挿入及び圧縮列のデータを更新する際に発生した，すべてのデータ圧縮処理に掛かった時間です。

データ圧縮処理の最大実行時間（単位：秒）※9

データ圧縮処理の最大実行時間（単位：マイクロ秒）※9

圧縮列へのデータ挿入及び圧縮列のデータを更新する際に発生した，データ圧縮処理1件ごとに掛かった時間の最大値です。

データ伸張処理の総実行回数※9

圧縮列のデータを検索又は更新する際に発生した，データ伸張処理の実行回数です。

データ伸張処理の総実行時間（単位：秒）※9

データ伸張処理の総実行時間（単位：マイクロ秒）※9

圧縮列のデータを検索又は更新する際に発生した，すべてのデータ伸張処理に掛かった時間です。

データ伸張処理の最大実行時間（単位：秒）※9

データ伸張処理の最大実行時間（単位：マイクロ秒）※9

圧縮列のデータを検索又は更新する際に発生した，データ伸張処理1件ごとに掛かった時間の最大値です。

注※1

HiRDB/パラレルサーバの場合は，各サーバの合計となります。

注※2

すべてのグローバルバッファの合計となります。

注※3

HiRDB/パラレルサーバの場合は，各バックエンドサーバの最大値となります。

注※4

一時的なフラグメンテーションによって，見積もり式以上の資源が必要になる場合があるため，実際の指定値には余裕を持たせてください。

注※5

ハッシュ表サイズを大きくすると，1回のバケット分割数が増加することがあるため，チューニング情報取得時よりも大きなハッシュ表サイズが必要になることがあります。このチューニング情報を基にハッシュ表サイズを大きくした場合は，再度チューニング情報を取得してください。そこで意図した結果になっていない場合，チューニング情報を基に再度ハッシュ表サイズを大きくする必要があります。

注※6

ハッシュ表サイズを大きくすると，1回のバケット分割数が増加することがあるため，チューニング情報取得時より小さいハッシュ表サイズでも，意図したレベルでバケット分割が完了することもあります。これに対して，ハッシュ表サイズを小さくすると，1回のバケット分割数が減少することがあるため，チューニング情報取得時と同じレベルでバケット分割が完了しなくなることがあります。したがって，このチューニング情報は，ハッシュ表サイズを大きくしていく場合に使用するようにしてください。

注※7

次の場合，UAP統計レポートにスレッド間ロック待ち時間が表示されます。

クライアント環境定義PDUAPREPLVLにoを指定した場合

（「PDUAPREPLVL」を参照）

pdclttrcコマンドの-lオプションにoを指定した場合

（マニュアル「HiRDB コマンドリファレンス」を参照）

pdtrcmgrコマンドの-kオプションにoを指定した場合

（「SQLトレース動的取得機能」を参照）

スレッド間ロック待ち時間を取得していない場合は，0が表示されます。

注※8

CPU時間の精度は，使用しているOS，及びハードウェアに依存します。したがって，CPU時間の精度が1ミリ秒より大きい環境の場合，実際の値より小さい値が表示されることがあります。

注※9

この項目はBINARY型のデータに対する情報です。

UAP単位情報及びトランザクション単位情報出力時のSQL実行開始，終了時刻

[出力形式]

START-TIME : YYYY/MM/DD hh:mm:ss.fff....1
END-TIME   : YYYY/MM/DD hh:mm:ss.fff....2

[説明]

UAP単位情報/トランザクション単位情報出力時に実行していたSQLの実行開始時刻を表示します。

UAP単位情報/トランザクション単位情報出力時に実行していたSQLの実行終了時刻を表示します。

11.1.5　コマンドトレース機能

UAPからのコマンド実行時（SQLのCOMMAND EXECUTE実行時）に，クライアントのトレース情報をコマンドトレースファイルに出力します。

コマンドトレースファイルが取得情報で満杯になると，最も古い情報から順次新しい情報に書き替えられます。

(1)　コマンドトレース情報の取得方法

コマンドトレースは，クライアント環境定義のPDCLTPATH及びPDCMDTRACEに値を設定することで取得できます。各クライアント環境定義については，「クライアント環境定義（環境変数の設定）」を参照してください。

pdccmd1.trcとpdccmd2.trcという名称の二つのコマンドトレースファイルが，指定したディレクトリ下に作成されます。

(2)　コマンドトレース情報の見方

コマンドトレースは，UAPからのコマンド実行時に出力されます。

出力されるコマンドトレースの例とその説明を次に示します。

[出力例]

** COMMAND TRACE (CLT:06-00:Jan 11 2001) HP32 **  [1]

  USER APPLICATION PROGRAM FILE NAME : TESTAP  [2]
  COMMAND START TIME : 2001/01/11 10:55:27  [3]
  COMMAND EXECUTE ENVIRONMENT & STATUS :  [4]
    PDASTHOST(dcm3500)
    PDASTPORT(20266)
    PDSYSTEMID("HRD1")
    PDUSER("hirdb")
    PDASTUSER("hirdb ")
    PDCMDWAITTIME(0)
    ENVGROUP("")
    CLTPID(9155) CLTTID(0)
  [5]  [6]          [7]         [8]        [9]
  9155  0  2001/01/11 10:55:27   0  pdhold -r RDDATA01
  9155  0  2001/01/11 10:55:27   1  KFPZ02444-E Communication error,
                                    func=connect, errno=2

[説明]

コマンドトレースヘッダ

ヘッダには次の情報が表示されます。

リンクしたライブラリのバージョン

ライブラリの作成日付（Mmm dd yyyyの形式）

実行プラットフォーム（プラットフォームとして表示される文字については，「SQLトレース情報の見方」の[説明]を参照してください）

UAP名称

クライアント環境定義PDCLTAPNAMEでの指定値が表示されます。

コマンド開始日時

コマンド実行を開始した日時が表示されます。

コマンド実行環境及びステータス

コマンド実行時のクライアント環境定義の値，及びステータスが表示されます。

UAPのプロセス番号

UAPのプロセス番号が表示されます。

なお，正しいプロセス番号が取得できない場合，不正な数値が表示される場合があります（Windows版の場合）。

UAPのスレッド番号

UAPがマルチスレッドで動作している場合，UAPのスレッド番号が表示されます。マルチスレッドで動作していない場合，0が表示されます。なお，正しいスレッド番号を取得できないで，不正な数値を表示する場合があります。

コマンドトレース取得日時

コマンドトレースを取得した日時が表示されます。

コマンドトレースカウンタ

コマンドトレースを受け付けるごとに，順次カウントした番号が表示されます。0〜65535までカウントされます。

トレースデータ

トレースデータが表示されます。

(3)　コマンドトレースファイルのバックアップの取得

コマンドトレース情報を出力中にコマンドトレースファイルの容量が一杯になると，HiRDBはそのファイルへ出力しないで，もう一方のコマンドトレースファイルに情報を出力します。このとき，切り替え先のコマンドトレースファイルに格納されている古いコマンドトレース情報から順に消去され，新しいコマンドトレース情報に書き換えられます。このため，必要な情報はUAP終了時にコマンドトレースファイルの内容をコピーしてバックアップを取得しておいてください。

なお，現在使用しているコマンドトレースファイルを知りたい場合は，ファイルの最終更新日時を調べてください。最終更新日時の新しい方が現在使用しているコマンドトレースファイルになります。

HiRDBクライアントがWindows版の場合はdirコマンド又はエクスプローラで，ファイルの最終更新日時を調べてください。

HiRDBクライアントがUNIX版の場合はOSのls -lコマンドで，ファイルの最終更新日時を調べてください。

11.1.6　SQLトレース動的取得機能

UAP実行時に，コマンドで動的にSQLトレースを取得できます。SQLトレースは，次回のCONNECTから取得されます。

(1)　SQLトレースファイルの出力先及びファイル名

SQLトレースファイルの出力先及びファイル名については，「SQLトレース機能」を参照してください。

(2)　トレース取得コマンド（pdtrcmgr）

pdtrcmgrは，-dオプションで指定したディレクトリと，UAP実行時に設定されていたクライアント環境定義PDTRCPATHの指定ディレクトリが同じ場合，そのUAPに対してトレース取得の開始又は停止を要求します。

(a)　形式

  pdtrcmgr  -d PDTRCPATHで指定したディレクトリ名
             [ { -b | -e } ]
             [ -k PDUAPREPLVLで指定可能な値 ]
             [ -n PDCLTAPNAME]
             [ -s SQLトレースファイルのサイズ ]
             [ -o]

(b)　オプション

-d PDTRCPATHで指定したディレクトリ名

　　　〜＜パス名＞

トレース取得の開始又は停止をしたいUAPの，実行時に設定されているクライアント環境定義PDTRCPATHの指定値（ディレクトリ名）を，絶対パス名で指定します。

指定したディレクトリとPDTRCPATHのディレクトリが同じすべてのUAPに対して，トレース取得の開始又は停止の指示をします。

{ -b｜-e }

SQLトレースの取得を開始するか，又は停止するかを指定します。

-b：SQLトレースの取得を開始します。

-e：SQLトレースの取得を停止します。

-k PDUAPREPLVLで指定可能な値

クライアント環境定義PDUAPREPLVLの値を指定できます。PDUAPREPLVLの詳細は，「クライアント環境定義（環境変数の設定）」を参照してください。

省略した場合，SQLトレース情報だけ出力されます。-eオプションを指定している場合は，このオプションを指定しても無視されます。

UAP統計レポートについては，「UAP統計レポート機能」を参照してください。

クライアント環境定義PDHSICOPTIONSにUAPREP又はALLを指定している場合，このオプションにはutを含む値を指定する必要があります。PDHSICOPTIONSの詳細は「クライアント環境定義（環境変数の設定）」を参照してください。

-n PDCLTAPNAME

クライアント環境定義PDCLTAPNAMEで指定しているUAPだけ対象にする場合に指定します。-eオプションを指定している場合は，このオプションを指定しても無視されます。

-s SQLトレースファイルのサイズ

　　　〜＜符号なし整数＞((0，又は32768〜2000000000))《32768》

SQLトレースファイルのサイズをバイト単位で指定します。

0を指定した場合は，ファイルの最大サイズとなります。32,768〜2,000,000,000を指定した場合は，指定値のファイルサイズとなります。

-eオプションを指定している場合は，このオプションを指定しても無視されます。

-o

CONNECT，DISCONNECT単位でSQLトレースファイルをオープン，クローズする場合に指定します。なお，このオプションは，-eオプションを指定している場合には無視されます。

CONNECT，DISCONNECT単位でSQLトレースファイルをオープン，クローズすると，オペレーション単位（SQL単位）でするよりオーバヘッドが削減されるため，SQLトレースを出力するときの時間が短縮できます。

このオプションを省略した場合，オペレーション単位でSQLトレースファイルをオープン，クローズします。

なお，このオプションを指定した場合，SQLトレースファイルをオープンしたままで情報を書き込むため，正常にDISCONNECTできなかったときには，SQLトレース情報が欠落することがあります。

(3)　PDSQLTRACEを指定している場合の留意事項

クライアント環境定義PDSQLTRACEを指定している環境でSQLトレース動的取得機能を使用した場合，PDSQLTRACEで指定したSQLトレースと，動的に取得するSQLトレースの両方を出力します。

ただし，Type4 JDBCドライバを使用している場合には，動的に取得するSQLトレースだけを出力します。

11.1.7　再接続トレース機能

再接続トレースは，自動再接続機能で再接続が行われた場合，HiRDBが内部的に管理している接続ハンドルの値，再接続前の接続情報，再接続後の接続情報，及び再接続時刻を，再接続トレースファイルに出力します。この情報は，CosminexusのPRFトレース機能で出力されるトレース中の接続情報を追跡するために使用します。

(1)　再接続トレースの取得方法

再接続トレースは，クライアント環境定義PDRCTRACEに値を設定すると取得できます。

再接続トレースファイルは，クライアント環境定義PDCLTPATHに指定したディレクトリに二つ作成されます。作成されるファイル名称は，pdrcnct1.trc，及びpdrcnct2.trcです。

(2)　再接続トレースの見方

再接続トレースは，自動再接続機能で自動的に接続が行われた場合に出力されます。

再接続トレースの出力例を次に示します。

   [1]  [2]                         [3]                                [4]
40004250 S 2004/04/12 11:10:36.766 - 2004/04/12 11:10:41.846 sds:9:23763 => sds:10:23750
40004250 S 2004/04/12 11:11:07.491 - 2004/04/12 11:11:12.547 sds:10:23750 => sds:11:23765
40004850 F 2004/04/12 11:17:58.285 - 2004/04/12 11:18:23.395 sds:14:23751 =>
40005050 S 2004/04/12 11:27:35.098 - 2004/04/12 11:27:40.152 sds:1:24414 => sds:2:24418

[説明]

接続ハンドルの値

HiRDBが内部的に管理している接続ハンドル値が16進数で出力されます。

クライアントが32ビットモードの場合は8けた，64ビットモードの場合は16けたとなります。接続ハンドルの値が同一のトレースは，UAPからすると同じ接続であることを意味します。

上記出力例の場合，接続ハンドルの値として40004250が2回出力されています。これは，この接続ハンドルを使用しているUAPからすると，再接続が2回行われたことを意味します。

再接続結果

再接続結果が出力されます。

S：成功

F：失敗

再接続開始日時，及び再接続完了日時

切断を検知してから再接続を開始した日時と，正常に再接続が完了した日時が，ミリ秒単位で出力されます。再接続に失敗した場合は，UAPに制御が戻る直前の日時を出力します。

再接続前，及び再接続後の接続情報

再接続前の接続情報，再接続後の接続情報が出力されます。接続情報は，接続サーバ名称，コネクト通番，及び接続サーバのプロセスIDをコロンで区切って出力します。

再接続に失敗した場合，再接続後の接続情報は出力されません（空白となります）。

(3)　CosminexusのPRFトレース情報との突き合わせ方法

CosminexusのPRFトレースには，出力例の4で示した接続情報が出力されます。その後，自動再接続機能で再接続が行われた場合は，次の手順で付き合わせを行います。

＜手順＞

PRFトレース中のHiRDBの接続情報を取得してください。

再接続トレースファイルの4の中から，手順1で取得した接続情報を探し，その接続ハンドル値を取得してください。

再接続トレースファイルの1の中から，手順2で取得した接続ハンドルと同じ値のトレースを追跡します。同じ値の接続ハンドルが見付かった場合，再接続前の接続情報が一つ前の同じ接続ハンドルの，再接続後の接続情報と同じときは，追跡対象となります。異なる場合は，この接続ハンドルで新たに接続されているため（DISCONNECT−CONNECT），追跡対象とはなりません。

(4)　再接続トレースのバックアップの取得

再接続トレース出力中に再接続ログファイルの容量が一杯になると，そのファイルへは出力しないで，もう一方の再接続トレースファイルに再接続ログを出力します。この場合，切り替え先の再接続トレースファイルに格納されている古い再接続トレースは消去され，新しい再接続トレースに書き換えられます。このため，長時間運用をする場合は，必要に応じて再接続トレースファイルの内容をコピーして，バックアップを取得しておいてください。

なお，現在使用している再接続トレースファイルを知りたい場合は，ファイルの最終更新日時を調べてください。最終更新日時の新しい方が現在使用している再接続トレースファイルになります。

HiRDBクライアントがWindows版の場合はdirコマンド又はエクスプローラで，ファイルの最終更新日時を調べてください。

HiRDBクライアントがUNIX版の場合はOSのls -lコマンドで，ファイルの最終更新日時を調べてください。

11.1.8　HiRDB SQL Tuning Advisor用アクセスパス情報ファイル

HiRDB SQL Tuning Advisorが使用するアクセスパス情報ファイルを，HiRDBクライアント側に出力します。HiRDB SQL Tuning Advisorを使用して，このアクセスパス情報ファイルと，SQLトレース情報とを突き合わせて解析できます。これによって，性能上問題になるSQLを特定しやすくなります。HiRDB SQL Tuning Advisorの機能の詳細については，HiRDB SQL Tuning Advisorのヘルプを参照してください。

(1)　設定方法

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルを出力する場合，次に示すクライアント環境定義を設定します。

PDTAAPINFPATH

アクセスパス情報ファイル出力ディレクトリを指定します。出力先ディレクトリがなかったり，書き込み権限がなかったりして，出力処理でエラーが発生した場合，アクセスパス情報を出力しません。なお，出力処理でエラーが発生しても，実行中のSQLはエラーにはなりません。ただし，JDBC4.0のType4 JDBCドライバでは例外を投入します。

PDTAAPINFMODE

アクセスパス情報ファイルのファイル名の形式を指定します。

PDTAAPINFSIZE

アクセスパス情報ファイルのファイルサイズを指定します。アクセスパス情報は2個作成しますが，ここで指定したファイルサイズを超えると，出力先をもう一方のファイルに切り替えます。

(2)　アクセスパスの解析

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルは，次の手順で解析します。

［手順］

［スタート］−［プログラム］−［HiRDB SQL Tuning Advisor］−［HiRDB SQL Tuning Advisor］を選択し，HiRDB SQL Tuning Advisorを起動します。

接続の設定を行います。

接続の設定方法については，「HiRDB SQL Tuning Advisorの環境設定」を参照してください。設定済みの場合，この手順は必要ありません。

［オプション］メニューから［対象ファイル指定］を選択します。

［対象ファイルの指定］画面が表示されます。

［アクセスパス］タブで，アクセスパスファイル名を指定し，［追加］ボタンをクリックします。すべての対象ファイルを追加したら，［OK］ボタンをクリックします。

［アクセスパス解析］ボタンをクリックします。

UAP一覧が表示されます。

該当するUAPの行をダブルクリックします。

SQL一覧が表示されます。

該当するSQLの行をダブルクリックします。

アクセスパスの解析結果が表示されます。［警告内容］に表示されるガイダンスを参照してください。

(3)　留意事項

HiRDBサーバが，バージョン06-00以降であれば，この機能を使用できます。

SQLオブジェクトがバッファ中にあるSQLについても，SQLオブジェクトを再作成するため，HiRDBサーバ側の負荷が増えることがあります。

この機能を使用している場合，プロセス間メモリ通信機能は使用できません。クライアント環境定義のPDIPCオペランドにMEMORYを指定していても，DEFAULTを指定した場合の動作となります。

HiRDB SQL Tuning Advisorのダイナミックブラウジング機能を使用する場合は，クライアント環境定義PDTAAPINFPATHの指定は無視されます。

HiRDBサーバがバージョン07-03より前の場合にこの機能を使用するときは，UAP統計レポート機能でアクセスパス情報を取得する設定（クライアント環境定義PDUAPREPLVLにp又はaを指定）をしていても，UAP統計レポートのアクセスパス情報は出力しません。

11.2　UAP障害の回復

11.2.1　UAP障害時の回復方法

UAPに障害が発生した場合，HiRDBシステム全体が停止しないように対処する必要があります。

ここでは，UAP障害時の回復方法について説明します。

UAP障害時の回復方法としては，次に示す三つに分けられます。

HiRDBによるUAPトランザクションのロールバック

UAP指示によるトランザクションのロールバック

メモリ容量の再検討

UAP障害の種別と回復方法を次の表に示します。

表11‒7　UAP障害の種別と回復方法

障害種別

検　出　方　法

システム側の処置

回　復　方　法

UAP異常終了

UAP処理時間監視機能

UAPの切り離し

UAPトランザクションのロールバック

UAP無限ループ

トランザクション未終了

UAP処理エラー

サーバ※1内の各種エラー検出機能

UAPへエラー応答

UAP指示によるトランザクションのロールバック

UAPによるエラー検出とロールバック要求

UAPによるエラー検出

UAPの指示に従う

デッドロック

HiRDBのデッドロック検出機能

UAPへエラー応答（暗黙的ロールバック）

UAPトランザクションの終了

メモリ不足

メモリ確保時のエラー

UAP起動不可

共用メモリ，プロセス固有メモリの見直し※2

注※1

フロントエンドサーバ，及びバックエンドサーバを示します。

注※2

共用メモリ，プロセス固有メモリの見直しについては，システム管理者に依頼してください。

(1)　UAP処理時間監視機能

UAPを実行すると，HiRDBのUAP処理時間監視機能によってタイマ監視されます。これは，UAPに異常が発生してHiRDBの処理が長時間止まった状態になることを防止するためです。

タイマ監視は，クライアント環境定義で環境変数PDSWAITTIMEによって監視する時間を指定します。時間を指定しないと，HiRDBの仮定値によって監視します。

クライアント環境定義の詳細については，「クライアント環境定義（環境変数の設定）」を参照してください。

(2)　サーバ内の各種エラー検出機能

HiRDB/パラレルサーバの場合，SQLの実行中にフロントエンドサーバ内，又はバックエンドサーバ内で，データベース処理のプロセス異常などのエラーを検出すると，プロセスの切り離しなどが必要なため，UAP側にエラーステータスを返します。エラーステータスに対してUAPがロールバック要求を発行すると，HiRDBとしての回復処理がされます。

(3)　UAPによるエラー検出

UAP内で障害を検出した場合，ロールバック要求を発行することで回復処理がされます。

なお，UAPが正常に処理された場合，UAPからのDISCONNECT指示によってプロセスが切り離されます。

(4)　メモリ容量の再検討

共用メモリ，及びプロセス固有メモリが不足すると，メモリ，又はディスク容量の不足を表すメッセージが出力されます。メッセージが出力された場合，UAPを起動するために必要なメモリを確保した後，UAPを再実行します。

なお，共用メモリ，プロセス固有メモリの見直しについては，マニュアル「HiRDB システム導入・設計ガイド」を参照するか，又はHiRDB管理者に連絡してください。

12　UAPからのコマンド実行

この章では，UAPからコマンドを実行する方法について説明します。

12.1　概要

UAP中にコマンドを指定して実行できます。指定したコマンドは，HiRDBサーバ側で実行されます。

UAPからコマンドを実行する場合，次のどちらかのSQLを使用します。

CALL COMMAND文

HiRDBの運用コマンド，及びユティリティを実行します。CALL COMMAND文を使用する場合，コマンド実行のための準備は必要ありません。

COMMAND EXECUTE

HiRDBの運用コマンド，ユティリティ，及びOSのコマンドを実行します。

COMMAND EXECUTEからのコマンド実行は，HiRDBクライアントとHiRDB Control Manager - Agentが連携することで実現しているため，HiRDBサーバ側にHiRDB Control Manager - Agentをインストールする必要があります。HiRDB Control Manager - Agentについては，それぞれのリリースノートを参照してください。

COMMAND EXECUTEからのコマンド実行は，Ｃ言語の場合にだけ使用できます。

COMMAND EXECUTEからのコマンド実行の概要を次の図に示します。

図12‒1　COMMAND EXECUTEからのコマンド実行の概要

12.2　COMMAND EXECUTEからコマンドを実行するための準備

12.2.1　HiRDB/シングルサーバの場合

データロード（データベース作成ユティリティ）を実行するUAPを例にして説明します。

HiRDB/シングルサーバの場合のサーバ，クライアント構成例を次の図に示します。

図12‒2　HiRDB/シングルサーバの場合のサーバ，クライアント構成例

図「HiRDB/シングルサーバの場合のサーバ，クライアント構成例」のようなサーバ，クライアント構成で，データロードをするUAPを実行する場合，事前に次の設定をしておきます。

次のクライアント環境定義を設定します。

PDSYSTEMID：

HiRDBサーバのHiRDB識別子（HRD1）を設定します。

PDASTHOST：

HiRDB Control Manager - Agentのホスト名（HOST1）を設定します。

PDASTPORT：

HiRDB Control Manager - Agentのポート番号（22201）を設定します。

HiRDBサーバ側に，データロードで必要となる制御情報ファイル，及び入力データファイルを用意します。

HiRDB管理者がUSERA（パスワードUSERA）で，データロードをする表の所有者がUSERB（パスワードUSERB）であったとします。この場合，次のクライアント環境定義を設定します。

PDASTUSER=USERA/USERA
PDUSER=USERB/USERB

これで，データロードをするUAPを実行できるようになります。なお，各クライアント環境定義については，「クライアント環境定義の設定内容」を参照してください。

データロードを実行するUAPの例を次に示します。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

EXEC SQL BEGIN DECLARE SECTION;
char CmdLine[30000];                   /* CmdLine変数 */
long ReturnCode;                       /* リターンコード受取変数 */
long OutBufLen;                        /* 実行結果受取領域長 */
long CmdRetCode;                       /* 実行コマンドリターンコード
                                          受取変数 */
long OutDataLen;                       /* 実行結果長受取変数 */
PDOUTBUF OutBuf;                       /* 実行結果受取領域 */
char EnvGroup[256];                    /* 環境変数グループ名変数 */
EXEC SQL END DECLARE SECTION;

void main()
{
strcpy(CmdLine,"pdhold -r RDDATA10");  /* 実行コマンドライン
                                          (RDエリア閉塞)設定 */
OutBuf = malloc(30000);                /* 実行結果受取領域確保 */
if (OutBuf == NULL){                   /* メモリ確保失敗 */
printf("メモリ確保失敗¥n");
return ;
}
OutBufLen = 30000 ;                    /* 実行結果受取領域長設定 */
EnvGroup[0] = '¥0' ;                   /* 環境変数グループ設定なし */

/* コマンド実行 */
EXEC  SQL  COMMAND  EXECUTE  :CmdLine, :ReturnCode, :OutBufLen,
:OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ;
if (ReturnCode == p_rdb_RC_NORM) {     /* COMMAND  EXECUTE正常終了 */
if (CmdRetCode==0) {                   /* 実行コマンド正常 */

/* 実行コマンドライン(データロード実行)設定 */
strcpy(CmdLine,"pdload  -i c  -be ZAIKO c:¥HiRDB_S¥conf¥LOAD");
EXEC  SQL  COMMAND  EXECUTE  :CmdLine, :ReturnCode, :OutBufLen,
:OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ;
if (ReturnCode == p_rdb_RC_NORM) {    /* COMMAND  EXECUTE正常終了 */
if (CmdRetCode==0) {                  /* 実行コマンド正常 */
printf("pdload command successfully¥n");
printf("%s¥n", OutBuf);
} else {                              /* 実行コマンドエラー */
printf("pdload command Error,Code = %d¥n", CmdRetCode);
printf("%s¥n", OutBuf);
}
} else {                              /* COMMAND  EXECUTEエラー */
printf("COMMAND EXECUTE Error,Code = %d¥n", ReturnCode);
printf("%s¥n", OutBuf);
}
} else {                              /* 実行コマンドエラー */
printf("pdhold command Error,Code = %d¥n", CmdRetCode);
printf("%s¥n", OutBuf);
}
strcpy(CmdLine,"pdrels -r RDDATA10");  /* 実行コマンドライン
                                          (RDエリア閉塞解除)設定 */
EXEC  SQL  COMMAND  EXECUTE  :CmdLine, :ReturnCode, :OutBufLen,
:OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ;
if (ReturnCode == p_rdb_RC_NORM) {     /* COMMAND  EXECUTE正常終了 */
if (CmdRetCode!=0) {                   /* 実行コマンドエラー */
printf("pdrels command Error,Code = %d¥n", CmdRetCode);
printf("%s¥n", OutBuf);
}
} else {                               /* COMMAND  EXECUTEエラー */
printf("COMMAND EXECUTE Error,Code = %d¥n", ReturnCode);
printf("%s¥n", OutBuf);
}
} else {                               /* COMMAND  EXECUTEエラー */
printf("COMMAND EXECUTE Error,Code = %d¥n", ReturnCode);
printf("%s¥n", OutBuf);
}
return ;
}

12.2.2　HiRDB/パラレルサーバの場合

データロード（データベース作成ユティリティ）を実行するUAPを例にして説明します。

HiRDB/パラレルサーバの場合のサーバ，クライアント構成例を次の図に示します。

図12‒3　HiRDB/パラレルサーバの場合のサーバ，クライアント構成例

図「HiRDB/パラレルサーバの場合のサーバ，クライアント構成例」のようなサーバ，クライアント構成で，データロードをするUAPを実行する場合，事前に次の設定をします。

次のクライアント環境定義を設定します。

PDSYSTEMID：

HiRDBサーバのHiRDB識別子（HRD1）を設定します。

PDASTHOST：

HiRDB Control Manager - Agentのホスト名（HOST1）を設定します。HiRDB/パラレルサーバの場合は，システムマネジャがあるサーバマシンのホスト名を指定します。

PDASTPORT：

HiRDB Control Manager - Agentのポート番号（22201）を設定します。

HiRDBサーバ側に，データロードで必要となる制御情報ファイル，及び入力データファイルを用意します。

HiRDB管理者がUSERA（パスワードUSERA）で，データロードをする表の所有者がUSERB（パスワードUSERB）であったとします。この場合，次のクライアント環境定義を設定します。

PDASTUSER=USERA/USERA
PDUSER=USERB/USERB

これで，データロードをするUAPを実行できるようになります。なお，各クライアント環境定義については，「クライアント環境定義の設定内容」を参照してください。

データロードを実行するUAPの例を次に示します。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

EXEC SQL BEGIN DECLARE SECTION;
char CmdLine[30000];                  /* CmdLine変数 */
long ReturnCode;                      /* リターンコード受取変数 */
long OutBufLen;                       /* 実行結果受取領域長 */
long CmdRetCode;                      /* 実行コマンドリターンコード
                                         受取変数 */
long OutDataLen;                      /* 実行結果長受取変数 */
PDOUTBUF OutBuf;                      /* 実行結果受取領域 */
char EnvGroup[256];                   /* 環境変数グループ名変数 */
EXEC SQL END DECLARE SECTION;

void main()
{
strcpy(CmdLine,"pdhold -r RDDATA10"); /* 実行コマンドライン
                                         (RDエリア閉塞)設定 */
OutBuf = malloc(30000);               /* 実行結果受取領域確保 */
if (OutBuf == NULL){                  /* メモリ確保失敗 */
printf("メモリ確保失敗¥n");
return ;
}
OutBufLen = 30000 ;                   /* 実行結果受取領域長設定 */
EnvGroup[0] = '¥0' ;                  /* 環境変数グループ設定なし */

/* コマンド実行 */
EXEC  SQL  COMMAND  EXECUTE  :CmdLine, :ReturnCode, :OutBufLen,
:OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ;
if (ReturnCode == p_rdb_RC_NORM) {    /* COMMAND  EXECUTE正常終了 */
if (CmdRetCode==0) {                  /* 実行コマンド正常 */

/* 実行コマンドライン(データロード実行)設定 */
strcpy(CmdLine,"pdload  -i c  -be ZAIKO c:¥HiRDB_P¥conf¥LOAD");
EXEC  SQL  COMMAND  EXECUTE  :CmdLine, :ReturnCode, :OutBufLen,
:OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ;
if (ReturnCode == p_rdb_RC_NORM) {    /* COMMAND  EXECUTE正常終了 */
if (CmdRetCode==0) {                  /* 実行コマンド正常 */
printf("pdload command successfully¥n");
printf("%s¥n", OutBuf);
} else {                              /* 実行コマンドエラー */
printf("pdload command Error,Code = %d¥n", CmdRetCode);
printf("%s¥n", OutBuf);
}
} else {                              /* COMMAND  EXECUTEエラー */
printf("COMMAND EXECUTE Error,Code = %d¥n", ReturnCode);
printf("%s¥n", OutBuf);
}
} else {                              /* 実行コマンドエラー */
printf("pdhold command Error,Code = %d¥n", CmdRetCode);
printf("%s¥n", OutBuf);
}
strcpy(CmdLine,"pdrels -r RDDATA10"); /* 実行コマンドライン
                                         (RDエリア閉塞解除)設定 */
EXEC  SQL  COMMAND  EXECUTE  :CmdLine, :ReturnCode, :OutBufLen,
:OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ;
if (ReturnCode == p_rdb_RC_NORM) {   /* COMMAND  EXECUTE正常終了 */
if (CmdRetCode!=0) {                 /* 実行コマンドエラー */
printf("pdrels command Error,Code = %d¥n", CmdRetCode);
printf("%s¥n", OutBuf);
}
} else{                              /* COMMAND  EXECUTEエラー */
printf("COMMAND EXECUTE Error,Code = %d¥n", ReturnCode);
printf("%s¥n", OutBuf);
}
} else {                             /* COMMAND  EXECUTEエラー */
printf("COMMAND EXECUTE Error,Code = %d¥n", ReturnCode);
printf("%s¥n", OutBuf);
}
return ;
}

12.3　コマンドの実行可否

HiRDBのコマンドには，UAPから実行できるものとできないものとがあります。UAPからのコマンドの実行可否を次の表に示します。

表12‒1　UAPからのコマンドの実行可否

種別

コマンド

内容

COMMAND EXECUTEからの実行可否

CALL COMMANDからの実行可否

システムの運用

pdadmvr

HiRDBバージョン情報の取得

○

○

pdcat

ファイルの内容表示

○

○

pdchgconf

システム構成変更コマンド

×

○

pdclibsync

Cライブラリファイルの操作

○

○

pdconfchk

システム定義のチェック

×

○

pdcspool

トラブルシュート情報の削除

○

○

pddivinfgt

表の分割条件の取得及び出力

×

×

pdgeter

障害情報の取得

○

○

pdinfoget

障害情報の取得と容量見積もり

×

○

pdinfocoreget

coreファイルの取得と容量見積もり

×

×

pditvtrc

HiRDBの状態の定期取得

○

○

pditvstop

HiRDBの状態の定期取得の停止

○

○

pdjarsync

JARファイルの操作

○

○

pdlistls

リスト定義情報の表示

○

○

pdls

HiRDBシステムの状態表示

○

○

pdmemsv

メモリの削減

×

×

pdntenv

HiRDBの動作環境の設定

×

×

pdobjconv

64ビットモードのHiRDBへのSQLオブジェクトの移行

○

×

pdopsetup

HiRDB付加PPの組み込み

×

×

pdsetenv

HiRDBユニットの環境設定

×

×

pdsetup

HiRDBシステムのOSへの登録・削除

×

×

pdsvhostname

サーバのホスト名表示

×

○

pdvrup

HiRDBバージョンアップ

×

○

HiRDBファイルシステム

pdfbkup

HiRDBファイルシステムのバックアップ

○

○

pdfchfs

HiRDBファイルシステム領域の管理情報変更

×

○

pdfls

HiRDBファイルシステムの内容表示

○

○

pdfmkfs

HiRDBファイルシステム領域の初期設定

○

○

pdfrm

HiRDBファイルの削除

○

○

pdfrstr

HiRDBファイルシステムのリストア

○

○

pdfstatfs

HiRDBファイルシステム領域の状態表示

○

○

pdffsck

HiRDBファイルシステム領域の整合性の検証及び修復

○

○

pdfzeroinit

HiRDBファイルシステム領域内の使用済み領域の初期化

×

○

ログ関係のファイル

pdlogadpf

ログ関係のファイルの割り当て

○

○

pdlogatul

自動ログアンロード機能の制御

×

○

pdlogchg

ログ関係のファイルのステータス変更

○

○

pdlogcls

ログ関係のファイルのクローズ

○

○

pdloginit

ログ関係のファイルの初期設定

○

○

pdlogls

ログ関係のファイルの情報表示

○

○

pdlogopen

ログ関係のファイルのオープン

○

○

pdlogrm

ログ関係のファイルの削除

○

○

pdlogswap

ログ関係のファイルのスワップ

○

○

pdlogsync

シンクポイントダンプの取得

○

○

pdlogucat

アンロードログファイルの情報表示

○

○

pdlogunld

ログ関係のファイルのアンロード

○

○

ステータスファイル

pdstscls

ステータスファイルのクローズ

○

○

pdstsinit

ステータスファイルの初期設定

○

○

pdstsopen

ステータスファイルのオープン

○

○

pdstsrm

ステータスファイルの削除

○

○

pdstsswap

ステータスファイルのスワップ

○

○

HiRDBの開始・終了

pdstart

HiRDBシステム・ユニット・サーバの開始

○

○

pdstop

HiRDBシステム・ユニット・サーバの終了

○

○

統計ログ

pdstbegin

統計情報の出力開始

○

○

pdstend

統計情報の出力停止

○

○

pdstjswap

統計ログファイルの切り替え

○

○

pdstjsync

統計ログファイルへの統計ログバッファの反映

○

○

RDエリア

pdclose

RDエリアのクローズ

○

○

pddbls

RDエリアの状態表示

○

○

pdhold

RDエリアの閉塞

○

○

pdopen

RDエリアのオープン

○

○

pdrels

RDエリアの閉塞解除

○

○

pddbfrz

ユーザLOB用RDエリアの満杯HiRDBファイルの更新凍結

○

○

pdrdrefls

関連するRDエリアの情報の表示

○

○

グローバルバッファ

pdbufls

グローバルバッファ情報の表示

○

○

pdbufmod

グローバルバッファの動的変更

○

○

トランザクションの制御

pdcmt

トランザクションのコミット

○

○

pdfgt

トランザクションの強制終了

○

○

pdrbk

トランザクションのロールバック

○

○

pdtrndec

未決着トランザクションの強制自動決着

×

○

プロセスの制御

pdcancel

UAP，ユティリティ処理の強制終了

○

○

pdchprc

サーバプロセスの起動本数変更

○

○

pdkill

プロセスの強制停止

×

○

pdpfresh

サーバプロセスのリフレッシュ

○

○

pdrpause

プロセスサーバプロセスの再起動

×

○

修正版HiRDBの入れ替え

pdprgcopy

修正版HiRDBのコピー

×

○

pdprgrenew

修正版HiRDBの入れ替え

×

○

HiRDB Datareplicator連携

pdrplstart

HiRDB Datareplicator連携の開始

×

○

pdrplstop

HiRDB Datareplicator連携の終了

×

○

インナレプリカ機能

pddbchg

レプリカRDエリアのレプリカステータスの切り替え

○

○

更新可能なオンライン再編成

pdorbegin

オンライン再編成のデータベース静止化

○

○

pdorcheck

オンライン再編成の適用条件チェック

○

○

pdorchg

オンライン再編成のカレントRDエリアの切り替え

○

○

pdorcreate

オンライン再編成の追い付き反映環境の作成

○

○

pdorend

オンライン再編成の追い付き反映

○

○

セキュリティ監査

pdaudbegin

監査証跡の取得開始

○

○

pdaudend

監査証跡の取得停止

○

○

pdaudrm

閉塞中の監査証跡ファイルの削除

○

○

pdaudswap

現用の監査証跡ファイルのスワップ

○

○

pdaudatld

監査証跡表への自動データロード機能の制御

○

○

pdaudput

JP1/NETM/Audit用監査ログ出力

○

×

CONNECT関連セキュリティ機能

pdacunlck

連続認証失敗アカウントロック状態の解除

×

○

リアルタイムSANレプリケーション

pdrisechk

リアルタイムSANレプリケーションの構成確認

×

○

pdrisedbto

リアルタイムSANレプリケーションのデータベース引き継ぎ

×

○

pdriseset

リアルタイムSANレプリケーションのサイト状態の設定

×

○

インメモリデータ処理

pdmemdb

インメモリデータ処理に関する操作

○

○

SQLトレースの取得

pdclttrc

SQLトレースの動的取得

○

○

PRFトレース情報

pdprfed

PRFトレース情報の編集出力

×

×

pdprflevel

PRFトレース取得レベルの表示及び変更

×

×

SQLオブジェクトの情報表示

pdobils

SQLオブジェクトの統計情報表示

×

○

SQLの仕様関連

pdextfunc

拡張システム定義スカラ関数の定義及び削除

○

○

Windowsファイアウォールの例外登録

pddelfw.bat

Windowsファイアウォールの例外リストからHiRDBを削除

×

×

pdsetfw.bat

Windowsファイアウォールの例外リストにHiRDBを登録

×

×

ファイルセキュリティ強化機能

pdsetacl

ファイルセキュリティ強化機能の設定

×

×

SQLの翻訳

pdcbl

COBOLプリプロセサ

×

×

pdcpp

Cプリプロセサ

×

×

pdocb

OOCOBOLプリプロセサ

×

×

pdocc

C++プリプロセサ

×

×

データベースの生成

pdinit

データベース初期設定ユティリティ

×

○

pddef

データベース定義ユティリティ

×

○

pdload

データベース作成ユティリティ

○

○

pdparaload

パラレルローディング

×

×

pdsql※

会話型SQL実行ユティリティ

×

×

pddefrev

定義系SQLの生成

×

○

データベースの運用

pdmod

データベース構成変更ユティリティ

○

○

pdrorg

データベース再編成ユティリティ

○

○

pdexp

ディクショナリ搬出入ユティリティ

×

○

pdrbal

リバランスユティリティ

×

○

pdreclaim

空きページ解放ユティリティ

○

○

pdpgbfon

グローバルバッファ常駐化ユティリティ

○

○

pdconstck

整合性チェックユティリティ

×

○

pdchpathf

ファイルパス変更オフラインコマンド

×

×

pdchpathn

ファイルパス変更オンラインコマンド

×

×

チューニング

pdstedit

統計解析ユティリティ

×

○

pddbst

データベース状態解析ユティリティ

○

○

pdgetcst

最適化情報収集ユティリティ

×

○

pdvwopt

アクセスパス表示ユティリティ

×

○

データベースの障害対策

pdcopy

データベース複写ユティリティ

○

○

pdbkupls

バックアップファイルの情報表示

○

○

pdrstr

データベース回復ユティリティ

○

○

pdmstchk

マスタディレクトリ用RDエリアの整合性チェック

×

×

プラグイン関連

pdplgrgst

プラグインの登録

×

×

pdplgset

プラグインのセットアップ

×

×

pdreginit

レジストリ機能初期設定ユティリティ

○

×

コマンドの代行

pdcmdact

HiRDB管理者以外のユーザによるコマンド実行

×

×

pdcmdls

コマンドの実行権限表示

×

×

pdcmdset

コマンドの実行権限変更

×

×

（凡例）

○：UAPから実行できます。

×：UAPから実行できません。

注※

Windows版の場合，コマンドはありません。HiRDB SQL Executerで実行します。

13　ODBC対応アプリケーションプログラムからのHiRDBアクセス

この章では，ODBC対応アプリケーションプログラムからHiRDBをアクセスする場合に必要な，ODBCドライバのインストール，ODBC関数，チューニング，トラブルシュートなどについて説明します。

なお，ODBC2.0ドライバは廃止になりました。現在はアプリケーションの互換性を保つために使用できますが，将来は削除されます。代わりにODBC3.5ドライバを使用してください。

ODBC2.0ドライバを使用する場合は，HiRDBサーバとの接続時にパスワードを指定するユーザインタフェースで，29バイト以上のパスワードを引用符で囲んだ指定はできません。

13.1　ODBC対応アプリケーションプログラム

ODBC対応アプリケーションプログラムには，Microsoft AccessやMicrosoft Excelなどがあります。これらのアプリケーションプログラムからHiRDBをアクセスする場合，ODBCドライバをインストールする必要があります。ODBCドライバのインストールについては，「ODBC2.0ドライバのインストール」を参照してください。また，HiRDBが提供しているODBC関数を使用したUAPから，ODBCドライバを経由してHiRDBをアクセスすることもできます。HiRDBが提供するODBC関数については，「HiRDBが提供するODBC関数」を参照してください。

なお，ODBC3.5ドライバを経由すると，ODBC3.Xのインタフェースを使用しているUAPからHiRDBにアクセスできます。

13.2　ODBC2.0ドライバのインストール

ODBC対応のアプリケーションプログラム，又はODBC関数を使用したUAPからHiRDBをアクセスする場合，HiRDBクライアントにODBCドライバをインストールする必要があります。

また，HiRDBサーバ上でODBC経由のUAPを実行する場合は，HiRDBサーバにもODBCドライバをインストールする必要があります。

ODBCドライバのインストール手順を次に示します。なお，インストールを実行する前に，すべてのWindowsアプリケーションを終了させてください。

HiRDBクライアントのインストール後，HiRDBクライアントのインストールディレクトリ¥utlディレクトリ下に展開されるODBC20INST.exeファイルを実行してください。日立自己展開型プログラムが起動します。

「日立自己展開型プログラム」画面で「インストール実行(R)」ボタンをクリックすると，ODBCドライバのインストーラが起動します。

表示されたHiRDBのドライバを選択して［OK］ボタンをクリックしてください。選択しないでOKした場合，インストールされないので注意してください。

今までに定義したデータソースが表示されます。データソースを何も定義していない場合は，何も表示されません。［追加］ボタンをクリックします。

データソースを追加する対象としてHiRDBのドライバを選択します。

データソースのセットアップ画面が表示されます。

［説明］

データソース名

データソースを識別するための，任意の名称を指定します。名称は，すべて半角文字の場合は32文字，すべて全角文字の場合は16文字で指定できます。なお，半角文字，全角文字は混在できます。

PDHOST(ホスト名)

サーバマシンのホスト名を指定します。指定する内容は，クライアント環境定義と同じです。PDHOSTの内容については，「クライアント環境定義の設定内容」を参照してください。この項目を省略した場合，クライアント環境定義の値が仮定されます。

PDNAMEPORT(HiRDBシステムのポート番号)

サーバマシンのポート番号を指定します。指定する内容は，クライアント環境定義と同じです。PDNAMEPORTの内容については，「クライアント環境定義の設定内容」を参照してください。この項目を省略した場合，クライアント環境定義の値が仮定されます。

HiRDBクライアント環境変数ファイル名(フルパス指定)※

HiRDBクライアント環境定義ファイルの名称を，絶対パス名で指定します。データソースごとにHiRDBクライアント環境変数の指定値を変更したい場合に指定してください。例えば，高速接続機能（PDSERVICEPORT）を使用し複数のHiRDBに接続する場合に，HiRDBクライアント環境定義ファイルのファイル名を指定し，データソースごとに接続先を変更するときなどに指定します。

省略した場合は，HIRDB.INIが仮定されます。PDHOST，PDNAMEPORT以外のクライアント環境変数は，ここで指定したHiRDBクライアント環境定義ファイルの設定値が使用されます。

ここでHIRDB.INI以外のファイルを指定した場合，HIRDB.INI内の指定は無視されます。

すべての項目を設定した後，［OK］ボタンをクリックしてください。すると，設定したデータソースが表示されます。設定を変更する場合は，［設定］ボタンをクリックすると一つ前の画面に戻ります。

注※

HiRDBクライアント環境定義ファイルは，HiRDBクライアントをインストールすると，自動的にシステムディレクトリにHIRDB.INIというファイル名で作成されます。

HiRDBクライアントをインストールする前にODBCドライバをインストールするときには，このHIRDB.INIファイルはないため，あらかじめユーザが作成しておく必要があります。

クライアント環境定義ファイルを作成する場合は，インストールCD-ROM中のodb32¥Disk1¥SampleapディレクトリにあるHIRDB.INIファイルを適当なディレクトリにコピーし，編集してください。なお，各クライアント環境変数の内容については，「クライアント環境定義の設定内容」を参照してください。

13.3　ODBC3.5ドライバのインストールと環境変数の設定

13.3.1　インストール

(1)　インストールディレクトリ

ODBC3.5ドライバのインストールディレクトリを次の表に示します。

表13‒1　ODBC3.5ドライバ（32ビットモード）のインストールディレクトリ

プラットフォーム

インストールディレクトリ

Windows

Windowsディレクトリ¥System32，又はWindowsディレクトリ¥SysWOW64

Linux

/HiRDB/client/lib/

注1

Windowsディレクトリは，デフォルトでは，C:¥WINDOWSとなります。

注2

下線で示す部分は，HiRDBクライアントのインストールディレクトリとなります。

表13‒2　ODBC3.5ドライバ（64ビットモード）のインストールディレクトリ

プラットフォーム

インストールディレクトリ

Windows

Windowsディレクトリ¥System32

Linux

/HiRDB/client/lib/

HP-UX

注1

Windowsディレクトリは，デフォルトでは，C:¥WINDOWSとなります。

注2

下線で示す部分は，HiRDBクライアントのインストールディレクトリとなります。

(2)　インストールの流れ

ODBC3.5ドライバのインストールの流れを次に示します。

ODBC3.5ドライバのインストール

提供媒体をセットし，インストールをします。

ODBCドライバマネージャのインストール

Windows版の場合，ODBCドライバマネージャのバージョンが古いときは，ODBCドライバマネージャをインストールします。

UNIX版の場合，HiRDBではODBCドライバマネージャを提供していません。ODBC3.5 APIをサポートしUNIX上で動作するODBCドライバマネージャを別途インストールしてください。

データソースの設定

データソースを設定します。

(3)　インストール手順（Windows版の場合）

(a)　ODBC3.5ドライバのインストール

統合CD-ROM中のhcd_inst.exeを実行して，日立総合インストーラを起動してください。

「日立総合インストーラ」画面で次のどちらかを選択して，［インストール実行］ボタンをクリックしてください。HiRDBのセットアッププログラムが起動します。

Windows版クライアント製品の場合：

HiRDB/Run Timeの場合は［HiRDB/Run Time］

HiRDB/Developer's Kitの場合は［HiRDB/Developer's Kit］

Windows版サーバ製品の場合：

HiRDB/シングルサーバの場合は［HiRDB/Single Server］

HiRDB/パラレルサーバの場合は［HiRDB/Parallel Server］

次の操作をしてください。選択したプログラムプロダクトのセットアッププログラムが起動します。

Windows版クライアント製品の場合：

HiRDBのセットアッププログラムの「プログラムプロダクトの選択」画面で次のどちらかを選択して，［次へ］ボタンをクリックしてください。

HiRDB/Run Timeの場合は［HiRDB/Run Time］

HiRDB/Developer's Kitの場合は［HiRDB/Developer's Kit］

Windows版サーバ製品の場合：

HiRDBのセットアッププログラムの「プログラムプロダクトの選択」画面で［HiRDB/Run Time］を選択して，［次へ］ボタンをクリックしてください。

「インストール先の選択」ダイアログボックスが表示されるので，必要に応じてインストール先を変更して［次へ］ボタンをクリックします。

「セットアップ方法の選択」ダイアログボックスで，「標準」又は「カスタム」を選択し，［次へ］ボタンをクリックします。

5.で「カスタム」を選択した場合，「コンポーネントの選択」ダイアログボックスで，「ODBC3.5ドライバ」を選択し，［次へ］ボタンをクリックします。

ODBC3.5ドライバがWindowsディレクトリ¥System32下にコピーされます。

これでインストールは完了となります。

(b)　ODBCドライバマネージャ（MDAC2.6RTMに含まれる）のインストール

インストールされているODBCドライバマネージャのバージョンが古い場合，Microsoftのホームページから最新のMDACを入手してインストールする必要があります。なお，ODBCドライバマネージャのバージョンは，「ODBCアドミニストレータ」を起動して，「バージョン情報」タブをクリックすると確認できます。「ドライバマネージャ」のバージョンが3.520.6526.0未満の場合，古いバージョンとなります。

(c)　データソースの設定

「ODBCデータソースアドミニストレータ」を起動します。

タブの項目が「ユーザDSN」又は「システムDSN」であることを確認し，［追加］ボタンをクリックします。

「データソースの新規作成」ダイアログボックスが表示されるので，「HiRDB ODBC3.5 Driver」を選択して，［完了］ボタンをクリックします。

「HiRDB ODBC3.5 Driver セットアップ」ダイアログボックスが表示されるので，各項目を設定します。

データソース名

データソース名を識別するための，任意の名称を指定します。名称は，すべて半角文字の場合は32文字，すべて全角文字の場合は16文字で指定できます。なお，半角文字，全角文字は混在できます。

PDHOST(ホスト名)

HiRDB/シングルサーバの場合，シングルサーバのあるサーバマシンのホスト名を指定します。HiRDB/パラレルサーバの場合，システムマネジャがあるサーバマシンのホスト名を指定します。

この指定はクライアント環境定義PDHOSTの指定と同等です。PDHOSTについては，「クライアント環境定義の設定内容」を参照してください。

この項目を省略した場合の各指定方法での優先順位については，「接続情報の優先順位」を参照してください。

PDNAMEPORT(HiRDBシステムのポート番号)

アクセスするHiRDBサーバのポート番号（システム定義のpd_name_portオペランドの指定値）を指定します。

この指定はクライアント環境定義PDNAMEPORTの指定と同等です。PDNAMEPORTについては，「クライアント環境定義の設定内容」を参照してください。

この項目を省略した場合の各指定方法での優先順位については，「接続情報の優先順位」を参照してください。

HiRDBクライアント環境変数ファイル名

HiRDBクライアント環境定義ファイルの名称を，絶対パス名で指定します。データソースごとにHiRDBクライアント環境変数の指定値を変更したい場合に指定してください。例えば，高速接続機能（PDSERVICEPORT）を使用し複数のHiRDBに接続する場合に，HiRDBクライアント環境定義ファイルのファイル名を指定し，データソースごとに接続先を変更するときなどに指定します。

HiRDBクライアント環境定義ファイルについては，「Windows環境の場合（ファイル登録）」を参照してください。

省略した場合は，HIRDB.INIが仮定されます。

クライアント環境定義の各指定方法での優先順位については，「接続情報の優先順位」を参照してください。

［OK］ボタンをクリックすると，「ユーザDSN」タブ又は「システムDSN」タブに戻り，登録したデータソースが表示されます。

データソースのセットアップの中止

データソースのセットアップを中止する場合は，「HiRDB ODBC3.5 Driverセットアップ」ダイアログボックスの［キャンセル］ボタンをクリックしてください。［キャンセル］ボタンをクリックすると，データソースは登録されません。

データソースの削除

データソースを削除する場合の手順を次に示します。

「データソース」ダイアログボックスの中の，削除するデータソース名を選択します。

［削除］ボタンをクリックすると，データソースが削除されます。

(4)　インストール手順（UNIX版の場合）

(a)　ODBC3.5ドライバのインストール

日立PPインストーラを起動してODBC3.5ドライバをインストールしてください。

(b)　ODBCドライバマネージャのインストール

UNIX版の場合，HiRDBではODBCドライバマネージャを提供していません。別途インストールしてください。

(c)　ODBCドライバ情報の登録

ODBCドライバの情報を登録するために，odbcinst.iniファイルを編集してください。

ここでは，ドライバマネージャにunixODBCを使用した場合を例にして説明します。

odbcinst.iniファイルは/usr/local/etc下にあります。32ビットモードのLinux版HiRDB ODBC3.5ドライバを使用する場合のodbcinst.iniファイルの編集例を次に示します。

（例）

[HiRDBOdbcDriver]  ................................................1
Driver = /HiRDB/client/lib/libodbcdrv.so  .......................2

ドライバ名称

[ ]内の記述は，データソースと対応するドライバ名称です。任意の名称を指定できます。

Driver

UNIX版HiRDB ODBC3.5ドライバを絶対パスで指定します。64ビットモードの場合はlibodbcdrv64.soとなります。

(d)　データソースの設定

odbc.iniファイルを編集してください。

ここでは，ドライバマネージャにunixODBCを使用した場合を例にして説明します。

odbc.iniファイルは，/usr/local/etc下にあります。また，ホームディレクトリ下の.odbc.iniという隠しファイルとしても存在します。この二つのファイルは，WindowsでのシステムDSN及びユーザDSNに相当します。ユーザDSNとして編集する場合は，.odbc.iniファイルをアプリケーション実行ユーザのホームディレクトリに配置してください。

odbc.iniファイルの編集例を次に示します。

（例）

[HiRDB_LIN30]　......................................................1
Driver = HiRDBOdbcDriver　...........................................2
PDHOST = 10.209.34.223　.............................................3
PDNAMEPORT = 22200　.................................................4
INIFLNAME = /usr/local/etc/HiRDB.ini　...............................5
ODBCHARSET = CP932　.................................................6

データソース名

データソース名を識別するための，任意の名称を指定します。使用するODBCドライバマネージャの規則に従って指定してください。

Driver

ドライバの登録でodbcinst.iniファイルに設定したドライバ名称を指定します。

PDHOST

HiRDB/シングルサーバの場合，シングルサーバのあるサーバマシンのホスト名を指定します。HiRDB/パラレルサーバの場合，システムマネジャがあるサーバマシンのホスト名を指定します。

この指定はクライアント環境定義PDHOSTの指定と同等です。PDHOSTについては，「クライアント環境定義の設定内容」を参照してください。

この項目を省略した場合の各指定方法での優先順位については，「接続情報の優先順位」を参照してください。

PDNAMEPORT

アクセスするHiRDBサーバのポート番号（システム定義のpd_name_portオペランドの指定値）を指定します。

この指定はクライアント環境定義PDNAMEPORTの指定と同等です。PDNAMEPORTについては，「クライアント環境定義の設定内容」を参照してください。

この項目を省略した場合の各指定方法での優先順位については，「接続情報の優先順位」を参照してください。

INIFLNAME

HiRDBクライアント環境定義ファイルの名称を，絶対パス名で指定します。データソースごとにHiRDBクライアント環境定義の指定値を変更したい場合に指定してください。例えば，高速接続機能（PDSERVICEPORT）を使用し複数のHiRDBに接続する場合に，HiRDBクライアント環境定義ファイルのファイル名を指定し，データソースごとに接続先を変更するときなどに指定します。

HiRDBクライアント環境定義ファイルについては，「UNIX環境の場合」を参照してください。

なお，UNIX版ではHiRDBクライアント環境定義ファイル（HiRDB.ini）は作成されないため，ファイルを用意してから指定してください。

クライアント環境定義の各設定方法での優先順位については，「接続情報の優先順位」を参照してください。

ODBCHARSET

UNIX版HiRDB ODBC3.5ドライバ固有のODBC環境定義です。文字コード変換で使用する文字コード種別を指定します。詳細は，「UNIX版HiRDB ODBC3.5ドライバ固有のODBC環境定義」を参照してください。

13.3.2　UNIX版HiRDB ODBC3.5ドライバ固有のODBC環境定義

ここでは，odbc.iniファイルに指定できるUNIX版HiRDB ODBC3.5ドライバ固有のODBC環境定義について説明します。なお，odbc.iniファイルの編集については，「データソースの設定」を参照してください。

ODBCHARSET = iconv関数に指定できる文字セット

UTF-16※の文字データを文字コード変換する場合に，iconv関数で使用する文字セットを指定します。この指定は，HiRDBサーバに格納された文字データをUTF-16※にコード変換する場合にも有効となります。

指定できる文字セットは，UNIX版HiRDB ODBC3.5ドライバの実行環境でiconv --listを実行することで確認できます。

使用できない文字セットを指定した場合は，KFPZ20004-Eメッセージが出力されます。

この値を省略した場合は，UTF-16※の文字データを次の表に示す文字セットに従った文字コードに変換します。

注※

Linux版の場合はUTF-16LE，HP-UX版の場合はUTF16BEと読み替えてください。

表13‒3　ODBCHARSET省略時にiconv関数で使用される文字セット

項番

接続先HiRDBサーバの文字コード種別

iconv関数で使用される文字セット

1

SJIS

SHIFT-JIS

2

UJIS

EUC-JISX0213（EUC-JISX0213を使用できない環境の場合はEUC-JP）

3

UTF-8

UTF8

4

上記以外

未サポート

なお，このODBC環境定義とクライアント環境定義のPDCLTCNVMODEオペランドを同時に指定した場合，PDCLTCNVMODEオペランドの指定値が有効になります。

13.3.3　環境変数の設定（Windows版の場合）

次の環境変数を設定してください。

PATH=Windowsディレクトリ;Windowsディレクトリ¥System32

注1

Windowsディレクトリは，デフォルトの場合はC:¥WINDOWSとなります。

注2

システム環境変数に設定してください。

13.3.4　ODBC3.5ドライバのバージョン情報の確認方法

ODBCドライバのバージョン情報は，「ODBCデータソースアドミニストレータ」を起動し，「ドライバ」タブを選択すると確認できます。「ODBCデータソースアドミニストレータ」の格納先については，「インストールディレクトリ」を参照してください。

注意事項

ODBCデータソースアドミニストレータに登録されるHiRDB ODBC3.5ドライバの名称は，「HiRDB ODBC3.0 Driver」となりますが，機能はODBC3.5に準拠しています。

13.3.5　接続情報の優先順位

ODBC3.5ドライバでは，意味が同じ接続情報を複数の設定方法で指定できます。このような複数の設定方法を持つ接続情報と，同時に複数の設定方法で設定された場合の優先順位を次の表に示します。

表13‒4　接続情報の優先順位（Windows版の場合）

接続情報の意味

設定方法

優先順位

A

B

HiRDBのホスト名称，HiRDBのポート番号

データソースで設定したPDHOST，PDNAMEPORT

1

−

ユーザ環境変数PDHOST，PDNAMEPORT

2

2

システム環境変数PDHOST，PDNAMEPORT

3

3

データソースで設定したクライアント環境定義ファイル内のPDHOST，PDNAMEPORT

4

−

Windowsディレクトリ下のHiRDB.INIファイル※内のPDHOST，PDNAMEPORT

5

5

SQLDriverConnect関数の引数で設定した接続文字列のキーワードPDHOST，PDNAMEPORT

−

1

SQLDriverConnect関数の引数で設定した接続文字列のキーワードINIFLNAMEで設定したクライアント環境定義ファイル内のPDHOST，PDNAMEPORT

−

4

PDHOST,PDNAMEPORT以外のクライアント環境定義

ユーザ環境変数

1

1

システム環境変数

2

2

データソースで設定したクライアント環境定義ファイル

3

−

Windowsディレクトリ下のHiRDB.INIファイル※

4

4

SQLDriverConnect関数の引数で設定した接続文字列のキーワードINIFLNAMEで設定したクライアント環境定義ファイル

−

3

(凡例)

A：SQLConnect，SQLBrowseConnect，SQLDriverConnect（DSN指定）で接続する場合

B：SQLDriverConnect（DRIVER指定）で接続する場合

−：接続方法によって指定できない

注※

データソース又はSQLDriverConnect関数で環境変数グループファイルを設定している場合，HiRDB.INIファイルでのすべての設定は無効になります。環境変数グループファイルで設定していないクライアント環境定義についても，HiRDB.INIファイルでの設定は無効になります。

表13‒5　接続情報の優先順位（Linux，HP-UX版の場合）

接続情報の意味

設定方法

優先順位

A

B

HiRDBのホスト名称，HiRDBのポート番号

odbc.iniファイル※内で設定したPDHOST，PDNAMEPORT

1

−

ユーザ環境変数PDHOST，PDNAMEPORT

2

2

odbc.iniファイル※内のINIFLNAMEで設定したクライアント環境定義ファイル内のPDHOST，PDNAMEPORT

3

−

SQLDriverConnect関数の引数で設定した接続文字列のキーワードPDHOST，PDNAMEPORT

−

1

SQLDriverConnect関数の引数で設定した接続文字列のキーワードINIFLNAMEで設定したクライアント環境定義ファイル内のPDHOST，PDNAMEPORT

−

3

上記以外のクライアント環境定義

ユーザ環境変数

1

1

odbc.iniファイル※内のINIFLNAMEで設定したクライアント環境定義ファイル

2

−

SQLDriverConnect関数の引数で設定した接続文字列のキーワードINIFLNAMEで設定したクライアント環境定義ファイル

−

2

(凡例)

A：SQLConnect，SQLBrowseConnect，SQLDriverConnect（DSN指定）で接続する場合

B：SQLDriverConnect（DRIVER指定）で接続する場合

−：接続方法によって指定できない

注※

/usr/local/etc下とホームディレクトリ下のodbc.iniファイルに同一名称のデータソースを設定している場合は，ホームディレクトリ下のodbc.iniファイルの設定が有効になります。

13.4　HiRDBが提供するODBC関数

HiRDBではODBC関数を提供していて，そのODBC関数を利用したUAPからサーバ上のHiRDBにアクセスできます。HiRDBが提供するODBC関数を次の表に示します。

表13‒6　HiRDBが提供するODBC関数

分類

ODBC関数

ODBC2.0ドライバ

ODBC3.5ドライバ

提供可否

拡張レベル

提供可否

拡張レベル

data sourceとの接続

SQLAllocEnv

○

Core

−

−

SQLAllocHandle

−

−

○

Core

SQLAllocConnect

○

Core

−

−

SQLConnect

○

Core

○

Core

SQLDriverConnect

○

1

○

Core

SQLBrowseConnect

○

2

○

1

ドライバ及びdata sourceの情報取得

SQLDataSources

○※１

2

○※１

Core

SQLDrivers

−

−

○※１

Core

SQLGetInfo

○

1

○

Core

SQLGetFunctions

−

−

○

Core

SQLGetTypeInfo

○

1

○

Core

ドライバオプションの設定及び取得

SQLSetConnectOption

○

1

−

−

SQLGetConnectOption

○

1

−

−

SQLSetStmtOption

○

1

−

−

SQLGetStmtOption

○

1

−

−

SQLSetConnectAttr

−

−

○

Core

SQLGetConnectAttr

−

−

○

Core

SQLSetEnvAttr

−

−

○

Core

SQLGetEnvAttr

−

−

○

Core

SQLSetStmtAttr

−

1

○

Core

SQLGetStmtAttr

−

1

○

Core

ディスクリプタ値の設定

SQLGetDescField

−

−

○

Core

SQLGetDescRec

−

−

○

Core

SQLSetDescField

−

−

○

Core

SQLSetDescRec

−

−

○

Core

SQLCopyDesc

−

−

○

Core

SQL要求の作成

SQLAllocStmt

○

Core

−

−

SQLPrepare

○

Core

○

Core

SQLBindParameter

○

1※１

○

Core

SQLSetParam※2

○

1

−

−

SQLGetCursorName

○

Core

○

Core

SQLSetCursorName

○

Core

○

Core

SQLDescribeParam

○

2

−

−

SQLNumParam

○

2

−

−

SQLDescribeParams

−

−

○

2

SQLNumParams

−

−

○

Core

SQLParamOptions

×

2

−

−

SQLSetScrollOptions

×※3

2

×

2

SQLの実行

SQLExecute

○

Core

○

Core

SQLExecDirect

○

Core

○

Core

SQLNativeSql

○

2

○

Core

SQLParamData

○

1

○

Core

SQLPutData

○

1

○

Core

実行結果及び実行結果情報の取得

SQLRowCount

○

Core

○

Core

SQLNumResultCols

○

Core

○

Core

SQLDescribeCol

○

Core

○

Core

SQLColAttributes

○

Core

−

−

SQLColAttribute

−

−

○

Core

SQLBindCol

○

Core

○

Core

SQLFetch

○

Core

○

Core

SQLFetchScroll

−

−

○※4

Core

SQLExtendedFetch

×※3

2

○

Core

SQLGetData

○

1

○

Core

SQLSetPos

×※3

2

○※4

1

SQLBulkOperations

−

−

×

1

SQLMoreResults※5

○

2

○

1

SQLError

○

Core

−

−

SQLGetDiagField

−

−

○

Core

SQLGetDiagRec

−

−

○

Core

data sourceのシステム情報の取得

SQLColumnPrivileges

○

2

○

2

SQLColumns

○

1

○

Core

SQLForeignKeys

○※６

2

○※６

2

SQLPrimaryKeys

○※６

2

○※６

1

SQLProcedureColumns

○

2

○

1

SQLProcedure

○

2

○

1

SQLSpecialColumns

○※６

1

○※６

Core

SQLStatistics

○

1

○

Core

SQLTablePrivileges

○

2

○

2

SQLTables

○

1

○

Core

SQL実行の終了

SQLFreestmt

○

Core

○

Core

SQLCloseCursor

−

−

○

Core

SQLCancel

○

Core

○

Core

SQLTransact

○

Core

○

Core

SQLEndTran

−

−

○

Core

切り離し

SQLDisconnect

○

Core

○

Core

SQLFreeConnect

○

Core

−

−

SQLFreeEnv

○

Core

−

−

SQLFreeHandle

−

−

○

Core

(凡例)

○：該当するODBC関数を提供しています。

×：該当するODBC関数を提供していません。

−：該当しません。

1：Level1のことです。

2：Level2のことです。

Core：コアレベルのことです。

注※1

ドライバマネージャで実装しています。

注※2

SQLSetParamの機能は，ODBC 2.0でSQLBindParameterに含まれましたが，ODBC 2.0に対応しないアプリケーションとの互換性を保つために提供しています。

注※3

ODBC2.0カーソルライブラリで実装しているため，カーソルライブラリで規定された範囲の機能は使用できます。SQLExtendedFetchを使用したい場合は，カーソルライブラリの設定をしてください。カーソルライブラリの設定については，「カーソルライブラリの設定」を参照してください。

注※4

該当するODBC関数を使用する場合，Microsoft提供のカーソルライブラリを使用する必要があります。

注※5

SQLステートメントを実行したステートメントハンドルでSQLMoreResultsを呼び出します。実行されたSQLステートメントがHiRDBの結果集合返却機能を使用している場合，使用できる結果セットが存在するときはSQL_SUCCESSを返却し，次の結果セットが使用可能になります。なお，次の結果セットが存在しない場合はSQL_NO_DATAを返却します。

結果集合返却機能については，マニュアル「HiRDB SQLリファレンス」を参照してください。

注※6

呼び出しだけのサポートです。この関数で作成される結果セットは，常に行なしとなります。

13.5　ODBC関数のデータ型とHiRDBのデータ型との対応

13.5.1　ODBC関数とHiRDBとのデータ型の対応

ODBC関数とサーバ上のHiRDBとのデータ型の対応を次の表に示します。

なお，ODBC関数のデータ型とは，ODBC関数のアーギュメントに指定するSQLデータ型のことです。

表13‒7　ODBC関数とHiRDBとのデータ型の対応

分　類

ODBCのデータ型

HiRDBのデータ型

説　　明

可否

文字データ

SQL_CHAR

CHAR(n)

固定長文字列

○

SQL_VARCHAR

VARCHAR(n)

可変長文字列

○

SQL_LONGVARCHAR

VARCHAR(n)

可変長文字列

○

SQL_CHAR

NCHAR(n)

固定長各国文字列

NATIONAL CHARACTER(n)

○

SQL_VARCHAR

NVARCHAR(n)

可変長各国文字列

○

SQL_CHAR

MCHAR(n)

固定長混在文字列

○

SQL_VARCHAR

MVARCHAR(n)

可変長混在文字列

○

数データ

SQL_DECIMAL

DEC[IMAL](p，s)

固定小数点数

精度(全体のけた数)=p，

位取り(小数点以下のけた数)=s

1≦p≦15，0≦s≦p

○

SQL_NUMERIC

−

×

SQL_SMALLINT

SMALLINT

値の範囲が-32768〜32767の整数

○

SQL_INTEGER

INTEGER

値の範囲が-2147483648〜2147483647の整数

○

SQL_TINYINT

−

-256〜255の整数

×

SQL_BIGINT

−

1けたの符号と19けたの整数

×

SQL_REAL

SMALLFLT，REAL

単精度浮動小数点数

○

SQL_FLOAT

FLOAT，

DOUBLE PRECISION

倍精度浮動小数点数

○

SQL_DOUBLE

FLOAT，

DOUBLE PRECISION

倍精度浮動小数点数

○

SQL_BIT

−

ビット

×

SQL_BINARY

−

固定長バイナリデータ

×

SQL_LONGVARBINARY

BINARY(n)

可変長バイナリデータ

○

SQL_LONGVARBINARY

BLOB

可変長バイナリデータ

○

日付，時刻データ

SQL_TYPE_DATE

DATE

日付

○

SQL_TYPE_TIMESTAMP

TIMESTAMP

日付/時刻

○

SQL_TYPE_TIME

TIME

時刻

○

−※

INTERVAL YEAR TO DAY

日間隔

×

SQL_INTERVAL_HOUR_TO_SECOND

INTERVAL HOUR TO SECOND

時間隔

○

ユーザ定義型

−

抽象データ型

抽象データ型

×

(凡例)

−：ODBCにはないデータ型を示します。

○：使用できます。

×：使用できません。

注

データ型の最大文字列長，及び値の範囲については，マニュアル「HiRDB SQLリファレンス」を参照してください。

注※

サーバ上のデータベースのデータ型がそのまま通知されます。

(1)　ODBC関数で使用できる機能

ODBC関数を利用したUAPからサーバ上のHiRDBにアクセスする場合，使用できる機能が一部制限されます。使用できる機能を次の表に示します。

表13‒8　使用できる機能

機　　能

使用可否

スペシャルカラム情報の取得

−

インデクス情報の取得

○

日付，時刻データ型の使用

○※1

繰返し列の使用

×※3

配列列の使用

−

表ヘッダ，列ヘッダの取得

−

非同期処理

×

LIKEのエスケープ文字の使用

○

更新行数の取得

○

LOGINタイムアウト時間設定

×

日本語データ型の使用

○※2

定義系SQLの実行

○

（凡例）

○：使用できます。

×：使用できません。

−：DBMSに機能がありません。

注※1

INTERVAL YEAR TO DAYは使用できません。

注※2

データベースのデータ型がそのまま通知されます。

注※3

繰返し列，？パラメタが繰返し構造でない単純構造の場合，アクセスはできます。

(例)　T1の列C1が繰返し列の場合

SELECT C1[1],C1[2] FROM T1        … ○
SELECT C1 FROM T1                 … ×
INSERT INTO T1 VALUES(ARRAY[?,?]) … ○
INSERT INTO T1 VALUES(?)          … ×

(凡例)
　○：アクセスできます。
　×：アクセスできません。

(2)　カーソルを使用した更新，又は削除する場合の設定

SQLGetCursorNameは，SQLSetCursorNameによってユーザが設定したカーソル名(ユーザカーソル名)を取得します。ユーザが設定しない場合に，システムが設定するカーソルは取得できません。そのため，カーソルを使った更新，又は削除は，ユーザカーソル名を設定する必要があります。

(3)　ドライバオプションの設定

SQLSetConnectOption関数，及びSQLGetConnectOption関数で設定する項目に制限があります。項目の設定可否を次の表に示します。

表13‒9　SQLSetConnectOption関数，SQLGetConnectOption関数の設定可否

fOption

設定可否

SQL_ACCESS_MODE

SQL_MODE_READ_WRITE

SQL_AUTOCOMMIT

SQL_AUTOCOMMIT_OFF

又はSQL_AUTOCOMMIT_ON

SQL_LOGIN_TIMEOUT

−

SQL_TRANSLATE_DLL

−

SQL_TRANSLATE_OPTION

−

SQL_TXN_ISOLATION

−

（凡例）−：設定できません。

13.6　ODBC関数の各属性の指定可否

13.6.1　SQLSetConnectAttr

SQLSetConnectAttrで指定できるODBC接続属性を次の表に示します。

表13‒10　SQLSetConnectAttrで指定できるODBC接続属性

属性

指定可否

準拠レベル

備考

SQL_ATTR_ACCESS_MODE

○

Core

−

SQL_ATTR_ASYNC_ENABLE

○

Level 1

−

SQL_ATTR_AUTO_IPD

×

Level 2

−

SQL_ATTR_AUTO_COMMIT

○

Level 1

−

SQL_ATTR_CONNECTION_DEAD

×

Level 1

−

SQL_ATTR_CONNECTION_TIMEOUT

○

Level 2

値0だけ指定できます。それ以外はエラーとなります。

SQL_ATTR_CURRENT_CATALOG

×

Level 2

−

SQL_ATTR_LOGIN_TIMEOUT

○

Level 2

値0だけ指定できます。それ以外も0が設定されます。

SQL_ATTR_METADATA_ID

×

Core

−

SQL_ATTR_ODBC_CURSORS

○

Core

カーソルライブラリ使用時だけ指定できます

SQL_ATTR_PACKET_SIZE

×

Level 2

−

SQL_ATTR_QUIET_MODE

×

Core

−

SQL_ATTR_TRACE

○

Core

−

SQL_ATTR_TRACEFILE

○

Core

−

SQL_ATTR_TRANSLATE_LIB

×

Core

−

SQL_ATTR_TRANSLATE_OPTION

×

Core

−

SQL_ATTR_ANSI_APP

○

規定されていません。

−

SQL_ATTR_TXN_ISOLATION

○

Level 1

−

SQL_ATTR_ENLIST_IN_DTC

○

規定されていません。

−

（凡例）

○：指定できます。

×：指定できません。

−：特にありません。

13.6.2　SQLGetConnectAttr

SQLGetConnectAttrで指定できるODBC接続属性を次の表に示します。

表13‒11　SQLGetConnectAttrで指定できるODBC接続属性

属性

指定可否

準拠レベル

備考

SQL_ATTR_ACCESS_MODE

○

Core

−

SQL_ATTR_ASYNC_ENABLE

○

Level 1

−

SQL_ATTR_AUTO_IPD

○

Level 2

−

SQL_ATTR_AUTO_COMMIT

○

Level 1

−

SQL_ATTR_CONNECTION_DEAD

○

Level 1

−

SQL_ATTR_CONNECTION_TIMEOUT

×

Level 2

−

SQL_ATTR_CURRENT_CATALOG

×

Level 2

−

SQL_ATTR_LOGIN_TIMEOUT

×

Level 2

−

SQL_ATTR_METADATA_ID

○

Core

−

SQL_ATTR_ODBC_CURSORS

×

Core

−

SQL_ATTR_PACKET_SIZE

×

Level 2

−

SQL_ATTR_QUIET_MODE

×

Core

−

SQL_ATTR_TRACE

○

Core

ドライバマネージャが返却します。

SQL_ATTR_TRACEFILE

○

Core

ドライバマネージャが返却します。

SQL_ATTR_TRANSLATE_LIB

×

Core

−

SQL_ATTR_TRANSLATE_OPTION

×

Core

−

SQL_ATTR_ANSI_APP

○

規定されていません。

−

SQL_ATTR_TXN_ISOLATION

○

Level 1

−

（凡例）

○：指定できます。

×：指定できません。

−：特にありません。

13.6.3　SQLSetDescField

SQLSetDescFieldで指定できるODBCディスクリプタ属性を次の表に示します。

表13‒12　SQLSetDescFieldで指定できるODBCディスクリプタ属性

属性

指定可否

準拠レベル

備考

SQL_DESC_ALLOC_TYPE

×

Core

−

SQL_DESC_ARRAY_SIZE

○

Core

−

SQL_DESC_ARRAY_STATUS_PTR

○

Core

−

SQL_DESC_BIND_OFFSET_PTR

○

Core

−

SQL_DESC_DESC_BIND_TYPE

○

Core

−

SQL_DESC_COUNT

○

Core

−

SQL_DESC_ROWS_PROCESSED_PTR

○

Core

−

SQL_DESC_AUTO_UNIQUE_VALUE

×

Level 2

−

SQL_DESC_BASE_COLUMN_NAME

×

Core

−

SQL_DESC_BASE_TABLE_NAME

×

Level 1

−

SQL_DESC_CASE_SENSITIVE

×

Core

−

SQL_DESC_CATALOG_NAME

×

Level 2

−

SQL_DESC_CONCISE_TYPE

○

Core

−

SQL_DESC_DATA_PTR

○

Core

−

SQL_DESC_DATETIME_INTERVAL_CODE

○

Core

−

SQL_DESC_DATETIME_INTERVAL_PRECISION

○

Core

−

SQL_DESC_SQL_DESC_DISPLAY_SIZE

×

Core

−

SQL_DESC_FIXED_PREC_SCALE

×

Core

−

SQL_DESC_INDICATOR_PTR

○

Core

−

SQL_DESC_LABEL

×

Level 2

−

SQL_DESC_LENGTH

○

Core

−

SQL_DESC_LITERAL_PREFIX

×

Core

−

SQL_DESC_LITERAL_SUFFIX

×

Core

−

SQL_DESC_LOCAL_TYPE_NAME

×

Core

−

SQL_DESC_NAME

○

Core

−

SQL_DESC_NULLABLE

×

Core

−

SQL_DESC_NUM_PREC_RADIX

○

規定されていません。

−

SQL_DESC_OCTET_LENGTH

○

Core

−

SQL_DESC_OCTET_LENGTH_PTR

○

Core

−

SQL_DESC_PARAMETER_TYPE

○

Core

−

SQL_DESC_PRECISION

○

Core

−

SQL_DESC_ROWVER

×

Level 1

−

SQL_DESC_SCALE

○

Core

−

SQL_DESC_SCHEMA_NAME

×

Level 1

−

SQL_DESC_SEARCHABLE

×

Core

−

SQL_DESC_TABLE_NAME

×

Level 1

−

SQL_DESC_TYPE

○

Core

−

SQL_DESC_TYPE_NAME

×

Core

−

SQL_DESC_UNNAMED

○

Core

−

SQL_DESC_UNSIGNED

×

Core

−

SQL_DESC_UPDATABLE

×

Core

−

（凡例）

○：指定できます。

×：指定できません。

−：特にありません。

13.6.4　SQLGetDescField

SQLGetDescFieldで指定できるODBCディスクリプタ属性を次の表に示します。

表13‒13　SQLGetDescFieldで指定できるODBCディスクリプタ属性

属性

指定可否

準拠レベル

備考

SQL_DESC_ALLOC_TYPE

○

Core

−

SQL_DESC_ARRAY_SIZE

○

Core

−

SQL_DESC_ARRAY_STATUS_PTR

○

Core

−

SQL_DESC_BIND_OFFSET_PTR

○

Core

−

SQL_DESC_DESC_BIND_TYPE

○

Core

−

SQL_DESC_COUNT

○

Core

−

SQL_DESC_ROWS_PROCESSED_PTR

○

Core

−

SQL_DESC_AUTO_UNIQUE_VALUE

○

Level 2

−

SQL_DESC_BASE_COLUMN_NAME

○

Core

−

SQL_DESC_BASE_TABLE_NAME

○

Level 1

−

SQL_DESC_CASE_SENSITIVE

○

Core

−

SQL_DESC_CATALOG_NAME

○

Level 2

−

SQL_DESC_CONCISE_TYPE

○

Core

−

SQL_DESC_DATA_PTR

○

Core

−

SQL_DESC_DATETIME_INTERVAL_CODE

○

Core

−

SQL_DESC_DATETIME_INTERVAL_PRECISION

○

Core

−

SQL_DESC_SQL_DESC_DISPLAY_SIZE

○

Core

−

SQL_DESC_FIXED_PREC_SCALE

○

Core

−

SQL_DESC_INDICATOR_PTR

○

Core

−

SQL_DESC_LABEL

○

Level 2

−

SQL_DESC_LENGTH

○

Core

−

SQL_DESC_LITERAL_PREFIX

○

Core

−

SQL_DESC_LITERAL_SUFFIX

○

Core

−

SQL_DESC_LOCAL_TYPE_NAME

○

Core

−

SQL_DESC_NAME

○

Core

−

SQL_DESC_NULLABLE

○

Core

−

SQL_DESC_NUM_PREC_RADIX

○

規定されていません。

−

SQL_DESC_OCTET_LENGTH

○

Core

−

SQL_DESC_OCTET_LENGTH_PTR

○

Core

−

SQL_DESC_PARAMETER_TYPE

○

Core

−

SQL_DESC_PRECISION

○

Core

−

SQL_DESC_ROWVER

×

Level 1

−

SQL_DESC_SCALE

○

Core

−

SQL_DESC_SCHEMA_NAME

○

Level 1

−

SQL_DESC_SEARCHABLE

○

Core

−

SQL_DESC_TABLE_NAME

○

Level 1

−

SQL_DESC_TYPE

○

Core

−

SQL_DESC_TYPE_NAME

○

Core

−

SQL_DESC_UNNAMED

○

Core

−

SQL_DESC_UNSIGNED

○

Core

−

SQL_DESC_UPDATABLE

○

Core

−

（凡例）

○：指定できます。

×：指定できません。

−：特にありません。

13.6.5　SQLSetEnvAttr

SQLSetEnvAttrで指定できるODBC環境属性を次の表に示します。

表13‒14　SQLSetEnvAttrで指定できるODBC環境属性

属性

指定可否

準拠レベル

備考

SQL_ATTR_CONNECTION_POOLING

○

規定されていません。

Conformance Levelに含まれません。

SQL_ATTR_CP_MATCH

○

規定されていません。

Conformance Levelに含まれません。

SQL_ATTR_ODBC_VERSION

○

Core

−

SQL_ATTR_OUTPUT_NTS

○

規定されていません。

Conformance Levelに含まれません。

（凡例）

○：指定できます。

−：特にありません。

13.6.6　SQLGetEnvAttr

SQLGetEnvAttrで指定できるODBC環境属性を次の表に示します。

表13‒15　SQLGetEnvAttrで指定できるODBC環境属性

属性

指定可否

準拠レベル

備考

SQL_ATTR_CONNECTION_POOLING

○

規定されていません。

Conformance Levelに含まれません。

SQL_ATTR_CP_MATCH

○

規定されていません。

Conformance Levelに含まれません。

SQL_ATTR_ODBC_VERSION

○

Core

−

SQL_ATTR_OUTPUT_NTS

○

規定されていません。

Conformance Levelに含まれません。

（凡例）

○：指定できます。

−：特にありません。

13.6.7　SQLSetStmtAttr

SQLSetStmtAttrで指定できるODBCステートメント属性を次の表に示します。

表13‒16　SQLSetStmtAttrで指定できるODBCステートメント属性

属性

指定可否

準拠レベル

備考

SQL_ATTR_APP_PARAM_DESC

○

Core

−

SQL_ATTR_APP_ROW_DESC

○

Core

−

SQL_ATTR_ASYNC_ENABLE

○

Level 1

−

SQL_ATTR_CONCURRENCY

○

Level 2

−

SQL_ATTR_CURSOR_SCROLLABLE

○

Level 1

−

SQL_ATTR_CURSOR_SENSITIVITY

○

Level 2

−

SQL_ATTR_CURSOR_TYPE

○

Level 2

SQL_CURSOR_FORWARD_ONLYだけ指定できます。それ以外を指定してもSQL_CURSOR_FORWARD_ONLYが設定されます。

SQL_ATTR_ENABLE_AUTO_IPD

○

Level 2

−

SQL_ATTR_FETCH_BOOKMARK_PTR

×

Level 2

−

SQL_ATTR_IMP_PARAM_DESC

×

Core

−

SQL_ATTR_IMP_ROW_DESC

×

Core

−

SQL_ATTR_KEYSET_SIZE

×

Level 2

−

SQL_ATTR_MAX_LENGTH

○

Level 1

−

SQL_ATTR_MAX_ROWS

○

Level 1

−

SQL_ATTR_METADATA_ID

○

Core

−

SQL_ATTR_NOSCAN

○

Core

−

SQL_ATTR_PARAM_BIND_OFFSET_PTR

×

Core

−

SQL_ATTR_PARAM_BIND_TYPE

○

Core

−

SQL_ATTR_PARAM_OPERATION_PTR

×

Core

−

SQL_ATTR_PARAM_STATUS_PTR

○

Core

−

SQL_ATTR_PARAMS_PROCESSED_PTR

○

Core

−

SQL_ATTR_PARAMSET_SIZE

○

Core

−

SQL_ATTR_QUERY_TIMEOUT

×

Level 2

−

SQL_ATTR_RETRIEVE_DATA

○

Level 1

−

SQL_ATTR_ROW_ARRAY_SIZE

○

Core

−

SQL_ATTR_ROW_BIND_OFFSET_PTR

○

Core

−

SQL_ATTR_ROW_BIND_TYPE

○

Core

−

SQL_ATTR_ROW_NUMBER

×

Level 1

−

SQL_ATTR_ROW_OPERATION_PTR

○

Level 1

−

SQL_ATTR_ROW_STATUS_PTR

○

Core

−

SQL_ATTR_ROWS_FETCHED_PTR

○

Core

−

SQL_ATTR_SIMULATE_CURSOR

×

Level 2

−

SQL_ATTR_USE_BOOKMARKS

×

Level 2

−

（凡例）

○：指定できます。

×：指定できません。

−：特にありません。

13.6.8　SQLGetStmtAttr

SQLGetStmtAttrで指定できるODBCステートメント属性を次の表に示します。

表13‒17　SQLGetStmtAttrで指定できるODBCステートメント属性

属性

指定可否

準拠レベル

備考

SQL_ATTR_APP_PARAM_DESC

○

Core

−

SQL_ATTR_APP_ROW_DESC

○

Core

−

SQL_ATTR_ASYNC_ENABLE

○

Level 1

−

SQL_ATTR_CONCURRENCY

○

Level 2

−

SQL_ATTR_CURSOR_SCROLLABLE

○

Level 1

−

SQL_ATTR_CURSOR_SENSITIVITY

○

Level 2

−

SQL_ATTR_CURSOR_TYPE

○

Level 2

−

SQL_ATTR_ENABLE_AUTO_IPD

○

Level 2

−

SQL_ATTR_FETCH_BOOKMARK_PTR

×

Level 2

−

SQL_ATTR_IMP_PARAM_DESC

○

Core

−

SQL_ATTR_IMP_ROW_DESC

○

Core

−

SQL_ATTR_KEYSET_SIZE

×

Level 2

−

SQL_ATTR_MAX_LENGTH

○

Level 1

−

SQL_ATTR_MAX_ROWS

○

Level 1

−

SQL_ATTR_METADATA_ID

○

Core

−

SQL_ATTR_NOSCAN

○

Core

−

SQL_ATTR_PARAM_BIND_OFFSET_PTR

×

Core

−

SQL_ATTR_PARAM_BIND_TYPE

×

Core

−

SQL_ATTR_PARAM_OPERATION_PTR

○

Core

−

SQL_ATTR_PARAM_STATUS_PTR

○

Core

−

SQL_ATTR_PARAMS_PROCESSED_PTR

○

Core

−

SQL_ATTR_PARAMSET_SIZE

○

Core

−

SQL_ATTR_QUERY_TIMEOUT

×

Level 2

−

SQL_ATTR_RETRIEVE_DATA

○

Level 1

−

SQL_ATTR_ROW_ARRAY_SIZE

○

Core

−

SQL_ATTR_ROW_BIND_OFFSET_PTR

×

Core

−

SQL_ATTR_ROW_BIND_TYPE

×

Core

−

SQL_ATTR_ROW_NUMBER

×

Level 1

−

SQL_ATTR_ROW_OPERATION_PTR

○

Level 1

−

SQL_ATTR_ROW_STATUS_PTR

○

Core

−

SQL_ATTR_ROWS_FETCHED_PTR

○

Core

−

SQL_ATTR_SIMULATE_CURSOR

×

Level 2

−

SQL_ATTR_USE_BOOKMARKS

×

Level 2

−

（凡例）

○：指定できます。

×：指定できません。

−：特にありません。

13.6.9　SQLGetInfo

SQLGetInfoで指定できる情報型を次に示します。

(1)　ドライバの情報

アクティブステートメントの数，データソース名，及びインタフェース規格の合致レベルなどのODBCドライバについての情報を返却します。SQLGetInfoで指定できるドライバの情報を次の表に示します。

表13‒18　SQLGetInfoで指定できるドライバの情報

オプション値

指定可否

備考

SQL_ACTIVE_ENVIRONMENTS

○

−

SQL_ASYNC_MODE

○

−

SQL_BATCH_ROW_COUNT

○

−

SQL_BATCH_SUPPORT

○

−

SQL_DATA_SOURCE_NAME

○

−

SQL_DRIVER_HDBC

○

−

SQL_DRIVER_HDESC

○

ドライバマネージャが返却します。

SQL_DRIVER_HENV

○

−

SQL_DRIVER_HLIB

○

ドライバマネージャが返却します。

SQL_DRIVER_HSTMT

○

−

SQL_DRIVER_NAME

○

−

SQL_DRIVER_ODBC_VER

○

−

SQL_DRIVER_VER

○

−

SQL_DYNAMIC_CURSOR_ATTRIBUTES1

○

−

SQL_DYNAMIC_CURSOR_ATTRIBUTES2

○

−

SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1

○

−

SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2

○

−

SQL_FILE_USAGE

○

−

SQL_GETDATA_EXTENSIONS

○

−

SQL_INFO_SCHEMA_VIEWS

○

−

SQL_KEYSET_CURSOR_ATTRIBUTES1

○

−

SQL_KEYSET_CURSOR_ATTRIBUTES2

○

−

SQL_MAX_ASYNC_CONCURRENT_STATEMENTS

○

−

SQL_MAX_CONCURRENT_ACTIVITIES

○

−

SQL_MAX_DRIVER_CONNECTIONS

○

−

SQL_ODBC_INTERFACE_CONFORMANCE

○

−

SQL_ODBC_VER

○

−

SQL_PARAM_ARRAY_ROW_COUNTS

○

−

SQL_PARAM_ARRAY_SELECTS

○

−

SQL_ROW_UPDATES

○

−

SQL_SEARCH_PATTERN_ESCAPE

○

−

SQL_SERVER_NAME

○

−

SQL_STATIC_CURSOR_ATTRIBUTES1

○

−

SQL_STATIC_CURSOR_ATTRIBUTES2

○

−

（凡例）

○：指定できます。

−：特にありません。

(2)　DBMS製品の情報

DBMS製品の名称やバージョンなどの情報を返却します。SQLGetInfoで指定できるDBMS製品の情報を次の表に示します。

表13‒19　SQLGetInfoで指定できるDBMS製品の情報

オプション値

指定可否

備考

SQL_DATABASE_NAME

○

−

SQL_DBMS_NAME

○

−

SQL_DBMS_VER

○

−

（凡例）

○：指定できます。

−：特にありません。

(3)　データソースの情報

カーソルの特性やトランザクションの機能など，データソースの情報を返却します。SQLGetInfoで指定できるデータソースの情報を次の表に示します。

表13‒20　SQLGetInfoで指定できるデータソースの情報

オプション値

指定可否

備考

SQL_ACCESSIBLE_PROCEDURES

○

−

SQL_ACCESSIBLE_TABLES

○

−

SQL_BOOKMARK_PERSISTENCE

○

−

SQL_CATALOG_TERM

○

−

SQL_COLLATION_SEQ

○

−

SQL_CONCAT_NULL_BEHAVIOR

○

−

SQL_CURSOR_COMMIT_BEHAVIOR

○

−

SQL_CURSOR_ROLLBACK_BEHAVIOR

○

−

SQL_CURSOR_SENSITIVITY

○

−

SQL_DATA_SOURCE_READ_ONLY

○

−

SQL_DEFAULT_TXN_ISOLATION

○

−

SQL_DESCRIBE_PARAMETER

○

−

SQL_MULT_RESULT_SETS

○

−

SQL_MULTIPLE_ACTIVE_TXN

○

−

SQL_NEED_LONG_DATA_LEN

○

−

SQL_NULL_COLLATION

○

−

SQL_PROCEDURE_TERM

○

−

SQL_SCHEMA_TERM

○

−

SQL_SCROLL_OPTIONS

○

−

SQL_TABLE_TERM

○

−

SQL_TXN_CAPABLE

○

−

SQL_TXN_ISOLATION_OPTION

○

−

SQL_USER_NAME

○

−

（凡例）

○：指定できます。

−：特にありません。

(4)　SQLステートメントの情報

データソースでサポートしているSQLステートメントについての情報を返却します。SQLGetInfoで指定できるSQLステートメントの情報を次の表に示します。

表13‒21　SQLGetInfoで指定できるSQLステートメントの情報

オプション値

指定可否

備考

SQL_AGGREGATE_FUNCTIONS

○

−

SQL_ALTER_DOMAIN

○

−

SQL_ALTER_SCHEMA

×

−

SQL_ALTER_TABLE

○

−

SQL_ANSI_SQL_DATETIME_LITERALS

○

−

SQL_CATALOG_LOCATION

○

−

SQL_CATALOG_NAME

○

−

SQL_CATALOG_NAME_SEPARATOR

○

−

SQL_CATALOG_USAGE

○

−

SQL_COLUMN_ALIAS

○

−

SQL_CORRELATION_NAME

○

−

SQL_CREATE_ASSERTION

○

−

SQL_CREATE_CHARACTER_SET

○

−

SQL_CREATE_COLLATION

○

−

SQL_CREATE_DOMAIN

○

−

SQL_CREATE_SCHEMA

○

−

SQL_CREATE_TABLE

○

−

SQL_CREATE_TRANSLATION

○

−

SQL_DDL_INDEX

○

−

SQL_DROP_ASSERTION

○

−

SQL_DROP_CHARACTER_SET

○

−

SQL_DROP_COLLATION

○

−

SQL_DROP_DOMAIN

○

−

SQL_DROP_SCHEMA

○

−

SQL_DROP_TABLE

○

−

SQL_DROP_TRANSLATION

○

−

SQL_DROP_VIEW

○

−

SQL_EXPRESSIONS_IN_ORDERBY

○

−

SQL_GROUP_BY

○

−

SQL_IDENTIFIER_CASE

○

−

SQL_IDENTIFIER_QUOTE_CHAR

○

−

SQL_INDEX_KEYWORDS

○

−

SQL_INSERT_STATEMENT

○

−

SQL_INTEGRITY

○

−

SQL_KEYWORDS

○

−

SQL_LIKE_ESCAPE_CLAUSE

○

−

SQL_NON_NULLABLE_COLUMNS

○

−

SQL_SQL_CONFORMANCE

○

−

SQL_OJ_CAPABILITIES

○

−

SQL_ORDER_BY_COLUMNS_IN_SELECT

○

−

SQL_OUTER_JOINS

○

−

SQL_PROCEDURES

○

−

SQL_QUOTED_IDENTIFIER_CASE

○

−

SQL_SCHEMA_USAGE

○

−

SQL_SPECIAL_CHARACTERS

○

−

SQL_SUBQUERIES

○

−

SQL_UNION

○

−

（凡例）

○：指定できます。

×：指定できません。

−：特にありません。

(5)　SQLステートメントの制限に関する情報

識別子の最大長や選択一覧の列の最大数など，SQLステートメントの識別子や句適用される制限に関する情報を返却します。SQLGetInfoで指定できるSQLステートメントの制限に関する情報を次の表に示します。

表13‒22　SQLGetInfoで指定できるSQLステートメントの制限に関する情報

オプション値

指定可否

備考

SQL_MAX_BINARY_LITERAL_LEN

○

−

SQL_MAX_CATALOG_NAME_LEN

○

−

SQL_MAX_CHAR_LITERAL_LEN

○

−

SQL_MAX_COLUMN_NAME_LEN

○

−

SQL_MAX_COLUMNS_IN_GROUP_BY

○

−

SQL_MAX_COLUMNS_IN_INDEX

○

−

SQL_MAX_COLUMNS_IN_ORDER_BY

○

−

SQL_MAX_COLUMNS_IN_SELECT

○

−

SQL_MAX_COLUMNS_IN_TABLE

○

−

SQL_MAX_CURSOR_NAME_LEN

○

−

SQL_MAX_IDENTIFIER_LEN

○

−

SQL_MAX_INDEX_SIZE

○

−

SQL_MAX_PROCEDURE_NAME_LEN

○

−

SQL_MAX_ROW_SIZE

○

−

SQL_MAX_ROW_SIZE_INCLUDES_LONG

○

−

SQL_MAX_SCHEMA_NAME_LEN

○

−

SQL_MAX_STATEMENT_LEN

○

−

SQL_MAX_TABLE_NAME_LEN

○

−

SQL_MAX_TABLES_IN_SELECT

○

−

SQL_MAX_USER_NAME_LEN

○

−

（凡例）

○：指定できます。

−：特にありません。

(6)　スカラ関数の情報

データソース，又はドライバがサポートしているスカラ関数の情報を返却します。SQLGetInfoで指定できるスカラ関数の情報を次の表に示します。

表13‒23　SQLGetInfoで指定できるスカラ関数の情報

オプション値

指定可否

備考

SQL_CONVERT_FUNCTIONS

○

−

SQL_NUMERIC_FUNCTIONS

○

−

SQL_STRING_FUNCTIONS

○

−

SQL_SYSTEM_FUNCTIONS

○

−

SQL_TIMEDATE_ADD_INTERVALS

○

−

SQL_TIMEDATE_DIFF_INTERVALS

○

−

SQL_TIMEDATE_FUNCTIONS

○

−

（凡例）

○：指定できます。

−：特にありません。

(7)　変換先のSQLデータ型の情報

データソースが指定されたSQLデータ型をCONVERTスカラ関数で変換する場合の変換先のSQLデータ型を返却します。SQLGetInfoで指定できる変換先のSQLデータ型の情報を次の表に示します。

表13‒24　SQLGetInfoで指定できる変換先のSQLデータ型の情報

オプション値

指定可否

備考

SQL_CONVERT_BIGINT

○

−

SQL_CONVERT_BINARY

○

−

SQL_CONVERT_BIT

○

−

SQL_CONVERT_CHAR

○

−

SQL_CONVERT_DATE

○

−

SQL_CONVERT_DECIMAL

○

−

SQL_CONVERT_DOUBLE

○

−

SQL_CONVERT_FLOAT

○

−

SQL_CONVERT_INTEGER

○

−

SQL_CONVERT_INTERVAL_YEAR_MONTH

○

−

SQL_CONVERT_INTERVAL_DAY_TIME

○

−

SQL_CONVERT_LONGVARBINARY

○

−

SQL_CONVERT_LONGVARCHAR

○

−

SQL_CONVERT_NUMERIC

○

−

SQL_CONVERT_REAL

○

−

SQL_CONVERT_SMALLINT

○

−

SQL_CONVERT_TIME

○

−

SQL_CONVERT_TIMESTAMP

○

−

SQL_CONVERT_TINYINT

○

−

SQL_CONVERT_VARBINARY

○

−

SQL_CONVERT_VARCHAR

○

−

（凡例）

○：指定できます。

−：特にありません。

(8)　ODBC3.0以降に追加された情報型

ODBC3.0以降に追加された情報型を次の表に示します。

表13‒25　ODBC3.0以降に追加されたSQLGetInfoで指定できる情報型

オプション値

指定可否

備考

SQL_ACTIVE_ENVIRONMENTS

○

−

SQL_AGGREGATE_FUNCTIONS

○

−

SQL_ALTER_DOMAIN

○

−

SQL_ALTER_SCHEMA

×

−

SQL_ANSI_SQL_DATETIME_LITERALS

○

−

SQL_ASYNC_MODE

○

−

SQL_BATCH_ROW_COUNT

○

−

SQL_BATCH_SUPPORT

○

−

SQL_CATALOG_NAME

○

−

SQL_COLLATION_SEQ

○

−

SQL_CONVERT_INTERVAL_YEAR_MONTH

○

−

SQL_CONVERT_INTERVAL_DAY_TIME

○

−

SQL_CREATE_ASSERTION

○

−

SQL_CREATE_CHARACTER_SET

○

−

SQL_CREATE_COLLATION

○

−

SQL_CREATE_DOMAIN

○

−

SQL_CREATE_SCHEMA

○

−

SQL_CREATE_TABLE

○

−

SQL_CREATE_TRANSLATION

○

−

SQL_CURSOR_SENSITIVITY

○

−

SQL_DDL_INDEX

○

−

SQL_DESCRIBE_PARAMETER

○

−

SQL_DM_VER

○

ドライバマネージャが返却します。

SQL_DRIVER_HDESC

○

−

SQL_DROP_ASSERTION

○

−

SQL_DROP_CHARACTER_SET

○

−

SQL_DROP_COLLATION

○

−

SQL_DROP_DOMAIN

○

−

SQL_DROP_SCHEMA

○

−

SQL_DROP_TABLE

○

−

SQL_DROP_TRANSLATION

○

−

SQL_DROP_VIEW

○

−

SQL_DYNAMIC_CURSOR_ATTRIBUTES1

○

−

SQL_DYNAMIC_CURSOR_ATTRIBUTES2

○

−

SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1

○

−

SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2

○

−

SQL_INFO_SCHEMA_VIEWS

○

−

SQL_INSERT_STATEMENT

○

−

SQL_KEYSET_CURSOR_ATTRIBUTES1

○

−

SQL_KEYSET_CURSOR_ATTRIBUTES2

○

−

SQL_MAX_ASYNC_CONCURRENT_STATEMENTS

○

−

SQL_MAX_IDENTIFIER_LEN

○

−

SQL_PARAM_ARRAY_ROW_COUNTS

○

−

SQL_PARAM_ARRAY_SELECTS

○

−

SQL_STATIC_CURSOR_ATTRIBUTES1

○

−

SQL_STATIC_CURSOR_ATTRIBUTES2

○

−

SQL_SQL92_DATETIME_FUNCTIONS

○

−

SQL_SQL92_FOREIGN_KEY_DELETE_RULE

○

−

SQL_SQL92_FOREIGN_KEY_UPDATE_RULE

○

−

SQL_SQL92_GRANT

○

−

SQL_SQL92_NUMERIC_VALUE_FUNCTIONS

○

−

SQL_SQL92_PREDICATES

○

−

SQL_SQL92_RELATIONAL_JOIN_OPERATORS

○

−

SQL_SQL92_REVOKE

○

−

SQL_SQL92_ROW_VALUE_CONSTRUCTOR

○

−

SQL_SQL92_STRING_FUNCTIONS

○

−

SQL_SQL92_VALUE_EXPRESSIONS

○

−

SQL_STANDARD_CLI_CONFORMANCE

○

−

SQL_XOPEN_CLI_YEAR

○

−

（凡例）

○：指定できます。

×：指定できません。

−：特にありません。

13.6.10　SQLColAttribute

SQLColAttributeで指定できるODBCディスクリプタ属性を次の表に示します。

表13‒26　SQLColAttributeで指定できるODBCディスクリプタ属

属性

指定可否

準拠レベル

備考

SQL_DESC_AUTO_UNIQUE_VALUE

○

Level 2

−

SQL_DESC_BASE_COLUMN_NAME

○

Core

ベース列名ではなくSQLのDESCRIBE文で取得できる列名を返します。そのため，SQL_DESC_NAMEと同じ列名を返します。

SQL_DESC_BASE_TABLE_NAME

○

Level 1

−

SQL_DESC_CASE_SENSITIVE

○

Core

−

SQL_DESC_CATALOG_NAME

○

Level 2

−

SQL_DESC_CONCISE_TYPE

○

Core

−

SQL_DESC_DATA_PTR

○

Core

−

SQL_DESC_DATETIME_INTERVAL_CODE

○

Core

−

SQL_DESC_DATETIME_INTERVAL_PRECISION

○

Core

−

SQL_DESC_SQL_DESC_DISPLAY_SIZE

○

Core

−

SQL_DESC_FIXED_PREC_SCALE

○

Core

−

SQL_DESC_INDICATOR_PTR

○

Core

−

SQL_DESC_LABEL

○

Level 2

−

SQL_DESC_LENGTH

○

Core

−

SQL_DESC_LITERAL_PREFIX

○

Core

−

SQL_DESC_LITERAL_SUFFIX

○

Core

−

SQL_DESC_LOCAL_TYPE_NAME

○

Core

−

SQL_DESC_NAME

○

Core

−

SQL_DESC_NULLABLE

○

Core

−

SQL_DESC_NUM_PREC_RADIX

○

−

−

SQL_DESC_OCTET_LENGTH

○

Core

−

SQL_DESC_OCTET_LENGTH_PTR

○

Core

−

SQL_DESC_PARAMETER_TYPE

○

Core

−

SQL_DESC_PRECISION

○

Core

−

SQL_DESC_SCALE

○

Core

−

SQL_DESC_SCHEMA_NAME

○

Level 1

−

SQL_DESC_SEARCHABLE

○

Core

−

SQL_DESC_TABLE_NAME

○

Level 1

−

SQL_DESC_TYPE

○

Core

−

SQL_DESC_TYPE_NAME

○

Core

−

SQL_DESC_UNNAMED

○

Core

−

SQL_DESC_UNSIGNED

○

Core

−

SQL_DESC_UPDATABLE

○

Core

−

（凡例）

○：指定できます。

−：特にありません。

13.7　HiRDB ODBC3.5ドライバの接続文字列

HiRDB ODBC3.5ドライバで，SQLBrowseConnect及びSQLDriverConnect関数に指定できる接続文字列のキーワードについて次の表に示します。

なお，各キーワードに対応する接続情報については，「インストール手順（Windows版の場合）」の「データソースの設定」，又は「インストール手順（UNIX版の場合）」の「データソースの設定」を参照してください。

表13‒27　SQLBrowseConnect及びSQLDriverConnect関数に指定できる接続文字列のキーワード

項番

キーワード

ODBC関数

SQLBrowseConnect

SQLDriverConnect

DSN指定

DRIVER指定

1

DSN=

○

○

×

2

UID=

○

○

○

3

PWD=

○

○

○

4

DRIVER=

×

×

○

5

PDHOST=

×

×

○

6

PDNAMEPORT=

×

×

○

7

INIFLNAME=

×

×

○

8

ODBCHARSET=※

×

×

○

（凡例）

○：指定できます。

×：指定できません。

注※

Windows版では指定できません。

13.8　ODBC関数の非同期実行

13.8.1　ODBC関数の非同期実行とは

ODBC対応アプリケーションプログラムからHiRDBをアクセスする場合，ODBC関数を非同期に実行できます。

ODBC関数を同期実行する場合，関数呼出しが終了するまで，ODBCドライバはアプリケーションプログラムに制御を返せません。非同期実行の場合だと，任意にアプリケーションプログラムに制御を返せます。そのため，ODBC関数が非同期実行されている間に，アプリケーションプログラムはほかの処理を実行できます。

非同期実行できるODBC関数を次に示します。

SQLColumnPrivileges

SQLColumns

SQLExecute

SQLExecDirect

SQLParamData

SQLProcedureColumns

SQLFetch

SQLStatistics

SQLTablePrivileges

SQLTables

SQLProcedures

13.8.2　ODBC関数の非同期実行の手順

ODBC関数を非同期に実行する場合の手順を次に示します。

＜手順＞

特定のhstmt（ステートメントハンドル）だけで非同期実行を有効にするオプションSQL_ASYNC_ENABLEを使用して，SQLSetStmtOption※1を呼び出します。hdbc（接続ハンドル）について，関連するすべてのhstmtで非同期実行を有効にする場合は，オプションSQL_ASYNC_ENABLEを使用してSQLSetConnectOption※2を呼び出します。

非同期実行が有効となっているhstmtを使用して非同期実行できるODBC関数※1を呼び出すと，ODBCドライバはその関数の非同期実行を開始し，SQL_STILL_EXECUTINGを返します（非同期実行とならなかった場合，又はエラーが発生した場合は，SQL_SUCCESSやSQL_ERRORなどの同期実行時のコードを返します）。

ODBC関数が非同期実行されている間に，アプリケーションプログラムはほかの処理を実行できます。非同期実行しているhstmtと，それに関連するhdbcでアプリケーションプログラムが呼び出せる関数は，SQLAllocStmt，SQLCancel，又はSQLGetFunctionsだけです。そのほかの関数（非同期実行中の関数を除く）を呼び出すと，ドライバマネージャからシーケンスエラーが返されます。

アプリケーションプログラムは非同期実行のODBC関数を呼び出して，その関数の実行が終了したかどうかを確認します。関数が引き続き実行状態の場合はSQL_STILL_EXECUTINGが返され，処理が終了している場合はSQL_SUCCESSやSQL_ERRORなどのリターンコードが返されます。

確認のために関数を呼び出す場合，hstmt以外の引数は指定しても無視されます（ただし，不当なアドレス，指定値はエラーとなる可能性があるため，有効な値でなければなりません）。例えば，INSERT文でSQLExecDirectを非同期実行し，再度SQLExecDirectを呼び出す場合に，UPDATE文を指定していても戻り値はINSERT文実行の状態が返ります。

注

特定のhstmtだけで非同期実行を無効にする場合も，オプションSQL_ASYNC_ENABLEを使用してSQLSetStmtOptionを呼び出します。hdbcについて，関連するすべてのhstmtで非同期実行を無効にする場合は，オプションSQL_ASYNC_ENABLEを使用してSQLSetConnectOptionを呼び出します。

注※1

SQLSetStmtOptionでの設定内容を次に示します。

fOption

設定内容

SQL_ASYNC_ENABLE

SQL_ASYNC_ENABLE_OFF，又はSQL_ASYNC_ENABLE _ON

SQL_BIND_TYPE

設定できません。

SQL_MAX_LENGTH

サーバの制限値，又はユーザの指定値

SQL_NOSCAN (Default=FALSE)

SQL_NOSCAN_OFF，又はSQL_NOSCAN_ON

SQL_QUERY_TIMEOUT

設定できません。

SQL_MAX_ROWS

サーバの制限値，又はユーザの指定値

注※2

SQLSetConnectOptionでの設定内容を次に示します。

fOption

設定内容

SQL_ACCESS_MODE

SQL_MODE_READ_WRITE固定

SQL_AUTOCOMMIT

SQL_AUTOCOMMIT_OFF，又は SQL_AUTOCOMMIT_ON

SQL_LOGIN_TIMEOUT

設定できません。

SQL_OPT_TRACE

0(Off)固定。

ODBCドライバマネージャから返されるオプションです。

SQL_OPT_TRACEFILE

NULL固定。

ODBCドライバマネージャから返されるオプションです。

SQL_TRANSLATE_DLL

設定できません。

SQL_TRANSLATE_OPTION

設定できません。

SQL_TXN_ISOLATION

SQL_TXN_READ_UNCOMMITED

SQL_ASYNC_ENABLE

SQL_ASYNC_ENABLE_OFF，又はSQL_ASYNC_ENABLE _ON

13.8.3　ODBC関数の非同期実行のキャンセル

(1)　非同期実行をキャンセルするには

非同期実行中のODBC関数をキャンセルするには，SQLCancelを呼び出します。

SQLCancelは，指定されたhstmtが現在非同期実行中であることを確認できた時点で，サーバに対して処理のキャンセル要求をします。

SQLCancelの戻り値では，キャンセル要求が終了したかどうかを通知し，実際に非同期実行の関数がキャンセルされたかどうかは処理中の非同期実行の関数を呼び出して，その戻り値で判断します。関数が実行中の場合はSQL_STILL_EXECUTINGが返され，キャンセル処理が終了している場合はSQL_ERRORとSQLSTATE S1008（処理のキャンセル）が返されます。また，既に正常に終了していた場合や，ほかのエラーが発生した場合には，SQL_SUCCESSやSQL_ERRORなどのコードが返ります。

(2)　マルチスレッドのアプリケーションプログラムでの非同期実行のキャンセル

マルチスレッドのアプリケーションプログラムでは，hstmtで同期実行しているODBC関数をキャンセルできます。キャンセルする場合，アプリケーションプログラムはキャンセルする関数に使用されているhstmtと同じhstmtで，異なるスレッドからSQLCancelを呼び出します。

SQLCancelの戻り値には，ドライバが要求を正しく受けたかどうかを表す値が返されます。また，元の関数の戻り値には，SQL_SUCCESS，又はSQL_ERRORとSQLSTATE S1008（処理のキャンセル）が返されます。

注意：

HiRDBのキャンセル処理は接続単位で実行され，いったんサーバとの接続が強制的に切断されます（サーバ側でKFPS00993-I：サーバプロセス終了REQUEST=clt_attentionが出力されます）。そのため，指定したhstmtに関連するhstmtの，すべてのステートメントがキャンセル（トランザクションはロールバック）されます。したがって，非同期実行中のODBC関数をキャンセルする場合，更新途中のデータを十分考慮する必要があります。

13.8.4　コーディング例

非同期実行のコーディング例を次に示します。

  SQLSetStmtOption(hstmt,SQL_ASYNC_ENABLE,SQL_ASYNC_ENABLE_ON);
            :
    SQLFetchでの検索処理
  rc=SQLFetch(hstmt);
  while(rc==SQL_STILL_EXECUTING)
  {
           :
    非同期実行中 APの処理を続行
           :
      if(処理のキャンセル要求あり)
      {
          rc=SQL_Cancel(hstmt);
          if(rc==SQL_ERROR){  キャンセル要求失敗 エラー処理へ  }
      }
     rc=SQLFetch(hstmt);
  }
  if(rc == SQL_ERROR){   エラー処理へ  }
    検索データ加工処理へ
         :

13.9　カーソルライブラリの設定

ODBC対応のUAPでSQLExtendedFetchを使用したい場合は，カーソルライブラリの設定をする必要があります。カーソルライブラリの設定をする場合，次の二つの方法があります。

ODBC関数のSetConnectOptionを使用する場合

ODBC関数のSetConnectOptionの引数のfOptionにSQL_ODBC_CURSORS，vParamにSQL_CUR_USE_ODBCを指定します。

Visual BasicのRDOを使用する場合

rdoEnvironmentオブジェクトのCursorDriverプロパティにrdUseOdbcを指定します。Visual BasicのRDOを使用した場合のコーディング例を次に示します。

  Dim mrdoEnv As rdoEnvironment
  Set mrdoEnv = rdoEngine.rdoCreateEnvironment("", "", "")
      mrdoEnv.CursorDriver = rdUseOdbc
      Src = "DSN=host1;UID=USER_A;PWD=USER_A"
      Set mrdoConn = mrdoEnv.OpenConnection
                     ("", rdDriverComplete, False, Src)
          :
          :

ODBCドライバのインストール用フロッピーディスク内のSampleapディレクトリに，簡単なサンプルUAPがありますので参照してください。

13.10　ファイルDSNについて

ファイルDSNを使用すると，データソースに接続するための情報をファイルに格納するので，ODBC.INIやレジストリから情報を取得しないで接続を確立できます。

ファイルを共用することで，複数ユーザが各マシンにデータソース（従来のマシンデータソース）を登録しなくてもHiRDBに接続できるようになります。なお，ファイルDSNは，ODBCコンポーネントバージョンが3.0以上の場合に使用できます。

ファイルDSNは，ODBCのデータソースアドミニストレータから作成できます。

ファイルDSNの作成方法

ファイルDSNを選択−追加−ドライバの選択（HiRDB 32bit Driver）−格納ファイル名指定をすることでHiRDBへの接続要求がされ，SQLDriverConnectから返される完全接続文字列を基にドライバマネージャがファイルを作成します。ただし，この場合，パスワードはファイルDSNには格納されません。パスワードも共有する場合は，作成したファイル内に「PWD=パスワード」の1行を追加してください。

13.11　UnicodeのUAPの実行

ここでは，UnicodeのUAPで使用できるODBC関数，及び注意事項について説明します。

13.11.1　UnicodeのUAPで使用できるODBC関数

UnicodeのUAPで使用できるODBC関数を次の表に示します。

表13‒28　UnicodeのUAPで使用できるODBC関数

分類

関数名

機能

データソースとの接続

SQLConnectW

データソース名，認可識別子，及びパスワードによって特定のドライバに接続します。

SQLDriverConnectW

接続文字列によって特定のドライバと接続します。又は，ドライバマネージャとドライバに対して，ユーザ用に接続ダイアログボックスの表示を要求します。

SQLBrowseConnectW

連続したレベルの接続属性と，有効な属性値を返します。各接続属性に値が指定されている場合はデータソースに接続します。

SQLDriversW

インストールされているドライバと，その属性の一覧を返します。

ドライバ及びデータソースの情報取得

SQLDataSourcesW

利用できるデータソースの一覧を返します。

SQLGetInfoW

特定のドライバとデータソースの情報を返します。

ドライバオプションの設定及び取得

SQLSetConnectAttrW

接続属性を設定します。

SQLGetConnectAttrW

接続属性の値を返します。

SQLSetStmtAttrW

ステートメント属性を設定します。

SQLGetStmtAttrW

ステートメント属性の値を返します。

ディスクリプタ値の設定及び取得

SQLSetDescFieldW

一つのディスクリプタフィールドを設定します。

SQLGetDescFieldW

一つのディスクリプタフィールドの値を返します。

SQLSetDescRecW

複数のディスクリプタフィールドを設定します。

SQLGetDescRecW

複数のディスクリプタフィールドの値を返します。

SQLPrepareW

後で実行するためにSQLステートメントを準備します。

SQL要求の作成

SQLSetCursorNameW

カーソル名を指定します。

SQLGetCursorNameW

ステートメントハンドルに関連するカーソル名を返します。

SQLの実行

SQLExecDirectW

ステートメントを実行します。

SQLNativeSqlW

ドライバが変換したSQLステートメントのテキストを返します。

実行結果及び実行結果情報の取得

SQLDescribeColW

結果セットの列を記述します。

SQLColAttributeW

結果セットの列の属性を記述します。

SQLGetDiagFieldW

追加の診断情報（診断データ構造体の一つのフィールド）を返します。

SQLGetDiagRecW

追加の診断情報（診断データ構造体の複数のフィールド）を返します。

SQLColumnPrivilegesW

列の一覧と，一つ以上のテーブルに関連する特権を返します。

データソースのシステム情報の取得

SQLColumnsW

指定されたテーブルの列名の一覧を返します。

SQLForeignKeysW

指定されたテーブルに外部キーがある場合，外部キーを構成する列名の一覧を返します。

SQLPrimaryKeysW

指定されたテーブルの主キーを構成する列名の一覧を返します。

SQLProcedureColumnsW

入力パラメタ又は出力パラメタの一覧と，指定されたプロシジャの結果セットを構成する列を返します。

SQLProceduresW

指定されたデータソース内のプロシジャ名の一覧を返します。

SQLSpecialColumnsW

指定されたテーブル内で行を一意に識別できる最適の列，又は行の値がトランザクションによって変更されるときに自動的に修正される列の情報を返します。

SQLStatisticsW

単一のテーブルに関する統計情報と，テーブルに関するインデクスの一覧を返します。

SQLTablePrivilegesW

テーブルの一覧と，各テーブルに関連する特権を返します。

SQLTablesW

指定されたデータソース内のテーブル名の一覧を返します。

13.11.2　注意事項

クライアント環境定義のPDCLTCNVMODEにUCS2_UJIS，UCS2_UJIS2，又はUCS2_UTF8が設定されている場合の注意事項を次に示します。

列属性取得時に返却されるSQLデータ型は次のようになります。

HiRDBのデータ型がCHAR，MCHAR，又はNCHARの場合：SQL_WCHAR

HiRDBのデータ型がVARCHAR，MVARCHAR，又はNVARCHARの場合：SQL_WVARCHAR

列属性取得時，HiRDBのデータ型が文字列系データ型の場合，列長は列の定義長×2の値が設定されます。例えば，char(10)の場合は20が列長として返却されます。

13.12　チューニング，トラブルシュート

ここでは，ODBC対応のUAPを使用している場合のチューニング，トラブルシュートについて説明します。

13.12.1　複数行検索をするUAPで性能が出ない場合

ブロック転送機能を使用してください。ブロック転送機能を使用する場合は，クライアント環境定義のPDBLKFオペランドを指定します。指定値には，40〜50を指定することをお勧めします。これより大きな値を指定しても，通信回数を削減する効果はあまりなく，逆に処理上のオーバヘッドによって遅くなる可能性があります。ブロック転送機能については，「ブロック転送機能」を参照してください。

13.12.2　頻繁にCONNECT，DISCONNECTをするUAPの場合

高速接続機能を使用してください。高速接続機能を使用する場合は，クライアント環境定義のPDFESHOST，PDSERVICEPORT，及びPDSERVICEGRPオペランドを指定します。高速接続機能は，HiRDBへの接続時間を短縮する機能です。クライアント環境定義のPDFESHOST，PDSERVICEPORT，及びPDSERVICEGRPオペランドについては，「クライアント環境定義の設定内容」を参照してください。

13.12.3　HiRDBに要求されるSQL文を確認したい場合

ODBC経由でHiRDBをアクセスする場合，UAPを作成する環境によって，UAP上で記述したSQL文とHiRDBに要求されるSQL文とが異なることがあります。どのようなSQL文がHiRDBに対して発行されているのか確認したい場合は，SQLトレース機能を使用します。SQLトレース機能を使用する場合は，クライアント環境定義のPDSQLTRACEオペランドを指定します。また，このとき同時にPDCLTPATHオペランドにトレース出力先ディレクトリを指定することをお勧めします。SQLトレース機能については，「SQLトレース機能」を参照してください。

13.12.4　その他

Microsoft Accessなどのアプリケーションプログラムで，検索のSQL文で排他オプションを指定すると，Microsoft Access側で構文エラーとなることがあります。このような場合，システム定義のpd_isolation_levelオペランド又はクライアント環境定義のPDISLLVLオペランドを指定することで対処できないかどうか，検討することをお勧めします。

Microsoft Accessを使用してHiRDBをアクセスする場合，UAPの作成方法によっては，更新するときにHiRDBで排他エラーとなることがあります。これは，Microsoft AccessがHiRDBに対して複数接続をして，別々の接続から参照及び更新を，同一行に対して実行するために発生する現象です。これを回避するためには，システム定義のpd_isolation_levelオペランド又はクライアント環境定義のPDISLLVLオペランドに，0又は1を指定して対処してください。ODBCドライバのインストール用フロッピーディスク内のSampleapディレクトリに，Visual BasicのDAO（Data Access Object）を使用した，アクセス時に排他エラーが発生しない簡単なサンプルUAPがあるので参照してください。

13.13　ODBC経由でHiRDBをアクセスする場合に使用できない機能について

ODBC経由でHiRDBをアクセスする場合，使用できない機能が幾つかあります。

行インタフェースを使用したアクセス

ROW指定の問合せ，UPDATE文，及びINSERT文は実行できません。

カーソルを使用した更新，削除

CURRENT OF カーソル名を使用した更新，削除はできません。ただし，カーソルライブラリの機能を使用した場合は，カーソルライブラリがCURRENT OF カーソル名をWHERE条件に変更するため，実行できる場合もあります。

ホールダブルカーソル

ホールダブルカーソル（WITH HOLD指定のカーソル，又はUNTIL DISCONNECT指定の問合せによって定義するカーソル）は使用できません。

?パラメタにNULL述語を指定

?パラメタにNULL述語を指定したSQL（? IS〔NOT〕 NULL）は使用できません。

13.14　UNIX版HiRDB ODBC3.5ドライバを使用する場合の留意事項

Linux版 HiRDB ODBC3.5ドライバは，SQL_C_WCHAR型を扱う場合，1文字を2バイトのUTF-16LE形式で処理します。そのため，Linux版 HiRDB ODBC3.5ドライバへSQL_C_WCHAR型のデータを渡す場合には，データはUTF-16LE形式にしてください。また，以降のUTF-16はUTF-16LEと読み替えてください。

HP-UX版 HiRDB ODBC3.5ドライバは，SQL_C_WCHAR型を扱う場合，1文字を2バイトのUTF-16BE形式で処理します。そのため，HP-UX版 HiRDB ODBC3.5ドライバへSQL_C_WCHAR型のデータを渡す場合には，データはUTF-16BE形式にしてください。また，以降のUTF-16はUTF-16BEと読み替えてください。

Unicode対応のODBC関数を使用した場合，UNIX版 HiRDB ODBC3.5ドライバは接続先のHiRDBサーバの文字コードを判定し，ドライバマネージャから受け取った文字列をUTF-16形式からHiRDBサーバの文字コードに変換します。また，HiRDBサーバから受け取ったデータはHiRDBサーバの文字コードからUTF-16形式に変換し，ドライバマネージャに返却します。ただし，クライアント環境定義PDCLTCNVMODEを指定した場合は，接続先のHiRDBサーバの文字コードに関係なくPDCLTCNVMODEの指定に従って文字コード変換します。Unicode対応のODBC関数を使用する場合に使用できる文字コードの組み合わせと変換される文字コード種別を次の表に示します。

表13‒29　Unicode対応のODBC関数を使用する場合に使用できる文字コードの組み合わせと変換される文字コード種別

項番

クライアント環境定義PDCLTCNVMODEの指定

HiRDBサーバの文字コード種別

変換される文字コード種別

ODBC環境定義ODBCHARSETを指定しない場合

ODBC環境定義ODBCHARSETを指定した場合

1

UJIS

UJIS2

UJIS

UTF-16←→SJIS

（クライアントライブラリでSJIS←→UJIS変換）

2

TF8

UTF8MS

UTF8_TXT

UTF8MS_TXT

UTF8_EX

UTF8_EX2

UTF-8

UTF-16←→SJIS

（クライアントライブラリでSJIS←→UTF-8変換）

3

UCS2_UJIS

UCS2_UJIS2

UJIS

ODBCドライバ内はUnicodeで扱う

（クライアントライブラリでUTF-16←→UJIS変換）

4

UCS2_HJ

EUC-HJ

ODBCドライバ内はUnicodeで扱う

（クライアントライブラリでUTF-16←→EUC-HJ変換）

5

UCS2_UTF8

UTF-8

ODBCドライバ内はUnicodeで扱う

（クライアントライブラリでUTF-16←→UTF-8変換）

6

指定なし

SJIS

UTF-16←→SJIS

UTF-16←→ODBCHARSETに指定した文字セット

7

UJIS

UTF-16←→EUC-JISX0213（EUC-JISX0213を使用できない環境の場合はEUC-JP）

UTF-16←→ODBCHARSETに指定した文字セット

8

UTF-8

UTF-16←→UTF-8

UTF-16←→ODBCHARSETに指定した文字セット

9

上記以外

未サポート

Unicodeに対応していないODBC関数を使用する場合，UNIX版 HiRDB ODBC3.5ドライバは，引数として渡された文字列に対して文字コード変換をしません。この場合は，UAPの実行環境と接続先のHiRDBサーバの文字コードを合わせる必要があります。ただし，クライアント環境定義PDCLTCNVMODEを指定した場合は，PDCLTCNVMODEの指定に従って文字コード変換します。

UNIX版 HiRDB ODBC3.5ドライバでは，Unicode対応のODBC関数の接続関数を使用した場合，データソース名は実行環境のLANG環境変数の文字コードに変換します。したがって，実行環境のLANG環境変数と登録されているデータソース名の文字コードが異なる場合は，ASCII文字以外のデータソース名を読み取れないことがあります。

UNIX版 HiRDB ODBC3.5ドライバでは，ダイアログボックスの表示をサポートしていません。そのため，HiRDBサーバと接続する場合に，SQL_DRIVER_NOPROMPT以外を指定してSQLDriverConnectを呼び出した場合，SQL_ERRORを返します。

UNIX版 HiRDB ODBC3.5ドライバは，unixODBCが提供するGUIツールODBC Config を使用したデータソースの登録をサポートしていません。データソースを登録する際は，「インストール手順（UNIX版の場合）」に従い，登録する必要があります。

13.15　.NET Framework Data Provider for ODBCによるSQL文の自動生成

.NET Framework Data Provider for ODBCは，Microsoftが提供する.NET Frameworkクラスライブラリの一つです。.NET Framework Data Provider for ODBCでは，OdbcCommandBuilderクラスを使用することで，データソースに対する更新用のSQL文を自動で生成することができます。

HiRDB ODBC3.5ドライバを使用した場合の，.NET Framework Data Provider for ODBCのSQL文の自動生成を実行するときの制限事項を次に示します。

.NET Framework Data Provider for ODBCを介したSQL文の自動生成は，HiRDBのバージョン08-04以降で動作します。08-04より前のバージョンでの動作は保証しません。

SQL文の自動生成の基となるOdbcDataAdapterクラスのSelectCommandプロパティに指定するSELECT文で，表名に相関名を指定した場合，HiRDBサーバはHiRDB ODBC3.5ドライバに実表名を返却します。そのため，HiRDBサーバに対して有効なSQL文が自動生成されます。しかし，表名に別名を指定した場合，HiRDBサーバはHiRDB ODBC3.5ドライバに表名を返却しません。そのため，HiRDB ODBC3.5ドライバのSQLColAttribute関数のSQL_DESC_BASE_TABLE_NAMEの情報を必要とする.NET Framework Data Provider for ODBCへ表名が返却できません。この場合はSQL文の自動生成は保証されません。

SQL文の自動生成の基となるOdbcDataAdapterクラスのSelectCommandプロパティに指定するSELECT文で，列名に別名を指定した場合，HiRDBサーバはHiRDB ODBC3.5ドライバに列の別名を返却します。そのため，自動生成されるSQL文は，列の別名が使用された状態となります。この列の別名が使用されたSQL文を実行した場合，その列は実際には存在しないため，HiRDBサーバ側ではエラーを返却します。

13.16　ADO及びADO.NETからODBCを経由してHiRDBサーバにアクセスする場合の留意事項

ADO及びADO.NETのインタフェースを利用したUAPが，HiRDB ODBC3.5ドライバ経由でHiRDBサーバに接続するときの留意事項について説明します。なお，HiRDB ODBC3.5ドライバ，及びHiRDBサーバのバージョンが共に08-04以降の場合は，この現象は発生しないため対策する必要はありません。

UAPからADO及びADO.NETのインタフェースを利用した場合，ユーザがSQL文に指定した認可識別子，及び表識別子を，ADOが自動的に引用符で囲むことがあります。HiRDBサーバでは引用符が付与されている識別子を半角英大文字と半角英小文字で区別するため，ADOが自動的に識別子を引用符で囲んだ場合，SQL文がエラーとなることがあります。

ADOが自動的に引用符を付与したSQL文がエラーになる例を次の図に示します。この例では，表識別子がSAMPLEで定義されているとします。

［説明］

UAPから，select * from sampleを実行します。HiRDBサーバは，SQLをSELECT * FROM SAMPLEと受け取り，識別子を「SAMPLE」と認識します。

ADOは，識別子を引用符で囲めるかどうかを確認するためにHiRDB ODBC3.5ドライバに問い合わせます。

ADOが内部的にSQLGetInfoW()関数をコールして，SQL_IDENTIFIER_QUOTE_CHARの情報を取得します。HiRDBサーバは，引用符付きの識別子を使用できるため，HiRDB ODBC3.5ドライバは，ADOからの要求に対して引用符付きの識別子が利用できると応答します。この応答を受けて，ADOはSQL文を組立てる際に，自動的に識別子に引用符を付与します。HiRDBサーバは，識別子を「"sample"」と受け取ります。

HiRDBサーバは引用符付きの識別子は半角英大文字と半角英小文字を区別します。HiRDBサーバで定義されている識別子は「SAMPLE」であるため，2.で受け取った識別子「sample」を不一致と認識し，HiRDBサーバはUAPにエラーを返します。

ADOが自動的に引用符を付与したSQL文がエラーになる条件を次に示します。

表13‒30　SQL文がエラーになる条件の組み合わせ

SQL文に指定した識別子

HiRDBサーバに格納された識別子

すべて半角英大文字

半角英小文字を含む

すべて半角英大文字

○

×

半角英小文字を含む

×

○

（凡例）

○：エラーは発生しません。

×：エラーが発生します。

この場合，クライアント環境定義PDODBGINFOSUPPRESSにYESを指定することで，ADOが自動的に識別子に引用符を付与することを抑止できます。クライアント環境定義PDODBGINFOSUPPRESSについては，「PDODBGINFOSUPPRESS」を参照してください。

13.17　ODBC3.5ドライバが返却するSQLSTATE

ODBC3.5ドライバが返却するSQLSTATEについて次の表に示します。表中で参照しているメッセージについては，マニュアル「HiRDB メッセージ」を参照してください。

表13‒31　ODBC3.5ドライバが返却するSQLSTATE

項番

ODBC規格のSQLSTATE

意味

返却するSQLSTATE

HiRDB独自※1

ODBC準拠※2

1

01000

General Warning

一般警告

HY000

01000

2

01001

Cursor operation conflict

カーソル操作の競合

−

−

3

01002

Disconnect error

接続解除エラー

−

−

4

01003

NULL value eliminated in set function

集合関数でNULL値が削除された

−

−

5

01004

String data, right-truncated

文字列データの右側が切り捨てられた

01004

01004

6

01006

Privilege not revoked

特権が破棄されない

−

−

7

01007

Privilege not granted

特権が与えられない

−

−

8

01S00

Invalid connection string attribute

無効な接続文字列属性

01S00

01S00

9

01S01

Error in row

行のエラー

−

−

10

01S02

Option value changed

オプション値の変更

01S02

01S02

11

01S06

Attempt to fetch before the result set returned the first rowset

結果セットが最初の行セットを返す前にフェッチを試みた

−

−

12

01S07

Fractional truncation

小数点以下切り捨て

−

−

13

01S08

Error saving File DSN

ファイルDSNの保存エラー

−

−

14

01S09

Invalid keyword (DM)

無効なキーワード

−

−

15

07001

Wrong number of parameters

パラメタ数不正

07001

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

07001

16

07002

COUNT field incorrect

COUNTフィールドが不正

HY000

07002

17

07005

Prepared statement not a cursor-specification

準備されたステートメントがcursor-specificationでない

07005

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

07005

18

07006

Restricted data type attribute violation

データ型属性の制限違反

07006

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

07006

19

07009

Invalid descriptor index

無効なディスクリプタインデクス

07009

07009

20

07S01

Invalid use of default parameter

デフォルトパラメタの不正使用

−

−

21

08001

Client unable to establish connection

クライアントが接続を確立できない

HY000

08001

22

08002

Connection name in use(DM)

接続名が使用中である

08002

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

08002

23

08003

Connection not open(DM)

接続が存在しない

08003

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

08003

24

08004

Server rejected the connection

サーバが接続を拒否した

HY000

08004

25

08007

Connection failure during transaction

トランザクション時の接続失敗

HY000

08007

26

08S01

Communication link failure

通信リンク失敗

HY000

08S01

27

21S01

Insert value list does not match column list

挿入する値の一覧と列の一覧の不一致

HY000

21S01

28

21S02

Degree of derived table does not match column list

導出したテーブルの次数が列の一覧と不一致

HY000

21S02

29

22001

String data, right-truncated

文字列データの右側が切り捨てられた

22001

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

22001

30

22002

Indicator variable required but not supplied

必要な標識変数が提供されない

HY000

22002

31

22003

Numeric value out of range

数値が範囲外である

22003

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

22003

32

22007

Invalid datetime format

無効な日付時刻形式

22007

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

22007

33

22008

Datetime field overflow

日付時刻フィールドのオーバーフロー

22008

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

22008

34

22012

Division by zero

ゼロ除算

HY000

22012

35

22015

Interval field overflow

間隔フィールドのオーバーフロー

HY000

22015

36

22018

Invalid character value for cast specification

キャスト指定値に対する無効な文字値

HY000

22018

37

22019

Invalid escape character

無効なエスケープ文字

HY000

22019

38

22025

Invalid escape sequence

無効なエスケープシーケンス

HY000

22025

39

22026

String data, length mismatch

文字列データの長さが一致しない

−

−

40

23000

Integrity constraint violation

整合性の制約違反

HY000

23000

41

24000

Invalid cursor state

無効なカーソル状態

24000

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

24000

42

25000

Invalid transaction state

無効なトランザクション状態

25000

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

25000

43

25S01

Transaction state

トランザクション状態が不明

−

−

44

25S02

Transaction is still active

トランザクションがアクティブである

−

−

45

25S03

Transaction is rolled back

トランザクションがロールバックされた

−

−

46

28000

Invalid authorization specification

無効な認証指定

28000

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

28000

47

34000

Invalid cursor name

無効なカーソル名

34000

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

34000

48

3C000

Duplicate cursor name

カーソル名の重複

3C000

（ODBCドライバでエラー検知した場合）

HY000

（HiRDBサーバでエラー検知した場合）

3C000

49

3D000

Invalid catalog name

無効なカタログ名

−

−

50

3F000

Invalid schema name

無効なスキーマ名

HY000

3F000

51

40001

Serialization failure

直列化の失敗

HY000

40001

52

40002

Integrity constraint violation

一貫性制約に違反した

−

−

53

40003

Statement completion unknown

ステートメントの完了が不明

−

−

54

42000

Syntax error or access violation

構文エラー又はアクセス違反

HY000

42000

55

42S01

Base table or view already exists

ベーステーブル又はビューが既に存在する

HY000

42S01

56

42S02

Base table or view not found

ベーステーブル又はビューが見つからない

HY000

42S02

57

42S11

Index already exists

インデクスが既に存在する

HY000

42S11

58

42S12

Index not exists

インデクスが見つからない

HY000

42S12

59

42S21

Column already exists

列が既に存在する

HY000

42S21

60

42S22

Column not foun

列が見つからない

HY000

42S22

61

44000

WITH CHECK OPTION violation

WITH CHECK OPTION違反

−

−

62

HY000

General error

一般エラー

HY000

HY000

63

HY001

Memory allocation error

メモリ割り当てエラー

HY001

HY001

64

HY003

Invalid application buffer type

無効なアプリケーションバッファのデータ型

HY003

HY003

65

HY004

Invalid SQL data type

無効なSQLデータ型

HY004

HY004

66

HY007

Associated statement is not prepared

関連されたステートメントが準備されていない

HY007

HY007

67

HY008

Operation canceled

動作がキャンセルされた

−

−

68

HY009

Invalid use of null pointer

NULLポインタ不正使用

HY009

HY009

69

HY010

Function sequence error

関数シーケンスエラー

HY010

HY010

70

HY011

Attribute cannot be set now

ここでは属性を設定できない

HY011

HY011

71

HY012

Invalid transaction operation code

無効なトランザクション処理コード

HY012

HY012

72

HY013

Memory management error

メモリ管理エラー

HY013

HY013

73

HY014

Limit on the number of handles exceeded

ハンドル数の上限を超過

−

−

74

HY015

No cursor name available

利用できるカーソル名がない

−

−

75

HY016

Cannot modify an implementation row descriptor

インプリメンテーション行ディスクリプタを変更できない

HY016

HY016

76

HY017

Invalid use of an automatically allocated descriptor handle

自動的に割り当てられるディスクリプタハンドルの不正使用

HY017

HY017

77

HY018

Server declined cancel request

サーバがキャンセル要求を拒否した

−

−

78

HY019

Non-character and non-binary data sent in pieces

文字データとバイナリデータ以外のデータが分割送信された

−

−

79

HY020

Attempt to concatenate a null value

NULL値の連結を試みた

−

−

80

HY021

Inconsistent descriptor information

ディスクリプタ情報の不一致

−

−

81

HY024

Invalid attribute value

無効な属性値

HY024

HY024

82

HY090

Invalid string or buffer length

無効な文字列長又は無効なバッファ長

HY090

HY090

83

HY091

Invalid descriptor field identifier

無効なディスクリプタフィールド識別子

HY091

HY091

84

HY092

Invalid attribute/option identifier

無効な属性識別子又は無効なオプション識別子

HY092

HY092

85

HY095

Function type out of range

関数型が範囲外である

HY095

HY095

86

HY096

Invalid information type

無効な情報型

−

−

87

HY097

Column type out of range

列の種類が範囲外である

HY097

HY097

88

HY098

Scope type out of range

引数scopeの値が範囲外である

−

−

89

HY099

Nullable type out of range

引数Nullableの値が範囲外である

HY099

HY099

90

HY100

Uniqueness option type out of range

一意性のオプションが範囲外である

HY100

HY100

91

HY101

Accuracy option type out of range

精度のオプションが範囲外である

HY101

HY101

92

HY103

Invalid retrieval code

無効な取得コード

−

−

93

HY104

Invalid precision or scale value

無効な精度又は無効なスケール値

−

−

94

HY105

Invalid parameter type

無効なパラメタの種類

HY105

HY105

95

HY106

Fetch type out of range

フェッチの種類が範囲外である

−

−

96

HY107

Row value out of range

行の値が範囲外である

−

−

97

HY109

Invalid cursor position

無効なカーソル位置

−

−

98

HY110

Invalid driver completion

引数DriverCompletionが無効である

−

−

99

HY111

Invalid bookmark value

無効なブックマーク値

−

−

100

HYC00

Optional feature not implemented

オプション機能は実装されていない

HYC00

HYC00

101

HYT00

Timeout expired

タイムアウト終了

−

−

102

HYT01

Connection timeout expired

接続タイムアウト終了

−

−

103

IM001

Driver does not support this function

ドライバはこの関数をサポートしていない

−

−

104

IM002

Data source name not found and no default driver specified

データソース名が見つからずデフォルトのドライバが指定されていない

−

−

105

IM003

Specified driver could not be loaded

指定のドライバがロードできない

−

−

106

IM004

Driver's SQLAllocHandle on SQL_HANDLE_ENV failed

ドライバがSQL_HANDLE_ENVに対するSQLAllocHandleに失敗した

−

−

107

IM005

Driver's SQLAllocHandle on SQL_HANDLE_DBC failed

ドライバがSQL_HANDLE_DBCに対するSQLAllocHandleに失敗した

−

−

108

IM006

Driver's SQLSetConnectAttr failed

ドライバがSQLSetConnectAttrに失敗した

−

−

109

IM007

No data source or driver specified; dialog prohibited

データソース又はドライバが指定されず，ダイアログが禁止された

−

−

110

IM008

Dialog failed

ダイアログの失敗

−

−

111

IM009

Unable to load translation DLL

トランスレータDLLをロードできない

−

−

112

IM010

Data source name too long

データソース名が長過ぎる

−

−

113

IM011

Driver name too long

ドライバ名が長過ぎる

−

−

114

IM012

DRIVER keyword syntax error

DRIVERキーワードの構文エラー

−

−

115

IM013

Trace file error

トレースファイルのエラー

−

−

116

IM014

Invalid name of File DSN

ファイルDSNの名前が無効である

−

−

117

IM015

Corrupt file data source

ファイルデータソースが壊れている

−

−

（凡例）

−：該当なし。

注※1

クライアント環境定義PDODBSTANDARDSQLSTATEにNOを指定した場合，又は指定を省略した場合

注※2

クライアント環境定義PDODBSTANDARDSQLSTATEにYESを指定した場合

なお，HiRDBサーバからODBC規格にないSQLSTATEが返却された場合，HY000にマッピングされます。

13.18　PythonアプリケーションからのHiRDBアクセス

PythonアプリケーションからHiRDBサーバに接続するには，pyodbcを使用してHiRDB ODBC3.5ドライバを経由します。

pyodbcとは，Pythonからデータベースに接続するための規格，Python Database API 2.0の実装の一つです。ODBCドライバを使用してデータベースにアクセスできます。

図13‒1　PythonアプリケーションからのHiRDBアクセス

13.18.1　サポート対象

サポート対象を次の表に示します。

表13‒32　サポート対象

項目

サポート対象

プラットフォーム

Windows,Linux

アドレッシングモード

64ビット

Python

Python 3.9

pyodbc

yodbc 4.0.30

unixODBC

unixODBC 2.3.7（Linuxの場合）

13.18.2　データ型

(1)　検索データ取得時のマッピング

HiRDBから検索データを取得した場合の，HiRDBのSQLデータ型と，取得されるPythonオブジェクトのクラスのマッピングを次の表に示します。

表13‒33　HiRDBのSQLデータ型と，取得されるPythonオブジェクトのクラスのマッピング

HiRDBのSQLデータ型

Pythonオブジェクトのクラス

INT

int

SMALLINT

int

DEC

decimal.Decimal

FLOAT

float

REAL

float

CHAR

str

VARCHAR

str

NCHAR

str

NVARCHAR

str

MCHAR

str

MVARCHAR

str

BINARY

bytes

BLOB

bytes

DATE

datetime.date

TIME

datetime.time

TIMESTAMP

datetime.datetime

INTERVAL HOUR TO SECOND

−

INTERVAL YEAR TO DAY

−

（凡例）

−：未サポート

(2)　？パラメタ設定時のマッピング

SQLの？パラメタとして設定するPythonオブジェクトのクラスと，HiRDBのSQLデータ型のマッピングを次の表に示します。

表13‒34　パラメタに設定するPythonオブジェクトのクラスと，HiRDBのSQLデータ型のマッピング（1/2）

Pythonオブジェクトのクラス

INT

SMALLINT

DEC

FLOAT

REAL

CHAR

VARCHAR

MCHAR

MVARCHAR

int

◎

〇

〇

〇

decimal.Decimal

〇

◎

〇

〇

float

〇

〇

◎

〇

str

〇

〇

〇

◎

bytes

×

×

×

×

datetime.date

×

×

×

×

datetime.time

×

×

×

×

datetime.datetime

×

×

×

×

表13‒35　パラメタに設定するPythonオブジェクトのクラスと，HiRDBのSQLデータ型のマッピング（2/2）

Pythonオブジェクトのクラス

NCHAR

NVARCHAR

BINARY

BLOB

DATE

TIME

TIMESTAMP

int

×

×

×

×

×

decimal.Decimal

×

×

×

×

×

float

×

×

×

×

×

str

◎

×

×

×

〇※2

bytes

×

◎※1

×

×

×

datetime.date

×

×

◎

×

×

datetime.time

×

×

×

◎

×

datetime.datetime

×

×

×

×

◎※2

（凡例）

◎：マッピングすることを推奨します。

〇：マッピングできます。ただし，変換元データの形式によっては，データの欠落や変換エラーとなることがあるため，注意してください。

×：マッピングできません。

注※1

データ型としてSQL_LONGVARBINARYを指定してください。

指定方法は，Cursorクラスのsetinputsizesメソッドの引数の，パラメタ番号に対応する位置に(pyodbc.SQL_LONGVARBINARY,定義長)を指定してください。

BINARY(100000)の列に第2パラメタでINSERTする場合の例を示します。

cur.setinputsizes([None,(pyodbc.SQL_LONGVARBINARY,100000)])
cur.execute("INSERT INTO TABLE1 VALUES (?,?,?)",123,b"ABC",456)

注※2

datetime.datetimeをパラメタ値として指定すると，小数秒が設定されている場合に小数秒が切り捨てられて設定されます。小数秒まで含む値を設定したい場合は，strをパラメタ値として使用し，データ型としてSQL_CHAR（長さ26）を指定してください。

指定方法は，Cursorクラスのsetinputsizesメソッドの引数の，パラメタ番号に対応する位置に（pyodbc.SQL_CHAR,26）を指定してください。

TIMESTAMP(6)の列に第2パラメタでINSERTする場合の例を示します。

cur.setinputsizes([None,(pyodbc.SQL_CHAR,26)])
cur.execute("INSERT INTO TABLE2 VALUES (?,?,?)",123,"2000-12-31 12:34:56.123456",456)

(3)　HiRDBサーバの文字コードとエンコーディング

HiRDBサーバの文字コードと，それに対応したUAPの設定について次の表に示します。

表13‒36　HiRDBサーバの文字コードに対応したUAPの設定

プラットフォーム

サーバの文字コード

EUC

UTF-8

SJIS

Windows

クライアント環境定義PDCLTCNVMODEにUCS2_UJISを設定してください。

クライアント環境定義PDCLTCNVMODEにUCS2_UTF8を設定してください。

Connectionクラスのsetencodingメソッドに"shift-jis"を指定してください。

Linux

Connectionクラスのsetencodingメソッドに"shift-jis"を指定してください※。

注※

Connectionクラスのsetencodingメソッドに"shift-jis"を指定した場合，SQL文に全角文字が含まれるとエラーとなります。このため，SQL文に全角文字が含まれる場合，setencodingメソッドは指定しないで，パラメタとして文字列を指定する個所で，データ型としてSQL_VARCHARを指定してください。

指定方法は，Cursorクラスのsetinputsizesメソッドの引数の，パラメタ番号に対応する位置に（pyodbc.SQL_VARCHAR,列のバイト長）を指定してください。

CHAR(10)の列に第2パラメタでINSERTする場合の例を示します。

cur.setinputsizes([None,(pyodbc.SQL_VARCHAR,10)])
cur.execute("INSERT INTO TABLE3 VALUES (?,?,?)",123,"あいう",456)

13.18.3　使用できない機能

(1)　使用できないメソッド

Cursorクラスの次のメソッドは使用できません。

skip

rowIdColumns

rowVerColumns

primaryKeys

foreignKeys

(2)　タイムアウトの設定

pyodbc.connect関数のtimeout引数及びConnectionクラスのtimeout属性は，指定しても有効になりません。

接続時のタイムアウト及びSQL実行時のタイムアウトは，クライアント環境定義で指定してください。

接続時のタイムアウト：

PDNBLOCKWAITTIME及びPDCONNECTWAITTIME

SQL実行時のタイムアウト：

PDCWAITTIME

(3)　unixODBCのコネクションプーリング

unixODBC使用時は，コネクションプーリングを使用しないでください。

odbcinst.iniでコネクションプーリングを有効（Pooling = Yes）にしている場合は，pyodbc.poolingにFalseを設定してください。

(4)　pyodbc.connect関数のansi引数

pyodbc.connect関数のansi引数は指定しないでください。

14　OLE DB対応アプリケーションプログラムからのHiRDBアクセス

この章では，OLE DBの概要，接続インタフェース，スキーマ情報，及び障害対策について説明します。

14.1　概要

14.1.1　OLE DBの概要

(1)　OLE DBとは

OLE DBとは，ODBCと同様に，広範囲なデータソースにアクセスするためのAPIです。また，ODBCとは異なり，SQLデータ以外のデータアクセスに適したインタフェースも定義されています。

(2)　HiRDB OLE DBプロバイダ

OLE DB対応アプリケーションプログラムからHiRDBへアクセスする場合，HiRDB OLE DBプロバイダを経由してアクセスします。HiRDB OLE DBプロバイダは，HiRDB/Run Time，及びHiRDB/Developer's Kitに含まれています。

(3)　HiRDB OLE DBプロバイダのインストール

HiRDB/Run Time，又はHiRDB/Developer's Kitのインストール時に，「セットアップ タイプ」画面で「標準」を選択するか，又は「カスタム」を選択し，「機能の選択」画面で「HiRDB OLE DBプロバイダ」をチェックすると，HiRDB OLE DBプロバイダがインストールされます。

HiRDB OLE DBプロバイダをインストールすると，次のファイルが作成されます。

PDOLEDB.DLL

PDCLTM32.DLL

HiRDB OLE DBプロバイダは，32ビット版だけサポートしています。

(4)　HiRDB OLE DBプロバイダ名

HiRDB OLE DBプロバイダのプロバイダ名（プロバイダプログラムID）は，「HiRDBProvider」です。

プロバイダ名を指定するインタフェース（例えば，ADO（ActiveX Data Object））を使用する場合，connectionオブジェクトのProviderプロパティにこのプロバイダ名を設定することで，HiRDBのOLE DBプロバイダを使用できます。

14.2　接続インタフェース

ここでは，レジストリ情報と接続プロパティについて説明します。

14.2.1　レジストリ情報

(1)　HKEY_CLASSES_ROOTキーに追加

(a)　プロバイダプログラムID＝プロバイダ名称

"HiRDBProvider"="Hitachi HiRDB OLE DB Provider"

(b)　プロバイダクラスID

"HiRDBProvider¥¥ClSID"="{6A708561-748A-11d3-B810-0000E2212E58}"

(2)　HKEY_CLASSES_ROOT¥CLSIDサブキーに追加

(a)　プロバイダプログラムID

{"CLSID¥¥{6A708561-748A-11d3-B810-0000E2212E58}"="HiRDBProvider"

(b)　プロバイダ名称

"CLSID¥¥{6A708561-748A-11d3-B810-0000E2212E58}¥¥ProgID"
  ="HiRDBProvider"

(c)　バージョン別プログラムID

"CLSID¥¥{6A708561-748A-11d3-B810-0000E2212E58}
  ¥¥VersionIndependentProgID"="HiRDBProvider"

(d)　プロバイダDLL名称

"CLSID¥¥{6A708561-748A-11d3-B810-0000E2212E58}¥¥InprocServer32"
  ="pdoledb.dll"
"CLSID¥¥{6A708561-748A-11d3-B810-0000E2212E58}¥¥InprocServer32
  ¥¥ThreadingModel"="Both"

(e)　コメント

"CLSID¥¥{6A708561-748A-11d3-B810-0000E2212E58}¥¥OLE DB Provider"
  ="Hitachi HiRDB OLE DB Provider"

(f)　拡張エラー名称

"CLSID¥¥{6A708561-748A-11d3-B810-0000E2212E58}¥¥ExtendedErrors"
  ="Hitachi HiRDB OLE DB Provider"

(g)　拡張エラーコメント

"CLSID¥¥{6A708561-748A-11d3-B810-0000E2212E58}
  ¥¥ExtendedErrors¥¥{5F6D492E-40BA-11D3-BD66-0000E21F878E}"
  = "Hitachi HiRDB OLE DB Provider"

(3)　HKEY_CLASSES_ROOTキーに追加

(a)　プロバイダエラープログラムID

" HiRDBProviderErrors"="Hitachi HiRDB OLE DB Provider"

(b)　プロバイダエラークラスID

"HiRDBProviderErrors¥¥ClSID"="{5F6D492E-40BA-11D3-BD66-0000E21F878E}"

(4)　HKEY_CLASSES_ROOT¥CLSIDサブキーに追加

(a)　プロバイダエラープログラムID

"CLSID¥¥{5F6D492E-40BA-11D3-BD66-0000E21F878E}"
  ="HiRDBProvider Error Lookup"

(b)　プロバイダエラールックアップ名称

"CLSID¥¥{5F6D492E-40BA-11D3-BD66-0000E21F878E}¥¥ProgID"
  ="HiRDBProvider Error Lookup"

(c)　バージョン別エラールックアッププログラムID

"CLSID¥¥{5F6D492E-40BA-11D3-BD66-0000E21F878E}
  ¥¥VersionIndependentProgID"="HiRDBProvider Error Lookup"

(d)　プロバイダエラールックアップDLL名称

"CLSID¥¥{5F6D492E-40BA-11D3-BD66-0000E21F878E}¥¥InprocServer32"
  ="pdoledb.dll"
"CLSID¥¥{5F6D492E-40BA-11D3-BD66-0000E21F878E}¥¥InprocServer32
  ¥¥ThreadingModel"="Both"

14.2.2　接続プロパティ

接続に使用するプロパティは，Initializationプロパティの次の三つです。ただし，この三つは省略できます。

(1)　DBPROP_INIT_DATASOURCE

クライアントの環境変数グループ名です。

省略した場合はHiRDB.INIを使用します。クライアントの環境変数グループについては，「環境変数のグループ登録」を参照してください。

(2)　DBPROP_AUTH_USERID

接続に使用する認可識別子です。

省略した場合，DBPROP_INIT_DATASOURCEの指定があれば，該当するクライアントの環境変数グループのPDUSERから認可識別子を取得します。DBPROP_INIT_DATASOURCEの指定がない場合はHiRDB.INIから認可識別子を取得します。

(3)　DBPROP_AUTH_PASSWORD

接続に使用するパスワードです。

省略した場合，DBPROP_INIT_DATASOURCEの指定があれば，該当するクライアントの環境変数グループのPDUSERからパスワードを取得します。DBPROP_INIT_DATASOURCEの指定がない場合はHiRDB.INIからパスワードを取得します。

14.3　スキーマ情報

HiRDB OLE DBプロバイダが提供するスキーマ情報を次の表に示します。

表14‒1　HiRDB OLE DBプロバイダが提供するスキーマ情報

OLE DBスキーマ情報種別

説明

提供

ASSERTIONS

アサーション情報

×

CATALOGS

カタログ情報

×

CHARACTER_SETS

文字セットの識別

×

CHECK_CONSTRAINTS

CHECK制約の識別

×

COLLATIONS

文字照合の識別

×

COLUMN_DOMAIN_USAGE

ドメインに依存する列情報

×

COLUMN_PRIVILEGES

列の特権情報

×

COLUMNS

列情報

○(必要)

CONSTRAINT_COLUMN_USAGE

各制約(参照，UNIQUE，CHECK)列情報

×

CONSTRAINT_TABLE_USAGE

各制約(参照，UNIQUE，CHECK)表情報

×

FOREIGN_KEYS

外部キー情報

×

INDEXES

インデクス情報

○

KEY_COLUMN_USAGE

キー列情報

×

PRIMARY_KEYS

主キー情報

×

PROCEDURE_COLUMNS

プロシジャが返す行セットの列情報

×

PROCEDURE_PARAMETERS

プロシジャのパラメタ情報

○

PROCEDURES

プロシジャ情報

○

PROVIDER_TYPES

プロバイダデータ型識別

○(必要)

REFERENTIAL_CONSTRAINTS

参照制約情報

×

SCHEMATA

スキーマ情報

○

SQL_LANGUAGES

SQLの実装を処理する合致レベル，及び言語の識別

×

STATISTICS

統計情報

×

TABLE_CONSTRAINTS

テーブル制約情報

×

TABLE_PRIVILEGES

テーブル特権情報

○

TABLES

テーブル情報

○(必要)

TRANSLATIONS

文字変換識別

×

USAGE_PRIVILEGES

ユーザ権限情報

×

VIEW_COLUMN_USAGE

ビュー列情報

×

VIEWS

ビュー情報

×

（凡例）

○：提供しています。

×：提供していません。

14.4　データ型の対応

HiRDBのデータ型とOLE DB型標識の対応を次の表に示します。

表14‒2　HiRDBのデータ型とOLE DB型標識の対応

HiRDBのデータ型

OLE DB型標識

CHAR，MCHAR，及びNCHAR

DBTYPE_STR

VARCHAR，MVARCHAR，及びNVARCHAR

DECIMAL(p,s)

DBTYPE_NUMERIC

SMALLINT (signed)

DBTYPE_I2

INTEGER (signed)

DBTYPE_I4

REAL

DBTYPE_R4

SMALLFLT

FLOAT

DBTYPE_R8

DOUBLE PRECISION

BLOB

DBTYPE_BYTES

BINARY

DATE

DBTYPE_DBDATE

TIME

DBTYPE_DBTIME

TIMESTAMP

DBTYPE_DBTIMESTAMP

INTERVAL YEAR TO DAY

DBTYPE_DECIMAL

INTERVAL HOUR TO SECOND

DBTYPE_DECIMAL

14.5　障害対策

14.5.1　トラブルシュート機能

コンシューマから発行されるOLE DBインタフェース（メソッド単位）のトレースを取得します。

(1)　取得方法

次のレジストリキーに値を設定します。

HKEY_LOCAL_MACHINE

Software¥HITACHI¥HiRDB¥oleprovtrcの値が1の場合にだけトレースを取得します。

Software¥HITACHI¥HiRDB¥oletrcfileに出力ファイル名を絶対パスで指定します（oletrcfile省略時は"c:¥temp¥pdoletrc.txt"に出力します）。

Software¥HITACHI¥HiRDB¥oletrcdumpsizeにGetData()で出力，Execute()で入力されます。void*型データのダンプ出力サイズをバイト単位で指定します（oletrcdumpsize省略時は256が仮定されます）。

14.6　留意事項

14.6.1　ADOでのカーソルについて

HiRDBでは，ADOでのカーソルの後方スクロールやカーソルを使用した更新を行いたい場合，クライアントカーソル（RecordSetオブジェクトのCursorLocationプロパティにadUseClientを設定）を使用します。

その他の場合，サーバカーソル（RecordSetオブジェクトのCursorLocationプロパティにadUseServerを設定）を使用してください。

なお，プロシジャからの結果セットはサポートしていないため，CALL文実行時は必ずサーバカーソルを使用してください。

15　ADO.NET対応アプリケーションプログラムからのHiRDBアクセス

この章では，ADO.NET対応アプリケーションプログラムからHiRDBをアクセスする場合に必要な，HiRDBデータプロバイダ for .NET Frameworkのインストール，機能，UAP例などについて説明します。

なお，.NET Framework 1.1に対応したHiRDBデータプロバイダ for .NET Frameworkは廃止になりました。現在はアプリケーションの互換性を保つために使用できますが，将来は削除されます。代わりに.NET Framework 2.0以降に対応したHiRDBデータプロバイダ for .NET Frameworkを使用してください。

15.1　概要

15.1.1　HiRDBデータプロバイダ for .NET Framework

.NET Frameworkでは，プラットフォームや開発言語に依存しない共通言語ランタイム，及び.NET Frameworkクラスライブラリを提供します。ADO.NETとは，データベースにアクセスする.NET Frameworkアプリケーション作成時に利用できるライブラリのことをいいます。

HiRDBでは，ADO.NETを使用してHiRDBをアクセスするために必要なHiRDBデータプロバイダ for .NET Frameworkを提供しています。HiRDBデータプロバイダ for .NET Frameworkは，ADO.NET仕様に準拠したデータプロバイダです。

HiRDBデータプロバイダ for .NET Frameworkは，.NET FrameworkのSystem.Data空間で提供されている共通基本インタフェース群を実装しています。また，HiRDBデータプロバイダ for .NET Framework独自の拡張機能として，配列を使用したINSERT機能，及び繰返し列へのアクセスを実装しています。

15.1.2　HiRDBデータプロバイダ for .NET Frameworkの前提プログラム

(1)　稼働プラットフォーム

.NET Framework 1.1対応（32ビットモード）：

Windows Server 2012

Windows Server 2012 R2

Windows 8.1

Windows 10

.NET Framework 2.0対応（32ビットモード）：

Windows Server 2012

Windows Server 2012 R2

Windows Server 2016

Windows Server 2019

Windows 8.1

Windows 10

.NET Framework 2.0対応（64ビットモード）：

Windows Server 2012

Windows Server 2012 R2

Windows Server 2016

Windows Server 2019

Windows 8.1

Windows 10

.NET Framework 4対応（32ビットモード）：

Windows Server 2012

Windows Server 2012 R2

Windows Server 2016

Windows Server 2019

Windows 8.1

Windows 10

.NET Framework 4対応（64ビットモード）：

Windows Server 2012

Windows Server 2012 R2

Windows Server 2016

Windows Server 2019

Windows 8.1

Windows 10

(2)　必要なプログラム

アプリケーションプログラムの開発及び実行には，次の環境が必要です。

●.NET Framework 1.1対応のUAPを開発する場合：

開発環境

次のどちらかを選択してください。

Microsoft Visual Studio .NET 2003

Microsoft Visual Studio 2005

実行環境

次のどれかを選択してください。

.NET Framework Version 1.1 再頒布可能パッケージ

.NET Framework Version 2.0 再頒布可能パッケージ

.NET Framework Version 3.0 再頒布可能パッケージ

●.NET Framework 2.0対応のUAPを開発する場合：

開発環境

次のどれかを選択してください。

Microsoft Visual Studio 2005

Microsoft Visual Studio 2008

Microsoft Visual Studio 2010

Microsoft Visual Studio 2012

Microsoft Visual Studio 2013

実行環境

次のどれかを選択してください。

.NET Framework Version 2.0 再頒布可能パッケージ

.NET Framework Version 3.0 再頒布可能パッケージ

.NET Framework 3.5 再頒布可能パッケージ

.NET Framework 4 Client Profile 再頒布可能パッケージ

.NET Framework 4 再頒布可能パッケージ

.NET Framework 4.5 再頒布可能パッケージ

.NET Framework 4.5.1 再頒布可能パッケージ

.NET Framework 4.5.2 再頒布可能パッケージ

.NET Framework 4〜4.5.2だけがインストールされた環境で.NET Framework 2.0対応のHiRDBデータプロバイダ for .NET Frameworkを使用する場合，アプリケーション構成ファイルに次の設定をしてください。

<startup>要素のuseLegacyV2RuntimeActivationPolicy属性をtrueにする

<supportedRuntime>要素のversion属性をv4.0にする

●.NET Framework 2.0（64ビットモード）対応のUAPを開発する場合：

開発環境

次のどれかを選択してください。

Microsoft Visual Studio 2005

Microsoft Visual Studio 2008

Microsoft Visual Studio 2010

Microsoft Visual Studio 2012

Microsoft Visual Studio 2013

実行環境

次のどれかを選択してください。

.NET Framework Version 2.0 再頒布可能パッケージ

.NET Framework Version 3.0 再頒布可能パッケージ

.NET Framework 3.5 再頒布可能パッケージ

.NET Framework 4 Client Profile 再頒布可能パッケージ

.NET Framework 4 再頒布可能パッケージ

.NET Framework 4.5 再頒布可能パッケージ

.NET Framework 4.5.1 再頒布可能パッケージ

.NET Framework 4.5.2 再頒布可能パッケージ

.NET Framework 4〜4.5.2だけがインストールされた環境で.NET Framework 2.0対応のHiRDBデータプロバイダ for .NET Frameworkを使用する場合，アプリケーション構成ファイルに次の設定をしてください。

<startup>要素のuseLegacyV2RuntimeActivationPolicy属性をtrueにする

<supportedRuntime>要素のversion属性をv4.0にする

●.NET Framework 4対応のUAPを開発する場合：

開発環境

次のどれかを選択してください。

Microsoft Visual Studio 2010

Microsoft Visual Studio 2012

Microsoft Visual Studio 2013

Microsoft Visual Studio 2015

Microsoft Visual Studio 2017

実行環境

次のどれかを選択してください。

.NET Framework Version 4 Client Profile再頒布可能パッケージ

.NET Framework Version 4 再頒布可能パッケージ

.NET Framework Version 4.5 再頒布可能パッケージ

.NET Framework Version 4.5.1 再頒布可能パッケージ

.NET Framework Version 4.5.2 再頒布可能パッケージ

.NET Framework Version 4.6 再頒布可能パッケージ

.NET Framework Version 4.6.1 再頒布可能パッケージ

.NET Framework Version 4.6.2 再頒布可能パッケージ

.NET Framework Version 4.7 再頒布可能パッケージ

●.NET Framework 4（64ビットモード）対応のUAPを開発する場合：

開発環境

次のどれかを選択してください。

Microsoft Visual Studio 2010

Microsoft Visual Studio 2012

Microsoft Visual Studio 2013

Microsoft Visual Studio 2015

Microsoft Visual Studio 2017

実行環境

次のどれかを選択してください。

.NET Framework Version 4 Client Profile再頒布可能パッケージ

.NET Framework Version 4 再頒布可能パッケージ

.NET Framework Version 4.5 再頒布可能パッケージ

.NET Framework Version 4.5.1 再頒布可能パッケージ

.NET Framework Version 4.5.2 再頒布可能パッケージ

.NET Framework Version 4.6 再頒布可能パッケージ

.NET Framework Version 4.6.1 再頒布可能パッケージ

.NET Framework Version 4.6.2 再頒布可能パッケージ

.NET Framework Version 4.7 再頒布可能パッケージ

.NET Frameworkの再頒布可能パッケージはWindows Updateで導入できます。なお，Microsoft Visual Studio .NET 2002 ＋ .NET Framework SDK Version 1.1での動作は保証しません。

15.1.3　HiRDBデータプロバイダ for .NET Frameworkと対応するADO.NETのバージョン

HiRDBデータプロバイダ for .NET Frameworkは，次の表で示すバージョンのADO.NETに対応しています。

表15‒1　HiRDBデータプロバイダ for .NET Frameworkと対応するADO.NETのバージョン

HiRDBデータプロバイダ for .NET Framework

対応するADO.NETのバージョン

.NET Framework 1.1対応

ADO.NET 1.1

.NET Framework 2.0対応

ADO.NET 2.0

.NET Framework 4対応

15.2　HiRDBデータプロバイダ for .NET Frameworkのインストール

15.2.1　インストール手順

HiRDB/Run Time，又はHiRDB/Developer's Kitのインストール時に，「セットアップタイプ」画面で「すべて」を選択するか，又は「カスタム」を選択して「機能の選択」画面で「HiRDB.NETデータプロバイダ」をチェックすると，HiRDBデータプロバイダ for .NET Frameworkがインストールされます。

このとき，HiRDBデータプロバイダ for .NET FrameworkのDLL群と発行者ポリシーがグローバルアセンブリキャッシュへ配置されます。また，発行者ポリシーによってインストールしている最新のHiRDBデータプロバイダ for .NET Frameworkが使用されるため，HiRDBデータプロバイダ for .NET Frameworkをバージョンアップした場合でも，UAPを再ビルドする必要はありません。

HiRDBデータプロバイダ for .NET Frameworkのグローバルアセンブリキャッシュへの配置については，「グローバルアセンブリキャッシュへの配置」を参照してください。

15.2.2　インストールされるファイル

HiRDBデータプロバイダ for .NET Frameworkをインストールすると，次のファイルが作成されます。

HiRDBデータプロバイダ for .NET Framework（.NET Framework 1.1対応）の場合：

pddndp.dll

pddndpcore.dll

HiRDBデータプロバイダ for .NET Framework（.NET Framework 2.0対応）の場合：

32ビットのとき

pddndp20.dll

pddndpcore20.dll

64ビットのとき

pddndp20x.dll

pddndpcore20x.dll

HiRDBデータプロバイダ for .NET Framework（.NET Framework 4対応）の場合：

32ビットのとき

pddndp40.dll

pddndpcore40.dll

64ビットのとき

pddndp40x.dll

pddndpcore40x.dll

HiRDBデータプロバイダ for .NET Frameworkを使用する場合は，上記のファイルを参照設定に追加してください。

15.2.3　バージョン情報の確認

HiRDBデータプロバイダ for .NET Frameworkのバージョン情報は，HiRDBデータプロバイダ for .NET Frameworkの提供DLLのプロパティで確認できます。

15.3　HiRDBデータプロバイダ for .NET Frameworkのクラス一覧

HiRDBデータプロバイダ for .NET Frameworkは，ADO.NETの仕様に準拠しています。

HiRDBデータプロバイダ for .NET Frameworkのクラス一覧を次の表に示します。

クラスは名前空間「Hitachi.HiRDB」に属しています。

表15‒2　HiRDBデータプロバイダ for .NET Frameworkクラス一覧

クラス

機能

対応するADO.NETのバージョン

HiRDBCommand

データベースに対して実行するSQLステートメント又はストアドプロシジャを表します。

1.1以降

HiRDBCommandBuilder

データベースに関連づけられたDataSetへの変更を調整するための単一テーブルコマンドを自動的に生成します。

1.1以降

HiRDBConnection

データベースへの開いた接続を表します。

1.1以降

HiRDBDataAdapter

DataSetへのデータの格納及びデータベースの更新に使用される，一連のデータコマンド及びデータベース接続を表します。

1.1以降

HiRDBDataReader

データベースからデータ行の前方向ストリームを読み取る方法を提供します。

1.1以降

HiRDBException

HiRDBデータプロバイダ for .NET Frameworkから警告又はエラーが返された場合に生成される例外です。

1.1以降

HiRDBParameter

HiRDBCommandのパラメタと，オプションとしてDataColumnに対するマップを表します。

1.1以降

HiRDBParameterCollection

HiRDBCommand に関連するパラメタコレクション，及びDataSet列に対する各パラメタのマップを表します。

1.1以降

HiRDBProviderFactory

HiRDBデータプロバイダ for .NET Frameworkが提供する各クラスのインスタンスを生成します。

2.0以降

HiRDBRowUpdatedEventArgs

RowUpdatedイベントのデータを提供します。

1.1以降

HiRDBRowUpdatingEventArgs

RowUpdatingイベントのデータを提供します。

1.1以降

HiRDBTransaction

データベースで実行するトランザクションを表します。

1.1以降

15.4　HiRDBデータプロバイダ for .NET Frameworkのメンバ一覧

HiRDBデータプロバイダ for .NET Frameworkの提供するインタフェースのメンバ一覧を示します。

15.4.1　HiRDBCommandのメンバ一覧

(1)　コンストラクタ

HiRDBCommand

(2)　継承クラス

対応するADO.NETのバージョンが1.1の場合：

Component，IDbCommand，ICloneable

対応するADO.NETのバージョンが2.0の場合：

DbCommand

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

CommandText

データベースに対して実行するテキストコマンドを取得又は設定します。

1.1以降

CommandTimeout

SQL実行のタイムアウト時間（秒数）を取得又は設定します。

1.1以降

CommandType

CommandTextプロパティの解釈方法を示す値を取得又は設定します。

1.1以降

Connection

このHiRDBCommandで使用されるHiRDBConnectionを取得又は設定します。

1.1以降

DesignTimeVisible

インタフェースコントロールにHiRDBCommandオブジェクトを連携した場合に，HiRDBCommandオブジェクトをコントロール上に表示するかどうかを示す値を取得又は設定します。

2.0以降

Parameters

HiRDBParameterCollectionを取得します。

1.1以降

Transaction

このHiRDBCommandが実行されるHiRDBTransactionを取得又は設定します。

1.1以降

UpdatedRowSource

HiRDBDataAdapterのUpdateメソッドがコマンド結果を使用するときに，コマンド結果をDataRowに適用する方法を取得又は設定します。

1.1以降

(4)　メソッド

メンバ

機能

対応するADO.NETのバージョン

Cancel ()

HiRDBCommandの実行中のSQLをキャンセルします。

1.1以降

Clone ()

現在のインスタンスのコピーである新しいオブジェクトを作成します。

1.1以降

CreateParameter ()

HiRDBParameterオブジェクトの新しいインスタンスを作成します。

1.1以降

Dispose()

HiRDBCommandによって使用されているすべてのリソースを解放します。

1.1以降

ExecuteNonQuery ()

HiRDBConnectionオブジェクトに対してSQLステートメントを実行し，影響を受けた行の数を返します。

1.1以降

ExecuteNonQuery (int)

1.1以降

ExecuteReader ()

HiRDBConnectionに対してCommandTextを実行し，HiRDBDataReader を構築します。

1.1以降

ExecuteReader (CommandBehavior)

1.1以降

ExecuteScalar ()

クエリを実行し，そのクエリが返す結果セットの最初の行にある最初の列を返します。余分な列又は行は無視されます。

1.1以降

Prepare ()

準備されたバージョンのコマンド（コンパイル済み）をデータベースに作成します。

1.1以降

15.4.2　HiRDBCommandBuilderのメンバ一覧

(1)　コンストラクタ

HiRDBCommandBuilder

(2)　継承クラス

対応するADO.NETのバージョンが1.1の場合：

Component

対応するADO.NETのバージョンが2.0の場合：

DbCommandBuilder

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

CatalogLocation

サーバ名，カタログ名，スキーマ名，テーブル名で修飾テーブル名を示すときのカタログ名の位置を示します。

2.0以降

CatalogSeparator

HiRDBCommandBuilderオブジェクトのカタログ区切り記号として使用する文字列を設定又は取得します。

2.0以降

ConflictOption

該当するオブジェクトが生成するUpdateCommandとDeleteCommandのWHERE句に追加する列の組み合わせ（同時実行チェックの種類）を設定又は取得します。

2.0以降

DataAdapter

SQLステートメントの自動生成の対象となるHiRDBDataAdapterオブジェクトを取得又は設定します。

1.1以降

QuotePrefix

列やテーブルの識別子を指定するための開始文字を取得又は設定します。

2.0以降

QuoteSuffix

列やテーブルの識別子を指定するための終了文字を取得又は設定します。

2.0以降

SchemaSeparator

認可識別子とそのほかの識別子との間の区切り記号に使用する文字を取得又は設定します。

2.0以降

SetAllValues

UPDATE文で値を更新する列がすべての列かどうかを取得又は設定します。

2.0以降

(4)　メソッド

メンバ

機能

対応するADO.NETのバージョン

Dispose()

HiRDBCommandBuilderによって使用されているすべてのリソースを解放します。

1.1以降

GetDeleteCommand ()

データベースで削除処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。

2.0以降

GetDeleteCommand (bool)

2.0以降

GetDeleteCommand (string)

1.1以降

GetInsertCommand ()

データベースで挿入処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。

2.0以降

GetInsertCommand (bool)

2.0以降

GetInsertCommand (string)

1.1以降

GetUpdateCommand ()

データベースで更新処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。

2.0以降

GetUpdateCommand (bool)

2.0以降

GetUpdateCommand (string)

1.1以降

QuoteIdentifier (string)

指定された文字列をHiRDBCommandBuilder#QuotePrefixプロパティの値とHiRDBCommandBuilder#QuoteSuffixプロパティの値で囲って返します。

2.0以降

RefreshSchema ()

INSERT，UPDATE，又はDELETEステートメントを生成するための，データベーススキーマ情報を更新します。

2.0以降

RefreshSchema (string)

1.1以降

UnquoteIdentifier (string)

指定された文字列から先頭のHiRDBCommandBuilder#QuotePrefixプロパティの値と終端のHiRDBCommandBuilder#QuoteSuffixプロパティの値を除いたものを返します。

2.0以降

15.4.3　HiRDBConnectionのメンバ一覧

(1)　コンストラクタ

HiRDBConnection

(2)　継承クラス

対応するADO.NETのバージョンが1.1の場合：

Component，IDbConnection，ICloneable

対応するADO.NETのバージョンが2.0の場合：

DbConnection

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

ConnectionString

データベースを開くために使用する文字列を取得又は設定します。

1.1以降

ConnectionTimeout

試行を中断して，エラーを生成する前に接続の確立時に待機する時間を取得します。

1.1以降

Database

現在のデータベース，又は接続が開いてから使用するデータベースの名前を取得します。

1.1以降

DataSource

接続しているデータベースサーバの名前を取得します。

2.0以降

LifeTime

実際に切断するまでの時間を取得又は設定します。

1.1以降

Pooling

プーリングを行うかどうかを取得又は設定します。

1.1以降

ServerVersion

接続中のサーバのバージョンを取得します。

2.0以降

State

現在の接続状態を取得します。

1.1以降

ConnectionRecover

接続プーリング機能使用時に，接続回復機能を使用するかどうかを取得又は設定します。

2.0以降

(4)　メソッド

メンバ

機能

対応するADO.NETのバージョン

BeginTransaction ()

データベーストランザクションを開始します。

1.1以降

BeginTransaction (IsolationLevel)

1.1以降

ChangeDatabase (string)

開いているHiRDBConnectionオブジェクトの現在のデータベースを変更します。

1.1以降

Clone ()

現在のインスタンスのコピーである新しいオブジェクトを作成します。

1.1以降

Close ()

データベースへの接続を閉じます。

1.1以降

CreateCommand ()

接続に関連づけられたHiRDBCommandオブジェクトを作成し，返します。

1.1以降

Dispose()

HiRDBConnectionによって使用されているすべてのリソースを解放します。

1.1以降

EnlistTransaction (Transaction)

指定されたトランザクションに登録します。

2.0以降

GetSchema ()

スキーマ情報を返します。

2.0以降

GetSchema (string)

2.0以降

GetSchema (string, string[])

2.0以降

Open ()

HiRDBConnectionオブジェクトのConnectionStringプロパティで指定されている設定で，データベース接続を開きます。

1.1以降

15.4.4　HiRDBDataAdapterのメンバ一覧

(1)　コンストラクタ

HiRDBDataAdapter

(2)　継承クラス

対応するADO.NETのバージョンが1.1の場合：

DbDataAdapter，IDbDataAdapter

対応するADO.NETのバージョンが2.0の場合：

DbDataAdapter

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

DeleteCommand

データセットからレコードを削除するSQLステートメントを取得又は設定します。

1.1以降

InsertCommand

データベースに新しいレコードを挿入するSQLステートメントを取得又は設定します。

1.1以降

SelectCommand

データベース内のレコードを選択するSQLステートメントを取得又は設定します。

1.1以降

UpdateCommand

データベース内のレコードを更新するSQLステートメントを取得又は設定します。

1.1以降

(4)　イベント

メンバ

機能

対応するADO.NETのバージョン

RowUpdated

更新処理時に，データソースに対してコマンドを実行した後に発生します。

1.1以降

RowUpdating

更新処理時に，データソースに対してコマンドを実行する前に発生します。

1.1以降

15.4.5　HiRDBDataReaderのメンバ一覧

(1)　コンストラクタ

HiRDBDataReader

(2)　継承クラス

対応するADO.NETのバージョンが1.1の場合：

MarshalByRefObject，IEnumerable，IDataReader，IDisposable，IDataRecord

対応するADO.NETのバージョンが2.0の場合：

DbDataReader

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

Depth

現在の行の入れ子の深さを示す値を取得します。

1.1以降

FieldCount

現在の行の列数を取得します。

1.1以降

HasRows

該当するHiRDBDataReaderに1行以上の行が格納されているかどうかを示す値を取得します。

2.0以降

IsClosed

データリーダが閉じているかどうかを示す値を取得します。

1.1以降

Item[int]

HiRDBDataReaderオブジェクトを配列のように扱い，データを取得します。

1.1以降

Item[int,int]

1.1以降

Item[string]

1.1以降

RecordsAffected

SQLステートメントの実行によって，変更，挿入，又は削除された行の数を取得します。

1.1以降

VisibleFieldCount

HiRDBDataReaderの非表示ではない列数を取得します。

2.0以降

(4)　メソッド

メンバ

機能

対応するADO.NETのバージョン

Close ()

HiRDBDataReaderオブジェクトを閉じます。

1.1以降

Dispose()

HiRDBDataReaderによって使用されているすべてのリソースを解放します。

1.1以降

GetBoolean (int)

指定した列の値をブール値として取得します。

1.1以降

GetByte (int)

指定した列の8ビット符号なし整数値を取得します。

1.1以降

GetBytes (int, long, byte[], int, int)

指定したバッファオフセットを開始位置として，指定した列オフセットからバッファに，バイトのストリームを配列として読み込みます。

1.1以降

GetChar (int)

指定した列の文字値を取得します。

1.1以降

GetChars (int, long, byte[], int, int)

指定したバッファオフセットを開始位置として，指定した列オフセットからバッファに，文字のストリームを配列として読み込みます。

1.1以降

GetData (int)

このメンバは，.NET Frameworkインフラストラクチャのサポートを目的としています。独自に作成したコード内で直接使用できません。

1.1以降

GetDataTypeName (int)

指定したフィールドのデータ型情報を取得します。

1.1以降

GetDateTime (int)

指定したフィールドの日時のデータ値を取得又は設定します。

1.1以降

GetDecimal (int)

指定したフィールドの固定位置数値を取得します。

1.1以降

GetDouble (int)

指定したフィールドの倍精度浮動小数点数を取得します。

1.1以降

GetEnumerator ()

コレクションを反復処理できる列挙子を返します。

1.1以降

GetFieldArrayCount (int)

フィールドの配列の大きさを取得します。

1.1以降

GetFieldType (int)

GetValueから返されるObjectの型に対応するType情報を取得します。

1.1以降

GetFloat (int)

指定したフィールドの単精度浮動小数点数を取得します。

1.1以降

GetGuid (int)

指定したフィールドのGUID値を返します。

1.1以降

GetInt16 (int)

指定したフィールドの16ビット符号付き整数値を取得します。

1.1以降

GetInt32 (int)

指定したフィールドの32ビット符号付き整数値を取得します。

1.1以降

GetInt64 (int)

指定したフィールドの64ビット符号付き整数値を取得します。

1.1以降

GetName (int)

検索するフィールドの名前を取得します。

1.1以降

GetOrdinal (string)

指定したフィールドのインデクスを返します。

1.1以降

GetProviderSpecificFieldType (int)

指定した列のデータ型を取得します。

2.0以降

GetProviderSpecificValue (int)

指定した列の値をObjectのインスタンスとして取得します。

2.0以降

GetProviderSpecificValues (Object[])

現在の行のコレクション内にあるすべての属性列を取得します。

2.0以降

GetSchemaTable ()

HiRDBDataReaderの列メタデータを説明するDataTableを返します。

1.1以降

GetString (int)

指定したフィールドの文字列値を取得します。

1.1以降

GetValue (int)

指定した列の値をObjectのインスタンスとして取得します。

1.1以降

GetValue (int, int)

指定した列の指定した要素の値をObject型オブジェクトとして取得します。

1.1以降

GetValues (object[])

現在のレコードコレクション内のすべての属性フィールドを取得します。

1.1以降

IsDBNull (int)

指定したフィールドがnullに設定されているかどうかを示す値を返します。

1.1以降

NextResult ()

バッチSQLステートメントの結果を読み込むときに，データリーダを次の結果に進めます。

1.1以降

Read ()

HiRDBDataReaderを次のレコードに進めます。

1.1以降

15.4.6　HiRDBExceptionのメンバ一覧

(1)　コンストラクタ

HiRDBException

(2)　継承クラス

対応するADO.NETのバージョンが1.1の場合：

Exception

対応するADO.NETのバージョンが2.0の場合：

DbException

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

ErrorCode

エラーのコード部分をintとして取得します。

1.1以降

Message

エラーの完全なテキストを取得します。

1.1以降

15.4.7　HiRDBParameterのメンバ一覧

(1)　コンストラクタ

HiRDBParameter

(2)　継承クラス

対応するADO.NETのバージョンが1.1の場合：

MarshalByRefObject，IDbDataParameter，IDataParameter，ICloneable

対応するADO.NETのバージョンが2.0の場合：

DbParameter，IDbDataParameter

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

DbType

パラメタのDbTypeを取得又は設定します。設定時には，表「DbTypeプロパティ設定時に自動設定されるHiRDBTypeプロパティの値」に従って，HiRDBTypeプロパティに該当するデータタイプを設定します。

1.1以降

Direction

パラメタが入力専用，出力専用，双方向，又はストアドプロシジャの戻り値パラメタかどうかを示す値を取得又は設定します。

1.1以降

HiRDBType

HiRDBでのデータタイプを示す列挙体を取得，又は設定します。設定時には，表「HiRDBTypeプロパティ設定時に自動設定されるDbTypeプロパティの値」に従って，該当するデータタイプをDbTypeプロパティに設定します。

［HiRDBType列挙体］

Integer，SmallInt，Decimal，Float，SmallFlt，Char，VarChar，NChar，NVarChar， MChar，MVarChar，Date，Time，TimeStamp，IntervalYearToDay， IntervalHourToSecond，Blob，Binary

1.1以降

IsNullable

パラメタがnull値を受け入れるかどうかを示す値を取得します。

1.1以降

ParameterName

HiRDBParameterの名前を取得又は設定します。

1.1以降

Precision

DECIMAL型パラメタの定義長の有効けた数（小数部けた数を含む）を取得又は設定します。HiRDBTypeプロパティの値がHiRDBType.Decimalの場合，必ず設定してください。

1.1以降

Repetition

HiRDBでの配列構造を取得又は設定します。

1.1以降

Scale

DECIMAL型パラメタの定義長の小数部けた数を取得又は設定します。HiRDBTypeプロパティの値がHiRDBType.Decimalの場合，必ず設定してください。

1.1以降

Size

パラメタの定義長を取得又は設定します。固定長（数値型や日時型など）の場合は０を，可変長（文字列型など）の場合はテーブルに格納するバイト数又は列の最大長を設定してください。TIMESTAMP（DateTime）の場合は，小数部のけた数となります。

なお，Sizeプロパティの設定よりも長い文字列を入力した場合は，Sizeプロパティに設定した長さまでの文字列が格納されます。例外は発生しません。

1.1以降

SourceColumn

DataSetに割り当てられていて，Valueを読み込むとき，又は戻すときに使用されるソース列の名前を取得又は設定します。

1.1以降

SourceColumnNullMapping

パラメタに対応するDataTableオブジェクトの列がNULL値を許すかどうかを示す値を取得又は設定します。

1.1以降

SourceVersion

Valueの読み込みに使用するDataRowVersionを取得又は設定します。

1.1以降

Value

パラメタの値を取得又は設定します。

1.1以降

(4)　メソッド

メンバ

機能

対応するADO.NETのバージョン

Clone ()

現在のインスタンスのコピーである新しいオブジェクトを作成します。

1.1以降

ResetDbType ()

DbTypeプロパティの値を初期値に戻します。

2.0以降

15.4.8　HiRDBParameterCollectionのメンバ一覧

(1)　コンストラクタ

HiRDBParameterCollection

(2)　継承クラス

対応するADO.NETのバージョンが1.1の場合：

MarshalByRefObject，IDataParameterCollection，IList，ICollection，IEnumerable

対応するADO.NETのバージョンが2.0の場合：

DbParameterCollection

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

Count

HiRDBParameterCollectionに格納されているHiRDBParameterオブジェクトの数を取得します。

1.1以降

IsFixedSize

HiRDBParameterCollectionが固定サイズかどうかを示す値を取得します。

1.1以降

IsReadOnly

HiRDBParameterCollection が読み取り専用かどうかを示す値を取得します。

1.1以降

IsSynchronized

HiRDBParameterCollectionへのアクセスが同期されている（スレッドセーフである）かどうかを示す値を取得します。

1.1以降

Item[int]

指定したインデクスのHiRDBParameterオブジェクトを取得，又は指定したインデクスにHiRDBParameterオブジェクトを設定します。

1.1以降

Item[string]

1.1以降

SyncRoot

HiRDBParameterCollectionへのアクセスを同期するために使用できるオブジェクトを取得します。

1.1以降

(4)　メソッド

メンバ

機能

対応するADO.NETのバージョン

Add (object)

HiRDBParameterCollectionに項目を追加します。

1.1以降

Add (HiRDBParameter)

1.1以降

Add (string, object)

1.1以降

Add (string, HiRDBType)

1.1以降

Add (string, HiRDBType, int)

1.1以降

Add (string, HiRDBType, int, string)

1.1以降

Add2 (HiRDBParameter)

2.0以降

Add2(string, object)

2.0以降

Add2(string, HiRDBType)

2.0以降

Add2(string, HiRDBType, int)

2.0以降

Add2(string, HiRDBType, int, string)

2.0以降

AddRange (Array)

HiRDBParameterオブジェクトの配列をHiRDBParameterCollectionに追加します。

1.1以降

AddRange (HiRDBParameter[])

1.1以降

Clear ()

HiRDBParameterCollectionからすべての項目を削除します。

1.1以降

Contains (object)

HiRDBParameter がコレクション内にあるかどうかを示す値を取得します。

1.1以降

Contains (HiRDBParameter)

1.1以降

Contains (string)

1.1以降

CopyTo (Array, int)

Arrayの特定のインデクスを開始位置として，ArrayにHiRDBParameterCollectionの要素をコピーします。

1.1以降

GetEnumerator ()

コレクションを反復処理できる列挙子を返します。

1.1以降

IndexOf (object)

コレクション内のHiRDBParameterの位置を取得します。

1.1以降

IndexOf (string)

1.1以降

Insert (int, object)

HiRDBParameterCollection内の指定した位置に項目を挿入します。

1.1以降

Insert (int, HiRDBParameter)

1.1以降

Remove

HiRDBParameterCollection内にある特定のオブジェクトのうち，最初に出現するオブジェクトを削除します。

1.1以降

RemoveAt (int)

HiRDBParameterをコレクションから削除します。

1.1以降

RemoveAt (string)

1.1以降

15.4.9　HiRDBProviderFactoryのメンバ一覧

(1)　コンストラクタ

HiRDBProviderFactory

(2)　継承クラス

DbProviderFactory

(3)　フィールド

Instance

(4)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

CanCreateDataSourceEnumerator

DbDataSourceEnumeratorクラスから派生したクラスをサポートするかどうかを示します。

2.0以降

(5)　メソッド

メンバ

機能

対応するADO.NETのバージョン

CreateCommand ()

HiRDBCommandオブジェクトを作成して返します。

2.0以降

CreateCommandBuilder ()

HiRDBCommandBuilderオブジェクトを作成して返します。

2.0以降

CreateConnection ()

HiRDBConnectionオブジェクトを作成して返します。

2.0以降

CreateConnectionStringBuilder ()

DbConnectionStringBuilderオブジェクトを作成して返します。

2.0以降

CreateDataAdapter ()

HiRDBDataAdapterオブジェクトを作成して返します。

2.0以降

CreateDataSourceEnumerator ()

System.NotSupportedExceptionを返します。

2.0以降

CreateParameter ()

HiRDBParameterオブジェクトを作成して返します。

2.0以降

15.4.10　HiRDBRowUpdatedEventArgsのメンバ一覧

(1)　コンストラクタ

HiRDBRowUpdatedEventArgs

(2)　継承クラス

RowUpdatedEventArgs

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

Command

Updateの呼び出し時に実行されるHiRDBCommandを取得します。

1.1以降

15.4.11　HiRDBRowUpdatingEventArgsのメンバ一覧

(1)　コンストラクタ

HiRDBRowUpdatingEventArgs

(2)　継承クラス

RowUpdatingEventArgss

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

Command

Update処理中に実行するHiRDBCommandを取得又は設定します。

1.1以降

15.4.12　HiRDBTransactionメンバ一覧

(1)　コンストラクタ

HiRDBTransaction

(2)　継承クラス

対応するADO.NETのバージョンが1.1の場合：

MarshalByRefObject，IDbTransaction，IDisposable

対応するADO.NETのバージョンが2.0の場合：

DbTransaction

(3)　プロパティ

メンバ

機能

対応するADO.NETのバージョン

Connection

トランザクションを関連づけるHiRDBConnectionオブジェクトを取得します。

1.1以降

IsCompleted

トランザクションが完了しているかどうかを取得します。

1.1以降

IsolationLevel

このトランザクションのIsolationLevelを指定します。

1.1以降

(4)　メソッド

メンバ

機能

対応するADO.NETのバージョン

Commit ()

データベーストランザクションをコミットします。

1.1以降

Dispose()

HiRDBTransactionによって使用されているすべてのリソースを解放します

1.1以降

Rollback ()

保留中の状態からデータベーストランザクションをロールバックします。

1.1以降

15.5　HiRDBデータプロバイダ for .NET Frameworkのインタフェース

15.5.1　HiRDBCommand

(1)　コンストラクタ

(a)　HiRDBCommand

void HiRDBCommand ()

説明：HiRDBCommandの新しいインスタンスを初期化します。

void HiRDBCommand (string)

引数

string cmdText：SQLテキスト(CommandTextプロパティ)

説明：SQLテキストを指定して，HiRDBCommandクラスの新しいインスタンスを初期化します。

void HiRDBCommand (string, Hitachi.HiRDB.HiRDBConnection)

引数

string cmdText：SQLテキスト(CommandTextプロパティ)

HiRDBConnection rConnection：データベースへの接続を表すHiRDBConnectionオブジェクト(Connectionプロパティ)

説明：SQLテキストとHiRDBConnectionオブジェクトを使用して，HiRDBCommandクラスの新しいインスタンスを初期化します。

void HiRDBCommand (string, Hitachi.HiRDB.HiRDBConnection, Hitachi.HiRDB.HiRDBTransaction)

引数

string cmdText：SQLテキスト（CommandTextプロパティ）

HiRDBConnection rConnection：データベースへの接続を表すHiRDBConnectionオブジェクト(CommandTextプロパティ)

HiRDBTransaction rTransaction：HiRDBCommandを実行するHiRDBTransactionオブジェクト（Transactionプロパティ）

説明：SQLテキスト，HiRDBConnection オブジェクト，及びHiRDBTransaction オブジェクトを使用して，HiRDBCommandクラスの新しいインスタンスを初期化します。

(2)　プロパティ

(a)　CommandText

型：string

既定値：""

説明：データベースに対して実行するテキストコマンドを取得又は設定します。

(b)　CommandTimeout

型：int

既定値：30

説明：SQL実行のタイムアウト時間（秒数）を取得又は設定します。

例外：HiRDBException

(c)　CommandType

型：System.Data.CommandType

既定値：CommandType.Text

説明：CommandTextプロパティの解釈方法を取得又は設定します。

(d)　Connection

型：HiRDBConnection

既定値：null

説明：このHiRDBCommandで使用されるHiRDBConnectionを取得又は設定します。

例外：HiRDBException

(e)　DesignTimeVisible

型：bool

既定値：true

説明：インタフェースコントロールにHiRDBCommandオブジェクトを連携した場合に，HiRDBCommandオブジェクトをコントロール上に表示するかどうかを示す値を取得又は設定します。

(f)　Parameters

型：HiRDBParameterCollection

説明：HiRDBParameterCollectionを取得します（読み取り専用）。

(g)　Transaction

型：HiRDBTransaction

既定値：null

説明：このHiRDBCommandが実行されるHiRDBTransactionを取得又は設定します。

(h)　UpdatedRowSource

型：System.Data.UpdateRowSource

既定値：UpdatedRowSource.None

説明：HiRDBDataAdapterのUpdateメソッドがコマンド結果を使用するときに，コマンド結果をDataRowに適用する方法を取得又は設定します。

例外：HiRDBException

(3)　メソッド

(a)　Cancel

void Cancel ()

Return：void

説明：HiRDBCommandの実行中のSQLをキャンセルします。

(b)　Clone

object Clone ()

Return

object：このインスタンスのコピーである新しいオブジェクト

説明：現在のインスタンスのコピーである新しいオブジェクトを作成します。

(c)　CreateParameter

Hitachi.HiRDB.HiRDBParameter CreateParameter ()

Return

HiRDBParameter：HiRDBParameterオブジェクト

説明：HiRDBParameterオブジェクトの新しいインスタンスを作成します。

(d)　Dispose

void Dispose()

Return：void

説明：HiRDBCommandが使用しているすべてのリソースを解放します。

(e)　ExecuteNonQuery

int ExecuteNonQuery ()

Return

int：影響を受けた行の数

説明：HiRDBConnectionオブジェクトに対してSQLステートメントを実行し，影響を受けた行の数を返します。

例外：HiRDBException

int ExecuteNonQuery (int)

引数

int nArraySize：配列要素数

Return

int：影響を受けた行の数

説明：配列を使用したINSERT機能を使用し，HiRDBConnectionオブジェクトに対してSQLステートメントを実行し，影響を受けた行の数を返します。

例外：HiRDBException

(f)　ExecuteReader

Hitachi.HiRDB.HiRDBDataReader ExecuteReader ()

Return

HiRDBDataReader：HiRDBDataReaderオブジェクト

説明：HiRDBConnectionに対してCommandTextを実行し，HiRDBDataReader を構築します。

例外：HiRDBException

ExecuteReader (System.Data.CommandBehavior)

引数

System.DataCommandBehavior behavior：CommandBehavior値の一つ

Return

HiRDBDataReader：HiRDBDataReaderオブジェクト

説明：HiRDBConnectionに対してCommandTextを実行し，CommandBehavior値の一つを使用してHiRDBDataReaderを構築します。

例外：HiRDBException

(g)　ExecuteScalar

object ExecuteScalar ()

Return

object：結果セットの最初の行にある最初の列

説明：クエリを実行し，そのクエリが .NET Frameworkのデータ型で返す結果セットの最初の行の最初の列を返します。残りの列又は行は無視されます。

例外：HiRDBException

(h)　Prepare

void Prepare ()

Return：void

説明：準備されたバージョンのコマンド（コンパイル済み）をデータベースに作成します。

例外：HiRDBException

15.5.2　HiRDBCommandBuilder

(1)　コンストラクタ

(a)　HiRDBCommandBuilder

void HiRDBCommandBuilder ()

説明：HiRDBCommandBuilder の新しいインスタンスを初期化します。

void HiRDBCommandBuilder (HiRDBDataAdapter adapter)

引数

HiRDBDataAdapter adapter：HiRDBDataAdapter オブジェクト（DataAdapterプロパティ）

説明：HiRDBDataAdapterオブジェクトを指定して，HiRDBCommandBuilder の新しいインスタンスを初期化します。

(2)　プロパティ

(a)　CatalogLocation

型：CatalogLocation

既定値：CatalogLocation.Start

説明：サーバ名，カタログ名，スキーマ名，テーブル名で修飾テーブル名を示すときのカタログ名の位置を示します。

例外：HiRDBException

(b)　CatalogSeparator

型：string

既定値：""

説明：HiRDBCommandBuilderオブジェクトのカタログ区切り記号として使用する文字列を設定又は取得します。

例外：HiRDBException

(c)　ConflictOption

型：ConflictOption

既定値：ConflictOption.CompareAllSearchableValues

説明：該当するオブジェクトが生成するUpdateCommandとDeleteCommandのWHERE句に追加する列の組み合わせ（同時実行チェックの種類）を設定又は取得します。

例外：HiRDBException

(d)　DataAdapter

型：HiRDBDataAdapter

既定値：null

説明：SQLステートメントを自動生成する対象のHiRDBDataAdapterオブジェクトを取得又は設定します。

(e)　QuotePrefix

型：string

既定値：”（引用符）

説明：列やテーブルの識別子を指定するための開始文字を取得又は設定します。

例外：HiRDBException

(f)　QuoteSuffix

型：string

既定値：”（引用符）

説明：列やテーブルの識別子を指定するための終了文字を取得又は設定します。

例外：HiRDBException

(g)　SchemaSeparator

型：HiRDBDataAdapter

既定値：.（ピリオド）

説明：認可識別子とそのほかの識別子との間の区切り記号に使用する文字を取得又は設定します。

例外：HiRDBException

(h)　SetAllValues

型：bool

既定値：true

説明：UPDATE文で値を更新する列がすべての列かどうかを示す値を，取得又は設定します。

(3)　メソッド

(a)　Dispose

void Dispose()

Return：void

説明：HiRDBCommandBuilderが使用しているすべてのリソースを解放します。

(b)　GetDeleteCommand

HiRDBCommand GetDeleteCommand()

Return

HiRDBCommand：削除を実行するための，自動生成されたHiRDBCommandオブジェクト

説明：データベースで削除処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。DataAdapterプロパティのSelectCommandに指定する検索SQL文が次に示す場合は，削除SQL文を作成できません。

単一表に対する検索ではない

表に別名を指定している

例外：HiRDBException

HiRDBCommand GetDeleteCommand(bool)

引数

useColumnsForParameterNames

　true：列名に基づいたパラメタ名（@IDなど）

　false：@pX形式のパラメタ名（X：1からの序数）

Return

HiRDBCommand：削除を実行するための，自動生成されたHiRDBCommandオブジェクト

説明：データベースで削除処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。DataAdapterプロパティのSelectCommandに指定する検索SQL文が次に示す場合は，削除SQL文を作成できません。

単一表に対する検索ではない

表に別名を指定している

例外：HiRDBException

HiRDBCommand GetDeleteCommand (string)

引数

string sTableName：テーブル名

Return

HiRDBCommand：削除を実行するための，自動生成されたHiRDBCommandオブジェクト

説明：データベースで削除処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。

例外：HiRDBException

(c)　GetInsertCommand

HiRDBCommand GetInsertCommand ()

Return

HiRDBCommand：挿入を実行するための自動生成されたHiRDBCommandオブジェクト

説明：データベースで挿入処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。DataAdapterプロパティのSelectCommandに指定する検索SQL文が次に示す場合，挿入SQL文を作成できません。

単一表に対する検索ではない。

表に別名を指定している。

例外：HiRDBException

HiRDBCommand GetInsertCommand (bool)

引数

useColumnsForParameterNames

　true：列名に基づいたパラメタ名（@IDなど）

　false：@pX形式のパラメタ名（X：1からの序数）

Return

HiRDBCommand：挿入を実行するための，自動生成されたHiRDBCommandオブジェクト

説明：データベースで挿入処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。DataAdapterプロパティのSelectCommandに指定する検索SQL文が次に示す場合，挿入SQL文を作成できません。

単一表に対する検索ではない

表に別名を指定している

例外：HiRDBException

HiRDBCommand GetInsertCommand (string)

引数

string sTableName：テーブル名

Return

HiRDBCommand：挿入を実行するための，自動生成されたHiRDBCommandオブジェクト

説明：データベースで挿入処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。

例外：HiRDBException

(d)　GetUpdateCommand

HiRDBCommand GetUpdateCommand ()

Return

HiRDBCommand：更新を実行するための，自動生成されたHiRDBCommand オブジェクト

説明：データベースで更新処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。DataAdapterプロパティのSelectCommandに指定する検索SQL文が次に示す場合，更新SQL文を作成できません。

単一表に対する検索ではない。

表に別名を指定している。

例外：HiRDBException

HiRDBCommand GetUpdateCommand (bool)

引数

useColumnsForParameterNames：

　true：列名に基づいたパラメタ名（@IDなど）

　false：@pX形式のパラメタ名（X：1からの序数）

Return

HiRDBCommand：更新を実行するための自動生成されたHiRDBCommand オブジェクト

説明：データベースで更新処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。DataAdapterプロパティのSelectCommandに指定する検索SQL文が次に示す場合，更新SQL文を作成できません。

単一表に対する検索ではない

表に別名を指定している

例外：HiRDBException

HiRDBCommand GetUpdateCommand (string)

引数

string sTableName：テーブル名

Return

HiRDBCommand：更新を実行するための自動生成されたHiRDBCommand オブジェクト

説明：データベースで更新処理を実行するための，自動生成されたHiRDBCommandオブジェクトを取得します。

例外：HiRDBException

(e)　QuoteIdentifier

string QuoteIdentifier(string)

引数

string unquotedIdentifier：HiRDBCommandBuilder#QuotePrefixプロパティの値とHiRDBCommandBuilder#QuoteSuffixプロパティの値で囲む文字列

Return

string：HiRDBCommandBuilder#QuotePrefixプロパティの値とHiRDBCommandBuilder#QuoteSuffixプロパティの値で囲んだ文字列

説明：指定された文字列をHiRDBCommandBuilder#QuotePrefixプロパティの値とHiRDBCommandBuilder#QuoteSuffixプロパティの値で囲って返します。

例外：HiRDBException

(f)　RefreshSchema

void RefreshSchema ()

Return：void

説明：INSERT，UPDATE，又はDELETEステートメントを生成するための，データベースのスキーマ情報を更新します。

void RefreshSchema (string)

引数

string sTableName：テーブル名

Return：void

説明：INSERT，UPDATE，又はDELETEステートメントを生成するための，データベースのスキーマ情報を更新します。

例外：HiRDBException

(g)　UnquoteIdentifier

string UnquoteIdentifier (string)

引数

string quotedIdentifier：HiRDBCommandBuilder#QuotePrefixプロパティの値とHiRDBCommandBuilder#QuoteSuffixプロパティの値で囲んだ文字列

Return

string：先頭のHiRDBCommandBuilder#QuotePrefixプロパティの値と終端のHiRDBCommandBuilder#QuoteSuffixプロパティの値を取った文字列

説明：指定された文字列から先頭のHiRDBCommandBuilder#QuotePrefixプロパティの値と終端のHiRDBCommandBuilder#QuoteSuffixプロパティの値を除いたものを返します。

例外：HiRDBException

15.5.3　HiRDBConnection

(1)　コンストラクタ

(a)　HiRDBConnection

void HiRDBConnection ()

説明：HiRDBConnectionの新しいインスタンスを初期化します。

void HiRDBConnection (string)

引数

string ConnectionString：接続設定を格納している文字列（ConnectionStringプロパティ）

説明：接続文字列を指定して，HiRDBConnectionクラスの新しいインスタンスを初期化します。

(2)　プロパティ

(a)　ConnectionString

型：string

既定値：""

説明：データベースを開くために使用する文字列を取得又は設定します。

例外：HiRDBException

このプロパティには一つのstring型引数を指定する必要があります。指定する文字列は接続文字列と呼ばれるもので，これはADOやADO.NETのConnectionで使用する接続文字列と同種のものです。指定できる文字列を次に示します。

文字列

内容

datasource

dsn

env

使用するレジストリの設定。HiRDBクライアント環境変数登録ツールで作成した環境変数グループ名，又は環境変数グループファイル名（絶対パス）を指定します。

uid

userid

DB接続で使用する認可識別子。

password

Pwd

DB接続で使用するパスワード。

PD*

クライアント環境定義の設定。

指定の規則を次に示します。このプロパティ以外にも指定方法があります。指定値の優先順位に関する詳細は，「接続情報の優先順位」を参照してください。

各指定値は，セミコロンで区切ります。

大文字小文字の区別はありません。区別させたい場合は，その部分を引用符で囲んでください。

空白やタブは無視されます（引用符で囲まれた部分は除きます）。

接続文字列と無関係な文字列を指定すると，例外が発生します。ただし，「Provider」については，例外は発生しないで無視されます。これはDataProvider層でOleDb Data Providerとの互換性を保つためです。

(b)　ConnectionTimeout

型：int

既定値：

対応するADO.NETのバージョンが1.1の場合は15

対応するADO.NETのバージョンが2.0の場合は0

説明：試行を中断してエラーを生成する前に，接続の確立時に待機する時間を取得します（読み取り専用）。

(c)　Database

型：string

既定値：""

説明：現在のデータベース，又は接続が開いてから使用するデータベースの名前を取得します（読み取り専用）。

(d)　DataSource

型：string

既定値：""

説明：接続しているデータベースサーバの名前を取得します（読み取り専用）。

(e)　ServerVersion

型：string

既定値：""

説明：接続中のサーバのバージョンを取得します（読み取り専用）。

String.Compare()を使用して比較できる正規化された形式で返します。バージョンの形式を次に示します。

XX.YY.ZZZZ

XX：メジャーバージョン

YY：マイナーバージョン

ZZZZ："0000"固定

(f)　LifeTime

型：int

既定値：60

説明：実際に切断するまでの時間を取得又は設定します。指定値の単位は秒で，0〜2147483の間で指定してください。0を指定した場合，又は2147483を超える値を指定した場合は即座に切断します。負の値を指定した場合は指定値を無視します。

例外：HiRDBException

(g)　Pooling

型：bool

既定値：true

説明：プーリングを行うかどうかを取得又は設定します。

プーリングを行う場合はtrue，それ以外の場合はfalseとなります。

例外：HiRDBException

(h)　State

型：System.Data.ConnectionState

既定値：ConnectionState.Closed

説明：現在の接続状態を取得します（読み取り専用）。

(i)　ConnectionRecover

型：bool

既定値：true

説明：接続プーリング機能使用時に，接続回復機能を使用するかどうかを取得又は設定します。

接続回復機能を使用する場合はtrue，使用しない場合はfalseとなります。接続回復機能については，「HiRDBデータプロバイダ for .NET Frameworkの接続プーリングにおける接続回復機能」を参照してください。

例外：HiRDBException

(3)　メソッド

(a)　BeginTransaction

BeginTransaction ()

Return

HiRDBTransaction：新しいトランザクションを表すオブジェクト

説明：データベースでトランザクションを開始します。

例外：HiRDBException

BeginTransaction (System.Data.IsolationLevel)

引数

System.Data.IsolationLevel：IsolationLevel値の一つ

Return

HiRDBTransaction：新しいトランザクションを表すオブジェクト

説明：指定した IsolationLevel値を使用して，データベースでトランザクションを開始します。

例外：HiRDBException

(b)　ChangeDatabase

void ChangeDatabase (string)

引数

string databaseName：変更するデータベースの名前

Return：void

説明：開いているHiRDBConnectionオブジェクトの現在のデータベースを変更します。

例外：HiRDBException

(c)　Clone

HiRDBConnection Clone()

Return：無条件にnullを返します。

説明：無条件にnullを返します。

(d)　Close

void Close ()

Return：void

説明：データベースへの接続を閉じます。

(e)　CreateCommand

Hitachi.HiRDB.HiRDBCommand CreateCommand ()

Return

HiRDBCommand：HiRDBCommandオブジェクト

説明：接続に関連づけられたHiRDBCommandオブジェクトを作成し，返します。

(f)　Dispose

void Dispose()

Return：void

説明：HiRDBConnectionが使用しているすべてのリソースを解放します。

(g)　EnlistTransaction

void EnlistTransaction (Transaction)

引数

transaction：登録先となる既存のTransactionオブジェクト

Return：void

説明：指定されたトランザクションに登録します。

例外：HiRDBException

(h)　GetSchema

DataTable GetSchema ()

Return：DataTableオブジェクト

説明：スキーマ情報を返します。

DataTable GetSchema (string)

引数

collectionName：返すスキーマの名前

Return：DataTableオブジェクト

説明：スキーマ情報を返します。

DataTable GetSchema (string, string[])

引数

collectionName：返すスキーマの名前

restrictionValues：要求したスキーマの制限値

Return：DataTableオブジェクト

説明：スキーマ情報を返します。

(i)　Open

void Open ()

Return：void

説明：HiRDBConnectionオブジェクトのConnectionStringプロパティで指定されている設定で，データベース接続を開きます。

例外：HiRDBException

15.5.4　HiRDBDataAdapter

(1)　コンストラクタ

(a)　HiRDBDataAdapter

void HiRDBDataAdapter ()

説明：HiRDBDataAdapter クラスの新しいインスタンスを初期化します。

void HiRDBDataAdapter (Hitachi.HiRDB.HiRDBCommand)

引数

HiRDBCommand selectCommand：SQL SELECTステートメントを表すHiRDBCommandオブジェクト（SelectCommandプロパティ）

説明：指定したHiRDBCommandを使用して，HiRDBDataAdapterクラスの新しいインスタンスを初期化します。

void HiRDBDataAdapter (string, Hitachi.HiRDB.HiRDBConnection)

引数

string selectCommandText：SQL SELECTステートメント

HiRDBConnection selectConnection：接続を表すHiRDBConnectionオブジェクト

説明：SQL SELECTステートメントを指定したHiRDBConnectionを使用して，HiRDBCommandを作成します（SelectCommandプロパティ）。HiRDBDataAdapter クラスの新しいインスタンスを初期化します。

void HiRDBDataAdapter (string, string)

引数

string selectCommandText：SQL SELECTステートメント

string selectConnectionString：接続文字列

説明：接続文字列を使用して，HiRDBConnectionを作成します。SQL SELECTステートメントと，作成したHiRDBConnectionを使用して，HiRDBCommandを作成します（SelectCommandプロパティ）。HiRDBDataAdapter クラスの新しいインスタンスを初期化します。

(2)　プロパティ

(a)　DeleteCommand

型：HiRDBCommand

既定値：null

説明：データセットからレコードを削除するSQLステートメントを取得又は設定します。

(b)　InsertCommand

型：HiRDBCommand

既定値：null

説明：データベースに新しいレコードを挿入するSQLステートメントを取得又は設定します。

(c)　SelectCommand

型：HiRDBCommand

既定値：null

説明：データベース内のレコードを選択するSQLステートメントを取得又は設定します。

(d)　UpDateCommand

型：HiRDBCommand

既定値：null

説明：データベース内のレコードを更新するSQLステートメントを取得又は設定します。

(3)　イベント

(a)　RowUpdated

型：HiRDBRowUpdatedEventHandler

説明：更新処理時に，データソースに対してコマンドを実行した後に発生するイベントです。

(b)　RowUpdating

型：HiRDBRowUpdatingEventHandler

説明：更新処理時に，データソースに対してコマンドを実行する前に発生するイベントです。

15.5.5　HiRDBDataReader

(1)　コンストラクタ

HiRDBDataReader

説明：HiRDBDataReader を作成するには，コンストラクタを直接使用しないで，HiRDBCommandオブジェクトのExecuteReaderメソッドを呼び出す必要があります。

(2)　プロパティ

(a)　Depth

型：int

既定値：0

説明：現在の行の入れ子の深さを示す値を取得します。

(b)　FieldCount

型：int

説明：現在の行の列数を取得します。

(c)　HasRows

型：bool

既定値：false

説明：該当するHiRDBDataReaderに1行以上の行が格納されているかどうかを示す値を取得します。1行以上の行がHiRDBDataReaderに含まれている場合はtrue，それ以外の場合はfalseとなります。

(d)　IsClosed

型：bool

既定値：false

説明：データリーダが閉じているかどうかを示す値を取得します。閉じている場合はtrue，それ以外の場合はfalseとなります。

(e)　Item

Item[string]

型：Object this[string name]

説明：HiRDBDataReaderオブジェクトを配列のように扱い，データを取得します。

Item[int]

型：Object this[int ordinal]

説明：HiRDBDataReaderオブジェクトを配列のように扱い，データを取得します。

Item[int, int]

型：Object this[int colIdx, int elmIdx]

説明：HiRDBDataReaderオブジェクトを配列のように扱い，データを取得します。

(f)　RecordsAffected

型：int

既定値：0

説明：SQLステートメントの実行によって変更，挿入，又は削除された行の数を取得します。

(g)　VisibleFieldCount

型：int

説明：HiRDBDataReaderの非表示ではない列数を取得します。

(3)　メソッド

(a)　Close

void Close ()

Return：void

説明：HiRDBDataReaderオブジェクトを閉じます。

(b)　Dispose

void Dispose()

Return：void

説明：HiRDBDataReaderが使用しているすべてのリソースを解放します。

(c)　GetBoolean

bool GetBoolean (int)

引数

int i：列の0から始まる序数

Return

bool：列の値

説明：指定した列の値をブール値として取得します。

例外：HiRDBException

(d)　GetByte

byte GetByte (int)

引数

int i：列の0から始まる序数

Return

byte：指定した列の8ビット符号なし整数値

説明：指定した列の8ビット符号なし整数値を取得します。

例外：HiRDBException

(e)　GetBytes

long GetBytes (int, long, byte[ ], int,int)

引数

int i：列の0から始まる序数

long fieldOffset：読み取り操作を開始する行内のインデクス

byte[] buffer：バイトのストリームを読み込むバッファ

int bufferoffset：読み取り操作を開始するbufferのインデクス

int length：読み込むバイト数

Return

long：実際に読み込んだバイトの数

説明：指定したバッファオフセットを開始位置として，指定した列オフセットからバッファに，バイトのストリームを配列として読み込みます。

例外：HiRDBException

(f)　GetChar

char GetChar (int)

引数

int i：列の0から始まる序数

Return

char：指定した列の文字値

説明：指定した列の文字値を取得します。

例外：HiRDBException

(g)　GetChars

long GetChars (int, long,char[ ], int, int)

引数

int i：列の0から始まる序数

long fieldOffset：読み取り操作を開始する行内のインデクス

char[] buffer：バイトのストリームを読み込むバッファ

int bufferoffset：読み取り操作を開始するbufferのインデクス

int length：読み込むバイト数

Return

long：実際に読み込んだ文字数

説明：指定したバッファオフセットを開始位置として，指定した列オフセットからバッファに，文字のストリームを配列として読み込みます。

例外：HiRDBException

(h)　GetData

GetData (int)

引数

int i：列の0から始まる序数

Return：現在サポートされていません。

説明：このメンバは，.NET Framework インフラストラクチャのサポートを目的としています。独自に作成したコード内で直接使用できません。

(i)　GetDataTypeName

string GetDataTypeName (int)

引数

int i：検索するフィールドのインデクス

Return

string：指定したフィールドのデータ型情報

説明：指定したフィールドのデータ型情報を取得します。

例外：HiRDBException

(j)　GetDateTime

System.DateTime GetDateTime (int)

引数

int i：検索するフィールドのインデクス

Return

System.DateTime：指定したフィールドの日時のデータ値

説明：指定したフィールドの日時のデータ値を取得します。

例外：HiRDBException

(k)　GetDecimal

decimal GetDecimal (int)

引数

int i：検索するフィールドのインデクス

Return

decimal：指定したフィールドの固定位置数値

説明：指定したフィールドの固定位置数値を取得します。

例外：HiRDBException

(l)　GetDouble

double GetDouble (int)

引数

int i：検索するフィールドのインデクス

Return

double：指定したフィールドの倍精度浮動小数点数

説明：指定したフィールドの倍精度浮動小数点数を取得します。

例外：HiRDBException

(m)　GetEnumerator

System.Collections.IEnumerator GetEnumerator ()

Return

System.Collections.IEnumerator：コレクションを反復処理するために使用できるIEnumerator

説明：コレクションを反復処理できる列挙子を返します。

(n)　GetFieldArrayCount

int GetFieldArrayCount (int)

引数

int i：検索するフィールドのインデクス

Return

int：フィールドの配列の大きさ

説明：フィールドの配列の大きさを取得します。

例外：HiRDBException

(o)　GetFieldType

System.Type GetFieldType (int)

引数

int i：検索するフィールドのインデクス

Return

System.Type：GetValueから返されるobjectの型に対応するType情報

説明：GetValueから返される，Objectの型に対応するType情報を取得します。

例外：HiRDBException

(p)　GetFloat

float GetFloat (int)

引数

int i：検索するフィールドのインデクス

Return

float：指定したフィールドの単精度浮動小数点数

説明：指定したフィールドの単精度浮動小数点数を取得します。

例外：HiRDBException

(q)　GetGuid

System.Guid GetGuid (int)

引数

int i：検索するフィールドのインデクス

Return

System.Guid：指定したフィールドのGUID値

説明：指定したフィールドのGUID値を返します。

(r)　GetInt16

short GetInt16 (int)

引数

int i：検索するフィールドのインデクス

Return

short：指定したフィールドの16ビット符号付き整数値

説明：指定したフィールドの16ビット符号付き整数値を取得します。

例外：HiRDBException

(s)　GetInt32

int GetInt32 (int)

引数

int i：検索するフィールドのインデクス

Return

int：指定したフィールドの32ビット符号付き整数値

説明：指定したフィールドの32ビット符号付き整数値を取得します。

例外：HiRDBException

(t)　GetInt64

long GetInt64 (int)

引数

int i：検索するフィールドのインデクス

Return

long：指定したフィールドの64ビット符号付き整数値

説明：指定したフィールドの64ビット符号付き整数値を取得します。

例外：HiRDBException

(u)　GetName

string GetName (int)

引数

int i：検索するフィールドのインデクス

Return

string：フィールドの名前（返される値がない場合は空の文字列（""））

説明：検索するフィールドの名前を取得します。

例外：HiRDBException

(v)　GetOrdinal

int GetOrdinal (string)

引数

string name：検索するフィールドの名前

Return

int：指定したフィールドのインデクス

説明：指定したフィールドのインデクスを返します。

例外：HiRDBException

(w)　GetProviderSpecificFieldType

Object GetProviderSpecificFieldType (int)

引数

int ordinal：列の0から始まる序数

Return

Object：指定した列のデータ型

説明：指定した列のデータ型を取得します。HiRDBデータプロバイダ for .NET Frameworkは独自のデータ型をサポートしていないため，.NET Frameworkの共通言語ランタイムに用意されているデータ型のTypeオブジェクトを返します。HiRDBDataReader#GetFieldTypeメソッドと同じ動作をします。

例外：HiRDBException

(x)　GetProviderSpecificValue

Object GetProviderSpecificValue (int)

引数

int ordinal：列の0から始まる序数

Return

Object：指定された列の値を持つオブジェクト

説明：指定した列の値をObjectのインスタンスとして取得します。

例外：HiRDBException

(y)　GetProviderSpecificValues

int GetProviderSpecificValues (Object[])

引数

values：属性列のコピー先のObject配列（現在行の各列データを格納するObject型の配列）

Return

int：配列のObjectインスタンス数

説明：現在の行のコレクション内にあるすべての属性列を取得します。

例外：HiRDBException

(z)　GetSchemaTable

System.Data.DataTable GetSchemaTable ()

Return

System.Data.DataTable：列メタデータを説明するDataTable

説明：HiRDBDataReaderの列メタデータを説明するDataTableを返します。

例外：HiRDBException

(aa)　GetString

string GetString (int)

引数

int i：検索するフィールドのインデクス

Return

string：指定したフィールドの文字列値

説明：指定したフィールドの文字列値を取得します。

例外：HiRDBException

(ab)　GetValue

object GetValue (int)

引数

int i：検索するフィールドのインデクス

Return

object：フィールドの値が返されたときにその値を格納するObject

説明：指定したフィールドの値を返します。

例外：HiRDBException

object GetValue (int, int)

引数

int i：検索するフィールドのインデクス

int j：検索するフィールドのインデクス

Return

object：フィールドの値が返されたときにその値を格納するObject

説明：指定したフィールドの値を返します（配列用）。

例外：HiRDBException

(ac)　GetValues

int GetValues (object[ ])

引数

object values：属性フィールドのコピー先であるObjectの配列

Return

int：配列のObjectのインスタンス数

説明：現在のレコードコレクション内のすべての属性フィールドを取得します。

(ad)　IsDBNull

bool IsDBNull (int)

引数

int i：検索するフィールドのインデクス

Return

bool：指定したフィールドがNULL値の場合はtrue，それ以外の場合はfalseとなります。繰返し列の場合は，列全体がNULL値の場合はtrue，それ以外の場合はfalseとなります。

説明：指定したフィールドがNULL値かどうかを示す値を返します。繰返し列の場合は，列全体がNULL値かどうかを示す値を返します。

繰返し列のNULL値判定

繰返し列のNULL値判定は，次の手順で行います。

HiRDBDataReader.IsDBNull(int)メソッドで，繰返し列全体がNULL値かどうかを判定します。

1.の戻り値がtrueの場合は，列全体がNULL値であるため，各要素の値はありません。falseの場合は，HiRDBDataReader.GetFieldArrayCount()メソッドで現在要素数を取得します。

2.で取得した要素数分HiRDBDataReader.IsDBNull(int,int)メソッドを実行して，各要素がNULL値かどうかを判定します。そこでtrueを返却された要素がNULL値となります。

例外：HiRDBException

(ae)　NextResult

bool NextResult ()

Return

bool：もっと多くの行がある場合はtrue，それ以外の場合はfalseとなります。

説明：バッチSQLステートメントの結果を読み込むときに，データリーダを次の結果に進めます。

例外：HiRDBException

(af)　Read

bool Read ()

Return

bool：もっと多くの行がある場合はtrue，それ以外の場合はfalseとなります。

説明：HiRDBDataReader を次のレコードに進めます。

例外：HiRDBException

(ag)　IsDBNull

bool IsDBNull(int ,int)

引数

int colIdx：列の0から始まる序数

int elmIdx：繰返し列の要素番号（0から始まる序数）

Return

bool：指定した繰返し列の，指定した要素がNULL値の場合true，それ以外の場合はfalseとなります。

説明：指定した繰返し列の，指定した要素がNULL値かどうかを示す値を返します。

例外：HiRDBException

15.5.6　HiRDBException

(1)　プロパティ

(a)　ErrorCode

型：int

既定値：0

説明：エラーのコード部分をintとして取得します。

(b)　Message

型：String

既定値：""

説明：エラーの完全なテキストを取得します。

15.5.7　HiRDBParameter

(1)　コンストラクタ

(a)　HiRDBParameter

void HiRDBParameter ()

説明：HiRDBParameter クラスの新しいインスタンスを初期化します。

void HiRDBParameter (string, object)

引数

string name：割り当てるパラメタの名前（ParameterNameプロパティ）

object value：新しいHiRDBParameterオブジェクトの値（Valueプロパティ）

説明：パラメタ名とHiRDBParameterオブジェクトの値を指定して，HiRDBParameterクラスの新しいインスタンスを初期化します。

void HiRDBParameter (string, Hitachi.HiRDB.HiRDBType)

引数

string name：割り当てるパラメタの名前（ParameterNameプロパティ）

Hitachi.HiRDB.HiRDBType dataType：HiRDBType値の一つ（HiRDBTypeプロパティ）

説明：パラメタ名とデータ型を指定して，HiRDBParameterクラスの新しいインスタンスを初期化します。

void HiRDBParameter (string, Hitachi.HiRDB.HiRDBType, int)

引数

string name：割り当てるパラメタの名前（ParameterNameプロパティ）

Hitachi.HiRDB.HiRDBType dataType：HiRDBType値の一つ（HiRDBTypeプロパティ）

int size：パラメタの定義長（Sizeプロパティ）

説明：パラメタ名，データ型，及び長さを使用して，HiRDBParameterクラスの新しいインスタンスを初期化します。

void HiRDBParameter (string, Hitachi.HiRDB.HiRDBType, int, string)

引数

string name：割り当てるパラメタの名前（ParameterNameプロパティ）

Hitachi.HiRDB.HiRDBType dataType：HiRDBType値の一つ（HiRDBTypeプロパティ）

int size：パラメタの定義長（Sizeプロパティ）

string srcColumn：ソース列の名前（SourceColumnプロパティ）

説明：パラメタ名，データ型，長さ，及びソース列名を指定して，HiRDBParameterクラスの新しいインスタンスを初期化します。

void HiRDBParameter (string, Hitachi.HiRDB.HiRDBType, int, System.Data.ParameterDirection, byte, byte, string, System.Data.DataRowVersion, object)

引数

string parameterName：パラメタの名前（ParameterNameプロパティ）

Hitachi.HiRDB.HiRDBType dataType：HiRDBType値の一つ（HiRDBTypeプロパティ）

int size：パラメタの定義長（Sizeプロパティ）

System.Data.ParameterDirection direction：ParameterDirection値の一つ（Directionプロパティ）

byte precision：Valueを解決するための，小数点の左右の合計けた数（Precisionプロパティ）

byte scale：Valueを解決するための，小数部のけた数（Scaleプロパティ）

string srcColumn：ソース列の名前（SourceColumnプロパティ）

System.Data.DataRowVersion srcVersion：DataRowVersion値の一つ（SourceVersionプロパティ）

object value：HiRDBParameterの値であるObject（Valueプロパティ）

説明：パラメタ名，データ型，長さ，ソース列名，パラメタの方向，数値の精度，及びそのほかのプロパティを指定して，HiRDBParameterクラスの新しいインスタンスを初期化します。

(2)　プロパティ

(a)　DbType

型：System.Data.DbType

既定値：DbType.String

説明：パラメタのDbTypeを取得又は設定します。設定時には，表「DbTypeプロパティ設定時に自動設定されるHiRDBTypeプロパティの値」に従って，該当するデータタイプをHiRDBTypeプロパティに設定します。Valueプロパティに値を指定した場合，このプロパティの指定を省略できます。このプロパティの指定を省略した場合，HiRDBデータプロバイダ for .NET FrameworkがDbTypeプロパティの値を仮定します。DbTypeプロパティの仮定値の規則については，「パラメタのデータ長及びデータタイプの仮定」を参照してください。

(b)　Direction

型：System.Data.ParameterDirection

既定値：ParameterDirection.Input

説明：パラメタが入力専用，出力専用，双方向，又はストアドプロシジャの戻り値パラメタのどれであるかを示す値を取得又は設定します。

(c)　HiRDBType

型：Hitachi.HiRDB.HiRDBType

既定値：HiRDBType.MVarChar

説明：HiRDBでのデータタイプを示す列挙体を取得，又は設定します。設定時には，表「HiRDBTypeプロパティ設定時に自動設定されるDbTypeプロパティの値」に従って，該当するデータタイプをDbTypeプロパティに設定します。Valueプロパティに値を指定した場合，このプロパティの指定を省略できます。このプロパティの指定を省略した場合，HiRDBデータプロバイダ for .NET FrameworkがHiRDBTypeプロパティの値を仮定します。HiRDBTypeプロパティの仮定値の規則については，「パラメタのデータ長及びデータタイプの仮定」を参照してください。

［HiRDBType列挙体］

Integer，SmallInt，Decimal，Float，SmallFlt，Char，VarChar，NChar，NVarChar， MChar，MVarChar，Date，Time，TimeStamp，IntervalYearToDay，IntervalHourToSecond，Blob，Binary

(d)　IsNullable

型：bool

既定値：true（固定）

説明：パラメタがnull値を受け付けるかどうかを示す値を取得します（読み取り専用）。null値を受け付ける場合はtrue，それ以外の場合はfalseとなります。

(e)　ParameterName

型：string

既定値：""

説明：HiRDBParameterの名前を取得又は設定します。

(f)　Precision

型：byte

既定値：0

説明：DECIMAL型パラメタの定義長の有効けた数（小数部けた数を含む）を取得又は設定します。

HiRDBTypeプロパティの値がHiRDBType.Decimalの場合：

パラメタに対応するHiRDBサーバでのDECIMAL型列の精度を設定してください。

HiRDBTypeプロパティの値がHiRDBType.Decimal以外の場合：

設定値は無視されます。

Valueプロパティに値を指定した場合，このプロパティの指定を省略できます。このプロパティの指定を省略した場合，HiRDBデータプロバイダ for .NET FrameworkがPrecisionプロパティの値を仮定します。Precisionプロパティの仮定値の規則については，「パラメタのデータ長及びデータタイプの仮定」を参照してください。

(g)　Repetition

型：short

既定値：1

説明：HiRDBでの配列構造を取得又は設定します。1の場合は対象列を非繰返し列，2以上の場合は繰返し列の最大要素数として扱います。

(h)　Scale

型：byte

既定値：0

説明：DECIMAL型パラメタの定義長の小数部けた数を取得又は設定します。

HiRDBTypeプロパティの値がHiRDBType.Decimalの場合：

パラメタに対応するHiRDBサーバでのDECIMAL型列の位どりを設定してください。

HiRDBTypeプロパティの値がHiRDBType.Decimal以外の場合：

設定値は無視されます。

Valueプロパティに値を指定した場合，このプロパティの指定を省略できます。このプロパティの指定を省略した場合，HiRDBデータプロバイダ for .NET FrameworkがScaleプロパティの値を仮定します。Scaleプロパティの仮定値の規則については，「パラメタのデータ長及びデータタイプの仮定」を参照してください。

(i)　Size

型：int

既定値：0

説明：パラメタの定義長を取得又は設定します。固定長（数値型や日時型など）の場合は０を，可変長（文字列型など）の場合はテーブルに格納するバイト数又は列の最大長を設定してください。

TIMESTAMP（DateTime）の場合は，小数部のけた数となります。

注

Sizeプロパティの設定よりも長い文字列を入力した場合は，Sizeプロパティに設定した長さまでの文字列が格納されます。例外は発生しません。

Valueプロパティに値を指定した場合，このプロパティの指定を省略できます。このプロパティの指定を省略した場合，HiRDBデータプロバイダ for .NET FrameworkがSizeプロパティの値を仮定します。Sizeプロパティの仮定値の規則については，「パラメタのデータ長及びデータタイプの仮定」を参照してください。

(j)　SourceColumn

型：string

既定値：""

説明：DataSetに割り当てられ，Valueを読み込むとき，又は戻すときに使用されるソース列の名前を取得又は設定します。

(k)　SourceColumnNullMapping

型：bool

既定値：true

説明：パラメタに対応するDataTableオブジェクトの列がNULL値を許すかどうかを示す値を取得又は設定します。

(l)　SourceVersion

型：System.Data.DataRowVersion

既定値：DataRowVersion.Default

説明：Valueの読み込みに使用するDataRowVersionを取得又は設定します。

(m)　Value

型：object

既定値：null

説明：パラメタの値を取得又は設定します。入力，又は入出力用のHiRDBParameterオブジェクトにValueプロパティを指定した場合，次のプロパティの指定を省略できます。

DbTypeプロパティ

HiRDBTypeプロパティ

Sizeプロパティ

Precisionプロパティ

Scaleプロパティ

これらのプロパティの指定を省略した場合，各プロパティの値はHiRDBデータプロバイダ for .NET Frameworkが仮定します。ただし，これらのプロパティを明示的に指定した場合は，HiRDBデータプロバイダ for .NET Frameworkは値を仮定しません。そのため，Valueプロパティに指定する値に合わせて各プロパティを設定する必要があります。詳細は，「パラメタのデータ長及びデータタイプの仮定」を参照してください。

(3)　メソッド

(a)　Clone

object Clone ()

Return

object：このインスタンスのコピーである新しいオブジェクト

説明：現在のインスタンスのコピーである新しいオブジェクトを作成します。

(b)　ResetDbType

void ResetDbType ()

Return：void

説明：Valueプロパティが指定されていない場合，DbTypeプロパティの値を初期値に戻します。Valueプロパティに値が指定されている場合，HiRDBデータプロバイダ for .NET Frameworkが，Valueプロパティの値から仮定するDbTypeの値を設定します。データタイプの仮定値の規則については，「パラメタのデータ長及びデータタイプの仮定」を参照してください。DbTypeプロパティの値とHiRDBTypeプロパティの値は1対1で対応しているため，このメソッドを実行するとHiRDBデータプロバイダ for .NET FrameworkがDbTypeプロパティの値に対応する値をHiRDBTypeに設定します。

15.5.8　HiRDBParameterCollection

(1)　コンストラクタ

(a)　HiRDBParameterCollection

void HiRDBParameterCollection ()

説明：HiRDBParameterCollectionクラスの新規インスタンスを初期化します。

(2)　プロパティ

(a)　Count

型：int

既定値：0

説明：HiRDBParameterCollectionに格納されているHiRDBParameterオブジェクトの数を取得します（読み取り専用）。

(b)　IsFixedSize

型：bool

既定値：false

説明：HiRDBParameterCollectionが固定サイズかどうかを示す値を取得します（読み取り専用）。常にfalseとなります。

(c)　IsReadOnly

型：bool

既定値：false

説明：HiRDBParameterCollectionが読み取り専用かどうかを示す値を取得します（読み取り専用）。常にfalseとなります。

(d)　IsSynchronized

型：bool

既定値：false

説明：HiRDBParameterCollectionへのアクセスが同期されている（スレッドセーフである）かどうかを示す値を取得します（読み取り専用）。常にfalseとなります。

(e)　Item

Item[int]

型：HiRDBParameter this[int index]

説明：指定したインデクスのHiRDBParameterオブジェクトを取得します。又は，指定したインデクスにHiRDBParameterオブジェクトを設定します。

Item[string]

型：HiRDBParameter this[string parameterName]

説明：引数で指定したパラメタ名を持つHiRDBParameterオブジェクトを取得します。又は，引数で指定したパラメタ名を持つHiRDBParameterオブジェクトのインデクスに新しいHiRDBParameterオブジェクトを設定します。

(f)　SyncRoot

型：object

既定値：null

説明：HiRDBParameterCollectionへのアクセスを同期するために使用できるオブジェクトを取得します（読み取り専用）。

(3)　メソッド

(a)　Add

int Add (object)

引数

object value：HiRDBParameterCollectionに追加するHiRDBParameterオブジェクト

Return

int：追加したHiRDBParameterオブジェクトのコレクション内での0から始まるインデクス

説明：HiRDBParameterCollectionに項目を追加します。

int Add (Hitachi.HiRDB.HiRDBParameter)

引数

HiRDBParameter value：HiRDBParameterCollectionに追加するHiRDBParameter

Return

int：追加したHiRDBParameterの0から始まるインデクス

説明：HiRDBParameterCollectionに項目を追加します。

int Add (string, object)

引数

string parameterName：パラメタの名前

object parameterValue：パラメタの値

Return

int：追加したHiRDBParameterの0から始まるインデクス

説明：パラメタの名前と値を指定して，HiRDBParameterCollectionに項目を追加します。

int Add (string, HiRDBType)

引数

string parameterName：パラメタの名前

HiRDBType dataType：HiRDBType値の一つ

Return

int：追加したHiRDBParameterの0から始まるインデクス

説明：パラメタの名前とデータ型を指定して，HiRDBParameterCollectionに項目を追加します。

int Add (string, HiRDBType, int)

引数

string parameterName：パラメタの名前

HiRDBType dataType：HiRDBType値の一つ

int size：パラメタのサイズ

Return

int：追加したHiRDBParameterの0から始まるインデクス

説明：パラメタの名前，データ型，及びサイズを指定して，HiRDBParameterCollectionに項目を追加します。

int Add (string, HiRDBType, int, string)

引数

string parameterName：パラメタの名前

HiRDBType dataType：HiRDBType値の一つ

int size：パラメタのサイズ

string srcColumn：ソース列の名前

Return

int：追加したHiRDBParameterの0から始まるインデクス

説明：パラメタの名前，データ型，サイズ，及びソース列の名前を指定して，HiRDBParameterCollectionに項目を追加します。

(b)　Add2

Hitachi.HiRDB.HiRDBParameter Add2 (Hitachi.HiRDB.HiRDBParameter)

引数

HiRDBParameter value：HiRDBParameterCollectionに追加するHiRDBParameter

Return

HiRDBParameter：追加したHiRDBParameterオブジェクト

説明：HiRDBParameterCollectionに項目を追加します。

Hitachi.HiRDB.HiRDBParameter Add 2(string, object)

引数

string parameterName：パラメタの名前

object parameterValue：パラメタの値

Return

HiRDBParameter：追加したHiRDBParameterオブジェクト

説明：パラメタの名前と値を指定して，HiRDBParameterCollectionに項目を追加します。

Hitachi.HiRDB.HiRDBParameter Add2 (string, HiRDBType)

引数

string parameterName：パラメタの名前

HiRDBType dataType：HiRDBType値の一つ

Return

HiRDBParameter：追加したHiRDBParameterオブジェクト

説明：パラメタの名前とデータ型を指定して，HiRDBParameterCollectionに項目を追加します。

Hitachi.HiRDB.HiRDBParameter Add2 (string, HiRDBType, int)

引数

string parameterName：パラメタの名前

HiRDBType dataType：HiRDBType値の一つ

int size：パラメタのサイズ

Return

HiRDBParameter：追加したHiRDBParameterオブジェクト

説明：パラメタの名前，データ型，及びサイズを指定して，HiRDBParameterCollectionに項目を追加します。

Hitachi.HiRDB.HiRDBParameter Add 2(string, HiRDBType, int, string)

引数

string parameterName：パラメタの名前

HiRDBType dataType：HiRDBType値の一つ

int size：パラメタのサイズ

string srcColumn：ソース列の名前

Return

HiRDBParameter：追加したHiRDBParameterオブジェクト

説明：パラメタの名前，データ型，サイズ，及びソース列の名前を指定して，HiRDBParameterCollectionに項目を追加します。

(c)　AddRange

void AddRange(Array)

引数

values：HiRDBParameterCollectionに追加するHiRDBParameterオブジェクトの配列

Return：void

説明：指定されたHiRDBParameterオブジェクトの配列をHiRDBParameterCollectionに追加します。

例外：HiRDBException

void AddRange(HiRDBParameter[])

引数

value：HiRDBParameterCollectionに追加するHiRDBParameterオブジェクトの配列

Return：void

説明：指定されたHiRDBParameterオブジェクトの配列をHiRDBParameterCollectionに追加します。

例外：HiRDBException

(d)　Clear

void Clear ()

Return：void

説明：HiRDBParameterCollectionからすべての項目を削除します。

(e)　Contains

bool Contains (object)

引数

object value：HiRDBParameterCollection内で検索されるObject

Return

bool：ObjectがHiRDBParameterCollectionにある場合はtrue，それ以外の場合はfalseとなります。

説明：HiRDBParameterがコレクション内にあるかどうかを示す値を取得します。

例外：HiRDBException

bool Contains (HiRDBParameter)

引数

HiRDBParameter value：HiRDBParameterCollection内で検索するHiRDBParameterオブジェクト

Return

bool：ObjectがHiRDBParameterCollectionにある場合はtrue，それ以外の場合はfalseとなります。

説明：HiRDBParameterがコレクション内にあるかどうかを示す値を取得します。

例外：HiRDBException

bool Contains (string)

引数

string parameterName：パラメタの名前

Return

bool：コレクションにパラメタが格納されている場合はtrue，それ以外の場合はfalseとなります。

説明：HiRDBParameter がコレクション内にあるかどうかを示す値を取得します。

例外：HiRDBException

(f)　CopyTo

void CopyTo (System.Array, int)

引数

System.Array array：HiRDBParameterCollectionから要素がコピーされる1次元のArray

int index：valueを挿入する位置の，0から始まるインデクス番号

Return：void

説明：Arrayの特定のインデクスを開始位置として，HiRDBParameterCollectionの要素をArrayにコピーします。

(g)　GetEnumerator

System.Collections.IEnumerator GetEnumerator ()

Return

System.Collections.Ienumerator：コレクションを反復処理するために使用できるIEnumerator

説明：コレクションを反復処理できる列挙子を返します。

(h)　IndexOf：overload

int IndexOf (string)

引数

string parameterName：パラメタの名前

Return

int：コレクション内のHiRDBParameterCollectionの0から始まる位置

説明：コレクション内のHiRDBParameterの位置を取得します。

例外：HiRDBException

int IndexOf (object)

引数

object value：HiRDBParameterCollection内で検索されるObject

Return

int：リストにある場合はvalueのインデクス，それ以外の場合は-1となります。

説明：コレクション内のHiRDBParameterの位置を取得します。

(i)　Insert

void Insert(int, object)

引数

int index：valueを挿入する位置の，0から始まるインデクス番号

object value：HiRDBParameterCollectionに追加するHiRDBParameter

Return：void

説明：HiRDBParameterCollection内の指定した位置に項目を挿入します。

例外：HiRDBException

void Insert (int, Hitachi.HiRDB.HiRDBParameter)

引数

int index：valueを挿入する位置の，0から始まるインデクス番号

HiRDBParameter value：HiRDBParameterCollectionに追加するHiRDBParameter

Return：void

説明：HiRDBParameterCollection内の指定した位置に項目を挿入します。

例外：HiRDBException

(j)　Remove

void Remove (object)

引数

object value：HiRDBParameterCollectionから削除するHiRDBParameter

Return：void

説明：HiRDBParameterCollection内にある特定のオブジェクトのうち，最初に出現するオブジェクトを削除します。

(k)　RemoveAt

void RemoveAt (string)

引数

string parameterName：パラメタの名前

Return：void

説明：HiRDBParameterをコレクションから削除します。

例外：HiRDBException

void RemoveAt (int)

引数

int index：削除する項目の0から始まるインデクス

Return：void

説明：HiRDBParameterをコレクションから削除します。

15.5.9　HiRDBProviderFactory

(1)　コンストラクタ

(a)　HiRDBProviderFactory

HiRDBProviderFactory()

説明：HiRDBProviderFactoryクラスの新しいインスタンスを初期化します。

(2)　フィールド

(a)　Instance

型：HiRDBProviderFactory

説明：HiRDBProviderFactoryのインスタンスを保持します（読み取り専用）。

(3)　プロパティ

(a)　CanCreateDataSourceEnumerator

型：bool

説明：DbDataSourceEnumeratorクラスから派生したクラスをサポートするかどうかを示します（読み取り専用）。サポートする場合はtrue，それ以外はfalseとなります。

(4)　メソッド

(a)　CreateCommand

DbCommand CreateCommand ()

Return：HiRDBCommandオブジェクト

説明：HiRDBCommandオブジェクトを作成して返します。

(b)　CreateCommandBuilder

DbCommandBuilder CreateCommandBuilder ()

Return：HiRDBCommandBuilderオブジェクト

説明：HiRDBCommandBuilderオブジェクトを作成して返します。

(c)　CreateConnection

DbConnection CreateConnection ()

Return：HiRDBConnectionオブジェクト

説明：HiRDBConnectionオブジェクトを作成して返します。

(d)　CreateConnectionStringBuilder

DbConnectionStringBuilder CreateConnectionStringBuilder ()

Return：DbConnectionStringBuilderオブジェクト

説明：DbConnectionStringBuilderオブジェクトを作成して返します。

(e)　CreateDataAdapter

DbDataAdapter CreateDataAdapter ()

Return：HiRDBDataAdapterオブジェクト

説明：HiRDBDataAdapterオブジェクトを作成して返します。

(f)　CreateDataSourceEnumerator

DbDataSourceEnumerator CreateDataSourceEnumerator ()

Return：必ず例外となるため，戻り値はありません。

説明：HiRDBの列挙体を提供しないため未サポートです。無条件でSystem.NotSupportedExceptionを返します。

例外：System.NotSupportedException

(g)　CreateParameter

DbParameter CreateParameter ()

Return：HiRDBParameterオブジェクト

説明：HiRDBParameterオブジェクトを作成して返します。

15.5.10　HiRDBRowUpdatedEventArgs

(1)　コンストラクタ

(a)　HiRDBRowUpdatedEventArgs

void HiRDBRowUpdatedEventArgs ( System.Data.DataRow, System.Data.IdbCommand, System.Data.StatementType, System.Data.Common.DataTableMapping)

引数

System.Data.DataRow dataRow：Updateを通じて送信されたDataRow

System.Data.IDbCommand command：Updateの呼び出し時に実行されたIDbCommand

System.Data.StatementType statementType：実行されたSQLステートメントの種類

System.Data.Common.DataTableMapping tableMapping：Updateを通じて送信されたDataTableMapping

説明：HiRDBRowUpdatedEventArgsクラスの新しいインスタンスを初期化します。

(2)　プロパティ

(a)　Command

型：HiRDBCommand

既定値：null

説明：Updateの呼び出し時に実行されるHiRDBCommandを取得します（読み取り専用）。

15.5.11　HiRDBRowUpdatingEventArgs

(1)　コンストラクタ

(a)　HiRDBRowUpdatingEventArgs

void HiRDBRowUpdatingEventArgs ( System.Data.DataRow, System.Data.IDbCommand, System.Data.StatementType, System.Data.Common.DataTableMapping)

引数

System.Data.DataRow dataRow：Updateを実行するDataRow

System.Data.IDbCommand command：Updateの呼び出し時に実行するIDbCommand

System.Data.StatementType statementType：実行するSQLステートメントの種類

System.Data.Common.DataTableMapping tableMapping：Updateを通じて送信するDataTableMapping

説明：HiRDBRowUpdatingEventArgs クラスの新しいインスタンスを初期化します。

(2)　プロパティ

(a)　Command

型：HiRDBCommand

既定値：null

説明：Update処理中に実行するHiRDBCommandを取得又は設定します。

15.5.12　HiRDBTransaction

(1)　プロパティ

(a)　Connection

型：HiRDBConnection

既定値：null

説明：トランザクションを関連づけるHiRDBConnectionオブジェクトを指定します（読み取り専用）。

(b)　IsCompleted

型：bool

既定値：false

説明：トランザクションが完了しているかを取得します（読み取り専用）。完了している場合はtrue，それ以外の場合はfalseとなります。

(c)　IsolationLevel

型：System.Data.IsolationLevel

既定値：

対応するADO.NETのバージョンが1.1の場合はIsolationLevel.ReadCommitted

対応するADO.NETのバージョンが2.0の場合はIsolationLevel.RepeatableRead

説明：このトランザクションのIsolationLevelを指定します（読み取り専用）。

(2)　メソッド

(a)　Commit

void Commit ()

Return：void

説明：データベーストランザクションをコミットします。

例外：HiRDBException

(b)　Dispose

void Dispose()

Return：void

説明：HiRDBTransactionが使用しているすべてのリソースを解放します。

(c)　Rollback

void Rollback ()

Return：void

説明：保留中の状態からデータベーストランザクションをロールバックします。

例外：HiRDBException

15.6　HiRDBデータプロバイダ for .NET Frameworkの留意事項

15.6.1　グローバルアセンブリキャッシュへの配置

(1)　UAPのビルド，実行での留意事項

UAPビルド時には，実行ファイル格納ディレクトリへのHiRDBデータプロバイダ for .NET FrameworkのDLL群のコピーは行われません。また，UAP実行時には，グローバルアセンブリキャッシュに配置されているDLL群を参照します。そのため，UAPを実行する場合には，HiRDBデータプロバイダ for .NET FrameworkのDLL群をUAPと同じディレクトリに配置する必要はありません。

グローバルアセンブリキャッシュには，HiRDBデータプロバイダ for .NET FrameworkのDLL群に関する発行者ポリシーも配置されます。発行者ポリシーには，UAP実行時に，インストールされているバージョンのHiRDBクライアントのHiRDBデータプロバイダ for .NET FrameworkのDLL群に対して，バージョンのリダイレクトを行うための規則が書かれています。このため，作成済みのUAPを再ビルドしなくても，インストールした新しいバージョンのHiRDBデータプロバイダ for .NET Frameworkを参照して，UAPを実行できるようになります。

UAP実行時に参照するHiRDBデータプロバイダ for .NET Frameworkのバージョンを次に示します。

09-00以前

ビルドしたバージョンのHiRDBデータプロバイダ for .NET Frameworkを参照します。新しいバージョンのHiRDBデータプロバイダ for .NET Frameworkを使用するためには，新しいバージョンのHiRDBクライアントのインストール後に，再ビルドを行う必要があります。

09-01以降

インストールしているHiRDBクライアントの，HiRDBデータプロバイダ for .NET Frameworkを常に参照します。

(2)　発行者ポリシーの適用回避の方法

発行者ポリシーは，Windowsのデフォルト設定では有効となるように設定されています。しかし，ユーザ側で独自の設定を追加することで，HiRDBクライアントで配置した発行者ポリシーでのバージョンのリダイレクトを，意図的に回避することもできます。

適用回避の方法を次に示します。なお，詳細はMicrosoft提供のドキュメントを参照してください。

(a)　アプリケーション構成ファイルでの設定

UAP開発時に，アプリケーション構成ファイル（{実行ファイル名}.config）を作成し，アプリケーションとともに配置することができます。アプリケーション構成ファイルに，発行者ポリシーを無効化する設定（<publisherPolicy apply=no/>要素）を追加することで，アプリケーション単位で発行者ポリシーの適用を回避できます。

(b)　コントロールパネルでの設定

[コントロール パネル]−[管理ツール]から，[Microsoft .NET Framework 1.1 Configuration]又は[Microsoft .NET Framework 2.0 Configuration]を選択し，アプリケーションのプロパティを変更することで，アプリケーション単位で発行者ポリシーの適用を回避できます。

(3)　グローバルアセンブリキャッシュへの対応状況

HiRDBデータプロバイダ for .NET Frameworkと発行者ポリシーのグローバルアセンブリキャッシュへの対応状況を次の表に示します。

表15‒3　グローバルアセンブリキャッシュへの対応状況

機能名称

ファイル名

HiRDBクライアントの稼働プラットフォーム

Windows (x86)

Windows (x64)

.NET Framework 1.1対応（32ビットモード）

データプロバイダ本体

pddndp.dll

○

○

pddndpcore.dll

発行者ポリシー

policy.vv.rr.pddndp.dll※

○

○

policy.vv.rr.pddndpcore.dll※

.NET Framework 2.0対応（32ビットモード）

データプロバイダ本体

pddndp20.dll

○

○

pddndpcore20.dll

発行者ポリシー

policy.vv.rr.pddndp20.dll※

○

○

policy.vv.rr.pddndpcore20.dll※

.NET Framework 2.0対応（64ビットモード）

データプロバイダ本体

pddndp20x.dll

−

○

pddndpcore20x.dll

発行者ポリシー

policy.vv.rr.pddndp20x.dll※

−

○

policy.vv.rr.pddndpcore20x.dll※

.NET Framework 4 対応（32ビットモード）

データプロバイダ本体

pddndp40.dll

○

○

pddndpcore40.dll

発行者ポリシー

policy.vv.rr.pddndp40.dll※

○

○

policy.vv.rr.pddndpcore40.dll※

.NET Framework 4対応（64ビットモード）

データプロバイダ本体

pddndp40x.dll

−

○

pddndpcore40x.dll

発行者ポリシー

policy.vv.rr.pddndp40x.dll※

−

○

policy.vv.rr.pddndpcore40x.dll※

（凡例）

○：サポートしています。

×：サポートしていません。

−：該当しません。

注※

HiRDBデータプロバイダ for .NET Framework用発行者ポリシーは，バージョン09-01以降のリビジョンごとのファイルを累積します。

vvはバージョン番号，rrはリビジョン番号を示します。vv，rrともにゼロサプレスします。

15.6.2　各メソッド，プロパティについての留意事項

HiRDBデータプロバイダ for .NET Frameworkの各メソッド，プロパティについての留意事項を次の表に示します。

表15‒4　各メソッド，プロパティについての留意事項

オブジェクト

メソッド又はプロパティ

詳細項目

HiRDBCommand

CommandTimeoutプロパティ

実行時のタイムアウトは，クライアント環境定義（PDCWAITTIME，PDSWAITTIME，PDSWATCHTIME）の設定に依存するため，設定値は無効になります。

Cancelメソッド

キャンセルする機能がないため，System.NotSupportedExceptionが返ります。

ExecuteReaderメソッド

列情報だけの取得や，主キー情報だけの取得をする機能がないため，CommandBehavior.KeyInfo，CommandBehavior. SchemaOnly，CommandBehavior. SequentialAccessを引数指定した場合，CommandBehavior.Defaultとして処理します。

UpdatedRowSourceプロパティ

行を返すバッチクエリ機能がないため，UpdatedRowSource.Both，UpdatedRowSource.FirstReturnedRecordを指定した場合，HiRDBExceptionが返ります。

HiRDBCommandBuilder

CatalogLocationプロパティ

カタログ機能がないため，このプロパティの値が影響する機能はありません。

CatalogSeparatorプロパティ

カタログ機能がないため，このプロパティの値が影響する機能はありません。

SetAllValuesプロパティ

このプロパティの値は，常にtrueになり，UPDATE文はすべての列情報を含みます。

HiRDBConnection

ConnectionTimeoutプロパティ

常に次の値が返ります。

対応するADO.NETのバージョンが1.1の場合は15

対応するADO.NETのバージョンが2.0の場合は0

Databaseプロパティ

DB名を取得する機能がないため，常に空文字となります。

Stateプロパティ

製品の将来のバージョンで使用するための予約値のため，ConnectionState.Connecting，ConnectionState.Executing，ConnectionState.Fetching，ConnectionState.Brokenとなることはありません。

BeginTransactionメソッド

SQLごとに設定，又はHiRDB環境変数から取得するため，IsolationLevelの指定は無効です。

また，一つのコネクションで複数のトランザクションを実行できません。

ChangeDatabaseメソッド

接続DB変更機能がないため，System.NotSupportedExceptionが返ります。

EnlistTransactionメソッド

分散トランザクション機能がないため，System.NotSupportedExceptionが返ります。

GetSchemaメソッド

スキーマ情報を返しません。常に空のDataTableオブジェクトを返します。

HiRDBDataReader

Depthプロパティ

階層の概念がないため，常に0になります。

VisibleFieldCountプロパティ

検索系SQLで指定された列以外の列を取得することがないため，FieldCountと同じ値になります。

GetBooleanメソッド

対応する型がないため，NotSupportedExceptionが返ります。

GetByteメソッド

対応する型がないため，NotSupportedExceptionが返ります。

GetCharメソッド

対応する型がないため，NotSupportedExceptionが返ります。

GetDataメソッド

対応する型がないため，NotSupportedExceptionが返ります。

GetGuidメソッド

対応する型がないため，NotSupportedExceptionが返ります。

GetProviderSpecificFieldType

独自のデータ型をサポートしていないため，.NET Frameworkの共通言語ランタイムに用意されているデータ型のオブジェクトを返します。

GetProviderSpecificValue

独自のデータ型をサポートしていないため，.NET Frameworkの共通言語ランタイムに用意されているデータ型のオブジェクトを返します。

GetProviderSpecificValues

独自のデータ型をサポートしていないため，.NET Frameworkの共通言語ランタイムに用意されているデータ型のオブジェクトを返します。

NextResultメソッド

複数レコードセット機能がないため，falseが返ります。

HiRDBParameter

DbTypeプロパティ

対応する型がないため，DbType.Boolean，DbType.Currency，DbType.Guid，DbType.VarNumericを指定した場合，HiRDBExceptionが返ります。

Directionプロパティ

ストアドプロシジャの戻り値取得機能がないため，Direction.ReturnValueが指定された状態で，HiRDBCommandクラスのExecuteNonQueryメソッド，ExecuteReaderメソッド，ExecuteScalarメソッド，又はPrepareメソッドのどれかを実行した場合，HiRDBExceptionが返ります。

IsNullableプロパティ

取得だけで設定はできません（常にnull値の指定はできます）。

HiRDBProviderFactory

CreateDataSourceEnumeratorメソッド

HiRDBの列挙体を提供しないため，NotSupportedExceptionが返ります。

HiRDBTransaction

IsolationLevelプロパティ

常に次の値が返ります。

対応するADO.NETのバージョンが1.1の場合はIsolationLevel.ReadCommitted

対応するADO.NETのバージョンが2.0の場合はIsolationLevel.RepeatableRead

15.6.3　UAP開発時のプラットフォームターゲットの設定

Microsoft Visual Studio 2005以降の開発環境を使用する場合，アプリケーションのコンパイル時にプラットフォームターゲットを指定します。この指定値によって，UAP実行時のプロセスのアドレッシングモードが変わります。プラットフォームターゲットの指定値とUAP実行時のプロセスのアドレッシングモードを次の表に示します。

表15‒5　プラットフォームターゲットの指定値とUAP実行時のアドレッシングモード

コンパイル時に指定したプラットフォームターゲット

UAP実行時のプラットフォーム

Windows（x86）

Windows（x64）

Any CPU

32ビットモード

64ビットモード

x86

32ビットモード

x64

64ビットモード

Any CPUを指定した場合，プロセスのアドレッシングモードは，UAP実行時のプラットフォームに依存します。

HiRDBデータプロバイダ for .NET Frameworkでサポートするプラットフォームターゲットの値を次の表に示します。

表15‒6　HiRDBデータプロバイダ for .NET Frameworkでサポートするプラットフォームターゲットの値

HiRDBデータプロバイダ for .NET Framework

UAP実行時のプラットフォーム

Windows（x86）

Windows（x64）

.NET Framework 1.1対応（32ビットモード）

Any CPU，x86

x86

.NET Framework 2.0対応（32ビットモード）

Any CPU，x86

x86

.NET Framework 2.0対応（64ビットモード）

該当しません。

Any CPU，x64

.NET Framework 4対応（32ビットモード）

Any CPU，x86

x86

.NET Framework 4対応（64ビットモード）

該当しません。

Any CPU，x64

15.7　HiRDBデータプロバイダ for .NET Frameworkのデータ型

15.7.1　DbTypeプロパティとHiRDBTypeプロパティ

HiRDBParameterクラスのDbTypeプロパティを設定すると，自動的に同クラスのHiRDBTypeプロパティも設定されます。また，HiRDBTypeプロパティを設定すると，自動的にDbTypeプロパティも設定されます。DbTypeプロパティの設定時に自動設定されるHiRDBTypeプロパティの値を次の表に示します。

表15‒7　DbTypeプロパティ設定時に自動設定されるHiRDBTypeプロパティの値

DbTypeプロパティ

HiRDBTypeプロパティ

AnsiString

VarChar

AnsiStringFixedLength

Char

Binary

Binary

Boolean

［NotSupportedException例外］

Byte

SmallInt

Currency

［NotSupportedException例外］

Date

Date

DateTime

TimeStamp

Decimal

Decimal

Double

Float

Guid

［NotSupportedException例外］

Int16

SmallInt

Int32

Integer

Int64

Decimal

Object

Binary

SByte

SmallInt

Single

SmallFlt

String

MvarChar

StringFixedLength

Mchar

Time

Time

UInt16

Integer

UInt32

Decimal

UInt64

Decimal

VarNumeric

［NotSupportedException例外］

HiRDBTypeプロパティの設定時に自動設定されるDbTypeプロパティの値を次の表に示します。

表15‒8　HiRDBTypeプロパティ設定時に自動設定されるDbTypeプロパティの値

HiRDBTypeプロパティ

DbTypeプロパティ

Binary

Object

Blob

Object

Char

AnsiStringFixedLength

Date

Date

Decimal

Decimal

Float

Double

Integer

Int32

IntervalYearToDay

String

IntervalHourToSecond

String

MChar

StringFixedLength

MVarChar

String

NChar

StringFixedLength

NVarChar

String

SmallFlt

Single

SmallInt

Int16

Time

Time

TimeStamp

DateTime

VarChar

AnsiString

15.7.2　UAPで使用するデータ型とアクセサ

INSERT実行時などでHiRDBParameterクラスのValueプロパティに設定するデータの型，及びSELECT実行時などで使用するHiRDBDataReaderクラスのGetXXXXメソッドを次の表に示します。なお，HiRDBのNULLは，.NET Framework型のDBNull.Valueで表現されます。

表15‒9　HiRDB型に対するUAPの使用型及びアクセサ

分類

HiRDBのデータ型

INSERTなどでUAPが使用する.NET Framework型

SELECTなどでUAPが使用するアクセサ

文字

CHAR[ACTER]

String

GetString()

VARCHAR/CHAR[ACTER]VARYING

String

GetString()

NCHAR/NATIONAL CHAR[ACTER]

String

GetString()

NVARCHAR/NCHAR VARYING

String

GetString()

MCHAR

String

GetString()

MVARCHAR

String

GetString()

数値

[LARGE]DEC[IMAL]/NUMERIC

Decimal

GetDecimal()

SMALLINT

Int16

GetInt16()

INT[EGER]

Int32

GetInt32()

SMALLFLT/REAL

Single

GetFloat()

FLOAT/DOUBLE PRECISION

Double

GetDouble()

日時

DATE

DateTime

GetDateTime()

TIME

DateTime

GetDateTime()

TIMESTAMP

DateTime

GetDateTime()

その他

BINARY

Byte[]

GetBytes()

BLOB

Byte[]

GetBytes()

INTERVAL YEAR TO DAY

String

GetString()

INTERVAL HOUR TO SECOND

TimeSpan

GetString()

15.7.3　HiRDBデータプロバイダ for .NET Frameworkの型変換

表「HiRDB型に対するUAPの使用型及びアクセサ」の.NET Framework型及びアクセサを使用しない場合，HiRDBデータプロバイダ内部で自動的に型変換されます。NET Framework型及びアクセサを使用しない場合とは，CHAR属性の項目を持つ表にInt32型のデータをINSERTしたり，GetInt32メソッドで取得したりすることをいいます。

INSERT時の型変換一覧を次の表に示します。

表「INSERT時の型変換一覧（1/2）」

表「INSERT時の型変換一覧（2/2）」

SELECT時の型変換一覧を次の表に示します。

表「SELECT時の型変換一覧（1/2）」

表「SELECT時の型変換一覧（2/2）」

なお，これらの表の記号の意味については，「記号の意味」を参照してください。

表15‒10　INSERT時の型変換一覧（1/2）

.NET Framework型

HiRDBのデータ型

I

SI

DE

F

SF

C

VC

NC

NVC

Boolean

×1

×1

×1

×1

×1

×1

×1

×1

×1

Int16

○

○

○

○

○

○

○

×1

×1

Int32

○

△1

○

○

○

○

○

×1

×1

Int64

△2

△1

○

○

○

○

○

×1

×1

UInt16

○

△1

○

○

○

○

○

×1

×1

UInt32

△2

△1

○

○

○

○

○

×1

×1

UInt64

△2

△1

○

○

○

○

○

×1

×1

Single小数部ありデータ

△4

△3

○

○

○

○

○

×1

×1

Single小数部なしデータ

△2

△1

○

○

○

○

○

×1

×1

Double小数部ありデータ

△4

△3

○

○

○

○

○

×1

×1

Double小数部なしデータ

△2

△1

○

○

○

○

○

×1

×1

Decimal小数部ありデータ

△4

△3

○

○

○

○

○

×1

×1

Decimal小数部なしデータ

△2

△1

○

○

○

○

○

×1

×1

Char

○1

○1

×1

×1

×1

○

○

○

○

Char[]

×1

×1

×1

×1

×1

×1

×1

×1

×1

String

△2

△1

○

○

○

○

○

○

○

DateTime

×1

×1

×1

×1

×1

○

○

×1

×1

TimeSpan

×1

×1

×1

×1

×1

○

○

×1

×1

Guid

×1

×1

×1

×1

×1

○

○

×1

×1

Byte

○

○

○

○

○

○

○

×1

×1

Byte[]

×1

×1

×1

×1

×1

×1

×1

×1

×1

Sbyte

○

○

○

○

○

○

○

×1

×1

SByte[]

×1

×1

×1

×1

×1

×1

×1

×1

×1

表15‒11　INSERT時の型変換一覧（2/2）

.NET Framework型

HiRDBのデータ型

MC

MVC

DA

T

TS

IY

IHS

BI

BL

Boolean

×1

×1

×1

×1

×1

×1

×1

×1

×1

Int16

○

○

×1

×1

×1

×2

×2

×1

×1

Int32

○

○

×1

×1

×1

×2

×2

×1

×1

Int64

○

○

×1

×1

×1

×2

×2

×1

×1

UInt16

○

○

×1

×1

×1

×2

×2

×1

×1

UInt32

○

○

×1

×1

×1

×2

×2

×1

×1

UInt64

○

○

×1

×1

×1

×2

×2

×1

×1

Single小数部ありデータ

○

○

×1

×1

×1

×2

×2

×1

×1

Single小数部なしデータ

○

○

×1

×1

×1

×2

×2

×1

×1

Double小数部ありデータ

○

○

×1

×1

×1

×2

×2

×1

×1

Double小数部なしデータ

○

○

×1

×1

×1

×2

×2

×1

×1

Decimal小数部ありデータ

○

○

×1

×1

×1

×2

×2

×1

×1

Decimal小数部なしデータ

○

○

×1

×1

×1

×2

×2

×1

×1

Char

○

○

×1

×1

×1

×2

×2

×1

×1

Char[]

×1

×1

×1

×1

×1

×2

×2

×1

×1

String

○

○

○

○

○

○

○

×1

×1

DateTime

○

○

○

○

○

×2

×2

×1

×1

TimeSpan

○

○

×1

×1

×1

×2

○

×1

×1

Guid

○

○

×1

×1

×1

×2

×2

×1

×1

Byte

○

○

×1

×1

×1

×2

×2

○

○

Byte[]

×1

×1

×1

×1

×1

×2

×2

○

○

Sbyte

○

○

×1

×1

×1

×2

×2

○

○

SByte[]

×1

×1

×1

×1

×1

×2

×2

○

○

注1　NCHAR/NVARCHARへのINSERT時の注意事項

S-JIS変換後のサイズが奇数バイトのデータは，［Hitachi.HiRDB.HiRDBException］KFPZ24026-E 形式変換エラーになります。

注2　配列INSERT時の注意事項

Object配列型以外は［Hitachi.HiRDB.HiRDBException］KFPZ24026-E 形式変換エラーになります。また，BLOBへの配列インサートはできないため，同じエラーになります。

表15‒12　SELECT時の型変換一覧（1/2）

アクセサ

HiRDBのデータ型

I

SI

DE

F

SF

C

VC

NC

NVC

GetBoolean

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetByte

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetBytes

○

○

×1

○

○

○

○

○

○

GetChar

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetChars

×1

×1

×1

×1

×1

○

○

○

○

GetData

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetDateTime

×1

×1

×1

×1

×1

△6

△6

△6

△6

GetDecimal

○

○

○

○

○

△7

△7

△7

△7

GetDouble

○

○

○

○

○

△8

△8

△8

△8

GetFloat

○

○

○

○

○

△9

△9

△9

△9

GetGuid

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetInt16

△1

○

△1

△1

△1

△1

△1

△1

△1

GetInt32

○

○

△2

△2

△2

△2

△2

△2

△2

GetInt64

○

○

△10

△10

△10

△10

△10

△10

△10

GetString

○

○

○

○

○

○

○

○

○

GetValue

○

○

○

○

○

○

○

○

○

GetValues

○

○

○

○

○

○

○

○

○

表15‒13　SELECT時の型変換一覧（2/2）

アクセサ

HiRDBのデータ型

MC

MVC

DA

T

TS

IY

IHS

BI

BL

GetBoolean

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetByte

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetBytes

○

○

×1

×1

×1

×1

×1

○

○

GetChar

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetChars

○

○

×1

×1

×1

×1

×1

×1

×1

GetData

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetDateTime

△6

△6

○

○

○

×1

×1

×1

×1

GetDecimal

△7

△7

×1

×1

×1

×1

×1

×1

×1

GetDouble

△8

△8

×1

×1

×1

×1

×1

×1

×1

GetFloat

△9

△9

×1

×1

×1

×1

×1

×1

×1

GetGuid

×3

×3

×3

×3

×3

×3

×3

×3

×3

GetInt16

△1

△1

×1

×1

×1

×1

×1

×1

×1

GetInt32

△2

△2

×1

×1

×1

×1

×1

×1

×1

GetInt64

△10

△10

×1

×1

×1

×1

×1

×1

×1

GetString

○

○

○

○

○

○

○

○

○

GetValue

○

○

○

○

○

○

○

○

○

GetValues

○

○

○

○

○

○

○

○

○

注1　DATE取得時の注意事項

GetDateTimeメソッドで取得した場合，時刻領域は0時0分0秒が入ります。GetStringメソッドで取得した場合，YYYY/MM/DDのフォーマットで入ります。

注2　TIME/TIMESTAMP取得時の注意事項

GetDateTimeメソッドで取得した場合，日付領域は現在年月日が入ります。GetStringメソッドで取得した場合，次のフォーマットで入ります。

TIME：hh:mm:ss

TIMESTAMP(0)：YYYY/MM/DD hh:mm:ss

TIMESTAMP(2)：YYYY/MM/DD hh:mm:ss.nn

TIMESTAMP(4)：YYYY/MM/DD hh:mm:ss.nnnn

TIMESTAMP(6)：YYYY/MM/DD hh:mm:ss.nnnnnn

注3　INTERVALYEARTODAY取得時の注意事項

GetStringメソッドで取得した場合，±YYYY/MM/DDのフォーマットで入ります。

注4　INTERVALHOURTOSECOND取得時の注意事項

GetStringメソッドで取得した場合，±hh:mm:ssのフォーマットで入ります。

(1)　記号の意味

(a)　HiRDBのデータ型

HiRDBのデータ型の，記号の意味を次に示します。

記号

意味

I

INTEGER

SI

SMALLINT

DE

DECIMAL，及びLARGE DECIMAL

F

FLOAT/DOUBLE PRECISION

SF

SMALLFLT，及びREAL

C

CHARACTER

VC

VARCHAR

NC

NCHAR，及びNATIONAL CHARACTER

NVC

NVARCHAR

MC

MCHAR

MVC

MVARCHAR

DA

DATE

T

TIME

TS

TIMESTAMP

IY

INTERVAL YEAR TO DAY

IHS

INTERVAL HOUR TO SECOND

BI

BINARY

BL

BLOB

(b)　型変換可否

○は正常，△は条件付きで動作，×はエラーとなります。さらに，これらに番号が付いている場合があります。○，△，及び×に番号が付いている場合の記号の意味を次に示します。

記号

意味

○

数字の文字コードが入ります。

△1

Int32型，Int64型，Single小数部なしデータ型，Double小数部なしデータ型，Decimal小数部なしデータ型，String小数部なしデータ型の場合

-32768〜32767：正常

UInt16型，UInt32型，UInt64型の場合

0〜32767：正常

範囲外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E 形式変換エラー

△2

Int64型，Single小数部なしデータ型，Double小数部なしデータ型，Decimal小数部なしデータ型，String小数部なしデータ型の場合

-2147483648〜2147483647：正常

UInt32型，UInt64型の場合

0〜2147483647：正常

範囲外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

△3

-32768〜32767：正常（小数点第一位四捨五入）

範囲外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

△4

-2147483648〜2147483647：正常（小数点第一位四捨五入）

範囲外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

△5

0〜255：正常

範囲外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

△6

DateTime形式データの場合：正常

DateTime形式データ以外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

△7

Decimal形式データの場合：正常

Decimal形式データ以外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

△8

Double形式データの場合：正常

Double形式データ以外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

△9

Float形式データの場合：正常

Float形式データ以外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

△10

-9223372036854775808〜9223372036854775807：正常

範囲外：［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

×1

［Hitachi.HiRDB.HiRDBException］KFPZ24026-E形式変換エラー

×2

［Hitachi.HiRDB.HiRDBException］KFPZ24107-E Decimal，日時，時間間隔型オーバフロー

［Hitachi.HiRDB.HiRDBException］KFPZ24106-E 日時，時間間隔型フォーマットエラー

×3

［System.NotSupportedException］ 未サポートエラー

15.8　接続プーリング機能

15.8.1　接続プーリング機能とは

接続プーリング機能とは，再利用できる接続を保持しておくことによって，新しく開く接続の数を削減する機能のことです。

UAPがConnectionオブジェクトのOpenメソッドを呼び出すと，HiRDBデータプロバイダ for .NET Frameworkは接続プールに利用可能な接続があるかどうかを確認します。プールされた接続が利用できる場合は，新しい接続を開かないで，プールされた接続を呼び出し元に返します。プールされた接続が利用できない場合は，新しい接続を開きます。また，UAPがConnectionオブジェクトのCloseメソッドを呼び出しても，HiRDBデータプロバイダ for .NET Frameworkは実際には接続を閉じません。そして，次のOpenメソッド呼び出し時には新しい接続を開かないで，接続プールに保持された接続を再利用します。

なお，接続プールでは接続を一定時間保持しますが，その間に再利用されない場合は，接続を破棄します。

ポイント

ConnectionオブジェクトのOpenメソッドとCloseメソッドを頻繁に使用する場合は，接続をプールするとUAPのパフォーマンスとスケーラビリティを大幅に改善できる可能性があります。

15.8.2　使用方法

接続プーリング機能を使用する場合は，次の設定をしてください。

HiRDBConnection.Poolingプロパティにtrue（デフォルト値）を設定します。

HiRDBConnection.LifeTimeプロパティに，接続プールで接続を保持する時間を設定します。

上記の設定をすると，プールに存在する接続が次の条件をすべて満たす場合，その接続は再利用されます。

現在使用されていない接続である

接続文字列が完全に一致する

15.8.3　HiRDBデータプロバイダ for .NET Frameworkの接続プーリングにおける接続回復機能

HiRDBデータプロバイダ for .NET Frameworkの接続プーリング機能では，プール中にHiRDBサーバとの接続が切断され，未接続状態となったHiRDBConnectionオブジェクトに対してSQL実行要求を行うと，接続障害が発生します。HiRDBデータプロバイダ for .NET Frameworkの接続プーリングでの接続回復機能は，HiRDBConnectionオブジェクトのOpenメソッド呼び出し後，初回のSQL（以降，ファーストSQLと呼ぶ）の実行時に接続障害を検知した場合，HiRDBデータプロバイダ for .NET Frameworkで一度だけ再接続を行い，プール中の接続を回復する機能です。

(1)　使用方法

この機能は，.NET Framework2.0以降に対応したHiRDBデータプロバイダ for .NET Frameworkでだけ有効になります。

この機能を使用する場合は，次の設定をしてください。

HiRDBConnection.ConnectionRecoverプロパティにtrue（デフォルト値）を設定する

ただし，クライアントライブラリが提供する自動再接続機能を使用している場合は，自動再接続機能による再接続を優先するため，この機能は無効になります。この機能が有効になる条件を次の表に示します。

表15‒14　接続回復機能が有効になる条件

自動再接続機能の使用有無

接続プーリング機能の使用有無

SQL種別

SQL実行結果

ConnectionRecoverの値

true

false

有

−

−

−

×

×

無

有

ファーストSQL

接続障害※

○

×

上記以外

×

×

上記以外

−

×

×

無

−

−

×

×

（凡例）

○：接続回復機能が有効になります。

×：接続回復機能が無効になります。

−：該当しません。

注※

SQLCODEが-722，-723，-728，-732のどれかの場合を示します。

(2)　接続回復契機

この機能の接続回復契機を次の図に示します。この機能による接続処理で障害が発生した場合は，UAPへエラーを返却します。

図15‒1　接続回復機能の接続回復契機

15.9　DbProviderFactoryを使用したプロバイダに依存しないコード

ADO.NET2.0では，DbProviderFactoryインスタンスによって，CommandやParameterなどのほかのクラスのインスタンスを生成できるようになりました。プロバイダの名前空間を示す文字列（以降，プロバイダ名と呼びます）を指定してDbProviderFactoryインスタンスを生成すると，あらかじめ提供されている情報に基づいて各プロバイダに特化したインスタンスを生成できます。なお，指定するプロバイダ名は構成ファイルに登録し，取得できます。これによって，プロバイダに依存しないコードを作成し，実行時にプロバイダを選択できます。

15.9.1　DbProviderFactoryを使用したプロバイダに依存しないコードの作成方法

(1)　プロバイダ情報の追加

DbProviderFactoryインスタンスをDbProviderFactoriesクラスのGetFactoryメソッドを呼び出して生成します。.NET Framework Version2.0/3.0のインストール時に，このメソッドに指定できるプロバイダ名は次の4種類です。

System.Data.Odbc

System.Data.OleDb

System.Data.OracleClient

System.Data.SqlClient

.NET Framework Version2.0/3.0のインストール時に組み込まれるmachine.configファイルについて，system.dataセクションのDbProviderFactories要素にプロバイダ情報を追加するとGetFactoryメソッドに指定できるようになります。

また，HiRDBデータプロバイダ for .NET Frameworkの場合，指定するinvariant値は"Hitachi.HiRDB"です。

HiRDBデータプロバイダ for .NET Frameworkの情報を追加する場合の例を次に示します。

プロバイダ情報の追加

<system.data>
  <DbProviderFactories>
          ・
          ・
          ・
    <add name="HiRDB Data Provider" invariant="Hitachi.HiRDB"
      description=".NET Framework Data Provider for HiRDB"
      type="Hitachi.HiRDB.HiRDBProviderFactory, pddndp20,
      Version=X.X.X.X, Culture=neutral,
      PublicKeyToken=YYYYYYYYYYYYYYYY" />
  </DbProviderFactories>
</system.data>

（凡例）

X.X.X.X：アセンブリのバージョン。アセンブリのバージョンは，pddndp20.dllのプロパティで確認できます。

YYYYYYYYYYYYYYYY：アセンブリ公開キートークン。アセンブリ公開キートークンは，コマンドプロンプト又はMS-DOSプロンプトから次のコマンドを入力することで確認できます。

　sn -T pddndp20.dll

(2)　構成ファイルを使用したプロバイダ名の指定

プロバイダ名を構成ファイルに登録し，DbProviderFactoryインスタンス生成時に取得します。構成ファイルについては，.NET Frameworkのマニュアルを参照してください。

HiRDBデータプロバイダ for .NET Frameworkの場合，指定するプロバイダ名（value）は"Hitachi.HiRDB"です。なお，プロバイダ名をDbProviderFactoriesクラスのGetFactoryメソッドの引数に直接指定する場合，構成ファイルは不要です。

構成ファイルの例を次に示します。なお，キー名（provider）は任意の文字列です。

構成ファイルの例

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="provider" value="Hitachi.HiRDB" />  ...HiRDBデータプロバイダ for .NET Framework
  </appSettings>
</configuration>

(3)　DbProviderFactoryインスタンスの生成

(a)　構成ファイルを使用しない場合

プロバイダ名（"Hitachi.HiRDB"）をDbProviderFactoriesクラスのGetFactoryメソッドの引数に直接指定して，DbProviderFactoryインスタンスを生成します。コーディング例を次に示します。

DbProviderFactory dataFactory =
           DbProviderFactories.GetFactory(“Hitachi.HiRDB”);

(b)　構成ファイルを使用する場合

構成ファイルからキー名（provider）の値を取得し，その値をDbProviderFactoriesクラスのGetFactoryメソッドの引数に指定して，DbProviderFactoryインスタンスを生成します。コーディング例を次に示します。

DbProviderFactory dataFactory =
           DbProviderFactories.GetFactory(ConfigurationManager.AppSettings["provider"]);

(4)　コーディング例

プロバイダに依存するプロバイダ名や接続文字列を構成ファイルから取得することによって，プログラムを変更することなく異なるプロバイダを使用できます。

構成ファイルを使用する場合のコーディング例を次に示します。

15.10　HiRDBデータプロバイダ for .NET Frameworkのトラブルシュート機能

.NET Framework 2.0以降に対応したHiRDBデータプロバイダ for .NET Frameworkでは，トラブルシュート情報としてメソッドトレースを取得できます。

15.10.1　メソッドトレースの取得方法

メソッドトレース情報は，クライアント環境定義のPDCLTPATH及びPDDNDPTRACEに値を設定することで取得できます。各クライアント環境定義については，「クライアント環境定義（環境変数の設定）」を参照してください。

15.10.2　メソッドトレースの出力規則

メソッドトレースの出力規則を次に示します。

情報を取得するメソッドトレースファイルは，指定したディレクトリに二つ作成されます。

次の時に出力されます。

メソッドの呼び出し時

メソッドの戻り時

プロパティの設定時

プロパティの取得時

文字コードはUTF-8です。

作成されるファイル名称は，pddndpxxxxx_yyyy_1.trc，及びpddndpxxxxx_yyyy_2.trcです。xxxxxにはプロセスID，yyyyにはコネクト通番が入ります。

15.10.3　メソッドトレース情報の見方

出力されるメソッドトレースの例とその説明を次に示します。

ヘッダ

[1][1742][sds01][12345678][HiRDB_Data_Provider20][08.04.0.0]
 1  2     3      4         5                      6

[説明]

ヘッダはファイルの先頭に出力されます。

コネクト通番です。

接続先サーバのプロセスIDです。

シングルサーバ名，又はフロントエンドサーバ名です。

UAPのプロセスIDです。

トレース識別情報です。使用するHiRDBデータプロバイダ for .NET Frameworkによって，出力内容が異なります。出力内容の違いを次に示します。

HiRDBデータプロバイダ for .NET Framework種別

アドレッシングモード

トレースの識別情報

HiRDBデータプロバイダ for .NET Framework

（.NET Framework 2.0）

32

HiRDB_Data_Provider20

64

HiRDB_Data_Provider20x

HiRDBデータプロバイダ for .NET Framework

（.NET Framework 4）

32

HiRDB_Data_Provider40

64

HiRDB_Data_Provider40x

HiRDBデータプロバイダ for .NET Frameworkのアセンブリのバージョンです。

メソッドトレース情報

[0000000001][E][HiRDBCommand@12345678 ExecuteNonQuery][SID(2)][2008/08/27 1:29:10.123]
 1           2  3            4        5                6       7

  [Return=0]
   8
  [nArraySize=10]                           ┐
                                            │
        :                                   ├9
                                            │
  [CommandText=INSERT INTO T1 VALUES(100)]  ┘

  [MessageText=KFPA11117-E Number of insert values not equal to number of insert columns] 10
  [SQLCODE=-117] 11
  [SQLWARN=0000] 12
  場所 Hitachi.HiRDB.native.HiRDBcore.ClearSectionItems()       ┐
  場所 Hitachi.HiRDB.HiRDBConnection.Close()                    │
  場所 Hitachi.HiRDB.HiRDBConnection.Dispose(Boolean disposing) ├13
  場所 Hitachi.HiRDB.HiRDBConnection.Finalize()                 ┘

[説明]

メソッドトレース情報は，メソッドの呼び出し時及び戻り時，プロパティの設定時及び取得時ごとに出力されます。

スレッドIDです。

アクセス種別です。

E：メソッドの呼び出し

R：メソッドからの戻り

S：プロパティへの値設定

G：プロパティの値取得

アクセス種別によって，出力内容が異なります。アクセス種別による出力内容の違いを次に示します。

アクセス種別

呼び出し種別

引数値又は

プロパティ値

戻り値

エラー情報

メソッド

E

呼び出し

○

×

×

R

戻り（正常時）

×

○

×

戻り（エラー時）

×

×

○

プロパティ

S

設定（正常時）

○

×

×

設定（エラー時）

○

×

○

G

取得（正常時）

×

○

×

取得（エラー時）

×

×

○

（凡例）

　○：出力されます。

　×：出力されません。

クラス名です。プロバイダ名を省略して出力します。

ハッシュコードです。クラス名と＠で結合して出力します。

メソッド名，又はプロパティ名です。

セクション番号です。SQLの実行に関係しないメソッド，プロパティの場合は特定できないため，*を出力します。

トレースの取得日時です。

戻り値です。例外発生時はExceptionクラス名を出力します。

引数名と引数値，又はプロパティ名とプロパティ値です。＝で連結して出力します。

エラーメッセージです。

SQLCODEです。SQL文を実行した結果，発生したSQLCODEを表示します。

SQLWARNです。警告情報を16進数表記で表示します。詳細については，「SQLトレース情報の見方」を参照してください。

スタックトレースです。

一部のメソッドではプロパティ情報が出力されます。アクセス種別ごとの出力形式を次に示します。

アクセス種別

呼び出し元

形式

備考

メソッド

E

HiRDBCommand.Execute

HiRDBCommand.ExecuteDbDataReader

HiRDBCommand.ExecuteNonQuery

HiRDBCommand.ExecuteReader

HiRDBCommand.ExecuteScalar

CommandText=VALUE※1

Parameters.Count=VALUE

PARAMETER_VALUE※2

引数が存在する場合は，引数情報を出力します。

その他

ARGUMENT※3=VALUE

−

R

HiRDBConnection.Open

ConnectionString=VALUE

ServerVersion=VALUE

−

その他

Return=VALUE

−

プロパティ

S

−

PROPERTY※4=VALUE

−

G

−

Return=VALUE

−

（凡例）

−：該当しません。

注※1

VALUEはプロパティ値，引数値，戻り値として設定，又は取得した値です。

注※2

PARAMETER_VALUEはHiRDBParameterCollectionに登録されている各パラメタの情報です。情報の内容を次に示します。

ParameterName，HiRDBType，Value，Precision，Scale，Repetition

注※3

ARGUMENTは引数名です。

注※4

PROPERTYはプロパティ名です。

15.10.4　メソッドトレースファイルのバックアップの取得

メソッドトレース情報を出力してメソッドトレースファイルの容量が指定したサイズを超えると，次のエントリからはもう一方のメソッドトレースファイルに出力されます。このとき，切り替え先のメソッドトレースファイルに格納されている古いメソッドトレース情報から順に消去され，新しいメソッドトレース情報に書き換えられます。このため，必要な情報はUAP終了時にメソッドトレースファイルの内容をコピーしてバックアップを取得しておいてください。

なお，現在使用しているメソッドトレースファイルを知りたい場合は，ファイルの最終更新日時を調べてください。最終更新日時の新しい方が現在使用しているメソッドトレースファイルになります。dirコマンド又はエクスプローラで，ファイルの最終更新日時を調べてください。

15.11　HiRDBデータプロバイダ for .NET Frameworkを使用したUAP例

HiRDBデータプロバイダ for .NET Frameworkを使用したUAP例について説明します。

15.11.1　データベースへの接続

HiRDBに接続し，そのまま切断する例を次に示します。

Visual C# .NETで記述した例

using System;
using Hitachi.HiRDB;

namespace test_C
{
    class Sample
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                // Connectionオブジェクトを作成する
                HiRDBConnection cn = new HiRDBConnection("dsn=pc;");  ...1

                // DBに接続する
                cn.Open();  .............................................2

                // DBから切断する
                cn.Close();  ............................................3
                cn.Dispose();
            }
            catch ( HiRDBException ex)
            {
                Console.WriteLine(ex);
            }
            catch ( System.Exception ex)
            {
                Console.WriteLine(ex);
            }  ..........................................................4
        }
    }
}

Visual Basic.NETで記述した例

Imports System
Imports System.Data
Imports Hitachi.HiRDB

Module Module1

    Sub Main()

        Dim cn As HiRDBConnection
        Dim cm As HiRDBCommand
        Try
            ' Connectionオブジェクトを作成する
            cn = New HiRDBConnection("dsn=pc;")  ........................1

            ' DBに接続する
            cn.Open()  ..................................................2

            ' DBから切断する
            cn.Close()  .................................................3
            cn.Dispoxe()
        Catch ex As HiRDBException
            Console.WriteLine(ex)

        Catch ex As System.Exception

            Console.WriteLine(ex)

        End Try  ........................................................4

    End Sub

End Module

[説明]

最初にHiRDBConnectionのオブジェクトを作成します。このオブジェクトがHiRDBとの通信をすべて管理することになります。

このメソッドには一つのstring型引数を指定する必要があります。指定する文字列は接続文字列と呼ばれるもので，これはADOやADO.NETのConnectionで使用する接続文字列と同種のものです。指定できる文字列については，「ConnectionString」を参照してください。

DBへ接続するにはOpenメソッドを使用します。

切断する場合にはCloseメソッドを使用します。接続していない状態でCloseメソッドを使用しても例外は発生しません。

サーバが起動していなかったり，通信ができなかったり，SQL文が不正だったりした場合など，例外が発生します。基本的には，HiRDBデータプロバイダ for .NET Frameworkを使用するブロックは，try〜catchで例外を検出して例外メッセージを表示させるようにします。

HiRDB全般のエラーではSystem.Exceptionが，HiRDBデータプロバイダ for .NET Framework固有のエラーではHiRDBExceptionが発生します。なお，System.ExceptionはExceptionと省略しないでください。

HiRDBデータプロバイダ for .NET Frameworkが生成する例外オブジェクトのプロパティ「ErrorCode」には，HiRDB Client Library又はHiRDBデータプロバイダ for .NET Framework固有のエラーコードが格納されます。

エラーコードが3けた(-XXX)又は4けた(-XXXX)の場合はKFPA1XXXXを示し，5けた(-24XXX)の場合はKFPZ24XXXを示します。

15.11.2　SQL文の実行

表exを作成する例を次に示します。

Visual C# .NETで記述した例

using System;
using Hitachi.HiRDB;

namespace test_C
{
    class Sample
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                // Connectionオブジェクトを作成する
                HiRDBConnection cn = new HiRDBConnection("dsn=pc;");

                // DBに接続する
                cn.Open();

                // Commandオブジェクトを作成する
                HiRDBCommand cm = new HiRDBCommand();
                // 表を作成する
                cm.Connection = cn;
                cm.CommandText = "create table ex (a int)";
                cm.ExecuteNonQuery();  ..................................1

                // DBから切断する
                cn.Close();
                cn.Dispose();
            }
            catch ( HiRDBException ex)
            {
                Console.WriteLine(ex);
            }
            catch ( System.Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}

Visual Basic.NETで記述した例

Imports System
Imports System.Data
Imports Hitachi.HiRDB

Module Module1

    Sub Main()

        Dim cn As HiRDBConnection
        Dim cm As HiRDBCommand
        Try
            ' Connectionオブジェクトを作成する
            cn = New HiRDBConnection("dsn=pc;")

            ' DBに接続する
            cn.Open()

            ' Commandオブジェクトに作成する
            cm = New HiRDBCommand()
            ' 表を作成する
            cm.Connection = cn
            cm.CommandText = "create table ex (a int)"
            cm.ExecuteNonQuery()  .......................................1

            ' DBから切断する
            cn.Close()
            cn.Dispose()
        Catch ex As HiRDBException
            Console.WriteLine(ex)

        Catch ex As System.Exception

            Console.WriteLine(ex)

        End Try

    End Sub

End Module

[説明]

SQL文を実行する場合，Executeメソッドを使用します。HiRDBCommandのCommandTextプロパティに，string型のSQL文をそのまま記述します。このメソッドでほとんどのSQL文が実行できます。ただし，「commit」などの特殊なSQL文はこのメソッドでは実行できません。また，結果セットを受け取る必要のある「select」も実行できません。これらのSQL文を実行する場合は，専用のメソッドを使用します。

15.11.3　トランザクションの実行

表exにデータ「1」を挿入する例を次に示します。

Visual C# .NETで記述した例

using System;
using System.Data;
using Hitachi.HiRDB;

namespace test_C
{
    class Sample
    {
        [STAThread]
        static void Main(string[] args)
        {
            // Connectionオブジェクトを作成する
            HiRDBConnection cn = new HiRDBConnection("dsn=pc;");

            // DBに接続する
            cn.Open();

            // Transactionオブジェクトを作成する
            HiRDBTransaction tran;
            // トランザクション開始
            tran = cn.BeginTransaction(IsolationLevel.ReadCommitted);  ..1
            // Commandオブジェクトを作成する
            HiRDBCommand cm = new HiRDBCommand();
            cm.Connection = cn;
            cm.Transaction = tran;
            try
            {
                // 表にデータを挿入する
                cm.CommandText = "insert into ex values (1)";
                cm.ExecuteNonQuery();

                // トランザクション成功
                tran.Commit();  .........................................2

                // DBから切断する
                cn.Close();
                cn.Dispose();
            }
            catch ( HiRDBException ex)
            {
                // トランザクション失敗
                if(tran.IsCompleted != true){
                    tran.Rollback();  ...................................3

                Console.WriteLine(ex);
            }
            catch ( System.Exception ex)
            {
                // トランザクション失敗
                if(tran.IsCompleted != true){
                    tran.Rollback();  ...................................3

                Console.WriteLine(ex);
            }
        }
    }
}

Visual Basic.NETで記述した例

Imports System
Imports System.Data
Imports Hitachi.HiRDB

Module Module1

    Sub Main()

        Dim cn As HiRDBConnection
        Dim tran As HiRDBTransaction
        Dim cm As HiRDBCommand
        ' Connectionオブジェクトを作成する
        cn = New HiRDBConnection("dsn=pc;")

        ' DBに接続する
        cn.Open()

        ' トランザクション開始
        tran = cn.BeginTransaction(IsolationLevel.ReadCommitted)  .......1
        ' Commandオブジェクトを作成する
        cm = New HiRDBCommand()
        cm.Connection = cn
        cm.Transaction = tran

        Try
            ' 表にデータを挿入する
            cm.CommandText = "insert into ex values (1)"
            cm.ExecuteNonQuery()

            ' トランザクション成功
            tran.Commit()  ..............................................2

            ' DBから切断する
            cn.Close()
            cn.Dispose()

        Catch ex As HiRDBException
            ' トランザクション失敗
            If tran.IsCompleted <> True Then
                tran.Rollback()  ........................................3
            End If
            Console.WriteLine(ex)

        Catch ex As System.Exception

            ' トランザクション失敗
            If tran.IsCompleted <> True Then
                tran.Rollback()  ........................................3
            End If
            Console.WriteLine(ex)

        End Try

    End Sub

End Module

[説明]

トランザクションを開始する場合，BeginTransactionメソッドを使用します。

トランザクションを完了する場合，Commitメソッドを呼びます。

元に戻す場合は，Rollbackメソッドを呼びます。

15.11.4　検索文の実行

表のデータをすべて表示する例を次に示します。

プログラム例はVisual C# .NETで記述していますが，Visual Basic.NETでもほぼ同じ内容です。必要に応じて，読み替えてください。

using System;
using System.Data;
using Hitachi.HiRDB;

namespace test_C
{
    class Sample
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                // Connectionオブジェクトを作成する
                HiRDBConnection cn = new HiRDBConnection("dsn=pc;");

                // DBに接続する
                cn.Open();

                // Commandオブジェクトを作成する
                HiRDBCommand cm = new HiRDBCommand();
                cm.Connection = cn;
                cm.CommandText = "select a from ex";
                // DataReaderオブジェクトを作成する
                HiRDBDataReader rd = cm.ExecuteReader();  ...............1
                int i;
                while(rd.Read())
                {
                    for (i = 0 ; i < rd.FieldCount ; i++)
                    {
                     Console.WriteLine(rd.GetName(i) + " - " +rd.GetValue(i));
                    }
                }  ......................................................2
                // DBから切断する
                cn.Close();
                cn.Dispose();
            }
            catch ( HiRDBException ex)
            {
                Console.WriteLine(ex);
            }
            catch ( System.Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}

[説明]

検索を実行する場合，ExecuteReaderメソッドを使用し，HiRDBDataReaderを構築します。

Readメソッドを使用し，次の行に進めます。列の名前を取得する場合は GetNameメソッドを使用し，列の値を取得する場合はGetValueメソッドを使用します。

15.11.5　配列を使用したINSERT機能の実行

表exに「123」，「200」，及び「null」を挿入する例を次に示します。

プログラム例はVisual C# .NETで記述していますが，Visual Basic.NETでもほぼ同じ内容です。必要に応じて，読み替えてください。

    // 接続オブジェクトなどを作成する
    HiRDBConnection    pConn = new HiRDBConnection("接続文字列");
    HiRDBCommand    pCom = pConn.CreateCommand();

    // DBに接続する
    pConn.Open();

    // パラメタオブジェクトを作成する
    HiRDBParameter    pPar = pCom.CreateParameter();

    // パラメタの設定をする
    pPar.Direction = ParameterDirection.Input;
    pPar.HiRDBType = HiRDBType.Integer;
    object [] aValue = new object[3];
    aValue[0] = 123;
    aValue[1] = 200;
    aValue[2] = null;
    pPar.Value = aValue;
    pCom.Parameters.Add(pPar);  .........................................1
    // パラメタを使用してSQL文を実行する
    pCom.CommandText = "insert into ex values(?)";
    pCom.ExecuteNonQuery(aValue.Length);  ...............................2

    // DBから切断する
    pConn.Close();
    pConn.Dispose();

[説明]

パラメタのvalueには，パラメタの値を設定します。valueはobject型のため，すべての型を参照できます。通常のINSERT文ではInt32型を指定しますが，配列を使用したINSERT文の場合はobjectの配列をvalueに設定します。そして，object配列の各要素がInt32型を指すように設定します。ほかの型を使う場合も同様で，valueには必ずobjectの配列を設定します。

SQLの実行にはExecuteNonQueryの：overloadを使用します。通常のExecuteNonQueryには引数はありませんが，配列を使用したINSERT文を使用する場合は，配列の大きさを指定します。

注

配列を使用した場合と使用しない場合とでは，パラメタのvalueを設定する部分と，SQLを実行する部分が異なります。

15.11.6　繰返し列の実行

表exの2列目に「123」，「456」，及び「NULL」を挿入する例を次に示します。

プログラム例はVisual C# .NETで記述していますが，Visual Basic.NETでもほぼ同じ内容です。必要に応じて，読み替えてください。

    // 接続オブジェクトなどを作成する
    HiRDBConnection    pConn = new HiRDBConnection("接続文字列");
    HiRDBCommand    pCom = pConn.CreateCommand();

    // DBに接続する
    pConn.Open();

    // 表を作成する
    pCom.CommandText = "create table ex(a int,b char(10) array[3])";
    pCom.ExecuteNonQuery();

    // パラメタオブジェクトを作成する
    HiRDBParameter    pPar1 = pCom.CreateParameter();
    HiRDBParameter    pPar2 = pCom.CreateParameter();

    // パラメタの設定をする
    pPar1.Direction = ParameterDirection.Input;
    pPar1.HiRDBType = HiRDBType.Integer;
    pPar1.Value = 1;

    pPar2.Direction = ParameterDirection.Input;
    pPar2.HiRDBType = HiRDBType.Char;
    pPar2.Size = 10;
    object [] aValue = new object[3];
    aValue[0] = "abc";
    aValue[1] = "def";
    aValue[2] = null;
    pPar2.Value = aValue;

    // 表exの列aの最大要素数を設定する
    pPar2.Repetition =3;

    pCom.Parameters.Add(pPar1);
    pCom.Parameters.Add(pPar2);

    // パラメタを使用してSQL文を実行する
    pCom.CommandText = "insert into ex values(?,?)";
    pCom.ExecuteNonQuery();

    // select文を実行する
    pCom.CommandText = "select * from ex";
    HiRDBDataReader pReader = pCom.ExecuteReader();

    // フェッチする
    pReader.Read();

    // 1列目のデータを取得する
    if(!pReader.IsDBNull(0))
    {
        Console.WriteLine("1列目の値は" + pReader.GetInt32(0));
    }
    else
    {
        Console.WriteLine("1列目の値はNULL");
    }

    // 2列目（繰返し列）のデータを取得する
    if(!pReader.IsDBNull(1))
    {
        for (int i = 0; i < pReader.GetFieldArrayCount(1); i++)
        {
            if (!pReader.IsDBNull(1, i))
            {
                Console.WriteLine("2列目の" + (i+1) + "番目の要素は"+ pReader.GetValue(1, i));
            }
            else
            {
                Console.WriteLine("2列目の" + (i+1) + "番目の要素は NULL");
            }
        }
    }
    else
    {
        Console.WriteLine("2列目の値はNULL");
    }

    // カーソルクローズ
    pReader.Close();
    // DBから切断する
    pConn.Close();
    pConn.Dispose();

[説明]

valueにobject配列を設定するのは，配列を使用したINSERT文と同じです。繰返し列の場合，更に拡張プロパティRepetitionを設定します。これには繰返し列の数を指定します。そのため，SQL実行時の引数は必要ありません。

FETCHの場合，DataReaderにも繰返し列のための拡張メソッドが用意されています。まず，FETCHしたデータの繰返し列の個数をGetFieldArrayCountで取得します。さらに，FETCHしたデータの値をGetValueの：overloadで取得します。第2引数には繰返し列の列番号を指定します。また，このメソッドと等価なインデクサ[int,int]も用意しています。

注

繰返し列の使用方法は，配列を使用したINSERT機能に似ています。異なるのは，パラメタに繰り返し回数を指定する部分と，SQL文を実行する部分です。

15.11.7　SQL文のエラー判定とエラー情報の取得

SQL文のエラー判定をして，エラーがある場合はエラー情報を取得する例を次に示します。

プログラム例はVisual C# .NETで記述していますが，Visual Basic.NETでもほぼ同じ内容です。必要に応じて，読み替えてください。

using System;
using System.IO;
using System.Data;
using System.Windows.Forms;
using Hitachi.HiRDB;

namespace SAMPLE
{
    public class SAMPLE
    {
        static void Main()
        {

            HiRDBConnection connection1 = new HiRDBConnection
            ("datasource=C:¥¥Windows¥¥HiRDB.ini;UID=USER1;PWD=USER1;");
            HiRDBCommand cm = new HiRDBCommand();

                try
                {
                    // 接続実行  ........................................1
                    connection1.Open();
                    cm.Connection = connection1;

                    // *********************************************
                    // SAMPLE1(C1 INT,C2 INT,C3 VARCHAR(30))の検索例  ...2
                    // *********************************************
                    // パラメタオブジェクトを作成する
                    HiRDBParameter    par = cm.CreateParameter();
                    // パラメタ属性設定
                    // 入力パラメタ
                    par.Direction = ParameterDirection.Input;
                    // INTEGER型
                    par.HiRDBType = HiRDBType.Integer;
                    int aValue;
                    aValue = 200;
                    // パラメタ値設定
                    par.Value = aValue;

                    // SQL設定
                    cm.CommandText = "SELECT C2,C3 FROM SAMPLE1 WHERE C1=?
                                      WITH EXCLUSIVE LOCK NO WAIT";
                    // パラメタオブジェクトの割り当て
                    cm.Parameters.Add(par);
                    // DataReaderオブジェクト取得
                    HiRDBDataReader dr = cm.ExecuteReader();
                    int cnt=1;
                    Console.WriteLine("**** 検索実行 ****");
                    while(dr.Read())
                    {
                        Console.WriteLine("**** "+cnt+"行目検索 ***");
                        // C2のデータ表示
                        Console.WriteLine("C2="+dr.GetInt32(0));
                        // C3のデータ表示
                        Console.WriteLine("C3="+dr.GetString(1));
                        cnt ++;
                    }
                    // DataReaderの解放
                    dr.Close();
                    // 切断  ............................................3
                    connection1.Close();
                    connection1.Dispose();

                }
                catch (HiRDBException ex)  ..............................4
                {
                    // エラー情報出力
                    Console.WriteLine(ex);
                    // 個別情報は以下の処理で取得
                    // SQLCODEの出力
                    Console.WriteLine("SQLCODE="+ex.ErrorCode);
                    // SQLERRM(SQLメッセージ)の出力
                    Console.WriteLine("SQLERRM=" + ex.Message);
                }
        }
    }
}

[説明]

Openメソッドを使用してHiRDBへ接続します。

指定した条件と一致する行を表示させるSQL文を実行します。

Closeメソッドを使用してHiRDBから切断します。

エラーになった場合はSQLExceptionを返し，エラー情報を出力します。

15.12　パラメタのデータ長及びデータタイプの仮定

.NET Framework 2.0以降に対応したHiRDBデータプロバイダ for .NET Frameworkでは，HiRDBParameterオブジェクトのValueプロパティを指定した場合，指定値からデータ長及びデータタイプを仮定するため，データ長及びデータタイプのプロパティの設定を省略できます。

15.12.1　省略できるプロパティ

HiRDBParameterオブジェクトのValueプロパティ指定時に省略できるHiRDBParameterクラスのプロパティは，パラメタ種別によって異なります。Valueプロパティ指定時に省略できるプロパティ及びパラメタ種別の関係を次に示します。

表15‒15　Valueプロパティ指定時に省略できるプロパティ及びパラメタ種別

プロパティ名

説明

パラメタ種別

入力パラメタ

出力パラメタ

入出力パラメタ

DbType

.NET Frameworkでのデータタイプ

●

×

●※2

Direction

パラメタの方向種別

○

×

×

HiRDBType

HiRDBでのデータタイプ

●

×

●※2

IsNullable

null値の受け入れ可否

○

○

○

ParameterName

HiRDBParameterの名前

○

○

○

Precision

DECIMAL型の有効けた数

●

×

●※2

Repetition

HiRDBでの配列構造数

○

○

○

Scale

DECIMAL型の少数部けた数

●

×

●※2

Size

パラメタの定義長

●

×※1

●※2

SourceColumn

DataSet連携時に使用されるソース列の名前

○

○

○

SourceColumnNullMapping

パラメタに対応するDataTableの列のnull値の受け入れ可否

○

○

○

SourceVersion

Valueプロパティ値の読み込みに使用するDataRowVersion

○

○

○

（凡例）

○：省略できます。指定を省略した場合，既定値で動作します。既定値については，「HiRDBParameter」 を参照してください。

●：省略できます。指定を省略した場合，HiRDBデータプロバイダ for .NET FrameworkがValueプロパティの指定値から値を仮定します。ただし，明示的に値を指定した場合は，HiRDBデータプロバイダ for .NET Frameworkは以降の処理でプロパティの値を仮定しません。

×：省略できません。

注※1

HiRDBでのデータタイプが次の場合は，指定する必要はありません。

DECIMAL

SMALLINT

INTEGER

FLOAT

DATE

TIME

INTERVAL YEAR TO DAY

INTERVAL HOUR TO SECOND

注※2

入力パラメタとして扱う場合に仮定した値を，出力パラメタとして扱う場合にも適用します。

15.12.2　HiRDBデータプロバイダ for .NET Frameworkが仮定するデータタイプ

HiRDBParameterオブジェクトのValueプロパティの指定値から，HiRDBデータプロバイダ for .NET Frameworkが仮定するHiRDBType，及びHiRDBTypeに対応するDbTypeを次に示します。

表15‒16　Valueプロパティ指定値から仮定するHiRDBType及びDbType

Valueプロパティ指定値のデータ型

HiRDBデータプロバイダ for .NET Frameworkが仮定するHiRDBType

HiRDBTypeに対応するDbType

Boolean

−

−

Int16

SmallInt

Int16

Int32

Integer

Int32

Int64

Decimal

Int64

UInt16

−

−

UInt32

−

−

UInt64

−

−

Single

SmallFlt

Single

Double

Float

Double

Decimal

Decimal

Decimal

Char

MChar

StringFiexedLength

Char[]

−

−

String

MVarChar

String

DateTime

TimeStamp

DateTime

TimeSpan

IntervalHourToSecond

String

Guid

−

−

Byte

SmallInt

Byte

Byte[]

Binary

Object

Sbyte

SmallInt

SByte

SByte[]

Binary

Object

（凡例）

−：該当するデータ型からの仮定はサポートしていません。

「−」に該当するデータ型がValueプロパティに指定された場合，HiRDBTypeプロパティは既定値であるMVarCharを適用します。

15.12.3　HiRDBデータプロバイダ for .NET Frameworkが仮定するデータ長

HiRDBParameterオブジェクトのValueプロパティの指定値から，HiRDBデータプロバイダ for .NET Frameworkが仮定するデータ長を次に示します。

Valueプロパティ指定値のデータ型

HiRDBデータプロバイダ for .NET Frameworkが仮定するデータ長

Sizeプロパティ

Presitionプロパティ

Scaleプロパティ

Boolean

×

×

×

Int16

2

−

−

Int32

4

−

−

Int64

−

○

○

UInt16

×

×

×

UInt32

×

×

×

UInt64

×

×

×

Single

4

−

−

Double

8

−

−

Decimal

−

○

○

Char

1

−

−

Char[]

×

×

×

String

○

−

−

DateTime

○

−

−

TimeSpan

4

−

−

Guid

×

×

×

Byte

1

−

−

Byte[]

○

−

−

Sbyte

1

−

−

SByte[]

○

−

−

（凡例）

○：HiRDBデータプロバイダ for .NET Frameworkが値を仮定します。

×：該当するデータ型からの仮定はサポートしていません。

数値：データタイプから無条件で求めるデータ長になります。

−：HiRDBデータプロバイダ for .NET Frameworkが値を仮定しません。

HiRDBデータプロバイダ for .NET Frameworkが実行時に仮定した値は，Size，Precision及び，Scaleプロパティには設定しません。

15.12.4　プロパティの明示的な指定の有無とHiRDBデータプロバイダ for .NET Frameworkによる仮定可否

HiRDBデータプロバイダ for .NET Frameworkが仮定を行うプロパティに対して，明示的に値を指定した場合，HiRDBデータプロバイダ for .NET Frameworkは以降の処理でプロパティの値を仮定しません。各プロパティへの明示的な指定の有無に対するHiRDBデータプロバイダ for .NET Frameworkの仮定可否を次に示します。

表15‒17　プロパティの明示的な指定の有無に対するプロパティの仮定可否

パラメタ種別

各プロパティの明示的な指定の有無

プロパティの仮定可否

Direction

HiRDBType

DbType

Size

Precision

Scale

HiRDBType

DbType

Size

Precision

Scale

Input

InputOutput

有

有

有

有

有

×

×

×

×

×

無

×

×

×

×

○

無

有

×

×

×

○

×

無

×

×

×

○

○

無

有

有

×

×

○

×

×

無

×

×

○

×

○

無

有

×

×

○

○

×

無

×

×

○

○

○

無

有

有

有

×

×

×

×

×

無

×

×

×

×

○

無

有

×

×

×

○

×

無

×

×

×

○

○

無

有

有

×

×

○

×

×

無

×

×

○

×

○

無

有

×

×

○

○

×

無

×

×

○

○

○

無

有

有

有

有

×

×

×

×

×

無

×

×

×

×

○

無

有

×

×

×

○

×

無

×

×

×

○

○

無

有

有

×

×

○

×

×

無

×

×

○

×

○

無

有

×

×

○

○

×

無

×

×

○

○

○

無

有

有

有

○

○

×

×

×

無

○

○

×

×

○

無

有

○

○

×

○

×

無

○

○

×

○

○

無

有

有

○

○

○

×

×

無

○

○

○

×

○

無

有

○

○

○

○

×

無

○

○

○

○

○

Output

−

−

−

−

−

×

×

×

×

×

（凡例）

○：HiRDBデータプロバイダ for .NET Frameworkが値を仮定します。

×：HiRDBデータプロバイダ for .NET Frameworkが値を仮定しません。

−：プロパティの指定値に依存しません。

15.12.5　仮定を適用するプロパティの初期化

HiRDBデータプロバイダ for .NET Frameworkは，プロパティに対して明示的な値が指定された場合，以降の処理でプロパティの値を仮定しません。しかし，HiRDBParameterクラスのResetDbTypeメソッドを実行した場合は，HiRDBParameterオブジェクトのDbTypeプロパティを初期値に戻すため，再びHiRDBParameterクラスのDbTypeプロパティ及びHiRDBTypeプロパティについて仮定ができます。データ長については初期化しないため，明示的に指定した場合，HiRDBデータプロバイダ for .NET Frameworkが再びデータ長を仮定することはありません。HiRDBデータプロバイダ for .NET Frameworkによる仮定を適用するプロパティの初期化可否を次に示します。

表15‒18　仮定を適用するプロパティの初期化可否

仮定するプロパティ

初期化可否

HiRDBType

○

DbType

○

Size

×

Precision

×

Scale

×

（凡例）

○：初期化できます。

×：初期化できません。

15.12.6　仮定値の取得

HiRDBParameterオブジェクトのValueプロパティに値を指定し，HiRDBデータプロバイダ for .NET Frameworkがデータタイプ及びデータ長を仮定してSQLを実行した場合，SQL実行時にHiRDBデータプロバイダ for .NET Frameworkが仮定したデータ長はSize，Precision，Scaleの各プロパティにアクセスしても取得できません。HiRDBデータプロバイダ for .NET Frameworkが仮定したプロパティ値の取得可否を次に示します。

表15‒19　プロパティ仮定値の取得可否及び取得値

仮定するプロパティ

仮定値の取得可否

実際に取得できる値

HiRDBType

○

仮定値

DbType

○

仮定値

Size

×

0

Precision

×

0

Scale

×

0

（凡例）

○：取得できます。

×：取得できません。

15.12.7　注意事項

SQL実行時にHiRDBデータプロバイダ for .NET Frameworkが仮定するデータタイプが対象表の列定義と異なる場合，マニュアル「HiRDB SQLリファレンス」の「変換（代入，比較）できるデータ型」に示す規則に従い，HiRDBサーバが変換します。この変換によるオーバヘッドを削減する場合は，対象表の列定義に合わせてデータ長及びデータタイプを明示的に指定してください。

15.13　構成ファイル

.NET Framework 2.0以降に対応したHiRDBデータプロバイダ for .NET Frameworkでは，.NET Frameworkの構成ファイルに，HiRDBConnectionクラスのプロパティ指定と同様の指定ができます。構成ファイルを使用することで，アプリケーションを変更することなく，各機能の適用有無を変更できるようになります。

15.13.1　適用契機

構成ファイルに指定したHiRDBデータプロバイダ for .NET Frameworkの設定値は，HiRDBConnectionクラスのOpenメソッド実行時に適用します。

15.13.2　サポートする構成ファイル

HiRDBデータプロバイダ for .NET Frameworkがサポートする.NET Frameworkの構成ファイルを次の表に示します。

表15‒20　HiRDBデータプロバイダ for .NET Frameworkがサポートする構成ファイル

構成ファイル種別

説明

アプリケーション構成ファイル

アプリケーション単位に適用する設定を記述するファイル

マシン構成ファイル

コンピュータ全体に適用する設定を記述するファイル

15.13.3　HiRDBデータプロバイダ for .NET Frameworkがサポートする指定可能なキー

構成ファイルに指定可能なキー，及びキーに対応するHiRDBConnectionクラスのプロパティを次の表に示します。各キーの詳細は，「HiRDBConnection」の「プロパティ」を参照してください。

表15‒21　HiRDBデータプロバイダ for .NET Frameworkがサポートするキー

キー

プロパティ

説明

HiRDB_ConnectionString

ConnectionString

接続文字列を指定します。

HiRDB_Pooling

Pooling

接続プーリング機能の適用有無を指定します。

HiRDB_LifeTime

LifeTime

接続プーリング機能使用時の接続待機時間を指定します。

HiRDB_ConnectionRecover

ConnectionRecover

接続プーリング機能使用時の自動再接続機能の適用有無を指定します。

15.13.4　指定方法

HiRDBデータプロバイダ for .NET Frameworkでの構成ファイルの指定は，構成ファイルの<appSettings>要素に指定します。指定には<appSettings>要素の子要素<add>を使用し，<add>要素には「key」と「value」の二つの属性を指定する必要があります。「key」属性には表「HiRDBデータプロバイダ for .NET Frameworkがサポートするキー」に示すキーを，「value」属性にはキーに指定する値を指定してください。「key」及び「value」属性に対する指定の規則を次に示します。

(1)　keyに対する指定の規則

英大文字と英小文字を区別しません。

空白文字など，指定値はすべて有効な文字として扱います。

表「HiRDBデータプロバイダ for .NET Frameworkがサポートするキー」に示すキー以外を指定した場合，HiRDBデータプロバイダ for .NET Frameworkはその指定を無視します。

(2)　valueに対する指定の規則

HiRDB_ConnectionString以外の指定値は，英大文字と英小文字を区別しません。

空白文字など，指定値はすべて有効な文字として扱います。

HiRDB_ConnectionStringの指定値はHiRDBConnectionクラスのConnectionStringプロパティの指定規則に準じます。詳細は，「HiRDBConnection」の「プロパティ」の「ConnectionString」を参照してください。

空文字("")を指定した場合，HiRDBデータプロバイダ for .NET Frameworkは対象のkeyについて未指定として扱います。

15.13.5　指定値の優先順位

HiRDBデータプロバイダ for .NET FrameworkでのHiRDBConnectionクラスのプロパティと各構成ファイルの優先順位を次の表に示します。

表15‒22　HiRDBデータプロバイダ for .NET Frameworkにおける指定値の優先順位

優先順位

指定値の指定場所

1

アプリケーション構成ファイル

2

マシン構成ファイル

3

HiRDBConnectionクラスのプロパティ

ただし，アプリケーション構成ファイルの任意のkeyに対応するvalueに空文字("")を指定した場合，マシン構成ファイルのアプリケーション構成ファイルと同一のkeyに対する指定は.NET Frameworkによって無視されます。この場合，HiRDBデータプロバイダ for .NET Frameworkは前述のとおり対象のkeyを未指定として扱うため，マシン構成ファイルに有効な値を指定しているときでも，HiRDBConnectionクラスのプロパティへの指定が有効となることに注意してください。他の設定方法も含めた指定値の優先順位に関する詳細は，「接続情報の優先順位」を参照してください。

15.13.6　指定例

HiRDBデータプロバイダ for .NET Frameworkでの構成ファイルの指定例を次に示します。

HiRDBデータプロバイダ for .NET Frameworkにおける構成ファイルの指定例

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="HiRDB_Pooling"            value="true" />
        <add key="HiRDB_LifeTime"           value="3600" />
        <add key="HiRDB_ConnectionRecover"  value="true" />
    </appSettings>
</configuration>

15.13.7　例外

構成ファイル指定時に発生する可能性のある例外HiRDBExceptionについて，発生条件を次の表に示します。

表15‒23　構成ファイル指定時に発生する可能性のある例外の発生条件

発生条件

出力される例外メッセージ

HiRDBConnectionクラスのOpenメソッド実行時に，マシン構成ファイル又はアプリケーション構成ファイルの読み込みに失敗しました。

KFPZ24037-E

HiRDBデータプロバイダ for .NET Frameworkがサポートする構成ファイルに指定可能なキーに誤った値を指定しました。

KFPZ24038-E

15.13.8　.NET Frameworkの仕様に関連する注意事項

マシン構成ファイルは，.NET Frameworkのバージョンごとに存在します。マシン構成ファイルを使用する場合は，アプリケーションを実行する.NET Frameworkのバージョンに対応したマシン構成ファイルを編集してください。

アプリケーションの実行中に構成ファイルの指定を変更した場合，変更した値はアプリケーションの再起動まで有効になりません。構成ファイルの指定を変更する場合，次の手順で行ってください。

アプリケーションが実行中の場合は終了する。

構成ファイルの指定を変更する。

アプリケーションを起動する。

構成ファイルに重複したキーを指定した場合，最後に指定したキーに対応する値が有効となります。

15.14　接続情報の優先順位

HiRDBデータプロバイダ for .NET Frameworkでは，意味が同じ接続情報を複数の設定方法で指定できます。同時に複数の設定方法で設定された場合の接続情報の優先順位を次の表に示します。

表15‒24　接続情報の優先順位

接続情報の意味

設定方法

優先順位

接続時の認可識別子，パスワード

アプリケーション構成ファイルのキーHiRDB_ConnectionStringの指定

「uid又はuserid」及び「password又はPwd」

1

「PDUSER」

2

「datasource」，「dsn」又は「env」で設定した，環境変数グループ又は環境変数グループファイル内のPDUSER

3

マシン構成ファイルのキーHiRDB_ConnectionStringの指定

「uid又はuserid」及び「password又はPwd」

4

「PDUSER」

5

「datasource」，「dsn」又は「env」で設定した，環境変数グループ又は環境変数グループファイル内のPDUSER

6

HiRDBConnectionクラスのプロパティConnectionStringの指定

「uid又はuserid」及び「password又はPwd」

7

「PDUSER」

8

「datasource」，「dsn」又は「env」で設定した，環境変数グループ又は環境変数グループファイル内のPDUSER

9

ユーザ環境変数PDUSER

10

システム環境変数PDUSER

11

Windowsディレクトリ下のHiRDB.INIファイル内のPDUSER

12

接続プーリング機能を使用するかどうか

アプリケーション構成ファイルのキーHiRDB_Pooling

1

マシン構成ファイルのキーHiRDB_Pooling

2

HiRDBConnectionクラスのプロパティPooling

3

接続プーリング機能でのプーリング時間

アプリケーション構成ファイルのキーHiRDB_LifeTime

1

マシン構成ファイルのキーHiRDB_LifeTime

2

HiRDBConnectionクラスのプロパティLifeTime

3

接続プーリングの接続回復機能を使用するかどうか

アプリケーション構成ファイルのキーHiRDB_ConnectionRecover

1

マシン構成ファイルのキーHiRDB_ConnectionRecover

2

HiRDBConnectionクラスのプロパティConnectionRecover

3

PDUSER以外のクライアント環境定義

アプリケーション構成ファイルのキーHiRDB_ConnectionStringの指定

「PDで始まるクライアント環境定義」

1

「datasource」，「dsn」又は「env」で設定した，環境変数グループ又は環境変数グループファイル

2

マシン構成ファイルのキーHiRDB_ConnectionStringの指定

「PDで始まるクライアント環境定義」

3

「datasource」，「dsn」又は「env」で設定した，環境変数グループ又は環境変数グループファイル

4

HiRDBConnectionクラスのプロパティConnectionStringの指定

「PDで始まるクライアント環境定義」

5

「datasource」，「dsn」又は「env」で設定した，環境変数グループ又は環境変数グループファイル

6

ユーザ環境変数

7

システム環境変数

8

Windowsディレクトリ下のHiRDB.INIファイル

9

16　Type2 JDBCドライバ

この章では，Type2 JDBCドライバのインストール，環境設定，JDBCの機能などについて説明します。

以降，この章では，Type2 JDBCドライバを単に「JDBCドライバ」と表記します。

なお，Type2 JDBCドライバは廃止になりました。現在はアプリケーションの互換性を保つために使用できますが，将来は削除されます。代わりにType4 JDBCドライバを使用してください。

Type2 JDBCドライバを使用する場合は，HiRDBサーバとの接続時にパスワードを指定するユーザインタフェースで，29バイト以上のパスワードを引用符で囲んだ指定はできません。

16.1　インストールと環境設定

16.1.1　インストール

JDBCドライバのインストールは，HiRDBインストール時に選択します。

JDBCドライバのインストールディレクトリとファイルを次の表に示します。

表16‒1　JDBCドライバのインストールディレクトリとファイル

プラットフォーム

種別

インストールディレクトリ

ファイル

UNIX

HiRDBサーバ

$PDDIR/client/lib/

pdjdbc.jar※１※３

libjjdbc.sl(libjjdbc.so)※２※３

HiRDBクライアント

/HiRDB/client/lib/

pdjdbc.jar※１※３

libjjdbc.sl(libjjdbc.so)※２※３

Windows

HiRDBサーバ

%PDDIR%¥CLIENT¥UTL¥

pdjdbc.jar※３

jjdbc.dll※３

HiRDBクライアント

¥HiRDB¥CLIENT¥UTL¥

pdjdbc.jar※３

jjdbc.dll※３

注

下線で示す部分は，HiRDBクライアントのインストールディレクトリとなります。

注※1

32ビットモードのHP-UX (IPF)版の場合はpdjdbc32.jarとなります。

注※2

32ビットモードのHP-UX (IPF)版の場合はlibjjdbc32.soとなります。

注※3

Windows (x64)版，Linux(EM64T)版の場合は，32Bitモードで動作させてください。

16.1.2　環境設定

JDBCドライバが動作するときに必要となる，環境変数の設定を次に示します。

(1)　UNIX環境の場合

実行環境の環境変数に，次の内容を設定してください。

CLASSPATH=$CLASSPATH:[インストールディレクトリ]/pdjdbc.jar※

注※

32ビットモードのHP-UX (IPF)版の場合はpdjdbc32.jarとなります。なお，pdjdbc.jarとpdjdbc32.jarは同時に設定しないでください。

(2)　Windows環境の場合

［コントロールパネル］−［システム］−［システムのプロパティ］の「環境」に，次の内容を設定してください。

CLASSPATH=%CLASSPATH%;[インストールディレクトリ]¥pdjdbc.jar

16.1.3　メソッドの略記について

先頭に「get」が付くメソッドをまとめて表す場合，getXXXメソッドと表記します。

先頭に「set」が付くメソッドをまとめて表す場合，setXXXメソッドと表記します。

16.2　JDBC1.0機能

16.2.1　Driverクラス

(1)　概要

Driverクラスでは，次の機能が提供されます。

DB接続

指定したURLの妥当性チェック

DriverManager.getConnectionメソッドで指定する接続プロパティの情報取得

ドライババージョンの返却

Driverクラスで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。ここでは，DB接続をするときの手順，及びこのJDBCドライバ独自のURLの構文について説明します。

(2)　DriverManagerを使用したDB接続

DB接続は，Java実行環境が提供するDriverManagerクラスを使用して，次の手順で実行します。

DriverクラスをJava仮想マシンに登録します。

接続情報を引数にして，DriverManager.getConnectionメソッドを呼び出します。

(a)　DriverクラスのJava仮想マシンへの登録

Class.forNameメソッドの使用，又はシステムプロパティへの登録で，DriverクラスをJava仮想マシンに登録します。登録するときに指定する，JDBCドライバのパッケージ名称とDriverクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

Driverクラス名称：PrdbDriver

Class.forNameメソッドの使用

アプリケーション内で，次のようにClass.forNameメソッドを呼び出します。

  Class.forName("JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver");

システムプロパティへの登録

アプリケーション内で，次のようにSystem.setPropertyメソッドを呼び出します。

  System.setProperty("jdbc.drivers","JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver");

(b)　接続情報の設定とDB接続

DBと接続する場合，次のどれかの方法で実行してください。

DriverManager.getConnectionメソッドの使用

  Connection con = DriverManager.getConnection(String url, String user, String password) ;
  又は
  Connection con = DriverManager.getConnection(String url, Properties info) ;

内部ドライバでの記述

内部ドライバで記述する場合，認可識別子などの接続情報は，HiRDB側でルーチンを呼び出した外部ドライバの情報が仮定されます。ただし，JDBCドライバ内部でトレースなどを取得する場合は，認可識別子として"INNER"が仮定されます。

＜内部ドライバ限定の記述＞
  Connection con = DriverManager.getConnection(String url) ;

Driverクラスのconnectメソッドの直接呼び出し

  Driver drv = new JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver();
  Connection con = drv.connect(String url, Properties info) ;

上記の各メソッドの引数（url，user，password，及びinfo）には，DB接続で必要な接続情報を設定します。

JDBCドライバは，正常にDB接続がされた場合，上記の各メソッドの呼び出しの結果として，Connectionオブジェクトを返却します。必要な接続情報を各引数に設定していない場合，又は接続情報の内容が不正な場合は，上記の各メソッドの呼び出しの結果として，SQLExceptionを投入します。

getConnectionメソッドの引数の内容を次の表に示します。

表16‒2　getConnectionメソッドの引数の内容

引数

内容

指定可否

String url

URL。URLについては，「URLの構文」を参照してください。

○

String user

認可識別子※1

○※2

String password

パスワード

△

Properties info

表「Properties infoの設定内容」を参照してください。

−

（凡例）

○：必ず指定してください。

△：指定は任意です。

−：該当しません。

注※1

認可識別子にnull又は空文字を指定した場合，SQLExceptionを投入します。また，ドライバが文字コードを変換した結果，認可識別子に指定した文字列のサイズが31バイト以上となった場合，SQLExceptionを投入します。文字コードの変換については，「文字コード変換機能」を参照してください。

注※2

内部ドライバで記述する場合は省略できます。

Properties infoの設定内容を次の表に示します。

表16‒3　Properties infoの設定内容

キー

内容

指定可否

user

認可識別子※1です。

○※2

password

パスワードです。

△

ENCODELANG

Javaプログラム内では，文字コードはUnicodeで扱うため，HiRDBとの文字データ処理時に，JDBCドライバがHiRDBの文字データとUnicodeとの相互文字コード変換をします。この文字コード変換処理で，JDBCドライバはJava仮想マシンが提供するエンコーダ及びデコーダを利用します。このJava仮想マシンが提供するエンコーダ及びデコーダに対して，JDBCドライバが指定する文字セット名称を指定します。指定値はJavaがサポートしている文字セット（MS932など）です。

このProperties infoで"OFF"を指定した場合，又は指定をしなかった場合（DataSource.setEncodeLangメソッドでの設定，及びURLのENCODELANGでの設定も含む）の動作については，「setEncodeLang」を参照してください。

△

COMMIT_BEHAVIOR

HiRDBがコミットをした場合に，次に示すクラスをコミット実行後も有効とするかどうかを設定します。

ResultSetクラス

Statementクラス，PreparedStatementクラス，及びCallableStatementクラス

指定値については，「setCommit_Behavior」を参照してください。

注意事項：

「COMMIT_BEHAVIORについての注意事項」を参照してください。

△

BLOCK_UPDATE

?パラメタを使用したデータベースの更新で，複数のパラメタセットを一度に処理するかどうかを設定します。省略した場合，"FALSE"が仮定されます。

"TRUE"：

一度に処理します。

"FALSE"：

パラメタセットを一つずつ分割して処理します。

上記以外：

"FALSE"を指定したものとみなします。

注意事項：

"TRUE"を設定した場合，バッチ更新機能で，HiRDBの配列を使用した機能を使用できます。

配列を使用した機能を利用できるSQLは，INSERT文，UPDATE文，及びDELETE文だけです。それ以外のSQLの場合，一括実行されないで逐次実行で処理されます。

配列を使用した機能を利用できるSQLでも，配列を使用した機能の使用条件を満たさない場合は一括実行されないで，逐次実行で処理されます。

配列を使用した機能を利用する場合，「バッチ更新」を参照してください。

配列を使用した機能については，「配列を使用した機能」を参照してください。

この機能は，システムプロパティのHiRDB_for_Java_BLOCK_UPDATEでも指定できます。ただし，BLOCK_UPDATEを設定した場合は，システムプロパティのHiRDB_for_Java_BLOCK_UPDATEの設定は無効となります。

△

LONGVARBINARY_ACCESS

LONGVARBINARY（列属性がBLOB又はBINARY）のデータベースのアクセス方法を指定します。省略した場合，"REAL"が仮定されます。

"REAL"：

HiRDBから実データでアクセスします。

"LOCATOR"：

HiRDBの位置付け子を使用してアクセスします。

上記以外：

"REAL"を指定したものとみなします。

△

HiRDB_for_Java_SQL_IN_NUM

実行するSQLの入力，又は入出力?パラメタの最大数を指定します。この指定は，SQLの前処理時に取得する，入力，又は入出力?パラメタ情報の数となります。

実際の入力，又は入出力?パラメタの数が，このプロパティの指定値よりも多い場合，SQLの前処理の後に入力，又は入出力?パラメタ情報を取得します。

指定値は，1〜30,000です（デフォルトは64）。これ以外の値，又は数字以外を指定した場合はエラーとなります。

注意事項：

この項目は，システムプロパティのHiRDB_for_Java_SQL_IN_NUMでも指定できます。ただし，Properties infoにHiRDB_for_Java_SQL_IN_NUMを設定した場合は，システムプロパティの設定が無効となります。

入力，又は入出力?パラメタのあるSQL文を実行しない場合は，1を指定することをお勧めします。

このプロパティの指定値は，バージョン07-02以降のHiRDBサーバと接続している場合に有効です。

△

HiRDB_for_Java_SQL_OUT_NUM

実行するSQLの出力項目数の最大数を指定します。この指定は，SQLの前処理時に取得する出力項目情報の数となります。

実際の出力項目情報の数が，このプロパティの指定値よりも多い場合，SQLの前処理の後に出力項目情報を取得します。

指定値は，1〜30,000です（デフォルトは64）。これ以外の値，又は数字以外を指定した場合はエラーとなります。

注意事項：

この機能は，システムプロパティのHiRDB_for_Java_SQL_OUT_NUMでも指定できます。ただし，Properties infoにHiRDB_for_Java_SQL_OUT_NUMを設定した場合は，システムプロパティの設定が無効となります。

検索項目，又は出力若しくは入出力?パラメタのあるSQL文を実行しない場合は，1を指定することをお勧めします。

このプロパティの指定値は，バージョン07-02以降のHiRDBサーバと接続している場合に有効です。

△

HiRDB_for_Java_SQLWARNING_LEVEL

SQL実行時に発生した警告情報の保持レベルを指定します。次の値を警告保持レベルとして指定できます。

IGNORE

SQLWARN（デフォルト）

ALLWARN

なお，このメソッドでは，引数に指定した内容の大文字，小文字を区別しません。

上記の値については，「SQLWarningクラス」を参照してください。

△

HiRDB_for_Java_CLEAR_ENV

DB接続時に，OSの環境変数として設定したHiRDBのクライアント環境定義を無効にするかどうかを指定します。

TRUE：

OSの環境変数として登録したHiRDBのクライアント環境定義を，プロセス起動後の最初のDB接続時に無効にします。TRUEを指定することで，OSの環境変数以外の方法（環境変数グループなど）で設定したHiRDBのクライアント環境定義の値を適用できます。

FALSE（デフォルト）：

OSの環境変数として登録したHiRDBのクライアント環境定義を無効にしません。

注意事項：

このメソッドでは，引数に指定した内容の大文字，小文字を区別しません。

最初のDB接続の後，C言語などで実装したネイティブメソッド内で，OSの環境変数として設定したHiRDBのクライアント環境定義は，指定値をTRUEにしても無効にはなりません。

複数回DBに接続する場合，最初にTRUEを指定してDB接続をした後は，次の接続でFALSEを指定しても，クライアント環境定義の値は無効になったまま元には戻りません。

△

（凡例）

○：必ず指定してください。

△：指定は任意です。

注※1

認可識別子にnull又は空文字を指定した場合，SQLExceptionを投入します。また，ドライバが文字コードを変換した結果，認可識別子に指定した文字列のサイズが31バイト以上となった場合，SQLExceptionを投入します。文字コードの変換については，「文字コード変換機能」を参照してください。

注※2

内部ドライバで記述する場合は省略できます。

COMMIT_BEHAVIORについての注意事項

注意事項を次に示します。

CLOSE又はPRESERVEを指定して，SELECT，INSERT，DELETE，UPDATE，PURGE TABLE，又はCALLでアクセスする資源（表やインデクスなど）に対して，ほかのユーザが定義系SQLを実行した場合，クライアント環境定義PDDDLDEAPRPEXEがNO，かつPDDDLDEAPRPがNOのとき，資源にアクセスしていたコネクションをDISCONNECTするまでの間，その定義系SQLは排他待ちの状態になります。

クライアント環境定義PDDDLDEAPRPEXEがYES，又はPDDDLDEAPRPがYESのときは，前処理結果が無効となります。前処理結果が無効となったSQLを実行すると，SQLException例外（getErrorCodeメソッドで取得できる値は-1542）が発生します。

PRESERVEを指定した場合，JDBCドライバはHiRDBのホールダブルカーソルを使用します。

CLOSE又はPRESERVEを指定※1することで，コミット後※2もプリコンパイルしたSQL文が有効になるSQL文は，SELECT，INSERT，DELETE，UPDATE，PURGE TABLE，及びCALLだけです（Connection.prepareStatementメソッドの実行，及びConnection.prepareCallメソッドの実行によって，SQL文をプリコンパイルできます）。

上記以外のSQL文では，COMMIT_BEHAVIORにCLOSE又はPRESERVEを指定しても，コミット時にプリコンパイルしたSQL文は無効になります。

それらの無効になったSQL文を格納したPreparedStatementクラスのオブジェクト，及びCallableStatementクラスのオブジェクトでSQL文を実行するとエラーになります。エラーになる例を次に示します。

[実行例]

PreparedStatement pstmt1 = con.prepareStatement("lock table tb1");
PreparedStatement pstmt2 = con.prepareStatement("lock table tb2");
pstmt1.execute();        //エラーにならない。
con.commit();
pstmt2.execute();        //エラーになる。
pstmt1.close();
pstmt2.close();

[説明]

実行するSQL文がLOCK文であるため，COMMIT_BEHAVIORがCLOSEを指定していても，コミット後はPreparedStatementが無効となり，エラーが発生します。

注※1

　次のどれかの指定の場合が該当します。

・getConnectionメソッドで指定するURLにCOMMIT_BEHAVIOR=CLOSEを指定する。

・getConnectionメソッドで指定するURLにCOMMIT_BEHAVIOR=PRESERVEを指定する。

・JdbhDataSource，JdbhConnectionPoolDataSource，及びJdbhXADataSourceクラスのsetCommit_BehaviorメソッドでCLOSEを指定する。

・JdbhDataSource，JdbhConnectionPoolDataSource，及びJdbhXADataSourceクラスのsetCommit_BehaviorメソッドでPRESERVEを指定する。

注※2

　次の場合が該当します。

・commitメソッドによる明示的なコミット

・自動コミットによる暗黙的なコミット

・定義系SQL文の実行

・PURGE TABLE文の実行

・rollbackメソッドによる明示的なロールバック

・SQL実行エラーによる暗黙的なロールバック

(3)　URLの構文

JDBCドライバで指定できるURLの構文について説明します。なお，URL内の各項目及び項目間には空白を入れないでください。接続付加情報項目とDBホスト名称項目の両方を指定する場合は，接続付加情報項目とDBホスト名称項目との間にコンマを指定してください。

(a)　URLの構文

  jdbc:hitachi:PrdbDrive[://[DBID=接続付加情報]
                        [[{://|,}]DBHOST=DBホスト名称]
                        [[{://|,}]ENCODELANG=変換文字セット]
                        [[{://|,}]COMMIT_BEHAVIOR=カーソル動作モード]
                        [[{://|,}]CLEAR_ENV=環境変数無効化指定]]

(b)　URLの各項目の説明

jdbc:hitachi:PrdbDrive：

プロトコル名称及びサブプロトコル名称です。必ず指定してください。

接続付加情報：

HiRDBのポート番号を指定します（クライアント環境定義のPDNAMEPORTに相当します）。又は，HiRDBの環境変数グループを指定します。

省略した場合，PDNAMEPORTのデフォルト値となります。

＜接続付加情報にHiRDBの環境変数グループを指定する場合の注意事項＞

HiRDBの環境変数グループ名を指定する場合は，グループ名の先頭に@を付けます。

環境変数グループ名に半角空白文字，及び半角＠文字を含む場合，半角引用符（"）で囲んでください。環境変数グループ名を半角引用符で囲んだ場合，最後の半角引用符から次の設定項目，又は文字終端までの文字は無視されます。また，半角引用符，及び半角コンマを含む環境変数グループ名は指定できません。

環境変数グループに登録された環境変数は，ユーザ環境変数やHiRDB.INIで登録した環境変数よりも優先されます。

接続付加情報，及びDBホスト名称の指定と，接続先の優先順位を次に示します。

1.接続付加情報に指定したHiRDBの環境変数グループ

2.DBホスト名称，又は接続付加情報に指定したポート番号

例えば，URL中のDBHOSTにDBホスト名称を指定しても，DBIDにHiRDBの環境変数グループ名を指定している場合は，HiRDBの環境変数グループの内容が優先されます。この場合，HiRDBの環境変数グループ内にPDHOSTの指定がないときは接続エラーとなります。

＜接続付加情報にHiRDBのポート番号を指定する場合の注意事項＞

接続先のポート番号が65535である場合は，クライアント環境定義のPDNAMEPORT又は環境変数グループを使用して接続先を指定してください。

DBホスト名称：

HiRDBのホスト名を指定します。クライアント環境定義のPDHOSTに相当します。

省略した場合，PDHOSTのデフォルト値となります。

変換文字セット：

文字型変換で使用する変換文字セットを指定します。

カーソル動作モード：

カーソルがCOMMITをわたって有効かどうかを指定します。

環境変数無効化指定：

DB接続時に，OSの環境変数として設定したHiRDBのクライアント環境定義を無効にするかどうかを指定します。指定値，及び注意事項については，表「Properties infoの設定内容」のHiRDB_for_Java_CLEAR_ENVを参照してください。

(c)　接続付加情報にHiRDBの環境変数グループ名を指定する場合の例

UNIX版の場合

HiRDBの環境変数グループ名のパスが「/HiRDB_P/Client/HiRDB.ini」の指定例を次に示します。

String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=/HiRDB_P/Client/HiRDB.ini";

Windows版の場合

HiRDBクライアント環境変数登録ツールで登録した環境変数グループ名がHiRDB_ENV_GROUPの場合の指定例を次に示します。

String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=HiRDB_ENV_GROUP";

HiRDBの環境変数グループ名のパスが「C:¥HiRDB_P¥Client¥HiRDB.ini」の場合の指定例を次に示します。

String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=C:¥¥HiRDB_P¥¥Client¥¥HiRDB.ini";

HiRDBの環境変数グループ名のパスが「C:¥Program△Files¥HITACHI¥HiRDB¥HiRDB.ini」の場合の指定例を次に示します（△は半角空白文字）。

String url = "jdbc:hitachi:PrdbDrive://DBID=@HIRDBENVGRP=" +
             "¥"C:¥Program△Files¥¥HITACHI¥¥HiRDB¥¥HiRDB.ini¥"";

16.2.2　Connectionクラス

(1)　概要

Connectionクラスでは，次の機能が提供されます。

Statementクラス，PreparedStatementクラス，及びCallableStatementクラスのオブジェクト生成

トランザクションの決着（COMMIT又はROLLBACK）

AUTOコミットモードの設定

Connectionクラスで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。

(2)　注意事項

(a)　カタログ

JDBCドライバでは，接続DB種別に関係なく，カタログは使用できません。そのため，getCatalogメソッドは無条件にnullを返却し，setCatalogメソッドは何も処理をしません。

(b)　アクセスモード

JDBCドライバでは，アクセスモードの変更はできません。そのため，isReadOnlyメソッドは無条件にfalseを返却し，setReadOnlyメソッドは何も処理をしません。

(c)　トランザクション分離モード

JDBCドライバでは，トランザクション分離モードの変更はできません。そのため，getTransactionIsolationメソッドは無条件にTRANSACTION_READ_COMMITTEDを返却し，setTransactionIsolationメソッドは何も処理をしません。

16.2.3　Statementクラス

(1)　概要

Statementクラスでは，次の機能が提供されます。

SQLの実行

検索結果としての結果セット（ResultSetオブジェクト）の生成

更新結果としての更新行数の返却

Statementクラスで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。

(2)　注意事項

(a)　マルチスレッド

一つのStatementオブジェクトを複数のスレッドで使用する場合，「SQLの実行〜結果セットの取得〜結果セットのクローズ」の処理を，スレッドごとにシリアライズする必要があります。シリアライズしないで並行して処理した場合，動作は保証されません。したがって，スレッドごとに別々のStatementオブジェクトを割り当てることをお勧めします。

(b)　カーソル名称

JDBCドライバでは，位置決めされた更新及び削除は使用できません。そのため，setCursorNameメソッドは何も処理をしません。

(c)　検索制限時間

JDBCドライバでは，検索の時間監視はできません。そのため，setQueryTimeoutメソッドで指定した値は無効となります。

(d)　最大検索行数の設定

JDBCドライバでは，最大検索行数の設定はできません。

16.2.4　PreparedStatementクラス

(1)　概要

PreparedStatementクラスでは，次の機能が提供されます。

？パラメタ指定のSQLの実行

？パラメタの設定

検索結果としてのResultSetオブジェクトの生成，返却

更新結果としての更新行数の返却

また，PreparedStatementクラスはStatementクラスのサブクラスであるため，Statementクラスの機能をすべて継承します。

PreparedStatementクラスで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。

(2)　注意事項

PreparedStatementクラスはStatementクラスのサブクラスであるため，Statementクラスの注意事項はすべて該当します。それ以外のPreparedStatementクラスの注意事項を次に示します。

(a)　？パラメタの設定

？パラメタの設定に使用するsetXXXメソッドについては，「？パラメタ設定時のデータマッピング」を参照してください。接続DBがどのJDBC SQLタイプを使用できるかについては，「データ型，文字コード」を参照してください。

(b)　複数の結果セット

複数の結果セットを返却する機能は使用できません。そのため，getMoreResultsメソッドは無条件にfalseを返却し，現在オープンしている結果セットがあるときはその結果セットをクローズします。

16.2.5　CallableStatementクラス

(1)　概要

CallableStatementクラスでは，次の機能が提供されます。

Javaストアドルーチンの実行

INパラメタ及びINOUTパラメタの設定（PreparedStatementクラスのsetXXXメソッドを使用）

OUTパラメタ及びINOUTパラメタの登録

OUTパラメタ及びINOUTパラメタ値の取得

結果セットの取得

また，CallableStatementクラスはPreparedStatementクラスのサブクラスであるため，PreparedStatementクラス及びStatementクラスの機能をすべて継承します。ただし，Javaストアドルーチン内のDatabaseMetaDataクラスで取得した結果セットは，Javaストアドルーチン内でだけ使用できます。CallableStatementクラスのgetResultSetでは，動的結果セットとして取得できません。

CallableStatementクラスで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。

(2)　注意事項

CallableStatementクラスはPreparedStatementクラスのサブクラスであるため，PreparedStatementクラス及びStatementクラスの注意事項はすべて該当します。

clearParametersメソッドを実行した場合，clearParametersメソッドを実行した時点でパラメタの情報を消去します。executeメソッド実行後，getXXXメソッドを実行するまでの間にclearParametersメソッドを実行した場合，getXXXメソッドの実行でKFPJ20506-Eメッセージを出力します。

JavaストアドルーチンのINOUTパラメタを使用する場合，registerOutParameterメソッドで指定するjava.sql.Typesクラスの型とsetXXXメソッドで設定するデータの型は同一にしてください。

16.2.6　ResultSetクラス

(1)　概要

ResultSetクラスでは，次の機能が提供されます。

行単位の結果セット内の移動

結果データの返却

検索結果データがNULL値かどうかの通知

ResultSetクラスで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。

(2)　注意事項

(a)　マルチスレッド

一つのResultSetオブジェクトを複数のスレッドで並行して使用する場合，動作は保証されません。したがって，一つのResultSetオブジェクトは一つのスレッドで処理することをお勧めします。

(b)　データマッピング（変換）

結果取得時のgetXXXメソッドについては，「検索データ取得時のデータマッピング」を参照してください。接続DBがどのJDBC SQLタイプを使用できるかについては，「データ型，文字コード」を参照してください。

16.2.7　ResultSetMetaDataクラス

(1)　概要

ResultSetMetaDataクラスでは，次の機能が提供されます。

ResultSet（結果セット）の各列に対するデータ型及びデータ長などのメタ情報の返却

(2)　メソッドの詳細

(a)　isSearchable (int column)メソッド

パラメタcolumnで指定された列をWHERE句で使用できる場合はtrue，できない場合はfalseを戻り値とします。すべてのデータ型の列をWHERE句で使用できるため，常にtrueを返します。ただし，Array.getResultSetメソッドの戻り値であるResultSetの1番目の列の場合は，falseを返します。getResultSetについては，「Arrayクラス」を参照してください。

（例）

表T1に列C1があります。C1がどのデータ型の場合でも，次に示すようにWHERE句で使用できます。

SELECT * FROM T1 WHERE LENGTH (C1) > 5

(b)　getColumnDisplaySize (int column)メソッド

パラメタcolumnで指定された列を文字列表現した場合の，最大文字数を戻り値とします。ただし，Array.getResultSetメソッドの戻り値であるResultSetの1番目の列の場合は，10を返します。HiRDBの各SQLデータ型に対するこのメソッドの戻り値を次の表に示します。

表16‒4　HiRDBの各SQLデータ型に対するgetColumnDisplaySizeメソッドの戻り値

HiRDBのSQLデータ型

戻り値（int）

戻り値の計算式

INTEGER

11

符号1文字＋最大けた数10けた

SMALLINT

6

符号1文字＋最大けた数5けた

DECIMAL（m，n）

NUMERIC（m，n）

m：精度（全体のけた数）

n：位取り（小数点以下のけた数）

m＋2

符号1文字＋精度m＋小数点1文字

FLOAT

DOUBLE PRECISION

23

符号1文字＋最大有効けた数17けた＋小数点1文字＋指数部最大文字数4

SMALLFLT

REAL

13

符号1文字＋最大有効けた数8けた＋小数点1文字＋指数部最大文字数3

CHAR（n）

n：定義長のバイト数

n

−

VARCHAR（n）

CHAR VARYING（n）

n：最大長のバイト数

n

−

NCHAR（n）

NATIONAL CHAR（n）

n：定義長の文字数

n

−

NVARCHAR（n）

NATIONAL CHAR VARYING（n）

NCHAR VARYING（n）

n：最大長の文字数

n

−

MCHAR（n）

n：定義長のバイト数

n

−

MVARCHAR（n）

n：最大長のバイト数

n

−

DATE

10

"yyyy-mm-dd"の10文字

TIME

8

"hh:mm:ss"の8文字

TIMESTAMP（p）

p：小数秒のけた数

(1) pが0の場合：

19

(2) pが2，4，又は6の場合：

20＋p

(1) "yyyy-mm-dd hh:mm:ss"の19文字

(2) (1)の19文字＋小数点1文字＋小数部けた数p

BLOB（n［K｜M｜G］）

n：最大長

K：キロバイト単位

M：メガバイト単位

G：ギガバイト単位

単位を省略した場合はバイト単位

単位の指定を省略した場合：

n

単位にKを指定した場合：

n×1024※

単位にMを指定した場合：

n×1024×1024※

単位にGを指定した場合：

n×1024×1024×1024※

−

BINARY（n）

n：最大長のバイト数

n

−

（凡例）

−：該当しません。

注※

計算結果が2147483648の場合は，2147483648以上になります。

16.2.8　DatabaseMetaDataクラス

DatabaseMetaDataクラスでは，次の機能が提供されます。

接続DBに関する各種情報の返却

一覧系情報（表一覧，列一覧など）のResultSet（結果セット）への格納，返却

ただし，Javaストアドルーチン内のDatabaseMetaDataクラスで取得した結果セットは，Javaストアドルーチン内でだけ使用できます。

DatabaseMetaDataクラスで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。実際に返却する値については，「制限事項があるクラスとメソッド」を参照してください。なお，各メソッドが返却する値は，常にJDBCドライバのバージョンと同一のバージョンのHiRDBサーバに関する情報です。

16.2.9　SQLWarningクラス

(1)　概要

SQLWarningクラスでは，次の機能が提供されます。

データベースアクセスの警告に関する情報の提供

SQLWarningオブジェクトは，警告が報告される原因となったメソッドのオブジェクトに，例外での通知なしで蓄積されます。

(2)　注意事項

(a)　蓄積されたSQLWarningオブジェクトの解放

SQLWarningオブジェクトは，警告が報告される原因となったメソッドのオブジェクト（Connection，Statement，PreparedStatement，CallableStatement，又はResultSet）から，チェーンによって蓄積されます。

蓄積されたSQLWarningオブジェクトを明示的に解放するには，チェーンをつないでいるオブジェクトから，clearWarningsを実行する必要があります。

(b)　SQLWarningオブジェクトの生成条件

SQLの実行で発生した警告が，JDBCドライバ内で保持することを，警告保持レベルで指定している場合，SQLWarningオブジェクトを生成して警告情報を保持します。SQLWarningの生成条件を次に示します。

SQLの実行結果

警告保持レベル

IGNORE

SQLWARN

ALLWARN

SQLCODE>0，かつSQLCODEが100，110，及び120以外

×

×

○

SQL連絡領域のSQLWARN0がW（SQLWARN6がWである場合を除く）

×

○

○

JDBCドライバ内での警告発生

×

○

○

（凡例）

○：生成します。

×：生成しません。

注

警告保持レベルは，プロパティのHiRDB_for_Java_SQLWARNING_LEVEL，又はメソッドのsetSQLWarningLevelで指定できます。デフォルトはSQLWARNです。

(c)　警告メッセージ

SQLWarningから取得できるメッセージを次に示します。

条件

getMessageで取得するメッセージ

SQLWARN0がW

KFPJ01074-W

SQLWARN0が'△'，かつSQLCODE>0（SQLCODE=100，110，及び120を除く）

KFPAXXXXX-X

JDBCドライバ内で警告が発生

KFPJXXXXX-W

(d)　バッチ更新

バッチ更新実行中に複数行の更新で警告が発生しても，SQLWarningは1個しか生成しません。

16.3　JDBC2.0基本機能

16.3.1　結果セットの拡張

JDBC2.0基本規格では，結果セット（ResultSetクラス）の拡張機能として「スクロール」と「並行処理」が追加されました。

(1)　スクロールタイプ

結果セットのスクロールタイプには，次の3種類があります。

(a)　順方向専用型

JDBC1.0からの標準のスクロールタイプです。結果セット内を順方向（上から下）にだけスクロールできます。

(b)　スクロール非反映型

JDBC2.0で追加されたスクロールタイプです。結果セット内を順方向又は逆方向にスクロールできます。また，現在の位置からの相対位置指定の移動，又は絶対位置への移動もできます。

「非反映型」とは，結果セットが開かれている間に加えられた変更が，その結果セットに反映されないということを意味します。つまり，基盤となるデータの静的なビューを提供するだけで，結果セットに含まれる行，その順序，及び列の値は，結果セットの作成時に固定されます。

(c)　スクロール反映型

JDBC2.0で追加されたスクロールタイプです。結果セットが開かれている間に加えられた変更が，その結果セットに反映されます。

「変更の反映」という点では，「その結果セット自身による変更の反映」，「同一トランザクション内でのほかの結果セットによる変更の反映」，「他トランザクションによる変更の反映」などがあります。どこまで保証されるかは，ドライバの実装レベル，及びDBMSのトランザクション遮断レベルに依存します。

(2)　並行処理タイプ

結果セットの並行処理タイプには，次の2種類があります。

(a)　読み取り専用型

JDBC1.0からの標準の並行処理タイプです。結果セットからの更新はできません。

(b)　更新可能型

JDBC2.0で追加された並行処理タイプです。結果セットからの更新（UPDATE，INSERT，及びDELETE）ができます。

(3)　結果セットタイプ

スクロールタイプと並行処理タイプを組み合わせると，結果セットタイプは6種類になります。結果セットタイプは，ConnectionクラスのcreateStatementメソッド，prepareStatementメソッド，又はprepareCallメソッドでStatementクラス（又はそのサブクラス）のインスタンスを取得する場合に指定します。

結果セットタイプとJDBCドライバでの提供可否を次の表に示します。

表16‒5　結果セットタイプとJDBCドライバでの提供可否

結果セットタイプ

JDBCドライバでの提供可否

スクロールタイプ

並行処理タイプ

順方向専用型

読み取り専用型

○

更新可能型

×

スクロール非反映型

読み取り専用型

○

更新可能型

×

スクロール反映型

読み取り専用型

×

更新可能型

×

（凡例）

○：提供されます。

×：提供されません。

注1

提供されていない結果セットタイプを指定した場合，エラーにはなりません。この場合，指定した結果セットタイプに一番近い結果セットタイプを使用してStatementクラス（又はそのサブクラス）のインスタンスを生成し，警告メッセージをConnectionクラスのSQLWarningに格納します。

注2

更新可能型の並行処理タイプはJDBCドライバでは提供されていないため，ResultSetクラスには使用できないメソッドがあります。これらの使用できないメソッドが呼び出された場合，無条件にSQLExceptionを投入します。使用できないメソッドについては，「制限事項があるクラスとメソッド」を参照してください。

(4)　スクロール型結果セット使用時の注意点

スクロール型結果セットでは，すべての検索データをJDBCドライバ内でキャッシングします。そのため，データ量が多い場合は，メモリ不足や性能劣化となる可能性が高くなります。したがって，スクロール型結果セットを使用する場合は，「SQLに条件を付加する」など，検索データ量をあらかじめ抑制しておく必要があります。

16.3.2　バッチ更新

JDBC2.0基本規格では，Statementクラス，PreparedStatementクラス，及びCallableStatementクラスにバッチ更新機能が追加されました。バッチ更新機能によって，複数のSQL，又は複数のパラメタ値を登録し，一括して実行できるようになります。

バッチ更新機能を使用する場合，ConnectionクラスのAUTOコミットモードをOFFにする必要があります。これは，バッチ更新の途中でエラーが発生した場合に，そのトランザクションの有効・無効をアプリケーション側で制御する必要があるためです。AUTOコミットモードがON（初期状態）の場合，バッチ更新の途中でエラーが発生しても，エラーが発生する一つ前までのSQL実行は有効となります。

バッチ更新を実行する場合，HiRDBの配列を使用した機能が使用できます。

配列を使用した機能は，HiRDBに対して大量のデータを高速に更新したい場合に有効です。なお，配列を使用した機能については，「配列を使用した機能」を参照してください。

配列を使用した機能を利用する場合の注意事項：

配列を使用した機能は，バージョン07-01以降のHiRDBの場合に使用できます。

Connect時に，プロパティとしてBLOCK_UPDATE=TRUEを指定（DataSourceを使用する場合はsetBlockUpdate(true)），又はJdbcDbpsvPreparedStatementのsetBlockUpdate(true)を指定する必要があります。

システムプロパティのHiRDB_for_Java_BLOCK_UPDATE=TRUEを指定した場合，配列機能を有効にできます。HiRDB_for_Java_BLOCK_UPDATEについては，表「Properties infoの設定内容」のBLOCK_UPDATEを参照してください。

実行するSQLには，?パラメタが一つ以上なければなりません（ストアドプロシジャでは使用できません）。また，PreparedStatementクラス，又はCallableStatementクラスのaddBatch()メソッドを使用する必要があります（StatementクラスのaddBatch(String sql)メソッドを使用すると，HiRDBでエラーとなります）。

実行できるSQL文は，INSERT文，UPDATE文，又はDELETE文です。それ以外のSQL文の場合，一括実行は行われないで逐次実行されます。

addBatch()メソッドで登録したパラメタセットが2件以上なければなりません。1件の場合は，一括処理は行われないで通常の処理となります。また，パラメタセットが30,000件を超える場合，30,000件ごとに分割して実行されます。

?パラメタにデータ長が32,001バイト以上のBINARYデータを指定した場合，配列を使用した機能は適用されないため，逐次実行されます。

HiRDBのBLOB型の列に対して32,001バイト以上のデータを指定した場合，配列を使用した機能は適用されないため，逐次実行されます。※２

各列に指定するデータ型はすべて同じにしてください。※１

DECIMAL型データを挿入する場合，配列に指定するDECIMAL型データの精度及び位取りは，HiRDBの表定義の属性に置き換えられます。配列に指定するDECIMAL型データの整数部けた数が，HiRDBの表定義属性の整数部けた数より大きい場合，オーバフローが発生してエラーとなります。

?パラメタにHiRDBの繰返し列を指定している場合，配列を使用した機能は利用できません。

配列を使用した機能を利用してバッチ更新の途中でエラーが発生した場合，エラーが発生する直前までの実行結果はすべて無効となります。

Cosminexus J2EEサーバモードのベーシックモードからは，配列を使用した機能は利用できません。

Cosminexusから使用する場合，PreparedStatementのsetBlockUpdateメソッドは使用できません。

addBatch機能を使用して大量のデータを一度に更新すると，大量のJavaメモリを使用します。そのため，Javaメモリの性能によってはバッチ更新の効果が得られない場合があるので注意が必要です。また，大量のデータを使用する場合，Java起動時のヒープサイズを指定してください（java -Xms32m JavaUP：Java起動時のJavaヒープを32メガバイトと設定）。

注※1

例えば，列1のデータの1件目のaddBatchをsetInt()で指定した場合，2件目以降のaddBatchもsetInt()を使用する必要があります。

注※2

配列を使用した機能を利用する場合，HiRDBのBLOB型列に対して?パラメタを指定するときは，次のことに注意してください。

?パラメタに指定するデータ長が32,001バイト未満の場合は，JDBCドライバ内部でBINARY型データとして扱うため，配列を使用した機能が実行されます。32,001バイト以上の場合は，配列を使用した機能は実行されません。

(1)　Statementクラスでのバッチ更新

Statementクラスでのバッチ更新の留意点を次に示します。

複数の更新系SQLを，addBatchメソッドで登録します。

登録した更新系SQLを，executeBatchメソッドで一括して実行します。

一括実行の結果として，それぞれの更新系SQLで更新された行数の配列を返却します。

一括実行の途中でエラーが発生した場合，BatchUpdateExceptionを投入します。

登録したSQL中に検索系SQLがある場合，executeBatchメソッド呼び出し時にBatchUpdateExceptionを投入します。

なお，JDBCドライバでは，複数のSQLを一括実行できないため，登録されたSQLを逐次実行することになります。

(2)　PreparedStatementクラスでのバッチ更新

PreparedStatementクラスでのバッチ更新の留意点を次に示します。

PreparedStatementインスタンス生成時に指定した更新系SQLに対する？パラメタを，通常の手順（setXXXメソッド）で設定します。

addBatchメソッドで？パラメタのセットを登録します。

登録した複数セットの？パラメタを，executeBatchメソッドで一括して実行します。

一括実行の結果として，それぞれの？パラメタのセットで更新した行数の配列を返却します。

一括実行の途中でエラーが発生した場合，BatchUpdateExceptionを投入します。

PreparedStatementインスタンス生成時に指定したSQLが検索系SQLの場合，executeBatchメソッド呼び出し時にBatchUpdateExceptionを投入します。

JDBCドライバでは，配列を使用した機能を利用した場合，複数行の？パラメタの一括実行ができます。配列を使用した機能を利用しない場合は，複数行の？パラメタを逐次実行することになります。

注意事項：

HiRDBの配列を使用した機能を利用する場合，「バッチ更新」の注意事項を参照してください。

2件目以降のaddBatchで，setXXXメソッドで指定するパラメタ数が不足していた場合，前回セットした値が引き継がれるため注意が必要です。例を次に示します。

例：INTEGER型列が2列(列1，列2)ある場合

prepstmt.setInt(1,100);
prepstmt.setInt(2,100);
prepstmt.addBatch();
prepstmt.setInt(1,200);
prepstmt.addBatch();
prepstmt.executeBatch();

［説明］

1件目のaddBatchで設定される値は，列1＝100，列2＝100となります。

1件目のaddBatchでパラメタ数が不足している場合は，エラーが発生します。

2件目のaddBatchで設定される値は，列1＝200，列2＝100となります。

2件目のaddBatchで，列2の情報が更新されていないため，1件目のaddBatchの情報が引き継がれます。

(3)　CallableStatementクラスでのバッチ更新

CallableStatementクラスでのバッチ更新の留意点を次に示します。

CallableStatementインスタンス生成時に指定したJavaストアドルーチンに対する入力パラメタを，通常の手順（setXXXメソッド）で設定します。

addBatchメソッドで入力パラメタのセットを登録します。

登録した複数セットの入力パラメタを，executeBatchメソッドで一括して実行します。

一括実行の結果として，それぞれの入力パラメタのセットで実行したJavaストアドルーチンの返却値（更新行数）の配列を返却します。

一括実行の途中でエラーが発生した場合，BatchUpdateExceptionを投入します。

CallableStatementインスタンス生成時に指定したJavaストアドルーチンが，更新行数を返却するルーチンでない場合，executeBatchメソッド呼び出し時にBatchUpdateExceptionを投入します。

CallableStatementインスタンス生成時に指定したJavaストアドルーチンが，出力パラメタ及び入出力パラメタを持つ場合，addBatchメソッド呼び出し時にBatchUpdateExceptionを投入します。

なお，JDBCドライバでは，複数行のストアドプロシジャの？パラメタを一括実行できないため，複数行のストアドプロシジャの？パラメタを逐次実行することになります。

注意事項：

ストアドプロシジャのバッチ更新は，INパラメタでだけ使用できます。OUTパラメタ，INOUTパラメタ，及び結果セット(ResultSet)を持つ場合はエラーとなります。

結果セット(ResultSet)を返すストアドプロシジャは，バッチ更新ではストアドプロシジャを実行するまで結果セットを返すかどうか分からないため，ストアドプロシジャ内で更新をしている場合，更新が反映されることがあるので注意してください。※１

配列を使用した機能は，ストアドプロシジャでは利用できません。?パラメタを持つSQLでだけ使用できます。

2件目以降のaddBatchで，setXXXメソッドで指定するパラメタ数が不足している場合，前回セットした値が引き継がれるため注意が必要です。※２

配列を使用した機能を利用する場合，「バッチ更新」の配列を使用した機能を利用する場合の注意事項を参照してください。

注※1

例えば，更新後にその結果を検索し取得するストアドプロシジャを，バッチ更新で実行すると，BatchUpdateExceptionが発生するが，更新は反映されてしまうことがあります。

注※2

INTEGER型列が2列(列1，列2)ある場合の例を次に示します。

callstmt.setInt(1,100);
callstmt.setInt(2,100);
callstmt.addBatch();
callstmt.setInt(1,200);
callstmt.addBatch();
callstmt.executeBatch();

［説明］

1件目のaddBatchで設定される値は，列1＝100，列2＝100となります。

1件目のaddBatchでパラメタ数が不足している場合は，エラーが発生します。

2件目のaddBatchで設定される値は，列1＝200，列2＝100となります。

2件目のaddBatchで列2の情報が更新されていないため，1件目のaddBatchの情報が引き継がれます。

16.3.3　追加されたデータ型

JDBC2.0基本規格では，幾つかの新たなJDBC SQLタイプが追加されました。追加されたJDBC SQLタイプを次に示します。

BLOB

CLOB

ARRAY

REF

DISTINCT

STRUCT

JAVA OBJECT

ただし，JDBCドライバではARRAY以外のJDBC SQLタイプは使用できません。

(1)　検索データ取得時のデータマッピング

ResultSetクラス及びCallableStatementクラスのgetXXXメソッドと各JDBC SQLタイプとのマッピングを次の表に示します。

マッピングできないJDBC SQLタイプに対してgetXXXメソッドが呼び出された場合，SQLExceptionを投入します。接続DBがどのJDBC SQLタイプを使用できるかについては「データ型，文字コード」を参照してください。

なお，getUnicodeStreamメソッドがJDBC2.0基本規格で推奨されないメソッドとなったため，代わりにgetCharacterStreamが追加されました。

表16‒6　ResultSetクラス及びCallableStatementクラスのgetXXXメソッドとJDBC SQLタイプとのマッピング（1/2）

getXXXメソッド

JDBC SQLタイプ

SMALLINT

INTEGER

FLOAT

REAL

DECIMAL

CHAR

getByte

○

○

○

○

○

○※2

getShort

◎

○

○

○

○

○※2

getInt

○

◎

○

○

○

○※2

getLong

○

○

○

○

○

○※2

getFloat

○

○

○

◎

○

○※2

getDouble

○

○

◎

○

○

○※2

getBigDecimal

○

○

○

○

◎

○※2

getBoolean

○

○

○

○

○

○

getString

○

○

○

○

○

◎

getBytes

×

×

×

×

×

×

getDate

×

×

×

×

×

○※2

getTime

×

×

×

×

×

○※2

getTimestamp

×

×

×

×

×

○※2

getAsciiStream

×

×

×

×

×

○

getUnicodeStream

×

×

×

×

×

○

getBinaryStream

×

×

×

×

×

×

getObject

○

○

○

○

○

○

getCharacterStream

×

×

×

×

×

○

getArray

×

×

×

×

×

×

getBlob

×

×

×

×

×

×

getClob※1

×

×

×

×

×

×

getRef※1

×

×

×

×

×

×

（凡例）

◎：マッピングすることを推奨します。

○：マッピングできます。

×：マッピングできません。

注※1

JDBCドライバでは使用できません。

注※2

文字列データからのデータ変換で，データベースから取得した文字列データの前後に半角スペースが存在する場合は，半角スペースを取り除いた後，getXXXメソッドが返却するJavaのデータ型に変換します。

Javaのデータ型に変換する場合の注意事項を次に示します。

文字列データに小数点以下の表現がある場合，getByte，getInt，getShort，又はgetLongのどれかのメソッドを実行すると，小数点以下を切り捨てて整数だけを変換し，返却します。

文字列データに全角文字が含まれている場合は，SQLExceptionを投入します。全角文字には，NCHAR型の列に列の定義長よりも短い文字列を格納している場合に補完する全角スペースも含みます。

文字列データをJavaのデータ型に変換した結果，オーバフローが発生する場合は，SQLExceptionを投入します。

UAPの実行環境がJDK又はJRE 1.2で，文字列データが指数の表記法（1.23E-23など）の場合，getLongメソッド，又はgetBigDecimalメソッドのどちらかを実行すると，SQLExceptionを投入します。

表16‒7　ResultSetクラス及びCallableStatementクラスのgetXXXメソッドとJDBC SQLタイプとのマッピング（2/2）

getXXXメソッド

JDBC SQLタイプ

VARCHAR

DATE

TIME

TIMESTAMP

LONGVARBINARY

ARRAY

getByte

○※2

×

×

×

×

×

getShort

○※2

×

×

×

×

×

getInt

○※2

×

×

×

×

×

getLong

○※2

×

×

×

×

×

getFloat

○※2

×

×

×

×

×

getDouble

○※2

×

×

×

×

×

getBigDecimal

○※2

×

×

×

×

×

getBoolean

○

×

×

×

×

×

getString

◎

○

○

○

○

×

getBytes

×

×

×

×

○

×

getDate

○※2

◎※3

×

○

×

×

getTime

○※2

×

◎

○

×

×

getTimestamp

○※2

○

×

◎

×

×

getAsciiStream

○

×

×

×

○

×

getUnicodeStream

○

×

×

×

○

×

getBinaryStream

×

×

×

×

◎

×

getObject

○

○

○

○

○

○

getCharacterStream

○

×

×

×

○

×

getArray

×

×

×

×

×

◎

getBlob

×

×

×

×

○

×

getClob※1

×

×

×

×

×

×

getRef※1

×

×

×

×

×

×

（凡例）

◎：マッピングすることを推奨します。

○：マッピングできます。

×：マッピングできません。

注※1

JDBCドライバでは使用できません。

注※2

文字列データからのデータ変換で，データベースから取得した文字列データの前後に半角スペースがある場合は，半角スペースを取り除いた後，getXXXメソッドが返却するJavaのデータ型に変換します。

Javaのデータ型に変換する場合の注意事項を次に示します。

文字列データに小数点以下の表現がある場合，getByte，getInt，getShort，又はgetLongのどれかのメソッドを実行すると，小数点以下を切り捨てて整数だけを変換し，返却します。

文字列データに全角文字が含まれている場合は，SQLExceptionを投入します。全角文字には，NCHAR型の列に列の定義長よりも短い文字列を格納している場合に補完する全角スペースも含みます。

文字列データをJavaのデータ型に変換した結果，オーバフローが発生する場合は，SQLExceptionを投入します。

UAPの実行環境がJDK又はJRE 1.2で，文字列データが指数の表記法（1.23E-23など）の場合，getLongメソッド，又はgetBigDecimalメソッドのどちらかを実行すると，SQLExceptionを投入します。

注※3

JDBC SQLタイプがDATE型の場合，setDateメソッドにjava.util.Calendarオブジェクトを指定して実行すると，指定したjava.util.Calendarオブジェクトを使用してデータを変換し，時刻データを切り捨てて日付データだけをデータベースに格納します。このとき，時刻データを切り捨てるため，getDateメソッドにjava.util.Calendarオブジェクトを指定して，setDateメソッドで格納したデータを取得しても，setDateメソッドに指定した日付と異なる日付を取得する場合があります。

（例）

日本標準時をデフォルトのタイムゾーンとするUAPで，setDateメソッド，及びgetDateメソッドに世界標準時のタイムゾーンを持つjava.util.Calendarオブジェクトを指定した場合の例を次に示します。

setDateメソッドに「2005-10-03」を表すjava.sql.Dateオブジェクトを指定して実行した場合，JDBCドライバは時刻部分に「00:00:00」を補完した後，タイムゾーンの違いによって9時間遅らせて「2005-10-02 15:00:00」とし，日付部分「2005-10-02」をデータベースに格納します。このデータをgetDateメソッドで取得した場合，データベースから日付部分「2005-10-02」を取得し，時刻部分に「00:00:00」を補完した後，タイムゾーンの違いによって9時間進めて「2005-10-02 09:00:00」とします。これによって，getDateメソッドの戻り値のjava.sql.Dateオブジェクトには，「2005-10-02」が設定されるため，setDateメソッドに指定した「2005-10-03」とは異なります。

(2)　？パラメタ設定時のデータマッピング

PreparedStatementクラス及びCallableStatementクラスのsetXXXメソッドと，マッピングされるJDBC SQLタイプを次の表に示します。使用できないJDBC SQLタイプの場合，setXXXメソッドはSQLExceptionを投入します。接続DBがどのJDBC SQLタイプを使用できるかについては「データ型，文字コード」を参照してください。

なお，setUnicodeStreamメソッドがJDBC2.0基本規格で推奨されないメソッドとなったため，代わりにsetCharacterStreamが追加されました。

表16‒8　PreparedStatementクラスのsetXXXメソッドと，マッピングされるJDBC SQLタイプ

PreparedStatementクラスのsetXXXメソッド

マッピングされるJDBC SQLタイプ

setCharacterStream

CHAR，VARCHAR，又はLONGVARCHAR

setRef※

REF

setBlob

LONGVARBINARY

setClob※

CLOB

setArray

ARRAY

注※

JDBCドライバでは使用できません。

PreparedStatementクラス及びCallableStatementクラスのsetXXXメソッドと各JDBC SQLタイプとのマッピングを次の表に示します。

表16‒9　PreparedStatementクラス及びCallableStatementクラスのsetXXXメソッドと各JDBC SQLタイプとのマッピング（1/2）

setXXXメソッド

JDBC SQLタイプ

SMALLINT

INTEGER

FLOAT

REAL

DECIMAL

CHAR

setByte

○

○

○

○

○

○

setShort

◎

○

○

○

○

○

setInt

○

◎

○

○

○

○

setLong

○

○

○

○

○

○

setFloat

○

○

○

◎

○

○

setDouble

○

○

◎

○

○

○

setBigDecimal

○

○

○

○

◎

○

setBoolean

○

○

○

○

○

○

setString

○

○

○

○

○

◎

setBytes

×

×

×

×

×

×

setDate

×

×

×

×

×

○

setTime

×

×

×

×

×

○

setTimestamp

×

×

×

×

×

○

setAsciiStream

×

×

×

×

×

○

setUnicodeStream

×

×

×

×

×

○

setBinaryStream

×

×

×

×

×

×

setObject

○

○

○

○

○

○

setCharacterStream

×

×

×

×

×

○

setArray

×

×

×

×

×

×

setBlob

×

×

×

×

×

×

setClob※

×

×

×

×

×

×

setRef※

×

×

×

×

×

×

（凡例）

◎：マッピングすることを推奨します。

○：マッピングできます。なお，変換元データの形式によっては，データの欠落や変換エラーとなることがあるため，注意してください。

×：マッピングできません。

注※

JDBCドライバでは使用できません。

表16‒10　PreparedStatementクラス及びCallableStatementのsetXXXメソッドと各JDBC SQLタイプとのマッピング（2/2）

setXXXメソッド

JDBC SQLタイプ

VARCHAR

DATE

TIME

TIMESTAMP

LONGVARBINARY

ARRAY

setByte

○

×

×

×

×

×

setShort

○

×

×

×

×

×

setInt

○

×

×

×

×

×

setLong

○

×

×

×

×

×

setFloat

○

×

×

×

×

×

setDouble

○

×

×

×

×

×

setBigDecimal

○

×

×

×

×

×

setBoolean

○

×

×

×

×

×

setString

◎

○

○

○

○

×

setBytes

×

×

×

×

○

×

setDate

○

◎※2

×

○

×

×

setTime

○

×

◎

○

×

×

setTimestamp

○

○

×

◎

×

×

setAsciiStream

○

×

×

×

○

×

setUnicodeStream

○

×

×

×

○

×

setBinaryStream

×

×

×

×

◎

×

setObject

○

○

○

○

○

○

setCharacterStream

○

×

×

×

○

×

setArray

×

×

×

×

×

◎

setBlob

×

×

×

×

○

×

setClob※1

×

×

×

×

×

×

setRef※1

×

×

×

×

×

×

（凡例）

◎：マッピングすることを推奨します。

○：マッピングできます。なお，変換元データの形式によっては，データの欠落や変換エラーとなることがあるため，注意してください。

×：マッピングできません。

注※1

JDBCドライバでは使用できません。

注※2

JDBC SQLタイプがDATE型の場合，setDateメソッドにjava.util.Calendarオブジェクトを指定して実行すると，指定したjava.util.Calendarオブジェクトを使用してデータを変換し，時刻データを切り捨てて日付データだけをデータベースに格納します。このとき，時刻データを切り捨てるため，getDateメソッドにjava.util.Calendarオブジェクトを指定して，setDateメソッドで格納したデータを取得しても，setDateメソッドに指定した日付と異なる日付を取得する場合があります。

（例）

日本標準時をデフォルトのタイムゾーンとするUAPで，setDateメソッド，及びgetDateメソッドに世界標準時のタイムゾーンを持つjava.util.Calendarオブジェクトを指定した場合の例を次に示します。

setDateメソッドに「2005-10-03」を表すjava.sql.Dateオブジェクトを指定して実行した場合，JDBCドライバは時刻部分に「00:00:00」を補完した後，タイムゾーンの違いによって9時間遅らせて「2005-10-02 15:00:00」とし，日付部分「2005-10-02」をデータベースに格納します。このデータをgetDateメソッドで取得した場合，データベースから日付部分「2005-10-02」を取得し，時刻部分に「00:00:00」を補完した後，タイムゾーンの違いによって9時間進めて「2005-10-02 09:00:00」とします。これによって，getDateメソッドの戻り値のjava.sql.Dateオブジェクトには，「2005-10-02」が設定されるため，setDateメソッドに指定した「2005-10-03」とは異なります。

16.4　JDBC2.0 Optional Package

16.4.1　DataSourceとJNDIを使用したDB接続

DataSourceとJNDIを使用したDB接続は，JDBC2.0 Optional Packageで使用できるようになりました。

必ずしもJNDIを使用する必要はありませんが，JNDIを使用することで接続情報の設定が1回で済むというメリットがあります。DataSourceクラスのインタフェース定義，及びJNDIは，JDKに標準で含まれていないため，AP開発をする場合には，JavaSoftのWebサイトから入手する必要があります。

DataSourceとJNDIを使用したDB接続の手順を次に示します。

DataSourceオブジェクトの生成

接続情報の設定

JNDIへのDataSourceの登録

JNDIからのDataSourceの取得

DB接続

JNDIを使用しない場合は，3及び4の操作をする必要はありません。

JNDIを使用する場合，1〜3の操作は1回だけ実行します。その後，4及び5の操作をするだけで，DB接続ができます。また，4の操作の後，必要に応じて接続情報を変更できます。

(1)　DataSourceオブジェクトの生成

JDBCドライバが提供する，DataSourceクラスのオブジェクトを生成します。

DataSourceクラスのオブジェクト生成で必要となる，JDBCドライバのDataSourceクラス名はJdbhDataSourceとなります。

DataSourceクラスのオブジェクトの生成例を次に示します。

 JP.co.Hitachi.soft.HiRDB.JDBC.JdbhDataSource  ds = null ;
 ds = new JP.co.Hitachi.soft.HiRDB.JDBC.JdbhDataSource() ;

(2)　接続情報の設定

DataSourceオブジェクトに対して，接続情報設定用メソッドを呼び出し，接続情報の設定をします。接続情報取得用のメソッドも使用できるため，現在の接続情報の確認もできます。接続情報設定／取得メソッドについては，「接続情報設定／取得インタフェース」を参照してください。

(3)　JNDIへのDataSourceの登録

DataSourceオブジェクトをJNDIに登録します。

JNDIは，その実行環境によって幾つかのサービスプロバイダを選択できます。

DataSourceオブジェクトのJNDIへの登録例を次に示します（Windowsの場合の例です）。なお，登録例では，サービスプロバイダの一つである，File Systemサービスプロバイダを使用しています。ほかのサービスプロバイダについては，JNDIのドキュメントを参照してください。

 // JDBCドライバが提供するDataSourceクラスのオブジェクトを生成する
 JP.co.Hitachi.soft.HiRDB.JDBC.JdbhDataSource  ds;
 ds = new JP.co.Hitachi.soft.HiRDB.JDBC.JdbhDataSource();

 // 接続情報を設定する
         ：
 // システムプロパティを取得する
 Properties sys_prop = System.getProperties() ;

 // File Systemサービスプロバイダのプロパティを設定する
 sys_prop.put(Context.INITIAL_CONTEXT_FACTORY,
              "com.sun.jndi.fscontext.RefFSContextFactory");
 // File Systemサービスプロバイダで使用するディレクトリを設定する
 // (この場合，c:¥JNDI_DIRの下に登録される)
 sys_prop.put(Context.PROVIDER_URL, "file:c:¥¥" + "JNDI_DIR");

 // システムプロパティを更新する
 System.setProperties(sys_prop) ;
 // JNDIを初期化する
 Context ctx = new InitialContext();

 // HiRDBドライバが提供するDataSourceクラスのオブジェクトを，
 // jdbc/TestDataSourceという論理名称でJNDIに登録する
 ctx.bind("jdbc" + "¥¥" + "TestDataSource", ds);
                       ：

なお，JDBC2.0規格では，JNDIに登録する論理名称は，"jdbc"というサブコンテキスト下（登録例ではjdbc/TestDataSource）に登録するように推奨されています。

(4)　JNDIからのDataSourceの取得

JNDIからDataSourceオブジェクトを取得します。

JNDIからのDataSourceオブジェクトの登録例を次に示します（Windowsの場合の例です）。なお，登録例では，サービスプロバイダの一つである，File Systemサービスプロバイダを使用しています。ほかのサービスプロバイダについては，JNDIのドキュメントを参照してください。

 // システムプロパティを取得する
 Properties sys_prop = System.getProperties() ;

 // File Systemサービスプロバイダのプロパティを設定する
 sys_prop.put(Context.INITIAL_CONTEXT_FACTORY,
              "com.sun.jndi.fscontext.RefFSContextFactory");
 // File Systemサービスプロバイダで使用するディレクトリを設定する
 // (この場合，c:¥JNDI_DIRの下に登録されている)
 sys_prop.put(Context.PROVIDER_URL, "file:c:¥¥" + "JNDI_DIR");
 // システムプロパティを更新する
 System.setProperties(sys_prop) ;

 // JNDIを初期化する
 Context ctx = new InitialContext();
 // jdbc/TestDataSourceという論理名称のオブジェクトをJNDIから取得する
 Object obj = ctx.lookup("jdbc" + "¥¥" + "TestDataSource") ;

 // 取り出したオブジェクトを，DataSourceクラスの型にキャストする
 DataSource ds = (DataSource)obj;
               ：

(5)　DB接続

DataSourceオブジェクトに対して，getConnectionメソッドを呼び出します。

getConnectionメソッドの呼び出し例を次に示します。

 DataSource ds

 // JNDIからDataSourceオブジェクトを取得する
                      ：
 // getConnectionメソッドを発行する
 Connection con = ds.getConnection();
   又は
 Connection con = ds.getConnection("USERID", "PASSWORD");※

注※

メソッドの引数（認可識別子，パスワード）は，DataSourceオブジェクトに設定した接続情報よりも優先されます。必要な接続情報がDataSourceオブジェクトに設定されていない場合，接続情報の内容が不正な場合，又はHiRDBサーバとの接続に失敗した場合，getConnectionメソッドはSQLExceptionを投入します。

JNDIからDataSourceオブジェクトを取得後，必要に応じて接続情報を再度設定できます。この場合，DataSourceオブジェクトを，JDBCドライバが提供するDataSourceクラスの型にキャストしてから設定する必要があります。例を次に示します。

 DataSource ds
 JP.co.Hitachi.soft.HiRDB.JDBC.JdbhDataSource  hirdb_ds;

 // JNDIからDataSourceオブジェクトを取得する
                      ：
 // DataSourceオブジェクトを，JDBCドライバが提供する
 // DataSourceクラスの型にキャストする
 dbp_ds = (JP.co.Hitachi.soft.HiRDB.JDBC.JdbhDataSource)ds;

 // 接続情報を再設定する
           ：

16.4.2　接続プール

JDBC2.0 Optional Packageでは，DBとの接続をプールする機能が規定されています。接続プールの概要を次に示します。

既存のアプリケーションに影響を与えません。つまり，アプリケーションは接続プールの有無を意識する必要がありません。ただし，DB接続がDriverManagerを使用する方法ではなく，JDBC2.0 Optional Packageで導入されたDataSourceとJNDIを使用する方法で行っていることが前提となります。

接続プールを行う機能自体は，JDBC規格の機能範囲外です。これは，システム構築時に，接続プール機能をユーザが任意に選択できるようにするためです（ユーザが自分で作成するか，APServerベンダ提供のものを使用するか，又はJDBCベンダが提供するものを使用します）。

接続プール機能では，アプリケーションとのインタフェースとしてDataSourceクラスを使用できます。このDataSourceクラスは，JDBCドライバが提供するDataSourceクラスとは別のものです。

JDBCドライバでは，接続プール機能とのインタフェースとして，ConnectionPoolDataSourceクラスとPooledConnectionクラスを使用できます。

JDBCドライバが提供するConnectionPoolDataSourceクラスは，JDBCドライバが提供するDataSourceクラスと同様に，接続情報の設定／取得用のメソッドを使用できます。

接続プールに関連するクラスを次の表に示します。

表16‒11　接続プールに関連するクラス

クラス

概　要

javax.sql.DataSource

接続プール機能が提供します。

DB接続のとき，アプリケーションとのインタフェースとして使用します。

通常，接続プールの制御はこのクラスで行います。

通常，JNDIに登録して使用します。

JDBCドライバが提供するDataSourceクラスとは別のものです。

javax.sql.ConnectionPoolDataSource

JDBCドライバが提供します。

DB接続に必要な，接続情報設定／取得用のメソッドを使用できます。

通常，アプリケーションから直接使用することはなく，接続プール機能で使用されます。

通常，JNDIに登録して使用します。

接続プール機能は，このクラスのオブジェクトから，PooledConnectionオブジェクトを取得します。

javax.sql.PooledConnection

JDBCドライバが提供します。

通常，アプリケーションから直接使用することはなく，接続プール機能で使用されます。

接続プール機能は，このクラスのオブジェクトをプールの対象とします。

接続プール機能は，このクラスのオブジェクトから，アプリケーションが使用するConnectionオブジェクトを取得します。

javax.sql.ConnectionEventListener

接続プール機能が提供します。

接続プール機能は，接続の切断／SQLエラーなどを，このクラスのオブジェクトを通して検知することで，接続プールの契機とします。

表「接続プールに関連するクラス」のクラスのインタフェース定義は，JDKのバージョンによってはJDKに標準で含まれていないため，接続プール機能を使用する場合はJavaSoftのWebサイトで確認する必要があります。

表「接続プールに関連するクラス」の，JDBCドライバが提供するクラスのパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

ConnectionPoolDataSourceクラス名称：JdbhConnectionPoolDataSource

PooledConnectionクラス名称：JdbhPooledConnection

なお，JDBCドライバが提供するConnectionPoolDataSourceクラスの接続情報の設定は，JDBCドライバが提供するDataSourceクラスの接続情報の設定と同じです。

16.4.3　分散トランザクション

JDBC2.0 Optional Packageでは，接続プール機能の拡張として，X/OpenのXA規格を基にしたトランザクションマネジャ（TM）との連携による，分散トランザクションが規定されています。分散トランザクションの概要を次に示します。

既存のアプリケーションには，ほとんど影響を与えません。ただし，「直接commitしてはいけません」などの制限があります。また，接続プールの場合と同様に，DB接続はDriverManagerを使用する方法ではなく，JDBC2.0 Optional Packageで導入されたDataSourceとJNDIを使用する方法で行っていることが前提となります。

TMとの連携をするトランザクション連携機能は，接続プールの場合と同様に，JDBC規格の機能範囲外です。

通常，トランザクション連携機能は，接続プール機能の拡張として実装され，TMとのインタフェースとして，TMが提供するJTAやJTSを使用します。なお，JTA規格1.0に準拠した動作は保証しません。

トランザクション連携機能では，接続プールの場合と同様に，アプリケーションとのインタフェースとしてDataSourceクラスを使用できます。このDataSourceクラスは，JDBCドライバが提供するDataSourceクラスとは別のものです。

JDBCドライバでは，トランザクション連携機能とのインタフェースとして，XADataSourceクラスとXAConnectionクラスを使用できます。また，TMとのインタフェースとしてXAResourceクラスを使用できます。

JDBCドライバが提供するXADataSourceクラスは，JDBCドライバが提供するDataSourceクラスと同様に，接続情報の設定／取得用のメソッドを使用できます。

接続プールの場合と同様に，アプリケーションで使用するConnectionオブジェクトはXAConnectionクラスが生成します。ただし，PooledConnectionクラスやJDBCドライバが提供する，DataSourceクラスが生成するConnectionオブジェクトと比べて，次の点が異なります。

Connectionクラスのcommitメソッド及びrollbackメソッドの呼び出しは，SQLExceptionとなります。つまり，アプリケーションから直接トランザクションの決着はできません。

AutoCommitのデフォルトモードはOFFです。

AutoCommitのモードをONにするConnectionクラスのsetAutoCommit（true）メソッドの発行は，SQLExceptionとなります。

分散トランザクションに関連するクラスを次の表に示します。

表16‒12　分散トランザクションに関連するクラス

クラス

概　要

javax.sql.DataSource

トランザクション連携機能が提供します。

DB接続のとき，アプリケーションとのインタフェースとして使用します。

通常，TMとの連携と，接続プールの制御は，このクラスで行われます。

通常，JNDIに登録して使用します。

JDBCドライバが提供するDataSourceクラスとは別のものです。

javax.sql.XADataSource

JDBCドライバが提供します。

DB接続に必要な，接続情報設定／取得用のメソッドを使用できます。

通常，アプリケーションから直接使用されることはなく，トランザクション連携機能によって使用されます。

通常，JNDIに登録して使用します。

トランザクション連携機能は，このクラスのオブジェクトからXAConnectionオブジェクトを取得します。

javax.sql.XAConnection

JDBCドライバが提供します。

PooledConnectionクラスのサブクラスです。つまり，接続プールに関連するメソッドをすべて引き継ぎます。

通常，アプリケーションから直接使用されることはなく，トランザクション連携機能によって使用されます。

トランザクション連携機能は，このクラスのオブジェクトをプールの対象とします。

トランザクション連携機能は，このクラスのオブジェクトからアプリケーションが使用する，Connectionオブジェクトを取得します。

javax.sql.ConnectionEventListener

トランザクション連携機能が提供します。

トランザクション連携機能は，接続の切断／SQLエラーなどをこのクラスのオブジェクトを通して検知することで，接続プールの契機とします。

javax.transaction.xa.XAResource

JDBCドライバが提供します。

TMで使用されるXA関連のメソッドを使用できます。

javax.transaction.xa.Xid

JDBCドライバ及びTMが提供します。

XAResourceクラスのメソッドの引数／戻り値として使用します。

表「分散トランザクションに関連するクラス」のクラスのインタフェース定義はJDKに標準で含まれていないため，トランザクション連携機能の開発の際には，JavaSoftのWebサイトから入手する必要があります。

表「分散トランザクションに関連するクラス」のJDBCドライバが提供するクラスの，パッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

XADataSourceクラス名称：JdbhXADataSource

XAConnectionクラス名称：JdbhXAConnection

XAResourceクラス名称：JdbhXAResource

Xidクラス名称：JdbhXid

なお，JDBCドライバが提供するXADataSourceクラスの接続情報の設定は，JDBCドライバが提供するDataSourceクラスの接続情報の設定と同じです。

16.5　JARファイルアクセス機能

Javaストアドルーチンを使用する場合，JARファイルをHiRDBへ登録する必要があります。このとき，JDBCドライバ経由で処理がされます。

ここでは，JARファイルの登録，削除，及び再登録をするときの，クラス名及びメソッド名について説明します。

16.5.1　クラス名

クラス名を次に示します。

JP.co.Hitachi.soft.HiRDB.JDBC.Jdbh_JARAccess

16.5.2　メソッド名

(1)　JARファイルのHiRDBへの登録

(a)　書式

  public  void  Jdbh_JARInstall(java.sql.Connection   con,
                                String                JarName)

(b)　引数

con：

JARファイルを登録するためのJava.sql.Connectionオブジェクトを指定します。

JarName：

JARファイルの名称を指定します。

絶対パス名又は相対パス名で指定します。ほかのサーバマシンのファイルは指定できません。また，ワイルドカードは指定できません。

(c)　戻り値

なし。

(d)　例外

SQLException：データベースへのアクセスエラーが発生した場合

(e)　機能

Java.sql.Connectionオブジェクトを使用して，指定したJARファイルをHiRDBへ登録します。HiRDBに，既に同じ名称のファイルがある場合はエラーとなります。

(2)　JARファイルのHiRDBからの削除

(a)　書式

  public  void  Jdbh_JARUnInstall(java.sql.Connection   con,
                                  String                JarName)

(b)　引数

con：

JARファイルを削除するためのJava.sql.Connectionオブジェクトを指定します。

JarName：

JARファイルの名称を指定します。

絶対パス名又は相対パス名では指定できません。また，ワイルドカードは指定できません。

(c)　戻り値

なし。

(d)　例外

SQLException：データベースへのアクセスエラーが発生した場合

(e)　機能

Java.sql.Connectionオブジェクトを使用して，指定したJARファイルをHiRDBから削除します。

(3)　JARファイルのHiRDBへの再登録

(a)　書式

  public  void  Jdbh_JARReInstall(java.sql.Connection   con,
                                  String                JarName)

(b)　引数

con：

JARファイルを再登録するためのJava.sql.Connectionオブジェクトを指定します。

JarName：

JARファイルの名称を指定します。

絶対パス名又は相対パス名で指定します。ほかのサーバマシンのファイルは指定できません。ワイルドカードは指定できません。

(c)　戻り値

なし。

(d)　例外

SQLException：データベースへのアクセスエラーが発生した場合

(e)　機能

Java.sql.Connectionオブジェクトを使用して，指定したJARファイルをHiRDBに再登録します。HiRDBに，既に同じ名称のファイルがある場合は上書きされます（エラーにはなりません）。

16.6　Arrayクラス

JDBCドライバでは，Arrayクラスを使用して繰返し列をアクセスできます。各メソッドの注意事項を次に示します。

16.6.1　getArray

MAPは使用できません。

このメソッドで返すオブジェクトの型を次の表に示します。

表16‒13　getArrayで返すオブジェクトの型

HiRDBのデータ型

オブジェクトの型

INTEGER

java.lang.Integer[]

SMALLINT

java.lang.Short[]

DECIMAL

java.math.BigDecimal[]

FLOAT，DOUBLE PRECISION

java.lang.Double[]

SMALLFLT，REAL

java.lang.Float[]

CHAR

java.lang.String[]

VARCHAR

java.lang.String[]

NCHAR

java.lang.String[]

NVARCHAR

java.lang.String[]

MCHAR

java.lang.String[]

MVARCHAR

java.lang.String[]

DATE

java.sql.Date[]

TIME

java.sql.Time[]

TIMESTAMP

java.sql.Timestamp[]

16.6.2　getResultSet

MAPは使用できません。

このメソッドで返す結果セットは，配列要素ごとに1行を含んでいて，各行には二つの列があります。二つ目の列には要素の値が格納され，一つ目の列には配列内の対応する要素のインデクスが格納されます（最初の配列要素のインデクスは1）。行は，インデクスに基づいて昇順で並べられます。

ステートメントがクローズされると，このメソッドで返した結果セットもクローズします。

このメソッドで返す結果セットの属性値を次の表に示します。

表16‒14　getResultSetで返す結果セットの属性値

ResultSetMetaDataクラスのメソッド名

メソッドが返す値

一つ目の列

二つ目の列

getCatalogName

null

null

getColumnClassName

java.lang.Integer

データベースの列の属性に依存

getColumnDisplaySize

10

データベースの列長に依存

getColumnLabel

JDBC_Array_Index

データベースの列名に依存

getColumnName

getColumnType

java.sql.Types.INTEGER

データベースの列の属性に依存

getColumnTypeName

INTEGER

getPrecision

10

データベースの列属性と列長に依存

getScale

0

getSchemaName

null

null

getTableName

isAutoIncrement

true

false

isCaseSensitive

false

データベースの列の属性に依存

isCurrency

false

isDefinitelyWritable

isNullable

java.sql.ResultSetMetaData.columnNoNulls

データベースの列の属性に依存

isReadOnly

true

false

isSearchable

false

true

isSigned

データベースの列の属性に依存

isWritable

false

16.7　繰返し列を?パラメタにしたときの値の指定方法

繰返し列を?パラメタにしたときの値の指定方法について説明します。

?パラメタに値を指定する方法として，Arrayインタフェースを実装したクラスのオブジェクト，又は配列のオブジェクトを，setObjectメソッドで指定します。

16.7.1　Arrayインタフェースを実装したクラスのオブジェクトの指定方法

Arrayインタフェースを実装したクラスのオブジェクトを作成し，そのオブジェクトをsetArrayメソッド又はsetObjectメソッドで指定します。

JDBCドライバでは，Array.getBaseTypeメソッドを使用して，そのオブジェクトのデータ型を調べます。そのとき，データベースのデータ型とオブジェクトのデータ型が異なると，SQLExceptionを投入します。データベースのデータ型とオブジェクトのデータ型については，「データ型」を参照してください。

実際のデータは，引数なしのArray.getArray()メソッドで取得します。そのときに返ってこなければならないオブジェクトの型を次の表に示します。返ってきたオブジェクトの型が次の表と異なる場合は，SQLExceptionを投入します。

表16‒15　引数なしのArray.getArray()メソッド取得時に返ってくるオブジェクトの型

Array.getBaseTypeメソッドで返すデータ型

引数なしのArray.getArray()メソッド取得時に返ってくるオブジェクトの型

java.sql.Types.INTEGER

int[]，又はjava.lang.Integer[]

java.sql.Types.SMALLINT

short[]，又はjava.lang.Short[]

java.sql.Types.DECIMAL

java.math.BigDecimal[]

java.sql.Types.FLOAT

double[]，又はjava.lang.Double[]

java.sql.Types.REAL

float[]，又はjava.lang.Float[]

java.sql.Types.CHAR

java.lang.String[]

java.sql.Types.VARCHAR

java.lang.String[]

java.sql.Types.DATE

java.sql.Date[]

java.sql.Types.TIME

java.sql.Time[]

java.sql.Types.LONGVARBINARY

java.io.DataInputStream[]

java.sql.Types.TIMESTAMP

java.sql.Timestamp[]

16.7.2　配列オブジェクトをsetObjectメソッドで指定する方法

データベースのデータ型と配列オブジェクトのデータ型が異なる場合は，SQLExceptionを投入します。

setObjectメソッドで指定したSQLのデータ型と，配列オブジェクトのデータ型が，次の表と異なる場合はSQLExceptionを投入します。

表16‒16　setObjectメソッドで指定したSQLのデータ型と配列オブジェクトのデータ型

setObjectメソッドで指定したSQLのデータ型

配列オブジェクトのデータ型

java.sql.Types.INTEGER

int[]又はjava.lang.Integer[]

java.sql.Types.SMALLINT

short[]又はjava.lang.Short[]

java.sql.Types.DECIMAL

java.math.BigDecimal[]

java.sql.Types.FLOAT

double[]又はjava.lang.Double[]

java.sql.Types.REAL

float[]又はjava.lang.Float[]

java.sql.Types.CHAR

java.lang.String[]

java.sql.Types.VARCHAR

java.lang.String[]

java.sql.Types.DATE

java.sql.Date[]

java.sql.Types.TIME

java.sql.Time[]

java.sql.Types.LONGVARBINARY

java.io.DataInputStream[]

java.sql.Types.TIMESTAMP

java.sql.Timestamp[]

16.7.3　繰返し列の要素と?パラメタに指定したオブジェクトとの関係

Arrayインタフェースを実装したクラスの，オブジェクトからArray.getArray()メソッドで得られた，配列オブジェクトの順序と繰返し列の順序は同じになります。そのため，配列オブジェクトの第1要素は繰返し列の第1要素となり，配列オブジェクトの第2要素は繰返し列の第2要素となります。

setObjectメソッドで指定した配列オブジェクトも同じです。また，要素数1だけの配列オブジェクトも指定できます。

16.7.4　繰返し列の途中の要素にナル値を指定する方法

Arrayインタフェースを実装したクラスのオブジェクト，又は配列のオブジェクトに関係なく，要素の途中にナル値を指定する場合は，該当する配列の要素をnullにします。そのため，繰返し列の第2要素をナル値にしたい場合は，Arrayインタフェースを実装したクラスのオブジェクトから，Array.getArray()メソッドで得られた配列オブジェクトの第2要素をnullにします。

setObjectメソッドで指定した配列オブジェクトも同じです。

16.8　HiRDB JDBCドライバの提供機能

JDBC2.0で規格されていないHiRDB JDBCドライバだけの機能について説明します。

16.8.1　提供クラス

HiRDB JDBCドライバだけで提供する機能を使用する場合，次のクラスを使用する必要があります。

インタフェース名称

主な機能

クラス名称

PreparedStatement

?パラメタ付きのSQLの実行

?パラメタに対する値の設定

Statementの機能（Statementのサブクラスであるため，機能はすべて引き継ぎます）

JdbcDbpsvPreparedStatement

16.8.2　setBlockUpdate

(1)　機能

?パラメタを使用したデータベースの更新で，複数のパラメタセットを一度に処理するかどうかを設定します。

(2)　形式

public void setBlockUpdate(boolean Mode)

(3)　引数

boolean Mode：

複数のパラメタセットを一度に処理するかどうかの設定情報です。省略した場合，falseが仮定されます。

true：

一度に処理します。

false：

パラメタセットを一つずつ分割して処理します。※

注※

DB接続時，DriverManagerクラスのgetConnectionメソッドの引数にBLOCK_UPDATE=TRUEを指定した場合，この機能のデフォルトはtrueとなります。また，システムプロパティのHiRDB_for_Java_BLOCK_UPDATE=TRUEを指定した場合も，この機能のデフォルトはtrueとなります。

(4)　戻り値

なし。

(5)　機能詳細

?パラメタを使用したデータベースの更新（INSERT，UPDATE，又はDELETE）で，複数のパラメタセットを一度に処理するかどうかを設定します。

なお，実際にパラメタセットが一度に処理されるかどうかは，配列を使用した機能の使用方法で決まります。配列を使用した機能の使用方法については，「配列を使用した機能」を参照してください。

(6)　発生する例外

なし。

(7)　注意事項

複数行の?パラメタの一括処理をする方法については，「Properties infoの設定内容」，及び「バッチ更新」を参照してください。

16.8.3　getBlockUpdate

(1)　機能

?パラメタを使用したデータベースの更新で，複数のパラメタセットを一度に処理するかどうかを取得します。

(2)　形式

public boolean getBlockUpdate()

(3)　引数

なし。

(4)　戻り値

boolean：

複数のパラメタセットを一度に処理するかどうかの情報です。省略した場合，falseが仮定されます。

true：

一度に処理します。

false：

パラメタセットを一つずつ分割して処理します。※

注※

DB接続時，DriverManagerクラスのgetConnectionメソッドの引数にBLOCK_UPDATE=TRUEを指定した場合，この機能のデフォルトはtrueとなります。

(5)　機能詳細

?パラメタを使用したデータベースの更新（INSERT，UPDATE，又はDELETE）で，複数のパラメタセットを一度に処理するかどうかを取得します。

(6)　発生する例外

なし。

16.9　BLOB型を使用する場合の注意事項

BLOB型を使用する場合のメソッドの注意点などについて説明します。

16.9.1　各メソッドの処理内容と注意事項

各メソッドの処理内容と注意事項を次の表に示します。

表16‒17　各メソッドの処理内容と注意事項

Blobインタフェースクラスのメソッド名

処理内容と注意事項

getBinaryStream

JdbhInputStreamを実装としたInputStreamクラスを返します。取得できるデータ長は2,147,483,639までです。

getBytes(long pos, int length)

指定したpos位置から，最大lengthまでのデータをbyte[]オブジェクトで返します。データベースの内容がナル値の場合，指定した位置からデータが取得できない場合，又は0バイトデータの場合は，nullを返します。ただし，lengthの値は2,147,483,639まで有効であるため，それを超えるとSQLExceptionを投入します。

length()

実データ長を返します。

position(Blob pattern,long start)

position(pattern.getBytes(1, (int)(pattern.length())), start)に置き換えて実行します。ただし，patternにnullを指定した場合は，NullPointerExceptionを投入します。

position(byte[] pattern,long start)

指定したstart位置から，patternに合った位置を返します。返す値は>=startとなります。patternに合った位置が見付からなかった場合，-1を返します。ただし，pattern.lengthの値が2,147,483,639まで有効であるため，それを超えるとSQLExceptionを投入します。また，patternにnullを指定した場合は，NullPointerExceptionを投入します。

setBinaryStream(long pos)

無条件にSQLExceptionを投入します。

setBytes(long pos,byte[] bytes)

setBytes(long pos,byte[] bytes,int offset,int len)

truncate(long len)

注

位置付け子機能を使用してデータを取得した場合，ResultSet.close()やStatement.close()などを行うと，データが取得できなくなります。

16.9.2　?パラメタでの指定方法

？パラメタに値を指定する場合，PreparedStatement. setBlob()メソッド，及びCallableStatement.setBlob()メソッドを使用する方法があります。これらを使用する場合の注意点を次に示します。

(1)　Blobインタフェースを実装したオブジェクトを使用する場合

setBlob()メソッドを使用する場合，Blobインタフェースを実装したオブジェクトを指定する必要があります。また，Blobインタフェースを実装したオブジェクトをUAPが作成する必要があります。

JDBCでは，Blob.getBytes()メソッドで，設定する値をbyte[]の形式で取得します。次に示す方法で，設定する値を取得します。

Blob.getBytes(1, (int)(Blob.length()))

UAPでは，getBytes()メソッドとlength()メソッドでは，正常な値を返す必要があります。JDBCでは，これらのメソッドで返される値が正しいものとして動作します。

(2)　ResultSet.getBlob()メソッド，又はCallableStatement.getBlob()メソッドで取得したBlobオブジェクトを使用する場合

JDBCからの実行結果として，ResultSet.getBlob()メソッドやCallableStatement.getBlob()メソッドで取得したBlobオブジェクトをそのまま使用する場合，位置付け子機能を使用したアクセスでの取得かどうかで動作が異なります。

位置付け子機能を使用したアクセスでない場合

ResultSet.getBlob()メソッドやCallableStatement.getBlob()メソッドで取得した時点でのデータを，?パラメタの値とします。

位置付け子機能を使用したアクセスの場合

setBlob()メソッドを呼び出した場合に，内部でBlob.getBytes(1, (int)(Blob.length()))を実行します。?パラメタの値は，Blob.getBytes(1, (int)(Blob.length()))で取得されたデータとなります。

16.10　システムプロパティの設定

16.10.1　配列機能の設定

(1)　概要

プログラム実行時に，システムプロパティのHiRDB_for_Java_BLOCK_UPDATEを設定することで，?パラメタを使用したデータベースの更新（INSERT，UPDATE，又はDELETE）で，複数のパラメタセットを一度に処理するかどうかを指定できます。

(2)　設定方法

プログラム実行時に，javaコマンドの-DオプションでシステムプロパティのHiRDB_for_Java_BLOCK_UPDATEを設定します。

(a)　機能

?パラメタを使用したデータベースの更新（INSERT，UPDATE，又はDELETE）で，複数のパラメタセットを一度に処理するかどうかを設定します。

(b)　形式

java -D<name>=<value> クラス名

(c)　説明

name：

HiRDB_for_Java_BLOCK_UPDATE

value：

TRUE：一度に処理します。

FALSE：パラメタセットを一つずつ分割して処理します。

上記以外：パラメタセットを一つずつ分割して処理します。

(d)　機能詳細

?パラメタを使用したデータベースの更新で，複数のパラメタセットを一度に処理するかどうかを設定します。

実際にパラメタセットが一度に処理されるかどうかは，配列を使用した機能の使用方法で決まります。配列を使用した機能の使用方法については，「配列を使用した機能」を参照してください。

(e)　注意事項

-D<name>=<value> を指定する場合は，指定内容に空白を含めないでください。指定内容が次の例のどれかに該当する場合，正しく設定されません。△は空白を示します。

-D△<name>=<value>

-D<name>△=<value>

-D<name>=△<value>

DB接続時にBLOCK_UPDATE（データソース接続時はsetBlockUpdateメソッド）を設定している場合は，BLOCK_UPDATE，又はsetBlockUpdateメソッドの設定値が有効になります。

PreparedStatementクラスのsetBlockUpdateメソッドを使用した場合，DB接続時の設定に関係なく，複数のパラメタセットを一度に処理するかどうかの設定を変更できます。

複数行の?パラメタの一括処理をする方法については，「Properties infoの設定内容」，及び「バッチ更新」を参照してください。

(f)　設定例

システムプロパティのHiRDB_for_Java_BLOCK_UPDATEの設定例を次に示します。

 java -DHiRDB_for_Java_BLOCK_UPDATE=TRUE TestUP

16.10.2　SQLの検索項目，又は?パラメタの最大数の設定

(1)　概要

プログラム実行時に，システムプロパティのHiRDB_for_Java_SQL_IN_NUM，又はHiRDB_for_Java_SQL_OUT_NUMを設定することで，SQLの前処理時に取得する検索項目，出力?パラメタ，入力?パラメタ，又は入出力?パラメタ情報の最大数を指定できます。

(2)　設定方法

プログラム実行時に，javaコマンドの-Dオプションで，システムプロパティのHiRDB_for_Java_SQL_OUT_NUM，HiRDB_for_Java_SQL_IN_NUMのどちらか，又は両方を設定します。

(a)　機能

SQLの前処理時に取得する検索項目，出力?パラメタ，入力?パラメタ，又は入出力?パラメタ情報の最大数を指定します。

(b)　形式

java -D<name>=<value> クラス名

(c)　説明

<name>，及び<value>に指定できる内容を次に示します。

<name>

<value>

HiRDB_for_Java_SQL_IN_NUM

実行するSQLの入力，又は入出力?パラメタの最大数を指定します。この指定は，SQLの前処理時に取得する入力，又は入出力?パラメタ情報の数となります。実際の入力，又は入出力?パラメタの数が，このプロパティの指定値よりも多い場合，SQLの前処理の後に入力，又は入出力?パラメタ情報を取得します。

指定値は，1〜30,000です（デフォルトは64）。これ以外の値，又は数字以外を指定した場合は，DB接続時にエラーとなります。

HiRDB_for_Java_SQL_OUT_NUM

実行するSQLの出力項目数の最大数を指定します。この指定はSQLの前処理時に取得する出力項目情報の数となります。実際の出力項目情報の数が，このプロパティの指定値よりも多い場合，SQLの前処理の後に出力項目情報を取得します。

指定値は，1〜30,000です（デフォルトは64）。これ以外の値，又は数字以外を指定した場合は，DB接続時にエラーとなります。

(d)　機能詳細

SQLの前処理時に取得する検索項目，出力?パラメタ，入力?パラメタ，又は入出力?パラメタ情報の最大数を指定します。この指定を十分な大きさにすることで，SQLの前処理と，検索項目，出力?パラメタ，入力?パラメタ，又は入出力?パラメタ情報を同時に取得でき，前処理後に情報を取得する場合に比べて性能が向上します。

(e)　注意事項

-D<name>=<value> を指定する場合は，指定内容に空白を含めないでください。指定内容が次の例のどれかに該当する場合，正しく設定されません。△は空白を示します。

-D△<name>=<value>

-D<name>△=<value>

-D<name>=△<value>

DB接続時，HiRDB_for_Java_SQL_IN_NUM（データソース接続時はsetSQLInNumメソッド）を設定している場合は，HiRDB_for_Java_SQL_IN_NUM，又はsetSQLInNumメソッドの設定値が有効になります。

DB接続時，HiRDB_for_Java_SQL_OUT_NUM（データソース接続時はsetSQLOutNumメソッド）を設定している場合は，HiRDB_for_Java_SQL_OUT_NUM，又はsetSQLOutNumメソッドの設定値が有効になります。

SQLの前処理と，検索項目，出力?パラメタ，入力?パラメタ，又は入出力?パラメタ情報の取得を同時実行するには，接続するHiRDBサーバがバージョン07-02以降でなければなりません。

(f)　設定例

システムプロパティのHiRDB_for_Java_SQL_IN_NUM，及びHiRDB_for_Java_SQL_OUT_NUMの設定例を次に示します。

java -DHiRDB_for_Java_SQL_IN_NUM=128 -DHiRDB_for_Java_SQL_OUT_NUM=128 TestUP

16.11　接続情報設定／取得インタフェース

JDBCドライバで提供する，JdbhDataSource，JdbhConnectionPoolDataSource，及びJdbhXADataSourceの各クラスでは，JDBC2.0 Optional Package規格で定められたメソッドのほかに，DB接続に必要となる接続情報設定／取得用のメソッドを提供します。

接続情報設定／取得メソッドの一覧を次の表に示します。

表16‒18　接続情報設定／取得メソッドの一覧

メソッド

機能

setDescription

接続するDBに必要な接続付加情報を設定します。

getDescription

接続するDBに必要な接続付加情報を取得します。

setDBHostName

接続するHiRDBのホスト名を設定します。

getDBHostName

接続するHiRDBのホスト名を取得します。

setEncodeLang

指定したエンコード文字コードを使用し，データ変換をします。

getEncodeLang

データ変換で使用するエンコード文字を返却します。

setUser

認可識別子を設定します。

getUser

認可識別子を取得します。

setPassword

パスワードを設定します。

getPassword

パスワードを取得します。

setXAOpenString※

XA_OPEN文字列を設定します。

getXAOpenString※

XA_OPEN文字列を取得します。

setXACloseString※

XA_CLOSE文字列を設定します。

getXACloseString※

XA_CLOSE文字列を取得します。

setRMID※

リソースマネジャの識別子を設定します。

getRMID※

リソースマネジャの識別子を取得します。

setXAThreadMode※

XA使用時のスレッドモードを設定します。

getXAThreadMode※

XA使用時のスレッドモードを取得します。

setCommit_Behavior

カーソルがCOMMITをわたって有効かどうかを設定します。

getCommit_Behavior

カーソルがCOMMITをわたって有効かどうかを取得します。

setBlockUpdate

複数のパラメタセットを，一度に処理するかどうかを指定します。

getBlockUpdate

複数のパラメタセットを，一度に処理するかどうかを取得します。

setLONGVARBINARY_Access

LONGVARBINARY（列属性がBLOB又はBINARY）のデータベースのアクセス方法を指定します。

getLONGVARBINARY_Access

LONGVARBINARY（列属性がBLOB又はBINARY）のデータベースのアクセス方法を取得します。

setSQLInNum

実行するSQLの入力/入出力?パラメタの最大数を指定します。

getSQLInNum

setSQLInNumで設定した，実行するSQLの入力，又は入出力?パラメタの最大数を取得します。

setSQLOutNum

実行するSQLの検索項目，又は出力若しくは入出力?パラメタの最大数を指定します。

getSQLOutNum

setSQLOutNumで設定した，実行するSQLの検索項目，又は出力若しくは入出力?パラメタの最大数を取得します。

setSQLWarningLevel

SQL実行時に発生した警告保持レベルを指定します。

getSQLWarningLevel

setSQLWarningLevelで指定した警告保持レベルを取得します。

setClear_Env

DB接続時にOSの環境変数として設定したHiRDBのクライアント環境定義を無効にするかどうかを指定します。

getClear_Env

setClear_Envで設定した環境変数無効指定を取得します。

注※

JdbhXADataSourceクラスでだけ提供されるメソッドです。

16.11.1　setDescription

(1)　機能

接続するDBに必要な接続付加情報を設定します。

(2)　形式

public void setDescription ( String description )

(3)　引数

String description：

接続付加情報を指定します。

(4)　戻り値

なし。

(5)　機能詳細

接続するDBに必要な接続付加情報を設定します。設定する内容と要否を次に示します。

設定内容

設定する内容

設定の要否

HiRDBのポート番号

HiRDBのポート番号を文字列で設定します。

任意

HiRDBの環境変数グループ名

HiRDBの環境変数グループ名を「@HIRDBENVGRP=」に続けて文字列で設定します。環境変数グループ名に半角空白文字，及び半角＠文字を含む場合は，半角引用符（"）で囲んで指定してください。環境変数グループ名を半角引用符で囲んだ場合，最後の半角引用符から文字終端までの文字は無視されます。半角引用符，及び半角コンマを含む環境変数グループ名は指定できません。

任意

HiRDBの環境変数グループ識別子

HiRDBの環境変数グループ識別子を英数字だけの4文字で設定します。

XA接続時は必要

注1

環境変数グループに登録された環境変数は，ユーザ環境変数やHiRDB.INIで登録した環境変数よりも優先されます。

注2

指定例を次に示します。なお，指定例では，JdbhDataSourceクラスのインスタンスの参照を持つ変数名を「ds」としています。

UNIX版の場合：

例1：HiRDBの環境変数グループ名のパスが「/HiRDB_P/Client/HiRDB.ini」の場合

ds.setDescription("@HIRDBENVGRP=/HiRDB_P/Client/HiRDB.ini");

Windows版の場合：

例1：HiRDBのポート番号を指定する場合

ds.setDescription("22200");

例2：HiRDBクライアント環境変数登録ツールで登録した環境変数グループ名「HiRDB_ENV_GROUP」を指定する場合

ds.setDescription("@HIRDBENVGRP=HiRDB_ENV_GROUP");

例3：HiRDBの環境変数グループ名のパスが「C:¥HiRDB_P¥Client¥HiRDB.ini」の場合

ds.setDescription("@HIRDBENVGRP=C:¥¥HiRDB_P¥¥Client¥¥HiRDB.ini");

例4：HiRDBの環境変数グループ名のパスが「C:¥Program△Files¥HITACHI¥HiRDB¥HiRDB.ini」の場合（△は半角空白文字）

ds.setDescription("@HIRDBENVGRP=¥"C:¥¥Program△Files¥¥HITACHI¥¥HiRDB¥HiRDB.ini¥"");

例5：HiRDBの環境変数グループ識別子が「HDB1」の場合

ds.setDescription("HDB1");

注3

接続先のポート番号が65535である場合は，クライアント環境定義のPDNAMEPORT又は環境変数グループを使用して接続先を指定してください。

(6)　発生する例外

XA接続以外の接続で，@から始まる環境変数グループ名を指定した場合，@より後の指定内容に半角スペースがあるときは，SQLExceptionを投入します。

16.11.2　getDescription

(1)　機能

setDescriptionメソッドで指定した，接続するDBに必要な接続付加情報を取得します。

(2)　形式

public String getDescription ()

(3)　引数

なし。

(4)　戻り値

String：

接続付加情報です。設定されていない場合，nullを返却します。

(5)　発生する例外

なし。

16.11.3　setDBHostName

(1)　機能

接続するHiRDBのホスト名（クライアント環境定義PDHOSTに設定するホスト名）を設定します。

XA接続以外の接続で，かつ接続付加情報にHiRDBクライアントの環境変数グループ名を指定している場合は，このメソッドで値を指定しても無効になります。

(2)　形式

public void setDBHostName ( String db_host_name )

(3)　引数

String db_host_name：

HiRDBのホスト名を設定します。

(4)　戻り値

なし。

(5)　発生する例外

なし。

16.11.4　getDBHostName

(1)　機能

setDBHostNameメソッドで指定した，接続するHiRDBのホスト名を取得します。

(2)　形式

public String getDBHostName ()

(3)　引数

なし。

(4)　戻り値

String：

HiRDBのホスト名です。設定されていない場合，nullを返却します。

(5)　発生する例外

なし。

16.11.5　setEncodeLang

(1)　機能

JDBCドライバ内で文字コード変換に使用する文字セットを指定します。

(2)　形式

public void setEncodeLang ( String encode_lang )

(3)　引数

String encode_lang：

Javaがサポートしている文字セット（MS932など）を指定します。

このメソッドで"OFF"を指定した場合，又は指定をしなかった場合（Properties infoのENCODELANGでの設定，及びURLのENCODELANGでの設定も含む），次に示す動作となります。

OFF：

JDBCドライバが接続先HiRDBの文字コード種別に対応する文字セットを決定します。接続先HiRDBの文字コード種別とJDBCドライバで使用する文字エンコードの対応を次に示します。

HiRDBの文字コード種別※

使用する文字エンコード

lang-c

8859_1

sjis

Java仮想マシンの標準エンコード

ujis

EUCJIS

utf-8

UTF-8

chinese

GB2312

chinese-gb18030

GB18030

注※

UNIX版の場合はpdsetupコマンドの-cオプション，Windows版の場合はpdntenvコマンドの-cオプションの指定値です。pdntenvコマンドを実行しない場合の文字コード種別については，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

指定なし：

＜UNIX版の場合＞

JDBCドライバがHiRDBの文字コード種別に対応した文字セットを決定します。

＜Windows版の場合＞

JDBCドライバが次の規則で決定します。

Java仮想マシンの標準エンコード

HiRDBの文字コード種別

SJIS

SJIS以外

MS932

MS932

HiRDBの文字コード種別に対応した文字セット

MS932以外

SJIS

(4)　戻り値

なし。

(5)　機能詳細

Javaプログラム内では，文字コードはUnicodeで扱うため，HiRDBとの文字データ処理時に，JDBCドライバがHiRDBの文字データとUnicodeとの相互文字コード変換をします。この文字コード変換処理で，JDBCドライバはJava仮想マシンが提供するエンコーダ及びデコーダを利用します。このメソッドでは，Java仮想マシンが提供するエンコーダ及びデコーダに対して，JDBCドライバが指定する文字セット名称を指定します。

(6)　発生する例外

なし。

16.11.6　getEncodeLang

(1)　機能

setEncodeLangメソッドで指定した文字セットを取得します。

(2)　形式

public String getEncodeLang ()

(3)　引数

なし。

(4)　戻り値

String：

文字セットです。指定していない場合は，nullを返却します。

(5)　発生する例外

なし。

16.11.7　setUser

(1)　機能

認可識別子を設定します。

(2)　形式

public void setUser ( String user )

(3)　引数

String user：

認可識別子を指定します。

(4)　戻り値

なし。

(5)　機能詳細

認可識別子を設定します。

認可識別子は，DataSource.getConnectionメソッド，ConnectionPoolDataSource.getPooledConnectionメソッド，又はXADataSource.getXAConnectionメソッド（これらをまとめてDB接続メソッドと呼びます）の引数でも指定できます。

このメソッドによって認可識別子が設定され，かつ認可識別子，パスワードを引数に持つDB接続メソッドが呼び出された場合は，DB接続メソッドで指定した認可識別子の指定値が優先されます。

認可識別子の指定に関する注意事項については，「getConnectionメソッドの引数の内容」を参照してください。

(6)　発生する例外

なし。

16.11.8　getUser

(1)　機能

認可識別子を取得します。

(2)　形式

public String getUser ()

(3)　引数

なし。

(4)　戻り値

String：

認可識別子です。設定されていない場合，nullを返却します。

(5)　機能詳細

setUserメソッドで指定した，認可識別子を返却します。

OSログインユーザの簡易認証機能を使用している場合は，簡易認証キーワードを返却します。

setUserメソッドによって認可識別子が設定され，かつ認可識別子，パスワードを引数に持つDB接続メソッド（DataSource.getConnectionメソッド，ConnectionPoolDataSource.getPooledConnectionメソッド，又はXADataSource.getXAConnectionメソッド）が呼び出された場合は，DB接続メソッドで指定した認可識別子の指定値を返却します。

(6)　発生する例外

なし。

16.11.9　setPassword

(1)　機能

パスワードを設定します。

(2)　形式

public void setPassword ( String password )

(3)　引数

String password：

パスワードを指定します。

(4)　戻り値

なし。

(5)　機能詳細

パスワードを設定します。

パスワードは，DataSource.getConnectionメソッド，ConnectionPoolDataSource.getPooledConnectionメソッド，又はXADataSource.getXAConnectionメソッド（これらをまとめてDB接続メソッドと呼びます）の引数でも指定できます。

このメソッドによってパスワードが設定され，かつ認可識別子，パスワードを引数に持つDB接続メソッドが呼び出された場合は，DB接続メソッドで指定したパスワードの指定値が優先されます。

(6)　発生する例外

なし。

16.11.10　getPassword

(1)　機能

パスワードを取得します。

(2)　形式

public String getPassword ()

(3)　引数

なし。

(4)　戻り値

String：

パスワードです。設定されていない場合，nullを返却します。

(5)　機能詳細

setPasswordメソッドで指定した，パスワードを返却します。

setPasswordメソッドによってパスワードが設定され，かつ認可識別子，パスワードを引数に持つDB接続メソッド（DataSource.getConnectionメソッド，ConnectionPoolDataSource.getPooledConnectionメソッド，又はXADataSource.getXAConnectionメソッド）が呼び出された場合は，DB接続メソッドで指定したパスワードの指定値を返却します。

(6)　発生する例外

なし。

16.11.11　setXAOpenString

(1)　機能

XAオープン文字列を設定します。

(2)　形式

public void setXAOpenString ( String xa_string )

(3)　引数

String xa_string：

XAオープン文字列を指定します。

(4)　戻り値

なし。

(5)　機能詳細

XAオープン文字列を設定します。

このメソッドは，JdbhDbpsvXADataSourceクラスでだけ提供されます。

XAオープン文字列は，「HiRDBの環境変数グループ識別子＋HiRDBの環境変数グループ名」の形式で指定します。HiRDBの環境変数グループ識別子は，setDescriptionメソッドでの設定と同じにする必要があります。設定例を次に示します。

例1：

HiRDBクライアント環境変数登録ツールで登録した，環境変数グループ名「HiRDB_ENV_GROUP」を設定する場合

ds.setDescription("HDB1");
ds.setXAOpenString("HDB1+HiRDB_ENV_GROUP");

例2：

HiRDBの環境変数グループ名のパスが「C:¥Program△Files¥HITACHI¥HiRDB¥HiRDB.ini」の場合（△は半角空白文字）

ds.setDescription("HDB1");
ds.setXAOpenString("HDB1+C:¥¥Program△Files¥¥HITACHI¥¥HiRDB¥¥HiRDB.ini");

(6)　発生する例外

なし。

16.11.12　getXAOpenString

(1)　機能

setXAOpenStringメソッドで指定した，XAオープン文字列を取得します。このメソッドは，JdbhDbpsvXADataSourceクラスでだけ提供されます。

(2)　形式

public String getXAOpenString ()

(3)　引数

なし。

(4)　戻り値

String：

XAオープン文字列です。設定されていない場合，nullを返却します。

(5)　発生する例外

なし。

16.11.13　setXACloseString

(1)　機能

XAクローズ文字列を設定します。このメソッドは，JdbhDbpsvXADataSourceクラスでだけ提供されます。

(2)　形式

public void setXACloseString ( String xa_string )

(3)　引数

String xa_string：

XAクローズ文字列を設定します。

(4)　戻り値

なし。

(5)　発生する例外

なし。

16.11.14　getXACloseString

(1)　機能

setXACloseStringメソッドで指定した，XAクローズ文字列を取得します。このメソッドは，JdbhDbpsvXADataSourceクラスでだけ提供されます。

(2)　形式

public String getXACloseString ()

(3)　引数

なし。

(4)　戻り値

String：

XAクローズ文字列です。設定されていない場合，nullを返却します。

(5)　発生する例外

なし。

16.11.15　setRMID

(1)　機能

リソースマネジャに対する識別子を設定します。

(2)　形式

public void setRMID ( int rmid )

(3)　引数

int rmid：

リソースマネジャに対する識別子を指定します。

(4)　戻り値

なし。

(5)　機能詳細

リソースマネジャに対する識別子を，１以上の正の数値で設定します。

複数のリソースマネジャを同時に使用する場合，リソースマネジャごとに一意な識別子を設定する必要があります。

このメソッドが呼び出されない場合，デフォルトの識別子として1を使用します。

このメソッドは，JdbhDbpsvXADataSourceクラスでだけ提供されます。

(6)　発生する例外

引数の内容が1より小さい場合，SQLExceptionを投入します。

16.11.16　getRMID

(1)　機能

setRMIDメソッドで指定した，リソースマネジャに対する識別子を取得します。このメソッドは，JdbhDbpsvXADataSourceクラスでだけ提供されます。

(2)　形式

public int getRMID ()

(3)　引数

なし。

(4)　戻り値

int：

リソースマネジャに対する識別子です。設定されていない場合，1を返却します。

(5)　発生する例外

なし。

16.11.17　setXAThreadMode

(1)　機能

XA使用時のスレッドモードを設定します。

(2)　形式

public void setXAThreadMode ( boolean mode )

(3)　引数

boolean mode：

XA使用時のスレッドモードを指定します。

true：マルチスレッドモード

false：シングルスレッドモード

(4)　戻り値

なし。

(5)　機能詳細

XA使用時のスレッドモードを設定します。このメソッドが呼び出されない場合，デフォルト値はfalse（シングルスレッドモード）となります。

このメソッドは，JdbhDbpsvXADataSourceクラスでだけ提供されます。

RM（リソースマネジャ）が提供するXAライブラリがマルチスレッド対応で，かつアプリケーションがマルチスレッドで動作する場合，このメソッドをtrue（マルチスレッドモード）で呼び出す必要があります。

(6)　発生する例外

なし。

16.11.18　getXAThreadMode

(1)　機能

setXAThreadMode メソッドで指定した，XA使用時のスレッドモードを取得します。このメソッドは，JdbhDbpsvXADataSourceクラスでだけ提供されます。

(2)　形式

public boolean getXAThreadMode ()

(3)　引数

なし。

(4)　戻り値

boolean：

XA使用時のスレッドモードです。

true：マルチスレッドモード

false：シングルスレッドモード

(5)　発生する例外

なし。

16.11.19　setCommit_Behavior

(1)　機能

HiRDBがコミットをした場合に，次に示すクラスをコミット実行後も有効とするかどうかを設定します。

ResultSetクラス

Statementクラス，PreparedStatementクラス，及びCallableStatementクラス

(2)　形式

public void setCommit_Behavior (String type)

(3)　引数

String type：

Statementクラス，PreparedStatementクラス，及びCallableStatementクラスのオブジェクト，並びにResultSetクラスのオブジェクトが，トランザクションの終了をわたって有効かどうかを設定します。

指定値

ResultSetクラス

Statementクラス，PreparedStatementクラス，及びCallableStatementクラス

"DELETE"（デフォルト値）

無効※1

無効※2

"CLOSE"

無効※1

有効

"PRESERVE"

有効※3

有効※3

注※1

コミット実行後にResultSetクラスのオブジェクトを無効とする条件は，ResultSetクラスの次に示すメソッドを実行したことによってResultSetクラスのgetXXXメソッドが実行できる場合です。

nextメソッド

firstメソッド

lastメソッド

absoluteメソッド

relativeメソッド

無効としたResultSetクラスのオブジェクトでメソッドを実行した場合の動作については保証しません。

注※2

コミット実行後に無効となるものを次に示します。

Connection.prepareStatementメソッドでプリコンパイルしたSQL文

Connection.prepareCallメソッドでプリコンパイルしたSQL文

Statementクラス，PreparedStatementクラス，及びCallableStatementクラスのexecuteQueryメソッドで取得したResultSetクラスのオブジェクト

注※3

接続先のHiRDBのバージョンが07-01以前の場合，LOCK TABLEによる表の排他が必要です。

(4)　戻り値

なし。

(5)　機能詳細

Statementクラス，PreparedStatementクラス，及びCallableStatementクラスのオブジェクト，並びにResultSetクラスのオブジェクトが，トランザクションの終了をわたって有効かどうかを設定します。このメソッドが呼び出されない場合，デフォルトはDELETEとなります。

このメソッドの実行は，DriverManagerを使用してDB接続するときに行う，プロパティCOMMIT_BEHAVIORの設定と同等になります。

(6)　発生する例外

XADataSourceを使用した接続の場合，指定値に関係なく"DELETE"となります。ただし，getCommit_Behaviorの戻り値は引数typeで指定したものとなります。

(7)　注意事項

注意事項については，「Properties infoの設定内容」の「COMMIT_BEHAVIORについての注意事項」を参照してください。

16.11.20　getCommit_Behavior

(1)　機能

Statementクラス，PreparedStatementクラス，及びCallableStatementクラスのオブジェクト，並びにResultSetクラスのオブジェクトが，トランザクションの終了をわたって有効かどうかを取得します。

(2)　形式

public String getCommit_Behavior ()

(3)　引数

なし。

(4)　戻り値

String：

Statementクラス，PreparedStatementクラス，及びCallableStatementクラスのオブジェクト，並びにResultSetクラスのオブジェクトが，トランザクションの終了をわたって有効かどうかの種別が設定されていない場合，DELETEを返却します。

(5)　機能詳細

setCommit_Behaviorメソッドで指定した情報が返却されます。

(6)　発生する例外

なし。

16.11.21　setBlockUpdate

(1)　機能

?パラメタを使用したデータベースの更新（INSERT，UPDATE，及びDELETE）で，複数のパラメタセットを一度に処理するかどうかを設定します。

なお，実際にパラメタセットが一度に処理されるかどうかは，配列を使用した機能の使用方法で決まります。配列を使用した機能の使用方法については，「配列を使用した機能」を参照してください。

(2)　形式

public void setBlockUpdate(boolean Mode)

(3)　引数

boolean Mode：

複数のパラメタセットを一度に処理するかどうかの設定情報です。省略した場合，falseが仮定されます。

true：

一度に処理します。

false：

パラメタセットを一つずつ分割して処理します。

(4)　戻り値

なし。

(5)　発生する例外

なし。

(6)　注意事項

複数行の?パラメタの一括処理をする方法については，「Properties infoの設定内容」，及び「バッチ更新」を参照してください。

この機能は，システムプロパティのHiRDB_for_Java_BLOCK_UPDATEでも指定できます。ただし，setBlockUpdateメソッドを設定した場合は，システムプロパティのHiRDB_for_Java_BLOCK_UPDATEの設定は無効となります。

16.11.22　getBlockUpdate

(1)　機能

?パラメタを使用したデータベースの更新（INSERT，UPDATE，及びDELETE）で，複数のパラメタセットを一度に処理するかどうかを取得します。

(2)　形式

public boolean getBlockUpdate()

(3)　引数

なし。

(4)　戻り値

boolean：

複数のパラメタセットを一度に処理するかどうかの情報です。省略した場合，falseが仮定されます。

true：

一度に処理します。

false：

パラメタセットを一つずつ分割して処理します。

(5)　発生する例外

なし。

(6)　注意事項

なし。

16.11.23　setLONGVARBINARY_Access

(1)　機能

LONGVARBINARY（列属性がBLOB又はBINARY）のデータベースアクセス方法を指定します。

(2)　形式

public void setLONGVARBINARY_Access(String Mode)

(3)　引数

String Mode：

LONGVARBINARY（列属性がBLOB又はBINARY）のデータベースアクセス方法の設定情報です。省略した場合，"REAL"が仮定されます。

"REAL"：

実データでアクセスします。

"LOCATOR"：

HiRDBの位置付け子機能を使用してアクセスします。

上記以外：

"REAL"が指定されたとみなされます。

(4)　戻り値

なし。

(5)　発生する例外

なし。

16.11.24　getLONGVARBINARY_Access

(1)　機能

LONGVARBINARY（列属性がBLOB又はBINARY）のデータベースアクセス方法を取得します。

(2)　形式

public String getLONGVARBINARY_Access()

(3)　引数

なし。

(4)　戻り値

String：

LONGVARBINARY（列属性がBLOB又はBINARY）のデータベースアクセス方法の設定情報です。何も設定されていない場合，"REAL"が返されます。

"REAL"：

実データでアクセスします。

"LOCATOR"：

HiRDBの位置付け子機能を使用してアクセスします。

(5)　機能詳細

setLONGVARBINARY_Accessメソッドで指定された情報を返却します。

(6)　発生する例外

なし。

16.11.25　setSQLInNum

(1)　機能

実行するSQLの入力，又は入出力?パラメタの最大数を指定します。

(2)　形式

public  void  setSQLInNum(int inNum)

(3)　引数

int inNum：

実行するSQLの入力，又は入出力?パラメタの最大数を指定します。指定値は，1〜30,000（デフォルトは64）です。

(4)　戻り値

なし。

(5)　機能詳細

SQLの前処理時に取得する，入力，又は入出力?パラメタ情報の数を指定します。

実際の?パラメタの数が，このプロパティの指定値よりも多い場合，SQLの前処理の後に入力，又は入出力?パラメタ情報を取得します。

このメソッドで指定した値は，DB接続時にプロパティのHiRDB_for_Java_SQL_IN_NUMの値となります。

(6)　発生する例外

引数が指定値の範囲外の場合，SQLExceptionを投入します。

(7)　注意事項

この機能は，システムプロパティのHiRDB_for_Java_SQL_IN_NUMでも指定できます。ただし，setSQLInNumメソッドを設定した場合は，システムプロパティのHiRDB_for_Java_SQL_IN_NUMの設定は無効となります。

入力，又は入出力?パラメタのあるSQL文を実行しない場合は，1を指定することをお勧めします。

16.11.26　getSQLInNum

(1)　機能

setSQLInNumで設定した，実行するSQLの入力，又は入出力?パラメタの最大数を取得します。

(2)　形式

public  int  getSQLInNum()

(3)　引数

なし。

(4)　戻り値

int：

setSQLInNumで設定した，実行するSQLの入力，又は入出力?パラメタの最大数です。設定されていない場合は，デフォルト値（64）が返されます。

(5)　発生する例外

なし。

16.11.27　setSQLOutNum

(1)　機能

実行するSQLの検索項目，又は出力若しくは入出力?パラメタの最大数を指定します。

(2)　形式

public  void  setSQLOutNum(int outNum)

(3)　引数

int outNum：

実行するSQLの検索項目，又は出力若しくは入出力?パラメタの最大数を指定します。指定値は，1〜30,000（デフォルトは64）です。

(4)　戻り値

なし。

(5)　機能詳細

実行するSQLの検索項目，又は出力若しくは入出力?パラメタの最大数を指定します。

この指定は，SQLの前処理時に取得する出力項目の数となります。

実際の出力項目数が，このプロパティの指定値よりも多い場合，SQLの前処理の後に出力項目情報を取得します。

このメソッドで指定した値は，DB接続時にプロパティのHiRDB_for_Java_SQL_OUT_NUMの値となります。

(6)　発生する例外

引数が指定値の範囲外の場合，SQLExceptionを投入します。

(7)　注意事項

この機能は，システムプロパティのHiRDB_for_Java_SQL_OUT_NUMでも指定できます。ただし，setSQLOutNumメソッドを設定した場合は，システムプロパティのHiRDB_for_Java_SQL_OUT_NUMの設定は無効となります。

検索項目，又は出力若しくは入出力?パラメタがない場合は，1を指定することをお勧めします。

16.11.28　getSQLOutNum

(1)　機能

setSQLOutNumで設定した，実行するSQLの検索項目，又は出力若しくは入出力?パラメタの最大数を取得します。

(2)　形式

public  int  getSQLOutNum()

(3)　引数

なし。

(4)　戻り値

int：

setSQLOutNumで設定した，実行するSQLの検索項目，又は出力若しくは入出力?パラメタの最大数です。設定されていない場合，デフォルト値（64）が返されます。

(5)　発生する例外

なし。

16.11.29　setSQLWarningLevel

(1)　機能

SQL実行時に発生した警告保持レベルを指定します。このメソッドで指定した値は，DB接続時にプロパティのHiRDB_for_Java_SQLWARNING_LEVELの値となります。

(2)　形式

public  void  setSQLWarningLevel (String warningLevel)

(3)　引数

String warningLevel：

SQL実行時に発生した警告情報の保持レベルを指定します。次の値を指定できます。なお，指定値と，保持する警告の関係については，「SQLWarningクラス」を参照してください。

IGNORE

SQLWARN（デフォルト）

ALLWARN

なお，このメソッドでは，引数に指定した内容の大文字，小文字は区別されません。

(4)　戻り値

なし。

(5)　発生する例外

引数が指定値以外の場合，SQLExceptionを投入します。

16.11.30　getSQLWarningLevel

(1)　機能

setSQLWarningLevelで指定した警告保持レベルを取得します。

(2)　形式

public  String  getSQLWarningLevel ()

(3)　引数

なし。

(4)　戻り値

String：

setSQLWarningLevelで指定した警告保持レベル（IGNORE，SQLWARN，又はALLWARN）が返されます。指定していない場合は，デフォルト値（SQLWARN）が返されます。返却値と，保持する警告の関係については，「SQLWarningクラス」を参照してください。

(5)　発生する例外

なし。

16.11.31　setClear_Env

(1)　機能

DB接続時にOSの環境変数として設定したHiRDBのクライアント環境定義を無効にするかどうかを指定します。このメソッドで指定した値は，DB接続時にプロパティのHiRDB_for_Java_CLEAR_ENVの設定と同等になります。

(2)　形式

public  void  setClear_Env(boolean Mode)

(3)　引数

boolean Mode：

HiRDBのクライアント環境定義を無効にするかどうかを指定します。

true：無効にします。

false：無効にしません。

(4)　戻り値

なし。

(5)　発生する例外

なし。

(6)　注意事項

注意事項については，表「Properties infoの設定内容」のHiRDB_for_Java_CLEAR_ENVを参照してください。

16.11.32　getClear_Env

(1)　機能

setClear_Envで指定した環境変数無効指定を取得します。

(2)　形式

public  boolean  getClear_Env()

(3)　引数

なし。

(4)　戻り値

String：

setClear_Envで指定した環境変数無効指定の内容が返されます。指定していない場合は，デフォルト値（false）が返されます。

true：

DB接続時にOSの環境変数として設定したHiRDBのクライアント環境定義を無効にします。

false：

DB接続時にOSの環境変数として設定したHiRDBのクライアント環境定義を無効にしません。

(5)　発生する例外

なし。

16.12　データ型，文字コード

16.12.1　データ型

JDBCのSQLデータ型と，HiRDBのクライアントライブラリを経由して接続するSQLデータ型は，完全には一致しません。JDBCドライバでは，JDBCのSQLデータ型とHiRDBのSQLデータ型とのマッピングをします。マッピングできないSQLデータ型を使用してアクセスした場合，SQLExceptionを投入します。

SQLデータ型のマッピングは，ResultSet，PreparedStatement，及びCallableStatementの各クラスの，getXXXメソッド及びsetXXXメソッドでします。なお，SQLデータ型とgetXXXメソッド，setXXXメソッドのマッピング規則については，JDBC1.0規格のドキュメントを参照してください。

HiRDBとJDBCのSQLデータ型の対応を次の表に示します。

表16‒19　HiRDBとJDBCのSQLデータ型の対応

HiRDBのSQLデータ型

JDBCのSQLデータ型

INTEGER

INTEGER

SMALLINT

SMALLINT

DECIMAL

DECIMAL

FLOAT，DOUBLE PRECISION

FLOAT

SMALLFLT，REAL

REAL

CHAR

CHAR

VARCHAR

VARCHAR

NCHAR

CHAR

NVARCHAR

VARCHAR

MCHAR

CHAR

MVARCHAR

VARCHAR

DATE

DATE

TIME

TIME

BLOB

LONGVARBINARY

TIMESTAMP

TIMESTAMP

BINARY※

LONGVARBINARY

注※

データの扱いは，BLOBと同じです。

16.12.2　文字コード変換機能

Javaプログラム内では，文字コードはUnicodeで扱うため，JDBCドライバがHiRDBの文字データとUnicodeとの相互文字コード変換をします。この文字コード変換処理で，JDBCドライバはJava仮想マシンが提供するエンコーダ及びデコーダを利用します。このとき，Properties infoのENCODELANGでは，Java仮想マシンが提供するエンコーダ及びデコーダに対して，JDBCドライバが指定する文字セット名称を指定します。

HiRDBの文字コードとJavaの文字セットの対応（UNIX版の場合）を次の表に示します。

表16‒20　HiRDBの文字コードとJavaの文字セットの対応（UNIX版の場合）

HiRDBの文字コード

文字セット

備考

sjis

（シフトJIS漢字）

"SJIS"

全角文字に外字を含みます。

ujis

（EUC日本語漢字）

"EUC_JP"

(Japanese EUC)

全角文字に外字を含みません。※

chinese

（EUC中国語漢字）

"EUC_CN"

(Simplified Chinese)

全角文字に外字を含みません。※

lang-c

（8ビットコード）

"ISO-8859-1"

(ISO Latin-1)

US ASCII及び8ビットコードの場合に使用できます。

UTF-8

UTF-8

なし。

chinese-gb18030

（中国語漢字コード（GB18030））

GB18030

なし。

注

次に示す方法でProperties infoのENCODELANGを設定している場合，これを優先してエンコーディングします。

DriverManager.getConnectionメソッドの引数として渡すProperties infoで設定

JdbhDataSource.setEncodeLangメソッド，JdbhConnectionPoolDataSource.setEncodeLangメソッド，又はJdbhXADataSourceメソッドで設定

上記の方法でENCODELANGを設定していない場合の動作，及び"OFF"を設定した場合の動作については，「setEncodeLang」を参照してください。

注※

EUCコードセット3（(8F)₁₆(XXXX)₁₆の3バイトで表現される文字コード）に割り当てられた外字コードは使用できません。

HiRDBの文字コードとJavaの文字セットの対応（Windows版の場合）を次の表に示します。

表16‒21　HiRDBの文字コードとJavaの文字セットの対応（Windows版の場合）

HiRDBの文字コード

文字セット

備考

sjis

（シフトJIS漢字）

Java仮想マシンの標準エンコードが"MS932"の場合は"MS932"

"MS932"以外の場合は"SJIS"

全角文字に外字を含みます。

UTF-8

UTF-8

なし。

注

次に示す方法でProperties infoのENCODELANGを設定している場合，これを優先してエンコーディングします。

DriverManager.getConnectionメソッドの引数として渡すProperties infoで設定

JdbhDataSource.setEncodeLangメソッド，JdbhConnectionPoolDataSource.setEncodeLangメソッド，又はJdbhXADataSourceメソッドで設定

上記の方法でENCODELANGを設定していない場合の動作，及び"OFF"を設定した場合の動作については，「setEncodeLang」を参照してください。

16.13　制限事項があるクラスとメソッド

ここでは，JDBC1.0規格で定義されているクラスについて説明します。

なお，JDBC2.0基本規格で定義されている次のクラスは使用できません。

Clobクラス

Structクラス

Refクラス

SQLDataクラス

SQLInputクラス

SQLOutputクラス

16.13.1　Driverクラス

制限事項はありません。

16.13.2　Connectionクラス

ConnectionクラスのJDBC1.0規格で定義されているメソッドの制限事項を次の表に示します。

表16‒22　ConnectionクラスのJDBC1.0規格で定義されているメソッドの制限事項

JDBC1.0規格で定義されているメソッド

制限事項

setReadOnly

使用できません。

isReadOnly

無条件にfalseを返却します。

setCatalog

使用できません。

getCatalog

無条件にnullを返却します。

setTransactionIsolation

使用できません。

getTransactionIsolation

無条件にTRANSACTION_REPEATABLE_READを返却します。

ConnectionクラスのJDBC2.0基本規格で追加されたメソッドの制限事項を次の表に示します。

表16‒23　ConnectionクラスのJDBC2.0基本規格で追加されたメソッドの制限事項

JDBC2.0基本規格で追加されたメソッド

制限事項

createStatement

更新結果を反映する結果セットが使用できません。

そのため，結果セットタイプにTYPE_SCROLL_SENSITIVEを指定した場合は，TYPE_SCROLL_INSENSITIVEに切り替え，SQLWarningを設定します。

?パラメタにNULL述語を指定したSQL（? IS 〔NOT〕NULL）を指定した場合，SQLExceptionを投入します。

prepareStatement

prepareCall

getTypeMap

ユーザ定義型が使用できないため，無条件にSQLExceptionを投入します。

setTypeMap

16.13.3　Statementクラス

StatementクラスのJDBC1.0規格で定義されているメソッドの制限事項を次の表に示します。

表16‒24　StatementクラスのJDBC1.0規格で定義されているメソッドの制限事項

JDBC1.0規格で定義されているメソッド

制限事項

setCursorName

使用できません（位置決めされた更新及び削除が使用できないため）。

getMaxFieldSize

setMaxFieldSizeで指定した値を返却します。

getMoreResults

無条件にfalseを返却します。

setMaxRows

使用できません。

setQueryTimeout

StatementクラスのJDBC2.0基本規格で追加されたメソッドの制限事項を次の表に示します。

表16‒25　StatementクラスのJDBC2.0基本規格で追加されたメソッドの制限事項

JDBC2.0基本規格で追加されたメソッド

制限事項

setFetchDirection

FETCH_FORWARD以外を指定した場合，SQLExceptionを投入します。

getFetchSize

setFetchSizeメソッドで指定された値を返却します。

16.13.4　PreparedStatementクラス

PreparedStatementクラスのJDBC2.0基本規格で追加されたメソッドの制限事項を次の表に示します。

表16‒26　PreparedStatementクラスのJDBC2.0基本規格で追加されたメソッドの制限事項

JDBC2.0基本規格で追加されたメソッド

制限事項

setBlob

JDBCドライバでは，JDBC SQLタイプをLONGVARBINARYとして扱います。

setClob

SQL CLOB型が使用できないため，無条件にSQLExceptionを投入します。

setRef

SQL構造化型が使用できないため，無条件にSQLExceptionを投入します。

setNull

SQL構造化型，SQL配列型などが使用できないため，SQLユーザ定義型の完全指定の名前を指定した場合は，無条件にSQLExceptionを投入します。

setObject

scaleの指定は無視し，指定した実際の値からscale値を求めます。

16.13.5　CallableStatementクラス

CallableStatementクラスのJDBC2.0基本規格で追加されたメソッドの制限事項を次の表に示します。

表16‒27　CallableStatementクラスのJDBC2.0基本規格で追加されたメソッドの制限事項

JDBC2.0基本規格で追加されたメソッド

制限事項

getObject

Map指定が使用できないため，Map指定時はSQLExceptionを投入します。

getBlob

JDBCドライバでは，JDBC SQLタイプをLONGVARBINARYとして扱います。

getClob

SQL CLOB型が使用できないため，無条件にSQLExceptionを投入します。

getRef

SQL構造化型が使用できないため，無条件にSQLExceptionを投入します。

16.13.6　ResultSetクラス

ResultSetクラスのJDBC2.0基本規格で追加されたメソッドの制限事項を次の表に示します。

表16‒28　ResultSetクラスのJDBC2.0基本規格で追加されたメソッドの制限事項

JDBC2.0基本規格で追加されたメソッド

制限事項

setFetchDirection

FETCH_FORWARD以外を指定した場合，SQLExceptionを投入します。

rowUpdated

更新可能型結果セットが使用できないため，無条件にSQLExceptionを投入します。

rowInserted

rowDeleted

updateNull

updateBoolean

updateByte

updateShort

updateInt

updateLong

updateFloat

updateDouble

updateBigDecimal

updateString

updateBytes

updateDate

updateTime

updateTimestamp

updateAsciiStream

updateBinaryStream

updateCharacterStream

updateObject

insertRow

updateRow

deleteRow

refreshRow

cancelRowUpdates

moveToInsertRow

moveToCurrentRow

getObject

Map指定が使用できないため，Map指定時はSQLExceptionを投入します。

getBlob

JDBCドライバでは，JDBC SQLタイプをLONGVARBINARYとして扱います。

getClob

SQL CLOB型が使用できないため，無条件にSQLExceptionを投入します。

getRef

SQL構造化型が使用できないため，無条件にSQLExceptionを投入します。

16.13.7　ResultSetMetaDataクラス

ResultSetMetaDataクラスのJDBC1.0規格で定義されているメソッドの制限事項を次の表に示します。ただし，ArrayクラスのgetResultSetメソッドで生成された，結果セットから取得したResultSetMetaDataクラスの各メソッドの戻り値については，表「getResultSetで返す結果セットの属性値」を参照してください。

表16‒29　ResultSetMetaDataクラスのJDBC1.0規格で定義されているメソッドの制限事項

JDBC1.0規格で定義されているメソッド

制限事項

isAutoIncrement

無条件にfalseを返却します。

isCaseSensitive

無条件にtrueを返却します。

isCurrency

無条件にfalseを返却します。

getColumnLabel

列のラベル（列ヘッダ）は使用できないため，列名を返却します。

getSchemaName

無条件にnullを返却します。

getTableName

getCatalogName

isReadOnly

無条件にfalseを返却します。

isWritable

isDefinitelyWritable

16.13.8　DatabaseMetaDataクラス

DatabaseMetaDataクラスのJDBC1.0規格で定義されているメソッドの制限事項又は返却内容を次の表に示します。

なお，各メソッドが返却する値は，常にJDBCドライバのバージョンと同一のバージョンのHiRDBサーバに関する情報です。

表16‒30　DatabaseMetaDataクラスのJDBC1.0規格で定義されているメソッドの制限事項

JDBC1.0規格で定義されているメソッド

制限事項又は返却内容

allProceduresAreCallable

falseを返却します。

allTablesAreSelectable

falseを返却します。

getURL

接続しているデータベースのJDBC URLを返却します。

getUserName

データベースに接続する際に使用した認可識別子を返却します。

isReadOnly

アクセスモードを変更できないため，無条件にfalseを返却します。

nullsAreSortedHigh

trueを返却します。

nullsAreSortedLow

falseを返却します。

nullsAreSortedAtStart

falseを返却します。

nullsAreSortedAtEnd

無条件にfalseを返却します。

getDatabaseProductName

'HiRDB'を返却します。

getDatabaseProductVersion

nullを返却します。

getDriverName

'HiRDB_for_JDBC'を返却します。

getDriverVersion

08.05.0000を返却します。

getDriverMajorVersion

8です。

getDriverMinorVersion

5です。

usesLocalFiles

無条件にfalseを返却します。

usesLocalFilePerTable

無条件にfalseを返却します。

supportsMixedCaseIdentifiers

無条件にfalseを返却します。

storesUpperCaseIdentifiers

trueを返却します。

storesLowerCaseIdentifiers

無条件にfalseを返却します。

storesMixedCaseIdentifiers

falseを返却します。

supportsMixedCaseQuotedIdentifiers

trueを返却します。

storesUpperCaseQuotedIdentifiers

falseを返却します。

storesLowerCaseQuotedIdentifiers

無条件にfalseを返却します。

storesMixedCaseQuotedIdentifiers

trueを返却します。

getIdentifierQuoteString

無条件に引用符を返却します。

getSQLKeywords

HiRDB固有のSQLキーワードを返却します。

getNumericFunctions

数学関数のリストを返却します。

getStringFunctions

文字列関数のリストを返却します。

getSystemFunctions

システム関数のリストを返却します。

getTimeDateFunctions

時間関数と日付関数のリストを返却します。

getSearchStringEscape

'¥'を返却します。

getExtraNameCharacters

SQL識別名に使用できる特殊文字を返却します。

supportsAlterTableWithAddColumn

trueを返却します。

supportsAlterTableWithDropColumn

supportsColumnAliasing

nullPlusNonNullIsNull

supportsConvert（引数なし）

trueを返却します。

supportsConvert（引数あり）

引数で指定したデータ型の組み合わせによって，true又はfalseのどちらかを返却します。

supportsTableCorrelationNames

trueを返却します。

supportsDifferentTableCorrelationNames

supportsExpressionsInOrderBy

falseを返却します。

supportsOrderByUnrelated

trueを返却します。

supportsGroupBy

supportsGroupByUnrelated

supportsGroupByBeyondSelect

supportsLikeEscapeClause

supportsMultipleResultSets

無条件にtrueを返却します。

supportsMultipleTransactions

supportsNonNullableColumns

trueを返却します。

supportsMinimumSQLGrammar

無条件にtrueを返却します。

supportsCoreSQLGrammar

supportsExtendedSQLGrammar

falseを返却します。

supportsANSI92EntryLevelSQL

無条件にtrueを返却します。

supportsANSI92IntermediateSQL

無条件にfalseを返却します。

supportsANSI92FullSQL

supportsIntegrityEnhancementFacility

falseを返却します。

supportsOuterJoins

trueを返却します。

supportsFullOuterJoins

falseを返却します。

supportsLimitedOuterJoins

trueを返却します。

getSchemaTerm

'schema'を返却します。

getProcedureTerm

'procedure'を返却します。

getCatalogTerm

nullを返却します。

isCatalogAtStart

falseを返却します。

getCatalogSeparator

nullを返却します。

supportsSchemasInDataManipulation

無条件にtrueを返却します。

supportsSchemasInProcedureCalls

trueを返却します。

supportsSchemasInTableDefinitions

supportsSchemasInIndexDefinitions

supportsSchemasInPrivilegeDefinitions

supportsCatalogsInDataManipulation

falseを返却します。

supportsCatalogsInProcedureCalls

supportsCatalogsInTableDefinitions

supportsCatalogsInIndexDefinitions

無条件にfalseを返却します。

supportsCatalogsInPrivilegeDefinitions

supportsPositionedDelete

supportsPositionedUpdate

supportsSelectForUpdate

supportsStoredProcedures

trueを返却します。

supportsSubqueriesInComparisons

supportsSubqueriesInExists

supportsSubqueriesInIns

supportsSubqueriesInQuantifieds

supportsCorrelatedSubqueries

supportsUnion

supportsUnionAll

supportsOpenCursorsAcrossCommit

次のどれかの値がPRESERVEの場合，trueを返却します。

URLでのCOMMIT_BEHAVIORの設定

Properties infoでのCOMMIT_BEHAVIORの設定

setCommit_Behaviorメソッド実行時の引数

supportsOpenCursorsAcrossRollback

無条件にfalseを返却します。

supportsOpenStatementsAcrossCommit

次のどれかの値がPRESERVE又はCLOSEの場合，trueを返却します。

URLでのCOMMIT_BEHAVIORの設定

Properties infoでのCOMMIT_BEHAVIORの設定

setCommit_Behaviorメソッド実行時の引数

supportsOpenStatementsAcrossRollback

無条件にfalseを返却します。

getMaxBinaryLiteralLength

64000を返却します。

getMaxCharLiteralLength

32000を返却します。

getMaxColumnNameLength

30を返却します。

getMaxColumnsInGroupBy

255を返却します。

getMaxColumnsInIndex

16を返却します。

getMaxColumnsInOrderBy

255を返却します。

getMaxColumnsInSelect

30000を返却します。

getMaxColumnsInTable

getMaxConnections

0を返却します。

getMaxCursorNameLength

30を返却します。

getMaxIndexLength

4036を返却します。

getMaxSchemaNameLength

8を返却します。

getMaxProcedureNameLength

30を返却します。

getMaxCatalogNameLength

0を返却します。

getMaxRowSize

doesMaxRowSizeIncludeBlobs

falseを返却します。

getMaxStatementLength

2000000を返却します。

getMaxStatements

64を返却します。

getMaxTableNameLength

30を返却します。

getMaxTablesInSelect

64を返却します。

getMaxUserNameLength

8を返却します。

getDefaultTransactionIsolation

無条件にTRANSACTION_REPEATABLE_READを返却します。

supportsTransactions

無条件にtrueを返却します。

supportsTransactionIsolationLevel

与えられたトランザクションアイソレーションレベルが次のどれかの場合，trueを返却します。

TRANSACTION_READ_COMMITTED

TRANSACTION_READ_UNCOMMITTED

TRANSACTION_REPEATABLE_READ

supportsDataDefinitionAndDataManipulationTransactions

falseを返却します。

supportsDataManipulationTransactionsOnly

falseを返却します。

dataDefinitionCausesTransactionCommit

trueを返却します。

dataDefinitionIgnoredInTransactions

無条件にfalseを返却します。

getProcedures

Javaストアドルーチン関する記述を返却します。

getProcedureColumns

Javaストアドルーチンのパラメタに関する記述を返却します。

getTables

表に関する記述を返却します。組み込む表の型のリスト（types）に指定できるのは，getTableTypesで返却する表の型だけです。

getSchemas

スキーマ名称に関する記述を返却します。

getCatalogs

返却する結果は常に0件です。

getTableTypes

表の型に関する記述を返却します。返却する内容を次に示します。

"SYSTEM TABLE"：システム表

"BASE TABLE"：実表

"VIEW"：ビュー表

"READ ONLY VIEW"：読み込み専用ビュー表

getColumns

列に関する記述を返却します。

getColumnPrivileges

列の権限に関する記述を返却します。

getTablePrivileges

表の権限に関する記述を返却します。

getBestRowIdentifier

返却する結果は常に0件です。

getVersionColumns

getPrimaryKeys

主キーの列に関する記述を返却します（返却する結果は常に0件です）。

getImportedKeys

返却する結果は常に0件です。

getExportedKeys

主キーの列を参照する外部キーの列に関する記述を返却します（返却する結果は常に0件です）。

getCrossReference

主キーの表の主キー列を参照する，外部キーの表の外部キー列に関する記述を返却します（返却する結果は常に0件です）。

getTypeInfo

データベースで使用できる標準SQLタイプに関する記述を返却します。

getIndexInfo

インデクスに関する記述を返却します。

DatabaseMetaDataクラスのJDBC2.0基本規格で追加されたメソッドの制限事項又は返却内容を次の表に示します。

なお，各メソッドが返却する値は，常にJDBCドライバのバージョンと同一のバージョンのHiRDBサーバに関する情報です。

表16‒31　DatabaseMetaDataクラスのJDBC2.0基本規格で追加されたメソッドの制限事項

JDBC2.0基本規格で追加されたメソッド

制限事項又は返却内容

supportsResultSetType

結果セットタイプがTYPE_FORWARD_ONLY又はTYPE_SCROLL_INSENSITIVEの場合，trueを返却します。

supportsResultSetConcurrency

結果セットタイプがTYPE_FORWARD_ONLY又はTYPE_SCROLL_INSENSITIVEで，並行処理タイプがCONCUR_READ_ONLYの場合，trueを返却します。

ownUpdatesAreVisible

無条件にfalseを返却します。

ownDeletesAreVisible

ownInsertsAreVisible

othersUpdatesAreVisible

othersDeletesAreVisible

othersInsertsAreVisible

updatesAreDetected

deletesAreDetected

insertsAreDetected

supportsBatchUpdates

無条件にtrueを返却します。

getUDTs

返却する結果は常に0件です。

getConnection

DatabaseMetaDataインスタンスの生成元であるConnectionインスタンスを返却します。

16.13.9　Blobクラス

BlobクラスのJDBC2.0基本規格で追加されたメソッドの制限事項を次の表に示します。

表16‒32　BlobクラスのJDBC2.0基本規格で追加されたメソッドの制限事項

JDBC2.0基本規格で追加されたメソッド

制限事項

setBinaryStream

JDBC1.4のメソッドのため使用できません。無条件にSQLExceptionを投入します。

setBytes

truncate

16.13.10　Arrayクラス

ArrayクラスのJDBC2.0基本規格で追加されたメソッドの制限事項を次の表に示します。

表16‒33　ArrayクラスのJDBC2.0基本規格で追加されたメソッドの制限事項

JDBC2.0基本規格で追加されたメソッド

制限事項

getArray

MAPが使用できないため，引数にMAPを指定した場合，SQLExceptionを投入します。

getResultSet

17　Type4 JDBCドライバ

この章では，Type4 JDBCドライバのインストール，環境設定，JDBCの機能などについて説明します。

以降，この章では，Type4 JDBCドライバを単に「JDBCドライバ」と表記します。

17.1　インストールと環境設定

17.1.1　前提条件

(1)　接続先HiRDBサーバ

08-00以降のHiRDBに対して接続できます。プラットフォーム，シングルサーバ，パラレルサーバの条件は問いません。

(2)　HiRDBクライアント

JDBCドライバが動作する前提条件を次の表に示します。

表17‒1　JDBCドライバが動作する前提条件

対象

前提条件

OS

なし

Java Runtime Environmentのバージョン

JDBC2.0：6〜9

JDBC4.0：6〜9

17.1.2　インストール

JDBCドライバは，HiRDBをインストールすると同時にインストールされます。インストール後は，次のファイル構成となります。

UNIXの場合

HiRDB/client/lib/pdjdbc2.jar
HiRDB/client/lib/pdjdbc4.jar

Windows（サーバ製品）の場合

HiRDB¥client¥utl¥pdjdbc2.jar
HiRDB¥client¥utl¥pdjdbc4.jar

Windows（クライアント製品）の場合

HiRDB¥utl¥pdjdbc2.jar
HiRDB¥utl¥pdjdbc4.jar

注

下線で示す部分は，HiRDBのインストールディレクトリを指定します。

17.1.3　環境設定

JDBCドライバを使用してUAPを実行する前に，次の表に示すファイルをOSの環境変数CLASSPATHに指定してください。

表17‒2　環境変数CLASSPATHに指定するファイル

JDBCドライバのバージョン

環境変数CLASSPATHに指定するファイル

JDBC2.0

pdjdbc2.jar

JDBC4.0

pdjdbc4.jar

また，JDBCドライバが提供するJDBC規格外のメソッドなど，JDBCドライバが提供するクラスを直接操作する場合には，UAPをコンパイルする前に環境変数CLASSPATHを設定する必要があります。

なお，CosminexusなどのアプリケーションサーバからJDBCドライバを利用する場合，アプリケーションサーバの環境設定に依存します。詳細については，各アプリケーションサーバのマニュアルを参照し，仕様を確認してください。

JDBC4.0のJDBCドライバを使用する場合の設定例を次に示します。

(1)　UNIX環境の場合

(a)　ボーンシェル

CLASSPATH=${CLASSPATH}:/HiRDB/client/lib/pdjdbc4.jar
export CLASSPATH

注

下線で示す部分は，HiRDBのインストールディレクトリを指定します。

(b)　Ｃシェル

setenv CLASSPATH ${CLASSPATH}:/HiRDB/client/lib/pdjdbc4.jar

注

下線で示す部分は，HiRDBのインストールディレクトリを指定します。

(2)　Windows環境の場合（コマンドプロンプトからプログラムを実行）

set CLASSPATH=%CLASSPATH%;C:¥Program Files¥HITACHI¥HiRDB¥client¥utl¥pdjdbc4.jar

注

下線で示す部分は，HiRDBのインストールディレクトリを指定します。

17.1.4　メソッドの略記について

先頭に「get」が付くメソッドをまとめて表す場合，getXXXメソッドと表記します。

先頭に「set」が付くメソッドをまとめて表す場合，setXXXメソッドと表記します。

先頭に「execute」が付くメソッドをまとめて表す場合，executeXXXメソッドと表記します。

次に示すインタフェースをまとめて表す場合，DataSource系インタフェースと表記します。

DataSourceインタフェース

ConnectionPoolDataSourceインタフェース

XADataSourceインタフェース

17.2　DriverManagerクラスによるDB接続

DriverManagerクラスからHiRDBに接続して，Connectionクラスのインスタンスを生成するには，次の手順で接続します。

JDBC2.0を使用する場合，DriverクラスをJava仮想マシンに登録します。

JDBC4.0を使用する場合，自動でDriverクラスが登録されるため，Driverクラスを登録する必要はありません。

接続情報を引数にして，DriverManagerクラスのgetConnectionメソッドによってHiRDBに接続します。

17.2.1　Driverクラスの登録

Java仮想マシンにJDBCドライバを登録する方法を次に示します。

なお，Java仮想マシンにDriverクラスを登録する際に必要なドライバ名称は，「パッケージ名称.クラス名称」です。JDBCドライバのパッケージ名称とクラス名称は次のとおりです。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：HiRDBDriver

(1)　ClassクラスのforNameメソッドによる登録

アプリケーション内で，次のようにClassクラスのforNameメソッドを呼び出します。

  Class.forName("JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver");

(2)　システムプロパティへの登録

Java仮想マシンのシステムプロパティ「jdbc.drivers」に次の値を設定します。

  System.setProperty("jdbc.drivers", "JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver");

(3)　Java仮想マシンの動作設定ファイルへの登録（Appletの場合）

[JAVA_HOME]¥.hotjava¥propertiesファイルに，次の内容を記述します（[JAVA_HOME]は，Java実行環境によって異なります）。複数のJDBCドライバを登録する場合には，コロン（:）で区切って記述してください。

  jdbc.drivers="JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver"

17.2.2　getConnectionメソッドによるHiRDBへの接続

DriverManagerクラスのgetConnectionメソッドには，引数が異なる次の三つの形式があります。

public static Connection getConnection(String url)

public static Connection getConnection(String url, String user, String password)

public static Connection getConnection(String url, Properties info)

これらのメソッドの引数（url，user，password，及びinfo）には，HiRDBへの接続に必要な接続情報を指定します。

正常にHiRDBに接続した場合，JDBCドライバはこれらのメソッドを呼び出した結果として，Connectionクラスのインスタンスの参照を返却します。ただし，次の場合には，これらのメソッドはSQLExceptionを投入します。

必要な接続情報が各引数に指定されていない場合

接続情報の指定内容が不正な場合

接続に失敗した場合（接続先のHiRDBが開始していないときなど）

getConnectionメソッドの引数の指定内容を次の表に示します。

表17‒3　getConnectionメソッドの引数の指定内容

引数

指定内容

外部ドライバ※1

内部ドライバ※2

String url

URLを指定します。詳細については，「URLの構文」を参照してください。

○

○

String user

認可識別子を指定します。

指定値がナル値の場合は，認可識別子の指定がないものとみなされます。長さ0の文字列の場合は，SQLExceptionを投入し，KFPJ20212-Eメッセージの埋字となる"aa....aa"には"user"が設定されます。

指定の優先順位については，「接続情報の優先順位」を参照してください。

○

×

String password

パスワードを指定します。指定の優先順位については，「接続情報の優先順位」を参照してください。

指定値がナル値，又は長さ0の文字列の場合は，パスワードの指定がないものとみなされます。

○

×

Properties info

各種接続情報を指定します。詳細については，「ユーザプロパティ」を参照してください。

○

○

（凡例）

○：指定は有効になります。

×：指定は無効になります。

注※1

Javaアプリケーションで使用するJDBCドライバのことです。

注※2

Javaストアドプロシジャで使用するJDBCドライバのことです。

(1)　URLの構文

JDBCドライバで指定できるURLの構文について説明します。

なお，URL内の各項目及び項目間にはスペースを入れないでください。また，各項目名称の大文字と小文字を区別するため，注意してください。

(a)　URLの構文

  jdbc:hitachi:hirdb[://[DBID=接続付加情報]
                    [,DBHOST=DBホスト名称]
                    [,ENCODELANG=変換文字セット]
                    [,HIRDB_CURSOR=カーソル動作モード]
                    [,STATEMENT_COMMIT_BEHAVIOR=ステートメントのコミット実行後の状態]
                    [,JDBC_IF=JDBCインタフェースメソッドトレースの取得の有無]
                    [,TRC_NO=トレースのエントリ数]
                    [,SQLWARNING_IGNORE=警告情報を保持するかどうか]
                    [,LONGVARBINARY_ACCESS=BLOB型，BINARY型のアクセス方法]
                    [,SQL_IN_NUM=？パラメタ数]
                    [,SQL_OUT_NUM=出力パラメタ数]
                    [,SQLWARNING_LEVEL=警告保持レベル]
                    [,LONGVARBINARY_ACCESS_SIZE=LONGVARBINARYデータアクセスサイズ]
                    [,MAXBINARYSIZE=LONGVARBINARYデータの最大長]
                    [,LONGVARBINARY_TRUNCERROR=例外を投入するかどうか]
                    [,STATEMENT_CLOSE_BEHAVIOR=前処理結果を無効にするかどうか]
                    [,HiRDB_INI=HiRDB.iniファイルのディレクトリパス]
                    [,USER=ユーザ名称]
                    [,PASSWORD=パスワード]
                    [,UAPNAME=アプリケーション名称]
                    [,BATCHEXCEPTION_BEHAVIOR=BatchExceptionの更新カウントがJDBC規格に
                    準拠するかどうか]
                    [,UPDATECOUNT_BEHAVIOR=ステートメントの更新カウントがJDBC規格に準拠
                    するかどうか]
                    ]

(b)　URLの各項目の説明

jdbc:hitachi:hirdb

プロトコル名称，サブプロトコル名称，及びサブネームです。必ず指定してください。また，大文字と小文字の区別をするため，注意してください。

DBID=接続付加情報

HiRDBサーバのポート番号を指定します（クライアント環境定義のPDNAMEPORTに相当します）。又は，HiRDBの環境変数グループを指定します。

HiRDBサーバのポート番号を指定しなかった場合，そのほかの方法で設定した値が有効となります。HiRDBのポート番号の設定方法，及び優先順位については，「接続情報の優先順位」を参照してください。

どちらも指定されていない場合は，getConnectionメソッド実行時にSQLExceptionを投入します。

なお，内部ドライバの場合，HiRDBのポート番号指定は無効です。

＜注意事項＞

接続付加情報にHiRDBの環境変数グループを指定する場合，次の点に注意してください。

HiRDBの環境変数グループ名を指定する場合は，「@HIRDBENVGRP=」に続けて絶対パス名を指定します。「@HIRDBENVGRP=,」のように，"="の後に何も指定しないと，この項目による指定がないものとみなされます。

環境変数グループ名は大文字と小文字を区別するため，注意してください。なお，環境変数グループ名はOSに依存します。

環境変数グループ名に半角スペース，又は半角＠文字を含む場合，半角引用符（"）で囲んでください。環境変数グループ名を半角引用符で囲んだ場合，最後の半角引用符から次の設定項目，又は文字終端までの文字は無視されます。また，半角引用符，及び半角コンマを含む環境変数グループ名は指定できません。

エラーになる指定例を次に示します。

@△HIRDBENVGRP=/HiRDB_P/Client/HiRDB.ini
@HIRDBENVGRP△=/HiRDB_P/Client/HiRDB.ini
@HIRDBENVGRP=△/HiRDB_P/Client/HiRDB.ini
@HIRDBENVGRP=/HiRDB_P/Client/HiRDB.ini△

注　△は半角スペースを示します。

DBHOST=DBホスト名称

HiRDBのホスト名を指定します。

この指定を省略した場合，そのほかの方法で設定した値が有効となります。HiRDBのホスト名称の設定方法，及び優先順位については，「接続情報の優先順位」を参照してください。

どちらも指定されていない場合は，getConnectionメソッド実行時にSQLExceptionを投入します。

なお，内部ドライバの場合は，この指定は無効です。

ENCODELANG=変換文字セット

StringクラスでHiRDBとのデータ受け渡しをする場合に，接続先のHiRDBの文字コードに対応する変換文字セットを指定します。指定できる変換文字セットは，「Java 2 SDK, Standard Editionドキュメント」の「国際化」で示されるエンコーディング一覧から選択して指定してください。なお，Java仮想マシンがサポートしていない変換文字セット名称を指定した場合は，HiRDBサーバとの接続時にSQLExceptionを投入します。

この指定を省略した場合，JDBCドライバはHiRDBの文字コードと対応する変換文字セットで文字の変換をします。HiRDBの文字コードと対応する変換文字セットを次の表に示します。

表17‒4　HiRDBの文字コードと対応する変換文字セット

HiRDBの文字コード

（pdntenv又はpdsetupコマンドで設定した文字コード）

JDBCドライバが使用する変換文字セット

lang-c

ISO8859_1

sjis

SJIS又はMS932※

ujis

EUC_JP

utf-8

UTF-8

utf-8_ivs

UTF-8

chinese

EUC_CN

chinese-gb18030

GB18030

注※

SJISかMS932の指定は，アプリケーションでのWindows特殊文字の扱いによります。

"OFF"を指定した場合も，HiRDBの文字コードに対して表「HiRDBの文字コードと対応する変換文字セット」の変換文字セットが指定されたものとして動作します。HiRDBの文字コードがsjisの場合は，JDBCドライバが動作するOSによって変換文字セットは次のようになります。

UNIXの場合：SJIS

Windowsの場合：MS932

なお，"OFF"以外の指定値は大文字と小文字を区別するため，注意してください。

また，次のものについては，Java仮想マシンのデフォルトの変換文字セットで変換します。

UAP名称（プロパティのUAPNAMEなどで設定）の指定値

認可識別子又はパスワード（getConnectionメソッドなどで指定）

EnvironmentVariablesで指定したクライアント環境定義の指定値

HiRDBクライアントの環境変数グループ名で指定した各環境変数の指定値

HIRDB_CURSOR=カーソル動作モード

HiRDBがコミットした場合に，ResultSetクラスのオブジェクトを有効とするかどうかを指定します。

TRUE：コミットした場合でも，ResultSetクラスのオブジェクトを有効とします。

FALSE：コミットした場合，ResultSetクラスのオブジェクトを無効とします。

この指定を省略した場合，FALSEが仮定されます。

TRUE又はFALSE以外の値が指定された場合は，SQLExceptionを投入します。

また，無効となったResultSetオブジェクトでcloseメソッド呼び出し以外の操作をした場合は，SQLExceptionを投入します。

＜注意事項＞

HIRDB_CURSOR指定時の注意事項については，「HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIOR指定時の注意事項」を参照してください。

STATEMENT_COMMIT_BEHAVIOR=ステートメントのコミット実行後の状態

HiRDBがコミットした場合に，Statementクラス，PreparedStatementクラス，及びCallableStatementクラス（以降，この三つのクラスをまとめてステートメントと表記します）のオブジェクトを，コミット実行後も有効とするかどうかを指定します。

TRUE：コミットした場合でも，ステートメントのオブジェクトを有効とします。

FALSE：コミットした場合，ステートメントのオブジェクトを無効とします。

なお，コミット実行後に無効とするのは，ConnectionクラスのprepareStatementメソッド，若しくはprepareCallメソッドでプリコンパイルしたSQL文，又はステートメントのexecuteQueryメソッドで取得したResultSetクラスのオブジェクトです。

この指定を省略した場合，TRUEが仮定されます。

＜注意事項＞

STATEMENT_COMMIT_BEHAVIOR指定時の注意事項については，「HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIOR指定時の注意事項」を参照してください。

JDBC_IF=JDBCインタフェースメソッドトレースの取得の有無

JDBCインタフェースメソッドトレースの取得の有無を指定します。

ON：取得します。

OFF：取得しません。

この指定を省略した場合，OFFが仮定されます。上記以外の値を指定した場合は，SQLExceptionを投入します。

この指定の詳細については，「JDBC_IF」を参照してください。

TRC_NO=トレースのエントリ数

JDBCインタフェースメソッドトレースのエントリ数を指定します。

この指定の詳細については，「TRC_NO」を参照してください。

SQLWARNING_IGNORE=警告情報を保持するかどうか

データベースから返される警告をConnectionオブジェクトで保持するかどうかを指定します。

TRUE：警告を保持しません。

FALSE：警告を保持します。

この指定を省略した場合，FALSEが仮定されます。

上記以外の値を指定した場合は，SQLExceptionを投入します。

この指定の詳細については，「SQLWARNING_IGNORE」を参照してください。

LONGVARBINARY_ACCESS=BLOB型，BINARY型のアクセス方法

JDBCのSQLデータ型LONGVARBINARY型（HiRDBのBLOB型，BINARY型）のデータベースのアクセス方法を指定します。

REAL：実データでアクセスします。

LOCATOR：HiRDBの位置付け子機能を使用してアクセスします。

上記以外の場合はSQLExceptionを投入します。

この指定の詳細については，「LONGVARBINARY_ACCESS」を参照してください。

SQL_IN_NUM=？パラメタ数

実行するSQLの入力？パラメタの最大数を指定します。

この指定の詳細については，「HiRDB_for_Java_SQL_IN_NUM」を参照してください。

SQL_OUT_NUM=出力パラメタ数

実行するSQLの出力項目数の最大数を指定します。

この指定の詳細については，「HiRDB_for_Java_SQL_OUT_NUM」を参照してください。

SQLWARNING_LEVEL=警告保持レベル

SQL実行時に発生した警告情報の保持レベルを指定します。警告情報の保持レベルの詳細については，「SQLWarningオブジェクトの生成条件」を参照してください。

IGNORE：警告情報をIGNOREレベルで保持します。

SQLWARN：警告情報をSQLWARNレベルで保持します。

ALLWARN：警告情報をALLWARNレベルで保持します。

この指定を省略した場合，SQLWARNが仮定されます。

指定値が不正な場合は，SQLExceptionを投入します。

LONGVARBINARY_ACCESS_SIZE=LONGVARBINARYデータアクセスサイズ

HiRDBサーバに対して一度に要求するJDBCのSQLデータ型LONGVARBINARYのデータ長を指定します（単位：キロバイト）。

この指定の詳細については，「HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZE」を参照してください。

MAXBINARYSIZE=LONGVARBINARYデータの最大長

JDBCのSQLデータ型LONGVARBINARY型データ取得時のデータサイズの上限を設定します（単位：バイト）。

この指定の詳細については，「HiRDB_for_Java_MAXBINARYSIZE」を参照してください。

LONGVARBINARY_TRUNCERROR=例外を投入するかどうか

JDBCのSQLデータ型LONGVARBINARY型データ取得時に切り捨てが発生した場合に，例外を投入するかどうかを指定します。

TRUE：例外を投入します。

FALSE：例外を投入しません。

この指定の詳細については，「HiRDB_for_Java_LONGVARBINARY_TRUNCERROR」を参照してください。

STATEMENT_CLOSE_BEHAVIOR=前処理結果を無効にするかどうか

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかを指定します。

TRUE：前処理結果を無効にします。

FALSE：前処理結果を無効にしません。

上記以外の値を指定した場合は，SQLExceptionを投入します。

この指定の詳細については，「HiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR」を参照してください。

HiRDB_INI=HiRDB.iniファイルのディレクトリパス

HiRDB.iniファイル内に記述されているHiRDBクライアント環境変数を有効にする場合に，HiRDB.iniファイルが存在するディレクトリの絶対パスを指定します。ここで指定したディレクトリのHiRDB.iniファイルのHiRDBクライアント環境変数が有効になります。指定したディレクトリにHiRDB.iniファイルがない場合，及び内部ドライバの場合，この指定は無効になります。

また，この指定を省略した場合，HiRDB.iniファイルの内容は無視されます。

USER=ユーザ名称

ユーザ名称を指定します。

この指定の詳細については，「user」を参照してください。

PASSWORD=パスワード

パスワードを指定します。

この指定の詳細については，「password」を参照してください。

UAPNAME=アプリケーション名称

HiRDBサーバに対してアクセスするUAPの識別情報（UAP識別子）を指定します。

この指定の詳細については，「UAPNAME」を参照してください。

BATCHEXCEPTION_BEHAVIOR=BatchExceptionの更新カウントがJDBC規格に準拠するかどうか

java.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかを指定します。

TRUE：JDBC規格に準拠した更新カウントを設定します。

FALSE：HiRDB独自の更新カウントを設定します。

この指定の詳細については，「HiRDB_for_Java_BATCHEXCEPTION_BEHAVIOR」を参照してください。

UPDATECOUNT_BEHAVIOR=ステートメントの更新カウントがJDBC規格に準拠するかどうか

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として，-1を返却するかどうかを指定します。

TRUE：更新系SQL発行時の更新行数が0の場合，-1を返却します（JDBC規格）。

FALSE：更新系SQL発行時の更新行数が0の場合，0を返却します。

この指定の詳細については，「HiRDB_for_Java_UPDATECOUNT_BEHAVIOR」を参照してください。

(c)　HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIOR指定時の注意事項

HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIOR指定時の注意事項を次に示します。

＜HIRDB_CURSOR又はSTATEMENT_COMMIT_BEHAVIORにTRUEを指定した場合＞

クライアント環境定義PDDDLDEAPRPEXEがNO，かつPDDDLDEAPRPがNOの場合，SELECT文，INSERT文，DELETE文，UPDATE文，PURGE TABLE文，又はCALL文のどれかでアクセスするスキーマ資源（表やインデクスなど）に対して，ほかのユーザが定義系SQLを実行すると，スキーマ資源にアクセスしていたコネクションを切断するまでの間，又はスキーマ資源にアクセスしていたステートメントオブジェクトをクローズしコミットするまでの間（STATEMENT_CLOSE_BEHAVIORにTRUEを設定している場合），定義系SQLは排他待ちの状態になります。

クライアント環境定義PDDDLDEAPRPEXEがYES，又はPDDDLDEAPRPがYESの場合，SELECT文，INSERT文，DELETE文，UPDATE文，PURGE TABLE文，又はCALL文のどれかでアクセスするスキーマ資源（表やインデクスなど）に対して，ほかのユーザが定義系SQLを実行すると，SELECT文，INSERT文，DELETE文，UPDATE文，PURGE TABLE文，又はCALL文の前処理結果は無効になります。前処理結果が無効となったSQLを実行すると，SQLException例外（getErrorCodeメソッドで取得できる値は-1542）が発生します。

HIRDB_CURSOR又はSTATEMENT_COMMIT_BEHAVIORにTRUEを指定※1することで，コミット※2後もプリコンパイルしたSQL文※3が有効になるのは，SELECT文，INSERT文，DELETE文，UPDATE文，PURGE TABLE文，及びCALL文だけです。

注※1

次のどちらかの指定の場合も該当します。

・getConnectionメソッドで指定するプロパティ中の次の項目にTRUEを設定した。

　・HIRDB_CURSOR

　・HiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR

・PrdbDataSourceクラス，PrdbConnectionPoolDataSourceクラス，又はPrdbXADataSourceクラスの次のメソッドでtrueを指定した。

　・setHiRDBCursorMode

　・setStatementCommitBehavior

注※2

commitメソッドによる明示的なコミットのほかに，次の場合も該当します。

・自動コミットによる暗黙的なコミット

・定義系SQLの実行

・PURGE TABLE文の実行

注※3

ConnectionクラスのprepareStatementメソッド又はprepareCallメソッドを実行することでSQL文をプリコンパイルできます。

SELECT文，INSERT文，DELETE文，UPDATE文，PURGE TABLE文，及びCALL文以外のSQL文では，コミット時にプリコンパイル済みのSQL文は無効になります。

無効になったプリコンパイルしたSQL文を格納したPreparedStatementクラス又はCallableStatementクラスのオブジェクトでSQL文を実行するとエラーになります。エラーとなる例を次に示します。

  PreparedStatement pstmt1 = con.prepareStatement("lock table tb1");
  PreparedStatement pstmt2 = con.prepareStatement("lock table tb2");
  pstmt1.execute();  //エラーになりません。
  con.commit();
  pstmt2.execute();  //エラーになります。
  pstmt1.close();
  pstmt2.close();

この例では，実行するSQL文がLOCK文であるため，STATEMENT_COMMIT_BEHAVIORにTRUEを指定していても，コミット後はPreparedStatementが無効となって，エラーが発生します。

HIRDB_CURSORにTRUEを指定した場合，JDBCドライバはHiRDBのホールダブルカーソル機能を使用します。

HIRDB_CURSORにTRUEを指定した場合，結果集合返却機能を使用してプロシジャが返却する結果集合のカーソル動作モードは，プロシジャの定義によって決まります。ただし，JDBCドライバではプロシジャのカーソル動作モードを検知できないため，HIRDB_CURSORに指定された動作モードと仮定して動作します。そのため，HIRDB_CURSORがTRUEであっても，プロシジャが返却する結果集合のカーソル動作モードがホールダブルカーソルでない場合，コミット後のデータベースアクセスはSQLExceptionとなります。コミット後のResultSetオブジェクトの状態を次に示します。

プロシジャが返却する結果集合

HIRDB_CURSORの設定値

TRUE

FALSE

ホールダブルカーソルである

コミット後も使用可能

コミット後の操作でデータベースアクセスを伴う場合はエラーとなる※

ホールダブルカーソルでない

コミット後の操作でデータベースアクセスを伴う場合はエラーとなる

コミット後の操作でデータベースアクセスを伴う場合はエラーとなる

注※

コミット時にカーソルがクローズされないため，ResultSetオブジェクトのクローズ，若しくはResultSetオブジェクトを生成したCallableStatementオブジェクト又はConnectionオブジェクトをクローズするまでカーソルは開いたままとなります。

＜HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIORの組み合わせ＞

コミット実行後にResultSetオブジェクト及びステートメントオブジェクトが有効になるかどうかを，HIRDB_CURSOR，STATEMENT_COMMIT_BEHAVIORの組み合わせごとに次の表に示します。

表17‒5　コミット実行後のResultSetオブジェクト及びステートメントオブジェクトの状態

STATEMENT_COMMIT_BEHAVIORの指定値

HIRDB_CURSORの指定値

TRUE

FALSE

TRUE

ResultSetオブジェクト：

有効

ステートメントオブジェクト：

有効

ResultSetオブジェクト：

無効

ステートメントオブジェクト：

有効

FALSE

ResultSetオブジェクト：

無効

ステートメントオブジェクト：

無効

また，DatabaseMetaDataのメソッドの戻り値を，HIRDB_CURSOR，STATEMENT_COMMIT_BEHAVIORの組み合わせごとに次の表に示します。

表17‒6　DatabaseMetaDataのメソッドの戻り値

STATEMENT_COMMIT_BEHAVIORの指定値

HIRDB_CURSORの指定値

TRUE

FALSE

TRUE

supportsOpenStatementsAcrossCommit：

true

supportsOpenCursorsAcrossCommit：

true

supportsOpenStatementsAcrossCommit：

true

supportsOpenCursorsAcrossCommit：

false

FALSE

supportsOpenStatementsAcrossCommit：

false

supportsOpenCursorsAcrossCommit：

false

＜コミット実行時のJDBCドライバの動作例＞

コミット実行時のJDBCドライバの動作は，HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIORの指定によって異なります。

指定例

[A]
pstmt1=con.prepareStatement("select c1 from tb1");  [1]
[B]
rs1=pstmt1.executeQuery();                          [2]
[C]
rs1.next()                                          [3]
[D]
v1=rs1.getInt(1)                                    [4]
[E]
rs1.next()                                          [5]
[F]
v1=rs1.getInt(1)                                    [6]
[G]
rs1.close()                                         [7]

コミット実行時の動作

コミットのタイミング

H=T，S=T※1

H=F，S=T※2

H=F，S=F※3

[A]

[1]〜[7]は正常に動作します。

[B]

[1]〜[7]は正常に動作します。

[1]，[2]，[7]：正常に動作します。

[3]〜[6]：SQLExceptionを投入します。

[C]

[1]〜[7]は正常に動作します。

[1]，[2]，[7]：正常に動作します。

[3]〜[6]：SQLExceptionを投入します。

[D]

[1]〜[7]は正常に動作します。

[1]〜[3]，[7]：正常に動作します。

[4]〜[6]：SQLExceptionを投入します。

[E]

[1]〜[7]は正常に動作します。

[1]〜[4]，[7]：正常に動作します。

[5]，[6]：SQLExceptionを投入します。

[F]

[1]〜[7]は正常に動作します。

[1]〜[5]，[7]：正常に動作します。

[6]：SQLExceptionを投入します。

[G]

[1]〜[7]は正常に動作します。

注※1　HIRDB_CURSORにTRUE，STATEMENT_COMMIT_BEHAVIORにTRUEを指定した場合を示します。

注※2　HIRDB_CURSORにFALSE，STATEMENT_COMMIT_BEHAVIORにTRUEを指定した場合を示します。

注※3　HIRDB_CURSORにFALSE，STATEMENT_COMMIT_BEHAVIORにFALSEを指定した場合を示します。

＜そのほかの注意事項＞

クライアント環境定義PDDDLDEAPRPについての注意事項は，「クライアント環境定義の設定内容」を参照してください。

また，DECLARE CURSORのホールダブルカーソルについての規則は，マニュアル「HiRDB SQLリファレンス」を参照してください。

(2)　ユーザプロパティ

DriverManagerクラスのgetConnectionメソッドに指定できるプロパティを次の表に示します。なお，プロパティの指定値がナル値の場合，指定を省略したものとして扱われます。

表17‒7　getConnectionメソッドに指定できるプロパティ

プロパティ

指定内容

user

認可識別子

password

パスワード

UAPNAME

UAP識別子

JDBC_IF

JDBCインタフェースメソッドトレースの取得の有無

TRC_NO

JDBCインタフェースメソッドトレースのエントリ数

ENCODELANG

接続先のHiRDBの文字コードに対応する変換文字セット

SQLWARNING_IGNORE

データベースから返される警告をConnectionオブジェクトで保持するかどうか

HIRDB_CURSOR

カーソル動作モード

LONGVARBINARY_ACCESS

JDBC SQLタイプLONGVARBINARY（HiRDBのデータ型であるBLOB型，及びBINARY型）のデータへのアクセス方法

HiRDB_for_Java_SQL_IN_NUM

実行するSQLの入力？パラメタの最大数

HiRDB_for_Java_SQL_OUT_NUM

実行するSQLの出力項目の最大数

HiRDB_for_Java_SQLWARNING_LEVEL

SQL実行時に発生した警告情報の保持レベル

HiRDB_for_Java_ENV_VARIABLES

HiRDBクライアント環境変数

HiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR

ステートメントのコミット実行後の状態

HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZE

HiRDBサーバに対して一度に要求するJDBC SQLタイプLONGVARBINARY型データの長さ

HiRDB_for_Java_MAXBINARYSIZE

JDBC SQLタイプLONGVARBINARY型データ取得時のデータサイズの上限

HiRDB_for_Java_LONGVARBINARY_TRUNCERROR

JDBC SQLタイプLONGVARBINARY型データ取得時に切り捨てが発生した場合に，例外を投入するかどうか

HiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうか

HiRDB_for_Java_DBID

接続付加情報

HiRDB_for_Java_DBHOST

ホスト名称

HiRDB_for_Java_HiRDB_INI

HiRDB.iniファイルのディレクトリパス

HiRDB_for_Java_BATCHEXCEPTION_BEHAVIOR

JDBC規格に準拠した更新カウントを設定するかどうか

HiRDB_for_Java_UPDATECOUNT_BEHAVIOR

ステートメントの更新カウントがJDBC規格に準拠するかどうか

(a)　user

認可識別子を指定します。

指定値がナル値の場合は，認可識別子の指定がないものとみなされます。長さ0の文字列の場合は，SQLExceptionを投入します。

この指定を省略した場合，getConnectionメソッドの引数Properties中の，HiRDB_for_Java_ENV_VARIABLESで指定したHiRDBクライアント環境定義のPDNAMEPORT，又はURL中のDBIDに指定したHiRDB環境変数グループ内のPDUSERの指定値が有効となります。指定の優先順位については，「接続情報の優先順位」を参照してください。

どちらも指定されていない場合は，getConnectionメソッド実行時にSQLExceptionを投入します。

なお，内部ドライバの場合は，このプロパティの指定は無効です。

(b)　password

パスワードを指定します。

指定値がナル値の場合又は長さが0の場合は，パスワードの指定がないものとみなされます。

この指定を省略した場合については，「接続情報の優先順位」を参照してください。

なお，内部ドライバの場合は，このプロパティの指定は無効です。

(c)　UAPNAME

HiRDBサーバに対してアクセスする，UAPの識別情報（UAP識別子）を指定します。

次の場合は，認可識別子の指定がないものとみなされます。

ナル値を指定した場合

長さ0の文字列，又は半角スペースだけの文字列を指定した場合

指定できる文字列の詳細については，「クライアント環境定義の設定内容」のクライアント環境定義PDCLTAPNAMEを参照してください。

この指定を省略した場合については，「接続情報の優先順位」を参照してください。

なお，内部ドライバの場合は，このプロパティの指定は無効です。

《注意事項》

このプロパティで指定したUAPは，ENCODELANGで指定された変換文字セットでエンコードされ，エンコード後のUAP識別子の先頭から30バイトがHiRDBサーバに転送されます（30バイト目が文字の途中であっても，30バイトまでで打ち切られます）。そのため，HiRDBサーバで取得できるUAP識別子は，エンコード後の先頭30バイトまでです。

(d)　JDBC_IF

JDBCインタフェースメソッドトレースの取得の有無を指定します。

ON：JDBCインタフェースメソッドトレースを取得します。

OFF：JDBCインタフェースメソッドトレースを取得しません。

この指定を省略した場合，OFFが仮定されます。

また，これらの値以外を指定すると，SQLExceptionを投入します。

なお，次に示す場合，このプロパティの指定は無効です。

setLogWriterメソッドで有効なログライタを指定していない場合

内部ドライバの場合

JDBCインタフェースメソッドトレースの詳細は，「JDBCインタフェースメソッドトレース」を参照してください。

(e)　TRC_NO

　　　〜＜符号なし整数＞((10〜1000))《500》

JDBCインタフェースメソッドトレースのエントリ数を指定します。

このプロパティは，次の条件をすべて満たしている場合に有効になります。

setLogWriterメソッドで有効なログライタを設定している。

JDBC_IFにONを指定している。

なお，内部ドライバの場合は，このプロパティの指定は無効です。

プロパティの指定が有効な状態で，かつ指定値が不正な場合は，SQLExceptionを投入します。

JDBCインタフェースメソッドトレースの詳細は，「JDBCインタフェースメソッドトレース」を参照してください。

(f)　ENCODELANG

StringクラスでHiRDBとのデータ受け渡しをする場合に，接続先のHiRDBの文字コードに対応する変換文字セットを指定します。

指定できる変換文字セットは，「Java 2 SDK, Standard Editionドキュメント」の「国際化」で示されるエンコーディング一覧から選択してください。

HiRDBの文字コードと対応する変換文字セットは，「HiRDBの文字コードと対応する変換文字セット」を参照してください。

OFFを指定すると，HiRDBの文字コードに対して「HiRDBの文字コードと対応する変換文字セット」の変換文字セットが指定されたものとして動作します。なお，HiRDBの文字コードがsjisの場合，JDBCドライバが動作するOSによって変換文字セットは次のようになります。

UNIXの場合：SJIS

Windowsの場合：MS932

また，OFF以外の指定値は大文字と小文字を区別するため，注意してください。

Java仮想マシンがサポートしていない変換文字セット名称を指定した場合は，HiRDBサーバとの接続時にSQLExceptionを投入します。

この指定を省略した場合，JDBCドライバはURL中のENCODELANGで指定した変換文字セットで文字の変換をします。

(g)　SQLWARNING_IGNORE

データベースから返される警告をConnectionオブジェクトで保持するかどうかを指定します。

TRUE：警告を保持しません。

FALSE：警告を保持します。

この指定を省略した場合，URL中のSQLWARNING_IGNOREで指定した値が有効になります。TRUE又はFALSE以外を指定すると，SQLExceptionを投入します。

Connectionオブジェクトの警告保持は，このプロパティと，HiRDB_for_Java_SQLWARNING_LEVELの指定値で決定します。警告保持レベルについては，「SQLWarningオブジェクトの生成条件」を参照してください。なお，このプロパティでは，指定した内容について大文字と小文字を区別しません。

(h)　HIRDB_CURSOR

HiRDBがコミットした場合に，ResultSetクラスのオブジェクトを有効とするかどうか（カーソル動作モード）を指定します。

TRUE：コミットした場合でも，ResultSetクラスのオブジェクトを有効とします。

FALSE：コミットした場合，ResultSetクラスのオブジェクトを無効とします。

この指定を省略した場合，URL中のHIRDB_CURSORで指定した値が有効になります。TRUE又はFALSE以外を指定すると，SQLExceptionを投入します。

また，無効となったResultSetオブジェクトでcloseメソッド呼び出し以外の操作をした場合，SQLExceptionを投入します。

《注意事項》

このプロパティを指定するときの注意事項については，「HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIOR指定時の注意事項」を参照してください。

(i)　LONGVARBINARY_ACCESS

JDBC SQLタイプLONGVARBINARY（HiRDBのデータ型であるBLOB型，及びBINARY型）のデータへのアクセス方法を指定します。

REAL：実データでアクセスします。

LOCATOR：HiRDBの位置付け子機能を使用してアクセスします。

ただし，定義長が1,024バイト以下のBINARY列へのアクセス時は，実データでアクセスします。

この指定を省略した場合，REALが仮定されます。

また，これらの値以外を指定すると，SQLExceptionを投入します。

《注意事項》

LONGVARBINARY_ACCESS指定時の注意事項を次に示します。

＜HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZEと併せて指定した場合の注意事項＞

HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZE，及びLONGVARBINARY_ACCESSの指定による，BLOB型又はBINARY型データ（HiRDBのデータ型）の取得方法の違いを次の表に示します。

表17‒8　BLOB型又はBINARY型データ（HiRDBのデータ型）の取得方法の違い

実行メソッド

LONGVARBINARY_ACCESSの指定値※

REAL

LOCATOR

CallableStatement.execute

ResultSet.next

BLOB型又はBINARY型データの全体を，接続先DBから取得します。

BLOB型又はBINARY型データの全体ではなく，接続先DB内のBLOB型又はBINARY型データを示す位置付け子を取得します。

CallableStatement.getBytes

CallableStatement.getString

CallableStatement.getObject

ResultSet.getBytes

ResultSet.getString

ResultSet.getObject

ResultSet.nextで取得したBLOB型又はBINARY型データを使用します。

BLOB型又はBINARY型データの全体を，接続先DBからACCESSSIZE×1024バイト単位に分割して取得します。

Blob.getBytes

ResultSet.nextで取得したBLOB型又はBINARY型データから，引数で指定された範囲を切り出して取得します。

引数で指定された範囲のBLOB型又はBINARY型データを，接続先DBからACCESSSIZE×1024バイト単位に分割して取得します。

CallableStatement.getBinaryStream

ResultSet.getBinaryStream

ResultSet.getAsciiStream

ResultSet.getUnicodeStream

Blob.getBinaryStream

実行メソッドによって取得したInputStreamのreadメソッドを実行した場合，ResultSet.nextで取得したBLOB型又はBINARY型データから抽出して取得します。

実行メソッドによって取得したInputStreamのreadメソッドを実行した場合，接続先DBからデータを取得します。

Blob.length

ResultSet.nextで取得したBLOB型又はBINARY型データからデータ長を取得します。

接続先DBからデータ長を取得します。

Blob.position

ResultSet.nextで取得したBLOB型又はBINARY型データから，検索パターンに一致する位置を取得します。

接続先DBから，検索パターンに一致する位置を取得します。

CallableStatement.getBinaryStream，ResultSet.getBinaryStream，Blob.getBinaryStreamで取得したInputStream

InputStream.available

位置付け子が示す実データの長さ以下の値を返却します。

ACCESSSIZE×1024バイト以下の値を返却します。

InputStream.skip

位置付け子が示す実データの長さ以下までの範囲で読み飛ばします。

最大ACCESSSIZE×1024バイト以下で読み飛ばします。

CallableStatement.getCharacterStream

ResultSet.getCharacterStream

getCharacterStreamによって取得したReaderのreadメソッドを実行した場合，ResultSet.nextで取得したBLOB型又はBINARY型データから抽出して取得します。

getCharacterStreamによって取得したReaderのreadメソッドを実行した場合，接続先DBからデータを取得します。

（凡例）

ACCESSSIZE：HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZEの指定値を示します。

InputStream及びReader：JDBCドライバのgetBinaryStream，getAsciiStream，getCharacterStreamが返したオブジェクトのクラスを示します。

注※　定義長が1,024バイト以下のBINARY列へのアクセス時は，"REAL"が指定されたものとして動作します。

＜実行性能に関する注意事項＞

LONGVARBINARY_ACCESSに"LOCATOR"を指定すると，"REAL"を指定した場合に比べて性能が低下するおそれがあります。

"REAL"を指定した場合，ResultSet.next時又はCallableStatement.execute時に位置付け子を取得するために1回接続先DBにアクセスします。それに対して"LOCATOR"を指定すると，ResultSet.next時又はCallableStatement.execute時のアクセス1回に加えて，getBytesなどのデータを取得するメソッド実行時などにデータ長取得のために1回，データ取得のために1回以上接続先DBにアクセスします。

＜AUTOコミットが有効な場合の注意事項＞

AUTOコミットが有効な場合でも，次のタイミングではコミットを実行しません。

LONGVARBINARY_ACCESSに"LOCATOR"を指定し，次のどちらかに該当する出力パラメタを指定しているストアドプロシジャの実行

・出力パラメタが1,024バイトより大きいサイズのBINARY型

・出力パラメタがBLOB型

結果集合返却機能を使用したストアドプロシジャの実行

＜トランザクション終了後のデータ操作に間する注意事項＞

LONGVARBINARY_ACCESSに"LOCATOR"を指定した場合，SQLの実行結果取得（ResultSet.next，又はCallableStatement.execute）からデータ操作（Blob.getBytesやInputStream.readなど）までにトランザクションが終了すると，データ操作ができません。また，HIRDB_CURSORの指定が"TRUE"であっても，トランザクション終了後のデータ操作は実行できません。

そのため，データ操作はトランザクション終了前に実行してください。

(j)　HiRDB_for_Java_SQL_IN_NUM

　　　〜＜符号なし整数＞((1〜30000))《300》

実行するSQLの入力？パラメタの最大数を指定します。

この指定は，SQLの前処理時に取得する入力？パラメタ情報の数となります。実際の入力？パラメタの数がこのプロパティの指定値よりも多い場合，JDBCドライバはSQLの前処理の後にHiRDBサーバから入力？パラメタ情報を取得します。

指定値が不正な場合は，SQLExceptionを投入します。

《注意事項》

入力？パラメタのあるSQL文を実行しない場合は，1を指定することを推奨します。

(k)　HiRDB_for_Java_SQL_OUT_NUM

　　　〜＜符号なし整数＞((1〜30000))《300》

実行するSQLの出力項目の最大数を指定します。

この指定は，SQLの前処理時に取得する出力項目情報の数となります。実際の出力項目情報の数がこのプロパティの指定値よりも多い場合，JDBCドライバはSQLの前処理の後にHiRDBサーバから出力項目情報を取得します。

指定値が不正な場合は，SQLExceptionを投入します。

《注意事項》

出力項目のあるSQL文を実行しない場合は，1を指定することを推奨します。

(l)　HiRDB_for_Java_SQLWARNING_LEVEL

SQL実行時に発生した警告情報の保持レベルを指定します。警告情報の保持レベルの詳細については，「SQLWarningオブジェクトの生成条件」を参照してください。

IGNORE：警告情報をIGNOREレベルで保持します。

SQLWARN：警告情報をSQLWARNレベルで保持します。

ALLWARN：警告情報をALLWARNレベルで保持します。

この指定を省略した場合，"SQLWARN"が仮定されます。

指定値が不正な場合は，SQLExceptionを投入します。

(m)　HiRDB_for_Java_ENV_VARIABLES

HiRDBクライアント環境定義を指定します。次のように指定してください。

  変数名＝値;変数名＝値; ..<省略>.. ;変数名＝値

JDBCドライバで指定できるクライアント環境定義は，「指定できるクライアント環境定義」を参照してください。変数名にJDBCドライバで指定できないクライアント環境定義が指定された場合，指定を無視します。なお，変数名は大文字と小文字を区別するため，注意してください。

複数の設定方法を持つ接続情報の優先順位については，「接続情報の優先順位」を参照してください。

《指定例》

java.util.Properties prop;
prop=new java.util.Properties();
prop.setProperty("HiRDB_for_Java_ENV_VARIABLES",
 "PDFESHOST=FES1;PDCWAITTIME=0");

(n)　HiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR

HiRDBがコミットした場合に，ステートメントのオブジェクトをコミット実行後も有効とするかどうかを指定します。

TRUE：コミットした場合でも，ステートメントのオブジェクトを有効とします。

FALSE：コミットした場合，ステートメントのオブジェクトを無効とします。

なお，コミット実行後に無効とするのは，ConnectionクラスのprepareStatementメソッドでプリコンパイルしたSQL文，ConnectionクラスのprepareCallメソッドでプリコンパイルしたSQL文，又はステートメントのexecuteQueryメソッドで取得したResultSetクラスのオブジェクトです。

この指定を省略した場合，URL中のSTATEMENT_COMMIT_BEHAVIORで指定した値が有効になります。

《注意事項》

このプロパティを指定するときの注意事項については，「HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIOR指定時の注意事項」を参照してください。

(o)　HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZE

　　　〜＜符号なし整数＞((0〜2097151))《0》（単位：キロバイト）

HiRDBサーバに対して一度に要求するJDBC SQLタイプLONGVARBINARY型データの長さを指定します。LONGVARBINARY_ACCESSでLOCATOR以外を指定している場合，この指定は無効です。

例えば，このプロパティに20を指定した場合，データベースに格納している100キロバイトのJDBC SQLタイプLONGVARBINARY型データをResultSetのgetBytesメソッドで取得しようとすると，JDBCドライバはデータを20キロバイトずつ5回に分けて取得し，返却します。0の場合はデータ全体を一度に要求します。

指定値が不正な場合は，SQLExceptionを投入します。

《注意事項》

このプロパティを指定するときの注意事項については，「LONGVARBINARY_ACCESS」を参照してください。

(p)　HiRDB_for_Java_MAXBINARYSIZE

　　　〜＜符号なし整数＞((0〜2147483647))（単位：バイト）

JDBC SQLタイプLONGVARBINARY型データ取得時のデータサイズの上限を指定します。

JDBC SQLタイプLONGVARBINARY型データを取得する際，JDBCドライバはデータを取得するまで実際のデータ長を認識できないため，定義長分のメモリを確保します。そのため，定義長にHiRDBのデータ型であるBINARY型又はBLOB型の最大長である2,147,483,647バイトのように長大なサイズを指定した列の値を取得する場合は，その定義長である2,147,483,647バイトのメモリを確保しようとします。そのため，実行環境によってはメモリ不足が発生することがあります。

したがって，このプロパティで，実際に格納されているデータの最大長を指定してください。取得対象となるHiRDBのデータ型であるBINARY型又はBLOB型データの定義長が，このプロパティで指定したサイズよりも大きい場合，取得データをこのプロパティで指定したサイズに切り捨てます。実際にデータを切り捨てた場合，ResultSetのnextメソッド実行時に，JDBCドライバはHiRDBサーバから警告を受け取ります。受け取った警告に対しては，setLONGVARBINARY_TruncErrorの指定値に従ってSQLExceptionの投入，SQLWarningの生成（又は無視）をします。

このプロパティで上限を設定していない場合は，取得対象データの定義長を上限とします。

指定値が不正な場合は，SQLExceptionを投入します。

《注意事項》

LONGVARBINARY_ACCESSに"LOCATOR"を指定し，BLOB列又は定義長が1,024バイトより大きいBINARY列にアクセスする場合は，このプロパティの指定値は無効です。実際のデータ長に基づいて領域を確保し，全データを取得します。

(q)　HiRDB_for_Java_LONGVARBINARY_TRUNCERROR

JDBC SQLタイプLONGVARBINARY型データ取得時に切り捨てが発生した場合に，例外を投入するかどうかを指定します。

TRUE：切り捨てが発生した場合に例外を投入します。

FALSE：切り捨てが発生した場合に例外を投入しません。

この指定を省略した場合，TRUEが仮定されます。

HiRDB_for_Java_SQLWARNING_LEVELにIGNOREを指定している場合は，FALSEが指定されたものとして動作します。

なお，JDBC SQLタイプLONGVARBINARY型データ取得時に発生する切り捨てとは，次の条件を満たしている場合を指します。

SQLの実行で得られるJDBC SQLタイプLONGVARBINARY型データの実際の長さ ＞ HiRDB_for_Java_MAXBINARYSIZEで指定したデータ長

(r)　HiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR

ステートメントオブジェクト又はResultSetオブジェクトを，コミット後も有効にする指定をしている場合※1，ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかを指定します。

なお，システムプロパティのHiRDB_for_Java_STATEMENT_CLOSE_BEHAVIORでも指定できます。

サーバがXDM/RD E2の場合，この指定は無効になります。

TRUE：前処理結果を無効にします。

FALSE：前処理結果を無効にしません。

指定値が不正な場合は，SQLExceptionを投入します。

このプロパティは，指定した内容について大文字と小文字を区別しません。

また，この指定を省略した場合，URL中の項目STATEMENT_CLOSE_BEHAVIORの指定値が有効になります。URL中に指定がない場合は，FALSEが指定されたものとして動作します。

クライアント環境変数PDDDLDEAPRP，及びPDDDLDEAPRPEXEにNOを指定した場合，SQL（SELECT文，INSERT文，DELETE文，UPDATE文，PURGE TABLE文，CALL文）を実行したとき，SQLがアクセスするスキーマ資源（表やインデクスなど）に対して，ほかのユーザが定義系SQLを実行すると，定義系SQLは排他待ちの状態になります。この排他待ち状態を解除する契機を次に示します。なお，TRUEを指定すると，コミット実行時に解除できます。

ステートメントオブジェクト又はResultSetオブジェクトを，コミット後も有効にする指定をしている場合

TRUEを指定したとき

ステートメントclose後のコミット実行時※2，又はコネクション切断時

FALSEを指定したとき

コネクション切断時

その他の場合

コミット実行時※2，又はコネクション切断時

注※1

次のどれかになります。

getConnectionメソッドで指定するプロパティ中の次の項目にTRUEを設定している。

HIRDB_CURSOR

HiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR

getConnectionメソッドで指定するURL中の次の項目にTRUEを設定している。

HIRDB_CURSOR

STATEMENT_COMMIT_BEHAVIOR

PrdbDataSourceクラス，PrdbConnectionPoolDataSourceクラス，又はPrdbXADataSourceクラスの次のメソッドでtrueを設定している。

setHiRDBCursorMode

setStatementCommitBehavior

Connection.setHoldability（引数にResultSet.HOLD_CURSORS_OVER_COMMIT指定）メソッドを実行している。

Connectionクラスの次のメソッド（引数resultSetHoldabilityにResultSet.HOLD_CURSORS_OVER_COMMITを指定）を実行している。

createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)

prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)

prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)

注※2

commitメソッドによる明示的なコミットのほかに，次の場合も該当します。

自動コミットによる暗黙的なコミット

定義系SQLの実行

PURGE TABLE文の実行

rollbackメソッドによる明示的なロールバック

SQL実行エラーによる暗黙的なロールバック

TRUEを指定，かつステートメントオブジェクト又はResultSetオブジェクトを，コミット後も有効にする指定をしている場合，ステートメントのclose時，HiRDBはトランザクションを生成してDEALLOCATE PREPARE処理を実行します。このため，クライアント環境変数PDSWAITTIMEを指定している場合，PDSWAITTIMEで指定した時間監視が開始されます。自動コミットを無効にしている場合，ステートメントのclose後，ほかのステートメントでのSQL実行や，コミット又はコネクション切断を長時間実行しないと，時間監視によってHiRDBは接続を切断します。

DEALLOCATE PREPARE処理とトランザクションの関係を次の図に示します。

図17‒1　DEALLOCATE PREPARE処理とトランザクションの関係

Java EEアプリケーションサーバのコネクションプーリング機能を使用している場合，アプリケーションからコネクションのcloseメソッドを呼び出しても，コネクションはプールに戻り，トランザクションは残ります。このため，TRUEを指定した場合は，ステートメントのclose後にコミットを実行する必要があります。

また，ステートメントプーリング機能を使用している場合，この指定を省略するか，FALSEを指定してください。

(s)　HiRDB_for_Java_DBID

HiRDBのポート番号（PDNAMEPORTに当たる情報），又はHiRDBクライアントの環境変数グループファイル名を指定します。この指定の詳細については，「URLの各項目の説明」のDBIDの説明を参照してください。

(t)　HiRDB_for_Java_DBHOST

HiRDBのホスト名称を指定します。この指定の詳細については，「URLの各項目の説明」のDBHOSTの説明を参照してください。

(u)　HiRDB_for_Java_HiRDB_INI

HiRDB.iniファイル内に記述されているHiRDBクライアント環境変数を有効にする場合に，HiRDB.iniファイルが存在するディレクトリの絶対パスを指定します。ここで指定したディレクトリのHiRDB.iniファイルのHiRDBクライアント環境変数が有効になります。指定したディレクトリにHiRDB.iniファイルがない場合，及び内部ドライバの場合，この指定は無効になります。

また，この指定を省略した場合，URL中の項目HiRDB_INIの指定値が仮定されます。URL中に指定がない場合は，このファイルの内容を無視します。

(v)　HiRDB_for_Java_BATCHEXCEPTION_BEHAVIOR

java.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかを指定します。

なお，このプロパティの指定は，接続先がバージョン08-02以降のHiRDBの場合に有効です。

TRUE：JDBC規格に準拠した更新カウントを設定します。

FALSE：HiRDB独自の更新カウントを設定します。

このプロパティは，指定した内容について大文字と小文字を区別しません。

また，この指定を省略した場合，URL中の項目BATCHEXCEPTION_BEHAVIORの指定値が有効になります。URL中に指定がない場合は，TRUEが指定されたものとして動作します。

(w)　HiRDB_for_Java_UPDATECOUNT_BEHAVIOR

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかを指定します。

TRUE：更新系SQL発行時の更新行数が0の場合，-1を返却します（JDBC規格）。

FALSE：更新系SQL発行時の更新行数が0の場合，0を返却します。

このプロパティは，指定した内容について大文字と小文字を区別しません。

また，この指定を省略した場合，ほかの設定方法で指定した値が有効になります。ほかの設定方法については，「接続情報の優先順位」を参照してください。値が指定されていない場合は，FALSEが指定されたものとして動作します。

17.3　DataSourceとJNDIを使用したDB接続

17.3.1　DataSourceとJNDIを使用したDB接続の手順

DataSourceとJNDIを使用したDB接続は，JDBC2.0 Optional Packageで使用できるようになりました。

必ずしもJNDIを使用する必要はありませんが，JNDIを使用することで接続情報の設定が1回で済むというメリットがあります。DataSourceクラスのインタフェース定義，及びJNDIは，JDKに標準で含まれていないため，AP開発をする場合には，JavaSoftのWebサイトから入手する必要があります。

DataSourceとJNDIを使用したDB接続の手順を次に示します。

DataSourceオブジェクトの生成

接続情報の設定

JNDIへのDataSourceの登録

JNDIからのDataSourceの取得

DB接続

JNDIを使用しない場合は，3及び4の操作をする必要はありません。

JNDIを使用する場合，1〜3の操作は1回だけ実行します。その後，4及び5の操作をするだけで，DB接続ができます。また，4の操作の後，必要に応じて接続情報を変更できます。

(1)　DataSourceオブジェクトの生成

JDBCドライバが提供する，DataSourceクラスのオブジェクトを生成します。

DataSourceクラスのオブジェクト生成で必要となる，JDBCドライバのDataSourceクラス名はPrdbDataSourceとなります。

DataSourceクラスのオブジェクトの生成例を次に示します。

 JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDataSource  ds = null ;
 ds = new JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDataSource() ;

(2)　接続情報の設定

DataSourceオブジェクトに対して，接続情報設定用メソッドを呼び出し，接続情報の設定をします。接続情報取得用のメソッドも使用できるため，現在の接続情報の確認もできます。接続情報設定／取得メソッドについては，「接続情報設定／取得インタフェース」を参照してください。

(3)　JNDIへのDataSourceの登録

DataSourceオブジェクトをJNDIに登録します。

JNDIは，その実行環境によって幾つかのサービスプロバイダを選択できます。

DataSourceオブジェクトのJNDIへの登録例を次に示します（Windowsの場合の例です）。なお，登録例では，サービスプロバイダの一つである，File Systemサービスプロバイダを使用しています。ほかのサービスプロバイダについては，JNDIのドキュメントを参照してください。

 // JDBCドライバが提供するDataSourceクラスのオブジェクトを生成する
 JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDataSource  ds;
 ds = new JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDataSource();

 // 接続情報を設定する
         ：
 // システムプロパティを取得する
 Properties sys_prop = System.getProperties() ;

 // File Systemサービスプロバイダのプロパティを設定する
 sys_prop.put(Context.INITIAL_CONTEXT_FACTORY,
              "com.sun.jndi.fscontext.RefFSContextFactory");
 // File Systemサービスプロバイダで使用するディレクトリを設定する
 // (この場合，c:¥JNDI_DIRの下に登録される)
 sys_prop.put(Context.PROVIDER_URL, "file:c:¥¥" + "JNDI_DIR");

 // システムプロパティを更新する
 System.setProperties(sys_prop) ;
 // JNDIを初期化する
 Context ctx = new InitialContext();

 // HiRDBドライバが提供するDataSourceクラスのオブジェクトを，
 // jdbc/TestDataSourceという論理名称でJNDIに登録する
 ctx.bind("jdbc" + "¥¥" + "TestDataSource", ds);
                       ：

なお，JDBC2.0規格では，JNDIに登録する論理名称は，"jdbc"というサブコンテキスト下（登録例ではjdbc/TestDataSource）に登録するように推奨されています。

(4)　JNDIからのDataSourceの取得

JNDIからDataSourceオブジェクトを取得します。

JNDIからのDataSourceオブジェクトの登録例を次に示します（Windowsの場合の例です）。なお，登録例では，サービスプロバイダの一つである，File Systemサービスプロバイダを使用しています。ほかのサービスプロバイダについては，JNDIのドキュメントを参照してください。

 // システムプロパティを取得する
 Properties sys_prop = System.getProperties() ;

 // File Systemサービスプロバイダのプロパティを設定する
 sys_prop.put(Context.INITIAL_CONTEXT_FACTORY,
              "com.sun.jndi.fscontext.RefFSContextFactory");
 // File Systemサービスプロバイダで使用するディレクトリを設定する
 // (この場合，c:¥JNDI_DIRの下に登録されている)
 sys_prop.put(Context.PROVIDER_URL, "file:c:¥¥" + "JNDI_DIR");
 // システムプロパティを更新する
 System.setProperties(sys_prop) ;

 // JNDIを初期化する
 Context ctx = new InitialContext();
 // jdbc/TestDataSourceという論理名称のオブジェクトをJNDIから取得する
 Object obj = ctx.lookup("jdbc" + "¥¥" + "TestDataSource") ;

 // 取り出したオブジェクトを，DataSourceクラスの型にキャストする
 DataSource ds = (DataSource)obj;
               ：

(5)　DB接続

DataSourceオブジェクトに対して，getConnectionメソッドを呼び出します。

getConnectionメソッドの呼び出し例を次に示します。

 DataSource ds

 // JNDIからDataSourceオブジェクトを取得する
                      ：
 // getConnectionメソッドを発行する
 Connection con = ds.getConnection();
   又は
 Connection con = ds.getConnection("USERID", "PASSWORD");※

注※

メソッドの引数（認可識別子，パスワード）は，DataSourceオブジェクトに設定した接続情報よりも優先されます。必要な接続情報がDataSourceオブジェクトに設定されていない場合，接続情報の内容が不正な場合，又はHiRDBサーバとの接続に失敗した場合，getConnectionメソッドはSQLExceptionを投入します。

JNDIからDataSourceオブジェクトを取得後，必要に応じて接続情報を再度設定できます。この場合，DataSourceオブジェクトを，JDBCドライバが提供するDataSourceクラスの型にキャストしてから設定する必要があります。例を次に示します。

 DataSource ds
 JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDataSource  hirdb_ds;

 // JNDIからDataSourceオブジェクトを取得する
                      ：
 // DataSourceオブジェクトを，JDBCドライバが提供する
 // DataSourceクラスの型にキャストする
 dbp_ds = (JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDataSource)ds;

 // 接続情報を再設定する
           ：

17.4　JDBC1.2 コアAPI

17.4.1　Driverインタフェース

(1)　概要

Driverインタフェースでは，主に次の機能が提供されます。

DB接続

指定したURLの妥当性チェック

DriverManager.getConnectionメソッドで指定する接続プロパティの情報取得

ドライババージョンの返却

(2)　メソッド

Driverインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒9　Driverインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

acceptsURL(String url)

○

○

ドライバが指定されたURLに接続できるかどうかを確認します。

connect(String url, Properties info)

○

○

指定されたURLにデータベース接続を試みます。

getMajorVersion()

○

○

ドライバのメジャーバージョンを取得します。

getMinorVersion()

○

○

ドライバのマイナーバージョンを取得します。

getPropertyInfo(String url, Properties info)

○

○

ドライバの有効なプロパティについての情報を取得します。

jdbcCompliant()

○

○

ドライバがJDBC CompliantTMであるかどうかを通知します。

（凡例）

○：提供されます。

(a)　acceptsURL(String url)

【機能】

ドライバが指定されたURLに接続できるかどうかを確認します。

【形式】

public boolean acceptsURL(String url) throws SQLException

【引数】

String url：

データベースのURL

【戻り値】

ドライバが指定されたURLを認識する場合はtrue，そうでない場合はfalseを返します。

【発生する例外】

なし。

(b)　connect(String url, Properties info)

【機能】

指定されたURLにデータベース接続を試みます。

【形式】

public Connection connect(String url, Properties info) throws SQLException

【引数】

String url：

接続先のデータベースのURL。詳細については，「URLの構文」を参照してください。

Properties info：

接続引数としてのプロパティ名称，及び値のペアのリスト。詳細については，「ユーザプロパティ」を参照してください。

【戻り値】

URLへの接続を表すConnectionオブジェクト

【機能詳細】

URLで示すデータベースと接続します。

このメソッドは，DriverManager.getLoginTimeoutが返す値を，HiRDBサーバとの接続時に行う通信の最大待ち時間として使用します。

getLoginTimeoutが0を返す場合，クライアント環境定義PDCONNECTTIMEで指定した値が，最大待ち時間になります。

なお，待ち時間はDriverManager.setLoginTimeoutで指定できます。

【発生する例外】

次の場合，SQLExceptionを投入します。

データベースアクセスエラーが発生した場合

指定した接続情報が不正である場合

DriverManager.getLoginTimeoutの返却値が0〜300の範囲外となる場合

(c)　getMajorVersion()

【機能】

ドライバのメジャーバージョンを取得します。

【形式】

public synchronized int getMajorVersion()

【引数】

なし。

【戻り値】

このドライバのメジャーバージョン番号

【発生する例外】

なし。

(d)　getMinorVersion()

【機能】

ドライバのマイナーバージョンを取得します。

【形式】

public synchronized int getMinorVersion()

【引数】

なし。

【戻り値】

このドライバのマイナーバージョン番号

【発生する例外】

なし。

(e)　getPropertyInfo(String url, Properties info)

【機能】

このドライバの有効なプロパティについての情報を取得します。

【形式】

public synchronized DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException

【引数】

String url：

接続先のデータベースのURL

Properties info：

接続引数としてのプロパティ名称，及び値のペアのリスト

【戻り値】

有効なプロパティを記述するDriverPropertyInfoオブジェクトの配列（プロパティが必要ない場合は，この配列は空になることもあります）

DriverPropertyInfoの各フィールドの設定値を次の表に示します。

表17‒10　DriverPropertyInfoの各フィールドの設定値

プロパティ名

DriverPropertyInfoフィールド

name

value

description

required

choices

user

プロパティ名と同じ

null

"UserID"

false

null

password

同上

""

"Password"

false

null

UAPNAME

同上

""

"UAPNAME"

false

null

JDBC_IF

同上

"OFF"

"JDBC Interface Trace"

false

{"ON","OFF"}

TRC_NO

同上

"500"

"Trace Entry Number"

false

null

ENCODELANG

同上

null

"Encode Lang"

false

null

HIRDB_CURSOR

同上

"FALSE"

"HiRDB Cursor across commit"

false

null

LONGVARBINARY_ACCESS

同上

"REAL"

"Longvarbinary locator access"

false

null

HiRDB_for_Java_SQL_IN_NUM

同上

"300"

"SQL In Number"

false

null

HiRDB_for_Java_SQL_OUT_NUM

同上

"300"

"SQL Out Number"

false

null

HiRDB_for_Java_SQLWARNING_LEVEL

同上

"SQLWARN"

"SQL Warning Level"

false

null

HiRDB_for_Java_ENV_VARIABLES

同上

null

"HiRDB Environment Variables"

false

null

HiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR

同上

"TRUE"

"HiRDB Statement across commit"

false

{"TRUE","FALSE"}

HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZE

同上

0

"Longvarbinary locator access size"

false

null

HiRDB_for_Java_MAXBINARYSIZE

同上

null

"Longvarbinary maximum binary size"

false

null

HiRDB_for_Java_LONGVARBINARY_TRUNCERROR

同上

"TRUE"

"Longvarbinary truncate error"

false

{"TRUE","FALSE"}

HiRDB_for_Java_DBID

同上

null

"Port number of HiRDB server or Environment variable group of HiRDB"

false

null

HiRDB_for_Java_DBHOST

同上

null

"Host name with HiRDB"

false

null

HiRDB_for_Java_HiRDB_INI

同上

null

"HiRDB.ini file "

false

null

HiRDB_for_Java_BATCHEXCEPTION_BEHAVIOR

同上

"TRUE"

"BatchUpdateException UpdateCounts that conforms to JDBC standard"

false

{"TRUE","FALSE"}

SQLWARNING_IGNORE

同上

"FALSE"

"Warning generated by the Connection object is not maintained with the Connection object"

false

{"TRUE","FALSE"}

HiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR

同上

"FALSE"

"HiRDB Statement close behavior"

false

{"TRUE","FALSE"}

HiRDB_for_Java_UPDATECOUNT_BEHAVIOR

同上

"FALSE"

"Statement UpdateCounts that conforms to JDBC standard"

false

{"TRUE","FALSE"}

【機能詳細】

引数url，infoに指定された情報を解析し，データベースに接続するための情報を返します。

なお，acceptsURL(String url)がfalseとなる場合，このメソッドはnullを返します。

【発生する例外】

なし。

(f)　jdbcCompliant()

【機能】

このドライバがJDBC CompliantTMであるかどうかを通知します。

【形式】

public synchronized boolean jdbcCompliant()

【引数】

なし。

【戻り値】

ドライバがJDBC Compliantの場合はtrue，そうでない場合はfalseを返します。

【発生する例外】

なし。

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：HiRDBDriver

(4)　エスケープ句

SQL文中で｛ ｝で囲まれた部分をエスケープ句と呼びます。エスケープ句は一つのキーワードと複数のパラメタで構成されます。キーワードの大文字と小文字は区別しません。

エスケープ句の一覧を次の表に示します。

表17‒11　エスケープ句の一覧

エスケープ句の種別

キーワード

日付，時刻，時刻印

d，t，ts

LIKEエスケープ文字

escape

外部結合

oj

プロシジャ呼び出し

call

スカラ関数

fn

代入

set

エスケープ句で指定できるスカラ関数については，「エスケープ句で指定できるスカラ関数」を参照してください。

＜エスケープ構文の解析＞

エスケープ構文の解析を有効にするかどうかは，StatementクラスのsetEscapeProcessingメソッドで指定します。指定がない場合は，有効となります。エスケープ構文の解析が有効な場合，JDBCドライバはSQL文内にエスケープ句がないか解析します。SQL文内にエスケープ句があった場合は，HiRDBが実行可能なSQL文に変換します。

17.4.2　Connectionインタフェース

(1)　概要

Connectionクラスでは，主に次の機能が提供されます。

Statementクラス，PreparedStatementクラス，及びCallableStatementクラスのオブジェクト生成

トランザクションの決着（コミット又はロールバック）

AUTOコミットモードの設定

(2)　メソッド

Connectionインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒12　Connectionインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

clearWarnings()

○

○

このConnectionオブジェクトに関して通知されたすべての警告をクリアします。

close()

○

○

HiRDBとの接続を切断します。

commit()

○

○

直前のコミット又はロールバック以降に行われた変更を，すべて有効とします。

createStatement()

○

○

SQL文をデータベースに送るためのStatementオブジェクトを生成します。

createStatement(int resultSetType, int resultSetConcurrency)

○

○

SQL文をデータベースに送るためのStatementオブジェクトを生成します。

createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)

○

○

SQL文をデータベースに送るためのStatementオブジェクトを生成します。

getAutoCommit()

○

○

このConnectionオブジェクトでの現在の自動コミットモードを取得します。

getCatalog()

○

○

このConnectionオブジェクトの現在のカタログ名を取得します。

getHoldability()

○

○

このConnectionオブジェクトを使用して生成されるResultSetオブジェクトの，現在の保持機能を取得します。

getMetaData()

○

○

DatabaseMetaDataオブジェクトを生成します。

getTransactionIsolation()

○

○

このConnectionオブジェクトの現在のトランザクション遮断レベルを取得します。

getTypeMap()

○

○

このConnectionに関連したMapオブジェクトを取得します。

getWarnings()

○

○

このConnectionオブジェクトに関する呼び出しによって報告される警告を，SQLWarningオブジェクトとして取得します。

isClosed()

○

○

このConnectionオブジェクトがクローズされているかどうかを取得します。

isReadOnly()

○

○

このConnectionオブジェクトが読み込み専用モードかどうかを取得します。

nativeSQL(String sql)

○

○

指定されたSQL文内のエスケープ句を，HiRDBが実行できる形式に変換して返します。

prepareCall(String sql)

○

○

CALL文を実行するためのCallableStatementオブジェクトを生成します。

prepareCall(String sql, int resultSetType, int resultSetConcurrency)

○

○

CALL文を実行するためのCallableStatementオブジェクトを生成します。

prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)

○

○

CALL文を実行するためのCallableStatementオブジェクトを生成します。

prepareStatement(String sql)

○

○

パラメタ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを生成します。

prepareStatement(String sql, int resultSetType, int resultSetConcurrency)

○

○

パラメタ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを生成します。

prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)

○

○

パラメタ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを生成します。

rollback()

○

○

現在のトランザクションで行われた変更をすべて元に戻し，このConnectionオブジェクトが現在保持するデータベースロックをすべて解除します。

setAutoCommit(boolean autoCommit)

○

○

この接続の自動コミットモードを，指定された状態に設定します。

setCatalog(String catalog)

○

○

HiRDBにはカタログが存在しないため，このドライバはメソッドの指定値を無視します。

setHoldability(int holdability)

○

○

このConnectionオブジェクトを使用して生成されるResultSetオブジェクトの保持機能を，指定された保持機能へ変更します。

setReadOnly(boolean readOnly)

○

○

HiRDBには専用モードがないため，メソッドの指定値を無視します。

setTransactionIsolation(int level)

○

○

HiRDBでは常にTRANSACTION_REPEATABLE_READのため，このメソッドの指定値を無視します。

checkSession(int waittime)

○

○

現在の接続状態を確認します。

setHiRDB_Audit_Info(int pos，String userinf)

○

○

ユーザ任意の接続情報（ユーザ付加情報）を設定します。

isValid(int timeout)

×

○

現在の接続状態を確認します。

（凡例）

○：提供されます。

×：提供されません。

(a)　clearWarnings()

【機能】

このConnectionオブジェクトに関して通知されたすべての警告をクリアします。

このメソッドを呼び出した後，このConnectionオブジェクトに対する新しい警告が報告されるまで，getWarnings()はnullを返します。

【形式】

public synchronized void clearWarnings() throws SQLException

【引数】

なし。

【戻り値】

なし。

【発生する例外】

このConnectionオブジェクトがcloseされている場合，SQLExceptionを投入します。

(b)　close()

【機能】

HiRDBとの接続を切断します。

【形式】

public synchronized void close() throws SQLException

【引数】

なし。

【戻り値】

なし。

【機能詳細】

通常接続時は，HiRDBとの接続を切断するとともに，該当するオブジェクトを無効にし，不要なリソースを解放します。

プーリング環境下，及びXA環境下では，物理的な接続の切断をしません。この場合，PooledConnection.close()で物理的な接続の切断をします。

Conneciton.close()の実行でエラーが発生した場合は，SQLExceptionをthrowしません。

プーリング環境下，及びXA環境下でのConnection.close()の実行で，致命的なエラーが発生しコネクションプーリングが使用できなくなった場合，ConnectionEventListener.connectionErrorOccurred()は発生しません。

既にクローズされたConnectionオブジェクトでcloseメソッドを呼び出すと，このメソッドは何もしません。

【発生する例外】

なし。

(c)　commit()

【機能】

直前のコミット又はロールバック以降に行われた変更を，すべて有効とします。

自動コミットモードを有効にしている状態でこのメソッドを呼び出しても，例外を投入しないでcommit処理を行います。

【形式】

public synchronized void commit() throws SQLException

【引数】

なし。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

データベースアクセスエラーが発生した場合

Connectionオブジェクトに対してclose()が既に発行されている場合

(d)　createStatement()

【機能】

SQL文をデータベースに送るためのStatementオブジェクトを生成します。

【形式】

public synchronized Statement createStatement() throws SQLException

【引数】

なし。

【戻り値】

Statementオブジェクト

【機能詳細】

SQL文をデータベースに送るためのStatementオブジェクトを生成します。

このメソッドで生成したStatementオブジェクトから生成されるResultSetの保持機能は，Connection.setHoldabilityで指定されている値になります。Connection.setHoldabilityを一度も実行していない場合は，プロパティHIRDB_CURSORの設定値になります。

【発生する例外】

次の場合，SQLExceptionを投入します。

Connectionオブジェクトに対してclose()が既に発行されている場合

Statementオブジェクト生成でエラーが発生した場合

(e)　createStatement(int resultSetType, int resultSetConcurrency)

【機能】

SQL文をデータベースに送るためのStatementオブジェクトを生成します。

【形式】

public synchronized Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException

【引数】

int resultSetType：

結果集合の型

int resultSetConcurrency：

並行処理モード

【戻り値】

Statementオブジェクト

【機能詳細】

SQL文をデータベースに送るためのStatementオブジェクトを生成します。

結果集合の型にTYPE_SCROLL_SENSITIVEを指定した場合，このドライバはTYPE_SCROLL_INSENSITIVEに切り替え，SQLWarningを設定します。

並行処理モードはCONCUR_READ_ONLYだけサポートします。CONCURE_UPDATABLEを指定した場合，CONCUR_READ_ONLYに切り替え，SQLWarningを設定します。

このメソッドで生成したStatementオブジェクトから生成されるResultSetの保持機能は，Connection.setHoldabilityで指定されている値になります。Connection.setHoldabilityを一度も実行していない場合は，プロパティHIRDB_CURSORの設定値になります。

【発生する例外】

次の場合，SQLExceptionを投入します。

Connectionオブジェクトに対してclose()が既に発行されている場合

Statementオブジェクト生成でエラーが発生した場合

結果集合の型にResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

(f)　createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)

【機能】

SQL文をデータベースに送るためのStatementオブジェクトを生成します。

【形式】

public synchronized Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException

【引数】

int resultSetType：

結果集合の型

int resultSetConcurrency：

並行処理モード

int resultSetHoldability：

ResultSetの保持機能

【戻り値】

Statementオブジェクト

【機能詳細】

SQL文をデータベースに送るためのStatementオブジェクトを生成します。

結果集合の型にTYPE_SCROLL_SENSITIVEを指定した場合，このドライバはTYPE_SCROLL_INSENSITIVEに切り替え，SQLWarningを設定します。

並行処理モードはCONCUR_READ_ONLYだけサポートします。CONCURE_UPDATABLEを指定した場合，CONCUR_READ_ONLYに切り替え，SQLWarningを設定します。

【発生する例外】

次の場合，SQLExceptionを投入します。

Connectionオブジェクトに対してclose()が既に発行されている場合

Statementオブジェクト生成でエラーが発生した場合

結果集合の型にResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

ResultSetの保持機能にResultSet定数以外を指定した場合

(g)　getAutoCommit()

【機能】

このConnectionオブジェクトでの現在の自動コミットモードを取得します。

【形式】

public synchronized boolean getAutoCommit() throws SQLException

【引数】

なし。

【戻り値】

Connectionオブジェクトでの現在の自動コミットモードの状態

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(h)　getCatalog()

【機能】

このConnectionオブジェクトの現在のカタログ名を取得します。

このメソッドの戻り値は，常にnullです。

【形式】

public synchronized String getCatalog() throws SQLException

【引数】

なし。

【戻り値】

HiRDBにはカタログが存在しないため，常にnullを返します。

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(i)　getHoldability()

【機能】

このConnectionオブジェクトを使用して生成されるResultSetオブジェクトの，現在の保持機能を取得します。

このメソッドの戻り値が，Statement（PreparedStatement）オブジェクト生成時に保持機能を指定しなかった場合の，ResultSetオブジェクトの保持機能になります。

【形式】

public synchronized int getHoldability() throws SQLException

【引数】

なし。

【戻り値】

ResultSetの型。次のどちらかです。

ResultSet.HOLD_CURSORS_OVER_COMMIT

ResultSet.CLOSE_CURSORS_AT_COMMIT

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(j)　getMetaData()

【機能】

DatabaseMetaDataオブジェクトを生成します。

【形式】

public synchronized DatabaseMetaData getMetaData() throws SQLException

【引数】

なし。

【戻り値】

DatabaseMetaDataオブジェクト

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(k)　getTransactionIsolation()

【機能】

このConnectionオブジェクトの現在のトランザクション遮断レベルを取得します。

常にTRANSACTION_REPEATABLE_READを返します。

【形式】

public synchronized int getTransactionIsolation() throws SQLException

【引数】

なし。

【戻り値】

常にTRANSACTION_REPEATABLE_READを返します。

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(l)　getTypeMap()

【機能】

このConnectionに関連したMapオブジェクトを取得します。

このドライバは，情報を格納していない空のjava.util.HashMapオブジェクトを返します。

【形式】

public synchronized java.util.Map getTypeMap() throws SQLException

【引数】

なし。

【戻り値】

空のjava.util.HashMapオブジェクト

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(m)　getWarnings()

【機能】

このConnectionオブジェクトに関する呼び出しによって報告される警告を，SQLWarningオブジェクトとして取得します。

【形式】

public synchronized SQLWarning getWarnings() throws SQLException

【引数】

なし。

【戻り値】

最初のSQLWarningオブジェクト（ない場合はnullを返します）

【機能詳細】

該当するConnectionオブジェクトが保持するSQLWarningオブジェクトを取得します。

取得したSQLWarningオブジェクトのgetNextWarningメソッドを実行することによって，二つ目以降の警告を取得できます。

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(n)　isClosed()

【機能】

このConnectionオブジェクトがクローズされているかどうかを取得します。

【形式】

public synchronized boolean isClosed()

【引数】

なし。

【戻り値】

このConnectionオブジェクトがクローズされている場合はtrue，まだクローズされていない場合はfalseを返します。

【機能詳細】

このConnectionオブジェクトがクローズされているかどうかを取得します。データベースへの接続は，closeメソッドが呼び出されるか，特定の致命的エラーが発生した場合に切断します。Connection.closeメソッドが呼び出された後に，このメソッドが呼び出された場合だけ，trueを返すことを保証します。データベースへの接続が，有効か無効かを判定するために使用することはできません。

【発生する例外】

なし。

(o)　isReadOnly()

【機能】

このConnectionオブジェクトが読み込み専用モードかどうかを取得します。

このドライバでは常にfalseを返します。

【形式】

public synchronized boolean isReadOnly() throws SQLException

【引数】

なし。

【戻り値】

常にfalseを返します。

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(p)　nativeSQL(String sql)

【機能】

指定されたSQL文内のエスケープ句を，HiRDBが実行できる形式に変換して返します。

【形式】

public synchronized String nativeSQL(String sql) throws SQLException

【引数】

String sql：

変換前のSQL文

【戻り値】

HiRDBが実行できるSQL文（引数sqlがNULLの場合，NULLを返します。引数sqlが空文字の場合，空文字を返します）

【機能詳細】

指定されたSQL文内のエスケープ句を，HiRDBが実行できる形式に変換して返します。

エスケープ句の構文規則を次に示します。

エスケープ句 ::= 日付・時刻・時刻印のエスケープシーケンス
　　　　　　　｜ LIKEのエスケープシーケンス
　　　　　　　｜ 外部結合のエスケープシーケンス
　　　　　　　｜ プロシジャ呼び出しのエスケープシーケンス
　　　　　　　｜ スカラ関数のエスケープシーケンス
　　　　　　　｜ 代入のエスケープシーケンス

日付・時刻・時刻印のエスケープシーケンス ::= 日付のエスケープシーケンス
　　　　　　　　　　　　　　　　　　　　　｜ 時刻のエスケープシーケンス
　　　　　　　　　　　　　　　　　　　　　｜ 時刻印のエスケープシーケンス

日付のエスケープシーケンス ::=
　　　　　エスケープ開始子 d 日付データの既定の文字列表現 エスケープ終了子

時刻のエスケープシーケンス ::=
　　　　　エスケープ開始子 t 時刻データの既定の文字列表現 エスケープ終了子

時刻印のエスケープシーケンス ::=
　　　　　エスケープ開始子 ts 時刻印データの既定の文字列表現 エスケープ終了子

LIKEのエスケープシーケンス ::=
　　　　　エスケープ開始子 escape エスケープ文字 エスケープ終了子

外部結合のエスケープシーケンス ::= エスケープ開始子 oj 結合表 エスケープ終了子

プロシジャ呼び出しのエスケープシーケンス ::=
　　　　　エスケープ開始子 call 〔認可識別子.〕ルーチン識別子
　　　　　〔（〔引数〔，引数〕…〕）〕 エスケープ終了子

代入のエスケープシーケンス ::= エスケープ開始子 set 代入文 エスケープ終了子

スカラ関数のエスケープシーケンス ::= エスケープ開始子 fn スカラ関数 エスケープ終了子
スカラ関数 ::= 標準形式のスカラ関数※

エスケープ開始子 ::= '{'
エスケープ終了子 ::= '}'

注※

標準形式のスカラ関数については，「エスケープ句で指定できるスカラ関数」を参照してください。

下線部については，マニュアル「HiRDB SQLリファレンス」を参照してください。なお，下線部には，エスケープ句を指定できません。また，JDBCドライバでは構文解析をしないで，変換後もそのままとし，HiRDBサーバの構文解析に任せます。

エスケープシーケンスのキーワードを次に示します。キーワードについては，大文字と小文字を区別しません。

日付のエスケープシーケンス内の"d"

時刻のエスケープシーケンス内の"t"

時刻印のエスケープシーケンス内の"ts"

LIKEのエスケープシーケンス内の"escape"

外部結合のエスケープシーケンス内の"oj"

プロシジャ呼び出しのエスケープシーケンス内の"call"

スカラ関数のエスケープシーケンス内の"fn"

代入のエスケープシーケンス内の"set"

エスケープ句の入力規則を次に示します。

エスケープ句内の区切り文字は，半角空白が指定できます。

区切り文字は，エスケープ開始子の後ろ，キーワードの後ろ，及びエスケープ終了子の前に挿入できます。

区切り文字は，プロシジャ呼び出しのエスケープシーケンス内にある"call"の後ろに挿入してください。

一つのSQL文中に，複数のエスケープ句を指定できます。

注釈（「/*」から「*/」までの文字）内の{}，アポストロフィ（'），又は引用符（"）で囲まれた{}は，エスケープ句と見なされません。

ドライバは指定されたSQL文内のエスケープ句を，HiRDBが実行できる形式に変換します。変換するのは，{}で囲まれたエスケープ句内だけです。エスケープ句外は，何も変換しません。

エスケープ句の変換規則を次の表に示します。

表17‒13　エスケープ句の変換規則

対象エスケープ句

変換前

変換後

日付

エスケープ開始子 d 日付データの既定の文字列表現 エスケープ終了子

日付データの既定の文字列表現

時刻

エスケープ開始子t 時刻データの既定の文字列表現 エスケープ終了子

時刻データの既定の文字列表現

時刻印

エスケープ開始子ts 時刻印データの既定の文字列表現 エスケープ終了子

時刻印データの既定の文字列表現

LIKE

エスケープ開始子 escape エスケープ文字 エスケープ終了子

escapeエスケープ文字

外部結合

エスケープ開始子 oj 結合表 エスケープ終了子

結合表

プロシジャ呼び出し

エスケープ開始子 call 〔認可識別子.〕ルーチン識別子〔（〔引数〔，引数〕…〕）〕 エスケープ終了子

HiRDB接続の場合

call〔認可識別子.〕ルーチン識別子（〔引数〔，引数〕…〕）※1

XDM/RD E2接続の場合

call〔認可識別子.〕ルーチン識別子〔（〔引数〔，引数〕…〕）〕

スカラ関数

エスケープ開始子 fn スカラ関数 エスケープ終了子

HiRDB形式のスカラ関数※2

代入

エスケープ開始子 set 代入文 エスケープ終了子

set代入文

注※1

ルーチン識別子の後ろの()が省略されている場合，()を付加します。

注※2

変換処理の詳細は，次のスカラ関数のエスケープ句の変換処理を参照してください。

標準形式のスカラ関数を，HiRDB形式に変換します。XDM/RD E2接続の場合は，XDM/RD E2形式に変換します。

標準形式に対応するHiRDBのスカラ関数が，HiRDBのシステム定義スカラ関数の場合，関数名の先頭に"MASTER."を付加します。

基本的に，スカラ関数の引数の個数チェックはしません。ただし，スカラ関数名がLOCATEの場合は，引数の区切りを示すコンマをIN，FROMに変換するため，引数の個数チェックをします。

標準形式とHiRDB形式が異なるスカラ関数の変換内容を次の表に示します。

表17‒14　標準形式とHiRDB形式が異なるスカラ関数の変換内容一覧

スカラ関数

変換前の形式

変換後の形式（HiRDB形式）

数学関数

CEILING(number)

MASTER.CEIL(number)

LOG(float)

MASTER.LN(float)

TRUNCATE(number, places)

MASTER.TRUNC(number, places)

文字列関数

CHAR(code)

MASTER.CHR(code)

INSERT(string1, start, length, string2)

MASTER.INSERTSTR(string1, start, length, string2)

LCASE(string)

LOWER(string)

LEFT(string, count)

MASTER.LEFTSTR(string, count)

LOCATE(string1, string2[, start])

POSITION(string1 IN string2 [FROM start])

RIGHT(string, count)

MASTER.RIGHTSTR(string, count)

SUBSTRING(string, start, length)

SUBSTR(string, start, length)

UCASE(string)

UPPER(string)

時刻と日付の関数

CURDATE()

CURRENT DATE

CURRENT_DATE()

CURRENT DATE

CURTIME()

CURRENT TIME

CURRENT_TIME()

CURRENT TIME

CURRENT_TIME(time-precision)

CURRENT TIME

NOW()

CURRENT TIMESTAMP(6)

システム関数

USER()

USER

標準形式とXDM/RD E2形式が異なるスカラ関数の変換内容を次の表に示します。

表17‒15　標準形式とXDM/RD E2形式が異なるスカラ関数の変換内容一覧

スカラ関数

変換前の形式

変換後の形式（XDM/RD E2形式）

数学関数

LOG(float)

LN(float)

文字列関数

LCASE(string)

LOWER(string)

LOCATE(string1, string2[, start])

POSITION(string1 IN string2 [FROM start])

LTRIM(string)

TRIM(LEADING FROM string)

RTRIM(string)

TRIM(TRAILING FROM string)

SUBSTRING(string, start, length)

SUBSTR(string, start, length)

UCASE(string)

UPPER(string)

時刻と日付の関数

CURDATE()

CURRENT DATE

CURRENT_DATE()

CURRENT DATE

CURTIME()

CURRENT TIME

CURRENT_TIME()

CURRENT TIME

NOW()

CURRENT TIMESTAMP(6)

システム関数

USER()

USER

HiRDB接続の場合の変換例を次に示します。

スカラ関数

変換前

変換後

標準形式とHiRDB形式が同じスカラ関数

システム組み込みスカラ関数

{fn ABS(number)}

ABS(number)

システム定義スカラ関数

{fn ASCII(string)}

MASTER.ASCII(string)

標準形式とHiRDB形式が異なるスカラ関数

システム組み込みスカラ関数

{fn UCASE(string)}

UPPER(string)

システム定義スカラ関数

{fn CEILING(number)}

MASTER.CEIL(number)

【発生する例外】

次の場合，SQLExceptionを投入します。

このConnectionオブジェクトに対してclose()が既に発行されている場合

指定されたSQLのエスケープ句の形式が不正である場合

・"{"及びキーワードはあるが，"}"がない。

・{callの後ろにプロシジャ名称がない。

・{callとプロシジャ名称の間に空白がない。

・{callプロシジャ名"("の後ろに")"がない。

・{? = callを指定している。

・エスケープ句にLOCATE関数指定時，引数の指定がない。

・エスケープ句にLOCATE関数指定時，()内の引数の数が不正である。

・XDM/RD E2接続の場合，エスケープ句にLTRIM又はRTRIM関数を指定したとき，引数の指定がない。

(q)　prepareCall(String sql)

【機能】

CALL文を実行するためのCallableStatementオブジェクトを生成します。

【形式】

public CallableStatement prepareCall(String sql) throws SQLException

【引数】

String sql：

実行するSQL文（CALL文以外も指定できます）

【戻り値】

CallableStatementオブジェクト

【機能詳細】

CALL文を実行するためのCallableStatementオブジェクトを生成します。

このメソッドで生成したCallableStatementオブジェクトから生成されるResultSetの保持機能は，Connection.setHoldabilityで指定されている値になります。Connection.setHoldabilityを一度も実行していない場合は，プロパティHIRDB_CURSORの設定値になります。

【発生する例外】

次の場合，SQLExceptionを投入します。

このConnectionオブジェクトに対してclose()が既に発行されている場合

CallableStatementオブジェクト生成でエラーが発生した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(r)　prepareCall(String sql, int resultSetType, int resultSetConcurrency)

【機能】

CALL文を実行するためのCallableStatementオブジェクトを生成します。

【形式】

public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException

【引数】

String sql：

実行するSQL文（CALL文以外も指定できます）

int resultSetType：

結果集合の型

int resultSetConcurrency：

並行処理モード

【戻り値】

CallableStatementオブジェクト

【機能詳細】

CALL文を実行するためのCallableStatementオブジェクトを生成します。

結果集合の型にTYPE_SCROLL_SENSITIVEを指定した場合，このドライバはTYPE_SCROLL_INSENSITIVEに切り替え，SQLWarningを設定します。

並行処理モードはCONCUR_READ_ONLYだけサポートします。CONCURE_UPDATABLEを指定した場合，CONCUR_READ_ONLYに切り替え，SQLWarningを設定します。

このメソッドで生成したCallableStatementオブジェクトから生成されるResultSetの保持機能は，Connection.setHoldabilityで指定されている値になります。Connection.setHoldabilityを一度も実行していない場合は，プロパティHIRDB_CURSORの設定値になります。

【発生する例外】

次の場合，SQLExceptionを投入します。

このConnectionオブジェクトに対してclose()が既に発行されている場合

CallableStatementオブジェクト生成でエラーが発生した場合

結果集合の型にResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(s)　prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)

【機能】

CALL文を実行するためのCallableStatementオブジェクトを生成します。

【形式】

public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException

【引数】

String sql：

実行するSQL文（CALL文以外も指定できます）

int resultSetType：

結果集合の型

int resultSetConcurrency：

並行処理モード

int resultSetHoldability：

ResultSetの保持機能

【戻り値】

CallableStatementオブジェクト

【機能詳細】

CALL文を実行するためのCallableStatementオブジェクトを生成します。

結果集合の型にTYPE_SCROLL_SENSITIVEを指定した場合，このドライバはTYPE_SCROLL_INSENSITIVEに切り替え，SQLWarningを設定します。

並行処理モードはCONCUR_READ_ONLYだけサポートします。CONCURE_UPDATABLEを指定した場合，CONCUR_READ_ONLYに切り替え，SQLWarningを設定します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このConnectionオブジェクトに対してclose()が既に発行されている場合

CallableStatementオブジェクト生成でエラーが発生した場合

結果集合の型にResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

ResultSetの保持機能にResultSet定数以外を指定した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(t)　prepareStatement(String sql)

【機能】

パラメタ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを生成します。

【形式】

public PreparedStatement prepareStatement(String sql) throws SQLException

【引数】

String sql：

実行するSQL文

【戻り値】

PreparedStatementオブジェクト

【機能詳細】

パラメタ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを生成します。

このメソッドで生成したPreparedStatementオブジェクトから生成されるResultSetの保持機能は，Connection.setHoldabilityで指定されている値になります。Connection.setHoldabilityを一度も実行していない場合は，プロパティHIRDB_CURSORの設定値になります。

【発生する例外】

次の場合，SQLExceptionを投入します。

このConnectionオブジェクトに対してclose()が既に発行されている場合

PreparedStatementオブジェクト生成でエラーが発生した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(u)　prepareStatement(String sql, int resultSetType, int resultSetConcurrency)

【機能】

パラメタ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを生成します。

【形式】

public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException

【引数】

String sql：

実行するSQL文（CALL文以外も指定できます）

int resultSetType：

結果集合の型

int resultSetConcurrency：

並行処理モード

【戻り値】

PreparedStatementオブジェクト

【機能詳細】

パラメタ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを生成します。

結果集合の型にTYPE_SCROLL_SENSITIVEを指定した場合，このドライバはTYPE_SCROLL_INSENSITIVEに切り替え，SQLWarningを設定します。

並行処理モードはCONCUR_READ_ONLYだけサポートします。CONCURE_UPDATABLEを指定した場合，CONCUR_READ_ONLYに切り替え，SQLWarningを設定します。

このメソッドで生成したPreparedStatementオブジェクトから生成されるResultSetの保持機能は，Connection.setHoldabilityで指定されている値になります。Connection.setHoldabilityを一度も実行していない場合は，プロパティHIRDB_CURSORの設定値になります。

【発生する例外】

次の場合，SQLExceptionを投入します。

このConnectionオブジェクトに対してclose()が既に発行されている場合

PreparedStatementオブジェクト生成でエラーが発生した場合

結果集合の型にResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(v)　prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)

【機能】

パラメタ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを生成します。

【形式】

public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException

【引数】

String sql：

実行するSQL文（CALL文以外も指定できます）

int resultSetType：

結果集合の型

int resultSetConcurrency：

並行処理モード

int resultSetHoldability：

ResultSetの保持機能

【戻り値】

PreparedStatementオブジェクト

【機能詳細】

パラメタ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを生成します。

結果集合の型にTYPE_SCROLL_SENSITIVEを指定した場合は，このドライバはTYPE_SCROLL_INSENSITIVEに切り替え，SQLWarningを設定します。

並行処理モードはCONCUR_READ_ONLYだけサポートします。CONCURE_UPDATABLEを指定した場合，CONCUR_READ_ONLYに切り替え，SQLWarningを設定します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このConnectionオブジェクトに対してclose()が既に発行されている場合

PreparedStatementオブジェクト生成でエラーが発生した場合

結果集合の型にResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

ResultSetの保持機能にResultSet定数以外を指定した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(w)　rollback()

【機能】

現在のトランザクションで行われた変更をすべて元に戻し，このConnectionオブジェクトが現在保持するデータベースロックをすべて解除します。

自動コミットモードを有効にしている状態で，このメソッドを呼び出しても例外を投入しないで，rollback処理を行います。

【形式】

public synchronized void rollback() throws SQLException

【引数】

なし。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

データベースアクセスエラーが発生した場合

Connectionオブジェクトに対してclose()が既に発行されている場合

(x)　setAutoCommit(boolean autoCommit)

【機能】

この接続の自動コミットモードを，指定された状態に設定します。

【形式】

public synchronized void setAutoCommit(boolean autoCommit) throws SQLException

【引数】

boolean autoCommit：

自動コミットモードを有効にする場合はtrue，無効にする場合はfalseを指定します。

【戻り値】

なし。

【機能詳細】

この接続の自動コミットモードを指定された状態に設定します。接続が自動コミットモードの場合，そのすべてのSQL文は，実行後に個別のトランザクションとしてコミットされます。そうでない場合，そのSQL文は，commitメソッド又はrollbackメソッドへの呼び出しによって終了されるトランザクションにグループ化されます。デフォルトでは，新しい接続は自動コミットモードです。

自動コミットは，SQL文の完了で発生します。SQL文がResultSetオブジェクトを返す場合，ResultSetオブジェクトがクローズされたときに，SQL文は完了します。

トランザクションの途中でこのメソッドが呼び出されても，そのトランザクションはコミットされません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このConnectionオブジェクトが分散トランザクション下で動作している場合

このConnectionオブジェクトに対してclose()が既に発行されている場合

(y)　setCatalog(String catalog)

【機能】

HiRDBにはカタログが存在しないため，このドライバはメソッドの指定値を無視します。

【形式】

public synchronized void setCatalog(String catalog) throws SQLException

【引数】

String catalog：

HiRDBにはカタログがないため，指定値を無視します。

【戻り値】

常にfalseを返します。

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(z)　setHoldability(int holdability)

【機能】

このConnectionオブジェクトを使用して生成されるResultSetオブジェクトの保持機能を，指定された保持機能へ変更します。

【形式】

public synchronized void setHoldability(int holdability) throws SQLException

【引数】

int holdability：

ResultSetの保持機能定数（ResultSet.HOLD_CURSORS_OVER_COMMIT又はResultSet.CLOSE_CURSORS_AT_COMMIT）

【戻り値】

なし。

【機能詳細】

このConnectionオブジェクトを使用して生成されるResultSetオブジェクトの保持機能を，指定された保持機能へ変更します。

このメソッドの値は，createStatement（prepareStatement，prepareCall）を保持機能の指定なしで呼び出したときの設定値であり，生成済みのStatement及びそのStatementから生成される（生成された）ResultSetには影響しません。

保持機能のデフォルト値を次の表に示します。

表17‒16　保持機能のデフォルト値

プロパティHiRDB_CURSORの指定値

デフォルト値

TRUE

ResultSet.HOLD_CURSORS_OVER_COMMIT

FALSE

ResultSet.CLOSE_CURSORS_AT_COMMIT

指定なし

ResultSet.CLOSE_CURSORS_AT_COMMIT

【発生する例外】

次の場合，SQLExceptionを投入します。

このConnectionオブジェクトに対してclose()が既に発行されている場合

引数holdabilityにResultSet.HOLD_CURSORS_OVER_COMMIT又はResultSet.CLOSE_CURSORS_AT_COMMIT以外が指定された場合

(aa)　setReadOnly(boolean readOnly)

【機能】

HiRDBには専用モードがないため，メソッドの指定値を無視します。

【形式】

public synchronized void setReadOnly(boolean readOnly) throws SQLException

【引数】

boolean readOnly：

HiRDBには専用モードがないため，指定値を無視します。

【戻り値】

なし。

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(ab)　setTransactionIsolation(int level)

【機能】

HiRDBでは常にTRANSACTION_REPEATABLE_READのため，このメソッドの指定値を無視します。

【形式】

public void setTransactionIsolation(int level) throws SQLException

【引数】

int level：

トランザクション遮断レベル

【戻り値】

なし。

【発生する例外】

このConnectionオブジェクトに対してclose()が既に発行されている場合，SQLExceptionを投入します。

(ac)　checkSession(int waittime)

【機能】

現在の接続状態を確認します。

【形式】

public int checkSession (int waittime) throws SQLException

【引数】

int waittime：

待ち時間（単位：秒）。0の場合，クライアント環境定義PDCWAITTIMEで指定した時間まで待ちます。

【戻り値】

PrdbConnection.SESSION_ALIVE：

接続中であることを確認できました。

PrdbConnection.SESSION_NOT_ALIVE：

引数で指定された時間でのタイムアウト以外の原因によって，接続中であることを確認できませんでした。

PrdbConnection.SESSION_CHECK_TIMEOUT：

引数で指定された時間でのタイムアウトによって，接続中であることを確認できませんでした。

【発生する例外】

引数waittimeがマイナスの場合，例外SQLExceptionを投入します。

(ad)　setHiRDB_Audit_Info(int pos，String userinf)

【機能】

ユーザ任意の接続情報（ユーザ付加情報）を設定します。

【形式】

public synchronized void setHiRDB_Audit_Info(int pos，String userinf) throws SQLException

【引数】

int pos：

ユーザ付加情報を設定する番号

1：ユーザ付加情報1

2：ユーザ付加情報2

3：ユーザ付加情報3

String userinf：

ユーザ付加情報。ユーザ付加情報に設定されたデータは，HiRDBとの文字データ処理で，接続時のプロパティENCODELANGやsetEncodeLangメソッドに指定された文字セット，又はHiRDBサーバの文字コードに変換されます。コード変換後のバイト数が100バイト以内となるデータを設定してください。設定情報を解除する場合はNULL値を設定します。

【戻り値】

なし。

【機能詳細】

HiRDBサーバにアクセスするアプリケーションのアカウント情報などのユーザ付加情報を設定します。設定したユーザ付加情報は解除するまで有効となります。該当するConnectionオブジェクトを使用して生成したStatementオブジェクト，PreparedStatementオブジェクト，及びCallableStatementオブジェクトを使用したSQL実行時に，設定したユーザ付加情報が監査証跡に出力されます。

なお，このメソッドは，埋込みSQLでのユーザ任意接続情報の設定（DECLARE AUDIT INFO SET）に該当します。

【発生する例外】

次の場合，SQLExceptionを投入します。

該当するConnectionオブジェクトがクローズされている場合

ユーザ付加情報のコード変換に失敗した場合

posに1〜3以外の値が指定された場合

ユーザ付加情報のコード変換後のデータ長が100バイトを超えている場合

(ae)　isValid(int timeout)

【機能】

現在の接続状態を確認します。

【形式】

public synchronized boolean isValid (int timeout) throws SQLException

【引数】

int timeout：

待ち時間（秒）。0の場合，無制限となります。

【戻り値】

true：接続中であることを確認できました。

false：接続中であることを確認できませんでした。次のどちらかの状態です。

・該当するConnectionオブジェクトがクローズされました。

・引数で指定された時間でのタイムアウト期間が過ぎました。

【発生する例外】

引数timeoutが-1以下の場合，例外SQLExceptionを投入します。

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbConnection

(4)　注意事項

(a)　ホールダビリティの指定について

ResultSetのホールダビリティにResultSet.HOLD_CURSORS_OVER_COMMITを指定した場合，JDBCドライバはHiRDBのホールダブルカーソル機能を使用します。

次に示す方法でホールダビリティを指定すると，URLの構文HIRDB_CURSOR，又はプロパティHIRDB_CURSORの指定値を，ステートメントオブジェクト（Statement，PreparedStatement，CallableStatementオブジェクト）及びConnectionオブジェクトごとに上書きできます。

createStatement，preparedStatement，prepareCallメソッドの引数resultSetHoldability

setHoldabilityメソッドの引数holdability

実行するSQL文（SELECT文）のUNTIL DISCONNECTの有無

該当するオブジェクトから生成したResultSetオブジェクト又はDatabaseMetaDataオブジェクト（setHoldabilityメソッド使用時）は，これらの指定とHIRDB_CURSORの指定の組み合わせによって有効になるホールダビリティの指定が変わります。

次のメソッドで生成したステートメントオブジェクトの場合に有効になるホールダビリティの指定を，次の表に示します。

createStatement(int resultSetType,int resultSetConcurrency, int resultSetHoldability)

prepareStatement(int resultSetType,int resultSetConcurrency, int resultSetHoldability)

prepareCall(int resultSetType,int resultSetConcurrency, int resultSetHoldability)

表17‒17　有効になるホールダビリティの指定（1/2）

HIRDB_CURSOR，又はsetHiRDBCursorModeの指定

引数resultSetHoldabilityの指定値

ResultSet.

HOLD_CURSORS_OVER_COMMIT

ResultSet.

CLOSE_CURSORS_AT_COMMIT

UNTIL DISCONNECT付きのSELECT文を実行

左記以外のSQL文を実行

プロパティHIRDB_CURSORにTRUEを指定

URLの構文HIRDB_CURSORにTRUEを指定

T

T

F

URLの構文HIRDB_CURSORにFALSEを指定

T

T

F

プロパティHIRDB_CURSORにFALSEを指定

URLの構文HIRDB_CURSORにTRUEを指定

T

T

F

URLの構文HIRDB_CURSORにFALSEを指定

T

T

F

setHiRDBCursorModeにtrueを指定

T

T

F

setHiRDBCursorModeにfalseを指定

T

T

F

（凡例）

T：HIRDB_CURSORにTRUEを指定したものとして動作します。

F：HIRDB_CURSORにFALSEを指定したものとして動作します。

表「有効になるホールダビリティの指定（1/2）」以外のメソッドで生成したステートメントオブジェクト，又はDatabaseMetaDataオブジェクトの場合に有効になるホールダビリティの指定を，次の表に示します。

表17‒18　有効になるホールダビリティの指定（2/2）

HIRDB_CURSOR，又はsetHiRDBCursorModeの指定

setHoldabilityメソッドの指定値

setHoldabilityメソッドの実行なし

ResultSet.

HOLD_CURSORS_OVER_COMMIT

ResultSet.

CLOSE_CURSORS_AT_COMMIT

UNTIL DISCONNECT付きのSELECT文を実行

左記以外のSQL文を実行

UNTIL DISCONNECT付きのSELECT文を実行

左記以外のSQL文を実行

プロパティHIRDB_CURSORにTRUEを指定

URLの構文HIRDB_CURSORにTRUEを指定

T

T

F

T

T

URLの構文HIRDB_CURSORにFALSEを指定

T

T

F

T

F

プロパティHIRDB_CURSORにFALSEを指定

URLの構文HIRDB_CURSORにTRUEを指定

T

T

F

T

T

URLの構文HIRDB_CURSORにFALSEを指定

T

T

F

T

F

setHiRDBCursorModeにtrueを指定

T

T

F

T

T

setHiRDBCursorModeにfalseを指定

T

T

F

T

F

（凡例）

T：HIRDB_CURSORにTRUEを指定したものとして動作します。

F：HIRDB_CURSORにFALSEを指定したものとして動作します。

HIRDB_CURSORについては，「getConnectionメソッドによるHiRDBへの接続」を参照してください。

17.4.3　Statementインタフェース

(1)　概要

Statementインタフェースでは，主に次の機能が提供されます。

SQLの実行

検索結果としての結果セット（ResultSetオブジェクト）の生成

更新結果としての更新行数の返却

最大検索行数の設定

検索制限時間の設定

(2)　メソッド

Statementインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒19　Statementインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

addBatch(String sql)

○

○

このStatementオブジェクトのバッチに，指定されたSQLを追加します。

cancel()

○

○

該当するオブジェクト，及び該当するオブジェクトと同一接続のオブジェクトが実行中のSQLを取り消します。

clearBatch()

○

○

このStatementオブジェクトのバッチに登録されたSQLを，すべてクリアします。

clearWarnings()

○

○

このStatementオブジェクトに関して報告された，すべての警告をクリアします。

close()

○

○

Statementオブジェクト，及びこのStatementオブジェクトから生成したResultSetオブジェクトのクローズを行います。

execute(String sql)

○

○

指定されたSQL文を実行します。

executeBatch()

○

○

バッチに登録されたSQLを実行し，更新行数の配列を返します。

executeQuery(String sql)

○

○

指定された検索系SQLを実行し，その結果のResultSetオブジェクトを返します。

executeUpdate(String sql)

○

○

指定された検索系以外のSQLを実行し，更新行数を返します。

getConnection()

○

○

このStatementオブジェクトを生成したConnectionオブジェクトを返します。

getFetchDirection()

○

○

このStatementオブジェクトから生成される結果集合の，デフォルトのフェッチ方向を取得します。

getFetchSize()

○

○

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズを取得します。

getMaxFieldSize()

○

○

このStatementオブジェクトによって生成される，ResultSetオブジェクトの文字及びバイナリの各列値に対し，返される最大バイト数を取得します。

getMaxRows()

○

○

このStatementオブジェクトによって生成されるResultSetオブジェクトが，含むことのできる最大格納行数を取得します。

getMoreResults()

○

○

次の結果集合に移動します。

getQueryTimeout()

○

○

SQL実行がタイムアウトになる秒数を返します。

getResultSet()

○

○

ResultSetオブジェクトとして，現在の結果を取得します。

getResultSetConcurrency()

○

○

このStatementオブジェクトから生成されるResultSetオブジェクトの並行処理モードを取得します。

getResultSetHoldability()

○

○

このStatementオブジェクトから生成されるResultSetオブジェクトの保持機能を取得します。

getResultSetType()

○

○

このStatementオブジェクトから生成されるResultSetオブジェクトの，結果集合の型を取得します。

getUpdateCount()

○

○

更新行数を返します。

getWarnings()

○

○

このStatementオブジェクトに関する呼び出しによって報告される，最初の警告を取得します。

setCursorName(String name)

○

○

このドライバでは，位置決めされた更新及び削除をサポートしていないため，このメソッドは指定値を無視します。

setEscapeProcessing(boolean enable)

○

○

このStatementオブジェクトによるエスケープ構文の解析を，有効又は無効にします。

setFetchDirection(int direction)

○

○

このStatementオブジェクトから生成される結果集合の，デフォルトのフェッチ方向を指定します。

setFetchSize(int rows)

○

○

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズを設定します。

setMaxFieldSize(int max)

○

○

このStatementオブジェクトによって生成されるResultSetオブジェクトの，文字及びバイナリの各列に対する最大バイト数を，指定されたバイト数に設定します。

setMaxRows(int max)

○

○

このStatementオブジェクトによって生成されるResultSetオブジェクトが，含むことのできる最大格納行数を設定します。

setQueryTimeout(int seconds)

○

○

SQL実行がタイムアウトになる秒数を設定します。

isClosed()

×

○

Statementオブジェクトがクローズされているかどうかの情報を取得します。

isPoolable()

×

○

Statementオブジェクトがプールできるかどうかを示す値を取得します。

（凡例）

○：提供されます。

×：提供されません。

(a)　addBatch(String sql)

【機能】

このStatementオブジェクトのバッチに，指定されたSQLを追加します。

最大2,147,483,647個実行するSQL文を登録できます。

【形式】

public synchronized void addBatch(String sql) throws SQLException

【引数】

String sql：

実行するSQL文

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

上限値2,147,483,647個を超えるSQL文を登録しようとした場合

SQLにnull又は0長文字列を指定している場合

(b)　cancel()

【機能】

該当するオブジェクト，及び該当するオブジェクトと同一接続のオブジェクトが実行中のSQLを取り消します。

【形式】

public void cancel() throws SQLException

【引数】

なし。

【戻り値】

なし。

【機能詳細】

cancelメソッドを使用して，実行中のSQL※に非同期キャンセルを実行できます。

このメソッドは，該当するStatementオブジェクトがSQL実行中でなくても，同一接続オブジェクトに対して，ほかのオブジェクトがSQLを実行している場合は，非同期キャンセルを行います。

キャンセルがHiRDBサーバで実行された場合，次の方法による設定値に関係なく，キャンセル前に作成したResultSetオブジェクト，PreparedStatementオブジェクト，及びCallableStatementオブジェクトが無効となります。

DriverManager.getConnectionのProperties引数中のプロパティHiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR

URL中のSTATEMENT_COMMIT_BEHAVIOR

DataSource系インタフェースのsetStatementCommitBehavior

DriverManager.getConnectionのProperties引数中のプロパティHIRDB_CURSOR

URL中のHIRDB_CURSOR

DataSource系インタフェースのsetHiRDBCursorMode

ConnectionインタフェースのsetHoldabilityメソッド

ConnectionインタフェースのcreateStatement，parepareStatementメソッドの引数resultSetHoldability

SQL文（until disconnectの指定）

該当するStatementオブジェクトがSQL実行中ではなく，かつ同一接続オブジェクトに対してほかのオブジェクトがSQLを実行していない場合，このメソッドはHiRDBに対してキャンセルを実行しません。

XADataSourceを使用した接続の場合，非同期キャンセルの要求は無効になります。

注※

「HiRDBサーバ側に制御があり（このJDBCドライバは応答待ち），サーバで処理中のSQL」のことを指します。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(c)　clearBatch()

【機能】

このStatementオブジェクトのバッチに登録されたSQLを，すべてクリアします。

【形式】

public synchronized void clearBatch() throws SQLException

【引数】

なし。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(d)　clearWarnings()

【機能】

このStatementオブジェクトに関して報告された，すべての警告をクリアします。

【形式】

public synchronized void clearWarnings() throws SQLException

【引数】

なし。

【戻り値】

なし。

【発生する例外】

なし。

(e)　close()

【機能】

Statementオブジェクト，及びこのStatementオブジェクトから生成したResultSetオブジェクトのクローズを行います。

【形式】

public void close() throws SQLException

【引数】

なし。

【戻り値】

なし。

【機能詳細】

Statementオブジェクト，及びこのStatementオブジェクトから生成したResultSetオブジェクトのクローズを行います。

プーリング接続時に，Statementのcloseメソッドの発行でエラーが発生した場合，SQLExceptionを投入しません。

また，プーリング環境下及びXA環境下で，Statementのcloseメソッドでデータベースとの物理的な切断でエラーが発生し，コネクションプーリングが使用できなくなった場合，ConnectionEventListener.connectionErrorOccurred()は発生しません。

【発生する例外】

データベースアクセスエラーが発生した場合，SQLExceptionを投入します。

(f)　execute(String sql)

【機能】

指定されたSQL文を実行します。ResultSetオブジェクトや更新行数を，Statement.getResultSet，Statement.getUpdateCountで取得できます。

【形式】

public synchronized boolean execute(String sql) throws SQLException

【引数】

String sql：

実行するSQL文

【戻り値】

実行したSQLが検索系SQLの場合はtrue，そうでない場合はfalseを返します。

【機能詳細】

指定されたSQL文を実行します。ResultSetオブジェクトや更新行数を，Statement.getResultSet，Statement.getUpdateCountで取得できます。

このメソッド実行後のStatement.getResultSet，及びStatement.getUpdateCountの戻り値を次の表に示します。

表17‒20　実行したSQLとStatement.getResultSet及びStatement.getUpdateCountの戻り値の関係

実行したSQLの種類

Statement.getResultSetの戻り値

Statement.getUpdateCountの戻り値

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHK指定

システムプロパティHiRDB_for_Java_UPDATECOUNT_BEHAVIOR指定

TRUE以外

TRUE

TRUE

FALSE

検索系SQL

実行結果のResultSetオブジェクト

-1

検索系以外のSQL

null

0列のResultSetオブジェクト

1以上の値又は-1（更新行なし）

0以上の値

SQLの実行がエラーとなった場合

null

null

-1

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

引数sqlにnull又は0長文字列を指定した場合

データベースアクセスエラーが発生した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(g)　executeBatch()

【機能】

バッチに登録されたSQLを実行し，更新行数の配列を返します。

バッチに登録されたすべてのSQLを実行後，又は途中でエラーが起きた場合，Statement.clearBatch()を呼び，バッチ登録情報をクリアします。

【形式】

public synchronized int[] executeBatch() throws SQLException

【引数】

なし。

【戻り値】

実行したSQLごとの更新行数を，配列にして返します。配列は，バッチに登録された順序になります。バッチに一つも登録されていない場合，又はバッチの一つ目がエラーだった場合，要素数0の配列を返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

次の場合，例外BatchUpdateException（SQLExceptionのサブクラス）を投入します。

検索系SQLがバッチで実行された場合

データベースアクセスエラーが発生した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(h)　executeQuery(String sql)

【機能】

指定された検索系SQLを実行し，その結果のResultSetオブジェクトを返します。

【形式】

public synchronized ResultSet executeQuery(String sql) throws SQLException

【引数】

String sql：

実行するSQL文

【戻り値】

実行結果のResultSetオブジェクト

【機能詳細】

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定していない場合

指定された検索系SQLを実行し，その結果のResultSetオブジェクトを返却します。検索結果のないSQL文（INSERT文など）の場合は，SQLExceptionを投入します。

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合

指定されたSQLを実行し，その結果のResultSetオブジェクトを返却します。

検索結果のないSQL文（INSERT文など）の場合，0列のResultSetオブジェクトを返却します。また，Statement.getUpdateCountメソッドを使用して，更新行数を取得できます。executeQueryメソッドの戻り値と，メソッド実行後に実行するStatement.getUpdateCountメソッドの戻り値を次の表に示します。

表17‒21　executeQueryメソッドの戻り値と，メソッド実行後に実行するStatement.getUpdateCountメソッドの戻り値

実行したSQLの種類

executeQueryメソッドの戻り値

Statement.getUpdateCountメソッドの戻り値

HiRDB_for_Java_UPDATECOUNT_BEHAVIOR指定

TRUE

FALSE

検索系SQL

実行結果のResultSetオブジェクト

-1

検索系以外のSQL

INSERT，UPDATE，DELETE

0列のResultSetオブジェクト

1以上の更新行数又は-1（更新行数なし）

0以上の更新行数

その他

0列のResultSetオブジェクト

-1

0

SQLの実行がエラーとなった場合

−

-1

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

検索系以外のSQLを指定した場合（システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合を除く）

引数sqlにnull又は0長文字列を指定した場合

データベースアクセスエラーが発生した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(i)　executeUpdate(String sql)

【機能】

指定された検索系以外のSQLを実行し，更新行数を返します。

【形式】

public synchronized int executeUpdate(String sql) throws SQLException

【引数】

String sql：

実行するSQL文

【戻り値】

次の表に示します。

表17‒22　executeUpdateメソッドの戻り値

実行したSQLの種類

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHK指定

TRUE以外

TRUE

検索系SQL

−

-1

検索系以外のSQL

INSERT，UPDATE，DELETE

更新行数

更新行数

その他

0

0

【機能詳細】

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定していない場合

指定された検索系以外のSQLを実行し，更新行数を返却します。

検索結果を返却するSQL文（SELECT文）の場合は，SQLExceptionを投入します。

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合

指定されたSQLを実行します。

戻り値が-1の場合，Statement.getResultSetメソッドを使用してResultSetオブジェクトを取得できます。executeUpdateメソッド実行後に実行するStatement.getResultSetメソッドの戻り値を次の表に示します。

表17‒23　executeUpdateメソッド実行後に実行するStatement.getResultSetメソッドの戻り値

実行したSQLの種類

Statement.getResultSetメソッドの戻り値

検索系SQL

実行結果のResultSetオブジェクト

検索系以外のSQL

INSERT，UPDATE，DELETE

0列のResultSetオブジェクト

その他

0列のResultSetオブジェクト

SQLの実行がエラーとなった場合

null

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

検索系SQLを指定した場合（システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合を除く）

引数sqlにnull又は0長文字列を指定した場合

データベースアクセスエラーが発生した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(j)　getConnection()

【機能】

このStatementオブジェクトを生成したConnectionオブジェクトを返します。

【形式】

public synchronized Connection getConnection() throws SQLException

【引数】

なし。

【戻り値】

Connectionオブジェクト

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(k)　getFetchDirection()

【機能】

このStatementオブジェクトから生成される結果集合の，デフォルトのフェッチ方向を取得します。

HiRDBでは，フェッチ方向は順方向しかサポートしないため，このメソッドの戻り値は，常にResultSet.FETCH_FORWARDとなります。

【形式】

public synchronized int getFetchDirection() throws SQLException

【引数】

なし。

【戻り値】

常にResultSet.FETCH_FORWARDを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(l)　getFetchSize()

【機能】

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズを取得します。

【形式】

public synchronized int getFetchSize() throws SQLException

【引数】

なし。

【戻り値】

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズ

【機能詳細】

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズを取得します。

setFetchSizeで0が指定されている場合，実際のフェッチサイズはクライアント環境定義に依存しますが，このメソッドは0を返します。フェッチサイズと戻り値の関係を次の表に示します。

表17‒24　フェッチサイズと戻り値の関係

setFetchSizeの設定値（m）

戻り値

0

0

1≦m≦4096

m

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(m)　getMaxFieldSize()

【機能】

このStatementオブジェクトによって生成される，ResultSetオブジェクトの文字及びバイナリの各列値に対し，返される最大バイト数を取得します。この最大バイト数は，[M｜N][VAR]CHAR，BINARY，及びBLOBの各列にだけ適用されます。最大バイト数を超えた分は切り捨てます。

setMaxFieldSizeで設定した値を返します。

【形式】

public synchronized int getMaxFieldSize() throws SQLException

【引数】

なし。

【戻り値】

[M｜N][VAR]CHAR，BINARY，及びBLOB列に対する現在の最大バイト数。0は無制限を意味します。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(n)　getMaxRows()

【機能】

このStatementオブジェクトによって生成されるResultSetオブジェクトが，含むことのできる最大格納行数を取得します。最大格納行数を超えた行は，通知なしに除外されます。

setMaxRowsで設定した値を返します。

【形式】

public synchronized int getMaxRows() throws SQLException

【引数】

なし。

【戻り値】

このStatementオブジェクトによって生成される，ResultSetオブジェクトの最大格納行数（0は無制限を意味します）

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(o)　getMoreResults()

【機能】

次の結果集合に移動します。

【形式】

public synchronized boolean getMoreResults() throws SQLException

【引数】

なし。

【戻り値】

true：

次の結果集合が存在します。

false：

次の結果集合が存在しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

データベースアクセスエラーが発生した場合

(p)　getQueryTimeout()

【機能】

SQL実行がタイムアウトになる秒数を返します。

setQueryTimeoutで設定した値を返します。

setQueryTimeoutを実行してない場合は，0を返します。

【形式】

public synchronized int getQueryTimeout() throws SQLException

【引数】

なし。

【戻り値】

タイムアウトになる秒数

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(q)　getResultSet()

【機能】

ResultSetオブジェクトとして，現在の結果を取得します。

【形式】

public synchronized ResultSet getResultSet() throws SQLException

【引数】

なし。

【戻り値】

Statementオブジェクトが保持しているResultSetオブジェクト（結果がない場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(r)　getResultSetConcurrency()

【機能】

このStatementオブジェクトから生成されるResultSetオブジェクトの並行処理モードを取得します。

更新カーソルは未サポートのため，常にResultSet.CONCUR_READ_ONLYを返します。

【形式】

public synchronized int getResultSetConcurrency() throws SQLException

【引数】

なし。

【戻り値】

常にResultSet.CONCUR_READ_ONLYを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(s)　getResultSetHoldability()

【機能】

このStatementオブジェクトから生成されるResultSetオブジェクトの保持機能を取得します。

保持機能はStatementオブジェクト生成時に決められ，以後変更はできません。

【形式】

public synchronized int getResultSetHoldability() throws SQLException

【引数】

なし。

【戻り値】

ResultSet.HOLD_CURSORS_OVER_COMMIT：

コミット・ロールバック後も，ResltSetオブジェクトを操作できます。

ResultSet.CLOSE_CURSORS_AT_COMMIT：

コミット・ロールバック後のResultSetオブジェクトの操作で，close以外の操作はSQLExceptionが起きます。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(t)　getResultSetType()

【機能】

このStatementオブジェクトから生成されるResultSetオブジェクトの，結果集合の型を取得します。

更新カーソルは未サポートのため，ResultSet.TYPE_FORWARD_ONLY又はResultSet.TYPE_SCROLL_INSENSITIVEを返します。

【形式】

public synchronized int getResultSetType() throws SQLException

【引数】

なし。

【戻り値】

ResultSet.TYPE_FORWARD_ONLY：

カーソルが順方向だけ移動できます。

ResultSet.TYPE_SCROLL_INSENSITIVE：

カーソルがスクロールできますが，値の変更は反映されません。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(u)　getUpdateCount()

【機能】

更新行数を返します。

【形式】

public synchronized int getUpdateCount() throws SQLException

【引数】

なし。

【戻り値】

次の表に示します。

表17‒25　getUpdateCountメソッドの戻り値

Statementオブジェクトのメソッド実行状態

getUpdateCountの戻り値

HiRDB_for_Java_UPDATECOUNT_BEHAVIOR指定

TRUE

FALSE

executeXXXメソッドを実行していない

-1

executeXXXメソッドを実行している

最後に実行したexecuteXXXメソッドの後，getMoreResultsメソッドを実行した

-1

最後に実行したexecuteXXXメソッドでエラーが発生した

-1

最後にexecuteBatchメソッドを実行した

-1

最後にexecuteBatchメソッド以外のexecuteXXXメソッドを実行した

最後に実行したSQLが検索系SQL

-1

最後に実行したSQLが検索系以外のSQL

INSERT，UPDATE，DELETE

更新行あり

更新行数

更新行なし

-1

0

ASSIGN LIST

作成行あり

作成行数

作成行なし

-1

0

CALL

結果集合あり

-1

結果集合なし

-1

0

その他

-1

0

【機能詳細】

更新行数を返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(v)　getWarnings()

【機能】

このStatementオブジェクトに関する呼び出しによって報告される，最初の警告を取得します。二つ以上の警告がある場合，後続の警告は，最初の警告にチェーンされ，直前に取得された警告のSQLWarning.getNextWarningメソッドを呼び出すことによって取得されます。

【形式】

public synchronized SQLWarning getWarnings() throws SQLException

【引数】

なし。

【戻り値】

最初のSQLWarningオブジェクト（SQLWarningオブジェクトがない場合は，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(w)　setCursorName(String name)

【機能】

このドライバでは，位置決めされた更新及び削除をサポートしていないため，このメソッドは指定値を無視します。

【形式】

public synchronized void setCursorName(String name) throws SQLException

【引数】

String name：

カーソル名

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(x)　setEscapeProcessing(boolean enable)

【機能】

このStatementオブジェクトによるエスケープ構文の解析を，有効又は無効にします。

デフォルトは有効です。

【形式】

public synchronized void setEscapeProcessing(boolean enable) throws SQLException

【引数】

boolean enable：

エスケープ構文の解析を有効にする場合はtrue，無効にする場合はfalseを指定します。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(y)　setFetchDirection(int direction)

【機能】

このStatementオブジェクトから生成される結果集合の，デフォルトのフェッチ方向を指定します。

デフォルト値はResultSet.FETCH_FORWARDです。

【形式】

public synchronized void setFetchDirection(int direction) throws SQLException

【引数】

int direction：

デフォルトのフェッチ方向ResultSet.FETCH_FORWARDだけ指定できます。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

directionにResultSet.FETCH_FORWARD以外が指定された場合

(z)　setFetchSize(int rows)

【機能】

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズを設定します。0を指定した場合，クライアント環境定義に依存します。

【形式】

public synchronized void setFetchSize(int rows) throws SQLException

【引数】

int rows：

フェッチする行数。設定できる範囲は0〜4096です。

【戻り値】

なし。

【機能詳細】

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズを設定します。0を指定した場合，クライアント環境定義に依存します。

デフォルトは0です。0以外の値を指定した場合，指定された値をクライアント環境定義PDBLKFの値として，ブロック転送機能を行います。ブロック転送機能については，「ブロック転送機能」を参照してください。

設定値と実際に使用されるPDBLKFの値の関係を次の表に示します。

表17‒26　設定値と実際に使用されるPDBLKFの関係

setFetchSizeの設定値（m）

クライアント環境定義PDBLKFの値（n）

ブロック転送機能で使用されるPDBLKFの値

0

1≦n≦4096

n

指定なし

指定なし

1≦m≦4096

1≦n≦4096

m

指定なし

m

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

rows＜0，最大行数（getMaxRows()の値）＜rows，4096（ブロックフェッチの最大値）＜rowsのどれかに該当する場合

(aa)　setMaxFieldSize(int max)

【機能】

このStatementオブジェクトによって生成されるResultSetオブジェクトの，文字及びバイナリの各列に対する最大バイト数を，指定されたバイト数に設定します。この最大バイト数は，[M｜N][VAR]CHAR，BINARY，及びBLOBの各列にだけ適用されます。最大バイト数を超えた分は切り捨てます。

デフォルトは0です。

生成済みのResultSetオブジェクトには影響しません。

【形式】

public synchronized void setMaxFieldSize(int max) throws SQLException

【引数】

int max：

新しい最大バイト数。0は無制限を意味します。最大バイト数が奇数値である場合，NCHAR，NVARCHARに対しては，最大バイト数-1を最大バイト数とします。最大バイト数に1を指定している場合，NCHAR，NVARCHARに対する最大バイト数が0となりますが，その場合は無制限の0として扱います。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

maxに0未満の値が指定された場合

(ab)　setMaxRows(int max)

【機能】

このStatementオブジェクトによって生成されるResultSetオブジェクトが，含むことのできる最大格納行数を設定します。最大格納行数を超えた行は，通知なしに除外されます。

デフォルトは0です。

生成済みのResultSetオブジェクトには影響しません。

【形式】

public synchronized void setMaxRows(int max) throws SQLException

【引数】

int max：

新しい最大格納行数。0は無制限を意味します。ただし，結果集合の型がResultSet.TYPE_SCROLL_INSENSITIVEの場合は，0を指定してもInteger.MAX_VALUEが最大格納行数となります。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

maxに0未満の値が指定された場合

(ac)　setQueryTimeout(int seconds)

【機能】

SQL実行がタイムアウトになる秒数を設定します。

【形式】

public synchronized void setQueryTimeout(int seconds) throws SQLException

【引数】

int seconds：

タイムアウトになる秒数

【戻り値】

なし。

【機能詳細】

SQL実行時の，HiRDBサーバとの通信の最大待ち時間（秒）を指定します。

0の場合，クライアント環境定義PDCWAITTIMEの設定値に依存します。

デフォルトは0です。

65536以上の値を設定している場合，このメソッドは指定値を無視します。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

secondsに0未満の値が指定された場合

(ad)　isClosed()

【機能】

Statementオブジェクトがクローズされているかどうかの情報を取得します。

【形式】

public boolean isClosed() throws SQLException

【引数】

なし。

【戻り値】

true：

Statementオブジェクトがクローズされています。

false：

Statementオブジェクトがオープン中です。

【機能詳細】

Statementオブジェクトがクローズされているかどうかの情報を取得します。次の場合はtrueが返されます。

Statementオブジェクトにclose()が発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

【発生する例外】

なし。

(ae)　isPoolable()

【機能】

Statementオブジェクトがプールできるかどうかを示す値を取得します。

【形式】

public boolean isPoolable() throws SQLException

【引数】

なし。

【戻り値】

false：

Statementオブジェクトはプールできません。

【機能詳細】

Statementオブジェクトがプールできるかどうかを示す値を取得します。常にfalseが返されます。

【発生する例外】

次の場合，SQLExceptionを投入します。

Statementオブジェクトに対してclose()が既に発行されている場合

このStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbStatement

(4)　注意事項

(a)　setFetchSizeメソッドの指定によるブロック転送機能の利用

setFetchSizeメソッドに1以上を指定すると，JDBCドライバはブロック転送機能を利用して，引数で指定した行数の検索結果をHiRDBサーバに対して一度に要求します。ブロック転送機能の詳細は，「ブロック転送機能」を参照してください。

setFetchSizeメソッドの指定値に上限はありませんが，ブロック転送機能で一度に転送できる行数の最大は4,096行のため，4,097以上を指定しても実際の転送行数は4,096行以下になります。

JDBCドライバがHiRDBサーバに対して一度の通信で要求する行数は，次の表に示す優先順位によって決定します。

表17‒27　JDBCドライバがHiRDBサーバに対して一度の通信で要求する行数の優先順位

優先順位

指定値

1

ResultSetクラスのsetFetchSizeメソッドの引数で指定した値。

2

StatementクラスのsetFetchSizeメソッドの引数で指定した値。

3

クライアント環境定義PDBLKFで設定した値。

表「JDBCドライバがHiRDBサーバに対して一度の通信で要求する行数の優先順位」に示す転送要求行数に対して，実際にJDBCドライバがHiRDBサーバから一度の通信で受け取る行数は，「1回の通信で転送する行数」を参照してください。ただし，「PDBLKF」は「表「JDBCドライバがHiRDBサーバに対して一度の通信で要求する行数の優先順位」に示す優先順位で決定した転送要求行数」に，「FETCH文」は「ResultSetクラスのnextメソッド」に読み替えてください。

なお，検索結果が表「JDBCドライバがHiRDBサーバに対して一度の通信で要求する行数の優先順位」に示す転送行数より多い場合，JDBCドライバは検索が終了するまで（又は，UAPからの検索要求がなくなるまで），HiRDBサーバに対して転送を要求します。

また，次のどれかの条件に一致する場合，HiRDBサーバからJDBCドライバが一度に受け取る行数は1になります。

結果集合の射影列にHiRDBのBLOB型を含む。

結果集合の射影列にHiRDBの定義長32,001以上のBINARY型を含み，クライアント環境定義PDBINARYBLKFの指定がNOである。

次の条件すべてに一致する。

接続時のプロパティLONGVARBINARY_ACCESS，又はDataSourceクラスのsetLONGVARBINARY_Accessの引数に，LOCATORを指定している。

次のどれかを指定している。

・SELECT文にUNTIL DISCONNECTを指定している。

・ConnectionクラスのcreateStatement，prepareStatementメソッドの引数resultSetHoldabilityに，ResultSet.HOLD_CURSORS_OVER_COMMITを指定している。

・接続時のプロパティ，又はURLの設定項目HIRDB_CURSORにTRUEを指定する。

・DataSourceクラスのsetHiRDBCursorModeの引数に，trueを指定している。

(b)　cancelメソッドによる非同期キャンセル

cancelメソッドを使用すると，HiRDBサーバで処理中のSQLに対する非同期キャンセルを実行できます。該当するStatementオブジェクトがSQLを実行中でなくても，同一の接続オブジェクトに対してほかのオブジェクトがSQLを実行していると，非同期キャンセルを実行します。

HiRDBサーバで非同期キャンセルが実行されると，Statementオブジェクト及びResultSetオブジェクトをコミット実行後も有効とするかどうかの指定に関係なく，非同期キャンセル前に作成したPreparedStatementオブジェクト及びResultSetオブジェクトが無効になります。

オブジェクトをコミット実行後も有効とするかどうかの指定方法を次に示します。

DriverManagerクラスのgetConnectionメソッドの，引数Properties中のプロパティHiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR

URL中のSTATEMENT_COMMIT_BEHAVIOR

DataSource系インタフェースのsetStatementCommitBehavior

DriverManagerクラスのgetConnectionメソッドの，引数Properties中のプロパティHIRDB_CURSOR

URL中のHIRDB_CURSOR

DataSource系インタフェースのsetHiRDBCursorMode

ConnectionインタフェースのsetHoldabilityメソッド

ConnectionインタフェースのcreateStatement，prepareStatementメソッドの引数resultSetHoldability

SQL文（UNTIL DISCONNECTの指定）

該当するStatementオブジェクトがSQLを実行中でなく，かつ同一の接続オブジェクトに対してほかのオブジェクトがSQLを実行していないと，HiRDBサーバに対する非同期キャンセルを実行しません。

また，XADataSourceを使用した接続の場合は，非同期キャンセルの要求は有効となりません。

(c)　executeXXXメソッド実行時のResultsetオブジェクトのクローズ

該当するStatementオブジェクトが生成したResultSetオブジェクトがクローズされていない状態でexecuteXXXメソッドを実行すると，以前生成したResultSetオブジェクトをクローズします。このため，executeXXXメソッド実行後，以前に生成したResultSetオブジェクトを使用して検索結果を取得しようとすると，SQLExceptionを投入します。SQLExceptionが発生する例を次に示します。

  Statement st  = con.createStatement();
  ResultSet rs1 = st.executeQuery("select * from tb1");
  ResultSet rs2 = st.executeQuery("select * from tb2");
  rs1.next();  // SQLExceptionを投入する。
  rs2.next();

(d)　1コネクション当たりのステートメントオブジェクト数の上限

1つのConnectionオブジェクトに対し，使用中のステートメントオブジェクトの数の合計が4096以上となった場合，SQLExceptionを投入します。対象となるオブジェクトを次に示します。

Statementオブジェクト

PreparedStatementオブジェクト※1

CallableStatementオブジェクト※1

DatabaseMetaDataオブジェクトのメソッドから返却されたResultSetオブジェクト※2

注※1

ステートメントプーリング／ステートメントキャッシュ機能を使用している場合，プール／キャッシュされているオブジェクトを含んだ数になります。該当する機能の詳細は，機能を提供する製品のマニュアルを参照してください。

注※2

ResultSetオブジェクトを返却するDatabaseMetaDataオブジェクトのメソッドでは，内部的にステートメントオブジェクトを1つ使用しています（この場合，ResultSetオブジェクトのclose時に，内部的なステートメントオブジェクトをcloseします）。

ステートメントオブジェクトを使用するメソッドを次に示します。

getProcedures

getProcedureColumns

getTables

getSchemas

getCatalogs

getTableTypes

getColumns

getColumnPrivileges

getTablePrivileges

getBestRowIdentifier

getVersionColumns

getPrimaryKeys

getImportedKeys

getExportedKeys

getCrossReference

getTypeInfo

getIndexInfo

getUDTs

getSuperTypes

getSuperTables

getAttributes

getClientInfoProperties

getFunctionColumns

getFunctions

17.4.4　PreparedStatementインタフェース

(1)　概要

PreparedStatementインタフェースでは，主に次の機能が提供されます。

？パラメタ指定のSQLの実行※

？パラメタの設定

検索結果としてのResultSetオブジェクトの生成，返却

更新結果としての更新行数の返却

注※

出力パラメタは指定できません（指定時の動作は不定です）。

また，PreparedStatementインタフェースはStatementインタフェースのサブインタフェースであるため，Statementインタフェースの機能をすべて継承します。

(2)　メソッド

PreparedStatementインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒28　PreparedStatementインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

addBatch()

○

○

このPreparedStatementオブジェクトのバッチに，現在のパラメタセットを追加します。

clearParameters()

○

○

現在設定されているパラメタセットの値をすべてクリアします。

execute()

○

○

前処理済みのSQLを実行します。

execute(String sql)

○

○

指定されたSQL文を実行します。

executeQuery()

○

○

前処理済みの検索系SQLを実行し，その結果のResultSetオブジェクトを返します。

executeQuery(String sql)

○

○

指定された検索系SQLを実行し，その結果のResultSetオブジェクトを返します。

executeUpdate()

○

○

前処理済みの検索系以外のSQLを実行し，更新行数を返します。

executeUpdate(String sql)

○

○

指定された検索系以外のSQLを実行し，更新行数を返します。

getMetaData()

×

○

このPreparedStatementオブジェクトの実行時に返されるResultSetのメタ情報を表すResultSetMetaDataを返却します。

getParameterMetaData()

×

○

このPreparedStatementオブジェクト内のパラメタのメタ情報を表すParameterMetaDataを返却します。

setArray(int i,Array x)

○

○

Arrayオブジェクトを指定されたパラメタに設定します。

setAsciiStream(int parameterIndex, java.io.InputStream x, int length)

○

○

指定されたInputStreamオブジェクトの持つ値を？パラメタ値に設定します。

setBigDecimal(int parameterIndex, BigDecimal x)

○

○

指定されたBigDecimalオブジェクトを？パラメタ値に設定します。

setBinaryStream(int parameterIndex, java.io.InputStream x, int length)

○

○

指定されたInputStreamオブジェクトの持つ値を？パラメタ値に設定します。

setBlob(int parameterIndex, Blob x)

○

○

指定されたBlobオブジェクトの持つ値を？パラメタ値に設定します。

setBoolean(int parameterIndex, boolean x)

○

○

指定されたboolean値を？パラメタ値に設定します。

setByte(int parameterIndex, byte x)

○

○

指定されたbyte値を？パラメタ値に設定します。

setBytes(int parameterIndex, byte x[])

○

○

指定されたbyte配列を？パラメタ値に設定します。

setCharacterStream(int parameterIndex, Reader reader, int length)

○

○

指定されたReaderオブジェクトの持つ値を？パラメタ値に設定します。

setDate(int parameterIndex, java.sql.Date x)

○

○

指定されたjava.sql.Dateオブジェクトを？パラメタ値に設定します。

setDate(int parameterIndex, java.sql.Date x,Calendar cal)

○

○

ローカルタイムで指定されたjava.sql.Dateオブジェクトを，指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

setDouble(int parameterIndex, double x)

○

○

指定されたdouble値を？パラメタ値に設定します。

setFloat(int parameterIndex, float x)

○

○

指定されたfloat値を？パラメタ値に設定します。

setInt(int parameterIndex, int x)

○

○

指定されたint値を？パラメタ値に設定します。

setLong(int parameterIndex, long x)

○

○

指定されたlong値を？パラメタ値に設定します。

setNull(int parameterIndex,int sqlType)

○

○

指定された？パラメタにNULL値を設定します。

setObject(int parameterIndex, Object x)

○

○

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

setObject(int parameterIndex, Object x, int targetSqlType)

○

○

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

setObject(int parameterIndex, Object x, int targetSqlType, int scale)

○

○

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

setShort(int parameterIndex, short x)

○

○

指定されたshort値を？パラメタ値に設定します。

setString(int parameterIndex, String x)

○

○

指定されたStringオブジェクトを？パラメタ値に設定します。

setTime(int parameterIndex, java.sql.Time x)

○

○

指定されたjava.sql.Timeオブジェクトを？パラメタ値に設定します。

setTime(int parameterIndex, java.sql.Time x,Calendar cal)

○

○

ローカルタイムで指定されたjava.sql.Timeオブジェクトを，指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

setTimestamp(int parameterIndex, java.sql.Timestamp x)

○

○

指定されたjava.sql.Timestampオブジェクトを？パラメタ値に設定します。

setTimestamp(int parameterIndex, java.sql.Timestamp x,Calendar cal)

○

○

ローカルタイムで指定されたjava.sql.Timestampオブジェクトを，指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

（凡例）

○：提供されます。

×：提供されません。

(a)　addBatch()

【機能】

このPreparedStatementオブジェクトのバッチに，現在のパラメタセットを追加します。

最大2,147,483,647個パラメタセットを登録できます。

【形式】

public synchronized void addBatch() throws SQLException

【引数】

なし。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

すべての？パラメタに値がセットされていない場合

バッチの登録数が2,147,483,647個を超える場合

(b)　clearParameters()

【機能】

現在設定されているパラメタセットの値をすべてクリアします。

【形式】

public synchronized void clearParameters() throws SQLException

【引数】

なし。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(c)　execute()

【機能】

前処理済みのSQLを実行します。

実行結果のResultSetオブジェクトや更新行数を，PreparedStatement.getResultSet，PreparedStatement.getUpdateCountで取得できます。

【形式】

public synchronized boolean execute() throws SQLException

【引数】

なし。

【戻り値】

実行したSQLが検索系SQLの場合はtrue，そうでない場合はfalseを返します。

【機能詳細】

前処理済みのSQLを実行します。

ResultSetオブジェクトや更新行数を，PreparedStatement.getResultSet，PreparedStatement.getUpdateCountで取得できます。メソッド実行後のStatement.getResultSet，Statement.getUpdateCountの戻り値については，「execute(String sql)」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

値を設定していない？パラメタがある場合

データベースアクセスエラーが発生した場合

(d)　execute(String sql)

【機能】

指定されたSQL文を実行します。実行結果のResultSetオブジェクトや更新行数を，PreparedStatement.getResultSet，PreparedStatement.getUpdateCountで取得できます。

【形式】

public synchronized boolean execute(String sql) throws SQLException

【引数】

String sql：

実行するSQL文

【戻り値】

実行したSQLが検索系SQLの場合はtrue，そうでない場合はfalseを返します。

【機能詳細】

指定されたSQL文を実行します。ResultSetオブジェクトや更新行数を，PreparedStatement.getResultSet，PreparedStatement.getUpdateCountで取得できます。

このメソッド実行後のPreparedStatement.getResultSet，PreparedStatement.getUpdateCountの戻り値については，「実行したSQLとStatement.getResultSet及びStatement.getUpdateCountの戻り値の関係」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

引数sqlにnull又は0長文字列を指定した場合

データベースアクセスエラーが発生した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(e)　executeQuery()

【機能】

前処理済みの検索系SQLを実行し，その結果のResultSetオブジェクトを返します。

【形式】

public synchronized ResultSet executeQuery() throws SQLException

【引数】

なし。

【戻り値】

実行結果のResultSetオブジェクト

【機能詳細】

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定していない場合

前処理済みの検索系SQLを実行し，その結果のResultSetオブジェクトを返します。検索系以外のSQLを実行した場合，SQLExceptionを投入します。

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合

前処理済みのSQLを実行し，その結果のResultSetオブジェクトを返します。検索系以外のSQLを実行した場合，0列のResultSetオブジェクトを返します。

また，Statement.getUpdateCountメソッドを使用して更新行数を取得できます。

executeQueryメソッドの戻り値と，メソッド実行後に実行するStatement.getUpdateCountメソッドの戻り値については，「executeQuery(String sql)」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

検索系以外のSQLを指定した場合（システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合を除く）

値を設定していない？パラメタがある場合

データベースアクセスエラーが発生した場合

(f)　executeQuery(String sql)

【機能】

指定された検索系SQLを実行し，その結果のResultSetオブジェクトを返します。

【形式】

public synchronized ResultSet executeQuery(String sql) throws SQLException

【引数】

String sql：

実行するSQL文

【戻り値】

実行結果のResultSetオブジェクト

【機能詳細】

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定していない場合

指定された検索系SQLを実行し，その結果のResultSetオブジェクトを返却します。検索結果のないSQL文（INSERT文など）の場合は，SQLExceptionを投入します。

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合

指定されたSQLを実行し，その結果のResultSetオブジェクトを返却します。検索系以外のSQLを実行した場合，0列のResultSetオブジェクトを返却します。また，Statement.getUpdateCountメソッドを使用して更新行数を取得できます。

executeQueryメソッドの戻り値と，メソッド実行後に実行するStatement.getUpdateCountメソッドの戻り値については，「executeQuery(String sql)」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

検索系以外のSQLを指定した場合（システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合を除く）

引数sqlにnull又は0長文字列を指定した場合

データベースアクセスエラーが発生した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(g)　executeUpdate()

【機能】

前処理済みの検索系以外のSQLを実行し，更新行数を返します。

【形式】

public synchronized int executeUpdate() throws SQLException

【引数】

なし。

【戻り値】

次の表に示します。

表17‒29　executeUpdateメソッドの戻り値

実行したSQLの種類

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHK指定

TRUE以外

TRUE

検索系SQL

−

-1

検索系以外のSQL

INSERT，UPDATE，DELETE

更新行数

更新行数

その他

0

0

【機能詳細】

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定していない場合

前処理済みの検索系以外のSQLを実行し，更新行数を返します。

検索系SQLを実行した場合，SQLExceptionを投入します。

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合

前処理済みのSQLを実行します。

戻り値が-1の場合，Statement.getResultSetメソッドを使用してResultSetオブジェクトを取得できます。executeUpdateメソッド実行後に実行するStatement.getResultSetメソッドの戻り値については，「executeUpdate(String sql)」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

オブジェクトに対してclose()が既に発行されている場合

このオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

検索系SQLを実行した場合（システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合を除く）

値を設定していない？パラメタがある場合

データベースアクセスエラーが発生した場合

(h)　executeUpdate(String sql)

【機能】

指定された検索系以外のSQLを実行し，更新行数を返します。

【形式】

public synchronized int executeUpdate(String sql) throws SQLException

【引数】

String sql：

実行するSQL文

【戻り値】

次の表に示します。

表17‒30　executeUpdateメソッドの戻り値

実行したSQLの種類

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHK指定

TRUE以外

TRUE

検索系SQL

−

-1

検索系以外のSQL

INSERT，UPDATE，DELETE

更新行数

更新行数

その他

0

0

【機能詳細】

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定していない場合

指定された検索系以外のSQLを実行し，更新行数を返却します。

検索結果を返却するSQL文（SELECT文）の場合は，SQLExceptionを投入します。

システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合

指定されたSQLを実行します。

戻り値が-1の場合，Statement.getResultSetメソッドを使用してResultSetオブジェクトを取得できます。executeUpdateメソッド実行後に実行するStatement.getResultSetメソッドの戻り値については，「executeUpdate(String sql)」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

検索系SQLを指定した場合（システムプロパティHiRDB_for_Java_DAB_EXECUTESQL_NOCHKにTRUEを設定している場合を除く）

引数sqlにnull又は0長文字列を指定した場合

データベースアクセスエラーが発生した場合

HiRDB SQL Tuning Advisor用アクセスパス情報ファイルへの出力でエラーが発生した場合（JDBC4.0のときだけ）

(i)　getMetaData()

【機能】

このPreparedStatementオブジェクトの実行時に返されるResultSetのメタ情報を表すResultSetMetaDataを返却します。

【形式】

public synchronized ResultSetMetaData getMetaData() throws SQLException

【引数】

なし。

【戻り値】

次の表に示します。

表17‒31　getMetaDataメソッドの戻り値

前処理済みSQLの種類

getMetaDataメソッドの戻り値

検索系SQL

実行時に返されるResultSetのメタ情報を表すResultSetMetaData

上記以外

null

注

引数にSQL文を持つexecuteXXXメソッドを実行した場合，引数を持たないexecuteXXXメソッドを実行するまで，引数に指定されたSQL文に対応するメタ情報を返却します。

（例）

pstmt = Connection.prepareStatement(<SQL1>)
pstmt.getMetaData() ..........SQL1の結果セットのメタ情報を返却
pstmt.execute()
pstmt.getMetaData() ..........SQL1の結果セットのメタ情報を返却
pstmt.executeQuery(<SQL2>)
pstmt.getMetaData() ..........SQL2の結果セットのメタ情報を返却
pstmt.execute()
pstmt.getMetaData() ..........SQL1の結果セットのメタ情報を返却

【機能詳細】

このPreparedStatementオブジェクトの実行時に返されるResultSetのメタ情報を表すResultSetMetaDataを返却します。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

(j)　getParameterMetaData()

【機能】

このPreparedStatementオブジェクト内のパラメタのメタ情報を表すParameterMetaDataを返却します。

【形式】

public ParameterMetaData getParameterMetaData() throws SQLException

【引数】

なし。

【戻り値】

このPreparedStatementオブジェクト内のパラメタのメタ情報を表すParameterMetaData

【機能詳細】

このPreparedStatementオブジェクト内のパラメタのメタ情報を表すParameterMetaDataを返却します。返却するParameterMetaDataは，Connection.prepareStatement()又はConnection.prepareCall()実行時点でサーバから取得したパラメタのメタ情報となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

(k)　setArray(int i,Array x)

【機能】

Arrayオブジェクトを指定されたパラメタに設定します。

【形式】

public void setArray(int i,Array x) throws SQLException

【引数】

int i：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

Array x：

?パラメタに設定するArrayオブジェクト

【戻り値】

なし。

【機能詳細】

Arrayオブジェクトを，指定されたパラメタ番号のパラメタに設定します。

ArrayオブジェクトのgetArray()で取得したObject配列のデータ型と，ArrayオブジェクトのgetBaseType()で取得したデータ型が対応していない場合は，SQLExceptionとなります。

ArrayオブジェクトのgetArray()で取得したObject配列のデータ型と，ArrayオブジェクトのgetBaseType()で取得したデータ型の対応を次に示します。

getBaseType()で取得したデータ型

getArray()で取得したObject配列のデータ型

java.sql.Types.SMALLINT

short[],java.lang.Short[]

java.sql.Types.INTEGER

int[],java.lang.Integer[]

java.sql.Types.REAL

float[],java.lang.Float[]

java.sql.Types.FLOAT

double[],java.lang.Double[]

java.sql.Types.Decimal

java.math.BigDecimal[]

java.sql.Types.CHAR

java.lang.String[]

java.sql.Types.VARCHAR

java.lang.String[]

java.sql.Types.DATE

java.sql.Date

java.sql.Types.TIME

java.sql.Time

java.sql.Types.TIMESTAMP

java.sql.Timestamp

引数i及び引数xと設定される値の関係を次に示します。

引数i

引数x

getArrayで取り出したObject配列の要素数

Object配列の各要素

HiRDBに設定される繰返し列の要素

存在する?パラメタ番号

!=null

0<要素数<=30000

すべての要素がnull

すべての要素がnullである繰返し列

上記以外

上記以外の繰返し列

要素数>30000

−

SQLException

0

−

要素数0の繰返し列

null

−

−

列全体がnull

存在するが，繰返し列ではない?パラメタ番号

−

−

−

SQLException

存在しない?パラメタ番号

SQLException

（凡例）　−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

引数iに存在しない？パラメタの番号を指定した場合

引数iで指定したパラメタ番号の列が，HiRDBの繰返し列ではない場合

引数xに指定したArrayオブジェクトから取り出したObject配列のデータ型が，？パラメタの列のデータ型に変換できない場合

引数xに指定したArrayオブジェクトから取り出したObject配列の長さが30000を超えている（配列要素数が30000を超えている）場合

(l)　setAsciiStream(int parameterIndex, java.io.InputStream x, int length)

【機能】

指定されたInputStreamオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setAsciiStream(int parameterIndex, java.io.InputStream x, int length) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

java.io.InputStream x：

？パラメタに設定する値を持つInputStreamオブジェクト

int length：

設定するバイト数

【戻り値】

なし。

【機能詳細】

指定されたInputStreamオブジェクトの持つ値を？パラメタ値に設定します。

このメソッドは，xからの入力が終わった後でも，xに対してclose()メソッドを実行しません。

？パラメタのHiRDBのデータ型が[M｜N][VAR]CHAR，BINARY，BLOB以外の場合は，SQLExceptionとなります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

lengthに0未満の値が指定された場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(m)　setBigDecimal(int parameterIndex, BigDecimal x)

【機能】

指定されたBigDecimalオブジェクトを？パラメタ値に設定します。

【形式】

public synchronized void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

BigDecimal x：

？パラメタに設定するBigDecimalオブジェクト

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(n)　setBinaryStream(int parameterIndex, java.io.InputStream x, int length)

【機能】

指定されたInputStreamオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setBinaryStream(int parameterIndex, java.io.InputStream x, int length) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

java.io.InputStream x：

？パラメタに設定する値を持つInputStreamオブジェクト

int length：

設定するバイト数

【戻り値】

なし。

【機能詳細】

指定されたInputStreamオブジェクトの持つ値を？パラメタ値に設定します。

このメソッドは，xからの入力が終わった後でも，xに対してclose()メソッドを実行しません。

？パラメタのHiRDBのデータ型がBINARY，BLOB以外の場合は，SQLExceptionとなります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

lengthに0未満の値が指定された場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(o)　setBlob(int parameterIndex, Blob x)

【機能】

指定されたBlobオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setBlob(int parameterIndex, Blob x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

Blob x：

？パラメタに設定する値を持つBlobオブジェクト

【戻り値】

なし。

【機能詳細】

指定されたInputStreamオブジェクトの持つ値を？パラメタ値に設定します。

？パラメタのHiRDBのデータ型がBINARY，BLOB以外の場合は，SQLExceptionとなります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(p)　setBoolean(int parameterIndex, boolean x)

【機能】

指定されたboolean値を？パラメタ値に設定します。

【形式】

public synchronized void setBoolean(int parameterIndex, boolean x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

boolean x：

？パラメタに設定する値

【戻り値】

なし。

【機能詳細】

指定されたboolean値を？パラメタ値に設定します。

parameterIndexで指定した?パラメタのHiRDBのデータ型がCHAR，MCHAR，NCHAR，VARCHAR，MVARCHAR，及びNVARHARの場合，?パラメタへの設定値はxがtrueのときは"true"，falseのときは"false△"（△は半角スペース）となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(q)　setByte(int parameterIndex, byte x)

【機能】

指定されたbyte値を？パラメタ値に設定します。

【形式】

public synchronized void setByte(int parameterIndex, byte x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

byte x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(r)　setBytes(int parameterIndex, byte x[])

【機能】

指定されたbyte配列を？パラメタ値に設定します。

【形式】

public synchronized void setBytes(int parameterIndex, byte x[]) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

byte x[]：

？パラメタに設定する値を持つbyte配列

【戻り値】

なし。

【機能詳細】

このメソッドでは，byte配列のコピーをしないで，参照だけを保持します。そのため，executeXXXメソッドの実行前にbyte配列の値を変更した場合は，変更後の値が設定値となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型（BINARY型及びBLOB型以外のデータ型）の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(s)　setCharacterStream(int parameterIndex, Reader reader, int length)

【機能】

指定されたReaderオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setCharacterStream(int parameterIndex,
Reader x, int length) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

Reader reader：

？パラメタに設定する値を持つReaderオブジェクト

int length：

文字数

【戻り値】

なし。

【機能詳細】

指定されたReaderオブジェクトの持つ値を？パラメタ値に設定します。

？パラメタのHiRDBのデータ型が[M｜N][VAR]CHAR，BINARY，BLOB以外の場合は，SQLExceptionとなります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

lengthに0未満の値が指定された場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

エンコードに失敗した場合

指定した？パラメタがOUTパラメタである場合

(t)　setDate(int parameterIndex, java.sql.Date x)

【機能】

指定されたjava.sql.Dateオブジェクトを？パラメタ値に設定します。

【形式】

public synchronized void setDate(int parameterIndex, java.sql.Date x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

java.sql.Date x：

？パラメタに設定する値を持つjava.sql.Dateオブジェクト

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(u)　setDate(int parameterIndex, java.sql.Date x,Calendar cal)

【機能】

ローカルタイムで指定されたjava.sql.Dateオブジェクトを，指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

【形式】

public synchronized void setDate(int parameterIndex, java.sql.Date x,Calendar cal) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

java.sql.Date x：

？パラメタに設定する値を持つjava.sql.Dateオブジェクト

Calendar cal：

データベースに格納する値のタイムゾーンが設定されたカレンダー。nullが指定された場合，JavaVMのデフォルトのタイムゾーンのカレンダーが指定されたとみなされます。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(v)　setDouble(int parameterIndex, double x)

【機能】

指定されたdouble値を？パラメタ値に設定します。

【形式】

public synchronized void setDouble(int parameterIndex, double x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

double x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(w)　setFloat(int parameterIndex, float x)

【機能】

指定されたfloat値を？パラメタ値に設定します。

【形式】

public synchronized void setFloat(int parameterIndex, float x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

float x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(x)　setInt(int parameterIndex, int x)

【機能】

指定されたint値を？パラメタ値に設定します。

【形式】

public synchronized void setInt(int parameterIndex, int x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

int x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(y)　setLong(int parameterIndex, long x)

【機能】

指定されたlong値を？パラメタ値に設定します。

【形式】

public synchronized void setLong(int parameterIndex, long x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

long x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(z)　setNull(int parameterIndex,int sqlType)

【機能】

指定された？パラメタにNULL値を設定します。

引数sqlTypeはこのドライバでは無視します。

【形式】

public synchronized void setNull(int parameterIndex,int sqlType) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

int sqlType：

JDBCのSQLデータ型

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがOUTパラメタである場合

(aa)　setObject(int parameterIndex, Object x)

【機能】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setObject(int parameterIndex, Object x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

Object x：

？パラメタに設定する値を持つオブジェクト

【戻り値】

なし。

【機能詳細】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

parameterIndexで指定した?パラメタの型がHiRDBのCHAR，MCHAR，NCHAR，VARCHAR，MVARCHAR，又はNVARHARで，xがBooleanオブジェクトの場合，?パラメタへの設定値はxがtrueのときは"true"，falseのときは"false△"（△は半角スペース）となります。

xがbyte配列の場合，byte配列のコピーをしないで，参照だけを保持します。そのため，executeXXXメソッドの実行前にbyte配列の値を変更した場合は，変更後の値が設定値となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(ab)　setObject(int parameterIndex, Object x, int targetSqlType)

【機能】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

Object x：

？パラメタに設定する値を持つオブジェクト

int targetSqlType：

JDBCのSQLデータ型

【戻り値】

なし。

【機能詳細】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

targetSqlTypeがjava.sql.Types.CHAR，java.sql.Types.VARCHAR，又はjava.sql.Types.LONGVARCHARで，xがBooleanオブジェクトの場合，?パラメタへの設定値はxがtrueのときは”1”,”0”になります。

なお，HiRDBデータ型であるNCHAR，NVARCHAR型の?パラメタへの設定値が”1”,”0”になる場合，SQLExceptionを投入します。

xがbyte配列の場合，byte配列のコピーをしないで，参照だけを保持します。そのため，executeXXXメソッドの実行前にbyte配列の値を変更した場合は，変更後の値が設定値となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

targetSqlTypeが次のどれかの場合

Types.ARRAY，Types.CLOB，Types.REF，Types.STRUCT

指定した？パラメタがOUTパラメタである場合

(ac)　setObject(int parameterIndex, Object x, int targetSqlType, int scale)

【機能】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setObject(int parameterIndex, Object x, int targetSqlType, int scale) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

Object x：

？パラメタに設定する値を持つオブジェクト

int targetSqlType：

JDBCのSQLデータ型

int scale：

位取り（指定値は無視します）

【戻り値】

なし。

【機能詳細】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

targetSqlTypeがjava.sql.Types.CHAR，java.sql.Types.VARCHAR，又はjava.sql.Types.LONGVARCHARで，xがBooleanオブジェクトの場合，?パラメタへの設定値はxがtrueのときは”1”,”0”になります。

なお，HiRDBデータ型であるNCHAR，NVARCHAR型の?パラメタへの設定値が”1”,”0”になる場合，SQLExceptionを投入します。

xがbyte配列の場合，byte配列のコピーをしないで，参照だけを保持します。そのため，executeXXXメソッドの実行前にbyte配列の値を変更した場合は，変更後の値が設定値となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

targetSqlTypeが次のどれかの場合

Types.ARRAY，Types.CLOB，Types.REF，Types.STRUCT

指定した？パラメタがOUTパラメタである場合

(ad)　setShort(int parameterIndex, short x)

【機能】

指定されたshort値を？パラメタ値に設定します。

【形式】

public synchronized void setShort(int parameterIndex, short x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

short x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(ae)　setString(int parameterIndex, String x)

【機能】

指定されたStringオブジェクトを？パラメタ値に設定します。

【形式】

public synchronized void setString(int parameterIndex, String x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

String x：

？パラメタに設定する値を持つStringオブジェクト

【戻り値】

なし。

【機能詳細】

引数xで指定されたStringオブジェクトを？パラメタに設定します。

該当するインスタンスがCallableStatementで，かつ引数xの指定値が0長文字列の場合の，？パラメタ設定値を次の表に示します。

表17‒32　？パラメタの設定値

？パラメタのデータ型

？パラメタの設定値

[M｜N][VAR]CHAR

システムプロパティHiRDB_for_Java_DAB_CONVERT_NULLにTRUEを設定している場合

null

上記以外

0長文字列

BINARY，又はBLOB

0長文字列

その他

null

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

エンコードに失敗した場合

指定した？パラメタがOUTパラメタである場合

(af)　setTime(int parameterIndex, java.sql.Time x)

【機能】

指定されたjava.sql.Timeオブジェクトを？パラメタ値に設定します。

【形式】

public synchronized void setTime(int parameterIndex, java.sql.Time x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

java.sql.Time x：

？パラメタに設定する値を持つjava.sql.Timeオブジェクト

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(ag)　setTime(int parameterIndex, java.sql.Time x,Calendar cal)

【機能】

ローカルタイムで指定されたjava.sql.Timeオブジェクトを，指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

【形式】

public synchronized void setTime(int parameterIndex, java.sql.Time x,Calendar cal) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

java.sql.Time x：

？パラメタに設定する値を持つjava.sql.Timeオブジェクト

Calendar cal：

データベースに格納する値のタイムゾーンが設定されたカレンダー。nullが指定された場合，JavaVMのデフォルトのタイムゾーンのカレンダーが指定されたとします。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(ah)　setTimestamp(int parameterIndex, java.sql.Timestamp x)

【機能】

指定されたjava.sql.Timestampオブジェクトを？パラメタ値に設定します。

【形式】

public synchronized void setTimestamp(int parameterIndex, java.sql.Timestamp x) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

java.sql.Timestamp x：

？パラメタに設定する値を持つjava.sql.Timestampオブジェクト

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(ai)　setTimestamp(int parameterIndex, java.sql.Timestamp x,Calendar cal)

【機能】

ローカルタイムで指定されたjava.sql.Timestampオブジェクトを，指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

【形式】

public synchronized void setTimestamp(int parameterIndex, java.sql.Timestamp x,Calendar cal) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号

java.sql.Timestamp x：

？パラメタに設定する値を持つjava.sql.Timestampオブジェクト

Calendar cal：

データベースに格納する値のタイムゾーンが設定されたカレンダー。nullが指定された場合，JavaVMのデフォルトのタイムゾーンのカレンダーが指定されたとします。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

PreparedStatementオブジェクトに対してclose()が既に発行されている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbPreparedStatement

(4)　注意事項

PreparedStatementインタフェースはStatementインタフェースのサブインタフェースであるため，Statementインタフェースの注意事項はすべて該当します。

ここでは，それ以外のPreparedStatementインタフェースの注意事項を次に示します。

(a)　？パラメタの設定

setXXXメソッドによってマッピングできるかどうかについては，「？パラメタ設定時のマッピング」を参照してください。

setXXXメソッドに指定した列番号又は列名称が存在しない場合は，SQLExceptionを投入します。

setXXXメソッドに指定した値が，対応する？パラメタのデータ型が表現できる値の範囲を超える場合，オーバフローによってSQLExceptionを投入します。オーバフローが発生する可能性のあるsetXXXメソッドとHiRDBのデータ型の組み合わせについては，「オーバフローの扱い」を参照してください。

setXXXメソッドで指定した値は，次の操作のどれかを実行するまで有効です。

該当するPreparedStatementオブジェクトに対して，clearParametersメソッドを実行する。

該当するPreparedStatementオブジェクトに対して，setXXXメソッドを実行し，かつ設定対象の？パラメタは同じである。

該当するPreparedStatementオブジェクトに対して，closeメソッドを実行する。

(b)　コミット，ロールバックをわたるSQLの前処理結果保持

コミット，ロールバックをわたるSQLの前処理結果保持については，「HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIOR指定時の注意事項」を参照してください。

(c)　HiRDBのDECIMAL型の？パラメタに対する値指定

HiRDBのDECIMAL型の？パラメタに対してsetXXXメソッドで値を指定する場合，？パラメタの精度及び位取りと値の精度及び位取りが一致していないときの動作を次に示します。

実際の精度よりも大きい場合：SQLExceptionを投入する

実際の精度よりも小さい場合：拡張する

実際の位取りよりも大きい場合：実際の位取りで切り捨てる

実際の位取りよりも小さい場合：0で補完し拡張する

(d)　HiRDBのTIMESTAMP型の？パラメタに対する値指定

HiRDBのTIMESTAMP型の？パラメタに対してsetXXXメソッドで値を指定する場合，？パラメタの小数秒精度よりも値の小数秒精度が大きいときは，？パラメタの小数秒精度に合わせて，小数秒精度を切り捨てます。

(e)　HiRDBのCHAR，VARCHAR，NCHAR，NVARCHAR，MCHAR，又はMVARCHAR型の？パラメタに対する値指定

HiRDBのCHAR，VARCHAR，NCHAR，NVARCHAR，MCHAR，又はMVARCHAR型の？パラメタに対してsetXXXメソッドで値を指定する場合，？パラメタの定義長よりも値を文字列表現にしたときの長さが大きいと，SQLExceptionを投入します。

(f)　setObjectで指定できるオブジェクト

setObjectの引数xに指定できるオブジェクトは，次に示す型のオブジェクトです。

byte[]

java.lang.Byte

java.lang.Double

java.lang.Float

java.lang.Integer

java.lang.Long

java.lang.Short

java.lang.String

java.math.BigDecimal

java.sql.Blob

java.sql.Boolean

java.sql.Date

java.sql.Time

java.sql.Timestamp

java.sql.Array

(g)　1コネクション当たりのステートメントオブジェクト数の上限

1つのConnectionオブジェクトに対し，使用中のステートメントオブジェクト（Statement，PreparedStatement，及びCallableStatement)の数の合計が4096以上となった場合，SQLExceptionを投入します。詳細は「Statementインタフェース」の「注意事項」を参照してください。

17.4.5　CallableStatementインタフェース

(1)　概要

CallableStatementインタフェースでは，主に次の機能が提供されます。

ストアドプロシジャの実行

INパラメタ及びINOUTパラメタの設定（PreparedStatementクラスのsetXXXメソッドを使用）

INOUTパラメタ及びOUTパラメタの登録

INOUTパラメタ及びOUTパラメタ値の取得

また，CallableStatementクラスはPreparedStatementクラスのサブクラスであるため，PreparedStatementクラス及びStatementクラスの機能をすべて継承します。

(2)　メソッド

CallableStatementインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒33　CallableStatementインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

getBigDecimal(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.math.BigDecimalオブジェクトとして取得します。

getBigDecimal(int parameterIndex, int scale)

○

○

指定された？パラメタの値を，scaleで指定された小数点以下のけた数を持つJavaプログラミング言語のjava.math.BigDecimalオブジェクトとして取得します。

getBlob(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Blobオブジェクトとして取得します。

getBlob(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Blobオブジェクトとして取得します。

getBoolean(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のbooleanとして取得します。

getBoolean(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のbooleanとして取得します。

getByte(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のbyteとして取得します。

getByte(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のbyteとして取得します。

getBytes(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のbyteの配列として取得します。

getBytes(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のbyteの配列として取得します。

getDate(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Dateオブジェクトとして取得します。

getDate(int parameterIndex, java.util.Calendar cal)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Dateオブジェクトとして取得します。

getDate(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Dateオブジェクトとして取得します。

getDate(String parameterName, java.util.Calendar cal)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Dateオブジェクトとして取得します。

getDouble(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のdoubleとして取得します。

getDouble(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のdoubleとして取得します。

getFloat(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のfloatとして取得します。

getFloat(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のfloatとして取得します。

getInt(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のintとして取得します。

getInt(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のintとして取得します。

getLong(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のlongとして取得します。

getLong(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のlongとして取得します。

getObject(int parameterIndex)

○

○

？パラメタの値を，Javaプログラミング言語のjava.lang.Objectとして取得します。

getObject(String parameterName)

○

○

？パラメタの値を，Javaプログラミング言語のjava.lang.Objectとして取得します。

getShort(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のshortとして取得します。

getShort(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のshortとして取得します。

getString(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.lang.Stringオブジェクトとして取得します。

getString(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.lang.Stringオブジェクトとして取得します。

getTime(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timeオブジェクトとして取得します。

getTime(int parameterIndex, java.util.Calendar cal)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timeオブジェクトとして取得します。

getTime(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timeオブジェクトとして取得します。

getTime(String parameterName, java.util.Calendar cal)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timeオブジェクトとして取得します。

getTimestamp(int parameterIndex)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timestampオブジェクトとして取得します。

getTimestamp(int parameterIndex, java.util.Calendar cal)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timestampオブジェクトとして取得します。

getTimestamp(String parameterName)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timestampオブジェクトとして取得します。

getTimestamp(String parameterName, java.util.Calendar cal)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timestampオブジェクトとして取得します。

registerOutParameter(int parameterIndex, int sqlType)

○

○

指定されたOUTパラメタのデータ型を，指定されたJDBCの型として登録します。

registerOutParameter(int parameterIndex, int sqlType, int scale)

○

○

指定されたOUTパラメタのデータ型を，指定されたJDBCの型として登録します。

registerOutParameter(String parameterName, int sqlType)

○

○

指定されたOUTパラメタのデータ型を，指定されたJDBCの型として登録します。

registerOutParameter(String parameterName, int sqlType, int scale)

○

○

指定されたOUTパラメタのデータ型を，指定されたJDBCの型として登録します。

setAsciiStream(String parameterName, java.io.InputStream x, int length)

○

○

指定されたjava.io.InputStreamオブジェクトの持つ値を指定された？パラメタ値に指定された長さだけ設定します。

setBigDecimal(String parameterName, java.math.BigDecimal x)

○

○

指定されたjava.math.BigDecimal値を指定された？パラメタ値に設定します。

setBinaryStream(String parameterName, java.io.InputStream x, int length)

○

○

指定された？パラメタの値を，Javaプログラミング言語のjava.math.BigDecimalオブジェクトとして取得します。

setBoolean(String parameterName, boolean x)

○

○

指定されたboolean値を？パラメタ値に設定します。

setByte(String parameterName, byte x)

○

○

指定されたbyte値を？パラメタ値に設定します。

setBytes(String parameterName,byte[] x)

○

○

指定されたbyte配列を？パラメタ値に設定します。

setCharacterStream(String parameterName, Reader x, int length)

○

○

指定されたReaderオブジェクトの持つ値を？パラメタ値に設定します。

setDate(String parameterName, java.sql.Date x)

○

○

指定されたjava.sql.Dateオブジェクトの持つ値を？パラメタ値に設定します。

setDate(String parameterName, java.sql.Date x,Calendar cal)

○

○

ローカルタイムで指定されたjava.sql.Dateオブジェクトを指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

setDouble(String parameterName, double x)

○

○

指定されたdouble値を？パラメタ値に設定します。

setFloat(String parameterName, float x)

○

○

指定されたfloat値を？パラメタ値に設定します。

setInt(String parameterName, int x)

○

○

指定されたint値を？パラメタ値に設定します。

setLong(String parameterName, long x)

○

○

指定されたlong値を？パラメタ値に設定します。

setNull(String parameterName,int sqlType)

○

○

指定された？パラメタにNULL値を設定します。

setObject(String parameterName, Object x)

○

○

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

setObject(String parameterName, Object x, int targetSqlType)

○

○

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

setObject(String parameterName, Object x, int targetSqlType, int scale)

○

○

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

setShort(String parameterName, short x)

○

○

指定されたshort値を？パラメタ値に設定します。

setString(String parameterName, String x)

○

○

指定されたStringオブジェクトを？パラメタ値に設定します。

setTime(String parameterName, Time x)

○

○

指定されたjava.sql.Timeオブジェクトを？パラメタ値に設定します。

setTime(String parameterName, java.sql.Time x,Calendar cal)

○

○

ローカルタイムで指定されたjava.sql.Timeオブジェクトを指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

setTimestamp(String parameterName, java.sql.Timestamp x)

○

○

指定されたjava.sql.Timestampオブジェクトを？パラメタ値に設定します。

setTimestamp(String parameterName, java.sql.Timestamp x,Calendar cal)

○

○

ローカルタイムで指定されたjava.sql.Timestampオブジェクトを指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

wasNull()

○

○

最後に読み込まれたOUTパラメタ又はINOUTパラメタの値が，NULLかどうかを取得します。

（凡例）

○：提供されます。

(a)　getBigDecimal(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.math.BigDecimalオブジェクトとして取得します。

【形式】

public synchronized java.math.BigDecimal getBigDecimal(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値を持つjava.math.BigDecimalオブジェクト（値がNULLの場合，nullを返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のjava.math.BigDecimalオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

null

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]

？パラメタの値を持つBigDecimalオブジェクト。文字列の前後の半角空白を取り除いた値をBigDecimalオブジェクトにします。

上記以外

SQLExceptionを投入

SMALLINT

NULL

null

NULL以外

？パラメタの値を持つBigDecimalオブジェクト

INTEGER

NULL

null

NULL以外

？パラメタの値を持つBigDecimalオブジェクト

REAL

NULL

null

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

上記以外

？パラメタの値を持つBigDecimalオブジェクト

FLOAT

NULL

null

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

上記以外

？パラメタの値を持つBigDecimalオブジェクト

DECIMAL

NULL

null

NULL以外

？パラメタの値を持つBigDecimalオブジェクト

BOOLEAN

NULL

null

true

BigDecimal(1)でBigDecimalオブジェクトにしたもの

false

BigDecimal(0)でBigDecimalオブジェクトにしたもの

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタの場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(b)　getBigDecimal(int parameterIndex, int scale)

【機能】

指定された？パラメタの値を，scaleで指定された小数点以下のけた数を持つJavaプログラミング言語のjava.math.BigDecimalオブジェクトとして取得します。

【形式】

public synchronized java.math.BigDecimal getBigDecimal(int parameterIndex, int scale) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

int scale：

位取り。指定できる範囲は0≦scale≦2147483647です。

【戻り値】

指定された？パラメタの値で小数点以下のけた数を引数scaleにした値を持つjava.math.BigDecimalオブジェクト（値がNULLの場合，nullを返します）

【機能詳細】

指定された？パラメタの値を，scaleで指定された小数点以下のけた数を持つJavaプログラミング言語のjava.math.BigDecimalオブジェクトとして取得します。

？パラメタの値が持つ小数点以下のけた数より引数scaleの値が小さい場合，？パラメタの小数点以下のけた数をscaleで切り捨てます。？パラメタの値が持つ小数点以下のけた数より引数scaleの値が大きい場合，？パラメタの小数点以下のけた数をscaleまで0で補完します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getBigDecimal(int parameterIndex)」の【機能詳細】を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

scaleに0未満を指定した場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(c)　getBlob(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Blobオブジェクトとして取得します。

【形式】

public synchronized java.sql.Blob getBlob(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2…と指定します。

【戻り値】

指定された？パラメタの値を持つjava.sql.Blobオブジェクト（値がNULLの場合，nullを返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Blobオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

BINARY

BLOB

NULL

null

NULL以外

？パラメタの値を持つjava.sql.Blobオブジェクト

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(d)　getBlob(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Blobオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係は「getBlob(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Blob getBlob (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値を持つjava.sql.Blobオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(e)　getBoolean(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のbooleanとして取得します。

【形式】

public synchronized boolean getBoolean(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値（値がNULLの場合，falseを返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のbooleanとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M][VAR]CHAR

NVARCHAR

NULL

false

[半角空白]半角true（大文字と小文字は区別しない）[半角空白]

true

[半角空白]半角1[半角空白]

true

上記以外

false

NCHAR

NULL

false

先頭が[半角空白]半角true（大文字と小文字は区別しない）

true

上記以外

false

SMALLINT

NULL

false

0

false

0以外

true

INTEGER

NULL

false

0

false

0以外

true

REAL

NULL

false

Infinity

true

-Inifnity

true

NaN

true

0.0又は-0.0

false

上記以外

true

FLOAT

NULL

false

Infinity

true

-Inifnity

true

NaN

true

0.0又は-0.0

false

上記以外

true

DECIMAL

NULL

false

0[.00…0]

false

上記以外

true

BOOLEAN

NULL

false

NULL以外

？パラメタ値

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(f)　getBoolean(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のbooleanとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getBoolean(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized boolean getBoolean (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値（値がNULLの場合，falseを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(g)　getByte(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のbyteとして取得します。

【形式】

public synchronized byte getByte(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語の byteとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

0

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]であり，かつByte.MIN_VALUE以上，Byte.MAX_VALUE以下

？パラメタ値をbyte値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]であり，かつByte.MAX_VALUEより大きいかByte.MIN_VALUEより小さい

SQLExceptionを投入

[半角空白][+]Infinity[半角空白]

SQLExceptionを投入

[半角空白]-Infinity[半角空白]

SQLExceptionを投入

[半角空白][+｜-]NaN[半角空白]

SQLExceptionを投入

上記以外（double値にできない）

SQLExceptionを投入

SMALLINT

NULL

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

？パラメタ値をbyte値にしたもの

上記以外

SQLExceptionを投入

INTEGER

NULL

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

？パラメタ値をbyte値にしたもの

上記以外

SQLExceptionを投入

REAL

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

？パラメタ値の整数部分の値をbyte値にしたもの

上記以外

SQLExceptionを投入

FLOAT

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

？パラメタ値の整数部分の値をbyte値にしたもの

上記以外

SQLExceptionを投入

DECIMAL

NULL

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

？パラメタ値の整数部分の値をbyte値にしたもの

上記以外

SQLExceptionを投入

BOOLEAN

NULL

0

true

1

false

0

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(h)　getByte(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のbyteとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係は，「getByte(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized byte getByte (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(i)　getBytes(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のbyteの配列として取得します。

【形式】

public synchronized byte[] getBytes(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値を持つbyte配列（値がNULLの場合，nullを返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のbyteの配列として取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

BINARY

BLOB

NULL

null

NULL以外

？パラメタ値をbyte配列にしたもの

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

データベースアクセスエラーが発生した場合

(j)　getBytes(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のbyteの配列として取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getBytes(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized byte[] getBytes(String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値を持つbyte配列（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

データベースアクセスエラーが発生した場合

(k)　getDate(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Dateオブジェクトとして取得します。

【形式】

public synchronized java.sql.Date getDate(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値を持つjava.sql.Dateオブジェクト（値がNULLの場合，nullを返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Dateオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

null

[半角空白]日付形式[半角空白]

？パラメタ値の前後の半角空白を取り除きjava.sql.Dateオブジェクトにしたもの

上記以外

SQLExceptionを投入

DATE

NULL

null

NULL以外

？パラメタ値をjava.sql.Dateオブジェクトにしたもの

TIMESTAMP

NULL

null

NULL以外

？パラメタ値をjava.sql.Dateオブジェクトにしたもの

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Dateとして取得できない値の場合

(l)　getDate(int parameterIndex, java.util.Calendar cal)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Dateオブジェクトとして取得します。このメソッドは，指定されたカレンダーを使って取得した適切なミリ秒値から日付を作成します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getDate(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Date getDate (int parameterIndex, java.util.Calendar cal) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

java.util.Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

指定された？パラメタの値を持つjava.sql.Dateオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Dateとして取得できない値の場合

(m)　getDate(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Dateオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getDate(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Date getDate (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値を持つjava.sql.Dateオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Dateとして取得できない値の場合

(n)　getDate(String parameterName, java.util.Calendar cal)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Dateオブジェクトとして取得します。このメソッドは，指定されたカレンダーを使って取得した適切なミリ秒値から日付を作成します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getDate(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Date getDate (String parameterName, java.util.Calendar cal) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.util.Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

指定された？パラメタの値を持つjava.sql.Dateオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Dateとして取得できない値の場合

(o)　getDouble(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のdoubleとして取得します。

【形式】

public synchronized double getDouble(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のdoubleとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

0.0

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]であり，かつ-Double.MAX_VALUE以上，かつDouble.MIN_VALUE以下，かつDouble.MIN_VALUE以上かつDouble.MAX_VALUE以下

？パラメタ値をdouble値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]かつDouble.MAX_VALUEより大きい

Infinity

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]かつ-Double.MAX_VALUEより小さい

-Infinity

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]かつDouble.MIN_VALUEより小さく0より大きい

0.0

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]かつ-Double.MIN_VALUEより大きく0より小さい

-0.0

[半角空白]-Infinity[半角空白]

-Infinity

[半角空白][+]Infinity[半角空白]

Infinity

[半角空白][+｜-]NaN[半角空白]

NaN

上記以外（double値にできない）

SQLExceptionを投入

SMALLINT

NULL

0.0

NULL以外

？パラメタ値をdouble値にしたもの

INTEGER

NULL

0

NULL以外

？パラメタ値をdouble値にしたもの

REAL

NULL

0.0

Infinity

Infinity

-Infinity

-Infinity

NaN

NaN

上記以外

？パラメタ値をdouble値にしたもの

FLOAT

NULL

0.0

Infinity

Infinity

-Infinity

-Infinity

NaN

NaN

上記以外

？パラメタ値

DECIMAL

NULL

0

NULL以外

？パラメタ値をdouble値にしたもの

BOOLEAN

NULL

0.0

true

1.0

false

0.0

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(p)　getDouble(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のdoubleとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getDouble(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized double getDouble (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(q)　getFloat(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のfloatとして取得します。

【形式】

public synchronized float getFloat(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のfloatとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

0.0

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]であり，かつ次のどちらか

-Float.MAX_VALUE以上-Float.MIN_VALUE以下

Float.MIN_VALUE以上Float.MAX_VALUE以下

？パラメタ値をfloat値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]かつFloat.MAX_VALUEより大きい

Infinity

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]かつ-Float.MAX_VALUEより小さい

-Infinity

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]かつFloat.MIN_VALUEより小さく0より大きい

0.0

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]かつ-Float.MIN_VALUEより大きく0より小さい

-0.0

[半角空白]-Infinity[半角空白]

-Infinity

[半角空白][+]Infinity[半角空白]

Infinity

[半角空白][+｜-]NaN[半角空白]

NaN

上記以外（float値にできない）

SQLExceptionを投入

SMALLINT

NULL

0.0

NULL以外

？パラメタ値をfloat値にしたもの

INTEGER

NULL

0.0

NULL以外

？パラメタ値をfloat値にしたもの

REAL

NULL

0.0

Infinity

Infinity

-Infinity

-Infinity

NaN

NaN

上記以外

？パラメタ値

FLOAT

NULL

0.0

Infinity

Infinity

-Infinity

-Infinity

NaN

NaN

-Float.MAX_VALUE以上-Float.MIN_VALUE以下，又はFloat.MIN_VALUE以上Float.MAX_VALUE以下

？パラメタ値をfloat値にしたもの

Float.MAX_VALUEより大きい

Infinity

-Float.MAX_VALUEより小さい

-Infinity

Float.MIN_VALUEより小さく0より大きい

0.0

-Float.MIN_VALUEより大きく0より小さい

-0.0

DECIMAL

NULL

0.0

NULL以外

？パラメタ値をfloat値にしたもの

BOOLEAN

NULL

0.0

true

1.0

false

0.0

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(r)　getFloat(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のfloatとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getFloat(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized float getFloat (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(s)　getInt(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のintとして取得します。

【形式】

public synchronized int getInt(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のintとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

0

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]であり，かつInteger.MIN_VALUE以上，Integer.MAX_VALUE以下

？パラメタ値の整数部分の値をint値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]であり，かつInteger.MAX_VALUEより大きいかInteger.MIN_VALUEより小さい

SQLExceptionを投入

[半角空白]-Infinity[半角空白]

SQLExceptionを投入

[半角空白][+]Infinity[半角空白]

SQLExceptionを投入

[半角空白][+｜-]NaN[半角空白]

SQLExceptionを投入

上記以外（double値にできない）

SQLExceptionを投入

SMALLINT

NULL

0

NULL以外

？パラメタ値をint値にしたもの

INTEGER

NULL

0

NULL以外

？パラメタ値

REAL

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Integer.MIN_VALUE以上かつ，Integer.MAX_VALUE以下

？パラメタ値の整数部分の値をint値にしたもの

上記以外

SQLExceptionを投入

FLOAT

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Integer.MIN_VALUE以上かつ，Integer.MAX_VALUE以下

？パラメタ値の整数部分の値をint値にしたもの

上記以外

SQLExceptionを投入

DECIMAL

NULL

0

Integer.MIN_VALUE以上かつInteger.MAX_VALUE以下

？パラメタ値の整数部分の値をint値にしたもの

上記以外

SQLExceptionを投入

BOOLEAN

NULL

0

true

1

false

0

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(t)　getInt(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のintとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getInt(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized int getInt (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(u)　getLong(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のlongとして取得します。

【形式】

public synchronized long getlong(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のlongとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

0

[半角空白]整数の文字列表現又は10進数の文字列表現かつ15文字以内[半角空白]

？パラメタ値の整数部分の値をlong値にしたもの

[半角空白]整数の文字列表現又は10進数の文字列表現であり，文字以上又は浮動小数点の文字列表現[半角空白]であり，かつLong.MIN_VALUE以上，Long.MAX_VALUE以下

？パラメタ値の整数部分の値をlong値にしたもの

[半角空白]整数の文字列表現又は10進数の文字列表現であり，16文字以上又は浮動小数点の文字列表現[半角空白]であり，かつLong.MAX_VALUEより大きいかLong.MIN_VALUEより小さい

SQLExceptionを投入

[半角空白]-Infinity[半角空白]

SQLExceptionを投入

[半角空白][+]Infinity[半角空白]

SQLExceptionを投入

[半角空白][+｜-]NaN[半角空白]

SQLExceptionを投入

上記以外（double値又はBigDecimalオブジェクトにできない）

SQLExceptionを投入

SMALLINT

NULL

0

NULL以外

？パラメタ値をlong値にしたもの

INTEGER

NULL

0

NULL以外

？パラメタ値をlong値にしたもの

REAL

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Long.MIN_VALUE以上かつ，Long.MAX_VALUE以下

？パラメタ値の整数部分の値をlong値にしたもの

上記以外

SQLExceptionを投入

FLOAT

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Long.MIN_VALUE以上かつ，Long.MAX_VALUE以下

？パラメタ値の整数部分の値をlong値にしたもの

上記以外

SQLExceptionを投入

DECIMAL

NULL

0

Long.MIN_VALUE以上かつLong.MAX_VALUE以下

？パラメタ値の整数部分の値をlong値にしたもの

上記以外

SQLExceptionを投入

BINARY

BLOB

NULL

0

0長データ

0

1バイト以上

最大8バイトをリトルエンディアン形式でlong値にしたもの

BOOLEAN

NULL

0

true

1

false

0

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(v)　getLong(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のlongとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getLong(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized long getLong (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(w)　getObject(int parameterIndex)

【機能】

？パラメタの値を，Javaプログラミング言語のjava.lang.Objectとして取得します。

【形式】

public synchronized Object getObject (int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値を持つjava.lang.Object（値がNULLの場合，nullを返します）

【機能詳細】

？パラメタの値を，Javaプログラミング言語のjava.lang.Objectとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

null

NULL以外

？パラメタ値

SMALLINT

NULL

null

NULL以外

？パラメタ値で生成したIntegerオブジェクト

INTEGER

NULL

null

NULL以外

？パラメタ値で生成したIntegerオブジェクト

REAL

NULL

null

NULL以外

？パラメタ値で生成したFloatオブジェクト

FLOAT

NULL

null

NULL以外

？パラメタ値で生成したDoubleオブジェクト

DECIMAL

NULL

null

NULL以外

？パラメタ値

DATE

NULL

null

NULL以外

？パラメタ値で生成したjava.sql.Dateオブジェクト

TIME

NULL

null

NULL以外

？パラメタ値で生成したjava.sql.Timeオブジェクト

TIMESTAMP

NULL

null

NULL以外

？パラメタ値で生成したjava.sql.Timestampオブジェクト

BINARY

BLOB

NULL

null

NULL以外

？パラメタ値

BOOLEAN

NULL

null

NULL以外

？パラメタ値で生成したBooleanオブジェクト

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

データベースアクセスエラーが発生した場合

(x)　getObject(String parameterName)

【機能】

？パラメタの値を，Javaプログラミング言語のjava.lang.Objectとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getObject(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized Object getObject (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値を持つjava.lang.Object（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(y)　getShort(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のshortとして取得します。

【形式】

public synchronized short getShort(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のshortとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

0

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]であり，かつShort.MIN_VALUE以上，Short.MAX_VALUE以下

？パラメタ値の整数部分の値をshort値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現又は浮動小数点数の文字列表現[半角空白]であり，かつShort.MAX_VALUEより大きいかShort.MIN_VALUEより小さい

SQLExceptionを投入

[半角空白]-Infinity[半角空白]

SQLExceptionを投入

[半角空白][+]Infinity[半角空白]

SQLExceptionを投入

[半角空白][+｜-]NaN[半角空白]

SQLExceptionを投入

上記以外（double値にできない）

SQLExceptionを投入

SMALLINT

NULL

0

NULL以外

？パラメタ値

INTEGER

NULL

0

Short.MIN_VALUE以上かつ，Short.MAX_VALUE以下

？パラメタ値をshort値にしたもの

上記以外

SQLExceptionを投入

REAL

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Short.MIN_VALUE以上かつ，Short.MAX_VALUE以下

？パラメタ値の整数部分の値をshort値にしたもの

上記以外

SQLExceptionを投入

FLOAT

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Short.MIN_VALUE以上かつ，Short.MAX_VALUE以下

？パラメタ値の整数部分の値をshort値にしたもの

上記以外

SQLExceptionを投入

DECIMAL

NULL

0

Short.MIN_VALUE以上かつShort.MAX_VALUE以下

？パラメタ値の整数部分の値をshort値にしたもの

上記以外

SQLExceptionを投入

BOOLEAN

NULL

0

true

1

false

0

その他

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(z)　getShort(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のshortとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係は，「getShort(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized short getShort (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値（値がNULLの場合，0を返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(aa)　getString(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.lang.Stringオブジェクトとして取得します。

【形式】

public synchronized String getString(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値を持つjava.lang.Stringオブジェクト（値がNULLの場合，nullを返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のjava.lang.Stringオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

null

NULL以外

？パラメタ値

ただし，システムプロパティHiRDB_for_Java_DAB_CONVERT_NULLにTRUEを設定し，かつ？パラメタの値が0長文字列の場合はnull

SMALLINT

NULL

null

NULL以外

？パラメタ値を文字列表現にしたStringオブジェクト

INTEGER

NULL

null

NULL以外

？パラメタ値を文字列表現にしたStringオブジェクト

REAL

NULL

null

Infinity

文字列"Infinity"のStringオブジェクト

-Infinity

文字列"-Infinity"のStringオブジェクト

NaN

文字列"NaN"のStringオブジェクト

上記以外

？パラメタ値を文字列表現にしたStringオブジェクト

FLOAT

NULL

null

Infinity

文字列"Infinity"のStringオブジェクト

-Infinity

文字列"-Infinity"のStringオブジェクト

NaN

文字列"NaN"のStringオブジェクト

上記以外

？パラメタ値を文字列表現にしたStringオブジェクト

DECIMAL

NULL

null

NULL以外

？パラメタ値を文字列表現にしたStringオブジェクト

DATE

NULL

null

NULL以外

JdbConvert.convertDate()で取得したyyyy-MM-DD形式の文字列のStringオブジェクト

TIME

NULL

null

NULL以外

hh:mm:ss形式の文字列のStringオブジェクト

TIMESTAMP

NULL

null

NULL以外

yyyy-MM-DD△hh:mm:ss[.ffffff]形式の文字列のStringオブジェクト

BINARY

BLOB

NULL

null

NULL以外

？パラメタ値のStringオブジェクト

BOOLEAN

NULL

null

true

文字列"true"のStringオブジェクト

false

文字列"false"のStringオブジェクト

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(ab)　getString(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.lang.Stringオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係は，「getString(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized String getString(String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値を持つjava.lang.Stringオブジェクト（値がNULLの場合，nullを返します）。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

(ac)　getTime(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timeオブジェクトとして取得します。

【形式】

public synchronized java.sql.Time getTime(int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値を持つjava.sql.Timeオブジェクト（値がNULLの場合，nullを返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timeオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係を次に示します。

HiRDBのデータ型

？パラメタの値

戻り値

[M｜N][VAR]CHAR

NULL

null

[半角空白]時刻形式[半角空白]

？パラメタ値の前後の半角空白を取り除きjava.sql.Timeオブジェクトにしたもの

上記以外

SQLExceptionを返します

TIME

NULL

null

NULL以外

？パラメタ値をjava.sql.Timeオブジェクトにしたもの

TIMESTAMP

NULL

null

NULL以外

？パラメタ値をjava.sql.Timeオブジェクトにしたもの

その他

−

SQLExceptionを返します

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Timeとして取得できない値の場合

(ad)　getTime(int parameterIndex, java.util.Calendar cal)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timeオブジェクトとして取得します。このメソッドは指定されたカレンダーを使って取得した適切なミリ秒値から時刻を作成します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getTime(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Time getTime (int parameterIndex, java.util.Calendar cal) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

java.util.Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

指定された？パラメタの値を持つjava.sql.Timeオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Timeとして取得できない値の場合

(ae)　getTime(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timeオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getTime(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Time getTime (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値を持つjava.sql.Timeオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Timeとして取得できない値の場合

(af)　getTime(String parameterName, java.util.Calendar cal)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timeオブジェクトとして取得します。このメソッドは指定されたカレンダーを使って取得した適切なミリ秒値から時刻を作成します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については，「getTime(int parameterIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Time getTime (String parameterName, java.util.Calendar cal) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.util.Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

指定された？パラメタの値を持つjava.sql.Timeオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Timeとして取得できない値の場合

(ag)　getTimestamp(int parameterIndex)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timestampオブジェクトとして取得します。

【形式】

public synchronized java.sql.Timestamp getTimestamp (int parameterIndex) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

【戻り値】

指定された？パラメタの値を持つjava.sql.Timestampオブジェクト（値がNULLの場合，nullを返します）

【機能詳細】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timestampオブジェクトとして取得します。

HiRDBのデータ型による？パラメタ値と戻り値の関係については「TIME型，DATE型，及びTIMESTAMP型列のデータ変換処理」を参照してください。TIME型，DATE型，TIMESTAMP型，文字列型以外のデータ型を取得した場合，SQLExceptionを投入します。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Timestampとして取得できない値の場合

(ah)　getTimestamp(int parameterIndex, java.util.Calendar cal)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timestampオブジェクトとして取得します。このメソッドは指定されたカレンダーを使って取得した適切なミリ秒値からタイムスタンプを作成します。

各HiRDBのデータ型での？パラメタ値と戻り値の関係については，「TIME型，DATE型，及びTIMESTAMP型列のデータ変換処理」を参照してください。TIME型，DATE型，TIMESTAMP型，文字列型以外のデータ型を取得した場合，SQLExceptionを投入します。

【形式】

public synchronized java.sql.Timestamp getTimestamp (int parameterIndex, java.util.Calendar cal) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

java.util.Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

指定された？パラメタの値を持つjava.sql.Timestampオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Timestampとして取得できない値の場合

(ai)　getTimestamp(String parameterName)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timestampオブジェクトとして取得します。

各HiRDBのデータ型での？パラメタ値と戻り値の関係については，「TIME型，DATE型，及びTIMESTAMP型列のデータ変換処理」を参照してください。TIME型，DATE型，TIMESTAMP型，文字列型以外のデータ型を取得した場合，SQLExceptionを投入します。

【形式】

public synchronized java.sql.Timestamp getTimestamp (String parameterName) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

【戻り値】

指定された？パラメタの値を持つjava.sql.Timestampオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Timestampとして取得できない値の場合

(aj)　getTimestamp(String parameterName, java.util.Calendar cal)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.sql.Timestampオブジェクトとして取得します。このメソッドは指定されたカレンダーを使って取得した適切なミリ秒値からタイムスタンプを作成します。

各HiRDBのデータ型での？パラメタ値と戻り値の関係については，「TIME型，DATE型，及びTIMESTAMP型列のデータ変換処理」を参照してください。TIME型，DATE型，TIMESTAMP型，文字列型以外のデータ型を取得した場合，SQLExceptionを投入します。

【形式】

public synchronized java.sql.Timestamp getTimestamp (String parameterName, java.util.Calendar cal) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.util.Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

指定された？パラメタの値を持つjava.sql.Timestampオブジェクト（値がNULLの場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがINパラメタである場合

指定した？パラメタはこのメソッドでは取得できないデータ型である場合

？パラメタの値がjava.sql.Timestampとして取得できない値の場合

(ak)　registerOutParameter(int parameterIndex, int sqlType)

【機能】

指定されたOUTパラメタのデータ型を，指定されたJDBCの型として登録します。

このメソッドで，DECIMAL型のOUTパラメタ及びINOUTパラメタを設定する場合，スケール値は0とみなします。

【形式】

public synchronized void registerOutParameter(int parameterIndex, int sqlType) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

int sqlType：

登録するJDBCの型

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

HiRDBのデータ型とマッピングできないJDBCの型を指定した場合

(al)　registerOutParameter(int parameterIndex, int sqlType, int scale)

【機能】

指定されたOUTパラメタのデータ型を，指定されたJDBCの型として登録します。

【形式】

public synchronized void registerOutParameter(int parameterIndex, int sqlType, int scale) throws SQLException

【引数】

int parameterIndex：

？パラメタの番号。最初のパラメタは1，2番目のパラメタは2，…と指定します。

int sqlType：

登録するJDBCの型

int scale：

位取り。指定できる範囲は0≦scale≦38です。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

存在しない？パラメタの番号を指定した場合

指定した？パラメタがINパラメタである場合

HiRDBのデータ型とマッピングできないJDBCの型を指定した場合

scaleに指定した値が0未満，又は38より大きい場合

(am)　registerOutParameter(String parameterName, int sqlType)

【機能】

指定されたOUTパラメタのデータ型を，指定されたJDBCの型として登録します。

このメソッドで，DECIMAL型のOUTパラメタ及びINOUTパラメタを設定する場合，スケール値は0とみなします。

【形式】

public synchronized void registerOutParameter(String parameterName, int sqlType) throws SQLException

【引数】

String parameterName：

パラメタ名。大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符（"）が含まれている場合，引用符（"）も？パラメタ名に含まれます。

int sqlType：

登録するJDBCの型

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

存在しないパラメタ名を指定した場合

parameterNameの指定値が，null又は0長文字列の場合も含みます。

指定した？パラメタがINパラメタである場合

HiRDBのデータ型とマッピングできないJDBCの型を指定した場合

(an)　registerOutParameter(String parameterName, int sqlType, int scale)

【機能】

指定されたOUTパラメタのデータ型を，指定されたJDBCの型として登録します。

【形式】

public synchronized void registerOutParameter(String parameterName, int sqlType, int scale) throws SQLException

【引数】

String parameterName：

パラメタ名。大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符（"）が含まれている場合，引用符（"）も？パラメタ名に含まれます。

int sqlType：

登録するJDBCの型

int scale：

位取り。指定できる範囲は0≦scale≦38です。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

存在しないパラメタ名を指定した場合

parameterNameの指定値が，null又は0長文字列の場合も含みます。

指定した？パラメタがINパラメタである場合

HiRDBのデータ型とマッピングできないJDBCの型を指定した場合

scaleに指定した値が0未満，又は38より大きい場合

(ao)　setAsciiStream(String parameterName, java.io.InputStream x, int length)

【機能】

指定されたjava.io.InputStreamオブジェクトの持つ値を指定された？パラメタ値に指定された長さだけ設定します。

【形式】

public synchronized void setAsciiStream(String parameterName, java.io.InputStream x, int length) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.io.InputStream x：

？パラメタに設定する値を持つInputStreamオブジェクト

int length：

設定するストリームのバイト数

【戻り値】

なし。

【機能詳細】

指定されたInputStreamオブジェクトの持つ値を？パラメタ値に設定します。

このメソッドは，xから入力を終えた後，xに対してclose()メソッドを実行しません。

？パラメタのHiRDBのデータ型が[M｜N][VAR]CHAR，BINARY，BLOB以外はSQLExceptionとなります。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがOUTパラメタである場合

lengthに0未満の値が指定された場合

このメソッドでは設定できない？パラメタのデータ型である場合

指定された値が？パラメタのデータ型の範囲外，又は変換できない形式である場合

ストリームからの読み込みに失敗した場合

(ap)　setBigDecimal(String parameterName, java.math.BigDecimal x)

【機能】

指定されたjava.math.BigDecimal値を指定された？パラメタ値に設定します。

【形式】

public synchronized void setBigDecimal(String parameterName, java.math.BigDecimal x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.math.BigDecimal x：

？パラメタに設定する値を持つBigDecimalオブジェクト

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがOUTパラメタである場合

指定したデータの整数部のけた数が，表定義の整数部のけた数を超えるため，表定義のデータ型に変換できない場合

このメソッドでは設定できない？パラメタのデータ型である場合

指定された値が？パラメタのデータ型の範囲外，又は変換できない形式である場合

(aq)　setBinaryStream(String parameterName, java.io.InputStream x, int length)

【機能】

指定された？パラメタの値を，Javaプログラミング言語のjava.math.BigDecimalオブジェクトとして取得します。

【形式】

public synchronized void setBinaryStream(String parameterName, java.io.InputStream x, int length) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.io.InputStream x：

？パラメタに設定する値を持つInputStreamオブジェクト

int length：

設定するストリームのバイト数

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがOUTパラメタである場合

lengthに0未満の値が指定された場合

このメソッドでは設定できない？パラメタのデータ型である場合

指定された値が？パラメタのデータ型の範囲外，又は変換できない形式である場合

ストリームからの読み込みに失敗した場合

(ar)　setBoolean(String parameterName, boolean x)

【機能】

指定されたboolean値を？パラメタ値に設定します。

指定した?パラメタのHiRDBのデータ型がCHAR，MCHAR，NCHAR，VARCHAR，MVARCHAR，NVARHARの場合，?パラメタへの設定値はxがtrueのときは"true"，falseのときは"false△"（△は半角スペース）となります。

【形式】

public synchronized void setBoolean(String parameterName, boolean x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

boolean x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(as)　setByte(String parameterName, byte x)

【機能】

指定されたbyte値を？パラメタ値に設定します。

【形式】

public synchronized void setByte(String parameterName, byte x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

byte x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(at)　setBytes(String parameterName,byte[] x)

【機能】

指定されたbyte配列を？パラメタ値に設定します。

【形式】

public synchronized void setBytes(String parameterName, byte[] x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

byte[] x：

？パラメタに設定する値を持つbyte配列

【戻り値】

なし。

【機能詳細】

？パラメタのHiRDBのデータ型がBINARY，BLOB以外はSQLExceptionとなります。

このメソッドでは，byte配列中の設定値を参照しません。executeXXX()メソッド実行時にbyte配列中の設定値を参照します。そのため，このメソッド実行からexecuteXXX()メソッド実行するまでの間にbyte配列中の設定値を変更した場合，変更後の設定値が？パラメタの値となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(au)　setCharacterStream(String parameterName, Reader x, int length)

【機能】

指定されたReaderオブジェクトの持つ値を？パラメタ値に設定します。

？パラメタのHiRDBのデータ型が[M｜N][VAR]CHAR，BINARY，BLOB以外はSQLExceptionとなります。

【形式】

public synchronized void setCharacterStream(String parameterName, Reader x, int length) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

Reader x：

？パラメタに設定する値を持つReaderオブジェクト

int length：

文字数

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

lengthに0未満の値が指定された場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

エンコード失敗

指定した？パラメタがOUTパラメタである場合

(av)　setDate(String parameterName, java.sql.Date x)

【機能】

指定されたjava.sql.Dateオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setDate(String parameterName, java.sql.Date x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.sql.Date x：

？パラメタに設定する値を持つjava.sql.Dateオブジェクト

【戻り値】

なし。

【機能詳細】

ローカルタイムで指定されたjava.sql.Dateオブジェクトを指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(aw)　setDate(String parameterName, java.sql.Date x,Calendar cal)

【機能】

ローカルタイムで指定されたjava.sql.Dateオブジェクトを指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

【形式】

public synchronized void setDate(String parameterName, java.sql.Date x,Calendar cal) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.sql.Date x：

？パラメタに設定する値を持つjava.sql.Dateオブジェクト

Calendar cal：

データベースに格納する値のタイムゾーンが設定されたカレンダー。nullが指定された場合，JavaVMのデフォルトのタイムゾーンのカレンダーが指定されたとします。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(ax)　setDouble(String parameterName, double x)

【機能】

指定されたdouble値を？パラメタ値に設定します。

【形式】

public synchronized void setDouble(String parameterName, double x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

double x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(ay)　setFloat(String parameterName, float x)

【機能】

指定されたfloat値を？パラメタ値に設定します。

【形式】

public synchronized void setFloat(String parameterName, float x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

float x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(az)　setInt(String parameterName, int x)

【機能】

指定されたint値を？パラメタ値に設定します。

【形式】

public synchronized void setInt(String parameterName, int x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

int x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(ba)　setLong(String parameterName, long x)

【機能】

指定されたlong値を？パラメタ値に設定します。

【形式】

public synchronized void setLong(String parameterName, long x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

long x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(bb)　setNull(String parameterName,int sqlType)

【機能】

指定された？パラメタにNULL値を設定します。

引数sqlTypeはこのドライバでは無視します。

【形式】

public synchronized void setNull(String parameterName,int sqlType) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

int sqlType：

JDBCのSQLデータ型

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定した？パラメタがOUTパラメタである場合

(bc)　setObject(String parameterName, Object x)

【機能】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setObject(String parameterName, Object x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

Object x：

？パラメタに設定する値を持つオブジェクト

【戻り値】

なし。

【機能詳細】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

parameterIndexで指定した?パラメタの型がHiRDBのCHAR，MCHAR，NCHAR，VARCHAR，MVARCHAR，又はNVARHARで，xがBooleanオブジェクトの場合，?パラメタへの設定値はxがtrueのときは"true"，falseのときは"false△"(△は半角スペース)となります。

xがbyte配列の場合，byte配列中の設定値を参照しません。executeXXX()メソッド実行時にbyte配列中の設定値を参照します。そのため，このメソッド実行からexecuteXXX()メソッド実行するまでの間にbyte配列中の設定値を変更した場合，変更後の設定値が？パラメタの値となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(bd)　setObject(String parameterName, Object x, int targetSqlType)

【機能】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setObject(String parameterName, Object x, int targetSqlType) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

Object x：

？パラメタに設定する値を持つオブジェクト

int targetSqlType：

JDBCのSQLデータ型

【戻り値】

なし。

【機能詳細】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

targetSqlTypeがjava.sql.Types.CHAR，java.sql.Types.VARCHAR，又はjava.sql.Types.LONGVARCHARで，xがBooleanオブジェクトの場合，?パラメタへの設定値はxがtrueのときは"1"，"0"になります。

なお，HiRDBデータ型であるNCHAR，NVARCHAR型の?パラメタへの設定値が"1"，"0"になる場合，SQLExceptionを投入します。

xがbyte配列の場合，byte配列中の設定値を参照しません。executeXXX()メソッド実行時にbyte配列中の設定値を参照します。そのため，このメソッド実行からexecuteXXX()メソッド実行するまでの間にbyte配列中の設定値を変更した場合，変更後の設定値が？パラメタの値となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

targetSqlTypeが次の場合

Types.ARRAY，Types.CLOB，Types.REF，Types.STRUCT

指定した？パラメタがOUTパラメタである場合

(be)　setObject(String parameterName, Object x, int targetSqlType, int scale)

【機能】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

【形式】

public synchronized void setObject(String parameterName, Object x, int targetSqlType, int scale) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

Object x：

？パラメタに設定する値を持つオブジェクト

int targetSqlType：

JDBCのSQLデータ型

int scale：

位取り（指定値は無視する）

【戻り値】

なし。

【機能詳細】

指定されたオブジェクトの持つ値を？パラメタ値に設定します。

targetSqlTypeがjava.sql.Types.CHAR，java.sql.Types.VARCHAR，又はjava.sql.Types.LONGVARCHARで，xがBooleanオブジェクトの場合，?パラメタへの設定値はxがtrueのときは"1"，"0"になります。

なお，HiRDBデータ型であるNCHAR，NVARCHAR型の?パラメタへの設定値が"1"，"0"になる場合，SQLExceptionを投入します。

xがbyte配列の場合，byte配列中の設定値を参照しません。executeXXX()メソッド実行時にbyte配列中の設定値を参照します。そのため，このメソッド実行からexecuteXXX()メソッド実行するまでの間にbyte配列中の設定値を変更した場合，変更後の設定値が？パラメタの値となります。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

targetSqlTypeが次の場合

Types.ARRAY，Types.CLOB，Types.REF，Types.STRUCT

指定した？パラメタがOUTパラメタである場合

(bf)　setShort(String parameterName, short x)

【機能】

指定されたshort値を？パラメタ値に設定します。

【形式】

public synchronized void setShort(String parameterName, short x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

short x：

？パラメタに設定する値

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(bg)　setString(String parameterName, String x)

【機能】

指定されたStringオブジェクトを？パラメタ値に設定します。

【形式】

public synchronized void setString(String parameterName, String x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

String x：

？パラメタに設定する値を持つStringオブジェクト

【戻り値】

なし。

【機能詳細】

引数xで指定されたStringオブジェクトを？パラメタに設定します。

引数xの指定値が0長文字列の場合の？パラメタ設定値を次の表に示します。

表17‒34　？パラメタの設定値

？パラメタのデータ型

？パラメタの設定値

[M｜N][VAR]CHAR

システムプロパティHiRDB_for_Java_DAB_CONVERT_NULLにTRUEを設定している場合

null

上記以外

0長文字列

BINARY，又はBLOB

0長文字列

その他

null

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

エンコード失敗

指定した？パラメタがOUTパラメタである場合

(bh)　setTime(String parameterName, Time x)

【機能】

指定されたjava.sql.Timeオブジェクトを？パラメタ値に設定します。

【形式】

public synchronized void setTime(String parameterName, Time x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.sql.Time x：

？パラメタに設定する値を持つjava.sql.Timeオブジェクト

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(bi)　setTime(String parameterName, java.sql.Time x,Calendar cal)

【機能】

ローカルタイムで指定されたjava.sql.Timeオブジェクトを指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

【形式】

public synchronized void setTime(String parameterName, java.sql.Time x,Calendar cal) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.sql.Time x：

？パラメタに設定する値を持つjava.sql.Timeオブジェクト

Calendar cal：

データベースに格納する値のタイムゾーンが設定されたカレンダー。nullが指定された場合，JavaVMのデフォルトのタイムゾーンのカレンダーが指定されたとします。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定した？パラメタがOUTパラメタである場合

(bj)　setTimestamp(String parameterName, java.sql.Timestamp x)

【機能】

指定されたjava.sql.Timestampオブジェクトを？パラメタ値に設定します。

【形式】

public synchronized void setTimestamp(String parameterName, java.sql.Timestamp x) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.sql.Timestamp x：

？パラメタに設定する値を持つjava.sql.Timestampオブジェクト

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(bk)　setTimestamp(String parameterName, java.sql.Timestamp x,Calendar cal)

【機能】

ローカルタイムで指定されたjava.sql.Timestampオブジェクトを指定されたカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

【形式】

public synchronized void setTimestamp(String parameterName, java.sql.Timestamp x,Calendar cal) throws SQLException

【引数】

String parameterName：

パラメタ名。パラメタ名の大文字と小文字は区別しません。parameterNameの文字列すべてを？パラメタ名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も？パラメタ名に含まれます。

java.sql.Timestamp x：

？パラメタに設定する値を持つjava.sql.Timestampオブジェクト

Calendar cal：

データベースに格納する値のタイムゾーンが設定されたカレンダー。nullが指定された場合，JavaVMのデフォルトのタイムゾーンのカレンダーが指定されたとします。

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対してclose()が既に発行されている場合

存在しないパラメタ名を指定した場合（parameterNameの指定値がnull又は0長文字列の場合も含む）

？パラメタのHiRDBデータ型がこのメソッドでは設定できないデータ型の場合

指定された値が列のデータ型の範囲外，又は変換できない形式の場合

指定した？パラメタがOUTパラメタである場合

(bl)　wasNull()

【機能】

最後に読み込まれたOUTパラメタ又はINOUTパラメタの値が，NULLかどうかを取得します。

【形式】

public synchronized boolean wasNull() throws SQLException

【引数】

なし。

【戻り値】

最後に読み込まれたパラメタがNULLの場合はtrue，そうでない場合はfalseを返します。

各条件での戻り値を次の表に示します。

表17‒35　各条件での戻り値

条件

戻り値

最後に読み込まれたパラメタがNULLの場合

true

最後に読み込まれたパラメタがNULL以外の場合

false

execute系メソッド実行前（OUTパラメタ用ResultSetがnull）の場合

false

一度も値の取得（getXXX）を行っていない場合

false

clearParameters実行後の場合

clearParameters実行前と同じ値

execute系メソッドの再実行後（OUTパラメタ用ResultSetのcloseをまたぐ）の場合

false

【発生する例外】

次の場合，SQLExceptionを投入します。

CallableStatementオブジェクトに対してclose()が既に発行されている場合

このCallableStatementオブジェクトを生成したConnectionオブジェクトに対して，close()が既に発行されている場合

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbCallableStatement

(4)　注意事項

(a)　ストアドプロシジャのOUTパラメタの属性

JDBC規格では，executeXXXメソッドを実行する前にregisterOutParameterメソッドを実行して，OUTパラメタ及びINOUTパラメタの属性を登録する必要があります。しかし，Type4 JDBCドライバでは，CALL文の前処理で取得したOUTパラメタ及びINOUTパラメタの属性を使用するため，registerOutParameterメソッドの実行は任意です。

registerOutParameterメソッドで設定した情報は，executeXXXメソッド実行時に有効となります。そのため，executeXXXメソッド実行後にregisterOutParameterメソッドで設定しても実行結果には影響しません。また，executeXXXメソッド実行後にclearParametersで設定情報をクリアしても実行結果には影響しません。

(b)　DECIMAL型使用時の注意事項

DECIMAL型のOUTパラメタ及びINOUTパラメタを設定する場合，小数点以下のけた数を受け入れない形式のregisterOutParameter(int parameterIndex, int sqlType)メソッドを使用したときは，けた数を0とみなします。

(c)　DECIMAL型の？パラメタに対する値指定

HiRDBのDECIMAL型の？パラメタに対してsetXXXメソッドで値を指定する場合，CALL文の前処理で取得した精度及び位取りと，値の精度及び位取りが一致していないときの動作を次に示します。

CALL文の前処理で取得した精度よりも大きい場合：SQLExceptionを投入します。

CALL文の前処理で取得した精度よりも小さい場合：拡張します。

CALL文の前処理で取得した位取りよりも大きい場合：CALL文の前処理で取得した位取りで切り捨てます。

CALL文の前処理で取得した位取りよりも小さい場合：0で補完し拡張します。

(d)　1コネクション当たりのステートメントオブジェクト数の上限

1つのConnectionオブジェクトに対し，使用中のステートメントオブジェクト（Statement，PreparedStatement，及びCallableStatement)の数の合計が4096以上となった場合，SQLExceptionを投入します。詳細は「Statementインタフェース」の「注意事項」を参照してください。

17.4.6　ResultSetインタフェース

(1)　概要

ResultSetインタフェースでは，主に次の機能が提供されます。

行単位の結果セット内の移動

結果データの返却

検索結果データがナル値かどうかの通知

(2)　メソッド

ResultSetインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒36　ResultSetインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

absolute(int row)

○

○

カーソルを，このResultSetオブジェクト内の指定された行に移動します。

afterLast()

○

○

カーソルを，このResultSetオブジェクトの最終行の後ろに移動します。

beforeFirst()

○

○

カーソルを，このResultSetオブジェクトの先頭行の前に移動します。

clearWarnings()

○

○

このResultSetオブジェクトに関して報告された，すべての警告をクリアします。

close()

○

○

このResultSetオブジェクトでオープンしていたデータベースのカーソルをクローズし，JDBCリソースを解放します。

findColumn(String columnName)

○

○

指定された列名を列番号にマッピングします。

first()

○

○

カーソルを，このResultSetオブジェクト内の先頭行に移動します。

getArray(int i)

○

○

このResultSetオブジェクトの現在行にある，指定された列番号の繰返し列の要素を，Arrayオブジェクトとして取得します。

getArray(String colName)

○

○

ResultSetオブジェクトの現在行にある，指定された列名の繰返し列の要素を，Arrayオブジェクトとして取得します。

getAsciiStream(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，PrdbDataStreamオブジェクトとして取得します。

getAsciiStream(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，PrdbDataStreamオブジェクトとして取得します。

getBigDecimal(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.math.BigDecimalオブジェクトとして取得します。

getBigDecimal(int columnIndex, int scale)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，scaleで指定された小数点以下のけた数を持つjava.math.BigDecimalオブジェクトとして取得します。

getBigDecimal(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.math.BigDecimalオブジェクトとして取得します。

getBigDecimal(String columnName, int scale)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，scaleで指定された小数点以下のけた数を持つjava.math.BigDecimalオブジェクトとして取得します。

getBinaryStream(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある，列番号で指定された列の値を，バイナリストリームとして取得します。

getBinaryStream(String columnName)

○

○

このResultSetオブジェクトの現在行にある，指定された列の値を，バイナリストリームとして取得します。

getBlob(int i)

○

○

このResultSetオブジェクトの現在行にある，列番号で指定された列の値を，java.sql.Blobオブジェクトとして取得します。

getBlob(String colName)

○

○

このResultSetオブジェクトの現在行にある，指定された列の値を，java.sql.Blobオブジェクトとして取得します。

getBoolean(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbooleanとして取得します。

getBoolean(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbooleanとして取得します。

getByte(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyteとして取得します。

getByte(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyteとして取得します。

getBytes(int columnIndex)

○

○

ResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyte配列として取得します。

getBytes(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyte配列として取得します。

getCharacterStream(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.io.Readerオブジェクトとして取得します。

getCharacterStream(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.io.Readerオブジェクトとして取得します。

getConcurrency()

○

○

このResultSetオブジェクトの並行処理モードを返します。

getCursorName()

○

○

このResultSetオブジェクトが使用するSQLカーソルの名前を取得します。

getDate(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Dateオブジェクトとして取得します。

getDate(int columnIndex, Calendar cal)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Dateオブジェクトとして取得します。

getDate(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Dateオブジェクトとして取得します。

getDate(String columnName, Calendar cal)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Dateオブジェクトとして取得します。

getDouble(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のdoubleとして取得します。

getDouble(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のdoubleとして取得します。

getFetchDirection()

○

○

このResultSetオブジェクトのフェッチ方向を取得します。

getFetchSize()

○

○

このResultSetオブジェクトのフェッチサイズを取得します。

getFloat(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のfloatとして取得します。

getFloat(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のfloatとして取得します。

getInt(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のintとして取得します。

getInt(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のintとして取得します。

getLong(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のlongとして取得します。

getLong(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のlongとして取得します。

getMetaData()

○

○

このResultSetオブジェクトのメタ情報を表すResultSetMetaDataを返します。

getObject(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のObjectとして取得します。

getObject(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のObjectとして取得します。

getRow()

○

○

現在の行の番号を取得します。

getShort(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のshortとして取得します。

getShort(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のshortとして取得します。

getStatement()

○

○

このResultSetオブジェクトを生成したStatementオブジェクトを取得します。

getString(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のStringとして取得します。

getString(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のStringとして取得します。

getTime(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timeとして取得します。

getTime(int columnIndex, Calendar cal)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timeオブジェクトとして取得します。

getTime(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timeオブジェクトとして取得します。

getTime(String columnName, Calendar cal)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timeオブジェクトとして取得します。

getTimestamp(int columnIndex)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timestampオブジェクトとして取得します。

getTimestamp(int columnIndex, Calendar cal)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timestampオブジェクトとして取得します。

getTimestamp(String columnName)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timestampオブジェクトとして取得します。

getTimestamp(String columnName, Calendar cal)

○

○

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timestampオブジェクトとして取得します。

getType()

○

○

このResultSetオブジェクトの型を返します。

getWarnings()

○

○

このResultSetオブジェクトに関する呼び出しによって報告される，最初の警告を取得します。

isAfterLast()

○

○

カーソルが，このResultSetオブジェクト内の最終行の後ろにあるかどうかを取得します。

isBeforeFirst()

○

○

カーソルが，このResultSetオブジェクト内の先頭行の前にあるかどうかを取得します。

isFirst()

○

○

カーソルが，このResultSetオブジェクト内の先頭行にあるかどうかを取得します。

isLast()

○

○

カーソルが，このResultSetオブジェクトの最終行にあるかどうかを取得します。

last()

○

○

カーソルを，このResultSetオブジェクトの最終行に移動します。

next()

○

○

カーソルを，現在の位置から次の行に移動します。

previous()

○

○

カーソルを，このResultSetオブジェクト内の一つ前の行に移動します。

relative(int rows)

○

○

カーソルを，正又は負の相対行数だけ移動します。

setFetchDirection(int direction)

○

○

このStatementオブジェクトから生成される結果集合の，デフォルトのフェッチ方向を指定します。

setFetchSize(int rows)

○

○

このResultSetオブジェクトのフェッチサイズを設定します。

wasNull()

○

○

最後に取得した列の値が，NULL値であるかどうかを通知します。

getHoldability()

×

○

ResultSetオブジェクトの保持機能についての状態を示す値を取得します。

isClosed()

×

○

ResultSetオブジェクトがクローズされているかどうかの情報を取得します。

（凡例）

○：提供されます。

×：提供されません。

(a)　absolute(int row)

【機能】

カーソルを，このResultSetオブジェクト内の指定された行に移動します。

【形式】

public synchronized boolean absolute(int row) throws SQLException

【引数】

int row：

カーソルの移動先の行番号。正の番号は行番号が結果セットの先頭からカウントされることを示し，負の番号は終端からカウントされることを示します。

【戻り値】

このメソッド呼び出し後のカーソル位置が，先頭行の前又は最終行の後ろの場合はfalse，そうでない場合はtrueを返します。

【機能詳細】

カーソルを，このResultSetオブジェクト内の指定された行に移動します。

このメソッド呼び出し後のカーソル移動位置と戻り値を次の表に示します。

表17‒37　absoluteの移動先と戻り値

結果集合の行数※

rowの指定値

移動先

戻り値

0

0以外

先頭行の前のまま

false

n

n＜row

最終行の後ろ

false

1≦row≦n

row

true

-n≦row≦-1

(n+1)＋row

true

row＜-n

先頭行の前

false

注※

setMaxRowsの値より実際の行数の方が多い場合は，setMaxRowsの値です。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

このResultSetオブジェクトの型がTYPE_FORWARD_ONLYの場合

row=0が指定された場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(b)　afterLast()

【機能】

カーソルを，このResultSetオブジェクトの最終行の後ろに移動します。

【形式】

public synchronized void afterLast() throws SQLException

【引数】

なし。

【戻り値】

なし。

【機能詳細】

カーソルを，このResultSetオブジェクトの最終行の後ろに移動します。

このメソッド呼び出し時のカーソル位置移動先を次の表に示します。

表17‒38　afterLastの移動先

結果集合の行数※

現在の行

afterLast()呼び出し後の行

0

先頭行の前

先頭行の前のまま

n

先頭行の前

最終行の後ろ

1≦現在の行≦n

最終行の後ろ

最終行の後ろ

最終行の後ろのまま

注※

setMaxRowsの値より実際の行数の方が多い場合は，setMaxRowsの値です。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

このResultSetオブジェクトの型がTYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(c)　beforeFirst()

【機能】

カーソルを，このResultSetオブジェクトの先頭行の前に移動します。

【形式】

public synchronized void beforeFirst() throws SQLException

【引数】

なし。

【戻り値】

なし。

【機能詳細】

カーソルを，このResultSetオブジェクトの先頭行の前に移動します。

このメソッド呼び出し時のカーソル位置移動先を次の表に示します。

表17‒39　beforeFirstの移動先

結果集合の行数※

現在の行

beforeFirst()呼び出し後の行

0

先頭行の前

先頭行の前のまま

n

先頭行の前

先頭行の前のまま

1≦現在の行≦n

先頭行の前

最終行の後ろ

先頭行の前

注※

setMaxRowsの値より実際の行数の方が多い場合は，setMaxRowsの値です。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

このResultSetオブジェクトの型がTYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(d)　clearWarnings()

【機能】

このResultSetオブジェクトに関して報告された，すべての警告をクリアします。

【形式】

public synchronized void clearWarnings() throws SQLException

【引数】

なし。

【戻り値】

なし。

【発生する例外】

トランザクションの決着によってResultSetが無効になった場合，SQLExceptionを投入します。

(e)　close()

【機能】

このResultSetオブジェクトでオープンしていたデータベースのカーソルをクローズし，JDBCリソースを解放します。

【形式】

public synchronized void close() throws SQLException

【引数】

なし。

【戻り値】

なし。

【発生する例外】

データベースアクセスでエラーが発生した場合，SQLExceptionを投入します。

(f)　findColumn(String columnName)

【機能】

指定された列名を列番号にマッピングします。

【形式】

public synchronized int findColumn(String columnName) throws SQLException

【引数】

String columnName：

列名。大文字と小文字は区別しません。columnNameの文字列すべてを列名として扱うため，文字列に引用符「"」が含まれている場合，引用符「"」も列名に含まれます。columnNameの指定値がnull，又は0長文字列の場合，必ず列が存在しないエラーとなります。

columnNameの値と一致する列が複数ある場合，列番号が小さい方が優先されます。また，列名が長いためHiRDBサーバの仕様によって後ろが切り捨てられる場合，切り捨てられた列名が指定されていれば，一致しているとみなします。

【戻り値】

指定された列名に対応する列番号

【機能詳細】

引数columnNameを列名とし，対応する列番号を取得して返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

指定された列がない場合

データベースアクセスでエラーが発生した場合

(g)　first()

【機能】

カーソルを，このResultSetオブジェクト内の先頭行に移動します。

【形式】

public synchronized boolean first() throws SQLException

【引数】

なし。

【戻り値】

結果集合の行数が0の場合はfalse，そうでない場合はtrueを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

このResultSetオブジェクトの型がTYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(h)　getArray(int i)

【機能】

このResultSetオブジェクトの現在行にある，指定された列番号の繰返し列の要素を，Arrayオブジェクトとして取得します。

【形式】

public Array getArray(int i) throws SQLException

【引数】

int i：

列番号

【戻り値】

指定された列に対応するArrayオブジェクトを返します。繰返し列の列全体がnull値の場合，nullを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementオブジェクトをcloseしたことによって，このドライバがResultSetオブジェクトをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionオブジェクトがcloseされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

引数iに存在しない列番号が指定されている場合

引数iに指定された列番号が示す列が繰返し列ではない場合

JDBCドライバ内でエラーが発生した場合

(i)　getArray(String colName)

【機能】

ResultSetオブジェクトの現在行にある，指定された列名の繰返し列の要素を，Arrayオブジェクトとして取得します。

【形式】

public Array getArray(String colName) throws SQLException

【引数】

String colName：

列名

【戻り値】

指定された列名に対応するArrayオブジェクト（繰返し列の列全体がnull値の場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementオブジェクトをcloseしたことによって，このドライバがResultSetオブジェクトをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionオブジェクトがcloseされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

引数colNameに指定した列が存在しない，又はnullである場合

JDBCドライバ内でエラー発生した場合

(j)　getAsciiStream(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，PrdbDataStreamオブジェクトとして取得します。

【形式】

public synchronized InputStream getAsciiStream (int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値を設定したPrdbDataStreamオブジェクト（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，PrdbDataStreamオブジェクトとして取得します。ASCII文字への変換は行いません。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

BINARY

BLOB

NULL

null

上記以外

検索結果を格納したInputStreamオブジェクト

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(k)　getAsciiStream(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，PrdbDataStreamオブジェクトとして取得します。ASCII文字への変換は行いません。

HiRDBのデータ型による検索結果と戻り値の関係については，「getAsciiStream(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized InputStream getAsciiStream (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値を設定したPrdbDataStreamオブジェクト（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(l)　getBigDecimal(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.math.BigDecimalオブジェクトとして取得します。

【形式】

public synchronized BigDecimal getBigDecimal (int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

指定された列番号に対応する列値（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，java.math.BigDecimalオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

null

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]

検索結果を持つBigDecimalオブジェクト。

文字列の前後の半角空白を取り除いた値をBigDecimalオブジェクトにします。

上記以外

SQLExceptionを投入

SMALLINT

NULL

null

上記以外

検索結果を持つBigDecimalオブジェクト。

INTEGER

NULL

null

上記以外

検索結果を持つBigDecimalオブジェクト。

REAL

NULL

null

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

上記以外

検索結果を持つBigDecimalオブジェクト。

FLOAT

NULL

null

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

上記以外

検索結果を持つBigDecimalオブジェクト。

DECIMAL

NULL

null

上記以外

検索結果を持つBigDecimalオブジェクト。

BOOLEAN※

NULL

null

true

BigDecimal(1)でBigDecimalオブジェクトにしたもの。

false

BigDecimal(0)でBigDecimalオブジェクトにしたもの。

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がBigDecimalとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(m)　getBigDecimal(int columnIndex, int scale)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，scaleで指定された小数点以下のけた数を持つjava.math.BigDecimalオブジェクトとして取得します。

【形式】

public synchronized BigDecimal getBigDecimal(int columnIndex,int scale) throws SQLException

【引数】

int columnIndex：

列番号

int scale：

位取り

【戻り値】

指定された列番号に対応する列値の小数点以下のけた数を引数scaleにした値（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，scaleで指定された小数点以下のけた数を持つjava.math.BigDecimalオブジェクトとして取得します。

列値の小数点以下のけた数より引数scaleが小さい場合，scaleで切り捨てます。scaleの方が大きい場合0で補完します。

検索結果の小数点以下のけた数より引数scaleの値が小さい場合，検索結果の小数点以下のけた数をscaleで切り捨てます。検索結果の小数点以下のけた数より引数scaleの値が大きい場合，検索結果の小数点以下のけた数をscaleまで0で補完します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getBigDecimal(int columnIndex)」の【機能詳細】を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がBigDecimalとして取得できない場合

scaleに0未満を指定した場合

JDBCドライバ内でエラーが発生した場合

(n)　getBigDecimal(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.math.BigDecimalオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getBigDecimal(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized BigDecimal getBigDecimal (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

指定された列名に対応する列値（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がBigDecimalとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(o)　getBigDecimal(String columnName, int scale)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，scaleで指定された小数点以下のけた数を持つjava.math.BigDecimalオブジェクトとして取得します。

【形式】

public synchronized BigDecimal getBigDecimal(String columnName,int scale) throws SQLException

【引数】

String columnName：

列名

int scale：

位取り

【戻り値】

指定された列名に対応する列値の小数点以下のけた数を引数scaleにした値（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，scaleで指定された小数点以下のけた数を持つjava.math.BigDecimalオブジェクトとして取得します。

検索結果の小数点以下のけた数より引数scaleの値が小さい場合，検索結果の小数点以下のけた数をscaleで切り捨てます。検索結果の小数点以下のけた数より引数scaleの値が大きい場合，検索結果の小数点以下のけた数をscaleまで0で補完します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getBigDecimal(int columnIndex)」の【機能詳細】を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がBigDecimalとして取得できない場合

scaleに0未満を指定した場合

JDBCドライバ内でエラーが発生した場合

(p)　getBinaryStream(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある，列番号で指定された列の値を，バイナリストリームとして取得します。

【形式】

public synchronized InputStream getBinaryStream(int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値を未解釈のバイトストリームとして送るJava入力ストリーム（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある，列番号で指定された列の値を，バイナリストリームとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

BINARYBLOB

NULL

null

上記以外

検索結果を格納したInputStreamオブジェクト

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(q)　getBinaryStream(String columnName)

【機能】

このResultSetオブジェクトの現在行にある，指定された列の値を，バイナリストリームとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getBinaryStream(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized InputStream getBinaryStream (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値を未解釈のバイトストリームとして送るJava入力ストリーム（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(r)　getBlob(int i)

【機能】

このResultSetオブジェクトの現在行にある，列番号で指定された列の値を，java.sql.Blobオブジェクトとして取得します。

【形式】

public synchronized Blob getBlob(int i) throws SQLException

【引数】

int i：

列番号

【戻り値】

指定された列の値を表すBlobオブジェクト（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある，列番号で指定された列の値を，java.sql.Blobオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

BINARYBLOB

NULL

null

上記以外

検索結果を持つjava.sql.Blobオブジェクト

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(s)　getBlob(String colName)

【機能】

このResultSetオブジェクトの現在行にある，指定された列の値を，java.sql.Blobオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getBlob(int i)」の【機能詳細】を参照してください。

【形式】

public synchronized Blob getBlob(String colName) throws SQLException

【引数】

String colName：

列名

【戻り値】

指定された列の値を表すBlobオブジェクト（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(t)　getBoolean(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbooleanとして取得します。

【形式】

public synchronized boolean getBoolean(int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

true又はfalse（値がNULL値の場合はfalseが返されます）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbooleanとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M][VAR]CHAR

NVARCHAR

NULL

false

[半角空白]半角true（大文字と小文字は区別しない）[半角空白]

true

[半角空白]半角1[半角空白]

true

上記以外

false

NCHAR

NULL

false

先頭が[半角空白]半角true（大文字と小文字は区別しない）

true

上記以外

false

SMALLINT

NULL

false

0

false

0以外

true

INTEGER

NULL

false

0

false

0以外

true

REAL

NULL

false

Infinity

true

-Inifnity

true

NaN

true

0.0又は-0.0

false

上記以外

true

FLOAT

NULL

false

Infinity

true

-Inifnity

true

NaN

true

0.0又は-0.0

false

上記以外

true

DECIMAL

NULL

false

0[.00…0]

false

上記以外

true

BOOLEAN※

NULL

false

NULL以外

検索結果

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(u)　getBoolean(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbooleanとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getBoolean(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized boolean getBoolean(String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

true又はfalse（値がNULL値の場合はfalseが返されます）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(v)　getByte(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyteとして取得します。

【形式】

public synchronized byte getByte(int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合は0を返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyteとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

0

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]であり，かつByte.MIN_VALUE以上，Byte.MAX_VALUE以下

検索結果をbyte値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]であり，かつByte.MAX_VALUEより大きいかByte.MIN_VALUEより小さい

SQLExceptionを投入

[半角空白][+]Infinity[半角空白]

SQLExceptionを投入

[半角空白]-Infinity[半角空白]

SQLExceptionを投入

[半角空白][+｜-]NaN[半角空白]

SQLExceptionを投入

上記以外（double値にできない）

SQLExceptionを投入

SMALLINT

NULL

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

検索結果をbyte値にしたもの

上記以外

SQLExceptionを投入

INTEGER

NULL

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

検索結果をbyte値にしたもの

上記以外

SQLExceptionを投入

REAL

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

検索結果の整数部分の値をbyte値にしたもの

上記以外

SQLExceptionを投入

FLOAT

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

検索結果の整数部分の値をbyte値にしたもの

上記以外

SQLExceptionを投入

DECIMAL

NULL

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

検索結果の整数部分の値をbyte値にしたもの

上記以外

SQLExceptionを投入

BOOLEAN※

NULL

0

true

1

false

0

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がbyteとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(w)　getByte(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyteとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getByte(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized byte getByte(String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合は0を返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がbyteとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(x)　getBytes(int columnIndex)

【機能】

ResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyte配列として取得します。

【形式】

public synchronized byte[] getBytes(int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合はnullを返します）

【機能詳細】

ResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyte配列として取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

BINARY

BLOB

NULL

null

上記以外

検索結果をbyte配列にしたもの

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(y)　getBytes(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のbyte配列として取得します。バイトはドライバによって返された行の値を表します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getBytes(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized byte[] getBytes (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(z)　getCharacterStream(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.io.Readerオブジェクトとして取得します。

【形式】

public synchronized Reader getCharacterStream (int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値を格納するjava.io.Readerオブジェクト（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，java.io.Readerオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

BINARY

BLOB

NULL

null

上記以外

検索結果を格納したReaderオブジェクト

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

エンコードに失敗した場合

JDBCドライバ内でエラーが発生した場合

(aa)　getCharacterStream(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.io.Readerオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getCharacterStream(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized Reader getCharacterStream (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値を格納するjava.io.Readerオブジェクト（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

エンコードに失敗した場合

JDBCドライバ内でエラーが発生した場合

(ab)　getConcurrency()

【機能】

このResultSetオブジェクトの並行処理モードを返します。更新カーソルは未サポートのため，必ずResultSet.CONCUR_READ_ONLYを返します。

【形式】

public synchronized int getConcurrency() throws SQLException

【引数】

なし。

【戻り値】

ResultSet.CONCUR_READ_ONLY：

列の値を更新できません。

ResultSet.CONCUR_UPDATABLE：

列の値を更新できます。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

(ac)　getCursorName()

【機能】

このResultSetオブジェクトが使用するSQLカーソルの名前を取得します。

HiRDBでは常にnullを返します。

【形式】

public synchronized String getCursorName() throws SQLException

【引数】

なし。

【戻り値】

null

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

(ad)　getDate(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Dateオブジェクトとして取得します。

【形式】

public synchronized java.sql.Date getDate(int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Dateオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

null

[半角空白]日付形式[半角空白]

検索結果の前後の半角空白を取り除きjava.sql.Dateオブジェクトにしたもの

上記以外

SQLExceptionを投入

DATE

NULL

null

上記以外

検索結果をjava.sql.Dateオブジェクトにしたもの

TIMESTAMP

NULL

null

上記以外

検索結果をjava.sql.Dateオブジェクトにしたもの

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Dateとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(ae)　getDate(int columnIndex, Calendar cal)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Dateオブジェクトとして取得します。このメソッドは指定されたカレンダーを使って日付に適切なミリ秒値を作成します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getDate(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException

【引数】

int columnIndex：

列番号

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

列値（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Dateとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(af)　getDate(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Dateオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getDate(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Date getDate (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Dateとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(ag)　getDate(String columnName, Calendar cal)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Dateオブジェクトとして取得します。このメソッドは指定されたカレンダーを使って日付に適切なミリ秒値を作成します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getDate(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Date getDate(String columnName, Calendar cal) throws SQLException

【引数】

String columnName：

列名

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

列値（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Dateとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(ah)　getDouble(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のdoubleとして取得します。

【形式】

public synchronized double getDouble (int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のdoubleとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

0.0

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]であり，かつ-Double.MAX_VALUE以上，かつDouble.MIN_VALUE以下，かつDouble.MIN_VALUE以上かつDouble.MAX_VALUE以下

検索結果をdouble値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]かつDouble.MAX_VALUEより大きい

Infinity

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]かつ-Double.MAX_VALUEより小さい

-Infinity

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]かつDouble.MIN_VALUEより小さく0より大きい

0.0

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]かつ-Double.MIN_VALUEより大きく0より小さい

-0.0

[半角空白]-Infinity[半角空白]

-Infinity

[半角空白][+]Infinity[半角空白]

Infinity

[半角空白][+｜-]NaN[半角空白]

NaN

上記以外（double値にできない）

SQLExceptionを投入

SMALLINT

NULL

0.0

上記以外

検索結果をdouble値にしたもの

INTEGER

NULL

0

上記以外

検索結果をdouble値にしたもの

REAL

NULL

0.0

Infinity

Infinity

-Infinity

-Infinity

NaN

NaN

上記以外

検索結果をdouble値にしたもの

FLOAT

NULL

0.0

Infinity

Infinity

-Infinity

-Infinity

NaN

NaN

上記以外

検索結果をdouble値にしたもの

DECIMAL

NULL

0

上記以外

検索結果をdouble値にしたもの

BOOLEAN※

NULL

0.0

true

1.0

false

0.0

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がdoubleとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(ai)　getDouble(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のdoubleとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getDouble(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized double getDouble (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がdoubleとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(aj)　getFetchDirection()

【機能】

このResultSetオブジェクトのフェッチ方向を取得します。HiRDBでは常にResultSet.FETCH_FORWARDを返します。

【形式】

public synchronized int getFetchDirection() throws SQLException

【引数】

なし。

【戻り値】

ResultSet.FETCH_FORWARD：

結果集合が順方向に処理されます。

ResultSet.FETCH_REVERSE：

結果集合が逆方向に処理されます。

ResultSet.FETCH_UNKNOWN：

結果集合が処理される方向が不明です。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

(ak)　getFetchSize()

【機能】

このResultSetオブジェクトのフェッチサイズを取得します。

setFetchSizeで設定した値を返します。

setFetchSizeで設定していない場合は0を返します。

【形式】

public synchronized int getFetchSize() throws SQLException

【引数】

なし。

【戻り値】

このResultSetオブジェクトの現在のフェッチサイズ

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

(al)　getFloat(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のfloatとして取得します。

【形式】

public synchronized float getFloat (int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のfloatとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

0.0

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]であり，かつ次のどちらか

-Float.MAX_VALUE以上-Float.MIN_VALUE以下

Float.MIN_VALUE以上Float.MAX_VALUE以下

検索結果をfloat値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]かつFloat.MAX_VALUEより大きい

Infinity

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]かつ-Float.MAX_VALUEより小さい

-Infinity

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]かつFloat.MIN_VALUEより小さく0より大きい

0.0

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]かつ-Float.MIN_VALUEより大きく0より小さい

-0.0

[半角空白]-Infinity[半角空白]

-Infinity

[半角空白][+]Infinity[半角空白]

Infinity

[半角空白][+｜-]NaN[半角空白]

NaN

上記以外（float値にできない）

SQLExceptionを投入

SMALLINT

NULL

0.0

上記以外

検索結果をfloat値にしたもの

INTEGER

NULL

0.0

上記以外

検索結果をfloat値にしたもの

REAL

NULL

0.0

Infinity

Infinity

-Infinity

-Infinity

NaN

NaN

上記以外

検索結果

FLOAT

NULL

0.0

Infinity

Infinity

-Infinity

-Infinity

NaN

NaN

-Float.MAX_VALUE以上-Float.MIN_VALUE以下，又はFloat.MIN_VALUE以上Float.MAX_VALUE以下

検索結果をfloat値にしたもの

Float.MAX_VALUEより大きい

Infinity

-Float.MAX_VALUEより小さい

-Infinity

Float.MIN_VALUEより小さく0より大きい

0.0

-Float.MIN_VALUEより大きく0より小さい

-0.0

DECIMAL

NULL

0.0

上記以外

検索結果をfloat値にしたもの

BOOLEAN※

NULL

0.0

true

1.0

false

0.0

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がfloatとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(am)　getFloat(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のfloatとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getFloat(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized float getFloat (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がfloatとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(an)　getInt(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のintとして取得します。

【形式】

public synchronized int getInt(int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のintとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

0

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]であり，かつInteger.MIN_VALUE以上，Integer.MAX_VALUE以下

検索結果の整数部分の値をint値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]であり，かつInteger.MAX_VALUEより大きいかInteger.MIN_VALUEより小さい

SQLExceptionを投入

[半角空白]-Infinity[半角空白]

SQLExceptionを投入

[半角空白][+]Infinity[半角空白]

SQLExceptionを投入

[半角空白][+｜-]NaN[半角空白]

SQLExceptionを投入

上記以外（double値にできない）

SQLExceptionを投入

SMALLINT

NULL

0

上記以外

検索結果をint値にしたもの

INTEGER

NULL

0

上記以外

検索結果をint値にしたもの

REAL

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Integer.MIN_VALUE以上かつ，Integer.MAX_VALUE以下

検索結果の整数部分の値をint値にしたもの

上記以外

SQLExceptionを投入

FLOAT

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Integer.MIN_VALUE以上かつ，Integer.MAX_VALUE以下

検索結果の整数部分の値をint値にしたもの

上記以外

SQLExceptionを投入

DECIMAL

NULL

0

Integer.MIN_VALUE以上かつInteger.MAX_VALUE以下

検索結果の整数部分の値をint値にしたもの

上記以外

SQLExceptionを投入

BOOLEAN※

NULL

0

true

1

false

0

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がintとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(ao)　getInt(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のintとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getInt(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized int getInt(String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がintとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(ap)　getLong(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のlongとして取得します。

【形式】

public synchronized long getLong (int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合はnullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のlongとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

0

[半角空白]整数の文字列表現，又は10進数の文字列表現かつ15文字以内[半角空白]

検索結果の整数部分の値をlong値にしたもの

[半角空白]整数の文字列表現，又は10進数の文字列表現であり，16文字以上，又は浮動小数点の文字列表現[半角空白]であり，かつLong.MIN_VALUE以上，Long.MAX_VALUE以下

検索結果の整数部分の値をlong値にしたもの

[半角空白]整数の文字列表現，又は10進数の文字列表現であり16文字以上，又は浮動小数点の文字列表現[半角空白]であり，かつLong.MAX_VALUEより大きいかLong.MIN_VALUEより小さい

SQLExceptionを投入

[半角空白]-Infinity[半角空白]

SQLExceptionを投入

[半角空白][+]Infinity[半角空白]

SQLExceptionを投入

[半角空白][+｜-]NaN[半角空白]

SQLExceptionを投入

上記以外（double値，又はBigDecimalオブジェクトにできない）

SQLExceptionを投入

SMALLINT

NULL

0

上記以外

検索結果をlong値にしたもの

INTEGER

NULL

0

上記以外

検索結果をlong値にしたもの

REAL

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Long.MIN_VALUE以上かつ，Long.MAX_VALUE以下

検索結果の整数部分の値をlong値にしたもの

上記以外

SQLExceptionを投入

FLOAT

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Long.MIN_VALUE以上かつ，Long.MAX_VALUE以下

検索結果の整数部分の値をlong値にしたもの

上記以外

SQLExceptionを投入

DECIMAL

NULL

0

Long.MIN_VALUE以上かつLong.MAX_VALUE以下

検索結果の整数部分の値をlong値にしたもの

BINARYBLOB

NULL

0

0長データ

0

1バイト以上

最大8バイトまでをリトルエンディアン形式でlong値にしたもの

BOOLEAN※

NULL

0

true

1

false

0

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がlongとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(aq)　getLong(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のlongとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getLong(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized long getLong (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がlongとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(ar)　getMetaData()

【機能】

このResultSetオブジェクトのメタ情報を表すResultSetMetaDataを返します。

【形式】

public synchronized ResultSetMetaData getMetaData() throws SQLException

【引数】

なし。

【戻り値】

このResultSetオブジェクトのメタ情報を，ResultSetMetaDataオブジェクトで返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

(as)　getObject(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のObjectとして取得します。

【形式】

public synchronized Object getObject (int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列の値をJavaオブジェクトとして返します。

Javaオブジェクトの型は，JDBC仕様で指定されている組み込み型のマッピングに従って，列のSQL型に対応するデフォルトのJavaオブジェクトの型になります。値がNULL値の場合，nullを返します。

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のObjectとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

null

上記以外

検索結果

SMALLINT

NULL

null

上記以外

検索結果で生成したIntegerオブジェクト

INTEGER

NULL

null

上記以外

検索結果で生成したIntegerオブジェクト

REAL

NULL

null

上記以外

検索結果で生成したFloatオブジェクト

FLOAT

NULL

null

上記以外

検索結果で生成したDoubleオブジェクト

DECIMAL

NULL

null

上記以外

検索結果

DATE

NULL

null

上記以外

検索結果で生成したjava.sql.Dateオブジェクト

TIME

NULL

null

上記以外

検索結果で生成したjava.sql.Timeオブジェクト

TIMESTAMP

NULL

null

上記以外

検索結果で生成したjava.sql.Timestampオブジェクト

BINARYBLOB

NULL

null

上記以外

検索結果

BOOLEAN※

NULL

null

NULL以外

検索結果で生成したBooleanオブジェクト

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

JDBCドライバ内でエラーが発生した場合

(at)　getObject(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のObjectとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getObject(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized Object getObject (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列の値をJavaオブジェクトとして返します。

Javaオブジェクトの型は，JDBC仕様で指定されている組み込み型のマッピングに従って，列のSQL型に対応するデフォルトのJavaオブジェクトの型になります。値がNULL値の場合，nullを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

JDBCドライバ内でエラーが発生した場合

(au)　getRow()

【機能】

現在の行の番号を取得します。最初の行が1，2番目は2となります。先頭行の前又は最終行の後ろの場合は0となります。

最大検索行数が2147483647を超える場合，2147483647を返します。

【形式】

public synchronized int getRow() throws SQLException

【引数】

なし。

【戻り値】

現在の行番号（現在の行がInteger.MAX_VALUEより大きい場合はInteger.MAX_VALUEを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(av)　getShort(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のshortとして取得します。

【形式】

public synchronized short getShort(int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合は0を返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のshortとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

0

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]であり，かつShort.MIN_VALUE以上，Short.MAX_VALUE以下

検索結果の整数部分の値をshort値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現，又は浮動小数点数の文字列表現[半角空白]であり，かつShort.MAX_VALUEより大きいかShort.MIN_VALUEより小さい

SQLExceptionを投入

[半角空白]-Infinity[半角空白]

SQLExceptionを投入

[半角空白][+]Infinity[半角空白]

SQLExceptionを投入

[半角空白][+｜-]NaN[半角空白]

SQLExceptionを投入

上記以外（double値にできない）

SQLExceptionを投入

SMALLINT

NULL

0

上記以外

検索結果

INTEGER

NULL

0

Short.MIN_VALUE以上かつ，Short.MAX_VALUE以下

検索結果をshort値にしたもの

上記以外

SQLExceptionを投入

REAL

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Short.MIN_VALUE以上かつ，Short.MAX_VALUE以下

検索結果の整数部分の値をshort値にしたもの

上記以外

SQLExceptionを投入

FLOAT

NULL

0

Infinity

SQLExceptionを投入

-Infinity

SQLExceptionを投入

NaN

SQLExceptionを投入

Short.MIN_VALUE以上かつ，Short.MAX_VALUE以下

検索結果の整数部分の値をshort値にしたもの

上記以外

SQLExceptionを投入

DECIMAL

NULL

0

Short.MIN_VALUE以上かつShort.MAX_VALUE以下

検索結果の整数部分の値をshort値にしたもの

上記以外

SQLExceptionを投入

BOOLEAN※

NULL

0

true

1

false

0

その他

−

SQLExceptionを投入

（凡例）　−：該当しません。

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がshortとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(aw)　getShort(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のshortとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getShort(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized short getShort (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合は0を返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がshortとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(ax)　getStatement()

【機能】

このResultSetオブジェクトを生成したStatementオブジェクトを取得します。

結果集合がDatabaseMetaDataのメソッドで生成された場合は，nullを返します。

【形式】

public synchronized Statement getStatement() throws SQLException

【引数】

なし。

【戻り値】

このResultSetオブジェクトを生成したStatmentオブジェクト（結果集合がDatabaseMetaDataのメソッドで生成された場合は，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になる場合

(ay)　getString(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のStringとして取得します。

【形式】

public synchronized String getString(int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合，nullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のStringとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

null

上記以外

検索結果

SMALLINT

NULL

null

上記以外

検索結果を文字列表現にしたStringオブジェクト

INTEGER

NULL

null

上記以外

検索結果を文字列表現にしたStringオブジェクト

REAL

NULL

null

Infinity

文字列"Infinity"のStringオブジェクト

-Infinity

文字列"-Infinity"のStringオブジェクト

NaN

文字列"NaN"のStringオブジェクト

上記以外

検索結果を文字列表現にしたStringオブジェクト

FLOAT

NULL

null

Infinity

文字列"Infinity"のStringオブジェクト

-Infinity

文字列"-Infinity"のStringオブジェクト

NaN

文字列"NaN"のStringオブジェクト

上記以外

検索結果を文字列表現にしたStringオブジェクト

DECIMAL

NULL

null

上記以外

検索結果を文字列表現にしたStringオブジェクト

DATE

NULL

null

上記以外

JdbConvert.convertDate()で取得したyyyy-MM-DD形式の文字列のStringオブジェクト

TIME

NULL

null

上記以外

hh:mm:ss形式の文字列のStringオブジェクト

TIMESTAMP

NULL

null

上記以外

yyyy-MM-DD△hh:mm:ss[.ffffff]形式の文字列のStringオブジェクト

BINARYBLOB

NULL

null

上記以外

検索結果のStringオブジェクト

BOOLEAN※

NULL

null

true

文字列"true"のStringオブジェクト

false

文字列"false"のStringオブジェクト

注※　DatabaseMetadataから生成したResultsetの場合，BOOLEAN型データが存在します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

エンコードに失敗した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(az)　getString(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，Javaプログラミング言語のStringとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getString(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized String getString(String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

エンコードに失敗した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

(ba)　getTime(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timeとして取得します。

【形式】

public synchronized java.sql.Time getTime(int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合，nullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timeとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係を次に示します。

HiRDBのデータ型

検索結果

戻り値

[M｜N][VAR]CHAR

NULL

null

[半角空白]時刻形式[半角空白]

検索結果の前後の半角空白を取り除きjava.sql.Timeオブジェクトにしたもの

上記以外

SQLExceptionを返します

TIME

NULL

null

上記以外

検索結果をjava.sql.Timeオブジェクトにしたもの

TIMESTAMP

NULL

null

上記以外

検索結果をjava.sql.Timeオブジェクトにしたもの

その他

−

SQLExceptionを返します

（凡例）　−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timeとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(bb)　getTime(int columnIndex, Calendar cal)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timeオブジェクトとして取得します。このメソッドは指定されたカレンダーを使って時刻に適切なミリ秒値を作成します。

【形式】

public synchronized java.sql.Time getTime (int columnIndex, Calendar cal) throws SQLException

【引数】

int columnIndex：

列番号

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

列値（値がNULL値の場合，nullを返します）

HiRDBのデータ型による検索結果と戻り値の関係については，「getTime(int columnIndex)」の【機能詳細】を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timeとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(bc)　getTime(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timeオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getTime(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Time getTime (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timeとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(bd)　getTime(String columnName, Calendar cal)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timeオブジェクトとして取得します。このメソッドは指定されたカレンダーを使って時刻に適切なミリ秒値を作成します。

HiRDBのデータ型による検索結果と戻り値の関係については，「getTime(int columnIndex)」の【機能詳細】を参照してください。

【形式】

public synchronized java.sql.Time getTime (String columnName, Calendar cal) throws SQLException

【引数】

String columnName：

列名

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

列値（値がNULL値の場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timeとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(be)　getTimestamp(int columnIndex)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timestampオブジェクトとして取得します。

【形式】

public synchronized java.sql.Timestamp getTimestamp (int columnIndex) throws SQLException

【引数】

int columnIndex：

列番号

【戻り値】

列値（値がNULL値の場合，nullを返します）

【機能詳細】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timestampオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については「TIME型，DATE型，及びTIMESTAMP型列のデータ変換処理」を参照してください。TIME型，DATE型，TIMESTAMP型，文字列型以外のデータ型を取得した場合，SQLExceptionを投入します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timestampとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(bf)　getTimestamp(int columnIndex, Calendar cal)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timestampオブジェクトとして取得します。このメソッドは指定されたカレンダーを使ってタイムスタンプに適切なミリ秒値を作成します。

HiRDBのデータ型による検索結果と戻り値の関係については，「TIME型，DATE型，及びTIMESTAMP型列のデータ変換処理」を参照してください。TIME型，DATE型，TIMESTAMP型，文字列型以外のデータ型を取得した場合，SQLExceptionを投入します。

【形式】

public synchronized java.sql.Timestamp getTimestamp (int columnIndex, Calendar cal) throws SQLException

【引数】

int columnIndex：

列番号

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

列値（値がNULL値の場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列番号が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timestampとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(bg)　getTimestamp(String columnName)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timestampオブジェクトとして取得します。

HiRDBのデータ型による検索結果と戻り値の関係については，「TIME型，DATE型，及びTIMESTAMP型列のデータ変換処理」を参照してください。TIME型，DATE型，TIMESTAMP型，文字列型以外のデータ型を取得した場合，SQLExceptionを投入します。

【形式】

public synchronized java.sql.Timestamp getTimestamp (String columnName) throws SQLException

【引数】

String columnName：

列名

【戻り値】

列値（値がNULL値の場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timestampとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(bh)　getTimestamp(String columnName, Calendar cal)

【機能】

このResultSetオブジェクトの現在行にある指定された列の値を，java.sql.Timestampオブジェクトとして取得します。このメソッドは指定されたカレンダーを使ってタイムスタンプに適切なミリ秒値を作成します。

HiRDBのデータ型による検索結果と戻り値の関係については，「TIME型，DATE型，及びTIMESTAMP型列のデータ変換処理」を参照してください。TIME型，DATE型，TIMESTAMP型，文字列型以外のデータ型を取得した場合，SQLExceptionを投入します。

【形式】

public synchronized java.sql.Timestamp getTimestamp (String columnName, Calendar cal) throws SQLException

【引数】

String columnName：

列名

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダー

【戻り値】

列値（値がNULL値の場合，nullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

存在しない列名が指定されている場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timestampとして取得できない場合

JDBCドライバ内でエラーが発生した場合

(bi)　getType()

【機能】

このResultSetオブジェクトの型を返します。ResultSet.TYPE_FORWARD_ONLY又はResultSet.TYPE_SCROLL_INSENSITIVEを返します。

【形式】

public synchronized int getType() throws SQLException

【引数】

なし。

【戻り値】

ResultSet.TYPE_FORWARD_ONLY：

カーソルが順方向にだけ移動できます。

ResultSet.TYPE_SCROLL_INSENSITIVE：

カーソルがスクロールできますが，値の変更は反映されません。

ResultSet.TYPE_SCROLL_SENSITIVE：

カーソルはスクロールでき，値の変更が反映されます。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になる場合

(bj)　getWarnings()

【機能】

このResultSetオブジェクトに関する呼び出しによって報告される，最初の警告を取得します。二つ以上の警告がある場合，後続の警告は最初の警告にチェーンされ，直前に取得された警告のSQLWarning.getNextWarningメソッドを呼び出すことによって取得されます。

【形式】

public synchronized SQLWarning getWarnings() throws SQLException

【引数】

なし。

【戻り値】

最初のSQLWarningオブジェクト（ない場合はnullを返します）

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

(bk)　isAfterLast()

【機能】

カーソルが，このResultSetオブジェクト内の最終行の後ろにあるかどうかを取得します。

【形式】

public synchronized boolean isAfterLast() throws SQLException

【引数】

なし。

【戻り値】

カーソルが最終行の後ろにある場合はtrue，最終行の後ろにない場合，又は結果集合の行数が0行の場合はfalseを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(bl)　isBeforeFirst()

【機能】

カーソルが，このResultSetオブジェクト内の先頭行の前にあるかどうかを取得します。

【形式】

public synchronized boolean isBeforeFirst() throws SQLException

【引数】

なし。

【戻り値】

カーソルが先頭行の前にある場合はtrue，先頭行の前にない場合，又は結果集合の行数が0行の場合はfalseを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(bm)　isFirst()

【機能】

カーソルが，このResultSetオブジェクト内の先頭行にあるかどうかを取得します。

【形式】

public synchronized boolean isFirst() throws SQLException

【引数】

なし。

【戻り値】

カーソルが先頭行にある場合はtrue，そうでない場合はfalseを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(bn)　isLast()

【機能】

カーソルが，このResultSetオブジェクトの最終行にあるかどうかを取得します。

【形式】

public synchronized boolean isLast() throws SQLException

【引数】

なし。

【戻り値】

カーソルが最終行にある場合はtrue，そうでない場合はfalseを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(bo)　last()

【機能】

カーソルを，このResultSetオブジェクトの最終行に移動します。

【形式】

public synchronized boolean last() throws SQLException

【引数】

なし。

【戻り値】

カーソルが最終行に移動した場合はtrueを，結果集合の行数が0の場合はfalseを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

このResultSetオブジェクトの型がTYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(bp)　next()

【機能】

カーソルを，現在の位置から次の行に移動します。先頭行の前の場合は先頭行に，最終行の場合は最終行の後ろに移動します。

nextメソッドの最初の呼び出しによって，カーソルがオープンされます。

【形式】

public synchronized boolean next() throws SQLException

【引数】

なし。

【戻り値】

このメソッド呼び出し後のカーソル位置が先頭行の前，又は最終行の後ろの場合はfalse，そうでない場合はtrueを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(bq)　previous()

【機能】

カーソルを，このResultSetオブジェクト内の一つ前の行に移動します。

【形式】

public synchronized boolean previous() throws SQLException

【引数】

なし。

【戻り値】

このメソッド呼び出し後のカーソル位置が先頭行の前の場合はfalse，そうでない場合はtrueを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

このResultSetオブジェクトの型がTYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(br)　relative(int rows)

【機能】

カーソルを，正又は負の相対行数だけ移動します。

正の数はカーソルを順方向に移動し，負の数は逆方向に移動します。

【形式】

public synchronized boolean relative(int rows) throws SQLException

【引数】

int rows：

現在の行から移動する行数

【戻り値】

このメソッド呼び出し後のカーソル位置が先頭行の前，又は最終行の後ろの場合はfalse，そうでない場合はtrueに返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

このResultSetオブジェクトの型がTYPE_FORWARD_ONLYの場合

現在の位置が取得できない場合

現在のカーソル位置が有効な行にない場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(bs)　setFetchDirection(int direction)

【機能】

このStatementオブジェクトから生成される結果集合の，デフォルトのフェッチ方向を指定します。

ResultSet.FETCH_FORWARDだけ指定できます。

【形式】

public synchronized void setFetchDirection(int direction) throws SQLException

【引数】

int direction：

デフォルトのフェッチ方向

【戻り値】

なし。

【発生する例外】

次の場合，SQLExceptionを投入します。

このStatementオブジェクトがcloseされている場合

このStatementオブジェクトを生成したConnectionがcloseされている場合

directionにResultSet.FETCH_FORWARD以外が指定された場合

(bt)　setFetchSize(int rows)

【機能】

このResultSetオブジェクトのフェッチサイズを設定します。0を指定した場合は，クライアント環境定義に依存します。

【形式】

public synchronized void setFetchSize(int rows) throws SQLException

【引数】

int rows：

フェッチする行数。設定できる範囲は0〜4096です。

【戻り値】

なし。

【機能詳細】

このResultSetオブジェクトのフェッチサイズを設定します。0を指定した場合は，クライアント環境定義に依存します。

このメソッドによる指定がない場合は，Statementオブジェクトに指定した行数値をヒントとして検索します。Statementオブジェクトに行数値を指定していない，又はStatementオブジェクトから生成したResultSetオブジェクトでない場合は，クライアント環境定義PDBLKFの値をヒントとして検索します。このメソッドで0を指定した場合は，クライアント環境定義PDBLKFの値をヒントとして検索します。その他の注意事項については，「setFetchSize(int rows)」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

このResultSetオブジェクトの型がTYPE_FORWARD_ONLYの場合

現在の位置が取得できない場合

現在のカーソル位置が有効な行にない場合

トランザクションの決着によってResultSetが無効になった場合

データベースアクセスでエラーが発生した場合

(bu)　wasNull()

【機能】

最後に取得した列の値が，NULL値であるかどうかを通知します。

getXXXメソッドによって値を取得する前は，falseを返します。

【形式】

public synchronized boolean wasNull() throws SQLException

【引数】

なし。

【戻り値】

最後に取得した列の値がNULL値の場合はtrue，そうでない場合はfalseを返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがcloseされている場合

このResultSetオブジェクトを生成したStatementをcloseしたことによって，このドライバがResultSetをcloseした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがcloseされている場合

トランザクションの決着によってResultSetが無効になった場合

(bv)　getHoldability()

【機能】

ResultSetオブジェクトの保持機能についての状態を示す値を取得します。

【形式】

public int getHoldability() throws SQLException

【引数】

なし。

【戻り値】

ResultSet.HOLD_CURSORS_OVER_COMMIT：

現在のトランザクションがコミットするとき，オープンしているResultSetオブジェクトはオープンしたままになります。

ResultSet.CLOSE_CURSORS_AT_COMMIT：

現在のトランザクションがコミットするとき，オープンしているResultSetオブジェクトはクローズされます。

【発生する例外】

次の場合，SQLExceptionを投入します。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementをクローズしたことによって，このドライバがResultSetをクローズした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがクローズされている場合

(bw)　isClosed()

【機能】

ResultSetオブジェクトがクローズされているかどうかの情報を取得します。

【形式】

public boolean isClosed() throws SQLException

【引数】

なし。

【戻り値】

true：

ResultSetオブジェクトはクローズされています。

false：

ResultSetオブジェクトはオープンされています。

【機能詳細】

ResultSetオブジェクトがクローズされているかどうかの情報を取得します。次の場合，trueが返されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementをクローズしたことによって，このドライバがResultSetをクローズした場合を含みます。

このResultSetオブジェクトを生成したStatementを作成したConnectionがクローズされている場合

【発生する例外】

なし。

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbResultSet

(4)　フィールド

ResultSetインタフェースでサポートするフィールドを次の表に示します。

表17‒40　ResultSetインタフェースでサポートするフィールド

フィールド

備考

public static final int FETCH_FORWARD

−

public static final int FETCH_REVERSE

−

public static final int FETCH_UNKNOWN

−

public static final int TYPE_FORWARD_ONLY

−

public static final int TYPE_SCROLL_INSENSITIVE

−

public static final int TYPE_SCROLL_SENSITIVE

JDBCドライバでは，この値が指定されると，TYPE_SCROLL_INSENSITIVEが指定されたものとみなします。

public static final int CONCUR_READ_ONLY

−

public static final int CONCUR_UPDATABLE

JDBCドライバでは，この値が指定されると，CONCUR_READ_ONLYが指定されたものとみなします。

public static final int HOLD_CURSORS_OVER_COMMIT

−

public static final int CLOSE_CURSORS_AT_COMMIT

−

（凡例）

−：特にありません。

(5)　注意事項

(a)　getXXXメソッドによる値の取得

getXXXメソッドによってマッピングできるかどうかについては，「検索データ取得時のマッピング」を参照してください。

getXXXメソッドに指定した列番号又は列名称が存在しない場合は，SQLExceptionを投入します。

getXXXメソッドに指定する値が，実際の値を表現できない場合（例：INTEGER型の40,000という値をgetShortで取得する場合），オーバフローによってSQLExceptionを投入します。オーバフローが発生する可能性のあるgetXXXメソッドとHiRDBのデータ型の組み合わせについては，「オーバフローの扱い」を参照してください。

(b)　マッピング（変換）

検索データ取得時に使用するgetXXXメソッドによってマッピングできるかどうかについては，「検索データ取得時のマッピング」を参照してください。マッピングできないJDBC SQLタイプに対してgetXXXメソッドが呼び出された場合，SQLExceptionを投入します。

(c)　setFetchSizeメソッドの指定によるブロック転送機能の利用

「setFetchSizeメソッドの指定によるブロック転送機能の利用」を参照してください。

(d)　結果セットタイプがResultSet.TYPE_SCROLL_INSENSITIVE，又はResultSet.TYPE_SCROLL_SENSITIVEである場合のメモリ使用量

結果セットタイプがResultSet.TYPE_SCROLL_INSENSITIVE，又はResultSet.TYPE_SCROLL_SENSITIVEである場合，ResultSetインタフェースの次のメソッドを実行するとき，検索結果蓄積用のメモリをJDBCドライバが確保します。

ResultSet.nextメソッド

ResultSet.lastメソッド

ResultSet.absoluteメソッド

ResultSet.relativeメソッド

ResultSet.afterLastメソッド

JDBCドライバは，検索結果中のすべての値ごとにメモリオブジェクトを割り当てて蓄積します。値が可変長である場合，メモリオブジェクトは検索データの実サイズに合わせた大きさとなります。

(e)　next，absolute，relative，last，及びafterLastメソッド

nextメソッドを実行すると，JDBCドライバは次の表に示すようにデータベースからデータを取得，蓄積します。

表17‒41　nextメソッド実行時の，データベースからのデータの取得，蓄積

状態

結果セットタイプ

TYPE_FORWARD_ONLY

TYPE_SCROLL_INSENSITIVE，又はTYPE_SCROLL_SENSITIVE

nextメソッドで移動した現在行のデータをJDBCドライバ内に読み込んでいない。

遷移した現在行を接続先のデータベースから取得します。

遷移した現在行を接続先のデータベースから取得し，JDBCドライバのメモリに読み込み，蓄積します。

nextメソッドで移動した現在行のデータをJDBCドライバ内に読み込んでいる。

接続先のデータベースからデータを取得しません。

absolute，relative，last，及びafterLastメソッドを実行すると，JDBCドライバは次の表に示すようにデータベースからデータを取得，蓄積します。

表17‒42　absolute，relative，last，及びafterLastメソッド実行時の，データベースからのデータの取得，蓄積

状態

結果セットタイプが

TYPE_SCROLL_INSENSITIVE，又はTYPE_SCROLL_SENSITIVE

検索結果の先頭行から指定行※までに，JDBCドライバが読み込んでいないデータがある。

読み込んでいない行を接続先のデータベースから取得し，JDBCドライバのメモリに蓄積します。

検索結果の先頭行から指定行※までに，JDBCドライバが読み込んでいないデータはない。

接続先のデータベースからデータを取得しません。

注

結果セットタイプがTYPE_FORWARD_ONLYの場合，SQLExceptionを投入します。

注※

lastメソッド及びafterLastメソッドの場合，先頭行から最終行です。

(f)　getAsciiStream，getBinaryStream，getCharacterStream，及びgetUnicodeStreamメソッド

getAsciiStream，getBinaryStream，getCharacterStream，及びgetUnicodeStreamメソッドが返却したオブジェクトは，JDBCドライバが暗黙的にクローズすることはありません。メソッド呼び出し側でcloseメソッドを実行してください。

(g)　検索結果行数

ResultSetオブジェクトがHiRDBサーバから取得できる検索結果の行数を次の表に示します。次の表に示す行以上の検索結果は，JDBCドライバが破棄します。

表17‒43　ResultSetオブジェクトがHiRDBサーバから取得できる検索結果の行数

ResultSetオブジェクト

結果セットタイプ

TYPE_SCROLL_INSENSITIVE，又はTYPE_SCROLL_SENSITIVE

左記以外

setMaxRowsメソッドを実行したStatementオブジェクトから生成したResultSetオブジェクト

検索結果行数は，setMaxRowsメソッドで指定した行数です。

上記以外のResultSetオブジェクト

検索結果行数は，setMaxRowsメソッドの上限（2,147,483,647）です。

上限はありません。

(h)　ナル既定値について

ナル値の既定値設定機能を使用している場合（クライアント環境定義PDDFLNVALにUSEを指定），検索結果がナル既定値のときの，HiRDBデータ型でのgetXXXXメソッドの戻り値を次の表に示します。

ナル値の既定値設定機能については，マニュアル「HiRDB SQLリファレンス」を参照してください。

wasNullメソッドでは，ナル値の既定値設定機能を使用している場合，戻り値にFALSEを設定します。

なお，DatabaseMetaDataクラスのメソッドで取得したResultSetオブジェクトには，ナル値の既定値設定機能は適用されません。ナル値の既定値設定機能を使用している場合でも，getXXXXメソッドの戻り値にNULLを設定します。

表17‒44　検索結果がNULL既定値の場合のHiRDBのデータ型でのgetXXXメソッドの戻り値（1/2）

getXXXメソッド

HiRDBデータ型

[M｜N][VAR]CHAR

BINARY

BLOB

DATE

TIME

TIMESTAMP

getByte

×

×

×

×

×

getShort

×

×

×

×

×

getInt

×

×

×

×

×

getLong

×

×

×

×

×

getFloat

×

×

×

×

×

getDouble

×

×

×

×

×

getBigDecimal

×

×

×

×

×

getBoolean

FALSE

×

×

×

×

getString

NULL規定値

NULL既定値のStringオブジェクト

NULL既定値を変換したyyyy-MM-DD形式の文字列のStringオブジェクト

NULL既定値を変換したhh:mm:ss形式の文字列のStringオブジェクト

NULL既定値を変換したyyyy-MM-DD△hh:mm:ss[.ffffff]形式の文字列のStringオブジェクト

getBytes

NULL規定値をbyte配列にしたもの

同左

×

×

×

getDate

×

×

NULL規定値をjava.sql.Dateオブジェクトにしたもの

×

NULL規定値をjava.sql.Dateオブジェクトにしたもの

getTime

×

×

×

NULL既定値をjava.sql.Timeオブジェクトにしたもの

同左

getTimestamp

×

×

NULL既定値をjava.sql.Timestampオブジェクトにしたもの

×

NULL既定値をjava.sql.Timestampオブジェクトにしたもの

getAsciiStream

NULL既定値を格納したInputStreamオブジェクト

同左

×

×

×

getBinaryStream

×

NULL既定値を格納したInputStreamオブジェクト

×

×

×

getObject

NULL規定値

同左

NULL既定値で生成したjava.sql.Dateオブジェクト

NULL既定値で生成したjava.sql.Timeオブジェクト

NULL既定値で生成したjava.sql.Timestampオブジェクト

getCharacterStream

NULL既定値を格納したReaderオブジェクト

同左

×

×

×

getArray

×

×

×

×

×

getBlob

×

NULL既定値の値を持つjava.sql.Blobオブジェクト

×

×

×

（凡例）　×：SQLExceptionを投入します。

表17‒45　検索結果がNULL既定値の場合のHiRDBのデータ型でのgetXXXメソッドの戻り値（2/2）

getXXXメソッド

JDBC SQLタイプ

SMALLINT

INTEGER

REAL

FLOAT

DECIMAL

ARRAY

getByte

NULL既定値をbyte値にしたもの

同左

同左

同左

同左

×

getShort

NULL既定値

NULL規定値をshort値にしたもの

NULL規定値の整数部分の値をshort値にしたもの

同左

同左

×

getInt

NULL規定値をint値にしたもの

同左

NULL規定値の整数部分の値をint値にしたもの

同左

同左

×

getLong

NULL規定値をlong値にしたもの

同左

NULL規定値の整数部分の値をlong値にしたもの

同左

同左

×

getFloat

NULL規定値をfloat値にしたもの

同左

同左

同左

同左

×

getDouble

NULL規定値をdouble値にしたもの

同左

同左

同左

同左

×

getBigDecimal

NULL規定値の値を持つBigDecimalオブジェクト

同左

同左

同左

同左

×

getBoolean

FALSE

同左

同左

同左

同左

×

getString

NULL既定値を文字列表現にしたStringオブジェクト

同左

同左

同左

同左

×

getBytes

×

×

×

×

×

×

getDate

×

×

×

×

×

×

getTime

×

×

×

×

×

×

getTimestamp

×

×

×

×

×

×

getAsciiStream

×

×

×

×

×

×

getBinaryStream

×

×

×

×

×

×

getObject

NULL既定値で生成したIntegerオブジェクト

同左

NULL既定値で生成したFloatオブジェクト

NULL既定値で生成したDoubleオブジェクト

NULL規定値

NULL既定値で生成したArrayオブジェクト

getCharacterStream

×

×

×

×

×

×

getArray

×

×

×

×

×

要素数0のjava.sql.Arrayオブジェクト

getBlob

×

×

×

×

×

×

（凡例）　×：SQLExceptionを投入します。

17.4.7　DatabaseMetaDataインタフェース

(1)　概要

DatabaseMetaDataインタフェースでは，主に次の機能が提供されます。

接続先のDBに関する各種情報の返却

表一覧，列一覧などの一覧情報の返却（ResultSet（結果セット）に格納）

DatabaseMetaDataクラスのメソッドには，Stringのパターン文字列を引数とするものがあります。このパターン文字列中に指定できる特殊文字を次に示します。

特殊文字

説明

_（下線）

任意の1文字です。

%

0文字以上の任意の長さの文字列です。

¥

エスケープ文字です。パターン文字列中に記述したエスケープ文字の直後の特殊文字を通常の文字として扱います。

(2)　メソッド

DatabaseMetaDataインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒46　DatabaseMetaDataインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

allProceduresAreCallable()

○

○

getProcedures()メソッドによって返されるすべてのプロシジャが，現在のユーザから呼び出せるかどうかを返します。

allTablesAreSelectable()

○

○

getTables()メソッドによって返されるすべてのテーブルが，現在のユーザによって使用できるかどうかを返します。

dataDefinitionCausesTransactionCommit()

○

○

トランザクションのデータ定義文が，トランザクションを強制的にコミットさせるかどうかを返します。

dataDefinitionIgnoredInTransactions()

○

○

トランザクションでデータ定義文が無視されるかどうかを返します。

deletesAreDetected(int type)

○

○

ResultSet.rowDeleted()メソッドを呼び出すことによって，可視の行が削除されたことを検出できるかどうかを返します。

doesMaxRowSizeIncludeBlobs()

○

○

getMaxRowSize()メソッドに，SQLデータ型のLONGVARCHAR及びLONGVARBINARYを含んでいるかどうか返します。

getAttributes(String catalog,String schemaPattern,String typeNamePattern,String attributeNamePattern)

○

○

指定されたスキーマ，及びカタログで使用できるユーザ定義の型のための，属性に関する記述を返します。

getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable)

○

○

行を一意に識別するテーブルの，最適な列セットに関する記述を返します。

getCatalogs()

○

○

使用できるカタログ名を返します。

getCatalogSeparator()

○

○

カタログ名とテーブル名のセパレータを返します。

getCatalogTerm()

○

○

"catalog"に対する推奨用語を返します。

getColumnPrivileges (String catalog,String schema,String table,String columnNamePattern)

○

○

テーブルの列へのアクセス権に関する記述を返します。

getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)

○

○

指定されたテーブル列の記述を返します。※１

getConnection()

○

○

このDatabaseMetaDataインスタンスを生成したConnectionインスタンスを返します。

getCrossReference (String primaryCatalog,String primarySchema,String primaryTable,String foreignCatalog,String foreignSchema,String foreignTable)

○

○

指定された参照テーブルと指定された被参照テーブルとのクロスリファレンス情報を返します。

getDatabaseMajorVersion()

○

○

データベースのメジャーバージョンを返します。

getDatabaseMinorVersion()

○

○

データベースのマイナーバージョンを返します。

getDatabaseProductName()

○

○

接続データベースの製品名称を返します。

getDatabaseProductVersion()

○

○

接続データベースのバージョンを返します。

getDefaultTransactionIsolation()

○

○

デフォルトのトランザクション遮断レベルを返します。

getDriverMajorVersion()

○

○

このJDBCドライバのメジャーバージョンをint型で返します。

getDriverMinorVersion()

○

○

このJDBCドライバのマイナーバージョンをint型で返します。

getDriverName()

○

○

JDBCドライバの名前を返します。

getDriverVersion()

○

○

このJDBCドライバのバージョンをStringとして返します。

getExportedKeys (String catalog,String schema,String table)

○

○

指定されたテーブルの外部キーに関する情報を返します。

getExtraNameCharacters()

○

○

引用符で囲まれていないSQL識別名に使用できるすべての特殊文字（a-z，A-Z，0-9，及び_以外）を返します。

getIdentifierQuoteString()

○

○

SQL識別子を引用するために使用する文字列を返します。

getImportedKeys (String catalog,String schema,String table)

○

○

指定されたテーブルの主キーに関する情報を返します。

getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)

○

○

指定されたテーブルのインデクスに関する記述を返します。

getJDBCMajorVersion()

○

○

ドライバのJDBCメジャーバージョンを返します。

getJDBCMinorVersion()

○

○

ドライバのJDBCマイナーバージョンを返します。

getMaxBinaryLiteralLength()

○

○

バイナリリテラル中に入れられる16進数の最大文字数を返します。

getMaxCatalogNameLength()

○

○

カタログ名の最大文字数を返します。

getMaxCharLiteralLength()

○

○

キャラクタリテラルの最大文字数を返します。

getMaxColumnNameLength()

○

○

列名の最大文字数を返します。

getMaxColumnsInGroupBy()

○

○

GROUP BY節中の列数の最大値を返します。

getMaxColumnsInIndex()

○

○

インデクス中で許される列数の最大値を返します。

getMaxColumnsInOrderBy()

○

○

ORDER BY節中の列数の最大値を返します。

getMaxColumnsInSelect()

○

○

SELECTリスト中の列数の最大値を返します。

getMaxColumnsInTable()

○

○

テーブル中の列数の最大値を返します。

getMaxConnections()

○

○

現在の接続の最大数を返します。

getMaxCursorNameLength()

○

○

カーソル名の最大文字数を返します。

getMaxIndexLength()

○

○

インデクスの全部分を含む，インデクスの最大長を返します。

getMaxProcedureNameLength()

○

○

プロシジャ名の最大文字数を返します。

getMaxRowSize()

○

○

1行の最大バイト数を返します。

getMaxSchemaNameLength()

○

○

スキーマ名の最大文字数を返します。

getMaxStatementLength()

○

○

SQL文の最大長を返します。

getMaxStatements()

○

○

アクティブにできるSQL文の最大数を返します。

getMaxTableNameLength()

○

○

テーブル名の最大文字数を返します。

getMaxTablesInSelect()

○

○

SELECT文中の最大テーブル数を返します。

getMaxUserNameLength()

○

○

ユーザ名の最大文字数を返します。

getNumericFunctions()

○

○

数学関数を，コンマで区切ったリストで返します。

getPrimaryKeys(String catalog, String schema, String table)

○

○

指定されたテーブルの主キー列の記述を返します。

getProcedureColumns(String catalog,String schemaPattern,String procedureNamePattern, String columnNamePattern)

○

○

ストアドプロシジャパラメタに関する記述を返します。※２

getProcedures(String catalog,String schemaPattern,String procedureNamePattern)

○

○

ストアドプロシジャに関する記述を返します。※３

getProcedureTerm()

○

○

"procedure"に対する推奨用語を返します。

getResultSetHoldability()

○

○

ResultSetオブジェクトの保持機能を返します。

getSchemas()

○

○

使用できるスキーマ名に関する情報を返します。※４

getSchemaTerm()

○

○

"schema"に対する推奨用語を返します。

getSearchStringEscape()

○

○

ワイルドカード文字をエスケープするために使用する文字列を返します。

getSQLKeywords()

○

○

データベース固有のSQLキーワードであり，かつSQL92のキーワードではないすべてのキーワードを，コンマで区切ったリストで返します。

getSQLStateType()

○

○

SQLException.getSQLStateによって返されるSQLSTATEが，X/OpenのSQL CLIであるかSQL99であるかを返します。

getStringFunctions()

○

○

文字列関数を，コンマで区切ったリストで返します。

getSuperTables(String catalog,String schemaPattern,String tableNamePattern)

○

○

特定のスキーマで定義されているテーブル階層の説明を返します。

getSuperTypes(String catalog,String schemaPattern,String typeNamePattern)

○

○

特定のスキーマで定義されているユーザ定義型階層の説明を返します。

getSystemFunctions()

○

○

使用できるシステム関数を返します。

getTablePrivileges(String catalog,String schemaPattern,String tableNamePattern)

○

○

テーブルのアクセス権に関する記述を返します。

getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

○

○

テーブルに関する記述を返します。

getTableTypes()

○

○

使用できるテーブルの型を返します。

getTimeDateFunctions()

○

○

使用できる時間関数と日付関数をコンマで区切ったリストを返します。

getTypeInfo()

○

○

標準SQLの型に関する記述を返します。

getUDTs(String catalog,String schemaPattern,String typeNamePattern,int[] types)

○

○

ユーザ定義型に関する情報を返します。

getURL()

○

○

HiRDB又はXDM/RD E2に接続したURLを返します。

getUserName()

○

○

HiRDB又はXDM/RD E2に接続する際に使用したユーザ名を返します。

getVersionColumns(String catalog,String schema,String table)

○

○

テーブル中の行が更新された場合に，自動的に更新されるテーブルの列に関する記述を返します。

insertsAreDetected(int type)

○

○

ResultSet.rowInserted()メソッドを呼び出すことによって，可視の行が挿入されたことを検出できるかどうかを返します。

isCatalogAtStart()

○

○

完全修飾されたテーブル名の開始部分（又は終了部分）に，カタログが現れるかどうかを返します。

isReadOnly()

○

○

データベースが読み込み専用モードかどうかを返します。

locatorsUpdateCopy()

○

○

LOBへの変更が，コピーに対して行われたのか，LOBに直接行われたのかを示します。

nullPlusNonNullIsNull()

○

○

NULL値と非NULL値の連結を，NULLとするかどうかを返します。

nullsAreSortedAtEnd()

○

○

NULL値が，終了時にソート順に関係なくソートされるかどうかを返します。

nullsAreSortedAtStart()

○

○

NULL値が，開始時にソート順に関係なくソートされるかどうかを返します。

nullsAreSortedHigh()

○

○

NULL値が高位にソートされるかどうかを返します。

nullsAreSortedLow()

○

○

NULL値が下位にソートされるかどうかを返します。

othersDeletesAreVisible(int type)

○

○

ほかで行われた削除が可視かどうかを返します。

othersInsertsAreVisible(int type)

○

○

ほかで行われた挿入が可視かどうかを返します。

othersUpdatesAreVisible(int type)

○

○

ほかで行われた削除が可視かどうかを返します。

ownDeletesAreVisible(int type)

○

○

結果セット自身の削除が可視かどうかを返します。

ownInsertsAreVisible(int type)

○

○

結果セット自身の挿入が可視かどうかを返します。

ownUpdatesAreVisible(int type)

○

○

結果セット自身の更新が可視かどうかを返します。

storesLowerCaseIdentifiers()

○

○

大文字と小文字が混在する引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，小文字で格納するかどうかを返します。

storesLowerCaseQuotedIdentifiers()

○

○

大文字と小文字が混在する引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，小文字で格納するかどうかを返します。

storesMixedCaseIdentifiers()

○

○

大文字と小文字が混在する引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，大文字と小文字を混在して格納するかどうかを返します。

storesMixedCaseQuotedIdentifiers()

○

○

大文字と小文字が混在する引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，大文字と小文字を混在して格納するかどうかを返します。

storesUpperCaseIdentifiers()

○

○

大文字と小文字が混在する引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，大文字で格納するかどうかを返します。

storesUpperCaseQuotedIdentifiers()

○

○

大文字と小文字が混在する引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，大文字で格納するかどうかを返します。

supportsAlterTableWithAddColumn()

○

○

追加列のあるALTER TABLEが，サポートされているかどうかを返します。

supportsAlterTableWithDropColumn()

○

○

ドロップ列のあるALTER TABLEが，サポートされているかどうかを返します。

supportsANSI92EntryLevelSQL()

○

○

ANSI92エントリレベルのSQL文法が，サポートされるかどうかを返します。

supportsANSI92FullSQL()

○

○

ANSI92完全レベルのSQL文法が，サポートされるかどうかを返します。

supportsANSI92IntermediateSQL()

○

○

ANSI92中間レベルのSQL文法が，サポートされるかどうかを返します。

supportsBatchUpdates()

○

○

バッチ更新をサポートしているかどうかを返します。

supportsCatalogsInDataManipulation()

○

○

データ操作文でカタログ名を使用できるかどうかを返します。

supportsCatalogsInIndexDefinitions()

○

○

インデクス定義文でカタログ名を使用できるかどうかを返します。

supportsCatalogsInPrivilegeDefinitions()

○

○

特権定義文でカタログ名を使用できるかどうかを返します。

supportsCatalogsInProcedureCalls()

○

○

プロシジャ呼び出し文でカタログ名を使用できるかどうかを返します。

supportsCatalogsInTableDefinitions()

○

○

テーブル定義文でカタログ名を使用できるかどうかを返します。

supportsColumnAliasing()

○

○

カラムの別名をサポートしているかどうかを返します。

supportsConvert()

○

○

SQLタイプ間のCONVERT関数をサポートしているかどうかを返します。

supportsConvert(int fromType, int toType)

○

○

与えられたSQLタイプ間のCONVERT関数をサポートしているかどうかを返します。

supportsCoreSQLGrammar()

○

○

ODBC Core SQL文法をサポートしているかどうかを返します。

supportsCorrelatedSubqueries()

○

○

照合関連サブクエリーをサポートしているかどうかを返します。

supportsDataDefinitionAndDataManipulationTransactions()

○

○

トランザクションで，データ定義文とデータ操作文の両方をサポートしているかどうかを返します。

supportsDataManipulationTransactionsOnly()

○

○

トランザクションで，データ操作文だけをサポートしているかどうかを返します。

supportsDifferentTableCorrelationNames()

○

○

テーブル相互関連名がサポートされている場合，テーブルの名前と異なる名前にするという制限があるかどうかを返します。

supportsExpressionsInOrderBy()

○

○

"ORDER BY"リスト中の式をサポートしているかどうかを返します。

supportsExtendedSQLGrammar()

○

○

ODBC Extended SQL文法をサポートしているかどうかを返します。

supportsFullOuterJoins()

○

○

完全ネストの外部結合をサポートしているかどうかを返します。

supportsGetGeneratedKeys()

○

○

文が実行された後に自動生成キーを取得できるかどうかを返します。

supportsGroupBy()

○

○

"GROUP BY"節のフォームをサポートしているかどうかを返します。

supportsGroupByBeyondSelect()

○

○

SELECT中のすべてのカラムを指定するという条件で，"GROUP BY"節がSELECT中にないカラムを使用できるかどうかを返します。

supportsGroupByUnrelated()

○

○

"GROUP BY"節が，SELECT中にないカラムを使用できるかどうかを返します。

supportsIntegrityEnhancementFacility()

○

○

SQL Integrity Enhancement Facilityをサポートしているかどうかを返します。

supportsLikeEscapeClause()

○

○

"LIKE"節で，エスケープ文字をサポートしているかどうかを返します。

supportsLimitedOuterJoins()

○

○

外部結合に関し，制限されたサポートがあるかどうかを返します。

supportsMinimumSQLGrammar()

○

○

ODBC Minimum SQL文法をサポートしているかどうかを返します。

supportsMixedCaseIdentifiers()

○

○

大文字と小文字が混在する引用符なしのSQL識別子を，大文字と小文字を区別して処理し，結果として大文字と小文字を混在して格納するかどうかを返します。

supportsMixedCaseQuotedIdentifiers()

○

○

大文字と小文字が混在する引用符付きのSQL識別子を，大文字と小文字を区別して処理し，結果として大文字と小文字を混在して格納するかどうかを返します。

supportsMultipleOpenResults()

○

○

CallableStatementオブジェクトから同時に返された複数のResultSetオブジェクトを持つことが可能かどうかを返します。

supportsMultipleResultSets()

○

○

単一のexecuteメソッド実行からの複数ResultSetをサポートしているかどうかを返します。

supportsMultipleTransactions()

○

○

一度に複数のトランザクションを（異なった接続に関し）オープンできるかどうかを返します。

supportsNamedParameters()

○

○

callable文への名前付きパラメータがサポートされるかどうかを返します。

supportsNonNullableColumns()

○

○

列を非nullとして定義できるかどうかを返します。

supportsOpenCursorsAcrossCommit()

○

○

カーソルをコミット間でオープンされた状態のままにできるかどうかを返します。

supportsOpenCursorsAcrossRollback()

○

○

カーソルをロールバック間でオープンされた状態のままにできるかどうかを返します。

supportsOpenStatementsAcrossCommit()

○

○

文をコミット間でオープンされた状態のままにできるかどうかを返します。

supportsOpenStatementsAcrossRollback()

○

○

文をロールバック間でオープンされた状態のままにできるかどうかを返します。

supportsOrderByUnrelated()

○

○

"ORDER BY"節が，SELECT中にない列を使用できるかどうかを返します。

supportsOuterJoins()

○

○

何らかの外部結合のフォームをサポートしているかどうかを返します。

supportsPositionedDelete()

○

○

位置決めされたDELETEをサポートしているかどうかを返します。

supportsPositionedUpdate()

○

○

位置決めされたUPDATEをサポートしているかどうかを返します。

supportsResultSetConcurrency(int type, int concurrency)

○

○

指定されたResultSetタイプと並行処理タイプの組み合わせをサポートしているかどうかを返します。

supportsResultSetHoldability(int holdability)

○

○

指定されたResultSetオブジェクトの保持機能を，サポートしているかどうかを返します。

supportsResultSetType(int type)

○

○

指定されたResultSetタイプをサポートしているかどうかを返します。

supportsSavepoints()

○

○

セーブポイントをサポートしているかどうかを返します。

supportsSchemasInDataManipulation()

○

○

データ操作文でスキーマ名を使用できるかどうかを返します。

supportsSchemasInIndexDefinitions()

○

○

インデクス定義文でスキーマ名を使用できるかどうかを返します。

supportsSchemasInPrivilegeDefinitions()

○

○

特権定義文でスキーマ名を使用できるかどうかを返します。

supportsSchemasInProcedureCalls()

○

○

プロシジャ呼び出し文でスキーマ名を使用できるかどうかを返します。

supportsSchemasInTableDefinitions()

○

○

テーブル定義文でスキーマ名を使用できるかどうかを返します。

supportsSelectForUpdate()

○

○

UPDATE用のSELECTをサポートしているかどうかを返します。

supportsStatementPooling()

○

○

文のプールをサポートしているかどうかを返します。

supportsStoredProcedures()

○

○

ストアドプロシジャコールをサポートしているかどうかを返します。

supportsSubqueriesInComparisons()

○

○

比較式中でサブクエリーをサポートしているかどうかを返します。

supportsSubqueriesInExists()

○

○

"exists"式中でサブクエリーをサポートしているかどうかを返します。

supportsSubqueriesInIns()

○

○

"in"文中でサブクエリーをサポートしているかどうかを返します。

supportsSubqueriesInQuantifieds()

○

○

定量化された式中でサブクエリーをサポートしているかどうかを返します。

supportsTableCorrelationNames()

○

○

テーブル相互関連名をサポートしているかどうかを返します。

supportsTransactionIsolationLevel(int level)

○

○

与えられたトランザクションアイソレーションレベルをサポートしているかどうかを返します。

supportsTransactions()

○

○

トランザクションをサポートしているかどうかを返します。

supportsUnion()

○

○

SQL UNIONをサポートしているかどうかを返します。

supportsUnionAll()

○

○

SQL UNION ALLをサポートしているかどうかを返します。

updatesAreDetected(int type)

○

○

指定されたResultSetタイプで，ResultSetに行われた更新をResultSet.rowUpdatedメソッドによって検出できるかどうかを返します。

usesLocalFilePerTable()

○

○

各テーブルにファイルを使用するかどうかを返します。

usesLocalFiles()

○

○

ローカルファイルにテーブルを格納するかどうかを返します。

getRowIdLifetime()

×

○

RowId型をサポートしているかどうかを返します。RowId型をサポートしている場合は，RowIdオブジェクトが有効になっている寿命を返します。

getSchemas(String catalog, String schemaPattern)

×

○

使用できるスキーマ名に関する情報を返します。

supportsStoredFunctionsUsingCallSyntax()

×

○

プロシジャエスケープ構文を使用した，ユーザ定義関数又はベンダー関数の呼び出しをサポートするかどうかを返します。

autoCommitFailureClosesAllResultSets()

×

○

オートコミット有効時にSQLExceptionが発生した場合，オープンされたすべてのResultSetがクローズされるかどうかを返します。

getClientInfoProperties()

×

○

JDBCドライバがサポートするクライアント情報プロパティのリスト情報を取得します。

getFunctions(String catalog, String schemaPattern, String functionNamePattern)

×

○

関数に関する情報を返します。

getFunctionColumns(String catalog,String schemaPattern,String functionNamePattern,String columnNamePattern)

×

○

関数のパラメタと返される型に関する情報を返します。

（凡例）

○：提供されます。

×：提供されません。

注※1

JDBC2.0とJDBC4.0では，次のような差異があります。

返却されるResultSetの列数がJDBC4.0ではJDBC2.0よりも多い

注※2

JDBC2.0とJDBC4.0では，次のような差異があります。

返却されるResultSetの列数がJDBC4.0ではJDBC2.0よりも多い

返却されるPRECISION及びLENGTH列の値が異なる

SQL_ROUTINES表，又はSQL_ROUTINE_PARAMS表が存在しないためディクショナリ検索でエラーになった場合，JDBC2.0ではSQLExceptionが返却されるが，JDBC4.0では検索結果行数0のResultSetが返却される

JDBC2.0ではプロシジャ及び関数のパラメタ情報が返却されるが，JDBC4.0ではプロシジャのパラメタ情報だけが返却される

注※3

JDBC2.0とJDBC4.0では，次のような差異があります。

返却されるResultSetの列数がJDBC4.0ではJDBC2.0よりも多い

SQL_ROUTINES表，又はSQL_ROUTINE_PARAMS表が存在しないためディクショナリ検索でエラーになった場合，JDBC2.0ではSQLExceptionが返却されるが，JDBC4.0では検索結果行数0のResultSetが返却される

JDBC2.0ではプロシジャ及び関数のパラメタ情報が返却されるが，JDBC4.0ではプロシジャのパラメタ情報だけが返却される

注※4

JDBC2.0とJDBC4.0では，次のような差異があります。

JDBC2.0では表を所有するスキーマが返却されるが，JDBC4.0ではすべてのスキーマが返却される

(a)　allProceduresAreCallable()

【機能】

getProcedures()メソッドによって返されるすべてのプロシジャが，現在のユーザから呼び出せるかどうかを返します。

【形式】

public boolean allProceduresAreCallable() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：呼び出せます。

false：呼び出せません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(b)　allTablesAreSelectable()

【機能】

getTables()メソッドによって返されるすべてのテーブルが，現在のユーザによって使用できるかどうかを返します。

【形式】

public boolean allTablesAreSelectable() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：使用できます。

false：使用できません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(c)　dataDefinitionCausesTransactionCommit()

【機能】

トランザクションのデータ定義文が，トランザクションを強制的にコミットさせるかどうかを返します。

【形式】

public boolean dataDefinitionCausesTransactionCommit() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：コミットさせます。

false：コミットさせません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(d)　dataDefinitionIgnoredInTransactions()

【機能】

トランザクションでデータ定義文が無視されるかどうかを返します。

【形式】

public boolean dataDefinitionIgnoredInTransactions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：無視されます。

false：無視されません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(e)　deletesAreDetected(int type)

【機能】

ResultSet.rowDeleted()メソッドを呼び出すことによって，可視の行が削除されたことを検出できるかどうかを返します。

【形式】

public boolean deletesAreDetected(int type) throws SQLException

【引数】

int type：

ResultSetの型。次のどれかです。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

【戻り値】

boolean型：

true：削除が検出されます。

false：削除が検出されません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(f)　doesMaxRowSizeIncludeBlobs()

【機能】

getMaxRowSize()メソッドに，SQLデータ型のLONGVARCHAR及びLONGVARBINARYを含んでいるかどうか返します。

【形式】

public boolean doesMaxRowSizeIncludeBlobs() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：含んでいます。

false：含んでいません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(g)　getAttributes(String catalog,String schemaPattern,String typeNamePattern,String attributeNamePattern)

【機能】

指定されたスキーマ，及びカタログで使用できるユーザ定義の型のための，属性に関する記述を返します。

【形式】

public ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern) throws SQLException

【引数】

String catalog：

カタログ名

String schemaPattern：

スキーマ名パターン

String typeNamePattern：

型名パターン

String attributeNamePattern：

属性名パターン

【戻り値】

ResultSetオブジェクト

【機能詳細】

Type4 JDBCドライバでは，ユーザ定義の型は未サポートのため，常に検索結果行数0のResultSetを返します。すべての引数について妥当性チェックを行いません。返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

列の意味

1

String

CHAR

TYPE_CAT

カタログ名

2

String

VARCHAR

TYPE_SCHEM

認可識別子名

3

String

VARCHAR

TYPE_NAME

型名

4

String

VARCHAR

ATTR_NAME

属性名

5

int

INTEGER

DATA_TYPE

属性の型

6

String

VARCHAR

ATTR_TYPE_NAME

型名

7

int

INTEGER

ATTR_SIZE

列サイズ

8

int

INTEGER

DECIMAL_DIGITS

小数点以下のけた数

9

int

INTEGER

NUM_PREC_RADIX

基数

10

int

INTEGER

NULLABLE

NULL値の可否

11

String

VARCHAR

REMARKS

コメント

12

String

VARCHAR

ATTR_DEF

デフォルト値

13

int

INTEGER

SQL_DATA_TYPE

未使用

14

int

INTEGER

SQL_DATETIME_SUB

未使用

15

int

INTEGER

CHAR_OCTET_LENGTH

char型列の最大バイト数

16

int

INTEGER

ORDINAL_POSITION

テーブル中の列のインデクス

17

String

VARCHAR

IS_NULLABLE

NULL値の可否

18

String

VARCHAR

SCOPE_CATALOG

参照属性のスコープであるテーブルのカタログ

19

String

VARCHAR

SCOPE_SCHEMA

参照属性のスコープであるテーブルのスキーマ

20

String

VARCHAR

SCOPE_TABLE

参照属性のスコープであるテーブル名

21

short

SMALLINT

SOURCE_DATA_TYPE

個別の型又はユーザ生成Ref型，java.sql.TypesのSQL型のソースの型

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(h)　getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable)

【機能】

行を一意に識別するテーブルの，最適な列セットに関する記述を返します。

【形式】

public ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) throws SQLException

【引数】

String catalog：

カタログ名

String schema：

スキーマ名

String table：

テーブル名

int scope：

対象のスケール

boolean nullable：

NULL値指定

【戻り値】

ResultSetオブジェクト

【機能詳細】

すべての引数について妥当性チェックを行いません。常に検索結果行数0のResultSetを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(i)　getCatalogs()

【機能】

使用できるカタログ名を返します。

【形式】

public ResultSet getCatalogs() throws SQLException

【引数】

なし。

【戻り値】

ResultSetオブジェクト

【機能詳細】

常に検索結果行数0のResultSetを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(j)　getCatalogSeparator()

【機能】

カタログ名とテーブル名のセパレータを返します。

【形式】

public String getCatalogSeparator() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

nullを返します。

システムプロパティHiRDB_for_Java_METADATA_BEHAVIORにCAT_SEP_EMPTYが指定されている場合，空文字("")を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(k)　getCatalogTerm()

【機能】

"catalog"に対する推奨用語を返します。

【形式】

public String getCatalogTerm() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

常にnullを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(l)　getColumnPrivileges (String catalog,String schema,String table,String columnNamePattern)

【機能】

テーブルの列へのアクセス権に関する記述を返します。

【形式】

public ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) throws SQLException

【引数】

String catalog：

カタログ名。このドライバでは無視します。

String schema：

スキーマ名パターン。null又は0長文字列を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String table：

テーブル名パターン。null又は0長文字列を指定している場合，テーブル名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String columnNamePattern：

列名パターン。null又は0長文字列を指定している場合，列名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定されたテーブル列が属する表のアクセス権に関する記述を返します。返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

ソート※

列の意味

1

String

CHAR

TABLE_CAT

−

カタログ名

常にNULL値を返します。

2

String

VARCHAR

TABLE_SCHEM

1（昇順）

認可識別子名

3

String

VARCHAR

TABLE_NAME

2（昇順）

テーブル名

4

String

VARCHAR

COLUMN_NAME

3（昇順）

列名

5

String

VARCHAR

GRANTOR

−

アクセス権の付与者

6

String

VARCHAR

GRANTEE

−

アクセス権の被付与者

7

String

VARCHAR

PRIVILEGE

4（昇順）

許可されているアクセス権限名。複数のアクセス権限を許可されている場合は，コンマ（,）で区切って返します。

SELECT：SELECT権限

INSERT：INSERT権限

UPDATE：UPDATE権限

DELETE：DELETE権限

8

String

VARCHAR

IS_GRANTABLE

−

アクセス権の被付与者が，別のユーザにアクセス権を与えることができるかを表します。

YES：与えることができます。

NO：与えることができません。

null：与えることができるかどうか不明です。

PRIVILEGEに設定されたアクセス権限が複数ある場合，その内の一つ以上のアクセス権限を別のユーザに与えることができれば，YESを設定します。HiRDB，XDM/RD E2共に，nullは返しません。

（凡例）

−：該当しません。

注※

ソートのキー列の優先順位を示します。

【発生する例外】

次のどちらかの場合，例外SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行した場合

データベースアクセスエラーが発生した場合

(m)　getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)

【機能】

指定されたテーブル列の記述を返します。

【形式】

public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException

【引数】

String catalog：

カタログ名（このドライバでは無視します）

String schemaPattern：

スキーマ名パターン（大文字と小文字を区別します）

String tableNamePattern：

テーブル名パターン（大文字と小文字を区別します）

String columnNamePattern：

列名パターン（大文字と小文字を区別します）

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定されたテーブル列の記述を返します。返却するResultSetの形式を次の表に示します。

表17‒47　getColumnsで返却するResultSetの形式

列番号

型

SQL型（Types）

列名

列の意味

ドライバが返却する列

JDBC2.0

JDBC4.0

1

String

CHAR

TABLE_CAT

常にNULL値を返します。

○

○

2

String

VARCHAR

TABLE_SCHEM

認可識別子名

○

○

3

String

VARCHAR

TABLE_NAME

テーブル名

○

○

4

String

VARCHAR

COLUMN_NAME

列名

○

○

5

int

INTEGER

DATA_TYPE

SQLの型

○

○

6

String

CHAR

TYPE_NAME

型名

○

○

7

int

INTEGER

COLUMN_SIZE

列サイズ

○

○

8

int

INTEGER

BUFFER_LENGTH

常にNULL値を返します。

○

○

9

int

INTEGER

DECIMAL_DIGITS

小数点以下のけた数

○

○

10

int

INTEGER

NUM_PREC_RADIX

基数

概数値：2

真数値：10

数値以外：0

○

○

11

int

INTEGER

NULLABLE

この型にNULL値を使用できるかどうかを返します。

columnNoNulls：NULL値を使用できない可能性があります。

columnNullable：NULL値を使用できます。

columnNullableUnknown：NULL値を使用できるか不明です。

○

○

12

String

VARCHAR

REMARKS

コメント記述列

○

○

13

String

VARCHAR

COLUMN_DEF

デフォルト値

○

○

14

int

INTEGER

SQL_DATA_TYPE

常にNULL値を返します。

○

○

15

int

INTEGER

SQL_DATETIME_SUB

常にNULL値を返します。

○

○

16

int

INTEGER

CHAR_OCTET_LENGTH

charの型についての列の最大バイト数

COLUMN_SIZEと同じです。

○

○

17

int

SMALLINT

ORDINAL_POSITION

列番号

1から始まります。

○

○

18

String

CHAR

IS_NULLABLE

この型にNULL値が使用できるかどうかを返します。

"NO"：NULL値を使用できません。

"YES"：NULL値を使用できる可能性があります。

○

○

19

String

CHAR

SCOPE_CATLOG

常にNULL値を返します。

○

○

20

String

CHAR

SCOPE_SCHEMA

常にNULL値を返します。

○

○

21

String

CHAR

SCOPE_TABLE

常にNULL値を返します。

○

○

22

short

SMALLINT

SOURCE_DATA_TYPE

常にNULL値を返します。

○

○

23

String

VARCHAR

IS_AUTOINCREMENT

列が自動インクリメントされるかどうかを示します。

"YES"：列が自動インクリメントされます。

"NO"：列が自動インクリメントされません。

空白：列が自動インクリメントされるか不明です。

常にNOを返します。

×

○

（凡例）

○：返却されます。

×：返却されません。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(n)　getConnection()

【機能】

このDatabaseMetaDataインスタンスを生成したConnectionインスタンスを返します。

【形式】

public Connection getConnection() throws SQLException

【引数】

なし。

【戻り値】

Conenctionオブジェクト

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(o)　getCrossReference (String primaryCatalog,String primarySchema,String primaryTable,String foreignCatalog,String foreignSchema,String foreignTable)

【機能】

指定された参照テーブルと指定された被参照テーブルとのクロスリファレンス情報を返します。

【形式】

public ResultSet getCrossReference(String primaryCatalog, String primarySchema, String primaryTable, String foreignCatalog, String foreignSchema, String foreignTable) throws SQLException

【引数】

String primaryCatalog：

被参照テーブルのカタログ名。このドライバでは無視します。

String primarySchema：

被参照テーブルのスキーマ名パターン。null又は0長文字列を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String primaryTable：

被参照テーブルのテーブル名パターン。null又は0長文字列を指定している場合，テーブル名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String foreignCatalog：

参照テーブルのカタログ名。このドライバでは無視します。

String foreignSchema：

参照テーブルのスキーマ名パターン。null又は0長文字列を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String foreignTable：

参照テーブルのテーブル名パターン。null又は0長文字列を指定している場合，テーブル名を検索の限定に使用しません。引数の値は大文字小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定された参照テーブルと指定された被参照テーブルとのクロスリファレンス情報を返します。返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

ソート※

列の意味

1

String

CHAR

PKTABLE_CAT

−

被参照テーブルのカタログ名。

常にNULL値を返します。

2

String

VARCHAR

PKTABLE_SCHEM

−

被参照テーブルの認可識別子名。

3

String

VARCHAR

PKTABLE_NAME

−

被参照テーブルのテーブル名。

4

String

VARCHAR

PKCOLUMN_NAME

−

主キーの列名。

5

String

CHAR

FKTABLE_CAT

−

参照テーブルのカタログ名。

常にNULL値を返します。

6

String

VARCHAR

FKTABLE_SCHEM

1（昇順）

参照テーブルの認可識別子名。

7

String

VARCHAR

FKTABLE_NAME

2（昇順）

参照テーブルのテーブル名。

8

String

VARCHAR

FKCOLUMN_NAME

−

外部キーの列名。

9

short

SMALLINT

KEY_SEQ

3（昇順）

外部キーのシーケンス番号。

10

short

SMALLINT

UPDATE_RULE

−

更新規則。

主キーを参照している外部キーが存在する場合に，主キーを更新すると，それを参照している外部キーがどのような影響を受けるのかを表します。

importedKeyNoAction

主キーは更新できません。

importedKeyCascade

主キーと同じ値で，外部キーを更新します。

importedKeySetNull

外部キーの値がNULLになります。

importedKeySetDefault

外部キーの値がデフォルト値になります。

importedKeyRestrict

主キーは更新できません。

11

short

SMALLINT

DELETE_RULE

−

削除規則。

主キーを参照している外部キーが存在する場合に，主キーを削除すると，それを参照している外部キーがどのような影響を受けるのかを表します。

importedKeyNoAction

主キーを削除できません。

importedKeyCascade

外部キーがある行を，削除します。

importedKeySetNull

外部キーの値がNULLになります。

importedKeySetDefault

外部キーの値がデフォルト値になります。

importedKeyRestrict

主キーを削除できません。

12

String

VARCHAR

FK_NAME

−

参照制約の制約名。

13

String

VARCHAR

PK_NAME

−

主キーのインデクス名。

14

short

SMALLINT

DEFERRABILITY

−

外部キーに対する制約の評価を，トランザクションのコミット時まで延期できるかを表します。

importedKeyInitiallyDeferred

延期できます。

importedKeyInitiallyImmediate

現時点では即時に評価されますが，延期できるように変更できます。

importedKeyNotDeferrable

延期できません。

（凡例）

−：該当しません。

注※

ソートのキー列の優先順位を示します。

【発生する例外】

次のどちらかの場合，例外SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行した場合

データベースアクセスエラーが発生した場合

(p)　getDatabaseMajorVersion()

【機能】

データベースのメジャーバージョンを返します。

【形式】

public int getDatabaseMajorVersion() throws SQLException

【引数】

なし。

【戻り値】

int型：

データベースのメジャーバージョン

【機能詳細】

サーバがHiRDBの場合，HiRDBサーバのメジャーバージョンを返します。例えば，HiRDBサーバのバージョンが08-02の場合，int型の8を返します。

サーバがXDM/RD E2の場合，XDM/RD E2のメジャーバージョンに，20を加算した値を返します。この返却値は，JDBCドライバが出力するSQLトレースの，ヘッダ部に表示されるサーバのメジャーバージョンと同じです。例えば，XDM/RD E2のバージョンが11-03の場合，int型の31を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(q)　getDatabaseMinorVersion()

【機能】

データベースのマイナーバージョンを返します。

【形式】

public int getDatabaseMinorVersion() throws SQLException

【引数】

なし。

【戻り値】

int型：

データベースのマイナーバージョン

【機能詳細】

サーバがHiRDBの場合，HiRDBサーバのマイナーバージョンを返します。例えば，HiRDBサーバのバージョンが08-02の場合，int型の2を返します。

サーバがXDM/RD E2の場合，XDM/RD E2のマイナーバージョンを返します。例えば，XDM/RD E2のバージョンが11-03の場合，int型の3を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(r)　getDatabaseProductName()

【機能】

接続データベースの製品名称を返します。

サーバがHiRDBの場合，"HiRDB"を返します。サーバがXDM/RD E2の場合，"XDM/RD E2"を返します。

【形式】

public String getDatabaseProductName() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(s)　getDatabaseProductVersion()

【機能】

接続データベースのバージョンを返します。

【形式】

public String getDatabaseProductVersion() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

サーバがHiRDBの場合，"vv-rr"（例："08-00"）の形式でHiRDBのバージョンを返します。

サーバがXDM/RD E2の場合，XDM/RD E2のバージョンに20を加算した値を，"vv-rr"の形式で返します。例えば，XDM/RD E2のバージョンが11-03の場合，"31-03"を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(t)　getDefaultTransactionIsolation()

【機能】

デフォルトのトランザクション遮断レベルを返します。

【形式】

public int getDefaultTransactionIsolation() throws SQLException

【引数】

なし。

【戻り値】

int型：

遮断レベル

【機能詳細】

常にTRANSACTION_REPEATABLE_READを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(u)　getDriverMajorVersion()

【機能】

このJDBCドライバのメジャーバージョンをint型で返します。例えば，バージョンが08-00の場合，int型の8を返します。

【形式】

public int getDriverMajorVersion() throws SQLException

【引数】

なし。

【戻り値】

int型：

JDBCドライバのメジャーバージョン

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(v)　getDriverMinorVersion()

【機能】

このJDBCドライバのマイナーバージョンをint型で返します。例えば，バージョンが08-00の場合，int型の0を返します。

【形式】

public int getDriverMinorVersion() throws SQLException

【引数】

なし。

【戻り値】

int型：

JDBCドライバのマイナーバージョン

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(w)　getDriverName()

【機能】

JDBCドライバの名前を返します。

【形式】

public String getDriverName() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

JDBCドライバの名前として，次のどれかを返却します。

JDBC2.0：HiRDB_Type4_JDBC_Driver

JDBC4.0：HiRDB_Type4_JDBC40_Driver

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(x)　getDriverVersion()

【機能】

このJDBCドライバのバージョンをStringとして返します。例えば，バージョンが08-00の場合，String型の08-00を返します。

【形式】

public String getDriverVersion() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(y)　getExportedKeys (String catalog,String schema,String table)

【機能】

主キー及び外部キーに関する情報を返します。

【形式】

public ResultSet getExportedKeys(String catalog,String schema,String table) throws SQLException

【引数】

String catalog：

参照テーブルのカタログ名。このドライバでは無視します。

String schema：

参照テーブルのスキーマ名パターン。null又は0長文字列を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String table：

参照テーブルのテーブル名パターン。null又は0長文字列を指定している場合，テーブル名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定されたテーブルの主キー及び当該主キーを参照する外部キーに関する情報を返します。

システムプロパティHiRDB_for_Java_CompatibleにALLが指定されている場合，指定されたテーブルの外部キー及び当該外部キーが参照する主キーに関する情報を返します。

返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

ソート※

列の意味

1

String

CHAR

PKTABLE_CAT

−

被参照テーブルのカタログ名。

常にNULL値を返します。

2

String

VARCHAR

PKTABLE_SCHEM

−

被参照テーブルの認可識別子名。

3

String

VARCHAR

PKTABLE_NAME

−

被参照テーブルのテーブル名。

4

String

VARCHAR

PKCOLUMN_NAME

−

主キーの列名。

5

String

CHAR

FKTABLE_CAT

−

参照テーブルのカタログ名。常にNULL値を返します。

6

String

VARCHAR

FKTABLE_SCHEM

1（昇順）

参照テーブルの認可識別子名。

7

String

VARCHAR

FKTABLE_NAME

2（昇順）

参照テーブルのテーブル名。

8

String

VARCHAR

FKCOLUMN_NAME

−

外部キーの列名。

9

short

SMALLINT

KEY_SEQ

3（昇順）

外部キーのシーケンス番号。

10

short

SMALLINT

UPDATE_RULE

−

更新規則。

主キーを参照している外部キーが存在する場合に，主キーを更新すると，それを参照している外部キーがどのような影響を受けるのかを表します。

importedKeyNoAction

主キーは更新できません。

importedKeyCascade

主キーと同じ値で，外部キーを更新します。

importedKeySetNull

外部キーの値がNULLになります。

importedKeySetDefault

外部キーの値がデフォルト値になります。

importedKeyRestrict

主キーは更新できません。

11

short

SMALLINT

DELETE_RULE

−

削除規則。

主キーを参照している外部キーが存在する場合に，主キーを削除すると，それを参照している外部キーがどのような影響を受けるのかを表します。

importedKeyNoAction

主キーを削除できません。

importedKeyCascade

外部キーがある行を削除します。

importedKeySetNull

外部キーの値がNULLになります。

importedKeySetDefault

外部キーの値がデフォルト値になります。

importedKeyRestrict

主キーを削除できません。

12

String

VARCHAR

FK_NAME

−

参照制約の制約名。

13

String

VARCHAR

PK_NAME

−

主キーのインデクス名。

14

short

SMALLINT

DEFERRABILITY

−

外部キーに対する制約の評価を，トランザクションのコミット時まで延期できるかを表します。

importedKeyInitiallyDeferred

延期できます。

importedKeyInitiallyImmediate

現時点では即時に評価されますが，延期できるように変更できます。

importedKeyNotDeferrable

延期できません。

（凡例）

−：該当しません。

注※

ソートのキー列の優先順位を示します。

【発生する例外】

次のどちらかの場合，例外SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行した場合

データベースアクセスエラーが発生した場合

(z)　getExtraNameCharacters()

【機能】

引用符で囲まれていないSQL識別名に使用できる特殊文字を返します。ただし，a-z，A-Z，0-9，及び_は除きます。

【形式】

public String getExtraNameCharacters() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

常に¥，@，及び#を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(aa)　getIdentifierQuoteString()

【機能】

SQL識別子を引用するために使用する文字列を返します。

【形式】

public String getIdentifierQuoteString() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

常に二重引用符（"）を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ab)　getImportedKeys (String catalog,String schema,String table)

【機能】

主キー及び外部キーに関する情報を返します。

【形式】

public ResultSet getImportedKeys(String catalog,String schema,String table) throws SQLException

【引数】

String catalog：

被参照テーブルのカタログ名。このドライバでは無視します。

String schema：

被参照テーブルのスキーマ名パターン。null又は0長文字列を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String table：

被参照テーブルのテーブル名パターン。null又は0長文字列を指定している場合，テーブル名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定されたテーブルの外部キー及び当該外部キーが参照する主キーに関する情報を返します。

システムプロパティHiRDB_for_Java_CompatibleにALLが指定されている場合，指定されたテーブルの主キー及び当該主キーを参照する外部キーに関する情報を返します。

返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

ソート※

列の意味

1

String

CHAR

PKTABLE_CAT

−

被参照テーブルのカタログ名。

常にNULL値を返します。

2

String

VARCHAR

PKTABLE_SCHEM

1（昇順）

被参照テーブルの認可識別子名。

3

String

VARCHAR

PKTABLE_NAME

2（昇順）

被参照テーブルのテーブル名。

4

String

VARCHAR

PKCOLUMN_NAME

−

主キーの列名。

5

String

CHAR

FKTABLE_CAT

−

参照テーブルのカタログ名。

常にNULL値を返します。

6

String

VARCHAR

FKTABLE_SCHEM

−

参照テーブルの認可識別子名。

7

String

VARCHAR

FKTABLE_NAME

−

参照テーブルのテーブル名。

8

String

VARCHAR

FKCOLUMN_NAME

−

外部キーの列名。

9

short

SMALLINT

KEY_SEQ

3（昇順）

外部キーのシーケンス番号。

10

short

SMALLINT

UPDATE_RULE

−

更新規則。

主キーを参照している外部キーが存在する場合に，主キーを更新すると，それを参照している外部キーがどのような影響を受けるのかを表します。

importedKeyNoAction

主キーは更新できません。

importedKeyCascade

主キーと同じ値で，外部キーを更新します。

importedKeySetNull

外部キーの値がNULLになります。

importedKeySetDefault

外部キーの値がデフォルト値になります。

importedKeyRestrict

主キーは更新できません。

11

short

SMALLINT

DELETE_RULE

−

削除規則。

主キーを参照している外部キーが存在する場合に，主キーを削除すると，それを参照している外部キーがどのような影響を受けるのかを表します。

importedKeyNoAction

主キーを削除できません。

importedKeyCascade

外部キーがある行を削除します。

importedKeySetNull

外部キーの値がNULLになります。

importedKeySetDefault

外部キーの値がデフォルト値になります。

importedKeyRestrict

主キーを削除できません。

12

String

VARCHAR

FK_NAME

−

参照制約の制約名。

13

String

VARCHAR

PK_NAME

−

主キーのインデクス名。

14

short

SMALLINT

DEFERRABILITY

−

外部キーに対する制約の評価を，トランザクションのコミット時まで延期できるかを表します。

importedKeyInitiallyDeferred

延期できます。

importedKeyInitiallyImmediate

現時点では即時に評価されるが，延期できるように変更できます。

importedKeyNotDeferrable

延期できません。

（凡例）

−：該当しません。

注※

ソートのキー列の優先順位を示します。

【発生する例外】

次のどちらかの場合，例外SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行した場合

データベースアクセスエラーが発生した場合

(ac)　getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)

【機能】

指定されたテーブルのインデクスに関する記述を返します。

【形式】

public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException

【引数】

String catalog：

カタログ名。この指定値は未使用です。

String schema：

スキーマ名パターン。引数の値は大文字と小文字を区別します。

String table：

テーブル名パターン。引数の値は大文字と小文字を区別します。

boolean unique：

ユニーク属性。

true：ユニークインデクスだけを返します。

false：ユニークであるかどうかに関係なく，インデクス情報を返します。

boolean approximate：

結果属性。この指定値は未使用です。

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定されたテーブルのインデクスに関する記述を返します。返却するResultSetの形式を次の表に示します。

表17‒48　getIndexInfoで返却するResultSetの形式

列番号

型

SQL型

列名

列の意味

1

String

CHAR

TABLE_CAT

カタログ名

常にNULL値を返します。

2

String

VARCHAR

TABLE_SCHEM

認可識別子名

3

String

VARCHAR

TABLE_NAME

テーブル名

4

boolean

BIT

NON_UNIQUE

インデクスを定義するキー値（インデクスとして定義する一つ又は複数の列全体の値）が，すべての行で異なっている場合にfalse，そうでない場合にtrueを返します。

5

String

CHAR

INDEX_QUALIFIER

インデクスのカタログ名

常にNULL値を返します。

6

String

VARCHAR

INDEX_NAME

インデクス識別子

7

short

SMALLINT

TYPE

インデクス種別によって次の値を返します。

クラスタキーの場合：DatabaseMetaData.tableIndexClustered(1)

ハッシュインデクスの場合：DatabaseMetaData.tableIndexHashed(2)

その他の場合：DatabaseMetaData.tableIndexOther(3)

8

short

SMALLINT

ORDINAL_POSITION

単一列インデクスの場合，1を返します。複数列インデクスの場合，インデクスを構成する列の順序（インデクスを構成する列名順を識別する番号で，1から始まる整数）を返します。

9

String

VARCHAR

COLUMN_NAME

列名

10

String

VARCHAR

ASC_OR_DESC

インデクスを昇順に定義する場合，"A"を返します。インデクスを降順に定義する場合，"D"を返します。プラグインインデクスの場合，NULL値を返します。

11

int

INTEGER

CARDINALITY

インデクス内のユニークな値の数

常にNULL値を返します。

12

int

INTEGER

PAGES

インデクスで使用しているページ数

常にNULL値を返します。

13

String

CHAR

FILTER_CONDITION

フィルタ条件

常にNULL値を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ad)　getJDBCMajorVersion()

【機能】

ドライバのJDBCメジャーバージョンを返します。

【形式】

public int getJDBCMajorVersion() throws SQLException

【引数】

なし。

【戻り値】

int型：

JDBCメジャーバージョン

【機能詳細】

ドライバのJDBCメジャーバージョンを返します。2を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ae)　getJDBCMinorVersion()

【機能】

ドライバのJDBCマイナーバージョンを返します。

【形式】

public int getJDBCMinorVersion () throws SQLException

【引数】

なし。

【戻り値】

int型：

JDBCマイナーバージョン

【機能詳細】

ドライバのJDBCマイナーバージョンを返します。1を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(af)　getMaxBinaryLiteralLength()

【機能】

バイナリリテラル中に入れられる16進数の最大文字数を返します。

【形式】

public int getMaxBinaryLiteralLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

最大文字数

【機能詳細】

常に64000を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ag)　getMaxCatalogNameLength()

【機能】

カタログ名の最大文字数を返します。

【形式】

public int getMaxCatalogNameLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

カタログ名に許可される最大文字数。0は制限がないか，制限が不明であることを示します。

【機能詳細】

常に0を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ah)　getMaxCharLiteralLength()

【機能】

キャラクタリテラルの最大文字数を返します。

【形式】

public int getMaxCharLiteralLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

キャラクタリテラルに許可される最大文字数。0は制限がないか，制限が不明であることを示します。

【機能詳細】

常に32000を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ai)　getMaxColumnNameLength()

【機能】

列名の最大文字数を返します。

【形式】

public int getMaxColumnNameLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

列名に許可される最大文字数

【機能詳細】

常に30を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(aj)　getMaxColumnsInGroupBy()

【機能】

GROUP BY節中の列数の最大値を返します。

【形式】

public int getMaxColumnsInGroupBy() throws SQLException

【引数】

なし。

【戻り値】

int型：

許可される列の最大数

【機能詳細】

常に255を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ak)　getMaxColumnsInIndex()

【機能】

インデクス中で許される列数の最大値を返します。

【形式】

public int getMaxColumnsInIndex() throws SQLException

【引数】

なし。

【戻り値】

int型：

許可される列の最大数

【機能詳細】

インデクス中で許される列数の最大値を返します。返す値はクライアント及び接続先サーバの組み合わせによって異なります。クライアント及び接続先サーバの組み合わせによる返却値を次の表に示します。

表17‒49　クライアント及び接続先サーバの組み合わせによる返却値

クライアント

接続先サーバ

HiRDB

XDM/RD E2

バージョン09-50より前

バージョン09-50以降

バージョン09-50より前

16

16

16

バージョン09-50以降

16

64

16

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(al)　getMaxColumnsInOrderBy()

【機能】

ORDER BY節中の列数の最大値を返します。

【形式】

public int getMaxColumnsInOrderBy() throws SQLException

【引数】

なし。

【戻り値】

int型：

許可される列の最大数

【機能詳細】

常に255を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(am)　getMaxColumnsInSelect()

【機能】

SELECTリスト中の列数の最大値を返します。

【形式】

public int getMaxColumnsInSelect() throws SQLException

【引数】

なし。

【戻り値】

int型：

許可される列の最大数

【機能詳細】

常に30000を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(an)　getMaxColumnsInTable()

【機能】

テーブル中の列数の最大値を返します。

【形式】

public int getMaxColumnsInTable() throws SQLException

【引数】

なし。

【戻り値】

int型：

許可される列の最大数

【機能詳細】

常に30000を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ao)　getMaxConnections()

【機能】

現在の接続の最大数を返します。

【形式】

public int getMaxConnections() throws SQLException

【引数】

なし。

【戻り値】

int型：

一度に接続できるアクティブな接続の最大数。0は制限がないか，制限が不明を示します。

【機能詳細】

常に0を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ap)　getMaxCursorNameLength()

【機能】

カーソル名の最大文字数を返します。

【形式】

public int getMaxCursorNameLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

カーソル名に許可される最大文字数

【機能詳細】

常に30を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(aq)　getMaxIndexLength()

【機能】

インデクスの全部分を含む，インデクスの最大長を返します。

【形式】

public int getMaxIndexLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

許可されるインデクスの最大長

【機能詳細】

常に4036を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ar)　getMaxProcedureNameLength()

【機能】

プロシジャ名の最大文字数を返します。

【形式】

public int getMaxProcedureNameLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

プロシジャ名の最大長

【機能詳細】

常に30を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(as)　getMaxRowSize()

【機能】

1行の最大バイト数を返します。

【形式】

public int getMaxRowSize() throws SQLException

【引数】

なし。

【戻り値】

int型：

許可される1行の最大バイト数。0は制限がないか，制限が不明であることを示します。

【機能詳細】

常に0を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(at)　getMaxSchemaNameLength()

【機能】

スキーマ名の最大文字数を返します。

【形式】

public int getMaxSchemaNameLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

スキーマ名の最大長

【機能詳細】

スキーマ名の最大文字数を返します。返す値はクライアント及び接続先サーバの組み合わせによって異なります。クライアント及び接続先サーバの組み合わせによる返却値を次に示します。

表17‒50　クライアント及び接続先サーバの組み合わせによる返却値

クライアント

接続先サーバ

HiRDB

XDM/RD E2

バージョン09-50より前

バージョン09-50以降

バージョン09-50より前

8

8

30

バージョン09-50以降

8

30

30

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(au)　getMaxStatementLength()

【機能】

SQL文の最大長を返します。

【形式】

public int getMaxStatementLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

SQL文の最大長

【機能詳細】

サーバがHiRDBの場合2,000,000を返します。

サーバがXDM/RD E2の場合30,000を返します。

注意：

サーバがXDM/RD E2の場合，Database Connection Serverのサーバ空間の起動制御文のRDB句でMAX SQL LENGTHを指定すると，SQL文の最大長を2,000,000まで拡張できます。しかし，JDBCドライバは，MAX SQL LENGTH指定の情報をサーバから取得していないので，このメソッドは，MAX SQL LENGTHが指定されていない場合のデフォルト値（30,000）を返します。JDBCドライバ自身は最大2,000,000バイトのSQL文を処理できます。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(av)　getMaxStatements()

【機能】

アクティブにできるSQL文の最大数を返します。

【形式】

public int getMaxStatements() throws SQLException

【引数】

なし。

【戻り値】

int型：

SQL文の最大数

【機能詳細】

常に4095を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(aw)　getMaxTableNameLength()

【機能】

テーブル名の最大文字数を返します。

【形式】

public int getMaxTableNameLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

テーブル名の最大長

【機能詳細】

常に30を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ax)　getMaxTablesInSelect()

【機能】

SELECT文中の最大テーブル数を返します。

【形式】

public int getMaxTablesInSelect() throws SQLException

【引数】

なし。

【戻り値】

int型：

SELECT文で許可されるテーブルの最大数

【機能詳細】

クライアント及び接続先サーバの組み合わせによって，次の値を返します。

クライアント

接続先サーバ

HiRDB

XDM/RD E2

バージョン09-65-02より前

バージョン09-65-02以降

バージョン09-65-02より前

64

64

256

バージョン09-65-02以降

64

128

256

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ay)　getMaxUserNameLength()

【機能】

ユーザ名の最大文字数を返します。

【形式】

public int getMaxUserNameLength() throws SQLException

【引数】

なし。

【戻り値】

int型：

ユーザ名に許可される最大長

【機能詳細】

ユーザ名の最大文字数を返します。返す値はクライアント及び接続先サーバの組み合わせによって異なります。クライアント及び接続先サーバの組み合わせによる返却値を次に示します。

表17‒51　クライアント及び接続先サーバの組み合わせによる返却値

クライアント

接続先サーバ

HiRDB

XDM/RD E2

バージョン09-50より前

バージョン09-50以降

バージョン09-50より前

8

8

7

バージョン09-50以降

8

30

7

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(az)　getNumericFunctions()

【機能】

数学関数を，コンマで区切ったリストで返します。

【形式】

public String getNumericFunctions() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

サーバがHiRDBの場合，次のリストを返します。

ABS,ACOS,ASIN,ATAN,ATAN2,CEILING,COS,DEGREES,EXP,FLOOR,LOG,LOG10,MOD,PI,POWER,RADIANS,ROUND,SIGN,SIN,SQRT,TAN,TRUNCATE

サーバがXDM/RD E2の場合，次のリストを返します。

ABS,CEILING,EXP,FLOOR,LOG,MOD,POWER,SQRT

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ba)　getPrimaryKeys(String catalog, String schema, String table)

【機能】

指定されたテーブルの主キー列の記述を返します。

【形式】

public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException

【引数】

String catalog：

カタログ名。この指定値は未使用です。

String schema：

スキーマ名パターン。引数の値は大文字と小文字を区別します。

String table：

テーブル名パターン。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定されたテーブルの主キー列の記述を返します。返却するResultSetの形式を次の表に示します。

表17‒52　getPrimaryKeysで返却するResultSetの形式

列番号

型

SQL型

列名

列の意味

1

String

CHAR

TABLE_CAT

カタログ名

常にNULL値を返します。

2

String

VARCHAR

TABLE_SCHEM

認可識別子名

3

String

VARCHAR

TABLE_NAME

テーブル名

4

String

VARCHAR

COLUMN_NAME

列名

5

short

SMALLINT

KEY_SEQ

インデクスを構成する列の順序（インデクスを構成する列名順を識別する番号で，1から始まる整数）を返します。

6

String

VARCHAR

PK_NAME

プライマリインデクス識別子

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bb)　getProcedureColumns(String catalog,String schemaPattern,String procedureNamePattern, String columnNamePattern)

【機能】

ストアドプロシジャパラメタに関する記述を返します。

【形式】

public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) throws SQLException

【引数】

String catalog：

カタログ名。このドライバでは無視します。

String schemaPattern：

スキーマ名パターン。null又は0長文字列を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String procedureNamePattern：

プロシジャ名パターン。null又は0長文字列を指定している場合，プロシジャ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String columnNamePattern：

パラメタ名パターン。null又は0長文字列を指定している場合，パラメタ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

JDBC2.0の場合

指定したストアドプロシジャ及び関数のパラメタに関する記述を返します。HiRDBサーバにSQL_ROUTINE_PARAMS表が定義されていない場合，SQLExceptionを返します。

JDBC4.0の場合

指定したストアドプロシジャのパラメタに関する記述を返します。HiRDBサーバにSQL_ROUTINE_PARAMS表が定義されていない場合，検索結果行数0のResultSetを返却します。

返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

ソート※

列の意味

ドライバが返却する列

JDBC2.0

JDBC4.0

1

String

CHAR

PROCEDURE_CAT

−

カタログ名

常にNULL値を返します。

○

○

2

String

VARCHAR

PROCEDURE_SCHEM

1（昇順）

認可識別子名

○

○

3

String

VARCHAR

PROCEDURE_NAME

2（昇順）

プロシジャ名

○

○

4

String

VARCHAR

COLUMN_NAME

−

パラメタ名

○

○

5

short

SMALLINT

COLUMN_TYPE

−

パラメタの種類

procedureColumnUnknown

不明

procedureColumnIn

INパラメタ

procedureColumnInOut

INOUTパラメタ

procedureColumnOut

OUTパラメタ

procedureColumnReturn

プロシジャ戻り値

procedureColumnResult

ResultSetの結果列

HiRDB，XDM/RD E2共に，procedureColumnReturn，procedureColumnResultは設定しません。

○

○

6

int

INTEGER

DATA_TYPE

−

パラメタのSQL型

（java.sql.Typesで定義されている値）

○

○

7

String

VARCHAR

TYPE_NAME

−

パラメタのSQL型名

（型名を文字列で表現したもの）

○

○

8

int

INTEGER

PRECISION

−

パラメタの精度

JDBC2.0：

パラメタのSQL型名がDECIMAL以外の場合，0を返します。

JDBC4.0：

数値データの場合：最大精度

文字データの場合：文字数

日時データ型の場合：String表現の文字数

バイナリデータの場合：バイト数

○

○

9

int

INTEGER

LENGTH

−

パラメタのサイズ

JDBC2.0：

NCHAR及びNVARCHAR：文字数

DECIMAL型：精度

INTERVAL型：DATA_LENGTH_CODEの値

上記以外：バイト数

JDBC4.0：

バイト数を返します。

DECIMAL型は精度に符号とピリオドを加えるため，位取りなしの場合は精度+1，位取りありの場合は精度+2となります。

○

○

10

short

SMALLINT

SCALE

−

パラメタの位取り（小数部分のけた数）

パラメタのSQL型名がDECIMAL,TIMESTAMP以外の場合は，0を返します。

○

○

11

short

SMALLINT

RADIX

−

パラメタの基数

概数値：2

真数値：10

数値以外：0

○

○

12

short

SMALLINT

NULLABLE

−

NULL値の可否

procedureNoNulls

NULL値を許しません。

procedureNullable

NULL値を許します。

procedureNullableUnknown

NULL値を許すかどうかは不明です。

常に，procedureNullableを返します。

○

○

13

String

VARCHAR

REMARKS

−

パラメタに関するコメント

常にNULL値を返します。

○

○

14

String

VARCHAR

COLUMN_DEF

−

列のデフォルト値

常にNULL値を返します。

×

○

15

int

INTEGER

SQL_DATA_TYPE

−

将来予約用

0を返します。

×

○

16

int

INTEGER

SQL_DATE_TIME

−

将来予約用

0を返します。

×

○

17

int

INTEGER

CHAR_OCTET_LENGTH

−

バイナリと文字ベースのパラメタ又は列の最大長

×

○

18

int

INTEGER

ORDINAL_POSITION

4（昇順）

入力及び出力パラメタの１から始まる順番

×

○

19

String

CHAR

IS_NULLABLE

−

パラメタ又は列でNULL値を許可するかどうか

YES

NULL値を許します。

NO

NULL値を許しません。

空白

NULL値を許すかどうか不明です。

常にYESを返します。

×

○

20

String

VARCHAR

SPECIFIC_NAME

3（昇順）

このプロシジャを一意に識別する名前

×

○

（凡例）

−：該当しません。

○：返却されます。

×：返却されません。

注※

ソートのキー列の優先順位を示します。

【発生する例外】

次のどちらかの場合，例外SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行した場合

データベースアクセスエラーが発生した場合

(bc)　getProcedures(String catalog,String schemaPattern,String procedureNamePattern)

【機能】

ストアドプロシジャに関する記述を返します。

【形式】

public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws SQLException

【引数】

String catalog：

カタログ名。このドライバでは無視します。

String schemaPattern：

スキーマ名パターン。null又は0長文字列を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String procedureNamePattern：

プロシジャ名パターン。null又は0長文字列を指定している場合，プロシジャ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

JDBC2.0の場合：

指定されたストアドプロシジャ及び関数に関する記述を返します。HiRDBサーバにSQL_ROUTINES表が定義されていない場合，SQLExceptionを返します。

JDBC4.0の場合：

指定されたストアドプロシジャに関する記述を返します。HiRDBサーバにSQL_ROUTINES表が定義されていない場合，検索結果行数0のResultSetを返却します。

返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

ソート※

列の意味

ドライバが返却する列

JDBC2.0

JDBC4.0

1

String

CHAR

PROCEDURE_CAT

−

カタログ名

常にNULL値を返します。

○

○

2

String

VARCHAR

PROCEDURE_SCHEM

1（昇順）

認可識別子名

○

○

3

String

VARCHAR

PROCEDURE_NAME

2（昇順）

プロシジャ名

○

○

4

String

VARCHAR

RESERVE1

−

予約

常にNULL値を返します。

○

○

5

String

VARCHAR

RESERVE2

−

予約

常にNULL値を返します。

○

○

6

String

VARCHAR

RESERVE3

−

予約

常にNULL値を返します。

○

○

7

String

VARCHAR

REMARKS

−

プロシジャの説明文

○

○

8

short

SMALLINT

PROCEDURE_TYPE

−

プロシジャの種類

procedureResultUnknown

結果を返す可能性があります。

procedureNoResult

結果を返しません。

procedureReturnsResult

結果を返します。

○

○

9

String

VARCHAR

SPECIFIC_NAME

3（昇順）

このプロシジャを一意に識別する名前

×

○

（凡例）

−：該当しません。

○：返却されます。

×：返却されません。

注※

ソートのキー列の優先順位を示します。

【発生する例外】

次のどちらかの場合，例外SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行した場合

データベースアクセスエラーが発生した場合

(bd)　getProcedureTerm()

【機能】

"procedure"に対する推奨用語を返します。

【形式】

public String getProcedureTerm() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

常に"procedure"を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(be)　getResultSetHoldability()

【機能】

ResultSetオブジェクトの保持機能を返します。

【形式】

public int getResultSetHoldability() throws SQLException

【引数】

なし。

【戻り値】

ResultSetオブジェクトの保持機能。Connection.commit メソッドが呼び出されたときにResultSetオブジェクトがクローズされるかどうかを示します。

ResultSet.HOLD_CURSORS_OVER_COMMIT：クローズされません。

ResultSet.CLOSE_CURSORS_AT_COMMIT：クローズされます。

【機能詳細】

有効なResultSetオブジェクトの保持機能を返します。

Connectionインスタンス生成時のカーソル動作モード（HIRDB_CURSOR）で，ホールダブルカーソルを有効とした場合はResultSet.HOLD_CURSORS_OVER_COMMIT，無効とした場合はResultSet.CLOSE_CURSORS_AT_COMMITを返します。

カーソル動作モードの指定方法については，「ユーザプロパティ」を参照してください。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bf)　getSchemas()

【機能】

使用できるスキーマ名に関する情報を返します。

【形式】

public ResultSet getSchemas() throws SQLException

【引数】

なし。

【戻り値】

ResultSetオブジェクト

【機能詳細】

JDBC2.0の場合：

表を所有するスキーマ名だけを返します。

JDBC4.0の場合：

HiRDBサーバに存在するすべてのスキーマ名に関する情報を返します。

システム共通定義にpd_security_host_groupを指定し，指定値にUAPが動作するクライアントマシンのホストが含まれていない場合，SQLExceptionを投入します。

返却するResultSetの形式を次の表に示します。

表17‒53　getSchemasで返却するResultSetの形式

列番号

型

SQL型

列名

列の意味

1

String

VARCHAR

TABLE_SCHEM

認可識別子名

2

String

CHAR

TABLE_CATALOG

常にNULL値を返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している

データベースアクセスエラーが発生した

システム共通定義にpd_security_host_groupを指定し，指定値にUAPが動作するクライアントマシンのホストが含まれていない（JDBC4.0の場合だけ）

(bg)　getSchemaTerm()

【機能】

"schema"に対する推奨用語を返します。

【形式】

public String getSchemaTerm() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

常に"schema"を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bh)　getSearchStringEscape()

【機能】

ワイルドカード文字をエスケープするために使用する文字列を返します。

【形式】

public String getSearchStringEscape() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

常に"¥"を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bi)　getSQLKeywords()

【機能】

データベース固有のSQLキーワードであり，かつSQL92のキーワードではないすべてのキーワードを，コンマで区切ったリストで返します。

【形式】

public String getSQLKeywords() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

サーバの種類によって，返却するリストに違いがあります。

サーバがHiRDBの場合

ABS,ACCESS,AFTER,ALIAS,AMOUNT,ANDNOT,ANSI,ARRAY,ASSIGN,

ASYNC,AUTO,BASE,BEFORE,BINARY,BIT_AND_TEST,BLOB,

BOOLEAN,BREADTH,BTREE,BUFFER,BYTE,CALL,CHANGE,CLUSTER,

COLUMNS,COMMENT,COMPLETION,COMPRESSED,CONDITION,

CONFIGURATION,CONST,CONSTRUCTOR,CONTIGUOUS,

COUNT_FLOAT,CURAID,CYCLE,DATA,DATABASE,DAYS,DBA,DEFER,

DEMOTING,DEPTH,DEVICE,DICTIONARY,DIGITS,DIRECT,DO,

DOUBLE_PRECISION,EACH,EDIT,ELSEIF,ENCRYPT,EQUALS,

ESTIMATED,EXCLUSIVE,EXIT,EXTERN,FILE,FIX,FIXED,FLAT,FORCE,

FREE,FUNCTION,GENERAL,GET_JAVA_STORED_ROUTINE_SOURCE,

HANDLER,HASH,HELP,HEX,HiRDB,HOURS,HUGE,IDENTIFIED,IF,

IGNORE,INDEX,INOUT,IS_USER_CONTAINED_IN_HDS_GROUP,LARGE,

LEAVE,LENGTH,LESS,LIMIT,LINES,LINK,LIST,LOCATOR,LOCK,

LOCKS,LOGID,LOGNAME,LONG,LOOP,MASTER,MAXUSAGES,MCHAR,

MINUTES,MOD,MODE,MODIFY,MONTHS,MOVE,MVARCHAR,NEW,

NONE,NOWAIT,NULLABLE,NVARCHAR,OBJECT,OFF,OFFSET,OID,

OLD,OPERATION,OPERATORS,OPTIMIZE,OTHERS,OUT,OVER,

OVERFLOW,OWN,PAGE,PARAMETERS,PARTITIONED,PCTFREE,

PENDANT,PIC,PICTURE,PREALLOCATED,PREFERRED,PREORDER,

PRIVATE,PROGRAM,PROTECTED,PURGE,RANDOM,RD,RDAREA,

RECOMPILE,RECOVERABLE,RECOVERY,RECURSIVE,REF,

REFERENCING,REGLIKE,RELEASE,RELEASING,RENAME,

RESIGNAL,RESTART,RETURN,RETURNS,ROLE,ROOT,ROUTINE,ROW,

ROWID,SAVEPOINT,SCALE,SCAN,SCHEMAS,SCOPE,SD,SEARCH,

SECONDS,SEGMENT,SENSITIVE,SEPARATE,SEPARATOR,SEQUENCE,

SFLIKE,SHARE,SHORT,SIGNAL,SIMILAR,SLOCK,SMALLFLT,SPLIT,

SQLCODE_OF_LAST_CONDITION,SQLCODE_TYPE,SQLCOUNT,SQLDA,

SQLERRM,SQLERRM_OF_LAST_CONDITION,SQLERRMC,SQLERRML,

SQLEXCEPTION,SQLNAME,SQL_STANDARD,SQLWARN,

SQLWARNING,START,STATIC,STOP,STOPPING,STRUCTURE,SUBSTR,

SUPPRESS,SYNONYM,TEST,TEXT,THERE,TIMESTAMP_FORMAT,

TREAT,TRIGGER,TYPE,UAMT,UBINBUF,UCHAR,UDATE,UHANT,

UHDATE,UNDER,UNIFY_2000,UNIONALL,UNLIMITED,UNLOCK,UNTIL,

USE,UTIME,UTXTBUF,VARCHAR_FORMAT,VARIABLE,VIRTUAL,

VISIBLE,VOLATILE,VOLUME,VOLUMES,WAIT,WHILE,WITHOUT,

XLIKE,XLOCK,XML,XMLAGG,XMLEXISTS,XMLPARSE,XMLQUERY,

XMLSERIALIZE,YEARS

サーバがXDM/RD E2の場合

ABS,ANDNOT,ARRAY,ASSIGN,AUDIT,BINARY,BLOB,BOOLEAN,CALL,

CARDINALITY,CHANGE,CLOB,CLUSTER,COMMENT,COMPRESSED,

CORR,COUNT,COVAR_POP,COVAR_SAMP,CUBE,CUME_DIST,

CURRENT_ROLE,DATA,DAYS,DBA,DENSE_RANK,DIGITS,DO,EACH,

ELSEIF,EVERY,EXCLUSIVE,FALSE,FILTER,FIX,FLAT,FORCE,

FUNCTION,GROUPING,HEX,HOURS,IDENTIFIED,IF,INDEX,INOUT,

ITERATE,LABEL,LARGE,LEAVE,LENGTH,LIMIT,LIST,LOCK,LONG,

LOOP,MCHAR,MICROSECOND,MICROSECONDS,MINUTES,MOD,

MODE,MONTHS,MVARCHAR,NEW,NONLOCAL,NOWAIT,NVARCHAR,

OLD,OPTIMIZE,OUT,OVER,OVERLAY,OWN,PARTITION,PCTFREE,

PERCENT_RANK,PERCENTILE_CONT,PERCENTILE_DISC,PRIVATE,

PROGRAM,PROTECTED,PURGE,RANGE,RANK,RDAREA,RDNODE,

RECURSIVE,REFERENCING,REGR_AVGX,REGR_AVGY,REGR_COUNT,

REGR_INTERCEPT,REGR_R2,REGR_SLOPE,REGR_SXX,REGR_SXY,

REGR_SYY,RELEASE,REPEAT,RESERVED,RETURN,RETURNS,ROLLUP,

ROUTINE,ROW,ROW_NUMBER,ROWID,SECONDS,SHARE,SIGNAL,

SMALLFLT,SPECIFIC,SQLCOUNT,SQLDA,SQLERRM,SQLERRMC,

SQLERRML,SQLNAME,SQLWARN,STDDEV_POP,STDDEV_SAMP,

STOPPING,SUBSTR,TIMESTAMP_FORMAT,TRIGGER,TYPE,

UNBOUNDED,UNDER,UNTIL,USER_AUDIT,USER_GROUP,

USER_LEVEL,VAR_POP,VAR_SAMP,VARCHAR_FORMAT,WAIT,WHILE,

WINDOW,WITHIN,WITHOUT,YEARS

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bj)　getSQLStateType()

【機能】

SQLException.getSQLStateによって返されるSQLSTATEが，X/OpenのSQL CLIであるかSQL99であるかを返します。

【形式】

public int getSQLStateType() throws SQLException

【引数】

なし。

【戻り値】

int型：

SQLSTATEの型。sqlStateXOpen又はsqlStateSQL99。

【機能詳細】

サーバがHiRDBの場合

クライアント環境変数PDSTANDARDSQLSTATEにYESを設定している場合，又はクライアント環境変数PDSTANDARDSQLSTATEを省略してシステム共通定義pd_standard_sqlstateがYの場合，SQLSTATEにはSQL2003の値を設定するため，戻り値にはsqlStateSQL99を設定します。

上記以外の場合，SQLSTATEにはHiRDB独自の値を設定するため，戻り値には0を設定します。

サーバがXDM/RD E2の場合

戻り値にsqlStateSQL99を設定します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bk)　getStringFunctions()

【機能】

文字列関数を，コンマで区切ったリストで返します。

【形式】

public String getStringFunctions() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

サーバがHiRDBの場合，次のリストを返します。

ASCII,CHAR,INSERT,LCASE,LEFT,LENGTH,LOCATE,LTRIM,REPLACE,RIGHT,RTRIM,SUBSTRING,UCASE

サーバがXDM/RD E2の場合，次のリストを返します。

LCASE,LENGTH,LOCATE,LTRIM,POSITION,REPLACE,RTRIM,SUBSTRING,UCASE

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bl)　getSuperTables(String catalog,String schemaPattern,String tableNamePattern)

【機能】

特定のスキーマで定義されているテーブル階層の説明を返します。

【形式】

public ResultSet getSuperTables(String catalog,String schemaPattern,String tableNamePattern) throws SQLException

【引数】

String catalog：

カタログ名

String schemaPattern：

スキーマ名パターン

String tableNamePattern：

テーブル名パターン

【戻り値】

ResultSetオブジェクト

【機能詳細】

HiRDB，XDM/RD E2では，テーブル階層は未サポートのため，常に検索結果行数0のResultSetを返します。すべての引数について妥当性チェックを行いません。返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

列の意味

1

String

CHAR

TABLE_CAT

カタログ名

2

String

VARCHAR

TABLE_SCHEM

認可識別子

3

String

VARCHAR

TABLE_NAME

型名

4

String

VARCHAR

SUPERTABLE_NAME

スーパタイプ名

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bm)　getSuperTypes(String catalog,String schemaPattern,String typeNamePattern)

【機能】

特定のスキーマで定義されているユーザ定義型階層の説明を返します。

【形式】

public ResultSet getSuperTypes(String catalog,String schemaPattern,String typeNamePattern) throws SQLException

【引数】

String catalog：

カタログ名

String schemaPattern：

スキーマ名パターン

String typeNamePattern：

ユーザ定義型名パターン

【戻り値】

ResultSetオブジェクト

【機能詳細】

TYPE4 JDBCドライバでは，ユーザ定義型は未サポートのため，常に検索結果行数0のResultSetを返します。すべての引数について妥当性チェックを行いません。返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

列の意味

1

String

CHAR

TYPE_CAT

ユーザ定義型のカタログ名

2

String

VARCHAR

TYPE_SCHEM

ユーザ定義型のスキーマ名

3

String

VARCHAR

TYPE_NAME

ユーザ定義型の型名

4

String

CHAR

SUPERTYPE_CAT

直接のスーパタイプのカタログ名

5

String

VARCHAR

SUPERTYPE_SCHEM

直接のスーパタイプのスキーマ名

6

String

VARCHAR

SUPERTYPE_NAME

直接のスーパタイプ名

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bn)　getSystemFunctions()

【機能】

使用できるシステム関数を返します。

【形式】

public String getSystemFunctions() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

常に"USER"を返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bo)　getTablePrivileges(String catalog,String schemaPattern,String tableNamePattern)

【機能】

テーブルのアクセス権に関する記述を返します。

【形式】

public ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern)throws SQLException

【引数】

String catalog：

カタログ名。このドライバでは無視します。

String schemaPattern：

スキーマ名パターン。null又は0長文字列を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String tableNamePattern：

テーブル名パターン。null又は0長文字列を指定している場合，テーブル名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定されたテーブルに対するアクセス権に関する記述を返します。返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

ソート※

列の意味

1

String

CHAR

TABLE_CAT

−

カタログ名

常にNULL値を返します。

2

String

VARCHAR

TABLE_SCHEM

1（昇順）

認可識別子名

3

String

VARCHAR

TABLE_NAME

2（昇順）

テーブル名

4

String

VARCHAR

GRANTOR

−

アクセス権の付与者

5

String

VARCHAR

GRANTEE

−

アクセス権の被付与者

6

String

VARCHAR

PRIVILEGE

3（昇順）

許可されているアクセス権限名。複数のアクセス権限を許可されている場合は，コンマ（,）で区切って返します。

SELECT：SELECT権限

INSERT：INSERT権限

UPDATE：UPDATE権限

DELETE：DELETE権限

7

String

VARCHAR

IS_GRANTABLE

−

アクセス権の被付与者が，別のユーザにアクセス権を与えることができるかを表します。

YES：与えることができます。

NO：与えることができません。

null：与えることができるかどうか不明です。

HiRDB,XDM/RD E2共に,nullは返しません。PRIVILEGEに設定されたアクセス権限が複数ある場合，その内の一つ以上のアクセス権限を別のユーザに与えることができれば，YESを設定します。

（凡例）

−：該当しません。

注※

ソートのキー列の優先順位を示します。

【発生する例外】

次のどちらかの場合，例外SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行した場合

データベースアクセスエラーが発生した場合

(bp)　getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

【機能】

テーブルに関する記述を返します。

【形式】

public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException

【引数】

String catalog：

未使用。

String schemaPattern：

スキーマ名パターン。引数の値は大文字と小文字を区別します。

String tableNamePattern：

テーブル名パターン。引数の値は大文字と小文字を区別します。

String[] types：

テーブルの型のリスト。getTableTypes()メソッドによって返されるテーブルの型を指定できます。引数の値は大文字と小文字を区別します。nullの場合，"TABLE"，"VIEW"，"SYSTEM TABLE"，及び"GLOBAL TEMPORARY"のすべてが指定されたものとします。

【戻り値】

ResultSetオブジェクト

【機能詳細】

テーブルに関する記述を返します。返却するResultSetの形式を次の表に示します。

表17‒54　getTablesで返却するResultSetの形式

列番号

型

SQL型

列名

列の意味

1

String

CHAR

TABLE_CAT

常にNULL値を返します。

2

String

VARCHAR

TABLE_SCHEM

認可識別子名

3

String

VARCHAR

TABLE_NAME

テーブル名

4

String

VARCHAR

TABLE_TYPE

表の種別

TABLE：永続実表（DABroker for Java互換で"BASE TABLE"と指定されても"TABLE"と同様の動作をします）

VIEW：ビュー表

SYSTEM TABLE：ディクショナリ表

GLOBAL TEMPORARY：一時表

5

String

VARCHAR

REMARKS

コメント

6

String

CHAR

TYPE_CAT

常にNULL値を返します。

7

String

CHAR

TYPE_SCHEM

常にNULL値を返します。

8

String

CHAR

TYPE_NAME

常にNULL値を返します。

9

String

CHAR

SELF_REFERENCING_COL_NAME

常にNULL値を返します。

10

String

CHAR

REF_GENERATION

常にNULL値を返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合

引数String[] typeの一つ以上の要素がnullである場合

引数String[] typeの一つ以上の要素が，次のすべての文字列に該当しない場合

"TABLE"，"VIEW"，"SYSTEM TABLE"，"BASE TABLE"，"GLOBAL TEMPORARY"

(bq)　getTableTypes()

【機能】

使用できるテーブルの型を返します。

【形式】

public ResultSet getTableTypes()throws SQLException

【引数】

なし。

【戻り値】

ResultSetオブジェクト

【機能詳細】

使用できるテーブルの型を返します。返却するResultSetの形式を次に示します。

列番号

型

SQL型

列名

列の意味

1

String

VARCHAR

TABLE_TYPE

表の種別

TABLE：永続実表

VIEW：ビュー表

SYSTEM TABLE：ディクショナリ表

GLOBAL TEMPORARY：一時表

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(br)　getTimeDateFunctions()

【機能】

使用できる時間関数と日付関数をコンマで区切ったリストを返します。

【形式】

public String getTimeDateFunctions() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【機能詳細】

サーバがHiRDBの場合，次のリストを返します。

ADD_INTERVAL,CENTURY,CHARACTER,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,

DATE,DATE_TIME,DAYNAME,DAYOFWEEK,DAYOFYEAR,DAY,DAYS,INTERVAL_DATETIMES,

HALF,HOUR,LAST_DAY,MIDNIGHTSECONDS,MINUTE,MONTH,MONTHNAME,MONTHS_BETWEEN,

NEXT_DAY,QUARTER,ROUNDMONTH,SECOND,TIME,TIMESTAMP,TIMESTAMP_FORMAT,TRUNCYEAR,

VARCHAR_FORMAT,WEEK,WEEKOFMONTH,YEAR,YEARS_BETWEEN

サーバがXDM/RD E2の場合，次のリストを返します。

CURDATE,CURRENT_DATE,CURTIME,CURRENT_TIME,CURRENT_TIMESTAMP,HOUR,MINUTE,MONTH,NOW,SECOND,YEAR

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bs)　getTypeInfo()

【機能】

標準SQLの型に関する記述を返します。

【形式】

public ResultSet getTypeInfo() throws SQLException

【引数】

なし。

【戻り値】

ResultSetオブジェクト

【機能詳細】

標準SQLの型に関する記述を返します。返却するResultSetの形式を次の表に示します。

表17‒55　getTypeInfoで返却するResultSetの形式

列番号

型

SQL型

列名

列の意味

1

String

VARCHAR

TYPE_NAME

型名

2

short

SMALLINT

DATA_TYPE

java.sql.TypesのSQLデータ型

3

int

INTEGER

PRECISION

最大の精度

4

String

VARCHAR

LITERAL_PREFIX

リテラルを引用するのに使用する接頭辞

5

String

VARCHAR

LITERAL_SUFFIX

リテラルを引用するのに使用する接尾辞

6

String

VARCHAR

CREATE_PARAMS

型の作成に使用するパラメタ

7

short

SMALLINT

NULLABLE

この型にNULLを使用できるかどうかを返します。

typeNoNulls：NULL値を使用できません。

typeNullable：NULL値を使用できます。

typeNullableUnknown：NULL値を使用できるか不明です。

常にtypeNullableUnknownを返します。

8

boolean

BIT

CASE_SENSITIVE

大文字と小文字を区別するかどうかを返します。

true：文字列系データ型

false：その他のデータ型

9

short

SMALLINT

SEARCHABLE

この型に"WHERE"を使用できるかどうかを返します。

typePredNone：使用できません。

typePredChar：WHERE..LIKEだけ使用できます。

typePredBasic：WHERE..LIKE以外を使用できます。

typeSearchable：すべてのWHERE..を使用できます。

常にtypeSearchableを返します。

10

boolean

BIT

UNSIGNED_ATTRIBUTE

符号無し属性かどうかを返します。

数値データは符号有りのためfalse，その他のデータ型は符号の有無に関係ないためfalseを返します。

11

boolean

BIT

FIXED_PREC_SCALE

通貨の値になれるかどうかを返します。

常にfalseを返します。

12

boolean

BIT

AUTO_INCREMENT

自動インクリメントの値に使用できるかどうかを返します。

常にfalseを返します。

13

String

VARCHAR

LOCAL_TYPE_NAME

型名の地域対応されたバージョン

型名と同じものを返します。

14

short

SMALLINT

MINIMUM_SCALE

サポートされる最小スケール

15

short

SMALLINT

MAXIMUM_SCALE

サポートされる最大スケール

16

int

INTEGER

SQL_DATA_TYPE

常にNULL値を返します。

17

int

INTEGER

SQL_DATETIME_SUB

常にNULL値を返します。

18

int

INTEGER

NUM_PREC_RADIX

数値データは2又は10，

それ以外は0

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bt)　getUDTs(String catalog,String schemaPattern,String typeNamePattern,int[] types)

【機能】

ユーザ定義型に関する情報を返します。

【形式】

public ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) throws SQLException

【引数】

String catalog：

カタログ名

String schemaPattern：

スキーマ名パターン

String typeNamePattern：

型名パターン

int[] types：

ユーザ定義型のリスト

【戻り値】

ResultSetオブジェクト

【機能詳細】

Type4 JDBCドライバでは，ユーザ定義型は未サポートのため，常に検索結果行数0のResultSetを返します。すべての引数について妥当性チェックを行いません。返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

列の意味

1

String

CHAR

TYPE_CAT

ユーザ定義型のカタログ名

2

String

VARCHAR

TYPE_SCHEM

ユーザ定義型のスキーマ名

3

String

VARCHAR

TYPE_NAME

ユーザ定義型の型名

4

String

VARCHAR

CLASS_NAME

Javaクラス名

5

int

INTEGER

DATA_TYPE

java.sql.Typesで定義されている型値

6

String

VARCHAR

REMARKS

型に関する説明

7

short

SMALLINT

BASE_TYPE

DISTINCT型のソースの型の型コード，又はjava.sql.Typesで定義される構造型のSELF_REFERENCING_COLUMNのユーザ生成参照型を実装する型の型コード

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bu)　getURL()

【機能】

HiRDB又はXDM/RD E2に接続したURLを返します。URLがない場合はNULLを返します。

【形式】

public String getURL() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bv)　getUserName()

【機能】

HiRDB又はXDM/RD E2に接続する際に使用したユーザ名を返します。

OSログインユーザの簡易認証機能を使用している場合は，簡易認証キーワードを返します。

【形式】

public String getUserName() throws SQLException

【引数】

なし。

【戻り値】

Stringオブジェクト

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bw)　getVersionColumns(String catalog,String schema,String table)

【機能】

テーブル中の行が更新された場合に，自動的に更新されるテーブルの列に関する記述を返します。

【形式】

public ResultSet getVersionColumns(String catalog,String schema,String table) throws SQLException

【引数】

String catalog：

カタログ名

String schema：

スキーマ名

String table：

テーブル名

【戻り値】

ResultSetオブジェクト

【機能詳細】

HiRDB，XDM/RD E2では，自動的に列を更新する機能は未サポートのため，常に検索結果行数0のResultSetを返します。すべての引数について妥当性チェックを行いません。返却するResultSetの形式を次に示します。

列番号

型

SQL型（Types）

列名

列の意味

1

short

SMALLINT

SCOPE

未使用

2

String

VARCHAR

COLUMN_NAME

列名

3

int

INTEGER

DATA_TYPE

SQL型

4

String

VARCHAR

TYPE_NAME

データソース依存の型名

5

int

INTEGER

COLUMN_SIZE

データの精度

6

int

INTEGER

BUFFER_LENGTH

データのバイト数

7

short

SMALLINT

DECIMAL_DIGITS

スケール

8

short

SMALLINT

PSEUDO_COLUMN

列が擬似列かどうかを表します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bx)　insertsAreDetected(int type)

【機能】

ResultSet.rowInserted()メソッドを呼び出すことによって，可視の行が挿入されたことを検出できるかどうかを返します。

【形式】

public boolean insertsAreDetected(int type) throws SQLException

【引数】

int type：

ResultSetの型。次のどれかです。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

【戻り値】

boolean型：

true：指定された結果セットの型によって変更が検出されます。

false：指定された結果セットの型によって変更が検出されません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(by)　isCatalogAtStart()

【機能】

完全修飾されたテーブル名の開始部分（又は終了部分）に，カタログが現れるかどうかを返します。

【形式】

public boolean isCatalogAtStart() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：完全修飾されたテーブル名の開始部分にカタログ名が現れます。

false：完全修飾されたテーブル名の開始部分にカタログ名が現れません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(bz)　isReadOnly()

【機能】

データベースが読み込み専用モードかどうかを返します。

【形式】

public boolean isReadOnly() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：読み込み専用モードです。

false：読み込み専用モードではありません。

【機能詳細】

常にfalseを返します。

注意：

サーバがXDM/RD E2の場合，Database Connection Serverの起動制御文，又は運用コマンドで，データベースのアクセスモードをREADに設定すると読み込み専用となりますが，JDBCドライバはアクセスモードの情報をサーバから取得していないので，アクセスモードがUPDATEであると仮定して処理します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ca)　locatorsUpdateCopy()

【機能】

LOBへの変更が，コピーに対して行われたのか，LOBに直接行われたのかを示します。

【形式】

public boolean locatorsUpdateCopy() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true ：変更がLOBのコピーに対して行われました。

false：変更がLOBに直接行われました。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cb)　nullPlusNonNullIsNull()

【機能】

NULL値と非NULL値の連結を，NULLとするかどうかを返します。

【形式】

public boolean nullPlusNonNullIsNull() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：NULL値と非NULL値の連結をNULLとします。

false：NULL値と非NULL値の連結をNULLとしません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cc)　nullsAreSortedAtEnd()

【機能】

NULL値が，終了時にソート順に関係なくソートされるかどうかを返します。

【形式】

public boolean nullsAreSortedAtEnd() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：ソートされます。

false：ソートされません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cd)　nullsAreSortedAtStart()

【機能】

NULL値が，開始時にソート順に関係なくソートされるかどうかを返します。

【形式】

public boolean nullsAreSortedAtStart() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：ソートされます。

false：ソートされません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ce)　nullsAreSortedHigh()

【機能】

NULL値が高位にソートされるかどうかを返します。

【形式】

public boolean nullsAreSortedHigh() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：ソートされます。

false：ソートされません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cf)　nullsAreSortedLow()

【機能】

NULL値が下位にソートされるかどうかを返します。

【形式】

public boolean nullsAreSortedLow() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：ソートされます。

false：ソートされません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cg)　othersDeletesAreVisible(int type)

【機能】

ほかで行われた削除が可視かどうかを返します。

【形式】

public boolean othersDeletesAreVisible(int type) throws SQLException

【引数】

int type：

ResultSetの型。次のどれかです。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

【戻り値】

boolean型：

true：可視です。

false：可視ではありません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ch)　othersInsertsAreVisible(int type)

【機能】

ほかで行われた挿入が可視かどうかを返します。

【形式】

public boolean othersInsertsAreVisible(int type) throws SQLException

【引数】

int type：

ResultSetの型。次のどれかです。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

【戻り値】

boolean型：

true：可視です。

false：可視ではありません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ci)　othersUpdatesAreVisible(int type)

【機能】

ほかで行われた削除が可視かどうかを返します。

【形式】

public boolean othersUpdatesAreVisible(int type) throws SQLException

【引数】

int type：

ResultSetの型。次のどれかです。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

【戻り値】

boolean型：

true：可視です。

false：可視ではありません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cj)　ownDeletesAreVisible(int type)

【機能】

結果セット自身の削除が可視かどうかを返します。

【形式】

public boolean ownDeletesAreVisible(int type) throws SQLException

【引数】

int type：

ResultSetの型。次のどれかです。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

【戻り値】

boolean型：

true：可視です。

false：可視ではありません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ck)　ownInsertsAreVisible(int type)

【機能】

結果セット自身の挿入が可視かどうかを返します。

【形式】

public boolean ownInsertsAreVisible(int type) throws SQLException

【引数】

int type：

ResultSetの型。次のどれかです。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

【戻り値】

boolean型：

true：可視です。

false：可視ではありません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cl)　ownUpdatesAreVisible(int type)

【機能】

結果セット自身の更新が可視かどうかを返します。

【形式】

public boolean ownUpdatesAreVisible(int type) throws SQLException

【引数】

int type：

ResultSetの型。次のどれかです。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

【戻り値】

boolean型：

true：可視です。

false：可視ではありません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cm)　storesLowerCaseIdentifiers()

【機能】

大文字と小文字が混在する引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，小文字で格納するかどうかを返します。

【形式】

public boolean storesLowerCaseIdentifiers() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：大文字と小文字を区別しないで，小文字で格納します。

false：大文字と小文字を区別して格納します。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cn)　storesLowerCaseQuotedIdentifiers()

【機能】

大文字と小文字が混在する引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，小文字で格納するかどうかを返します。

【形式】

public boolean storesLowerCaseQuotedIdentifiers() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：大文字と小文字を区別しないで，小文字で格納します。

false：上記ではありません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(co)　storesMixedCaseIdentifiers()

【機能】

大文字と小文字が混在する引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，大文字と小文字を混在して格納するかどうかを返します。

【形式】

public boolean storesMixedCaseIdentifiers() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：大文字と小文字を区別しないで処理し，大文字と小文字を混在して格納します。

false：上記ではありません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cp)　storesMixedCaseQuotedIdentifiers()

【機能】

大文字と小文字が混在する引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，大文字と小文字を混在して格納するかどうかを返します。

【形式】

public boolean storesMixedCaseQuotedIdentifiers() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：大文字と小文字を区別しないで処理し，大文字と小文字を混在して格納します。

false：上記ではありません。

【機能詳細】

常にtrueを返します。

注意：

実際には大文字と小文字を区別して処理しますが，結果として大文字と小文字を混在して格納するので，trueを返します。大文字と小文字を区別して処理するかどうかは，supportsMixedCaseQuotedIdentifiersメソッドで判定できます。

サーバがXDM/RD E2の場合，XDM/RD E2のRD環境定義で，DELIMITED ID UPPERオペランドにYES（デフォルトはNO）を指定しているときは大文字で格納しますが，JDBCドライバはDELIMITED ID UPPERオペランドの情報をサーバから取得していないので，デフォルトのNOであると仮定して処理します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cq)　storesUpperCaseIdentifiers()

【機能】

大文字と小文字が混在する引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，大文字で格納するかどうかを返します。

【形式】

public boolean storesUpperCaseIdentifiers() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：大文字と小文字を区別しないで処理し，大文字で格納します。

false：上記ではありません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cr)　storesUpperCaseQuotedIdentifiers()

【機能】

大文字と小文字が混在する引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，大文字で格納するかどうかを返します。

【形式】

public boolean storesUpperCaseQuotedIdentifiers() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：大文字と小文字を区別しないで処理し，大文字で格納します。

false：上記ではありません。

【機能詳細】

常にfalseを返します。

注意：

サーバがXDM/RD E2の場合，XDM/RD E2のRD環境定義で，DELIMITED ID UPPERオペランドにYES（デフォルトはNO）を指定しているときは大文字で格納しますが，JDBCドライバからはDELIMITED ID UPPERオペランドの情報を取得できないので，JDBCドライバはデフォルトのNOであると仮定して処理します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cs)　supportsAlterTableWithAddColumn()

【機能】

追加列のあるALTER TABLEが，サポートされているかどうかを返します。

【形式】

public boolean supportsAlterTableWithAddColumn() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ct)　supportsAlterTableWithDropColumn()

【機能】

ドロップ列のあるALTER TABLEが，サポートされているかどうかを返します。

【形式】

public boolean supportsAlterTableWithDropColumn() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cu)　supportsANSI92EntryLevelSQL()

【機能】

ANSI92エントリレベルのSQL文法が，サポートされるかどうかを返します。

【形式】

public boolean supportsANSI92EntryLevelSQL() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cv)　supportsANSI92FullSQL()

【機能】

ANSI92完全レベルのSQL文法が，サポートされるかどうかを返します。

【形式】

public boolean supportsANSI92FullSQL() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cw)　supportsANSI92IntermediateSQL()

【機能】

ANSI92中間レベルのSQL文法が，サポートされるかどうかを返します。

【形式】

public boolean supportsANSI92IntermediateSQL() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cx)　supportsBatchUpdates()

【機能】

バッチ更新をサポートしているかどうかを返します。

【形式】

public boolean supportsBatchUpdates() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cy)　supportsCatalogsInDataManipulation()

【機能】

データ操作文でカタログ名を使用できるかどうかを返します。

【形式】

public boolean supportsCatalogsInDataManipulation() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：カタログ名を使用できます。

false：カタログ名を使用できません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(cz)　supportsCatalogsInIndexDefinitions()

【機能】

インデクス定義文でカタログ名を使用できるかどうかを返します。

【形式】

public boolean supportsCatalogsInIndexDefinitions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：カタログ名を使用できます。

false：カタログ名を使用できません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(da)　supportsCatalogsInPrivilegeDefinitions()

【機能】

特権定義文でカタログ名を使用できるかどうかを返します。

【形式】

public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：カタログ名を使用できます。

false：カタログ名を使用できません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(db)　supportsCatalogsInProcedureCalls()

【機能】

プロシジャ呼び出し文でカタログ名を使用できるかどうかを返します。

【形式】

public boolean supportsCatalogsInProcedureCalls() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：カタログ名を使用できます。

false：カタログ名を使用できません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dc)　supportsCatalogsInTableDefinitions()

【機能】

テーブル定義文でカタログ名を使用できるかどうかを返します。

【形式】

public boolean supportsCatalogsInTableDefinitions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：カタログ名を使用できます。

false：カタログ名を使用できません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dd)　supportsColumnAliasing()

【機能】

カラムの別名をサポートしているかどうかを返します。

【形式】

public boolean supportsColumnAliasing() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(de)　supportsConvert()

【機能】

SQLタイプ間のCONVERT関数をサポートしているかどうかを返します。

【形式】

public boolean supportsConvert() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(df)　supportsConvert(int fromType, int toType)

【機能】

与えられたSQLタイプ間のCONVERT関数をサポートしているかどうかを返します。

【形式】

public boolean supportsConvert(int fromType, int toType) throws SQLException

【引数】

int fromType：

変換元の型。java.sql.Typesクラスの型コードです。

int toType：

変換先の型。java.sql.Typesクラスの型コードです。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

変換元の型と変換先の型の組み合わせによって値を返します。変換元の型と変換先の型の組み合わせでの戻り値を次の表に示します。

表17‒56　変換元の型と変換先の型での組み合わせでの戻り値（その1）

変換元の型

java.sql.Typesの型

変換先の型

java.sql.Typesの型

BIT

TINYINT

SMALLINT

INTEGER

BIGINT

FLOAT

REAL

DOUBLE

NUMERIC

DECIMAL

CHAR

VARCHAR

LONGVARCHAR

BIT

1

1

1

1

1

1

1

1

1

1

1

1

1

TINYINT

1

1

1

1

1

1

1

1

1

1

1

1

1

SMALLINT

1

1

1

1

1

1

1

1

1

1

1

1

1

INTEGER

1

1

1

1

1

1

1

1

1

1

1

1

1

BIGINT

1

1

1

1

1

1

1

1

1

1

1

1

1

FLOAT

1

1

1

1

1

1

1

1

1

1

1

1

1

REAL

1

1

1

1

1

1

1

1

1

1

1

1

1

DOUBLE

1

1

1

1

1

1

1

1

1

1

1

1

1

NUMERIC

1

1

1

1

1

1

1

1

1

1

1

1

1

DECIMAL

1

1

1

1

1

1

1

1

1

1

1

1

1

CHAR

1

1

1

1

1

1

1

1

1

1

1

1

1

VARCHAR

1

1

1

1

1

1

1

1

1

1

1

1

1

LONGVARCHAR

1

1

1

1

1

1

1

1

1

1

1

1

1

DATE

0

0

0

0

0

0

0

0

0

0

1

1

1

TIME

0

0

0

0

0

0

0

0

0

0

1

1

1

TIMESTAMP

0

0

0

0

0

0

0

0

0

0

1

1

1

BINARY

0

0

0

0

0

0

0

0

0

0

0

0

0

VARBINARY

0

0

0

0

0

0

0

0

0

0

0

0

0

LONGVARBINARY

0

0

0

0

0

0

0

0

0

0

0

0

0

JAVA_OBJECT

0

0

0

0

0

0

0

0

0

0

0

0

0

STRUCT

0

0

0

0

0

0

0

0

0

0

0

0

0

ARRAY

0

0

0

0

0

0

0

0

0

0

0

0

0

BLOB

0

0

0

0

0

0

0

0

0

0

0

0

0

CLOB

0

0

0

0

0

0

0

0

0

0

0

0

0

REF

0

0

0

0

0

0

0

0

0

0

0

0

0

（凡例）

0：false　1：true

表17‒57　変換元の型と変換先の型での組み合わせでの戻り値（その2）

変換元の型

java.sql.Typesの型

変換先の型

java.sql.Typesの型

DATE

TIME

TIMESTAMP

BINARY

VARBINARY

LONGVARBINARY

JAVA_OBJECT

STRUCT

ARRAY

BLOB

CLOB

REF

BIT

0

0

0

0

0

0

0

0

0

0

0

0

TINYINT

0

0

0

0

0

0

0

0

0

0

0

0

SMALLINT

0

0

0

0

0

0

0

0

0

0

0

0

INTEGER

0

0

0

0

0

0

0

0

0

0

0

0

BIGINT

0

0

0

0

0

0

0

0

0

0

0

0

FLOAT

0

0

0

0

0

0

0

0

0

0

0

0

REAL

0

0

0

0

0

0

0

0

0

0

0

0

DOUBLE

0

0

0

0

0

0

0

0

0

0

0

0

NUMERIC

0

0

0

0

0

0

0

0

0

0

0

0

DECIMAL

0

0

0

0

0

0

0

0

0

0

0

0

CHAR

1

1

1

0

0

0

0

0

0

0

0

0

VARCHAR

1

1

1

0

0

0

0

0

0

0

0

0

LONGVARCHAR

1

1

1

0

0

0

0

0

0

0

0

0

DATE

1

0

1

0

0

0

0

0

0

0

0

0

TIME

0

1

0

0

0

0

0

0

0

0

0

0

TIMESTAMP

1

0

1

0

0

0

0

0

0

0

0

0

BINARY

0

0

0

1

1

1

0

0

0

0

0

0

VARBINARY

0

0

0

1

1

1

0

0

0

0

0

0

LONGVARBINARY

0

0

0

1

1

1

0

0

0

0

0

0

JAVA_OBJECT

0

0

0

0

0

0

0

0

0

0

0

0

STRUCT

0

0

0

0

0

0

0

0

0

0

0

0

ARRAY

0

0

0

0

0

0

0

0

0

0

0

0

BLOB

0

0

0

0

0

0

0

0

0

0

0

0

CLOB

0

0

0

0

0

0

0

0

0

0

0

0

REF

0

0

0

0

0

0

0

0

0

0

0

0

（凡例）

0：false　1：true

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dg)　supportsCoreSQLGrammar()

【機能】

ODBC Core SQL文法をサポートしているかどうかを返します。

【形式】

public boolean supportsCoreSQLGrammar() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dh)　supportsCorrelatedSubqueries()

【機能】

照合関連サブクエリーをサポートしているかどうかを返します。

【形式】

public boolean supportsCorrelatedSubqueries() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(di)　supportsDataDefinitionAndDataManipulationTransactions()

【機能】

トランザクションで，データ定義文とデータ操作文の両方をサポートしているかどうかを返します。

【形式】

public boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

サーバがHiRDBの場合，falseを返します。

サーバがXDM/RD E2の場合，trueを返します。

注意：

サーバがXDM/RD E2の場合，データ操作文を実行したトランザクションが決着していない状態で，データ定義文を実行できます。ただし，データ定義文がトランザクションを強制的にコミットさせます。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dj)　supportsDataManipulationTransactionsOnly()

【機能】

トランザクションで，データ操作文だけをサポートしているかどうかを返します。

【形式】

public boolean supportsDataManipulationTransactionsOnly() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dk)　supportsDifferentTableCorrelationNames()

【機能】

テーブル相互関連名がサポートされている場合，テーブルの名前と異なる名前にするという制限があるかどうかを返します。

【形式】

public boolean supportsDifferentTableCorrelationNames() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：制限があります。

false：制限がありません。

【機能詳細】

サーバがHiRDBの場合，falseを返します。

サーバがXDM/RD E2の場合，trueを返します。

注意：

サーバがXDM/RD E2の場合，XDM/RD E2のRD環境定義で，RANGE VARIABLEオペランドにUSE（デフォルトはNOUSE）を指定しているときは，テーブルの名前と同じ相関名を使用できます。しかし，JDBCドライバは，RANGE VARIABLEオペランドの情報をサーバから取得していないので，このメソッドは，デフォルトのNOUSEであると仮定してtrueを返します。JDBCドライバ自身は，テーブルの名前と同じ相関名の使用を制限していません。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dl)　supportsExpressionsInOrderBy()

【機能】

"ORDER BY"リスト中の式をサポートしているかどうかを返します。

【形式】

public boolean supportsExpressionsInOrderBy() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

サーバがHiRDBの場合，falseを返します。

サーバがXDM/RD E2の場合，trueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dm)　supportsExtendedSQLGrammar()

【機能】

ODBC Extended SQL文法をサポートしているかどうかを返します。

【形式】

public boolean supportsExtendedSQLGrammar() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dn)　supportsFullOuterJoins()

【機能】

完全ネストの外部結合をサポートしているかどうかを返します。

【形式】

public boolean supportsFullOuterJoins() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(do)　supportsGetGeneratedKeys()

【機能】

文が実行された後に自動生成キーを取得できるかどうかを返します。

【形式】

public boolean supportsGetGeneratedKeys() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：自動生成キーを取得できます。

false：自動生成キーを取得できません。

【機能詳細】

Type4 JDBCドライバでは，自動生成キーは未サポートのため，常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dp)　supportsGroupBy()

【機能】

"GROUP BY"節のフォームをサポートしているかどうかを返します。

【形式】

public boolean supportsGroupBy() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dq)　supportsGroupByBeyondSelect()

【機能】

SELECT中のすべてのカラムを指定するという条件で，"GROUP BY"節がSELECT中にないカラムを使用できるかどうかを返します。

【形式】

public boolean supportsGroupByBeyondSelect() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：使用できます。

false：使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dr)　supportsGroupByUnrelated()

【機能】

"GROUP BY"節が，SELECT中にないカラムを使用できるかどうかを返します。

【形式】

public boolean supportsGroupByUnrelated() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：使用できます。

false：使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ds)　supportsIntegrityEnhancementFacility()

【機能】

SQL Integrity Enhancement Facilityをサポートしているかどうかを返します。

【形式】

public boolean supportsIntegrityEnhancementFacility() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dt)　supportsLikeEscapeClause()

【機能】

"LIKE"節で，エスケープ文字をサポートしているかどうかを返します。

【形式】

public boolean supportsLikeEscapeClause() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(du)　supportsLimitedOuterJoins()

【機能】

外部結合に関し，制限されたサポートがあるかどうかを返します。

【形式】

public boolean supportsLimitedOuterJoins() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dv)　supportsMinimumSQLGrammar()

【機能】

ODBC Minimum SQL文法をサポートしているかどうかを返します。

【形式】

public boolean supportsMinimumSQLGrammar() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dw)　supportsMixedCaseIdentifiers()

【機能】

大文字と小文字が混在する引用符なしのSQL識別子を，大文字と小文字を区別して処理し，結果として大文字と小文字を混在して格納するかどうかを返します。

【形式】

public boolean supportsMixedCaseIdentifiers() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：結果として大文字と小文字を混在して格納します。

false：結果として大文字と小文字を混在して格納しません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dx)　supportsMixedCaseQuotedIdentifiers()

【機能】

大文字と小文字が混在する引用符付きのSQL識別子を，大文字と小文字を区別して処理し，結果として大文字と小文字を混在して格納するかどうかを返します。

【形式】

public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：結果として大文字と小文字を混在して格納します。

false：結果として大文字と小文字を混在して格納しません。

【機能詳細】

常にtrueを返します。

注意：

サーバがXDM/RD E2の場合，XDM/RD E2のRD環境定義で，DELIMITED ID UPPERオペランドにYES（デフォルトはNO）を指定しているときは大文字で格納しますが，JDBCドライバは，DELIMITED ID UPPERオペランドの情報をサーバから取得していないので，デフォルトのNOであると仮定して処理します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dy)　supportsMultipleOpenResults()

【機能】

CallableStatementオブジェクトから同時に返された複数のResultSetオブジェクトを持つことが可能かどうかを返します。

【形式】

public boolean supportsMultipleOpenResults() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：CallableStatementオブジェクトが複数のResultSetオブジェクトを同時に返すことができます。

false：CallableStatementオブジェクトが複数のResultSetオブジェクトを同時に返すことができません。

【機能詳細】

サーバがHiRDBの場合，trueを返します。

サーバがXDM/RD E2の場合，falseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(dz)　supportsMultipleResultSets()

【機能】

単一のexecuteメソッド実行からの複数ResultSetをサポートしているかどうかを返します。

【形式】

public boolean supportsMultipleResultSets() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ea)　supportsMultipleTransactions()

【機能】

一度に複数のトランザクションを（異なった接続に関し）オープンできるかどうかを返します。

【形式】

public boolean supportsMultipleTransactions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：オープンできます。

false：オープンできません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(eb)　supportsNamedParameters()

【機能】

callable文への名前付きパラメータがサポートされるかどうかを返します。

【形式】

public boolean supportsNamedParameters() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ec)　supportsNonNullableColumns()

【機能】

列を非nullとして定義できるかどうかを返します。

【形式】

public boolean supportsNonNullableColumns() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：定義できます。

false：定義できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ed)　supportsOpenCursorsAcrossCommit()

【機能】

カーソルをコミット間でオープンされた状態のままにできるかどうかを返します。

【形式】

public boolean supportsOpenCursorsAcrossCommit() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：カーソルをコミット間でオープンされた状態のままにできます。

false：カーソルをコミット間でオープンされた状態のままにできません。

【機能詳細】

Connectionインスタンス生成時のカーソル動作モード（HIRDB_CURSOR）で，ホールダブルカーソルを有効とした場合はtrue，無効とした場合はfalseを返します。カーソル動作モードの指定方法については，「ユーザプロパティ」を参照してください。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ee)　supportsOpenCursorsAcrossRollback()

【機能】

カーソルをロールバック間でオープンされた状態のままにできるかどうかを返します。

【形式】

public boolean supportsOpenCursorsAcrossRollback() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：カーソルをロールバック間でオープンされた状態のままにできます。

false：カーソルをロールバック間でオープンされた状態のままにできません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ef)　supportsOpenStatementsAcrossCommit()

【機能】

文をコミット間でオープンされた状態のままにできるかどうかを返します。

【形式】

public boolean supportsOpenStatementsAcrossCommit() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：文をコミット間でオープンされた状態のままにできます。

false：文をコミット間でオープンされた状態のままにできません。

【機能詳細】

Connectionインスタンス生成時のURL指定項目STATEMENT_COMMIT_BEHAVIORで，TRUEを指定するか同指定項目を省略した場合はtrue，同指定項目でFALSEを指定した場合はfalseを返します。URL指定項目STATEMENT_COMMIT_BEHAVIORの指定方法については，「ユーザプロパティ」を参照してください。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(eg)　supportsOpenStatementsAcrossRollback()

【機能】

文をロールバック間でオープンされた状態のままにできるかどうかを返します。

【形式】

public boolean supportsOpenStatementsAcrossRollback() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：文をロールバック間でオープンされた状態のままにできます。

false：文をロールバック間でオープンされた状態のままにできません。

【機能詳細】

Connectionインスタンス生成時のURL指定項目STATEMENT_COMMIT_BEHAVIORで，TRUEを指定するか同指定項目を省略した場合はtrue，同指定項目でFALSEを指定した場合はfalseを返します。URL指定項目STATEMENT_COMMIT_BEHAVIORの指定方法については，「ユーザプロパティ」を参照してください。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(eh)　supportsOrderByUnrelated()

【機能】

"ORDER BY"節が，SELECT中にない列を使用できるかどうかを返します。

【形式】

public boolean supportsOrderByUnrelated() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：使用できます。

false：使用できません。

【機能詳細】

常にtreuを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ei)　supportsOuterJoins()

【機能】

何らかの外部結合のフォームをサポートしているかどうかを返します。

【形式】

public boolean supportsOuterJoins() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ej)　supportsPositionedDelete()

【機能】

位置決めされたDELETEをサポートしているかどうかを返します。

【形式】

public boolean supportsPositionedDelete() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ek)　supportsPositionedUpdate()

【機能】

位置決めされたUPDATEをサポートしているかどうかを返します。

【形式】

public boolean supportsPositionedUpdate() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(el)　supportsResultSetConcurrency(int type, int concurrency)

【機能】

指定されたResultSetタイプと並行処理タイプの組み合わせをサポートしているかどうかを返します。

【形式】

public boolean supportsResultSetConcurrency(int type, int concurrency) throws SQLException

【引数】

int type：

結果セットタイプjava.sql.ResultSetで定義されている型

int concurrency：

並行処理タイプjava.sql.ResultSetで定義されている型

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

typeがTYPE_FORWARD_ONLY又はTYPE_SCROLL_INSENSITIVE，かつconcurrencyがCONCUR_READ_ONLYの場合，trueを返します。

上記以外はfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(em)　supportsResultSetHoldability(int holdability)

【機能】

指定されたResultSetオブジェクトの保持機能を，サポートしているかどうかを返します。

【形式】

public boolean supportsResultSetHoldability(int holdability) throws SQLException

【引数】

int holdability：

定数。

ResultSet.HOLD_CURSORS_OVER_COMMIT：Connection.commitメソッドが呼び出されたときにResultSetオブジェクトがクローズされません。

ResultSet.CLOSE_CURSORS_AT_COMMIT：Connection.commitメソッドが呼び出されたときにResultSetオブジェクトがクローズされます。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

指定されたResultSetオブジェクトの保持機能を，サポートしているかどうかを返します。次の値を返します。

引数holdability

HIRDB_CURSOR※

有効

無効

HOLD_CURSORS_OVER_COMMIT

trueを返します。

falseを返します。

CLOSE_CURSORS_AT_COMMIT

falseを返します。

trueを返します。

注※

Connectionインスタンス生成時のカーソル動作モード（HIRDB_CURSOR）

カーソル動作モードの指定方法については，「ユーザプロパティ」を参照してください。

【発生する例外】

次のどちらかの場合，例外SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行した場合

引数holdabilityの指定値が不正な場合

(en)　supportsResultSetType(int type)

【機能】

指定されたResultSetタイプをサポートしているかどうかを返します。

【形式】

public boolean supportsResultSetType(int type) throws SQLException

【引数】

int type：

結果セットタイプjava.sql.ResultSetで定義されている型結果セットタイプ

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

typeがTYPE_FORWARD_ONLY又はTYPE_SCROLL_INSENSITIVEの場合，trueを返します。

上記以外はfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(eo)　supportsSavepoints()

【機能】

セーブポイントをサポートしているかどうかを返します。

【形式】

public boolean supportsSavepoints() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

HiRDB，XDM/RD E2ではセーブポイントは未サポートのため，常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ep)　supportsSchemasInDataManipulation()

【機能】

データ操作文でスキーマ名を使用できるかどうかを返します。

【形式】

public boolean supportsSchemasInDataManipulation() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：スキーマ名を使用できます。

false：スキーマ名を使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(eq)　supportsSchemasInIndexDefinitions()

【機能】

インデクス定義文でスキーマ名を使用できるかどうかを返します。

【形式】

public boolean supportsSchemasInIndexDefinitions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：スキーマ名を使用できます。

false：スキーマ名を使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(er)　supportsSchemasInPrivilegeDefinitions()

【機能】

特権定義文でスキーマ名を使用できるかどうかを返します。

【形式】

public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：スキーマ名を使用できます。

false：スキーマ名を使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(es)　supportsSchemasInProcedureCalls()

【機能】

プロシジャ呼び出し文でスキーマ名を使用できるかどうかを返します。

【形式】

public boolean supportsSchemasInProcedureCalls() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：スキーマ名を使用できます。

false：スキーマ名を使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(et)　supportsSchemasInTableDefinitions()

【機能】

テーブル定義文でスキーマ名を使用できるかどうかを返します。

【形式】

public boolean supportsSchemasInTableDefinitions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：スキーマ名を使用できます。

false：スキーマ名を使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(eu)　supportsSelectForUpdate()

【機能】

UPDATE用のSELECTをサポートしているかどうかを返します。

【形式】

public boolean supportsSelectForUpdate() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ev)　supportsStatementPooling()

【機能】

文のプールをサポートしているかどうかを返します。

【形式】

public boolean supportsStatementPooling() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

Type4 JDBCドライバでは未サポートのため，常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ew)　supportsStoredProcedures()

【機能】

ストアドプロシジャコールをサポートしているかどうかを返します。

【形式】

public boolean supportsStoredProcedures() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ex)　supportsSubqueriesInComparisons()

【機能】

比較式中でサブクエリーをサポートしているかどうかを返します。

【形式】

public boolean supportsSubqueriesInComparisons() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：スキーマ名を使用できます。

false：スキーマ名を使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ey)　supportsSubqueriesInExists()

【機能】

"exists"式中でサブクエリーをサポートしているかどうかを返します。

【形式】

public boolean supportsSubqueriesInExists() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ez)　supportsSubqueriesInIns()

【機能】

"in"文中でサブクエリーをサポートしているかどうかを返します。

【形式】

public boolean supportsSubqueriesInIns() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：スキーマ名を使用できます。

false：スキーマ名を使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fa)　supportsSubqueriesInQuantifieds()

【機能】

定量化された式中でサブクエリーをサポートしているかどうかを返します。

【形式】

public boolean supportsSubqueriesInQuantifieds() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fb)　supportsTableCorrelationNames()

【機能】

テーブル相互関連名をサポートしているかどうかを返します。

【形式】

public boolean supportsTableCorrelationNames() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：スキーマ名を使用できます。

false：スキーマ名を使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fc)　supportsTransactionIsolationLevel(int level)

【機能】

与えられたトランザクションアイソレーションレベルをサポートしているかどうかを返します。

【形式】

public boolean supportsTransactionIsolationLevel(int level) throws SQLException

【引数】

int level：

java.sql.Connectionで定義されているトランザクション遮断レベル

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

levelがTRANSACTION_REPEATABLE_READ，TRANSACTION_READ_COMMITTED，TRANSACTION_READ_UNCOMMITTEDの場合にtrueを返します。

上記以外の場合はfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fd)　supportsTransactions()

【機能】

トランザクションをサポートしているかどうかを返します。

【形式】

public boolean supportsTransactions() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：スキーマ名を使用できます。

false：スキーマ名を使用できません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fe)　supportsUnion()

【機能】

SQL UNIONをサポートしているかどうかを返します。

【形式】

public boolean supportsUnion() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(ff)　supportsUnionAll()

【機能】

SQL UNION ALLをサポートしているかどうかを返します。

【形式】

public boolean supportsUnionAll() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートしています。

false：サポートしていません。

【機能詳細】

常にtrueを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fg)　updatesAreDetected(int type)

【機能】

指定されたResultSetタイプで，ResultSetに行われた更新をResultSet.rowUpdatedメソッドによって検出できるかどうかを返します。

【形式】

public boolean updatesAreDetected(int type) throws SQLException

【引数】

int type：

ResultSetの型。次のどれかです。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

【戻り値】

boolean型：

true：検出できます。

false：検出できません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fh)　usesLocalFilePerTable()

【機能】

各テーブルにファイルを使用するかどうかを返します。

【形式】

public boolean usesLocalFilePerTable() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：使用します。

false：使用しません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fi)　usesLocalFiles()

【機能】

ローカルファイルにテーブルを格納するかどうかを返します。

【形式】

public boolean usesLocalFiles() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：格納します。

false：格納しません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fj)　getRowIdLifetime()

【機能】

RowId型をサポートしているかどうかを返します。RowId型をサポートしている場合は，RowIdオブジェクトが有効になっている寿命を返します。

【形式】

public RowIdLifetime getRowIdLifetime() throws SQLException

【引数】

なし。

【戻り値】

RowIdLifeTime型：

ROWID_UNSUPPORTED：ROWID型をサポートしていません。

ROWID_VALID_OTHER：ROWIDの寿命が不確定です。

ROWID_VALID_SESSION：ROWIDの寿命がセッション中です。

ROWID_VALID_TRANSACTION：ROWIDの寿命がトランザクション中です。

ROWID_VALID_FOREVER：ROWIDの寿命が無期限です。

【機能詳細】

常にROWID_UNSUPPORTEDを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fk)　getSchemas(String catalog, String schemaPattern)

【機能】

使用できるスキーマ名に関する情報を返します。

【形式】

public ResultSet getSchemas(String catalog,String schemaPattern) throws SQLException

【引数】

String catalog：

カタログ名。このドライバでは無視します。

String schemaPattern：

スキーマ名パターン。null又は0長文字を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

HiRDBサーバに存在するすべてのスキーマ名に関する情報を返します。システム共通定義にpd_security_host_groupを指定し，指定値にUAPが動作するクライアントマシンのホストが含まれていない場合，SQLExceptionを投入します。

返却するResultSetの形式を次の表に示します。

表17‒58　返却するResultSetの形式（getSchemasメソッド）

型

SQL型

列名

列の意味

String

VARCHAR

TABLE_SCHEM

認可識別子名。

String

CHAR

TABLE_CATALOG

常にNULL値を返します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している

データベースアクセスエラーが発生した

システム共通定義にpd_security_host_groupを指定し，指定値にUAPが動作するクライアントマシンのホストが含まれていない

(fl)　supportsStoredFunctionsUsingCallSyntax()

【機能】

プロシジャエスケープ構文を使用した，ユーザ定義関数又はベンダー関数の呼び出しをサポートするかどうかを返します。

【形式】

public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：サポートします。

false：サポートしません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fm)　autoCommitFailureClosesAllResultSets()

【機能】

オートコミット有効時にSQLExceptionが発生した場合，オープンされたすべてのResultSetがクローズされるかどうかを返します。

【形式】

public boolean autoCommitFailureClosesAllResultSets() throws SQLException

【引数】

なし。

【戻り値】

boolean型：

true：クローズします。

false：クローズしません。

【機能詳細】

常にfalseを返します。

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fn)　getClientInfoProperties()

【機能】

JDBCドライバがサポートするクライアント情報プロパティのリスト情報を取得します。

【形式】

public ResultSet getClientInfoProperties() throws SQLException

【引数】

なし。

【戻り値】

ResultSetオブジェクト

【機能詳細】

JDBCドライバがサポートするクライアント情報プロパティのリスト情報を返します。常に検索結果行数0のResultSetを返します。返却するResultSetの形式を次の表に示します。

表17‒59　返却するResultSetの形式（getClientInfoPropertiesメソッド）

列番号

型

SQL型

列名

列の意味

1

String

CHAR

NAME

クライアント情報プロパティの名前

2

int

INTEGER

MAX_LEN

プロパティの値の最大長

3

String

CHAR

DEFAULT_VALUE

プロパティのデフォルト値

4

String

CHAR

DESCRIPTION

プロパティの記述

【発生する例外】

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合，SQLExceptionを投入します。

(fo)　getFunctions(String catalog, String schemaPattern, String functionNamePattern)

【機能】

関数に関する情報を返します。

【形式】

public ResultSet getFunctions(String catalog,
                              String schemaPattern,
                              String functionNamePattern)
                              throws SQLException

【引数】

String catalog：

カタログ名。このドライバでは無視します。

String schemaPattern：

スキーマ名パターン。null又は0長文字を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String functionNamePattern：

関数名パターン。関数名と一致しなければなりません。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定されたユーザ定義関数に関する情報を返します。HiRDBサーバにSQL_ROUTINES表が定義されていない場合，検索結果行数0のResultSetを返します。返却するResultSetの形式を次の表に示します。

表17‒60　返却するResultSetの形式（getFunctionsメソッド）

列番号

型

SQL型（Types）

列名

ソート※

列の意味

1

String

CHAR

FUNCTION_CAT

−

カタログ名

常にnull値を返します。

2

String

VARCHAR

FUNCTION_SCHEM

1（昇順）

認可識別子名

3

String

VARCHAR

FUNCTION_NAME

2（昇順）

関数名

4

String

VARCHAR

REMARKS

−

関数に関する説明

常にnull値を返します。

5

Short

SMALLINT

FUNCTION_TYPE

−

関数の種類

functionResultUnknown

戻り値又はテーブルが返されるかどうか判断できません。

functionNoTable

テーブルが返されません。

functionReturnsTable

テーブルが返されます。

常にfunctionNoTableを返します。

6

String

VARCHAR

SPECIFIC_NAME

3（昇順）

この関数をそのスキーマ内で一意に識別する名前

（凡例）

−：該当しません。

注※

ソートのキー列の優先順位を示します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合

データベースアクセスエラーが発生した場合

(fp)　getFunctionColumns(String catalog,String schemaPattern,String functionNamePattern,String columnNamePattern)

【機能】

関数のパラメタと返される型に関する情報を返します。

【形式】

public ResultSet getFunctionColumns(String catalog,
                                    String schemaPattern,
                                    String functionNamePattern,
                                    String columnNamePattern)
                                    throws SQLException

【引数】

String catalog：

カタログ名。このドライバでは無視します。

String schemaPattern：

スキーマ名パターン。null又は0長文字を指定している場合，スキーマ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String functionNamePattern：

関数名パターン。null又は0長文字を指定している場合，関数名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

String columnNamePattern：

パラメタ名パターン。null又は0長文字を指定している場合，パラメタ名を検索の限定に使用しません。引数の値は大文字と小文字を区別します。

【戻り値】

ResultSetオブジェクト

【機能詳細】

指定されたユーザ定義関数のパラメタと返される型に関する情報を返します。HiRDBサーバにSQL_ROUTINE_PARAMS表が定義されていない場合，検索結果行数0のResultSetを返します。返却するResultSetの形式を次の表に示します。

表17‒61　返却するResultSetの形式（getFunctionColumnsメソッド）

列番号

型

SQL型（Types）

列名

ソート※

列の意味

1

String

CHAR

FUNCTION_CAT

−

カタログ名

常にnull値を返します。

2

String

VARCHAR

FUNCTION_SCHEM

1（昇順）

認可識別子名

3

String

VARCHAR

FUNCTION_NAME

2（昇順）

関数名

4

String

VARCHAR

COLUMN_NAME

−

列/パラメタ名

5

short

SMALLINT

COLUMN_TYPE

−

列の種類/パラメタ

functionColumnUnknown

不明

functionColumnIn

INパラメタ

functionColumnInOut

INOUTパラメタ

functionColumnOut

OUTパラメタ

functionReturn

関数の戻り値

functionColumnResult

パラメタ又は列がResultSetの列

functionColumnIn，functionColumnInOut，functionColumnOut，及び

functionColumnResultについては設定しません。

6

int

INTEGER

DATA_TYPE

−

パラメタのSQL型（java.sql.Typesで定義されている値）

7

String

CHAR

TYPE_NAME

−

パラメタのSQL型名（型名を文字列で表現したもの）

8

int

INTEGER

PRECISION

−

パラメタの精度

数値データの場合

最大精度

文字データの場合

文字数

日時データ型の場合

String表現の文字数

バイナリデータの場合

バイト数

9

int

INTEGER

LENGTH

−

パラメタのサイズ

バイト数を返します。

DECIMAL型は精度に符号とピリオドを加えるため，位取りなしの場合は精度+1，位取りありの場合は精度+2となります。

10

short

SMALLINT

SCALE

−

パラメタの位取り（小数部分のけた数）

パラメタのSQL型名がDECIMAL又はTIMESTAMP以外の場合は，0を返します。

11

short

SMALLINT

RADIX

−

パラメタの基数

概数値：2

真数値：10

数値以外：0

12

short

SMALLINT

NULLABLE

−

null値可否

functionNoNulls

null値を許しません。

functionNullable

null値を許します。

functionNullableUnknown

null値を許すかどうかは不明です。

常に，functionNullableを返します。

13

String

VARCHAR

REMARKS

−

パラメタに関するコメント

常にnull値を返します。

14

int

INTEGER

CHAR_OCTET_LENGTH

−

バイナリと文字ベースのパラメタ又は列の最大長

15

int

INTEGER

ORDINAL_POSITION

4（昇順）

入力及び出力パラメタの1から始まる順番

関数の戻り値の場合は0を返します。

16

String

CHAR

IS_NULLABLE

−

パラメタ又は列でnull値を許可するかどうか

YES

null値を許します。

NO

null値を許しません。

空白

null値を許すかどうかは不明です。

常にYESを返します。

17

String

VARCHAR

SPECIFIC_NAME

3（昇順）

この関数をスキーマ内で一意に識別する名前

（凡例）

−：該当しません。

注※

ソートのキー列の優先順位を示します。

【発生する例外】

次の場合，SQLExceptionを投入します。

このメソッド実行前にConnectionオブジェクトに対してclose()を実行している場合

データベースアクセスエラーが発生した場合

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbDatabaseMetaData

(4)　注意事項

(a)　1コネクション当たりのステートメントオブジェクト数の上限

ResultSetを返却するDatabaseMetaDataのメソッドでは，内部的にステートメントオブジェクトを使用しているため，ステートメントオブジェクト数が4096以上となった場合，SQLExceptionを投入します。詳細は「Statementインタフェース」の「注意事項」を参照してください。

17.4.8　ResultSetMetaDataインタフェース

(1)　概要

ResultSetMetaDataインタフェースでは，主に次の機能が提供されます。

ResultSet（結果セット）の各列に対する，データ型及びデータ長などのメタ情報の返却

(2)　メソッド

ResultSetMetaDataインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒62　ResultSetMetaDataインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

getCatalogName(int column)

○

○

指定された列番号のテーブルでのカタログ名を返します。

getColumnClassName(int column)

○

○

カラムに対するJavaクラスの完全指定された名前を返します。

getColumnCount()

○

○

このResultSetオブジェクトの列数を返します。

getColumnDisplaySize(int column)

○

○

指定された列の通常の最大幅を，文字数で返します。

getColumnLabel(int column)

○

○

印刷や表示に使用する列の推奨タイトルを返します。

getColumnName(int column)

○

○

指定した列の名前を返します。

getColumnType(int column)

○

○

指定した列のSQLデータ型を返します。

getColumnTypeName(int column)

○

○

指定された列の，データベース固有の形名を返します。

getPrecision(int column)

○

○

指定された列のサイズを返します。

getScale(int column)

○

○

指定された列の，小数点以下のけた数を返します。

getSchemaName(int column)

○

○

指定された列のテーブルスキーマを返します。

getTableName(int column)

○

○

指定された列のテーブル名を返します。

isAutoIncrement(int column)

○

○

指定された列が自動的に番号付けされて，読み込み専用として扱われるかどうかを返します。

isCaseSensitive(int column)

○

○

列の大文字と小文字が区別されるかどうかを返します。

isCurrency(int column)

○

○

指定された列が，通貨の値かどうか返します。

isDefinitelyWritable(int column)

○

○

指定された列の書き込みが，成功するかどうかを返します。

isNullable(int column)

○

○

指定した列にNULLをセットできるかどうかを返します。

isReadOnly(int column)

○

○

指定された列が，読み取り専用かどうかを返します。

isSearchable(int column)

○

○

指定された列をwhere節で使用できるかどうかを返します。

isSigned(int column)

○

○

指定された列の値が，符号付数値かどうかを返します。

isWritable(int column)

○

○

指定された列への書き込みを，成功させることができるかどうかを返します。

（凡例）

○：提供されます。

(a)　getCatalogName(int column)

【機能】

指定された列番号のテーブルでのカタログ名を返します。

【形式】

public synchronized String getCatalogName(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

Stringオブジェクト

【機能詳細】

常にnullを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(b)　getColumnClassName(int column)

【機能】

カラムに対するJavaクラスの完全指定された名前を返します。

【形式】

public synchronized String getColumnClassName(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

Stringオブジェクト

【機能詳細】

列に対してResultSet#getObjectメソッドを実行した結果，返却するJavaクラスの型をString型で返します。列のデータ型と返却値を次の表に示します。ただし，繰返し列の場合は"java.sql.Array"を返却します。

表17‒63　getColumnClassNameで返却する文字列

列のHiRDBのデータ型

返却する文字列

BLOB

"java.lang.Object"

BINARY

"java.lang.Object"

INTEGER

"java.lang.Integer"

SMALLINT

"java.lang.Integer"

FLOAT

DOUBLE PRECISION

"java.lang.Double"

SMALLFLT

REAL

"java.lang.Float"

DECIMAL

NUMERIC

"java.math.BigDecimal"

CHAR

"java.lang.String"

MCHAR

"java.lang.String"

NCHAR

"java.lang.String"

VARCHAR

"java.lang.String"

MVARCHAR

"java.lang.String"

NVARCHAR

"java.lang.String"

DATE

"java.sql.Date"

TIME

"java.sql.Time"

TIMESTAMP

"java.sql.Timestamp"

BOOLEAN（DatabaseMetaDataから生成したResultSetにだけ存在する列）

"java.lang.Boolean"

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(c)　getColumnCount()

【機能】

このResultSetオブジェクトの列数を返します。

【形式】

public synchronized int getColumnCount()

【引数】

なし。

【戻り値】

int型：

列数

【発生する例外】

なし。

(d)　getColumnDisplaySize(int column)

【機能】

指定された列の通常の最大幅を，文字数で返します。

【形式】

public synchronized int getColumnDisplaySize(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

int型：

最大文字数

【機能詳細】

指定された列の通常の最大幅を，文字数で返します。getColumnDisplaySizeで返却する最大文字数を次の表に示します。

表17‒64　getColumnDisplaySizeで返却する最大文字数

列のHiRDBのデータ型

返却する最大文字数

BLOB(n)

BINARY(n)

n

INTEGER

11

SMALLINT

6

FLOAT

DOUBLE PRECISION

23

SMALLFLT

REAL

13

DECIMAL(n,m)

NUMERIC(n,m)

n＋2

CHAR(n)

MCHAR(n)

NCHAR(n)

VARCHAR(n)

MVARCHAR(n)

NVARCHAR(n)

n

DATE

10

TIME

8

TIMESTAMP(n)

n＞0の場合：19＋(n＋1)

n＝0の場合：19

BOOLEAN（DatabaseMetaDataから生成したResultSetにだけ存在する列）

5

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(e)　getColumnLabel(int column)

【機能】

印刷や表示に使用する列の推奨タイトルを返します。

PrdbResultSetMetaData#getColumnNameでの返却値と同じ値（列名）を返します。詳細については，「getColumnName(int column)」を参照してください。

【形式】

public synchronized String getColumnLabel(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

Stringオブジェクト

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(f)　getColumnName(int column)

【機能】

指定した列の名前を返します。

【形式】

public synchronized String getColumnName(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

Stringオブジェクト

【機能詳細】

指定した列の名前を，HiRDBの列名記述領域の内容で返します。HiRDBサーバからこのドライバに送られる，列名記述領域（SQLCNDA）中のSQLNAMEから，検索項目の名称を取得（かつJavaの内部コードに変換）して返します。ただし，SELECT文で集合関数，値式，WRITE指定を使用した場合，28バイトまで返し，29バイト目以降は，サーバ，クライアント間の通信時に切り捨てられます。また，HiRDBサーバから受け取った次の先頭文字を，このドライバは無視します。

△△

△■

（凡例）△：半角空白　■：0xff

指定した列に対するこのメソッドの返却値の内容については，「列名記述領域の構成と内容」を参照してください。

Arrayオブジェクトから取得したResultSetクラスの1列目は，JDBCドライバが生成する列であり，列名として"JDBC_Array_Index"を返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(g)　getColumnType(int column)

【機能】

指定した列のSQLデータ型を返します。列のデータ型と返却値の対応については，「SQLデータ型のマッピング」を参照してください。ただし，繰返し列の場合は"java.sql.Array"を返却します。

【形式】

public synchronized int getColumnType(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

int型：

java.sql.TypesからのSQL型

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(h)　getColumnTypeName(int column)

【機能】

指定された列の，データベース固有の形名を返します。

【形式】

public synchronized String getColumnTypeName(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

Stringオブジェクト

【機能詳細】

指定された列の，データベース固有の形名を返します。列のデータ型と返却値を次の表に示します。

表17‒65　getColumnTypeNameで返却する文字列

列のHiRDBのデータ型

返却する文字列

BLOB

"BLOB"

BINARY

"BINARY"

INTEGER

"INTEGER"

SMALLINT

"SMALLINT"

FLOAT

"FLOAT"

REAL

"REAL"

DECIMAL

"DECIMAL"

CHAR

"CHAR"

MCHAR

"MCHAR"

NCHAR

"NCHAR"

VARCHAR

"VARCHAR"

MVARCHAR

"MVARCHAR"

NVARCHAR

"NVARCHAR"

DATE

"DATE"

TIME

"TIME"

TIMESTAMP

"TIMESTAMP"

BOOLEAN（DatabaseMetaDataから生成したResultSetにだけ存在する列）

"BOOLEAN"

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(i)　getPrecision(int column)

【機能】

指定された列のサイズを返します。

【形式】

public synchronized int getPrecision(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

int型：

列のサイズ

【機能詳細】

指定された列のサイズを返します。返却する値を次の表に示します。

表17‒66　getPrecisionの返却値

列のHiRDBのデータ型

返却する値

返却値の単位

BLOB(n)，BINARY(n)

n

バイト数

INTEGER

10

10進けた数

SMALLINT

5

10進けた数

FLOAT，DOUBLE PRECISION

15

10進けた数

SMALLFLT，REAL

7

10進けた数

DECIMAL(n,m)，NUMERIC(n,m)

n

10進けた数

CHAR(n)，MCHAR(n)，VARCHAR(n)，MVARCHAR(n)

n

文字数

NCHAR(n)，NVARCHAR(n)

JDBC2.0：n×2

バイト数

JDBC4.0：n

文字数

DATE

10

文字数

TIME

8

文字数

TIMESTAMP(n)

n＞0の場合：19＋（n＋1）

n＝0の場合：19

文字数

BOOLEAN（DatabaseMetaDataから生成したResultSetにだけ存在する列）

1

バイト数

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(j)　getScale(int column)

【機能】

指定された列の，小数点以下のけた数を返します。

【形式】

public synchronized int getScale(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

int型：

列の10進けた数

【機能詳細】

指定された列の，小数点以下のけた数を返します。列のデータ型と返却値を次の表に示します。

表17‒67　getScaleで返却する値

列のHiRDBのデータ型

返却する値

DECIMAL

NUMERIC

小数点以下のけた数

TIMESTAMP

ミリ秒以下のけた数

上記以外

0

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(k)　getSchemaName(int column)

【機能】

指定された列のテーブルスキーマを返します。

【形式】

public synchronized String getSchemaName(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

Stringオブジェクト

【機能詳細】

常にnullを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(l)　getTableName(int column)

【機能】

指定された列のテーブル名を返します。

【形式】

public synchronized String getTableName(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

Stringオブジェクト

【機能詳細】

常にnullを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(m)　isAutoIncrement(int column)

【機能】

指定された列が自動的に番号付けされて，読み込み専用として扱われるかどうかを返します。

【形式】

public synchronized boolean isAutoIncrement(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

boolean型：

true：指定された列は自動的に番号付けされて，読み込み専用として扱われます。

false：指定された列は自動的に番号付けされないか，又は読み込み専用として扱われません。

【機能詳細】

常にfalseを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(n)　isCaseSensitive(int column)

【機能】

列の大文字と小文字が区別されるかどうかを返します。

【形式】

public synchronized boolean isCaseSensitive(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

boolean型：

true：列の大文字と小文字が区別されます。

false：列の大文字と小文字が区別されません。

【機能詳細】

常にfalseを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(o)　isCurrency(int column)

【機能】

指定された列が，通貨の値かどうか返します。

【形式】

public synchronized boolean isCurrency(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

boolean型：

true：列が通貨の値を示します。

false：列が通貨の値を示しません。

【機能詳細】

常にfalseを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(p)　isDefinitelyWritable(int column)

【機能】

指定された列の書き込みが，成功するかどうかを返します。

【形式】

public synchronized boolean isDefinitelyWritable(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

boolean型：

true：列の書き込みが成功します。

false：列の書き込みが成功するとは限りません。

【機能詳細】

常にfalseを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(q)　isNullable(int column)

【機能】

指定した列にNULLをセットできるかどうかを返します。

【形式】

public synchronized int isNullable(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

int型：

ResultSetMetaData.columnNoNulls：NULL値をセットできません。

ResultSetMetaData.columnNullable：NULL値をセットできます。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(r)　isReadOnly(int column)

【機能】

指定された列が，読み取り専用かどうかを返します。

【形式】

public synchronized boolean isReadOnly(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

boolean型：

true：読み取り専用です。

false：読み取り専用とは限りません。

【機能詳細】

常にfalseを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(s)　isSearchable(int column)

【機能】

指定された列をwhere節で使用できるかどうかを返します。

【形式】

public synchronized boolean isSearchable(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

boolean型：

true：where節で使用できます。

false：where節で使用できません。

【機能詳細】

DatabaseMetaDataから生成したResultSetの場合，falseを返します。

DatabaseMetaDataから生成したResultSetではない場合，trueを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(t)　isSigned(int column)

【機能】

指定された列の値が，符号付数値かどうかを返します。

【形式】

public synchronized boolean isSigned(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

boolean型：

true：符号付数値です。

false：符号付数値ではありません。

【機能詳細】

指定された列の値が，符号付数値かどうかを返します。列のデータ型と返却値を次の表に示します。

表17‒68　isSignedで返却する値

列のHiRDBのデータ型

返却する値

INTEGER

SMALLINT

FLOAT

DOUBLE PRECISION

REAL

SMALLFLT

DECIMAL

NUMERIC

true

上記以外

false

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(u)　isWritable(int column)

【機能】

指定された列への書き込みを，成功させることができるかどうかを返します。

【形式】

public synchronized boolean isWritable(int column) throws SQLException

【引数】

int column：

1から始まる列番号

【戻り値】

boolean型：

true：書き込みを成功させることができます。

false：書き込みを成功させることができません。

【機能詳細】

常にfalseを返します。

【発生する例外】

column指定値が0以下，又は列数より大きい場合，SQLExceptionを投入します。

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbResultSetMetaData

(4)　注意事項

(a)　getColumnName，getColumnLabelメソッド

getColumnName，及びgetColumnLabelメソッドは，HiRDBサーバからJDBCドライバに送られる列名記述領域（SQLCNDA）中のSQLNAMEから検索項目の名称を取得し，Javaの内部コードに変換して返却します。指定した列に対するこれらのメソッドの返却値の内容は，「列名記述領域の構成と内容」を参照してください。

17.4.9　Blobインタフェース

(1)　概要

Blobインタフェースでは，主に次の機能が提供されます。

バイナリデータの取得

バイナリデータ長の取得

パターンに一致する位置の取得

JDBCドライバは，BlobインタフェースをPrdbBlobクラスで実装します。

PrdbBlobクラスのオブジェクトは，ResultSetやCallableStatementのgetBlobメソッドの返却値として，JDBCドライバが生成します。

(2)　メソッド

Blobインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒69　Blobインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

getBinaryStream()

○

○

BLOB又はBINARY値をストリーム（PrdbDataStreamオブジェクト）として返します。

getBytes(long pos, int length)

○

○

BLOB又はBINARY値の全部又は一部をバイト配列として返します。

length()

○

○

このPrdbBlobオブジェクトによって指定されたBLOB又はBINARY値のバイト数を返します。

position(Blob pattern, long start)

○

○

PrdbBlobオブジェクトによって指定されたBLOB又はBINARY値内で，patternが始まるバイト位置を返します。

position(byte[] pattern, long start)

○

○

このBlobオブジェクトが表すBLOB値内で，指定されたバイトpatternが始まるバイト位置を返します。

free()

×

○

Blobオブジェクトが保持しているリソースを解放します。

（凡例）

○：提供されます。

×：提供されません。

(a)　getBinaryStream()

【機能】

BLOB又はBINARY値をストリーム（PrdbDataStreamオブジェクト）として返します。

【形式】

public InputStream getBinaryStream() throws SQLException

【引数】

なし。

【戻り値】

InputStreamを派生したPrdbDataStreamを返します。

【機能詳細】

BLOB又はBINARY値をストリーム（PrdbDataStreamオブジェクト）として返します。

位置付け子機能使用時は，PrdbResultSetオブジェクトから位置付け子を取得し，取得した位置付け子をPrdbDataStreamクラスのコンストラクタに渡してPrdbDataStreamオブジェクトを生成します。

位置付け子機能使用時は，PrdbDataStreamオブジェクト内部にBLOB又はBINARY値を保持していないため，データ取得要求が行われるたびにHiRDBサーバに対してデータ取得要求を行います。

位置付け子機能を使用していない場合はPrdbResultSetオブジェクトからBLOB又はBINARY値を取得し，取得した値をPrdbDataStreamクラスのコンストラクタに渡してPrdbDataStreamオブジェクトを生成します。この場合は，BLOB又はBINARY値を保持しているため，HiRDBサーバに対してデータ取得要求は行いません。

【発生する例外】

次の場合，SQLExceptionを投入します。

位置付け子機能使用時に，このPrdbBlobオブジェクトに関連しているPrdbConnectionオブジェクトがcloseされている場合

トランザクションの決着によってPrdbBlobオブジェクトが無効になった場合

位置付け子機能使用時に，通信エラーなどでデータが取得できなかった場合

freeメソッドが呼び出し済みの場合

(b)　getBytes(long pos, int length)

【機能】

BLOB又はBINARY値の全部又は一部をバイト配列として返します。バイト配列には，posの位置からlengthの連続するバイト数を格納します。

【形式】

public byte[] getBytes(long pos,int length) throws SQLException

【引数】

long pos：

BLOB値内の最初に抽出されるバイトの位置（序数）

最初のバイトの位置は1

int length：

コピー対象の連続するバイトの数

【戻り値】

BLOB又はBINARY値内の，posの位置からlengthの連続するバイト数が格納されている配列

【機能詳細】

BLOB又はBINARY値の全部又は一部をバイト配列として返します。バイト配列には，posの位置からlengthの連続するバイト数を格納します。

posとlengthの指定値と返されるデータを次に示します。

pos

length

実長（X）※1

制限値※2とlength

制限値※2と実長（X）※1

返されるデータ

1＜＝pos＜＝実長（X）※1

＜0

−

−

−

SQLException

＞＝0

＜＝length

−

Y＜制限値

実長（Y）の長さのBLOB又はBINARY値

−

Y＞＝制限値

制限値の長さのBLOB又はBINARY値

Y＞length

length＜制限値

−

lengthで指定された長さのBLOB又はBINARY値

length＞＝制限値

−

制限値の長さのBLOB又はBINARY値

＞実長（X）※1

−

−

−

−

0長データ

上記以外

−

−

−

−

SQLException

（凡例）

−：該当しません。

注※1

実長（X）とは，取得可能なBLOB又はBINARY値の実長（BLOB又はBINARY値の実長−引数pos＋1）を示します。

注※2

制限値は，MaxFieldSize又はHiRDB_for_Java_MAXBINARYSIZEが該当します。制限値として有効になる値を次に示します。

MaxFieldSize

HiRDB_for_Java_MAXBINARYSIZE

HiRDBのデータ型

取得できるデータの最大長（制限値）

0（デフォルト）

0（デフォルト）

全データ型

定義長（デフォルト）

0（デフォルト）

＞0（指定有り）

BLOB又はBINARY型

HiRDB_for_Java_MAXBINARYSIZE

BLOB又はBINARY型以外※

定義長（デフォルト）

＞0（指定有り）

0（デフォルト）

全データ型

MaxFieldSize

＞0（指定有り）

＞0（指定有り）

全データ型

MaxFieldSize

注※

文字型（HiRDBデータ型のCHAR，VARCHAR，NCHAR.NVARCHAR，MCHAR，MVARCHARが該当）

【発生する例外】

次の場合，SQLExceptionを投入します。

引数posが＜1又は引数lengthが＜0の場合

トランザクションの決着によってPrdbBlobが無効の場合

位置付け子機能使用時に，このPrdbBlobオブジェクトに関連しているPrdbConnectionオブジェクトがcloseされている場合

位置付け子機能使用時に，通信エラーなどでデータが取得できなかった場合

freeメソッドが呼び出し済みの場合

(c)　length()

【機能】

このPrdbBlobオブジェクトによって指定されたBLOB又はBINARY値のバイト数を返します。

【形式】

public long length() throws SQLException

【引数】

なし。

【戻り値】

BLOB又はBINARY値の長さ（バイト単位）

【発生する例外】

次の場合，SQLExceptionを投入します。

位置付け子機能使用時に，PrdbBlobオブジェクトに関連したPrdbConnectionオブジェクトがcloseされている場合

位置付け子機能使用時に，トランザクションの決着によってPrdbBlobが無効になった場合

位置付け子機能使用時に，通信エラーなどでデータが取得できなかった場合

freeメソッドが呼び出し済みの場合

(d)　position(Blob pattern, long start)

【機能】

PrdbBlobオブジェクトによって指定されたBLOB又はBINARY値内で，patternが始まるバイト位置を返します。patternの検索は，startの位置から開始します。

【形式】

public long position(Blob pattern, long start) throws SQLException

【引数】

Blob pattern：

検索対象のBLOB又はBINARY値を指定するBlobオブジェクト

long start：

検索を開始するBLOB又はBINARY値内の位置。最初の位置は1です。

【戻り値】

patternで指定されたデータが開始する位置

【発生する例外】

次の場合，SQLExceptionを投入します。

位置付け子機能使用時に，PrdbBlobオブジェクトに関連したPrdbConnectionオブジェクトがcloseされている場合

位置付け子機能使用時に，トランザクションの決着によってPrdbBlobが無効になった場合

位置付け子機能使用時に，通信エラーなどでデータが取得できなかった場合

freeメソッドが呼び出し済みの場合

(e)　position(byte[] pattern, long start)

【機能】

このBlobオブジェクトが表すBLOB値内で，指定されたバイトpatternが始まるバイト位置を返します。patternの検索は，startの位置から開始します。

【形式】

public long position(byte[] pattern, long start) throws SQLException

【引数】

byte[] pattern：

検索対象のbyte[]

long start：

検索を開始するBLOB値内の位置。最初の位置は1です。

【戻り値】

patternで指定されたデータが開始する位置

【発生する例外】

次の場合，SQLExceptionを投入します。

位置付け子機能使用時に，PrdbBlobオブジェクトに関連したPrdbConnectionオブジェクトがcloseされている場合

位置付け子機能使用時に，トランザクションの決着によってPrdbBlobが無効になった場合

位置付け子機能使用時に，通信エラーなどでデータが取得できなかった場合

freeメソッドが呼び出し済みの場合

(f)　free()

【機能】

Blobオブジェクトが保持しているリソースを解放します。

【形式】

void free() throws SQLException

【引数】

なし。

【戻り値】

なし。

【機能詳細】

Blobオブジェクトが保持しているリソースを解放します。位置付け子機能使用時は，HiRDBサーバに対して位置付け子の解放要求を行います。

このメソッドを呼び出した後はオブジェクトが無効となるため，freeメソッド以外のメソッドを呼び出した場合，KFPJ20023-EのSQLExceptionが投入されます。

このメソッドを複数回呼び出した場合，2回目以降の呼び出しは無視されます。

【発生する例外】

次の場合，SQLExceptionを投入します。

位置付け子機能使用時に，PrdbBlobオブジェクトに関連したPrdbConnectionオブジェクトがcloseされている場合

位置付け子機能使用時に，通信エラーなどでデータが取得できなかった場合

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbBlob

17.4.10　Arrayインタフェース

(1)　概要

Arrayインタフェースでは，繰返し列のアクセス手段として主に次の機能が提供されます。

SQL Array値の取得

SQL Array値を格納した結果セットの取得

JDBCドライバは，ArrayインタフェースをPrdbArrayクラスで実装します。

PrdbArrayクラスのオブジェクトは，ResultSetのgetArrayメソッドの返却値として，JDBCドライバが生成します。

(2)　メソッド

Arrayインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒70　Arrayインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

getArray()

○

○

繰返し列の全要素をObject配列として取得します。

getArray(long index, int count)

○

○

繰返し列の要素の一部を取り出します。

getBaseType()

○

○

PrdbArrayオブジェクトが表す繰返し列のJDBCの型を，java.sql.Typesクラスの定数として取得します。

getBaseTypeName()

○

○

PrdbArrayオブジェクトが表す繰返し列のデータ型名を取得します。

getResultSet()

○

○

繰返し列の要素を保持するResultSetオブジェクトを返します。

getResultSet(long index,int count)

○

○

繰返し列の要素を保持するResultSetオブジェクトを返します。

（凡例）

○：提供されます。

(a)　getArray()

【機能】

繰返し列の全要素をObject配列として取得します。

【形式】

public Object getArray() throws SQLException

【引数】

なし。

【戻り値】

繰返し列の全要素

【機能詳細】

繰返し列の全要素をObject配列として取得します。

PrdbArrayオブジェクト内に保持している繰返し列の要素をObject配列の形式で返します。返される配列のデータ型は次のとおりです。

HiRDBのデータ型

返される配列

SMALLINT

java.lang.Short[]

INTEGR

java.lang.Integer[]

SMALLFLT,REAL

java.lang.Float[]

FLOAT,DOUBLE PRECISION

java.sql.Double[]

DECIMAL

java.math.BigDecimal[]

CHAR,NCHAR,MCHAR

java.lagn.String[]

VARCHAR,NVARCHAR,MVARCHAR

java.lagn.String[]

DATE

java.sql.Date[]

TIME

java.sql.Time[]

TIMESTAMP

java.sql.Timestamp[]

BINARY,BLOB

java.io.InputStream[]※

注※

HiRDBではBLOB，BINARYの繰返し列は未サポートであり，PrdbArrayオブジェクトを作ることができないため，実際に返されることはありません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このPrdbArrayオブジェクトを生成したPrdbResultSetオブジェクトがcloseされている場合

PrdbResultSetオブジェクトを生成したPrdbStatementオブジェクトをcloseしたことによって，このドライバがPrdbResultSetオブジェクトをcloseした場合を含みます。

このPrdbArrayオブジェクトを生成したPrdbResultSetオブジェクトを生成したPrdbStatementオブジェクトを生成したConnectionオブジェクトがcloseされている場合

CltResultSet#getXXX()でエラーが発生した場合

(b)　getArray(long index, int count)

【機能】

繰返し列の要素の一部を取り出します。指定されたインデクスから，最大で指定された要素数分Object配列として取得します。

【形式】

public Object getArray(long index, int count) throws SQLException

【引数】

long index：

最初に取り出す要素のインデクス（最初の要素は1）

int count：

取得する連続する配列要素の数

【戻り値】

指定されたインデクスからcountで指定された要素数分のObject配列。

【機能詳細】

繰返し列の要素の一部を取り出します。指定されたインデクスから，最大で指定された要素数分Object配列として取得します。

引数indexと引数countに指定された値による返される配列の関係を次に示します。

index

count

（index＋count）

返される配列

0＜index＜＝要素数

0＜＝count

（index＋count）−1＜＝要素数

長さがcount分の配列

（index＋count）−1＞要素数

要素数−（index−1）分の長さを持つ配列

count ＜ 0

−

SQLExceptionを投入

index＞要素数

−

−

SQLExceptionを投入

index＜1

−

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このPrdbArrayオブジェクトを生成したPrdbResultSetオブジェクトがcloseされている場合

PrdbResultSetオブジェクトを生成したPrdbStatementオブジェクトをcloseしたことによって，このドライバがPrdbResultSetオブジェクトをcloseした場合を含みます。

このPrdbArrayオブジェクトを生成したPrdbResultSetオブジェクトを生成したPrdbStatementオブジェクトを生成したConnectionオブジェクトがcloseされている場合

CltResultSet#getXXX()でエラーが発生した場合

指定された引数の値が，index＜1又はcount＜0の場合

指定された引数の値が，index＞要素数の場合

(c)　getBaseType()

【機能】

PrdbArrayオブジェクトが表す繰返し列のJDBCの型を，java.sql.Typesクラスの定数として取得します。

【形式】

public int getBaseType() throws SQLException

【引数】

なし。

【戻り値】

PrdbArrayオブジェクトが表す繰返し列のJDBCの型を表す，java.sql.Typesクラスの定数

【発生する例外】

なし。

(d)　getBaseTypeName()

【機能】

PrdbArrayオブジェクトが表す繰返し列のデータ型名を取得します。

【形式】

public String getBaseTypeName() throws SQLException

【引数】

なし。

【戻り値】

HiRDBのデータ型名

【発生する例外】

なし。

(e)　getResultSet()

【機能】

繰返し列の要素を保持するResultSetオブジェクトを返します。

【形式】

public ResultSet getResultSet()

【引数】

なし。

【戻り値】

ResultSetオブジェクト

【発生する例外】

次の場合，SQLExceptionを投入します。

このPrdbArrayオブジェクトを生成したPrdbResultSetオブジェクトがcloseされている場合

PrdbResultSetオブジェクトを生成したPrdbStatementオブジェクトをcloseしたことによって，このドライバがPrdbResultSetオブジェクトをcloseした場合を含みます。

このPrdbArrayオブジェクトを生成したPrdbResultSetオブジェクトを生成したPrdbStatementオブジェクトを生成したConnectionオブジェクトがcloseされている場合

JDBCドライバでエラーが発生した場合

(f)　getResultSet(long index,int count)

【機能】

繰返し列の要素を保持するResultSetオブジェクトを返します。

【形式】

public ResultSet getResultSet(long index,int count) throws SQLException

【引数】

long index：

最初に取り出す要素のインデクス（最初の要素は1）

int count：

取得する連続する配列要素の数

【戻り値】

ResultSetオブジェクト。

【機能詳細】

繰返し列の要素を保持するResultSetオブジェクトを返します。

ResultSetオブジェクトは，指定されたインデクスで始まり，最大でカウント数分の連続した繰返し列の要素を持ちます。

引数indexと引数countに指定された値による返されるResultSetオブジェクトの関係を次に示します。

index

count

（index＋count）

返されるResultSet

0＜index＜＝要素数

0＜＝count

（index＋count）−1＜＝要素数

行数がcount分の結果集合

（index−1＋count）−1＞要素数

要素数−（index−1）分の行数を持つ結果集合

count＜0

−

SQLExceptionを投入

index＞要素数

−

−

SQLExceptionを投入

index＜1

−

−

SQLExceptionを投入

（凡例）

−：該当しません。

【発生する例外】

次の場合，SQLExceptionを投入します。

このPrdbArrayオブジェクトを生成したPrdbResultSetオブジェクトがcloseされている場合

PrdbResultSetオブジェクトを生成したPrdbStatementオブジェクトをcloseしたことによって，このドライバがPrdbResultSetオブジェクトをcloseした場合を含みます。

このPrdbArrayオブジェクトを生成したPrdbResultSetオブジェクトを生成したPrdbStatementオブジェクトを生成したConnectionオブジェクトがcloseされている場合

指定された引数の値が，index＜1又はcount＜0の場合

指定された引数の値が，index＞要素数の場合

(3)　パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbArray

17.4.11　SQLExceptionインタフェース

SQLExceptionは，java.sqlパッケージのSQLExceptionクラスを直接利用します。SQLExceptionインタフェースが提供する各メソッドの詳細，使用方法については，JavaSoftが提供するJDBC関連ドキュメントを参照してください。

17.4.12　SQLWarningインタフェース

(1)　概要

SQLWarningインタフェースでは，主に次の機能が提供されます。

データベースアクセスの警告に関する情報の提供

SQLWarningオブジェクトは，警告が報告される原因となったメソッドのオブジェクトに，例外での通知なしで蓄積されます。

(2)　注意事項

(a)　蓄積されたSQLWarningオブジェクトの解放

SQLWarningオブジェクトは，警告が報告される原因となったメソッドのオブジェクト（Connection，Statement，PreparedStatement，CallableStatement，及びResultSet）から，チェーンによって蓄積されます。

蓄積されたSQLWarningオブジェクトを明示的に解放するには，警告が報告される原因となったメソッドのオブジェクトに対してclearWarningsメソッドを実行してください。

(b)　SQLWarningオブジェクトの生成条件

SQLの実行で発生した警告が，JDBCドライバ内で保持することを，警告保持レベルで指定している場合，SQLWarningオブジェクトを生成して警告情報を保持します。また，Connectionオブジェクトについては，プロパティなどで警告保持の指定ができます。

SQLWarningオブジェクトの生成条件を次の表に示します。

表17‒71　SQLWarningオブジェクトの生成条件

SQLの実行結果

Connectionオブジェクトでの警告保持指定

警告を保持する

警告を保持しない

警告保持レベル

警告保持レベル

IGNORE

SQLWARN

ALLWARN

IGNORE

SQLWARN

ALLWARN

SQLCODE>0，かつSQLCODEが100，110，及び120以外

Connectionオブジェクト以外で発生

×

×

○

×

×

○

Connectionオブジェクトで発生

×

×

○

×

×

×

SQL連絡領域のSQLWARN0がW（SQLWARN6がWである場合を除く）

Connectionオブジェクト以外で発生

×

○

○

×

○

○

Connectionオブジェクトで発生

×

○

○

×

×

×

JDBCドライバ内での警告発生

Connectionオブジェクト以外で発生

×

○

○

×

○

○

Connectionオブジェクトで発生

×

○

○

×

×

×

（凡例）

○：生成します。

×：生成しません。

注

Connectionオブジェクトでの警告保持指定は，URLのSQLWARNING_IGNORE，ユーザプロパティのSQLWARNING_IGNORE，又はメソッドのsetSQLWarningIgnoreで指定できます。デフォルトはfalseです。

また，警告保持レベルは，URLのSQLWARNING_LEVEL，プロパティのHiRDB_for_Java_SQLWARNING_LEVEL，又はメソッドのsetSQLWarningLevelで指定できます。デフォルトはSQLWARNです。

17.4.13　サポートしていないインタフェース

サポートしていないインタフェースはありません。

17.5　JDBC2.1 コアAPI

JDBC2.1 コアAPIで追加された機能のうち，サポートする機能とドライバを次の表に示します。

表17‒72　JDBC2.1 コアでの追加機能とサポートするドライバ

機能

サポートするドライバ

JDBC2.0

JDBC4.0

結果セットの拡張

スクロール

○

○

並行処理

○

○

バッチ更新

Statementクラスでのバッチ更新

○

○

PreparedStatementクラスでのバッチ更新

○

○

CallableStatementクラスでのバッチ更新

○

○

（凡例）

○：サポートされます。

17.5.1　結果セットの拡張

JDBC2.1 コアAPIでは，結果セット（ResultSetクラス）の拡張機能として「スクロール」と「並行処理」が追加されました。

(1)　スクロールタイプ

結果セットのスクロールタイプには，次の3種類があります。

順方向専用型

スクロール非反映型

スクロール反映型

このうち，順方向専用型，及びスクロール非反映型をサポートしています。

(2)　並行処理タイプ

結果セットの並行処理タイプには，次の2種類があります。

読み取り専用型

更新可能型

このうち，読み取り専用型をサポートしています。

(3)　注意事項

(a)　サポートしていない結果セットタイプ又は並行処理タイプが指定された場合の注意点

サポートしていない結果セットタイプ又は並行処理タイプが指定された場合，エラーになりません。指定された結果セットタイプ又は並行処理タイプに最も近い結果セットを仮定して，Statementクラス又はそのサブクラスのインスタンスを生成します。なお，その際に，警告（SQLWarningオブジェクト）を生成して，Connectionクラスのインスタンスに関連づけます。

(b)　スクロール型結果セット使用時の注意点

スクロール型結果セットでは，すべての検索データをJDBCドライバ内でキャッシングします。そのため，データ量が多い場合は，メモリ不足や性能劣化となる可能性が高くなります。したがって，スクロール型結果セットを使用する場合は，「SQLに条件を付加する」など，検索データ量をあらかじめ抑制しておいてください。

17.5.2　バッチ更新

JDBC2.1 コアAPIでは，Statementクラス及びPreparedStatementクラスにバッチ更新機能が追加されました。バッチ更新機能によって，複数のSQL，又は複数のパラメタ値を登録し，一括して実行できるようになります。

バッチ更新を実行する場合，HiRDBの配列を使用した機能が使用できます。

配列を使用した機能は，HiRDBに対して大量のデータを高速に更新したい場合に有効です。なお，配列を使用した機能については，「配列を使用した機能」を参照してください。

(1)　Statementクラスでのバッチ更新

Statementクラスでのバッチ更新の留意点を次に示します。

複数の更新系SQLを，addBatchメソッドで登録します。

登録した更新系SQLを，executeBatchメソッドで一括して実行します。

一括実行の結果として，それぞれの更新系SQLで更新された行数の配列を返却します。

一括実行の途中でエラーが発生した場合，BatchUpdateExceptionを投入します。

登録したSQL中に検索系SQLがある場合，executeBatchメソッド呼び出し時にBatchUpdateExceptionを投入します。

なお，JDBCドライバでは，複数のSQLを一括実行できないため，登録されたSQLを逐次実行することになります。

(2)　PreparedStatementクラスでのバッチ更新

PreparedStatementクラスでのバッチ更新の留意点を次に示します。

PreparedStatementインスタンス生成時に指定した更新系SQLに対する？パラメタを，通常の手順（setXXXメソッド）で設定します。

addBatchメソッドで？パラメタのセットを登録します。

登録した複数セットの？パラメタを，executeBatchメソッドで一括して実行します。

一括実行の結果として，それぞれの？パラメタのセットで更新した行数の配列を返却します。

一括実行の途中でエラーが発生した場合，BatchUpdateExceptionを投入します。

PreparedStatementインスタンス生成時に指定したSQLが検索系SQLの場合，executeBatchメソッド呼び出し時にBatchUpdateExceptionを投入します。

なお，JDBCドライバでは，次の場合に逐次実行します。

パラメタとSQL文のaddBatchの混在時でのバッチ更新

HiRDBのBINARY型に対する？パラメタを含むSQL文でのバッチ更新（BINARY型の？パラメタに設定するデータの長さが32,001バイト以上の場合）

HiRDBのBLOB型に対する？パラメタを含むSQL文でのバッチ更新

＜注意事項＞

2件目以降のaddBatchで，setXXXメソッドで指定するパラメタ数が不足していた場合，前回セットした値が引き継がれるため注意が必要です。

INTEGER型列が2列（列1，列2）ある場合の例を次に示します。

［指定例］

prepstmt.setInt(1,100);
prepstmt.setInt(2,100);
prepstmt.addBatch();
prepstmt.setInt(1,200);
prepstmt.addBatch();
prepstmt.executeBatch();

［説明］

1件目のaddBatchで設定される値は，列1＝100，列2＝100となります。

1件目のaddBatchでパラメタ数が不足している場合は，エラーが発生します。

2件目のaddBatchで設定される値は，列1＝200，列2＝100となります。

2件目のaddBatchで，列2の情報が更新されていないため，1件目のaddBatchの情報が引き継がれます。

(3)　CallableStatementクラスでのバッチ更新

CallableStatementクラスでのバッチ更新の留意点を次に示します。

CallableStatementインスタンス生成時に指定したJavaストアドルーチンに対する入力パラメタを，通常の手順（setXXXメソッド）で設定します。

addBatchメソッドで入力パラメタのセットを登録します。

登録した複数セットの入力パラメタを，executeBatchメソッドで一括して実行します。

一括実行の結果として，それぞれの入力パラメタのセットで実行したJavaストアドルーチンの返却値（更新行数）の配列を返却します。

一括実行の途中でエラーが発生した場合，BatchUpdateExceptionを投入します。

CallableStatementインスタンス生成時に指定したJavaストアドルーチンが，更新行数を返却するルーチンでない場合，executeBatchメソッド呼び出し時にBatchUpdateExceptionを投入します。

CallableStatementインスタンス生成時に指定したJavaストアドルーチンが，出力パラメタ及び入出力パラメタを持つ場合，addBatchメソッド呼び出し時にBatchUpdateExceptionを投入します。

なお，JDBCドライバでは，複数行のストアドプロシジャの？パラメタを一括実行できないため，複数行のストアドプロシジャの？パラメタを逐次実行することになります。

注意事項：

結果セット(ResultSet)を返すストアドプロシジャは，バッチ更新ではストアドプロシジャを実行するまで結果セットを返すかどうか分からないため，ストアドプロシジャ内で更新をしている場合，更新が反映されることがあるので注意してください。例えば，更新後にその結果を検索し取得するストアドプロシジャを，バッチ更新で実行すると，BatchUpdateExceptionが発生するが，更新は反映されてしまうことがあります。

(4)　注意事項

(a)　HiRDBサーバによる暗黙的コミット

SQL文のバッチ更新機能を使用する場合，addBatchしたSQL文に次のSQL文が含まれるとき，そのSQL文を実行した時点でHiRDBサーバが暗黙的にコミットするため，注意が必要です。

PURGE TABLE文

クライアント環境定義PDCMMTBFDDLにYESを設定した状態での定義系SQL

(b)　パラメタとSQL文のaddBatchの混在時でのバッチ更新機能

パラメタとSQL文のaddBatchとの混在時は，一括更新をしないで逐次実行します。例を次に示します。

PreparedStatement pstmt = con.prepareStatement("UPDATE T1 SET C1=? WHERE C2=?");
pstmt.setInt(1, 1);
pstmt.setInt(2, 1);
pstmt.addBatch();
pstmt.setInt(1, 2);
pstmt.setInt(2, 2);
pstmt.addBatch();
pstmt.addBatch("INSERT INTO T2 VALUES(1,2,3)");
pstmt.setInt(1, 3);
pstmt.setInt(2, 4);
pstmt.addBatch();
pstmt.setInt(1, 4);
pstmt.setInt(2, 4);
pstmt.addBatch();
pstmt.executeBatch();

このUAPを実行すると，パラメタとSQL文のaddBatchが混在しているため，各addBatch単位でのSQL実行となります。そのため，次のUAPを実行した場合と同じ結果となります。

PreparedStatement pstmt = con.prepareStatement("UPDATE T1 SET C1=? WHERE C2=?");
pstmt.setInt(1, 1);
pstmt.setInt(2, 1);
pstmt.executeUpdate();
pstmt.setInt(1, 2);
pstmt.setInt(2, 2);
pstmt.executeUpdate();
pstmt.executeUpdate("INSERT INTO T2 VALUES(1,2,3)");
pstmt.setInt(1, 3);
pstmt.setInt(2, 4);
pstmt.executeUpdate();
pstmt.setInt(1, 4);
pstmt.setInt(2, 4);
pstmt.executeUpdate();

なお，パラメタとSQL文のaddBatchとが混在するバッチ更新機能を使用する場合，Connectionクラスの自動コミットモードを無効にすることを推奨します。

(c)　HiRDBのBINARY型に対する？パラメタを含むSQL文でのバッチ更新

HiRDBのBINARY型に対する？パラメタを含むSQL文でバッチ更新をする場合，次の条件に該当するとき，一括更新をしないで逐次実行します。

？パラメタに対してsetXXXメソッドで設定するデータ長が32,001バイト以上である（setStringメソッドなどで文字データを指定している場合は，HiRDBに渡すデータにエンコードした後のデータ長が32,001バイト以上である）。

(d)　HiRDBのBLOB型に対する？パラメタを含むSQL文でのバッチ更新

HiRDBのBLOB型に対する？パラメタを含むSQL文でバッチ更新をする場合，一括更新をしないで逐次実行します。

(e)　addBatchメソッドによって多数のパラメタを登録する場合

JDBCドライバは，addBatchメソッドで登録したすべてのパラメタを，executeBatchメソッドを実行するまでドライバ内に蓄積します。そのため，多数のパラメタを登録する際は，メモリ使用量に注意してください。

また，HiRDBの配列を使用した機能でバッチ更新をする場合，HiRDBサーバに対してJDBCドライバが要求できる実行回数は最大で30,000回です。30,001個以上のパラメタを登録している場合，1回のバッチ更新で用いるパラメタを30,000個単位に分割し，HiRDBサーバに対してSQLの実行を要求します。この場合も，JDBCドライバ内のメモリを消費するため，バッチ更新による性能向上効果が下がるおそれがあります。そのため，30,001回以上のSQL実行が必要な場合は，30,000回以下の単位でexecuteBatchメソッドを実行することを推奨します。

(f)　例外BatchUpdateExceptionで通知する更新カウント

バッチ更新実行時に発生する例外BatchUpdateExceptionの，getUpdateCountsメソッドの戻り値で通知する更新カウント（int型の配列）の内容を次の表に示します。

表17‒73　getUpdateCountsメソッドの戻り値で通知する更新カウントの内容

バッチ更新の実行形態

BATCHEXCEPTION_BEHAVIOR※1の設定値

TRUE

FALSE

配列機能を利用した一括実行

要素数0の配列

要素数nの配列

n：何回目のaddBatchで登録したパラメタでエラーになったかを示します。

エラーが発生するとロールバックされるため，すべての配列要素にはStatement.EXECUTE_FAILEDが設定されます。

JDBCドライバによる逐次実行

要素数が実行したSQL数の配列

各配列要素には更新行数※2を設定

要素数nの配列

n：何回目のaddBatchで登録したパラメタ又はSQLでエラーになったかを示します。

配列要素には次の値が設定されます。

要素0〜n-2：更新行数※2

要素n-1：Statement.EXECUTE_FAILED

注※1

次のどれかで指定します。

HiRDB接続時のユーザプロパティHiRDB_for_Java_BATCHEXCEPTION_BEHAVIOR

URLのBATCHEXCEPTION_BEHAVIOR

DataSource系インタフェースのsetBatchExceptionBehaviorメソッド

なお，接続先がバージョン08-01以前のHiRDBの場合，"TRUE"が指定されたものとして動作します。

注※2

CallableStatementクラスのexecuteBatchメソッドでCALL文を実行した場合，Statement.SUCCESS_NO_INFOを設定します。

更新カウントの例を次に示します。

≪配列機能を利用した一括実行のプログラム例≫

PreparedStatement pstmt = con.prepareStatement("INSERT INTO T1 VALUES(?,?)");
pstmt.setInt(1, 1);
pstmt.setString(2,"aaaa");
pstmt.addBatch();
pstmt.setInt(1, 2);
pstmt.setString(2,"bbbbbbbb");
pstmt.addBatch();.......................................[A]
pstmt.setInt(1, 3);
pstmt.setString(2,"cccc");
pstmt.addBatch();
pstmt.executeBatch();

≪JDBCドライバによる逐次実行のプログラム例≫

Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO T1 VALUES(1,'aaaa')");
stmt.addBatch("INSERT INTO T1 VALUES(2,'bbbbbbbb')");...[A]
stmt.addBatch("INSERT INTO T1 VALUES(3,'cccc')");
stmt.executeBatch();

プログラム例を実行し，[A]で登録したパラメタ，又はSQLの処理でエラーになった場合，getUpdateCountsメソッドで返却する更新カウントの内容を次に示します。

バッチ更新の実行形態

BATCHEXCEPTION_BEHAVIORの設定値

TRUE

FALSE

配列機能を利用した一括実行

要素数0のint型の配列

要素数2のint型の配列

要素0の値：Statement.EXECUTE_FAILED

要素1の値：Statement.EXECUTE_FAILED

JDBCドライバによる逐次実行

要素数1のint型の配列

要素0の値：更新行数

要素数2のint型の配列

要素0の値：更新行数

要素1の値：Statement.EXECUTE_FAILED

17.5.3　追加されたデータ型

JDBC2.1 コアAPIでは，幾つかの新たなJDBC SQLタイプが追加されました。次のJDBC SQLタイプが追加されましたが，JDBCドライバでは使用できません。

BLOB

CLOB

ARRAY

REF

DISTINCT

STRUCT

JAVA OBJECT

17.5.4　サポートしていないインタフェース

次のインタフェースはサポートしていません。

Clob

Ref

SQLData

SQLInput

SQLOutput

Struct

17.6　JDBC2.0 Optional Package

JDBC2.0 Optional Packageでは，次の機能が追加されました。

JNDI対応

接続プール

分散トランザクション

RowSets

ただし，JDBCドライバではRowSetsを使用できません。

JDBC2.0 Optional Packageの機能，サポートするドライバ，及びインタフェースを次の表に示します。

表17‒74　JDBC2.0 Optional Packageの機能とインタフェース

機能

サポートするドライバ

インタフェース

JDBC2.0

JDBC4.0

JNDI対応

○

○

DataSourceインタフェース

接続プール

○

○

ConnectionPoolDataSourceインタフェース

PooledConnectionインタフェース

分散トランザクション

○

○

XAConnectionインタフェース

XADataSourceインタフェース

XAResourceインタフェース

XAExceptionインタフェース

（凡例）

○：サポートされます。

17.6.1　DataSourceインタフェース

DataSourceインタフェースで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。ここでは，JDBCドライバがサポートするDataSourceインタフェースのメソッドを示します。

(1)　メソッド

DataSourceインタフェースのメソッド一覧を次の表に示します。

表17‒75　DataSourceインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

getConnection()

○

○

データソースに設定した接続情報によって，データベース接続を試みます。

getConnection(String username, String password)

○

○

データソースに設定した接続情報によって，データベース接続を試みます。

getLoginTimeout()

○

○

setLoginTimeoutメソッドで指定された値を返します。

getLogWriter()

○

○

DataSourceオブジェクトのログライターを取得します。

setLoginTimeout(int seconds)

○

○

データベースへの接続試行中に待機する最長時間（秒）を指定します。

setLogWriter(PrintWriter out)

○

○

DataSourceオブジェクトのログライターを設定します。

（凡例）

○：提供されます。

(a)　getConnection()

【機能】

データソースに設定した接続情報によって，データベース接続を試みます。

【形式】

public Connection getConnection() throws SQLException

【引数】

なし。

【戻り値】

Connectionオブジェクト

【機能詳細】

DataSourceオブジェクトに事前に設定された接続情報を基に，HiRDBサーバとの接続を行い，接続されたConnectionオブジェクトを返します。ユーザ名称，パスワードの各設定方法での優先順位については，「接続情報の優先順位」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

データベースアクセスエラーが発生した場合

指定した接続情報が不正である場合

各接続情報が不正である条件については，「URLの構文」，及び「ユーザプロパティ」を参照してください。

(b)　getConnection(String username, String password)

【機能】

データソースに設定した接続情報によって，データベース接続を試みます。

【形式】

public Connection getConnection(String username, String password) throws SQLException

【引数】

String username：

接続時のユーザ名

String password：

接続時のパスワード

【戻り値】

Connectionオブジェクト

【機能詳細】

引数で指定された情報，及びDataSourceオブジェクトに事前に設定された接続情報を基に，HiRDBサーバとの接続を行い，接続されたConnectionオブジェクトを返します。

引数username又は引数passwordがnullの場合，ユーザ名称又はパスワードを，この引数で指定しなかったことを示します。また，引数passwordが長さ0の文字列の場合，パスワードを指定しなかったことを示します。引数usernameとConnectionProperty中にユーザIDを設定した場合，引数usernameの指定値を優先します。同様に，パスワードも引数passwordの指定値を優先します。引数username及びpasswordを指定しない場合については，「接続情報の優先順位」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

データベースアクセスエラーが発生した場合

指定した接続情報が不正である場合

各接続情報が不正である条件については，「URLの構文」，及び「ユーザプロパティ」を参照してください。

引数に指定したユーザ名が長さ0の文字列の場合

(c)　getLoginTimeout()

【機能】

setLoginTimeoutメソッドで指定された値を返します。

【形式】

public synchronized int getLoginTimeout()

【引数】

なし。

【戻り値】

int型：

setLoginTimeoutメソッドで指定された値。setLoginTimeoutメソッドで指定されていない場合は，0を返します。

【発生する例外】

なし。

(d)　getLogWriter()

【機能】

DataSourceオブジェクトのログライターを取得します。

【形式】

public synchronized PrintWriter getLogWriter() throws SQLException

【引数】

なし。

【戻り値】

PrdbDataSourceオブジェクトのログライターを返します。ログライターが設定されていない場合はNULL値を返します。

【発生する例外】

なし。

(e)　setLoginTimeout(int seconds)

【機能】

データベースへの接続試行中に待機する最長時間（秒）を指定します。

【形式】

public synchronized void setLoginTimeout(int seconds) throws SQLException

【引数】

int seconds：

接続待ち時間（秒）

【戻り値】

なし。

【機能詳細】

getConnectionメソッドでConnectionオブジェクトを取得する際に行う，HiRDBサーバとの物理接続時に使用します。0を指定した場合，又はsetLoginTimeoutを実行していない場合は，PDCONNECTWAITTIMEで指定した時間が，HiRDBサーバとの物理接続時の，HiRDBサーバに対する最大待ち時間になります。

getConnectionメソッドでの接続処理は，大きく分けて次の二つから成ります。

TCP/IPのコネクション確立処理

HiRDBサーバとのユーザ認証などのネゴシエーション

このメソッド及びクライアント環境定義PDCONNECTWAITTIMEの指定値は，2.を監視対象としており，1.は監視対象に含みません。1.を監視する場合，クライアント環境定義PDNBLOCKWAITTIMEを指定する必要があります。

監視範囲の詳細については「クライアント環境定義の設定内容」のクライアント環境定義PDCONNECTWAITTIMEを参照してください。

【発生する例外】

引数secondsが0未満，又は301以上の場合，SQLExceptionを投入します。

(f)　setLogWriter(PrintWriter out)

【機能】

DataSourceオブジェクトのログライターを設定します。

【形式】

public synchronized void setLogWriter(PrintWriter out) throws SQLException

【引数】

PrintWriter out：ログライター

【戻り値】

なし。

【発生する例外】

なし。

(2)　パッケージ名称及びクラス名称

このインタフェースを直接使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbDataSource

17.6.2　ConnectionPoolDataSourceインタフェース

ConnectionPoolDataSourceインタフェースで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。ここでは，JDBCドライバがサポートするConnectionPoolDataSourceインタフェースのメソッドを示します。

(1)　メソッド

ConnectionPoolDataSourceインタフェースのメソッド一覧を次の表に示します。

表17‒76　ConnectionPoolDataSourceインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

getLoginTimeout()

○

○

setLoginTimeoutメソッドで指定された値を返します。

getLogWriter()

○

○

ConnectionPoolDataSourceオブジェクトのログライターを取得します。

getPooledConnection()

○

○

データソースに設定した接続情報によって，プールされた接続として使用できるPooledConnectionオブジェクトを取得します。

getPooledConnection(String user, String password)

○

○

データソースに設定した接続情報によって，プールされた接続として使用できるPooledConnectionオブジェクトを取得します。

setLoginTimeout(int seconds)

○

○

データベースへの接続試行中に待機する最長時間（秒）を指定します。

setLogWriter(PrintWriter out)

○

○

ConnectionPoolDataSourceオブジェクトのログライターを設定します。

（凡例）

○：提供されます。

(a)　getLoginTimeout()

【機能】

setLoginTimeoutメソッドで指定された値を返します。

【形式】

public synchronized int getLoginTimeout() throws SQLException

【引数】

なし。

【戻り値】

int型：

setLoginTimeoutメソッドで指定された値を返します。setLoginTimeoutメソッドで指定されていない場合は，0を返します。

【発生する例外】

なし。

(b)　getLogWriter()

【機能】

ConnectionPoolDataSourceオブジェクトのログライターを取得します。

【形式】

public synchronized PrintWriter getLogWriter() throws SQLException

【引数】

なし。

【戻り値】

PrdbConnectionPoolDataSourceオブジェクトのログライターを返します。ログライターが設定されていない場合は，NULL値を返します。

【発生する例外】

なし。

(c)　getPooledConnection()

【機能】

データソースに設定した接続情報によって，プールされた接続として使用できるPooledConnectionオブジェクトを取得します。

【形式】

public synchronized PooledConnection getPooledConnection() throws SQLException

【引数】

なし。

【戻り値】

PooledConnectionオブジェクト

【機能詳細】

DataSourceオブジェクトに事前に設定された接続情報を基に，プールされた接続として使用できるPooledConnectionオブジェクトを返します。ユーザ名称，パスワードの各設定方法での優先順位は，「接続情報の優先順位」を参照してください。

【発生する例外】

データベースアクセスエラーが発生した場合，SQLExceptionを投入します。

(d)　getPooledConnection(String user, String password)

【機能】

データソースに設定した接続情報によって，プールされた接続として使用できるPooledConnectionオブジェクトを取得します。

【形式】

public synchronized PooledConnection getPooledConnection(String user, String password) throws SQLException

【引数】

String user：接続時のユーザ名

String password：接続時のパスワード

【戻り値】

PooledConnectionオブジェクト

【機能詳細】

引数で指定された情報，及びDataSourceオブジェクトに事前に設定された接続情報を基に，プールされた接続として使用できるPooledConnectionオブジェクトを返します。

引数user又は引数passwordがnullの場合，ユーザ名称又はパスワードを，この引数で指定しなかったことを示します。また，引数passwordが長さ0の文字列の場合，パスワードを指定しなかったことを示します。引数userとConnectionProperty中にユーザIDを設定した場合，引数userの指定値を優先します。同様に，パスワードも引数passwordの指定値を優先します。引数user及びpasswordを指定しない場合については，「接続情報の優先順位」を参照してください。

【発生する例外】

次の場合，SQLExceptionを投入します。

データベースアクセスエラーが発生した場合

引数に指定したユーザ名が長さ0の文字列の場合

(e)　setLoginTimeout(int seconds)

【機能】

データベースへの接続試行中に待機する最長時間（秒）を指定します。

【形式】

public synchronized void setLoginTimeout(int seconds) throws SQLException

【引数】

int seconds：接続待ち時間（秒）

【戻り値】

なし。

【機能詳細】

PooledConnectionインタフェースのgetConnectionメソッドでConnectionオブジェクトを取得する際に行う，HiRDBサーバとの物理接続時に使用します。0を指定した場合，又はsetLoginTimeoutを実行していない場合は，PDCONNECTWAITTIMEで指定した時間が，HiRDBサーバとの物理接続時の，HiRDBサーバに対する最大待ち時間になります。

getConnectionメソッドでの接続処理は，大きく分けて次の二つから成ります。

TCP/IPのコネクション確立処理

HiRDBサーバとのユーザ認証などのネゴシエーション

このメソッド及びクライアント環境定義PDCONNECTWAITTIMEの指定値は，2.だけを監視対象としており，1.は監視対象に含みません。1.を監視する場合，クライアント環境定義PDNBLOCKWAITTIMEを指定する必要があります。

監視範囲の詳細については「クライアント環境定義の設定内容」のクライアント環境定義PDCONNECTWAITTIMEを参照してください。

【発生する例外】

引数secondsが0未満，又は301以上の場合，SQLExceptionを投入します。

(f)　setLogWriter(PrintWriter out)

【機能】

ConnectionPoolDataSourceオブジェクトのログライターを設定します。

【形式】

public synchronized void setLogWriter(PrintWriter out)

【引数】

PrintWriter out：ログライター

【戻り値】

なし。

【発生する例外】

なし。

(2)　パッケージ名称及びクラス名称

このインタフェースを直接使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbConnectionPoolDataSource

17.6.3　PooledConnectionインタフェース

PooledConnectionインタフェースで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。ここでは，JDBCドライバがサポートするPooledConnectionインタフェースのメソッドを示します。

(1)　メソッド

PooledConnectionインタフェースのメソッド一覧を次の表に示します。

表17‒77　PooledConnectionインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

getConnection()

○

○

Connectionオブジェクトは，HiRDBサーバとの物理接続と1対1の関係となり，必要に応じて物理接続が行われ，Connectionオブジェクトが返されます。

addConnectionEventListener(ConnectionEventListener listener)

○

○

指定したイベントリスナを登録して，このPooledConnectionオブジェクトでイベントが発生したときに通知されるようにします。

close()

○

○

物理接続の切断をします。

removeConnectionEventListener(ConnectionEventListener listener)

○

○

指定したイベントリスナを，このPooledConnectionオブジェクトでイベントが発生したときに通知されるコンポーネントリストから削除します。

addStatementEventListener(StatementEventListener listener)

×

○

引数で指定したStatementEventListenerをPooledConnectionに登録します。

removeStatementEventListener(StatementEventListener listener)

×

○

引数で指定したStatementEventListenerをPooledConnectionから削除します。

（凡例）

○：提供されます。

×：提供されません。

(a)　getConnection()

【機能】

Connectionオブジェクトは，HiRDBサーバとの物理接続と1対1の関係となり，必要に応じて物理接続が行われ，Connectionオブジェクトが返されます。

【形式】

public synchronized Connection getConnection() throws SQLException

【引数】

なし。

【戻り値】

Connectionオブジェクト

【機能詳細】

Connectionオブジェクトは，HiRDBサーバとの物理接続と1対1の関係となり，必要に応じて物理接続が行われ，Connectionオブジェクトが返されます。一度接続した物理接続は，このクラスオブジェクトがクローズされるまで切断されません。Connectionオブジェクトに対してcloseメソッドを実行しても，物理接続の切断はしないで，このクラスオブジェクトが物理接続を保持します。保持した物理接続は，次のこのメソッド呼び出しによる接続要求で再利用します（setLoginTimeoutやクライアント環境定義PDCONNECTWAITTIMEで指定した待ち時間は発生しません）。

【発生する例外】

次の場合はSQLExceptionを投入します。

データベースアクセスエラーが発生した場合

指定した接続情報が不正の場合

(b)　addConnectionEventListener(ConnectionEventListener listener)

【機能】

指定したイベントリスナを登録して，このPooledConnectionオブジェクトでイベントが発生したときに通知されるようにします。

【形式】

public synchronized void addConnectionEventListener(ConnectionEventListener listener)

【引数】

ConnectionEventListener listener：

ConnectionEventListenerインタフェースを実装し，接続が閉じたかエラーが発生したときに通知されるようにするコンポーネント。通常は接続プール管理プログラムです。

【戻り値】

なし。

【機能詳細】

指定したイベントリスナを登録して，このPooledConnectionオブジェクトでイベントが発生したときに通知されるようにします。追加するリスナがnullであれば登録しません。

addConnectionEventListenerメソッドで登録したイベントリスナから，このドライバのメソッドを呼び出すことはできません。呼び出した場合，（デッドロックによって）このドライバからの応答がなくなることがあります。

【発生する例外】

なし。

(c)　close()

【機能】

物理接続の切断をします。

【形式】

public synchronized void close()

【引数】

なし。

【戻り値】

なし。

【機能詳細】

プールされたすべての接続に対し，物理接続の切断をします。Connectionオブジェクトを取得してデータベースアクセスを行っている最中でも，PooledConnection.close()の実行で物理切断を試みます。

【発生する例外】

なし。

(d)　removeConnectionEventListener(ConnectionEventListener listener)

【機能】

指定したイベントリスナを，このPooledConnectionオブジェクトでイベントが発生したときに通知されるコンポーネントリストから削除します。

【形式】

public synchronized void removeConnectionEventListener(ConnectionEventListener listener)

【引数】

ConnectionEventListener listener：

ConnectionEventListenerインタフェースを実装し，リスナとして登録されたコンポーネント。通常は接続プール管理プログラムです。

【戻り値】

なし。

【発生する例外】

なし。

(e)　addStatementEventListener(StatementEventListener listener)

【機能】

引数で指定したStatementEventListenerをPooledConnectionに登録します。

【形式】

public synchronized void addStatementEventListener(StatementEventListener listener)

【引数】

StatementEventListener listener：

StatementEventListener インタフェースを実装し，前処理結果が無効となるエラーが発生したときに通知を受けるためのオブジェクトです。

【戻り値】

なし。

【機能詳細】

引数で指定したStatementEventListenerをPooledConnectionに登録して，PreparedStatement（又はCallableStatement）オブジェクトが無効となるSQLExceptionが発生したときに通知を受けられるようにします。引数listenerがnullの場合，何も行いません。

【発生する例外】

なし。

【注意事項】

このメソッドの最初の呼び出し前に生成したPreparedStatement（又はCallableStatement）オブジェクトは通知の対象になりません。イベント通知対象となるPreparedStatementの例を次に示します。

PooledConnection pcon = ConnectionPoolDataSource.getPooledConnection();
Connection con = pcon.getConnection();
PreparedStatement pstmt1 = con.prepareStatement(<SQL文A>);   ←イベント通知対象外
pcon.addStatementEventListener(listener);
PreparedStatement pstmt2 = con.prepareStatement(<SQL文B>);   ←イベント通知対象

(f)　removeStatementEventListener(StatementEventListener listener)

【機能】

引数で指定したStatementEventListenerをPooledConnectionから削除します。

【形式】

public synchronized void removeStatementEventListener(StatementEventListener listener)

【引数】

StatementEventListener listener：

addStatementEventListenerメソッドでPooledConnectionに登録済みのオブジェクトです。

【戻り値】

なし。

【機能詳細】

addStatementEventListenerメソッドで登録済みのStatementEventListenerを，PooledConnectionが持つリストから削除します。引数listenerがnullの場合，及び対応するStatementEventListenerが存在しない場合は，何も行いません。

【発生する例外】

なし。

(2)　パッケージ名称及びクラス名称

このインタフェースを直接使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbPooledConnection

17.6.4　XAConnectionインタフェース

XAConnectionインタフェースで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。ここでは，JDBCドライバがサポートするXAConnectionインタフェースのメソッドを示します。

(1)　メソッド

XAConnectionインタフェースのメソッド一覧を次の表に示します。

表17‒78　XAConnectionインタフェースのメソッド一覧

メソッド

提供ドライバ

備考

JDBC2.0

JDBC4.0

getXAResource()

○

○

−

（凡例）

○：提供されます。

−：特にありません。

(2)　パッケージ名称及びクラス名称

このインタフェースを直接使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbXAConnection

17.6.5　XADataSourceインタフェース

XADataSourceインタフェースで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。ここでは，JDBCドライバがサポートするXADataSourceインタフェースのメソッドを示します。

(1)　メソッド

XADataSourceインタフェースのメソッド一覧を次の表に示します。

表17‒79　XADataSourceインタフェースのメソッド一覧

メソッド

提供ドライバ

備考

JDBC2.0

JDBC4.0

getLoginTimeout()

○

○

setLoginTimeoutメソッドで指定されている値を返却します。setLoginTimeoutメソッドで指定されていない場合は，0を返却します。

getLogWriter()

○

○

−

getXAConnection()

○

○

認可識別子及びパスワードの各設定方法の優先順位については，「接続情報の優先順位」を参照してください。

getXAConnection(String username,String password)

○

○

引数user又は引数passwordがナル値の場合は，認可識別子又はパスワードをこの引数で指定しなかったことを示します。

引数passwordが長さ0の文字列の場合は，パスワードを指定しなかったことを示します。

指定しない場合の設定値については，「接続情報の優先順位」を参照してください。

引数userが長さ0の文字列の場合は，SQLExceptionを投入します。

setLoginTimeout(int seconds)

○

○

この指定はXAConnectionインタフェースのgetConnectionメソッドでConnectionオブジェクトを取得する際に行う，HiRDBサーバとの物理接続時にだけ使用されます。0を指定した場合，又はsetLoginTimeoutメソッドを実行していない場合は，クライアント環境定義PDCONNECTWAITTIMEで指定した時間がHiRDBサーバに対する最大待ち時間となります。

getConnectionメソッドでの接続処理は，大きく分けて次の二つから成ります。

TCP/IPのコネクション確立処理

HiRDBサーバとのユーザ認証などのネゴシエーション

このメソッド及びクライアント環境定義PDCONNECTWAITTIMEの指定値は，2.だけを監視対象としており，1.は監視対象に含みません。1.を監視する場合，クライアント環境定義PDNBLOCKWAITTIMEを指定する必要があります。

監視範囲の詳細については「クライアント環境定義の設定内容」のクライアント環境定義PDCONNECTWAITTIMEを参照してください。

0〜300の範囲外の値を設定すると，SQLExceptionを投入します。

setLogWriter(PrintWriter out)

○

○

−

（凡例）

○：提供されます。

−：特にありません。

(2)　パッケージ名称及びクラス名称

このインタフェースを直接使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbXADataSource

17.6.6　XAResourceインタフェース

XAResourceインタフェースで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。ここでは，JDBCドライバがサポートするXAResourceインタフェースのメソッドを示します。

(1)　メソッド

XAResourceインタフェースのメソッド一覧を次の表に示します。

表17‒80　XAResourceインタフェースのメソッド一覧

メソッド

提供ドライバ

備考

JDBC2.0

JDBC4.0

commit(Xid xid, boolean onePhase)

○

○

−

end(Xid xid, int flags)

○

○

−

getTransactionTimeout()

○

○

無条件に0を返却します。

isSameRM(XAResource xares)

○

○

−

prepare(Xid xid)

○

○

−

recover(int flag)

○

○

−

rollback(Xid xid)

○

○

−

setTransactionTimeout(int seconds)

○

○

トランザクションタイムアウト値の設定はしません。このメソッドは，トランザクションタイムアウト値が正常に設定されなかったことを示すfalseを返却します。

start(Xid xid, int flags)

○

○

−

（凡例）

○：提供されます。

−：特にありません。

(2)　パッケージ名称及びクラス名称

このインタフェースを直接使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称：PrdbXAResource

17.6.7　XAExceptionインタフェース

XAExceptionインタフェースは，javax.transaction.xaパッケージのXAExceptionクラスを直接利用します。XAExceptionインタフェースで提供される各メソッドの詳細，使用方法については，JDBCの関連ドキュメントを参照してください。

17.6.8　サポートしていないインタフェース

次のインタフェースはサポートしていません。

RowSet

RowSetInternal

RowSetListner

RowSetMetaData

RowSetReader

17.7　JDBC3.0 API

JDBC3.0 APIで追加された機能のうち，サポートする機能とドライバを次の表に示します。

表17‒81　JDBC3.0での追加機能とサポートするドライバ

機能

サポートするドライバ

JDBC2.0

JDBC4.0

パラメタメタデータ

×

○

ホールダブルカーソル

○

○

データベースメタデータ追加API

○

○

（凡例）

○：サポートされます。

×：サポートされません。

17.7.1　ParameterMetaDataインタフェース

(1)　概要

ParameterMetaDataインタフェースでは，PreparedStatementインタフェースの各パラメタに対するメタ情報を返す機能が提供されます。

(2)　メソッド

ParameterMetaDataインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒82　ParameterMetaDataインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

getParameterCount()

×

○

PreparedStatementオブジェクトのパラメタ数を返します。

isNullable(int param)

×

○

指定されたパラメタに対応する列に対して，null値が許可されているかどうかを返します。

isSigned(int param)

×

○

指定されたパラメタに対応する列のデータ型が符号付き数値かどうかを返します。

getPrecision(int param)

×

○

指定されたパラメタに対応する列のサイズを返します。

getScale(int param)

×

○

指定されたパラメタに対応する列の小数点以下のけた数を返します。

getParameterType(int param)

×

○

指定されたパラメタに対応する列のSQLデータ型を返します。

getParameterTypeName(int param)

×

○

指定されたパラメタに対応する列のデータベース固有の形名を返します。

getParameterClassName(int param)

×

○

指定されたパラメタをPreparedStatement.setObjectで設定する場合に適用される，Javaクラスの完全指定された名前を返します。

getParameterMode(int param)

×

○

指定されたパラメタのモードを返します。

（凡例）

○：提供されます。

×：提供されません。

(a)　getParameterCount()

【機能】

PreparedStatementオブジェクトのパラメタ数を返します。

【形式】

public int getParameterCount() throws SQLException

【引数】

なし。

【戻り値】

int型：

パラメタ数

【発生する例外】

なし。

(b)　isNullable(int param)

【機能】

指定されたパラメタに対応する列に対して，null値が許可されているかどうかを返します。

【形式】

public int isNullable(int param) throws SQLException

【引数】

int param：

１から始まるパラメタ番号

【戻り値】

int型：

ParameterMetaData.parameterNullable：null値が許可されています。

ParameterMetaData.parameterNoNulls：null値が許可されていません。

【発生する例外】

paramに指定された値が0以下，又はパラメタ数より大きい場合，メッセージKFPJ20413-EでSQLExceptionを投入します。

(c)　isSigned(int param)

【機能】

指定されたパラメタに対応する列のデータ型が符号付き数値かどうかを返します。

【形式】

public boolean isSigned(int param) throws SQLException

【引数】

int param：

１から始まるパラメタ番号

【戻り値】

boolean型：

true：データ型が符号付き数値です。

false：データ型が符号付き数値ではありません。

【機能詳細】

指定されたパラメタのデータ型が符号付き数値かどうかを返します。列のHiRDBのデータ型と返す値について次の表に示します。

表17‒83　列のHiRDBのデータ型と返す値（isSignedメソッド）

列のHiRDBのデータ型

返す値

INTEGER，SMALLINT，FLOAT，DOUBLE PRECISION，REAL，SMALLFLT，DECIMAL，NUMERIC

true

上記以外の型

false

【発生する例外】

paramに指定された値が0以下，又はパラメタ数より大きい場合，メッセージKFPJ20413-EでSQLExceptionを投入します。

(d)　getPrecision(int param)

【機能】

指定されたパラメタに対応する列のサイズを返します。

【形式】

publc int getPrecision(int param) throws SQLException

【引数】

int param：

１から始まるパラメタ番号

【戻り値】

int型：

パラメタに対応する列のサイズ

【機能詳細】

指定されたパラメタに対応する列のサイズを返します。列のHiRDBのデータ型と返す値について，次の表に示します。

表17‒84　列のHiRDBのデータ型と返す値（getPrecisionメソッド）

列のHiRDBのデータ型

返す値

返却値の単位

BLOB(n)，BINARY(n)

n

バイト数

INTEGER

10

10進けた数

SMALLINT

5

FLOAT，DOUBLE PRECISION

15

SMALLFLT，REAL

7

DECIMAL(n,m)，NUMERIC(n,m)

n

CHAR(n)，MCHAR(n)，VARCHAR(n)，MVARCHAR(n)

n

文字数

NCHAR(n)，NVARCHAR(n)

n

DATE

10

TIME

8

TIMESTAMP(n)

n>0の場合：19+(n+1)

n=0の場合：19

ANY

0

−

【発生する例外】

paramに指定された値が0以下，又はパラメタ数より大きい場合，メッセージKFPJ20413-EでSQLExceptionを投入します。

(e)　getScale(int param)

【機能】

指定されたパラメタに対応する列の小数点以下のけた数を返します。

【形式】

public int getScale(int param) throws SQLException

【引数】

int param：

１から始まるパラメタ番号

【戻り値】

int型：

パラメタに対応する列の小数点以下のけた数

【機能詳細】

指定された列の小数点以下のけた数を返します。列のHiRDBのデータ型と返す値について次の表に示します。

表17‒85　列のHiRDBのデータ型と返す値（getScaleメソッド）

列のHiRDBのデータ型

返す値

DECIMAL，NUMERIC

小数点以下のけた数

TIMESTAMP

ミリ秒以下のけた数

上記以外

0

【発生する例外】

paramに指定された値が0以下，又はパラメタ数より大きい場合，メッセージKFPJ20413-EでSQLExceptionを投入します。

(f)　getParameterType(int param)

【機能】

指定されたパラメタに対応する列のSQLデータ型を返します。

【形式】

public int getParameterType(int param) throws SQLException

【引数】

int param：

１から始まるパラメタ番号

【戻り値】

int型：

java.sql.TypesクラスからのSQL型

【機能詳細】

指定したパラメタに対応する列のSQLデータ型を返します。SQLデータ型と返す値の対応については，「データ型」を参照してください。

ただし，繰返し列の場合はjava.sql.Types.Arrayを返します。

【発生する例外】

paramに指定された値が0以下，又はパラメタ数より大きい場合，メッセージKFPJ20413-EでSQLExceptionを投入します。

(g)　getParameterTypeName(int param)

【機能】

指定されたパラメタに対応する列のデータベース固有の形名を返します。

【形式】

public String getParameterTypeName(int param) throws SQLException

【引数】

int param：

１から始まるパラメタ番号

【戻り値】

Stringオブジェクト

【機能詳細】

指定されたパラメタに対応する列のデータベース固有の形名を返します。列のHiRDBのデータ型と返却する文字列について次の表に示します。

表17‒86　列のHiRDBのデータ型と返却する文字列（getParameterTypeNameメソッド）

列のHiRDBのデータ型

返却する文字列

BLOB

"BLOB"

BINARY

"BINARY"

INTEGER

"INTEGER"

SMALLINT

"SMALLINT"

FLOAT，DOUBLE PRECISION

"FLOAT"

SMALLFLT，REAL

"REAL"

DECIMAL，NUMERIC

"DECIMAL"

CHAR

"CHAR"

MCHAR

"MCHAR"

NCHAR

"NCHAR"

VARCHAR

"VARCHAR"

MVARCHAR

"MVARCHAR"

NVARCHAR

"NVARCHAR"

DATE

"DATE"

TIME

"TIME"

TIMESTAMP

"TIMESTAMP"

ANY

"ANY"

【発生する例外】

paramに指定された値が0以下，又はパラメタ数より大きい場合，メッセージKFPJ20413-EでSQLExceptionを投入します。

(h)　getParameterClassName(int param)

【機能】

指定されたパラメタをPreparedStatement.setObjectで設定する場合に適用される，Javaクラスの完全指定された名前を返します。

【形式】

public String getParameterClassName(int param) throws SQLException

【引数】

int param：

１から始まるパラメタ番号

【戻り値】

Stringオブジェクト

【機能詳細】

パラメタをPreparedStatement.setObjectで設定する場合に適用される，Javaクラスの完全指定された名前をString型で返します。setObjectに渡せるオブジェクトの型は複数存在するため，代表的と考えられるもの（推奨する型があるものはその型）を返します。

列のHiRDBのデータ型と返却する文字列について次の表に示します。ただし，繰返し列の場合は"java.sql.Array"を返却します。

表17‒87　列のHiRDBのデータ型と返却する文字列（getParameterClassNameメソッド）

列のHiRDBのデータ型

返却する文字列

BLOB

"java.sql.Blob"

BINARY

"java.sql.Blob"

INTEGER

"java.lang.Integer"

SMALLINT

"java.lang.Integer"

FLOAT，DOUBLE PRECISION

"java.lang.Double"

SMALLFLT，REAL

"java.lang.Float"

DECIMAL，NUMERIC

"java.math.BigDecimal"

CHAR

"java.lang.String"

MCHAR

"java.lang.String"

NCHAR

"java.lang.String"

VARCHAR

"java.lang.String"

MVARCHAR

"java.lang.String"

NVARCHAR

"java.lang.String"

DATE

"java.sql.Date"

TIME

"java.sql.Time"

TIMESTAMP

"java.sql.Timestamp"

ANY

"java.lang.Object"

【発生する例外】

paramに指定された値が0以下，又はパラメタ数より大きい場合，メッセージKFPJ20413-EでSQLExceptionを投入します。

(i)　getParameterMode(int param)

【機能】

指定されたパラメタのモードを返します。

【形式】

public int getParameterMode(int param) throws SQLException

【引数】

int param：

１から始まるパラメタ番号

【戻り値】

int型：

ParameterMetaData.parameterModeIn：パラメタのモードがINです。

ParameterMetaData.parameterModeOut：パラメタのモードがOUTです。

ParameterMetaData.parameterModeInOut：パラメタのモードがINOUTです。

【発生する例外】

paramに指定された値が0以下，又はパラメタ数より大きい場合，メッセージKFPJ20413-EでSQLExceptionを投入します。

17.7.2　サポートしていないインタフェース

次のインタフェースはサポートしていません。

Savepoint

17.8　JDBC4.0 API

17.8.1　JDBC4.0 APIでの追加機能

JDBC4.0 APIで追加された機能のうち，サポートする機能とドライバを次の表に示します。

表17‒88　JDBC4.0での追加機能とサポートするドライバ

機能

サポートするドライバ

JDBC2.0

JDBC4.0

java.sql.Driver自動ローディング

×

○

BLOB機能拡張

×

○

ラッパーパターン

×

○

接続管理

×

○

SQLException拡張

×

○

スカラ関数追加

○

○

StatementEventListener

×

○

（凡例）

○：サポートされます。

×：サポートされません。

(1)　java.sql.Driver自動ローディング

JDBC4.0より前の規格では，Java仮想マシンへのDriverクラスの登録が必要でした。JDBC4.0以降は，Driverクラスの登録が不要になります。Driverクラスの登録については，「Driverクラスの登録」を参照してください。なお，JDBC4.0以降でDriverクラスを登録しても，動作に影響はありません。

(2)　BLOB機能拡張

JDBC4.0では，BLOBに関するメソッドが複数追加されました。このうち，Blobインタフェースのfree()メソッドをサポートします。free()メソッドについては，「free()」を参照してください。

(3)　ラッパーパターン

Connection，DatabaseMetaData，DataSource，ResultSet，ResultSetMetaData，Statement，PreparedStatement，及びCallableStatementの各インタフェースがWrapperインタフェースを継承します。Wrapperインタフェースについては「Wrapperインタフェース」を参照してください。

(4)　接続管理

JDBC4.0では，コネクションの状態を確認するためのメソッド，及びコネクションプーリングを制御するためのメソッドが追加されています。このうち，コネクションの状態を確認するメソッド（ConnectionインタフェースのisValid(int timeout)メソッド）をサポートします。isValid(int timeout)メソッドについては「isValid(int timeout)」を参照してください。

(5)　SQLException拡張

JDBC4.0では，SQLExceptionのサブクラスとして複数の例外クラスが追加されています。追加された例外クラスと，サポートの可否を次の表に示します。ただし，これらの例外クラスは，HiRDBサーバで詳細なSQLSTATEが設定されている場合にだけ返却されます。SQLSTATEが詳細に設定されていない場合は，JDBCドライバ内で検知するエラーを除き，JDBC2.0と同様にSQLExceptionが返却されます。

表17‒89　追加された例外クラスと，サポートの可否

クラス名

サポート可否

SQLNonTransientException

○

SQLFeatureNotSupportedException

○

SQLNonTransientConnectionException

○

SQLDataException

○

SQLIntegrityConstraintViolationException

○

SQLInvalidAuthorizationException

○

SQLSyntaxErrorException

○

SQLTransientException

○

SQLTransientConnectionException

○

SQLTransactionRollbackException

○

SQLTimeoutException

○

SQLRecoverableException

○

SQLClientInfoException

○

（凡例）

○：サポートします。

詳細は，「SQLException拡張機能」を参照してください。

(6)　スカラ関数追加

JDBC4.0では，スカラ関数が複数追加されました。追加されたスカラ関数と，サポートの可否を次の表に示します。

表17‒90　追加されたスカラ関数と，サポートの可否

スカラ関数

サポート可否

CHARA_LENGTH，

CHARACTER_LENGTH

×

CURRENT_DATE

○

CURRENT_TIME

○

CURRENT_TIMESTAMP

○

EXTRACT

×

OCTET_LENGTH

×

POSITION

○

（凡例）

○：サポートします。

×：サポートしません。

(7)　StatementEventListener

StatementEventListenerはStatementプールを管理する外部プログラムが使用する機能です。Statementプール機能を実装しているアプリケーションサーバ向けに提供します。

アプリケーションサーバは，PreparedStatementが無効となった場合にJDBCドライバから通知を受けるため，該当インタフェースを実装してJDBCドライバに登録します。PreparedStatementが無効となると，該当インタフェースを通してJDBCドライバからアプリケーションサーバへ通知を行い，アプリケーションサーバは無効となったPreparedStatementをStatementプールから削除します。

なお，上記のPreparedStatementは，CallableStatement（PreparedStatementを継承）も含むものとします（以降も同様です）。

StatementEventListenerのメソッドの呼び出し契機を次の表に示します。

表17‒91　StatementEventListenerのメソッドの呼び出し契機

メソッド

呼び出し契機

statementClosed

なし

statementErrorOccurred

SQL実行時にエラーとなり，PreparedStatementが無効となった時点

PreparedStatementが無効になる契機とstatementErrorOccurredメソッド呼び出し契機を次の表に示します。

表17‒92　PreparedStatementが無効になる契機とstatementErrorOccurredメソッド呼び出し契機

メソッド

statementErrorOccurredメソッド

呼び出し契機

対象PreparedStatement

SQLException

発生時

接続障害を示すSQLCODE（-720，-722，-723，-728，-732，-735，-932，-1700）※1

該当SQLException投入直前

SQLExceptionが発生したConnectionで生成したすべてのPreparedStatement

SQL実行エラーによる暗黙的ロールバック

トランザクション決着時（STATEMENT_COMMIT_BEHAVIOR=FALSEの場合※2）

Connection.commit，XAResource.commit実行時

無効となったPreparedStatementを使用したことで発生するSQLException（SQLCODE=-901，又は-1512）投入直前

SQLException発生時に処理対象としているPreparedStatement

XAResource.prepareでのトランザクション決着時

Connection.rollback，XAResource.rollback実行時

CALL文実行時（プロシジャ内でトランザクション決着）

PURGE TABLE実行時

定義系SQL実行時（PDDDLDEAPRPEXE=YES，又はPDDDLDEAPRP=YESの場合※3）

SET SESSION AUTHORIZATION実行時

SQLExceptionを伴わない接続障害発生時

XAResourceのメソッド実行時に接続障害によってXAException投入

無効となったConnectionを使用したことで発生するSQLException（SQLCODE=-563）投入直前

接続障害が発生したConnectionで生成したすべてのPreparedStatement

InputStreamによるデータ取得時に接続障害によってIOException投入

PrdbConnection.checkSession実行時にSESSION_ALIVE以外が返却

Connection.isValidでfalseが返却

注※1

ConnectionEventListenerも登録されている場合，StatementEventListenerの呼び出しを先行します。

注※2

STATEMENT_COMMIT_BEHAVIORの指定方法，及び優先順位については，「接続情報の優先順位」の「ステートメントのコミット実行後の状態」を参照してください。

注※3

PDDDLDEAPRPEXE,PDDDLDEAPRPの指定方法，及び優先順位については，「接続情報の優先順位」の「そのほかのクライアント環境定義の優先順位」を参照してください。

17.8.2　Wrapperインタフェース

(1)　概要

Wrapperインタフェースでは，JDBCでの規定以外のメソッドを呼び出すための標準化された仕組みが提供されます。Connection，DatabaseMetaData，DataSource，ResultSet，ResultSetMetaData，Statement，PrepareStatement，CallableStatement，及びParameterMetaDataの各インタフェースがWrapperインタフェースを継承します。

(2)　メソッド

Wrapperインタフェースのメソッド一覧を次の表に示します。なお，表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると，SQLExceptionを投入します。

表17‒93　Wrapperインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

isWrapperFor(Class<?> iface)

×

○

指定されたクラスのオブジェクトをunwrapメソッドで返却できるかどうかを返します。

unwrap(Class<T> iface)

×

○

指定されたクラスのオブジェクトを返します。

（凡例）

○：提供されます。

×：提供されません。

Wrapperインタフェースを継承したインタフェースに対して，unwrapで指定できるクラスの一覧を次の表に示します。

表17‒94　unwrapで指定できるクラス

項番

インタフェース

unwrapで指定できるクラス

1

java.sql.Connection

JP.co.Hitachi.soft.HiRDB.JDBC.PrdbConnection

2

java.sql.DatabaseMetaData

JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDatabaseMetaData

3

javax.sql.DataSource

JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDataSource

4

java.sql.ResultSet

JP.co.Hitachi.soft.HiRDB.JDBC.PrdbResultSet

5

java.sql.ResultSetMetaData

JP.co.Hitachi.soft.HiRDB.JDBC.PrdbResultSetMetaData

6

java.sql.Statement

JP.co.Hitachi.soft.HiRDB.JDBC.PrdbStatement

7

java.sql.PreparedStatement

JP.co.Hitachi.soft.HiRDB.JDBC.PrdbPreparedStatement

8

java.sql.CallableStatement

JP.co.Hitachi.soft.HiRDB.JDBC.PrdbCallableStatement

9

java.sql.ParameterMetaData

JP.co.Hitachi.soft.HiRDB.JDBC.PrdbParameterMetaData

(a)　isWrapperFor(Class<?> iface)

【機能】

指定されたクラスのオブジェクトをunwrapで返却できるかどうかを返します。

【形式】

public boolean isWrapperFor(Class<?> iface) throws SQLException

【引数】

Class iface：

チェック対象のクラス

【戻り値】

boolean型：

true：指定されたクラスのオブジェクトをunwrapで返却できます。

false：指定されたクラスのオブジェクトをunwrapで返却できません。

【機能詳細】

指定されたクラスのオブジェクトをunwrapで返却できるかどうかを返します。このメソッドでtrueが返された場合，このメソッドで指定した引数と同じ引数でunwrapを実行すれば，必ず成功します。

【発生する例外】

なし。

(b)　unwrap(Class<T> iface)

【機能】

指定されたクラスのオブジェクトを返します。

【形式】

public <T> T unwrap(Class<T> iface) throws SQLException

【引数】

Class<T> iface：

取得オブジェクトのクラス

【戻り値】

<T> T：指定されたクラスのオブジェクト

【発生する例外】

指定されたクラスのオブジェクトを返却できない場合，メッセージKFPJ20022-EでSQLExceptionを投入します。

17.8.3　SQLException拡張機能

エラーが発生した場合，JDBC2.0ではSQLExceptionが投入されましたが，JDBC4.0ではJDBC4.0で追加されたSQLExceptionの下位分類の例外クラスが投入されます。ただし，HiRDBサーバで詳細なSQLSTATEが設定されていない場合は，JDBCドライバ内で検知できるエラーを除き，JDBC2.0と同様にSQLExceptionが投入されます。

(1)　サポートクラス一覧

JDBC4.0で返却される例外クラスの一覧と各クラスの説明を次の表に示します。

表17‒95　 JDBC4.0で追加された例外クラス一覧

クラス名

内容

エラー後の接続

SQLNonTransientException

一時的ではないエラーを示します。失敗したSQLを再試行しても正常に実行できない場合に投入されます。

有効

SQLFeatureNotSupportedException

SQLSTATEのクラス値が0A（サポートされていない機能）の場合に投入されます。

SQLNonTransientConnectionException

SQLSTATEのクラス値が08（コネクション違反）の場合に投入されます。

無効（接続時のエラー）

SQLDataException

SQLSTATEのクラス値が22（データ例外）の場合に投入されます。

有効

SQLIntegrityConstraintViolationException

SQLSTATEのクラス値が23（整合性制約違反）の場合に投入されます。

SQLInvalidAuthorizationException

SQLSTATEのクラス値が28（認可識別子の指定が正しくない）の場合に投入されます。

無効（接続時のエラー）

SQLSyntaxErrorException

SQLSTATEのクラス値が42（構文誤り又はアクセス規則違反）の場合に投入されます。

有効

SQLTransientException

一時的なエラーを示します。失敗したSQLを再試行すれば成功する可能性がある場合に投入されます。

SQLTransientConnectionException

SQLSTATEのクラス値が08（コネクション違反）の場合に投入されます（HiRDBが開始又は終了中である場合など）。

無効（接続時のエラー）

SQLTransactionRollbackException

SQLSTATEのクラス値が40（トランザクションがロールバックした）の場合に投入されます。

有効

SQLTimeoutException

タイムアウトが発生した場合に投入されます。

SQLRecoverableException

接続を再確保した上で，失敗したトランザクションを再試行すれば成功する可能性がある場合に投入されます。

無効

SQLClientInfoException

設定できないクライアントのプロパティが一つ以上ある場合に，Connection.setClientInfoメソッドによって投入されます。

−

（凡例）

−：該当しません（接続状態は関係しません）。

JDBC4.0で追加された例外クラスの継承関係を次に示します。

java.sql.SQLException
  │
  ├ java.sql.SQLNonTransientException
  │    ├ java.sql.SQLFeatureNotSupportedException
  │    ├ java.sql.SQLNonTransientConnectionException
  │    ├ java.sql.SQLDataException
  │    ├ java.sql.SQLIntegrityConstraintViolationException
  │    ├ java.sql.SQLInvalidAuthorizationException
  │    ├ java.sql.SQLSyntaxErrorException
  │
  ├ java.sql.SQLTransientException
  │    ├ java.sql.SQLTransientConnectionException
  │    ├ java.sql.SQLTransactionRollbackException
  │    ├ java.sql.SQLTimeoutException
  │
  ├ java.sql.SQLRecoverableException
  └ java.sql.SQLClientInfoException

(2)　例外クラス投入の条件

Type4 JDBCドライバがサポートする例外クラスは，詳細なSQLSTATEの設定有無によって投入の有無が異なります。詳細なSQLSTATEの設定と例外クラス投入の有無を次の表に示します。

表17‒96　詳細なSQLSTATEの設定と例外クラス投入の有無

JDBC規格

クラス名

詳細なSQLSTATE

設定あり

設定なし

1.0

SQLException

×

○

2.0

BatchUpdateException

○

○

XAException

○

○

4.0

SQLNonTransientException

○

○※

SQLFeatureNotSupportedException

○

○※

SQLNonTransientConnectionException

○

×

SQLDataException

○

○※

SQLIntegrityConstraintViolationException

○

×

SQLInvalidAuthorizationException

○

×

SQLSyntaxErrorException

○

○※

SQLTransientException

○

×

SQLTransientConnectionException

○

○※

SQLTransactionRollbackException

○

○

SQLTimeoutException

○

×

SQLRecoverableException

○

○

SQLClientInfoException

○

○

（凡例）

○：投入されます。

×：投入されません。

注※

JDBCドライバ内で検知できるエラーだけ投入されます。

SQLSTATEの値を詳細に出力するかどうかの設定については，「PDSTANDARDSQLSTATE」を参照してください。

(3)　メソッド詳細

例外クラスが提供する各メソッドの詳細及び使用方法については，JDBCの関連ドキュメントを参照してください。なお，各例外クラスはjava.sqlパッケージのクラスを直接利用するため，独自の仕様はありません。

(4)　HiRDBのエラーと各例外クラスの対応

HiRDBのエラー（JDBCドライバ内のエラーを含む）と各例外クラスの対応については，マニュアル「HiRDB メッセージ」の「SQLSTATE」を参照してください。

(5)　注意事項

executeQuery()などのSQL実行メソッドで，setQueryTimeout()又はPDCWAITTIMEで設定した時間でタイムアウトした場合，JDBC規格ではSQLTimeoutExceptionが投入されます。しかし，Type4 JDBCドライバでは，タイムアウト時にHiRDBサーバと必ず切断されるため，SQLRecoverableExceptionが投入されます。

17.8.4　サポートしていないインタフェース

次のインタフェースはサポートしていません。

NClob

RowId

SQLXML

17.9　システムプロパティの設定

ここでは，システムプロパティの設定について説明します。

なお，クライアント環境定義とシステムプロパティの対応については，「指定できるクライアント環境定義」を参照してください。

DABroker for Java互換機能に関するシステムプロパティについては，「DABroker for Java互換機能に関するシステムプロパティ」を参照してください。

Exceptionトレースログを取得するためのシステムプロパティの設定については，「Exceptionトレースログを取得するための設定」の「システムプロパティの設定」を参照してください。

不正電文トレースを取得するためのシステムプロパティの設定については，「不正電文トレースを取得するための設定」の「システムプロパティの設定」を参照してください。

17.9.1　ステートメントに関する接続情報の設定

指定できるシステムプロパティを次の表に示します。

表17‒97　ステートメントに関するシステムプロパティ

プロパティ名

指定内容

HiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかを指定します。

HiRDB_for_Java_UPDATECOUNT_BEHAVIOR

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかを指定します。

(1)　HiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかを指定します。なお，指定した値について大文字小文字の区別はしません。

【指定値】

TRUE：前処理結果を無効にします。

FALSE：前処理結果を無効にしません。

上記以外：指定が省略されたものとします。

【省略値】

この指定を省略した場合は，ほかの設定方法で指定した値を使用します。使用する値は，「接続情報の優先順位」の「ステートメントのcloseメソッド実行時のSQL前処理の破棄」を参照してください。どの指定もない場合は，FALSEが指定されたものとします。

このプロパティの指定は，「getConnectionメソッドによるHiRDBへの接続」の「HiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR」の設定と同等になります。

(2)　HiRDB_for_Java_UPDATECOUNT_BEHAVIOR

更新系SQL発行時の更新行数が0であった場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかを指定します。なお，指定した値について大文字小文字の区別はしません。

【指定値】

TRUE：更新系SQL発行時の更新行数が0の場合，-1を返却します（JDBC規格）。

FALSE：更新系SQL発行時の更新行数が0の場合，0を返却します。

上記以外：指定が省略されたものとします。

【省略値】

この指定を省略した場合は，ほかの設定方法で指定した値を使用します。使用する値は，「接続情報の優先順位」の「ステートメントの更新行数がJDBC規格に準拠するかどうか」を参照してください。どの指定もない場合は，FALSEが指定されたものとします。

このプロパティの指定は，「getConnectionメソッドによるHiRDBへの接続」の「HiRDB_for_Java_UPDATECOUNT_BEHAVIOR」の設定と同等になります。

17.9.2　互換維持に関する接続情報の設定

指定できるシステムプロパティを次の表に示します。

表17‒98　互換維持に関するシステムプロパティ

項番

プロパティ名

指定内容

1

HiRDB_for_Java_Compatible

Type4 JDBCドライバのメソッドを，JDBCの規格に準拠した動作とするか，HiRDB独自の動作とするかを指定します。

(1)　HiRDB_for_Java_Compatible

Type4 JDBCドライバのメソッドを，JDBCの規格に準拠した動作とするか，HiRDB独自の動作とするかを指定します。なお，指定した値について大文字小文字の区別はしません。

【指定値】

NO：次の表に示すすべてのメソッドがJDBCの規格に準拠した動作をします。

ALL：次の表に示すすべてのメソッドがHiRDB独自の動作をします。

上記以外：指定が省略されたものとします。

【省略値】

この指定を省略した場合は，NOを仮定します。

HiRDB_for_Java_Compatibleプロパティの指定値とメソッドの動作を次の表に示します。

表17‒99　HiRDB_for_Java_Compatibleプロパティの指定値によるメソッドの動作

項番

対象クラス

対象メソッド

指定値による動作

返却する情報

NO（JDBC規格）

ALL（HiRDB独自）

1

DatabaseMetaData

getImportedKeys

指定されたテーブルの外部キー及び当該外部キーが参照する主キー

指定されたテーブルの主キー及び当該主キーを参照する外部キー

getExportedKeys

指定されたテーブルの主キー及び当該主キーを参照する外部キー

指定されたテーブルの外部キー及び当該外部キーが参照する主キー

17.9.3　DatabaseMetaDataクラスのメソッドの動作に関する接続情報の設定

指定できるシステムプロパティを次の表に示します。

表17‒100　DatabaseMetaDataクラスのメソッドの動作に関するシステムプロパティ

項番

プロパティ名

指定内容

1

HiRDB_for_Java_METADATA_BEHAVIOR

DatabaseMetaDataクラスのメソッドの動作を変更する場合に指定します。

(1)　HiRDB_for_Java_METADATA_BEHAVIOR

DatabaseMetaDataクラスのメソッドの動作を変更する場合に指定します。なお，指定した値について大文字小文字の区別はしません。

【指定値】

CAT_SEP_EMPTY：次の表に示すメソッドの動作を変更します。

上記以外：指定が省略されたものとします。

【省略値】

この指定を省略した場合は，DatabaseMetaDataクラスのメソッドの動作を変更しません。

HiRDB_for_Java_METADATA_BEHAVIORプロパティの指定値によるメソッドの動作を次の表に示します。

表17‒101　HiRDB_for_Java_METADATA_BEHAVIORプロパティの指定値によるメソッドの動作

項番

対象クラス

対象メソッド

指定値による動作

CAT_SEP_EMPTY

指定なし

1

DatabaseMetaData

getCatalogSeparator

空文字("")を返します。

nullを返します。

17.10　接続情報設定／取得インタフェース

JDBC2.0 Optional Packageで提供する，DataSource，ConnectionPoolDataSource，及びXADataSourceの各クラスでは，JDBC2.0 Optional Package規格で定められたメソッドのほかに，DB接続に必要となる接続情報設定／取得用のメソッドを提供します。

接続情報設定／取得メソッドの一覧を次の表に示します。

表17‒102　接続情報設定／取得メソッドの一覧

メソッド

機能

setDescription

データベースへの接続に必要な情報（接続付加情報）を設定します。

getDescription

データベースへの接続に必要な情報（接続付加情報）を取得します。

setDBHostName

接続するHiRDBのホスト名を設定します。

getDBHostName

接続するHiRDBのホスト名を取得します。

setJDBC_IF_TRC

JDBCインタフェースメソッドトレースの取得の有無を設定します。

getJDBC_IF_TRC

JDBCインタフェースメソッドトレースの取得の有無を取得します。

setTRC_NO

JDBCインタフェースメソッドトレースのエントリ数を設定します。

getTRC_NO

JDBCインタフェースメソッドトレースのエントリ数を取得します。

setUapName

UAP名称を設定します。

getUapName

UAP名称を取得します。

setUser

データベース接続時の認可識別子を設定します。

getUser

データベース接続時の認可識別子を取得します。

setPassword

データベース接続時のパスワードを設定します。

getPassword

データベース接続時のパスワードを取得します。

setXAOpenString

XAオープン文字列を設定します。

getXAOpenString

XAオープン文字列を取得します。

setXACloseString

XAクローズ文字列を設定します。

getXACloseString

XAクローズ文字列を取得します。

setLONGVARBINARY_Access

JDBC SQLタイプLONGVARBINARY（HiRDBのデータ型であるBLOB型，及びBINARY型）のデータへのアクセス方法を設定します。

getLONGVARBINARY_Access

JDBC SQLタイプLONGVARBINARY（HiRDBのデータ型であるBLOB型，及びBINARY型）のデータへのアクセス方法を取得します。

setSQLInNum

実行するSQLの入力？パラメタの最大数を設定します。

getSQLInNum

実行するSQLの入力？パラメタの最大数を取得します。

setSQLOutNum

実行するSQLの検索項目の最大数を設定します。

getSQLOutNum

実行するSQLの検索項目の最大数を取得します。

setSQLWarningLevel

SQL実行時に発生した警告保持レベルを設定します。

getSQLWarningLevel

setSQLWarningLevelメソッドで設定した警告保持レベルを取得します。

setXALocalCommitMode

XA接続時，トランザクションが分散トランザクションでない場合，オートコミット機能を有効にするかどうかを設定します。

getXALocalCommitMode

XA接続時，トランザクションが分散トランザクションでない場合，オートコミット機能を有効にするかどうかの設定情報を取得します。

setSQLWarningIgnore

データベースから返される警告をConnectionクラスで保持するかどうかを設定します。

getSQLWarningIgnore

データベースから返される警告をConnectionクラスで保持するかどうかの設定情報を取得します。

setHiRDBCursorMode

HiRDBがコミットした場合にResultSetクラスのオブジェクトを有効とするかどうかを設定します。

getHiRDBCursorMode

HiRDBがコミットした場合にResultSetクラスのオブジェクトを有効とするかどうかの設定情報を取得します。

setNotErrorOccurred

ConnectionEventListener.connectionErrorOccurredの発生を抑止するかどうかを設定します。

getNotErrorOccurred

ConnectionEventListener.connectionErrorOccurredの発生を抑止するかどうかの設定情報を取得します。

setEnvironmentVariables

HiRDBのクライアント環境定義を設定します。

getEnvironmentVariables

HiRDBのクライアント環境定義を取得します。

setEncodeLang

データ変換時の変換文字セット名称を設定します。

getEncodeLang

設定された変換文字セット名称を取得します。

setMaxBinarySize

JDBC SQLタイプLONGVARBINARY型データ取得時のデータサイズの上限を設定します。

getMaxBinarySize

JDBC SQLタイプLONGVARBINARY型データ取得時のデータサイズの上限を取得します。

setStatementCommitBehavior

コミットした場合，ステートメントオブジェクトをコミット実行後も有効とするかどうかを設定します。

getStatementCommitBehavior

コミットした場合，ステートメントオブジェクトをコミット実行後も有効とするかどうかの設定情報を取得します。

setLONGVARBINARY_AccessSize

HiRDBサーバに対して一度に要求するJDBC SQLタイプLONGVARBINARY型データの長さを設定します。

getLONGVARBINARY_AccessSize

HiRDBサーバに対して一度に要求するJDBC SQLタイプLONGVARBINARY型データの長さを取得します。

setLONGVARBINARY_TruncError

JDBC SQLタイプLONGVARBINARY型データ取得時に切り捨てが発生した場合に，例外を投入するかどうかを設定します。

getLONGVARBINARY_TruncError

JDBC SQLタイプLONGVARBINARY型データ取得時に切り捨てが発生した場合に，例外を投入するかどうかの設定情報を取得します。

setStatementCloseBehavior

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかを設定します。

getStatementCloseBehavior

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかの設定情報を取得します。

setHiRDBINI

HiRDB.INIファイルのディレクトリを指定します。

getHiRDBINI

HiRDB.INIファイルのディレクトリを取得します。

setBatchExceptionBehavior

java.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかを指定します。

getBatchExceptionBehavior

java.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかの設定情報を取得します。

setUpdateCountBehavior

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかを指定します。

getUpdateCountBehavior

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかの設定情報を取得します。

setSendBufferSize

コネクションプーリングを使用している場合，コネクションが保持する送信バッファの初期サイズを指定します。

getSendBufferSize

コネクションプーリングを使用している場合，コネクションが保持する送信バッファの初期サイズを取得します。

setReceiveBufferSize

コネクションプーリングを使用している場合，コネクションが保持する受信バッファの初期サイズを指定します。

getReceiveBufferSize

コネクションプーリングを使用している場合，コネクションが保持する受信バッファの初期サイズを取得します。

17.10.1　setDescription

(1)　機能

データベースへの接続に必要な情報（接続付加情報）を設定します。

(2)　形式

public void setDescription ( String description ) throws SQLException

(3)　引数

String description：

接続付加情報を指定します。ナル値の場合は，このメソッドによって現在までに設定した接続付加情報を無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

このメソッドで設定する接続付加情報を次に示します。

設定内容

設定する内容

設定の要否

HiRDBのポート番号

HiRDBのポート番号を文字列で設定します。

HiRDBのポート番号の各設定方法での優先順位については，「接続情報の優先順位」を参照してください。

任意

HiRDBクライアントの環境変数グループ名

HiRDBクライアントの環境変数グループ名を，「@HIRDBENVGRP=」に続けて絶対パス名で指定します。次の点に注意してください。

「@HIRDBENVGRP=,」のように，"="の後に何も指定しないと，この項目による指定がないものとみなされます。

環境変数グループ名は大文字と小文字を区別するため，注意してください。なお，環境変数グループ名はOSに依存します。

環境変数グループ名に半角スペース，又は半角＠文字を含む場合，半角引用符（"）で囲んでください。環境変数グループ名を半角引用符で囲んだ場合，最後の半角引用符から文字終端までの文字は無視されます。また，半角引用符，半角コンマを含む環境変数グループ名は指定できません。

Windowsの場合，HiRDBクライアント環境変数登録ツールで登録した環境変数グループ名は指定できません。

任意

HiRDBの環境変数グループ識別子

HiRDBの環境変数グループ識別子を，英数字だけの4文字で設定します。

XA接続時は必要

注1

指定例を次に示します。なお，指定例では，PrdbDataSourceクラスのインスタンスの参照を持つ変数名を「ds」とします。また，△は半角スペースを示します。

例1：HiRDBのポート番号を指定する場合

ds.setDescription ("22200");

例2：環境変数グループ名のパスが「C:¥HiRDB_P¥Client¥HiRDB.ini」の場合

ds.setDescription ("@HIRDBENVGRP=C:¥¥HiRDB_P¥¥Client¥¥HiRDB.ini");

例3：環境変数グループ名のパスが「C:¥Program△Files¥HITACHI¥HiRDB¥HiRDB.ini」の場合

ds.setDescription ("@HIRDBENVGRP=¥"C:¥¥Program△Files¥¥HITACHI¥¥HiRDB¥HiRDB.ini¥"");

例4：環境変数グループ名のパスが/HiRDB_P/Client/HiRDB.iniの場合

ds.setDescription ("@HIRDBENVGRP=/HiRDB_P/Client/HiRDB.ini");

例5：XA接続時，HiRDBの環境変数グループ識別子を指定する場合

ds.setDescription ("HDB1");ds.setXAOpenString ("HDB1+C:¥¥Program△Files¥¥HITACHI¥¥HiRDB¥¥HiRDB.ini");

注2

環境変数グループ名を指定する場合は，指定内容に半角スペースを含めないでください。エラーになる指定例を次に示します。

@△HIRDBENVGRP=/HiRDB_P/Client/HiRDB.ini
@HIRDBENVGRP△=/HiRDB_P/Client/HiRDB.ini
@HIRDBENVGRP=△/HiRDB_P/Client/HiRDB.ini
@HIRDBENVGRP=/HiRDB_P/Client/HiRDB.ini△

注　△は半角スペースを示します。

(6)　発生する例外

半角＠文字から始まる環境変数グループ名を指定する場合，半角＠文字より後の指定内容に半角スペースがあるときは，SQLExceptionを投入します。

17.10.2　getDescription

(1)　機能

データベースへの接続に必要な情報（接続付加情報）を取得します。

(2)　形式

public String getDescription() throws SQLException

(3)　引数

なし。

(4)　戻り値

String：

接続付加情報（設定されていない場合，ナル値を返却します）

(5)　機能詳細

setDescriptionメソッドで設定された，データベースへの接続に必要な情報（接続付加情報）を返却します。

(6)　発生する例外

なし。

17.10.3　setDBHostName

(1)　機能

接続するHiRDBのホスト名を設定します。

(2)　形式

public void setDBHostName ( String db_host_name ) throws SQLException

(3)　引数

String db_host_name：

HiRDBのホスト名を指定します。

ナル値の場合は，このメソッドによって現在までに設定したホスト名を無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

接続するHiRDBのホスト名を設定します。

HiRDBのホスト名の各設定方法での優先順位は，「接続情報の優先順位」を参照してください。

(6)　発生する例外

なし。

17.10.4　getDBHostName

(1)　機能

接続するHiRDBのホスト名を取得します。

(2)　形式

public String getDBHostName() throws SQLException

(3)　引数

なし。

(4)　戻り値

String：

HiRDBのホスト名（設定されていない場合，ナル値を返却します）

(5)　機能詳細

setDBHostNameメソッドで設定された，接続するHiRDBのホスト名を返却します。

(6)　発生する例外

なし。

17.10.5　setJDBC_IF_TRC

(1)　機能

JDBCインタフェースメソッドトレースの取得の有無を設定します。

(2)　形式

public void setJDBC_IF_TRC ( boolean flag ) throws SQLException

(3)　引数

boolean flag：トレースの取得の有無を指定します。

true：取得します。

false：取得しません。

(4)　戻り値

なし。

(5)　機能詳細

JDBCインタフェースメソッドトレースの取得の有無を設定します。

このメソッドが呼び出されない場合のデフォルト値はfalse（取得しない）です。なお，別途setLogWriterメソッドで有効な出力先を設定しておいてください。JDBCインタフェースメソッドトレースの詳細は，「JDBCインタフェースメソッドトレース」を参照してください。

(6)　発生する例外

なし。

(7)　注意事項

JDBCインタフェースメソッドトレースの取得の有無は，インスタンス単位では設定できません。このメソッドで設定したJDBCインタフェースメソッドトレースの取得の有無は，設定時点，及び設定以降に存在するすべてのDataSource，ConnectionPoolDataSource，及びXADataSourceのインスタンスに影響します。

17.10.6　getJDBC_IF_TRC

(1)　機能

JDBCインタフェースメソッドトレースの取得の有無を取得します。

(2)　形式

public boolean getJDBC_IF_TRC() throws SQLException

(3)　引数

なし。

(4)　戻り値

boolean：

トレース取得の有無です。

true：取得します。

false：取得しません。

(5)　機能詳細

setJDBC_IF_TRCメソッドで設定された，JDBCインタフェースメソッドトレースの取得の有無を返却します。

JDBCインタフェースメソッドトレースの詳細は，「JDBCインタフェースメソッドトレース」を参照してください。

(6)　発生する例外

なし。

17.10.7　setTRC_NO

(1)　機能

JDBCインタフェースメソッドトレースのエントリ数を設定します。

(2)　形式

public void setTRC_NO ( int trc_no ) throws SQLException

(3)　引数

int trc_no：

JDBCインタフェースメソッドトレースのエントリ数を指定します。

(4)　戻り値

なし。

(5)　機能詳細

JDBCインタフェースメソッドトレースのエントリ数を，10〜1,000の範囲で設定します。

このメソッドが呼び出されない場合，デフォルトのJDBCインタフェースメソッドトレースのエントリ数は500です。

JDBCインタフェースメソッドトレースの詳細は，「JDBCインタフェースメソッドトレース」を参照してください。

(6)　発生する例外

10〜1,000以外の値を設定した場合は，SQLExceptionを投入します。

17.10.8　getTRC_NO

(1)　機能

JDBCインタフェースメソッドトレースのエントリ数を取得します。

(2)　形式

public int getTRC_NO() throws SQLException

(3)　引数

なし。

(4)　戻り値

int：

JDBCインタフェースメソッドトレースのエントリ数（設定されていない場合，デフォルトである500を返却します）

(5)　機能詳細

setTRC_NOメソッドで設定された，JDBCインタフェースメソッドトレースのエントリ数を返却します。

JDBCインタフェースメソッドトレースの詳細は，「JDBCインタフェースメソッドトレース」を参照してください。

(6)　発生する例外

なし。

17.10.9　setUapName

(1)　機能

UAP名称を設定します。

(2)　形式

public void setUapName ( String uap_name ) throws SQLException

(3)　引数

String uap_name：

UAP名称を指定します。

ナル値の場合は，このメソッドによって現在までに設定したUAP名称を無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

UAP名称を設定します。

指定されたUAP名称は，次の箇所で使用されます。

各種トレース情報への出力情報

pdlsコマンドに-d prcオプションを付与して実行したときに出力されるUAPの識別名称

次のどちらかの場合は，このメソッドによるUAP名称の設定がないものとみなします。設定がない場合の扱いについては，「接続情報の優先順位」を参照してください。

引数uap_nameにナル値を指定した場合

引数uap_nameに長さ0の文字列，又は半角スペースだけの文字列を指定した場合

(6)　発生する例外

なし。

(7)　注意事項

このメソッドで指定したUAPは，setEncodeLangメソッドで指定された変換文字セットでエンコードされ，エンコード後のUAP名称の先頭から30バイトがHiRDBサーバに転送されます（30バイト目が文字の途中であっても，30バイトで打ち切られます）。そのため，HiRDBサーバで取得できるUAP名称は，エンコード後の先頭30バイトまでです。

17.10.10　getUapName

(1)　機能

UAP名称を取得します。

(2)　形式

public String getUapName() throws SQLException

(3)　引数

なし。

(4)　戻り値

String：

UAP名称

(5)　機能詳細

setUapNameメソッドで設定されたUAP名称を返却します。

UAP名称が設定されていない場合，又はnullが設定されている場合，次のどれかを返却します。

JDBC2.0：HiRDB_Type4_JDBC_Driver

JDBC4.0：HiRDB_Type4_JDBC40_Driver

(6)　発生する例外

なし。

17.10.11　setUser

(1)　機能

データベース接続時の認可識別子を設定します。

(2)　形式

public void setUser ( String user ) throws SQLException

(3)　引数

String user：

認可識別子を指定します。

ナル値の場合は，このメソッドによって現在までに設定した認可識別子を無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

認可識別子を設定します。

次のメソッドの実行時に，setUserメソッド，及びsetPasswordメソッドで指定された認可識別子及びパスワードを使用し，データベースへの物理接続を確保します。

DataSourceインタフェースのgetConnectionメソッド（引数なし）

ConnectionPoolDataSourceインタフェースのgetPooledConnectionメソッド

XADataSourceインタフェースのgetXAConnectionメソッド

なお，引数userがナル値の場合は，このメソッドによる認可識別子の設定がないものとみなします。

設定がない場合の扱いについては，「接続情報の優先順位」を参照してください。

(6)　発生する例外

引数userで指定した文字列の長さが0の場合，SQLExceptionを投入します。

17.10.12　getUser

(1)　機能

データベース接続時の認可識別子を取得します。

(2)　形式

String void getUser() throws SQLException

(3)　引数

なし。

(4)　戻り値

String：

認可識別子

(5)　機能詳細

setUserメソッドで設定された認可識別子を返却します。設定されていない場合は，ナル値を返却します。OSログインユーザの簡易認証機能を使用している場合は，簡易認証キーワードを返却します。

(6)　発生する例外

なし。

17.10.13　setPassword

(1)　機能

データベース接続時のパスワードを設定します。

(2)　形式

public void setPassword ( String password ) throws SQLException

(3)　引数

String password：

パスワードを指定します。

ナル値の場合は，このメソッドによって現在までに設定したパスワードを無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

パスワードを設定します。

次のメソッドの実行時に，setUserメソッド，及びsetPasswordメソッドで指定された認可識別子及びパスワードを使用し，データベースへの物理接続を確保します。

DataSourceインタフェースのgetConnectionメソッド（引数なし）

ConnectionPoolDataSourceインタフェースのgetPooledConnectionメソッド

XADataSourceインタフェースのgetXAConnectionメソッド

引数passwordがナル値又は長さ0の文字列の場合，このメソッドによるパスワードの設定がないものとみなします。設定がない場合の扱いについては，「接続情報の優先順位」を参照してください。

(6)　発生する例外

なし。

17.10.14　getPassword

(1)　機能

データベース接続時のパスワードを取得します。

(2)　形式

public String getPassword() throws SQLException

(3)　引数

なし。

(4)　戻り値

String：

パスワード

(5)　機能詳細

setPasswordメソッドで指定されたパスワードを返却します。

(6)　発生する例外

なし。

17.10.15　setXAOpenString

(1)　機能

XAオープン文字列を設定します。

(2)　形式

public void setXAOpenString ( String xa_string ) throws SQLException

(3)　引数

String xa_string：

XAオープン文字列を指定します。

ナル値の場合は，このメソッドによって現在までに設定したXAオープン文字列を無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

XAオープン文字列を設定します。このメソッドは，XADataSourceインタフェースでだけ提供されます。XAオープン文字列は，次の形式で指定します。

[形式]

HiRDBの環境変数グループ識別子＋HiRDBクライアントの環境変数グループ名

HiRDBの環境変数グループ識別子は，setDescriptionメソッドでの設定と同一にしてください。なお，setDescriptionメソッドでHiRDBクライアントの環境変数グループ名を指定する場合と異なり，HiRDBクライアントの環境変数グループ名中に半角＠文字や半角スペースを含んでいても，引用符で囲む必要はありません。

設定例を次に示します。

[設定例1]

HiRDBクライアントの環境変数グループ名のパスが「/HiRDB/HiRDB.ini」の場合

ds.setDescription("HDB1");
ds.setXAOpenString("HDB1+/HiRDB/HiRDB.ini");

[設定例2]

HiRDBクライアントの環境変数グループ名のパスが「C:¥Program△Files¥HITACHI¥HiRDB¥HiRDB.ini」の場合（△は半角スペース）

ds.setDescription("HDB1");
ds.setXAOpenString("HDB1+C:¥¥Program△Files¥¥HITACHI¥¥HiRDB¥¥HiRDB.ini");

(6)　発生する例外

なし。

17.10.16　getXAOpenString

(1)　機能

XAオープン文字列を取得します。

(2)　形式

public String getXAOpenString() throws SQLException

(3)　引数

なし。

(4)　戻り値

String：

XAオープン文字列（設定されていない場合，ナル値を返却します）

(5)　機能詳細

setXAOpenStringメソッドで設定された，XAオープン文字列を返却します。このメソッドは，XADataSourceインタフェースでだけ提供されます。

(6)　発生する例外

なし。

17.10.17　setXACloseString

(1)　機能

XAクローズ文字列を設定します。

(2)　形式

public void setXACloseString ( String xa_string ) throws SQLException

(3)　引数

String xa_string：

XAクローズ文字列を指定します。

ナル値の場合は，このメソッドによって現在までに設定したXAクローズ文字列を無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

XAクローズ文字列を設定します。このメソッドは，XADataSourceインタフェースでだけ提供されます。

(6)　発生する例外

なし。

17.10.18　getXACloseString

(1)　機能

XAクローズ文字列を取得します。

(2)　形式

public String getXACloseString() throws SQLException

(3)　引数

なし。

(4)　戻り値

String：

XAクローズ文字列（設定されていない場合，ナル値を返却します）

(5)　機能詳細

setXACloseStringメソッドで設定された，XAクローズ文字列を返却します。このメソッドは，XADataSourceインタフェースでだけ提供されます。

(6)　発生する例外

なし。

17.10.19　setLONGVARBINARY_Access

(1)　機能

JDBC SQLタイプLONGVARBINARY（HiRDBのデータ型であるBLOB型，及びBINARY型）のデータへのアクセス方法を設定します。

(2)　形式

public void setLONGVARBINARY_Access ( String mode ) throws SQLException

(3)　引数

String mode：

JDBC SQLタイプLONGVARBINARY（HiRDBのデータ型であるBLOB型，及びBINARY型）のデータへのアクセス方法を指定します。

このメソッドでは，引数に指定した内容について大文字と小文字を区別しません。

REAL：

実データでアクセスします。

LOCATOR：

HiRDBの位置付け子機能を使用してアクセスします。

ナル値の場合は，現在までに設定したデータへのアクセス方法を無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

JDBC SQLタイプLONGVARBINARY（HiRDBのデータ型であるBLOB型，及びBINARY型）のデータへのアクセス方法を設定します。このメソッドが呼び出されない場合のデフォルト値は"REAL"です。

このメソッドでの設定は，「ユーザプロパティ」で示したプロパティLONGVARBINARY_ACCESSの設定と同等になります。

(6)　発生する例外

引数modeに"REAL"及び"LOCATOR"以外の値を指定した場合は，SQLExceptionを投入します。

(7)　注意事項

「LONGVARBINARY_ACCESS」の注意事項を参照してください。

17.10.20　getLONGVARBINARY_Access

(1)　機能

JDBC SQLタイプLONGVARBINARY（HiRDBのデータ型であるBLOB型，及びBINARY型）のデータへのアクセス方法を取得します。

(2)　形式

public String getLONGVARBINARY_Access()

(3)　引数

なし。

(4)　戻り値

String：

JDBC SQL タイプLONGVARBINARY（HiRDBのデータ型であるBLOB型，及びBINARY型）のデータへのアクセス方法の設定情報

REAL：

実データでアクセスします。

LOCATOR：

HiRDBの位置付け子機能を使用してアクセスします。

(5)　機能詳細

setLONGVARBINARY_Accessメソッドで設定された情報を返却します。

(6)　発生する例外

なし。

17.10.21　setSQLInNum

(1)　機能

実行するSQLの入力？パラメタの最大数を設定します。

(2)　形式

public void setSQLInNum ( int inNum ) throws SQLException

(3)　引数

int inNum：

実行するSQLの入力？パラメタの最大数を指定します。指定値は1〜30,000です。

(4)　戻り値

なし。

(5)　機能詳細

SQLの前処理時に取得する入力？パラメタ情報の数を設定します。

実際の？パラメタの数がこのメソッドの指定値よりも多い場合，SQLの前処理の後に入力？パラメタ情報を取得します。このメソッドが呼び出されない場合のデフォルト値は300です。

このメソッドで指定した値は，データベース接続時に「ユーザプロパティ」で示したプロパティHiRDB_for_Java_SQL_IN_NUMの値となります。

(6)　発生する例外

引数に1〜30,000の以外の値を指定した場合，SQLExceptionを投入します。

(7)　注意事項

入力？パラメタのあるSQL文を実行しない場合，引数は1を指定することを推奨します。

17.10.22　getSQLInNum

(1)　機能

実行するSQLの入力？パラメタの最大数を取得します。

(2)　形式

public int getSQLInNum() throws SQLException

(3)　引数

なし。

(4)　戻り値

int：

setSQLInNumで設定した，実行するSQLの入力？パラメタの最大数（設定されていない場合，デフォルトである300を返却します）

(5)　機能詳細

setSQLInNumで設定した，実行するSQLの入力？パラメタの最大数を取得します。

(6)　発生する例外

なし。

17.10.23　setSQLOutNum

(1)　機能

実行するSQLの検索項目の最大数を設定します。

(2)　形式

public void setSQLOutNum ( int outNum ) throws SQLException

(3)　引数

int outNum：

実行するSQLの検索項目の最大数を指定します。指定値は1〜30,000です。

(4)　戻り値

なし。

(5)　機能詳細

実行するSQLの検索項目の最大数を設定します。

この指定は，SQLの前処理時に取得する出力項目数の数となります。このメソッドが呼び出されない場合のデフォルト値は300です。

実際の出力項目数がこのメソッドの指定値よりも多い場合，SQLの前処理の後に出力項目情報を取得します。

このメソッドで指定した値は，データベース接続時に「ユーザプロパティ」で示したプロパティ HiRDB_for_Java_SQL_OUT_NUMの値となります。

(6)　発生する例外

引数が1〜30,000の範囲外である場合，SQLExceptionを投入します。

(7)　注意事項

検索項目がない場合，引数は1を指定することを推奨します。

17.10.24　getSQLOutNum

(1)　機能

実行するSQLの検索項目の最大数を取得します。

(2)　形式

public int getSQLOutNum() throws SQLException

(3)　引数

なし。

(4)　戻り値

int：

setSQLOutNumで設定した実行するSQLの検索項目の最大数（設定されていない場合，デフォルトである300を返却します）

(5)　機能詳細

setSQLOutNumで設定した，実行するSQLの検索項目の最大数を取得します。

(6)　発生する例外

なし。

17.10.25　setSQLWarningLevel

(1)　機能

SQL実行時に発生した警告保持レベルを設定します。

(2)　形式

public void setSQLWarningLevel ( String warningLevel ) throws SQLException

(3)　引数

String warningLevel：

SQL実行時に発生した警告情報の保持レベルを指定します。

指定できる値を次に示します。指定値と保持する警告の関係は，「SQLWarningオブジェクトの生成条件」を参照してください。

IGNORE

SQLWARN

ALLWARN

なお，このメソッドでは，引数に指定した内容について大文字と小文字を区別しません。ナル値の場合は，このメソッドによって現在までに設定した警告保持レベルを無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

SQL実行時に発生した警告情報の保持レベルを設定します。このメソッドが呼び出されない場合のデフォルト値は"SQLWARN"です。

このメソッドで指定した値は，データベース接続時に「ユーザプロパティ」で示したプロパティHiRDB_for_Java_SQLWARNING_LEVELの値となります。

(6)　発生する例外

引数が上記の指定値以外である場合，SQLExceptionを投入します。

17.10.26　getSQLWarningLevel

(1)　機能

setSQLWarningLevelメソッドで設定した警告保持レベルを取得します。

(2)　形式

public String getSQLWarningLevel() throws SQLException

(3)　引数

なし。

(4)　戻り値

String：

setSQLWarningLevelで設定した警告保持レベルを返却します。返却値と保持する警告の関係は，「SQLWarningオブジェクトの生成条件」を参照してください。

(5)　機能詳細

setSQLWarningLevelメソッドで設定された情報を返却します。設定されていない場合，デフォルト値である"SQLWARN"を返却します。

(6)　発生する例外

なし。

17.10.27　setXALocalCommitMode

(1)　機能

XA接続時，トランザクションが分散トランザクションでない場合，オートコミット機能を有効にするかどうかを設定します。

(2)　形式

public void setXALocalCommitMode ( boolean autoCommitMode ) throws SQLException

(3)　引数

boolean autoCommitMode：

オートコミット機能を設定します。

true：オートコミット機能を有効に設定します。

false：オートコミット機能を無効に設定します。

(4)　戻り値

なし。

(5)　機能詳細

XA接続時にオートコミット機能を設定します。デフォルト値はfalse（オートコミット機能は無効）です。このメソッドの指定値と，JDBCドライバの動作の関係を次に示します。

指定値

条件

JDBCドライバの動作

true

Connetionオブジェクト生成時の自動コミットのデフォルト

オートコミット有効

con.commitメソッド及びcon.rollbackメソッドによるトランザクション終了

正常に受け付け

setAutoCommit(true)の実行

オートコミットを有効

setAutoCommit(false)の実行

オートコミットを無効

false（デフォルト）

Connetionオブジェクト生成時の自動コミットのデフォルト

オートコミット無効

con.commitメソッド及びcon.rollbackメソッドによるトランザクション終了

SQLException

setAutoCommit(true)の実行

SQLException

setAutoCommit(false)の実行

正常終了（オートコミットを有効にできないので何もしない）

(6)　発生する例外

なし。

17.10.28　getXALocalCommitMode

(1)　機能

XA接続時，トランザクションが分散トランザクションでない場合，オートコミット機能を有効にするかどうかの設定情報を取得します。

(2)　形式

public boolean getXALocalCommitMode() throws SQLException

(3)　引数

なし。

(4)　戻り値

boolean：

オートコミット機能の設定です。

true：オートコミット機能は有効です。

false：オートコミット機能は無効です。

(5)　機能詳細

オートコミット機能の設定を取得します。

(6)　発生する例外

なし。

17.10.29　setSQLWarningIgnore

(1)　機能

データベースから返される警告をConnectionクラスで保持するかどうかを設定します。

(2)　形式

public void setSQLWarningIgnore ( boolean mode )

(3)　引数

boolean mode：

警告を保持するかどうかを設定します。

true：警告を保持しません。

false：警告を保持します。

(4)　戻り値

なし。

(5)　機能詳細

Connectionクラスで発生した警告をConnectionクラスで保持するかどうかを設定します。デフォルト値は"false"です。

このメソッドの実行は，「URLの構文」で示した項目SQLWARNING_IGNORE，及び「ユーザプロパティ」で示したプロパティSQLWARNING_IGNOREの設定と同等です。

指定値と保持する警告の関係については，「SQLWarningオブジェクトの生成条件」を参照してください。

(6)　発生する例外

なし。

17.10.30　getSQLWarningIgnore

(1)　機能

データベースから返される警告をConnectionクラスで保持するかどうかの設定情報を取得します。

(2)　形式

public boolean getSQLWarningIgnore()

(3)　引数

なし。

(4)　戻り値

boolean：

警告を保持するかどうかの設定情報です。

true：警告を保持しません。

false：警告を保持します。

(5)　機能詳細

Connectionクラスで発生した警告をConnectionクラスで保持するかどうかの設定情報を取得します。

setSQLWarningIgnoreメソッドで設定した情報を返却します。設定されていない場合，デフォルト値である"false"を返却します。

返却値と保持する警告の関係については，「SQLWarningオブジェクトの生成条件」を参照してください。

(6)　発生する例外

なし。

17.10.31　setHiRDBCursorMode

(1)　機能

HiRDBがコミットした場合にResultSetクラスのオブジェクトを有効とするかどうかを設定します。

(2)　形式

public void setHiRDBCursorMode ( boolean mode )

(3)　引数

boolean mode：

次の値を指定します。

true：コミットした場合でもResultSetクラスのオブジェクトを有効とします。なお，trueを指定した場合，次のクラスのオブジェクトについても，コミット後も有効となります。

Statementクラス

PreparedStatementクラス

CallableStatementクラス

false：コミットした場合，ResultSetクラスのオブジェクトを無効とします。

(4)　戻り値

なし。

(5)　機能詳細

HiRDBがコミットした場合に，ResultSetクラスのオブジェクトを有効とするかどうかを設定します。このメソッドが呼び出されない場合のデフォルトはfalseです。

無効となったResultSetオブジェクトでcloseメソッド呼び出し以外の操作を行った場合，SQLExceptionを投入します。

このメソッドの実行は，「URLの構文」で示した項目HIRDB_CURSORの設定と同等です。

(6)　発生する例外

なし。

(7)　注意事項

「HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIOR指定時の注意事項」を参照してください。

17.10.32　getHiRDBCursorMode

(1)　機能

HiRDBがコミットした場合にResultSetクラスのオブジェクトを有効とするかどうかの設定情報を取得します。

(2)　形式

public boolean getHiRDBCursorMode()

(3)　引数

なし。

(4)　戻り値

boolean：

HiRDBがコミットした場合に，ResultSetクラスのオブジェクトを有効とするかどうかの設定情報です。

true：コミットした場合でもResultSetクラスのオブジェクトが有効です。

false：コミットした場合，ResultSetクラスのオブジェクトは無効です。

(5)　機能詳細

HiRDBがコミットした場合にResultSetクラスのオブジェクトを有効とするかどうかの設定情報を取得します。

(6)　発生する例外

なし。

(7)　注意事項

なし。

17.10.33　setNotErrorOccurred

(1)　機能

ConnectionEventListener.connectionErrorOccurredの発生を抑止するかどうかを設定します。

(2)　形式

public void setNotErrorOccurred ( boolean mode )

(3)　引数

boolean mode：

connectionErrorOccurredの発生を抑止するかどうかを指定します。

true：connectionErrorOccurredの発生を抑止します。

false：connectionErrorOccurredの発生を抑止しません（デフォルト）。

(4)　戻り値

なし。

(5)　機能詳細

ConnectionPoolDataSource，XADataSourceを使用している場合，致命的な接続エラーが発生したときに呼ばれるConnectionEventListener.connectionErrorOccurredの，呼び出しを抑止するための設定をします。

設定していない場合，connectionErrorOccurredを呼びます。通常は未設定にするか，又はfalseを設定します。

(6)　発生する例外

なし。

17.10.34　getNotErrorOccurred

(1)　機能

ConnectionEventListener.connectionErrorOccurredの発生を抑止するかどうかの設定情報を取得します。

(2)　形式

public boolean getNotErrorOccurred()

(3)　引数

なし。

(4)　戻り値

boolean：

ConnectionEventListener.connectionErrorOccurredを発生させるかどうかの設定情報です。

true：connectionErrorOccurredは発生しません。

false：connectionErrorOccurredが発生します（デフォルト）。

(5)　機能詳細

ConnectionPoolDataSource，XADataSourceを使用している場合，致命的な接続エラーが発生したときに，ConnectionEventListener.connectionErrorOccurredが呼ばれるかどうかの設定情報を取得します。設定していない場合は，falseを返却します。

(6)　発生する例外

なし。

17.10.35　setEnvironmentVariables

(1)　機能

HiRDBのクライアント環境定義を設定します。

(2)　形式

public void setEnvironmentVariables ( String variables ) throws SQLException

(3)　引数

String variables：

HiRDBのクライアント環境定義を，次の形式で指定します。

[形式]

"変数名＝値;変数名＝値; ..<省略>.. ;変数名＝値"

指定例を次に示します。

[指定例]

setEnvironmentVariables ("PDFESHOST=FES1;PDCWAITTIME=0");

ナル値の場合は，このメソッドによって現在までに設定したクライアント環境定義を無効とし，初期状態に戻します。

(4)　戻り値

なし。

(5)　機能詳細

HiRDBクライアント環境定義を設定します。

JDBCドライバで指定できるクライアント環境定義は，「指定できるクライアント環境定義」を参照してください。変数名にJDBCドライバで指定できないクライアント環境定義が指定された場合，指定を無視します。なお，変数名は大文字と小文字を区別するため，注意してください。

複数の設定方法を持つ接続情報の優先順位については，「接続情報の優先順位」を参照してください。

なお，このメソッドでは，クライアント環境定義の各指定値をチェックしません。データベース接続時に指定値をチェックし，不正であればSQLExceptionを投入します。

(6)　発生する例外

なし。

17.10.36　getEnvironmentVariables

(1)　機能

HiRDBのクライアント環境定義を取得します。

(2)　形式

String void getEnvironmentVariables()

(3)　引数

なし。

(4)　戻り値

String：

HiRDBのクライアント環境定義（未指定の場合，ナル値を返却します）

(5)　機能詳細

HiRDBのクライアント環境定義を取得します。

(6)　発生する例外

なし。

17.10.37　setEncodeLang

(1)　機能

データ変換時の変換文字セット名称を設定します。

(2)　形式

public void setEncodeLang ( String encode_lang ) throws SQLException

(3)　引数

String encode_lang：

変換文字セットを指定します。「Java 2 SDK, Standard Editionドキュメント」の「国際化」で示されるエンコーディング一覧から選択してください。

HiRDBの文字コードと対応する変換文字セットを次に示します。

HiRDBの文字コード

（pdntenv又はpdsetupコマンドで設定した文字コード）

指定する変換文字セット

lang-c

ISO8859_1

sjis

SJIS又はMS932※

ujis

EUC_JP

utf-8

UTF-8

utf-8_ivs

UTF-8

chinese

EUC_CN

chinese-gb18030

GB18030

注

表と一致しない変換文字セット名称を指定した場合，JDBCドライバの動作は保証しません。

注※

SJISかMS932の指定は，アプリケーションでのWindows特殊文字の扱いによります。

"OFF"を指定すると，HiRDBの文字コードに対して上記の表の変換文字セットが指定されたものとして動作します。なお，HiRDBの文字コードがsjisの場合，JDBCドライバが動作するOSによって変換文字セットは次のようになります。

UNIXの場合：SJIS

Windowsの場合：MS932

ナル値の場合は，現在までに設定したこのメソッドによる変換文字セット名称を無効とし，初期状態に戻します。

"OFF"以外を指定した場合は，大文字と小文字を区別します。

(4)　戻り値

なし。

(5)　機能詳細

次のデータ変換時に，このメソッドで指定された変換文字セット名称での変換を行います。

HiRDBから取得したデータをアプリケーションがStringで取得する場合の，文字データ（Unicode）への変換

アプリケーションがStringでHiRDBへ値を設定する場合の，バイナリデータへの変換

このメソッドを指定しない場合，JDBCドライバは前記対応表に合わせた変換文字セットで文字の変換をします。ただし，次の項目は，Java仮想マシンのデフォルトの変換文字セットで変換されます。

setUapNameの指定値

認可識別子又はパスワード（setUser，setPassword，getConnectionなどで指定するもの）

setEnvironmentVariablesで指定したクライアント環境定義の指定値

HiRDBクライアントの環境変数グループ名で指定した各環境変数の指定値

(6)　発生する例外

Java仮想マシンがサポートしない変換文字セットを指定した場合，SQLExceptionを投入します。

17.10.38　getEncodeLang

(1)　機能

設定された変換文字セット名称を取得します。

(2)　形式

public String getEncodeLang()

(3)　引数

なし。

(4)　戻り値

String：

変換文字セット名称（setEncodeLangメソッドで変換文字セット名称が指定されていない場合は，ナル値を返却します）

(5)　機能詳細

setEncodeLangメソッドで設定された変換文字セット名称を返却します。

(6)　発生する例外

なし。

17.10.39　setMaxBinarySize

(1)　機能

JDBC SQLタイプLONGVARBINARY型データ取得時のデータサイズの上限を設定します。

(2)　形式

public void setMaxBinarySize ( int size ) throws SQLException

(3)　引数

int size：

上限となるデータサイズです。0〜2,147,483,647の範囲で設定します。

0を指定した場合は，取得対象データの定義長を上限とします。

(4)　戻り値

なし。

(5)　機能詳細

JDBC SQLタイプLONGVARBINARY型データ取得時のデータサイズの上限を，バイト単位で設定します。

JDBC SQLタイプLONGVARBINARY型データを取得する際，JDBCドライバはデータを取得するまで実際のデータ長を認識できないため，定義長分のメモリを確保します。そのため，定義長にHiRDBのデータ型であるBINARY型，及びBLOB型の最大長である2,147,483,647バイトのように長大なサイズを指定した列の値を取得する場合は，その定義長である2,147,483,647バイトのメモリを確保しようとします。そのため，実行環境によってはメモリ不足が発生することがあります。

したがって，このメソッドで，実際に格納されているデータの最大長を指定してください。取得対象となるHiRDBのデータ型であるBINARY型，及びBLOB型データの定義長が，このメソッドで指定したサイズよりも大きい場合，取得データをこのメソッドで指定したサイズに切り捨てます。実際にデータを切り捨てた場合，ResultSetのnextメソッド実行時に，JDBCドライバはHiRDBサーバから警告を受け取ります。受け取った警告に対しては，setLONGVARBINARY_TruncErrorの指定値に従ってSQLExceptionの投入，SQLWarningの生成（又は無視）をします。

このメソッドで上限を設定していない場合は，取得対象データの定義長を上限とします。

(6)　発生する例外

負の値を指定した場合，SQLExceptionを投入します。

(7)　注意事項

setLONGVARBINARY_Accessメソッドの引数modeにLOCATORを指定している場合，このメソッドの指定値は無効です。実際のデータ長に基づいて領域を確保し，全データを取得します。

17.10.40　getMaxBinarySize

(1)　機能

JDBC SQLタイプLONGVARBINARY型データ取得時のデータサイズの上限を取得します。

(2)　形式

public int getMaxBinarySize()

(3)　引数

なし。

(4)　戻り値

int：

上限となるデータサイズの設定値

(5)　機能詳細

setMaxBinarySizeで設定した，JDBC SQLタイプLONGVARBINARY型データ取得時のデータサイズの上限を返却します。

setMaxBinarySizeでデータサイズの上限を設定していない場合は，0を返却します。

(6)　発生する例外

なし。

17.10.41　setStatementCommitBehavior

(1)　機能

コミットを行った場合，ステートメントオブジェクトをコミット実行後も有効とするかどうかを設定します。なお，ここでのステートメントオブジェクトとは，次のクラスのことを指します。

Statementクラス

PreparedStatementクラス

CallableStatementクラス

(2)　形式

public void setStatementCommitBehavior ( boolean mode ) throws SQLException

(3)　引数

boolean mode：

ステートメントオブジェクトが，コミットなどによるトランザクションの終了の前後にわたって有効かを指定します。

true：トランザクション終了後もステートメントのオブジェクトを有効にします。

false：トランザクション終了後はステートメントのオブジェクトを無効にします。

(4)　機能詳細

コミットを行った場合，ステートメントオブジェクトをコミット実行後も有効とするかを設定します。このメソッドが呼び出されない場合のデフォルトはtrueです。

このメソッドの実行は，「URLの構文」で示した項目STATEMENT_COMMIT_BEHAVIORの設定と同等です。

(5)　発生する例外

なし。

(6)　注意事項

「HIRDB_CURSOR及びSTATEMENT_COMMIT_BEHAVIOR指定時の注意事項」を参照してください。

17.10.42　getStatementCommitBehavior

(1)　機能

コミットを行った場合，ステートメントオブジェクトをコミット実行後も有効とするかどうかの設定情報を取得します。なお，ここでのステートメントオブジェクトとは，次のクラスのことを指します。

Statementクラス

PreparedStatementクラス

CallableStatementクラス

(2)　形式

public boolean getStatementCommitBehavior() throws SQLException

(3)　引数

なし。

(4)　戻り値

boolean：

ステートメントオブジェクトが，コミットなどによるトランザクションの終了の前後にわたって有効となるかどうかです。

true：有効となります。

false：有効となりません。

(5)　機能詳細

コミットを行った場合に，次のクラスのオブジェクトをコミット実行後も有効とするかどうかの設定情報を取得します。

Statementクラス

PreparedStatementクラス

CallableStatementクラス

このメソッドは，setStatementCommitBehaviorメソッドの設定値を返却します。なお，設定していない場合はtrueを返却します。

(6)　発生する例外

なし。

(7)　注意事項

なし。

17.10.43　setLONGVARBINARY_AccessSize

(1)　機能

HiRDBサーバに対して一度に要求するJDBC SQLタイプLONGVARBINARY型データの長さを設定します。

(2)　形式

public void setLONGVARBINARY_AccessSize ( int access_size ) throws SQLException

(3)　引数

int access_size：

要求するデータ長をキロバイト単位で指定します。指定値は，0〜2,097,151です（デフォルトは0）。0を指定した場合は，データ全体を一度に要求します。

(4)　戻り値

なし。

(5)　機能詳細

HiRDBサーバに対して一度に要求するJDBC SQLタイプLONGVARBINARY型データの長さを設定します。

例えば，引数access_sizeに20を指定した場合，データベースに格納している100キロバイトのJDBC SQLタイプLONGVARBINARY型データをResultSetのgetBytesメソッドで取得しようとすると，データを20キロバイトずつ5回に分けて取得します。

setLONGVARBINARY_Accessメソッドの引数modeにLOCATOR以外を指定している場合は，この指定値は有効となりません。

このメソッドでの設定は，「ユーザプロパティ」で示したプロパティHiRDB_for_Java_LONGVARBINARY_ACCESS_SIZEの設定と同等になります。

(6)　発生する例外

引数access_sizeに0〜2,097,151以外の値を指定した場合は，SQLExceptionを投入します。

(7)　注意事項

「LONGVARBINARY_ACCESS」の注意事項を参照してください。

17.10.44　getLONGVARBINARY_AccessSize

(1)　機能

HiRDBサーバに対して一度に要求するJDBC SQLタイプLONGVARBINARY型データの長さを取得します。

(2)　形式

public int getLONGVARBINARY_AccessSize() throws SQLException

(3)　引数

なし。

(4)　戻り値

int：

一度に要求するデータ長（単位：キロバイト）（設定していない場合は0を返却します）

(5)　機能詳細

HiRDBサーバに対して一度に要求するJDBC SQLタイプLONGVARBINARY型データの長さを取得します。このメソッドは，setLONGVARBINARY_AccessSizeメソッドの設定値を返却します。

(6)　発生する例外

なし。

17.10.45　setLONGVARBINARY_TruncError

(1)　機能

JDBC SQLタイプLONGVARBINARY型データ取得時に切り捨てが発生した場合に，例外を投入するかどうかを設定します。

(2)　形式

public void setLONGVARBINARY_TruncError ( boolean mode ) throws SQLException

(3)　引数

boolean mode：

切り捨てが発生した場合に例外を投入するかどうかを指定します。

true：

例外を投入します。

false：

例外を投入しません。

(4)　戻り値

なし。

(5)　機能詳細

JDBC SQLタイプLONGVARBINARY型データ取得時に切り捨てが発生した場合に例外を投入するかどうかを設定します。設定がない場合，trueが指定されたものとして動作します。

setSQLWarningLevelメソッドの引数warningLevelにIGNOREを指定している場合は，このメソッドの指定値は無効です。falseが指定されたものとして動作します。

なお，JDBC SQLタイプLONGVARBINARY型データ取得時に発生する切り捨てとは，次の条件式を満たした場合のことを指します。

SQLの実行で得られるJDBC SQLタイプLONGVARBINARY型データの実際の長さ ＞ setMaxBinarySizeで指定したデータ長

(6)　発生する例外

なし。

17.10.46　getLONGVARBINARY_TruncError

(1)　機能

JDBC SQLタイプLONGVARBINARY型データ取得時に切り捨てが発生した場合に，例外を投入するかどうかの設定情報を取得します。

(2)　形式

public boolean getLONGVARBINARY_TruncError()

(3)　引数

なし。

(4)　戻り値

boolean：

切り捨てが発生した場合に例外を投入するかどうかの設定情報です。

true：

例外を投入します。

false：

例外を投入しません。

(5)　機能詳細

JDBC SQLタイプLONGVARBINARY型データ取得時に切り捨てが発生した場合に例外を投入するかどうかの設定情報を取得します。

(6)　発生する例外

なし。

17.10.47　setStatementCloseBehavior

(1)　機能

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかを設定します。

(2)　形式

public synchronized void setStatementCloseBehavior(boolean mode)

(3)　引数

boolean mode：

ステートメントのcloseメソッド実行時に前処理結果を無効にするかどうかを設定します。

true：

前処理結果を無効にします。

false：

前処理結果を無効にしません。

(4)　戻り値

なし。

(5)　機能詳細

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかを設定します。

設定がない場合，falseが指定されたものとして動作します。

このメソッドでの設定は，「ユーザプロパティ」で示したプロパティHiRDB_for_Java_STATEMENT_CLOSE_BEHAVIORの設定と同等になります。

(6)　発生する例外

なし。

17.10.48　getStatementCloseBehavior

(1)　機能

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかの設定情報を取得します。

(2)　形式

public boolean getStatementCloseBehavior()

(3)　引数

なし。

(4)　戻り値

true：

前処理結果を無効にします。

false：

前処理結果を無効にしません。

(5)　機能詳細

ステートメント（Statementクラス，PreparedStatementクラス，及びCallableStatementクラス）のcloseメソッド実行時に前処理結果を無効にするかどうかの設定情報を取得します。このメソッドはsetStatementCloseBehaviorメソッドの設定値を返却します。設定していない場合はfalseを返却します。

(6)　発生する例外

なし。

17.10.49　setHiRDBINI

(1)　機能

HiRDB.INIファイル内に記述されているクライアント環境変数を有効にする場合に，HiRDB.INIファイルのディレクトリを指定します。

(2)　形式

public synchronized void setHiRDBINI (String dir)

(3)　引数

string dir：

HiRDB.INIファイルが存在するディレクトリの絶対パスを指定します。null指定の場合は，未指定の状態とします。

(4)　戻り値

なし。

(5)　機能詳細

HiRDB.INIファイル内に記述されているクライアント環境変数を有効にする場合に，HiRDB.INIファイルのディレクトリの絶対パスを指定します。このメソッドの詳細については，「URLの各項目の説明」のHiRDB_INIの説明を参照してください。

(6)　発生する例外

なし。

17.10.50　getHiRDBINI

(1)　機能

setHiRDBINIメソッドで設定したディレクトリを取得します。

(2)　形式

public String getHiRDBINI()

(3)　引数

なし。

(4)　戻り値

String：

setHiRDBINIメソッドで設定したディレクトリの絶対パスです。未設定の場合はnullを返します。

(5)　機能詳細

setHiRDBINIメソッドで設定したディレクトリの絶対パスを取得します。

(6)　発生する例外

なし。

17.10.51　setBatchExceptionBehavior

(1)　機能

java.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかを指定します。

(2)　形式

public synchronized void setBatchExceptionBehavior(boolean mode)

(3)　引数

boolean mode：

java.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかを指定します。

true：JDBC規格に準拠した更新カウントを設定します。

false：HiRDB独自の更新カウントを設定します。

(4)　戻り値

なし。

(5)　機能詳細

java.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかを指定します。このメソッドが呼び出されない場合のデフォルト値は"TRUE"です。

このメソッドでの設定は，「ユーザプロパティ」で示したプロパティHiRDB_for_Java_ BATCHEXCEPTION_BEHAVIORの設定と同等になります。

(6)　発生する例外

なし。

17.10.52　getBatchExceptionBehavior

(1)　機能

setBatchExceptionBehaviorで設定したjava.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかの設定情報を取得します。

(2)　形式

public synchronized boolean getBatchExceptionBehavior()

(3)　引数

なし。

(4)　戻り値

boolean：

setBatchExceptionBehaviorで設定したjava.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかを返却します。未設定の場合は，デフォルト値"TRUE"を返却します。

true：JDBC規格に準拠した更新カウントを設定します。

false：HiRDB独自の更新カウントを設定します。

(5)　機能詳細

setBatchExceptionBehaviorで設定したjava.sql.BatchUpdateExceptionのgetUpdateCountsメソッドの戻り値に，JDBC規格に準拠した更新カウントを設定するかどうかの設定情報を取得します。

(6)　発生する例外

なし。

17.10.53　setUpdateCountBehavior

(1)　機能

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかを指定します。

(2)　形式

public synchronized void setUpdateCountBehavior(boolean mode)

(3)　引数

boolean mode：

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかを指定します。

true：更新系SQL発行時の更新行数が0の場合，-1を返却します（JDBC規格）。

false：更新系SQL発行時の更新行数が0の場合，0を返却します。

(4)　戻り値

なし。

(5)　機能詳細

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかを指定します。

このメソッドが呼び出されない場合のデフォルト値は"false"です。

このメソッドでの設定は，「ユーザプロパティ」で示したプロパティHiRDB_for_Java_UPDATECOUNT_BEHAVIORの設定と同等になります。

(6)　発生する例外

なし。

17.10.54　getUpdateCountBehavior

(1)　機能

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかの設定情報を取得します。

(2)　形式

public synchronized boolean getUpdateCountBehavior()

(3)　引数

なし。

(4)　戻り値

boolean：

setUpdateCountBehaviorで設定した，更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかの設定情報を返却します。未設定の場合は，デフォルト値"FALSE"を返却します。

true：更新系SQL発行時の更新行数が0の場合，-1を返却します（JDBC規格）。

false：更新系SQL発行時の更新行数が0の場合，0を返却します。

(5)　機能詳細

更新系SQL発行時の更新行数が0の場合，java.sql.StatementのgetUpdateCountメソッドの戻り値として-1を返却するかどうかの設定情報を取得します。

(6)　発生する例外

なし。

17.10.55　setSendBufferSize

(1)　機能

コネクションプーリングを使用している場合，コネクションが保持する送信バッファの初期サイズを指定します。

(2)　形式

public synchronized void setSendBufferSize(int buffer_size) throws SQLException

(3)　引数

int buffer_size：

キロバイト単位で指定します。

0：送信バッファサイズの初期値は32キロバイトになります。Connection.close実行時，バッファの再確保はしないで，確保済みのバッファをそのまま保持します。

32〜2097151：送信バッファサイズの初期値は指定値になります。Connection.close実行時，コネクションが保持している送信バッファのサイズが初期値より大きくなっている場合は，保持しているバッファを解放して初期値サイズのバッファを確保します。

(4)　戻り値

なし。

(5)　機能詳細

コネクションプーリングを使用している場合（ConnectionPoolDataSource又はXADataSourceを使用した接続），コネクションが保持する送信バッファの初期サイズを指定します。これによって，Connection.close実行時に送信バッファのサイズが初期値より大きくなっている場合は，保持しているバッファを解放して初期値サイズのバッファを確保します。

(6)　発生する例外

引数buffer_sizeに0及び32〜2,097,151以外の値を指定した場合，SQLExceptionを投入します。

17.10.56　getSendBufferSize

(1)　機能

コネクションプーリングを使用している場合，コネクションが保持する送信バッファの初期サイズを取得します。

(2)　形式

public synchronized int getSendBufferSize()

(3)　引数

なし。

(4)　戻り値

int：

setSendBufferSizeで設定したバッファサイズを返却します。設定されていない場合は0を返却します。

(5)　機能詳細

コネクションプーリングを使用している場合（ConnectionPoolDataSource又はXADataSourceを使用した接続），コネクションが保持する送信バッファの初期サイズを取得します。

(6)　発生する例外

なし。

17.10.57　setReceiveBufferSize

(1)　機能

コネクションプーリングを使用している場合，コネクションが保持する受信バッファの初期サイズを指定します。

(2)　形式

public synchronized void setReceiveBufferSize(int buffer_size) throws SQLException

(3)　引数

int buffer_size：

キロバイト単位で指定します。

0：受信バッファサイズの初期値は32キロバイトになります。Connection.close実行時，バッファの再確保はしないで，確保済みのバッファをそのまま保持します。

32〜2097151：受信バッファサイズの初期値は指定値になります。Connection.close実行時，コネクションが保持している受信バッファのサイズが初期値より大きくなっている場合は，保持しているバッファを解放して初期値サイズのバッファを確保します。

(4)　戻り値

なし。

(5)　機能詳細

コネクションプーリングを使用している場合（ConnectionPoolDataSource又はXADataSourceを使用した接続），コネクションが保持する受信バッファの初期サイズを指定します。これによって，Connection.close実行時に受信バッファのサイズが初期値より大きくなっている場合は，保持しているバッファを解放して初期値サイズのバッファを確保します。

(6)　発生する例外

引数buffer_sizeに0及び32〜2,097,151以外の値を指定した場合，SQLExceptionを投入します。

17.10.58　getReceiveBufferSize

(1)　機能

コネクションプーリングを使用している場合，コネクションが保持する受信バッファの初期サイズを取得します。

(2)　形式

public synchronized int getReceiveBufferSize()

(3)　引数

なし。

(4)　戻り値

int：

setReceiveBufferSizeで設定したバッファサイズを返却します。設定されていない場合は0を返却します。

(5)　機能詳細

コネクションプーリングを使用している場合（ConnectionPoolDataSource又はXADataSourceを使用した接続），コネクションが保持する受信バッファの初期サイズを取得します。

(6)　発生する例外

なし。

17.11　データ型

17.11.1　SQLデータ型のマッピング

HiRDBのSQLデータ型とJDBCのSQLデータ型は，完全には一致しません。そのため，JDBCドライバでは，JDBCのSQLデータ型と，接続するHiRDBのSQLデータ型とのマッピング（変換）を実行します。マッピングできないSQLデータ型を使用してアクセスしようとすると，SQLExceptionを投入します。SQLデータ型のマッピングは，ResultSet，PreparedStatement，CallableStatementクラスのgetXXXメソッド及びsetXXXメソッドで実行します。なお，SQLデータ型と，getXXXメソッド及びsetXXXメソッドとのマッピング規則については，JDBC1.0規格又はJDBC2.0基本規格のドキュメントを参照してください。

HiRDBとJDBCのSQLデータ型の対応を次の表に示します。

表17‒103　HiRDBとJDBCのSQLデータ型の対応（Type4 JDBCドライバ）

HiRDBのSQLデータ型

JDBCのSQLデータ型

INTEGER

INTEGER

SMALLINT

SMALLINT

DECIMAL，NUMERIC

DECIMAL（，NUMERIC）※1

FLOAT，DOUBLE PRECISION

FLOAT（，DOUBLE）※1

SMALLFLT，REAL

REAL

CHAR

CHAR

VARCHAR

VARCHAR（，LONGVARCHAR）※1

NCHAR

CHAR

NVARCHAR

VARCHAR（，LONGVARCHAR）※1

MCHAR

CHAR

MVARCHAR

VARCHAR（，LONGVARCHAR）※1

DATE

DATE

TIME

TIME

BLOB

LONGVARBINARY（，BINARY，VARBINARY，BLOB）※1

BINARY

LONGVARBINARY（，BINARY，VARBINARY，BLOB）※1

TIMESTAMP

TIMESTAMP

BOOLEAN※2

BIT

ANY※3

OTHER

INTERVAL YEAR TO DAY

Type4 JDBCドライバでは未サポート

INTERVAL HOUR TO SECOND

ROW

注※1

（）内のデータ型は，setNullメソッド，setObjectメソッド，又はregisterOutParameterメソッドの引数にJDBCのSQLデータ型を指定する場合にだけ対応します。HiRDBのSQLデータ型からJDBCのSQLデータ型へマッピングする際には対応しません。

注※2

DatabaseMetaDataのgetTypeInfoメソッドなどで生成される，ResultSetオブジェクトが持つBOOLEAN型の列を指します。

注※3

?パラメタにNULL述語を指定したSQL（? IS 〔NOT〕NULL）での，パラメタのデータ型としてだけ使用されます。

17.11.2　検索データ取得時のマッピング

ResultSetクラス，及びCallableStatementクラスのgetXXXメソッドと，JDBCのSQLデータ型とのマッピングを次の表に示します。マッピングできないJDBCのSQLデータ型に対してgetXXXメソッドが呼び出された場合は，SQLExceptionを投入します。

表17‒104　getXXXメソッドとJDBCのSQLデータ型とのマッピング（1/2）

getXXXメソッド

JDBCのSQLデータ型

SMALLINT

INTEGER

FLOAT

REAL

DECIMAL

CHAR

getByte

○

○

○

○

○

○※1

getShort

◎

○

○

○

○

○※1

getInt

○

◎

○

○

○

○※1

getLong

○

○

○

○

○

○※1

getFloat

○

○

○

◎

○

○※1

getDouble

○

○

◎

○

○

○※1

getBigDecimal

○

○

○

○

◎

○※1

getBoolean

○

○

○

○

○

○

getString

○

○

○

○

○

◎

getBytes

×

×

×

×

×

×

getDate

×

×

×

×

×

○※1

getTime

×

×

×

×

×

○※1

getTimestamp

×

×

×

×

×

○※1

getAsciiStream

×

×

×

×

×

○

getBinaryStream

×

×

×

×

×

×

getObject

○

○

○

○

○

○

getCharacterStream

×

×

×

×

×

○

getArray

×

×

×

×

×

×

getBlob

×

×

×

×

×

×

表17‒105　getXXXメソッドとJDBCのSQLデータ型とのマッピング（2/2）

getXXXメソッド

JDBCのSQLデータ型

VARCHAR

DATE

TIME

TIMESTAMP

LONGVARBINARY

ARRAY

getByte

○※1

×

×

×

×

×

getShort

○※1

×

×

×

×

×

getInt

○※1

×

×

×

×

×

getLong

○※1

×

×

×

×

×

getFloat

○※1

×

×

×

×

×

getDouble

○※1

×

×

×

×

×

getBigDecimal

○※1

×

×

×

×

×

getBoolean

○

×

×

×

×

×

getString

◎

○

○

○

○

×

getBytes

×

×

×

×

○

×

getDate

○※1

◎※2

×

○

×

×

getTime

○※1

×

◎

○

×

×

getTimestamp

○※1

○

○

◎

×

×

getAsciiStream

○

×

×

×

○

×

getBinaryStream

×

×

×

×

◎

×

getObject

○

○

○

○

○

×

getCharacterStream

○

×

×

×

○

×

getArray

×

×

×

×

×

◎

getBlob

×

×

×

×

○

×

（凡例）

◎：マッピングすることを推奨します。

○：マッピングできます。ただし，変換元データの形式によっては，データの欠落や変換エラーとなることがあるため，注意してください。

×：マッピングできません。

注※1

このメソッドでの変換の際に，データベースから取得した文字列データの前後に半角スペースがある場合は，半角スペースを取り除きます。また，半角スペースを取り除いた後，getXXXメソッドが返却するJavaのデータ型に変換します。

Javaのデータ型に変換する場合の注意事項を次に示します。

文字列データに小数点以下の表現がある場合，getByteメソッド，getIntメソッド，getShortメソッド，又はgetLongメソッドを実行すると，小数点以下を切り捨てて整数だけを変換し，返却します。

文字列データに全角文字が含まれている場合，変換しないでSQLExceptionを投入します。全角文字には，HiRDBのデータ型であるNCHAR型の列に列の定義長よりも短い文字列を格納している場合に補完する全角スペースも含みます。

文字列データをJavaのデータ型に変換した結果，オーバフローが発生する場合は，SQLExceptionを投入します。

注※2

JDBC SQLタイプがDATE型の場合，setDateメソッドにjava.util.Calendarオブジェクトを指定して実行すると，指定したjava.util.Calendarオブジェクトを使用してデータを変換し，時刻データを切り捨てて日付データだけをデータベースに格納します。このとき，時刻データを切り捨てるため，getDateメソッドにjava.util.Calendarオブジェクトを指定して，setDateメソッドで格納したデータを取得しても，setDateメソッドに指定した日付と異なる日付を取得する場合があります。

（例）

日本標準時をデフォルトのタイムゾーンとするUAPで，setDateメソッド，及びgetDateメソッドに世界標準時のタイムゾーンを持つjava.util.Calendarオブジェクトを指定した場合の例を次に示します。

setDateメソッドに「2005-10-03」を表すjava.sql.Dateオブジェクトを指定して実行した場合，JDBCドライバは時刻部分に「00:00:00」を補完した後，タイムゾーンの違いによって9時間遅らせて「2005-10-02 15:00:00」とし，日付部分「2005-10-02」をデータベースに格納します。このデータをgetDateメソッドで取得した場合，データベースから日付部分「2005-10-02」を取得し，時刻部分に「00:00:00」を補完した後，タイムゾーンの違いによって9時間進めて「2005-10-02 09:00:00」とします。これによって，getDateメソッドの戻り値のjava.sql.Dateオブジェクトには，「2005-10-02」が設定されるため，setDateメソッドに指定した「2005-10-03」とは異なります。

17.11.3　？パラメタ設定時のマッピング

PreparedStatementクラス，及びCallableStatementクラスのsetXXXメソッドと，マッピングされるJDBC SQLタイプを次の表に示します。使用できないJDBC SQLタイプの場合，setXXXメソッドはSQLExceptionを投入します。

なお，setUnicodeStreamメソッドがJDBC2.0基本規格で推奨されないメソッドとなったため，代わりにsetCharacterStreamが追加されました。

表17‒106　setXXXメソッドと，マッピングされるJDBC SQLタイプ

PreparedStatementクラスのsetXXXメソッド

マッピングされるJDBC SQLタイプ

setCharacterStream

CHAR，VARCHAR

setRef※

REF

setBlob

LONGVARBINARY

setClob※

CLOB

setArray

ARRAY

注※

JDBCドライバでは使用できません。

PreparedStatementクラス，及びCallableStatementクラスのsetXXXメソッドと各JDBC SQLタイプとのマッピングを次の表に示します。

表17‒107　setXXXメソッドとJDBCのSQLデータ型とのマッピング（1/2）

setXXXメソッド

JDBCのSQLデータ型

SMALLINT

INTEGER

FLOAT

REAL

DECIMAL※3

CHAR

setByte

○

○

○

○

○

○

setShort

◎

○

○

○

○

○

setInt

○

◎

○

○

○

○

setLong

○

○

○

○

○

○

setFloat

○

○

○

◎

○

○

setDouble

○

○

◎

○

○

○

setBigDecimal

○

○

○

○

◎

○

setBoolean

○

○

○

○

○

○

setString

○

○

○

○

○

◎

setBytes

×

×

×

×

×

×

setDate

×

×

×

×

×

○

setTime

×

×

×

×

×

○

setTimestamp※1

×

×

×

×

×

○

setAsciiStream

×

×

×

×

×

○

setBinaryStream

×

×

×

×

×

×

setObject※2

○

○

○

○

○

○

setCharacterStream

×

×

×

×

×

○※4

setArray

×

×

×

×

×

×

setBlob

×

×

×

×

×

×

表17‒108　setXXXメソッドとJDBCのSQLデータ型とのマッピング（2/2）

setXXXメソッド

JDBCのSQLデータ型

VARCHAR

DATE

TIME

TIMESTAMP

LONGVARBINARY

ARRAY

OTHER※6

setByte

○

×

×

×

×

×

○

setShort

○

×

×

×

×

×

○

setInt

○

×

×

×

×

×

○

setLong

○

×

×

×

×

×

○

setFloat

○

×

×

×

×

×

○

setDouble

○

×

×

×

×

×

○

setBigDecimal

○

×

×

×

×

×

○

setBoolean

○

×

×

×

×

×

○

setString

◎

○

○

○

○

×

○

setBytes

×

×

×

×

○

×

○

setDate

○

◎※5

×

○

×

×

○

setTime

○

×

◎

○

×

×

○

setTimestamp※1

○

○

○

◎

×

×

○

setAsciiStream

○

×

×

×

○

×

○

setBinaryStream

×

×

×

×

○

×

○

setObject※2

○

○

○

○

○

×

○

setCharacterStream

○※4

×

×

×

○※4

×

○

setArray

×

×

×

×

×

○

×

setBlob

×

×

×

×

○

×

○

（凡例）

◎：マッピングすることを推奨します。

○：マッピングできます。ただし，変換元データの形式によっては，データの欠落や変換エラーとなることがあるため，注意してください。

×：マッピングできません。

注※1

HiRDBデータ型であるTIMESTAMP型の？パラメタに対してsetXXXメソッドで値を指定する場合に，？パラメタの小数秒精度と値の小数秒精度が一致していない場合の動作を次に示します。

？パラメタの小数秒精度よりも大きい場合：切り捨てます。

？パラメタの小数秒精度よりも小さい場合：拡張します。

注※2

setObjectメソッドにInputStreamクラス及びReaderクラス（サブクラスを含む）のオブジェクトは指定できません。

注※3

HiRDBデータ型であるDECIMAL型の？パラメタに対してsetXXXメソッドで値を指定する場合に，けたあふれが発生したときの動作を次に示します。

指定値の整数部のけた数が？パラメタの整数部のけた数よりも大きい場合：

SQLExceptionを投入します。

指定値の小数点以下のけた数が？パラメタの小数点以下のけた数よりも大きい場合：

？パラメタの小数点以下のけた数で切り捨てます。

（例）

？パラメタの型：DECIMAL(10,5)

指定値が123456.1234の場合，SQLExceptionを投入します。

指定値が1234.123456の場合，指定値を1234.12345として処理します。

注※4

java.io.Readerオブジェクトから取得できるデータの長さが，引数で指定した長さより短い場合，次に示すように引数で指定した長さまで0を補完します。

注※5

JDBC SQLタイプがDATE型の場合，setDateメソッドにjava.util.Calendarオブジェクトを指定して実行すると，指定したjava.util.Calendarオブジェクトを使用してデータを変換し，時刻データを切り捨てて日付データだけをデータベースに格納します。このとき，時刻データを切り捨てるため，getDateメソッドにjava.util.Calendarオブジェクトを指定して，setDateメソッドで格納したデータを取得しても，setDateメソッドに指定した日付と異なる日付を取得する場合があります。

（例）

日本標準時をデフォルトのタイムゾーンとするUAPで，setDateメソッド，及びgetDateメソッドに世界標準時のタイムゾーンを持つjava.util.Calendarオブジェクトを指定した場合の例を次に示します。

setDateメソッドに「2005-10-03」を表すjava.sql.Dateオブジェクトを指定して実行した場合，JDBCドライバは時刻部分に「00:00:00」を補完した後，タイムゾーンの違いによって9時間遅らせて「2005-10-02 15:00:00」とし，日付部分「2005-10-02」をデータベースに格納します。このデータをgetDateメソッドで取得した場合，データベースから日付部分「2005-10-02」を取得し，時刻部分に「00:00:00」を補完した後，タイムゾーンの違いによって9時間進めて「2005-10-02 09:00:00」とします。これによって，getDateメソッドの戻り値のjava.sql.Dateオブジェクトには，「2005-10-02」が設定されるため，setDateメソッドに指定した「2005-10-03」とは異なります。

注※6

?パラメタにNULL述語を指定したSQL（? IS 〔NOT〕NULL）での，パラメタのデータ型としてだけ使用されます。

17.11.4　TIME型，DATE型，及びTIMESTAMP型列のデータ変換処理

(1)　setTime，setDate，setTimestamp，及びsetStringメソッド

setTime，setDate，setTimestamp，及びsetStringメソッドに，HiRDBのデータ型であるTIME型，DATE型，又はTIMESTAMP型のデータが設定された場合の変換処理について説明します。

HiRDBのデータ型であるTIME型，DATE型，又はTIMESTAMP型の列に対して，setTime，setDate，setTimestamp，及びsetStringメソッドを使用してデータが設定された場合，HiRDBのデータ型に応じてデータ変換が行われます。

列のデータ型とメソッドとの組み合わせによる変換処理について次の表に示します。

表17‒109　TIME型，DATE型，又はTIMESTAMP型とsetXXXメソッドとの組み合わせによる変換処理

setXXXメソッド

HiRDBのデータ型

TIME型

DATE型

TIMESTAMP型

setTime(Time Obj)※1

UAPの設定値どおりにデータベースに格納します。

SQLExceptionを投入します。

UAPの設定値hh:mm:ss[.000000]の前に「1970-01-01」を付与したデータをデータベースに格納します。

setDate(Date Obj)※2

SQLExceptionを投入します。

UAPの設定値どおりにデータベースに格納します。

UAPの設定値yyyy-MM-DDの後ろに「00:00:00[.000000]」を付与したデータをデータベースに格納します。

setTimestamp(Timestamp Obj)※3

UAPの設定値の「hh:mm:ss」部分をデータベースに格納します。

UAPの設定値の「yyyy-MM-DD」部分をデータベースに格納します。

UAPの設定値どおりにデータベースに格納します。

setString(hh:mm:ss形式の文字列)

指定された時刻をjava.sql.Time.valueOf()で変換してデータベースに格納します。※5

SQLExceptionを投入します。

SQLExceptionを投入します。

setString(yyyy-MM-DD形式の文字列)

SQLExceptionを投入します。

指定された日付をjava.sql.Date.valueOf()で変換してデータベースに格納します。※5

SQLExceptionを投入します。

setString(yyyy-MM-DD△hh:mm:ss[.ffffff]形式の文字列)※4

SQLExceptionを投入します。

SQLExceptionを投入します。

指定された日時をjava.sql.Timestamp.valueOf()で変換してデータベースに格納します。※5

注

実際に存在しない日時を指定した場合は，Java仮想マシンが返す値となります。

注※1

「Time Obj」は，java.sql.Timeオブジェクト「時：分：秒」の値を持つオブジェクトです。

注※2

「Date Obj」は，java.sql.Dateオブジェクト「年−月−日」の値を持つオブジェクトです。

注※3

「Timestamp Obj」は，java.sql.Timestampオブジェクト「年−月−日　時：分：秒．ナノ秒」の値を持つオブジェクトです。

注※4

[.ffffff]は，HiRDBのTIMESTAMP型の精度に合わせて，小数点以下のけた数が変わります。

また，△は半角スペースを示します。

注※5

存在しない日時を指定した場合の結果はjava.sql.Time.valueOf()，java.sql.Date.valueOf()，及びjava.sql.Timestamp.valueOf()に依存します。

例1：25:00:00は，01:00:00となります。

例2：2000-01-32は，2000-02-01となります。

例3：1582-10-05は，1582-10-15となります（ユリウス暦とグレゴリオ暦が切り替わります）。

(2)　getTime，getDate，及びgetTimestampメソッド

getTime，getDate，及びgetTimestampメソッドに，HiRDBのデータ型であるTIME型，DATE型，TIMESTAMP型，又は文字列型（CHAR型，MCHAR型，NCHAR型，VARCHAR型，MVARCHAR型，及びNVARCHAR型）のデータが設定された場合の変換処理について説明します。

HiRDBのデータ型であるTIME型，DATE型，TIMESTAMP型，又は文字列型の列に対して，getTime，getDate，及びgetTimestampメソッドを使用してデータが設定された場合，HiRDBのデータ型に応じてデータ変換が行われます。

列のデータ型とメソッドとの組み合わせによる変換処理について次の表に示します。

表17‒110　TIME型，DATE型，TIMESTAMP型，又は文字列型とgetXXXメソッドとの組み合わせによる変換処理

getXXXメソッド

HiRDBのデータ型

TIME型

DATE型

TIMESTAMP型

文字列型

getTime()※2

データベースに格納されている値どおりにjava.sql.Timeのオブジェクトとして返却します。※1

SQLExceptionを投入します。

データベースから取得したTIMESTAMP型のデータの「時：分：秒」部分をjava.sql.Timeのオブジェクトとして返却します。※1

TIME型の文字列表現「hh:mm:ss」だけをjava.sql.Timeのオブジェクトとして返却します。それ以外はSQLExceptionを投入します。

getDate()※2

SQLExceptionを投入します。

データベースに格納されている値どおりにjava.sql.Dateのオブジェクトとして返却します。※1

データベースから取得したTIMESTAMP型のデータの「年−月−日」部分をjava.sql.Dateのオブジェクトとして返却します。※1

DATE型の文字列表現「yyyy-MM-DD」だけをjava.sql.Dateのオブジェクトとして返却します。それ以外はSQLExceptionを投入します。

getTimestamp()※2

データベースから取得したDATE型のデータに「1970-01-01」を付加し，小数秒を0としたデータをjava.sql.Timestampのオブジェクトとして返却します。

データベースから取得したDATE型のデータに「00:00:00.000000」を付加したデータをjava.sql.Timestampのオブジェクトとして返却します。

データベースに格納されている値どおりにjava.sql.Timestampのオブジェクトとして返却します。

TIMESTAMP型の文字列表現「yyyy-MM-DD△hh:mm:ss[.ffffff]」（△は半角スペース）だけをjava.sql.Timestampのオブジェクトとして返却します。それ以外はSQLExceptionを投入します。

（凡例）

文字列型：CHAR型，MCHAR型，NCHAR型，VARCHAR型，MVARCHAR型，及びNVARCHAR型

注※1

値の設定について記載していない日付項目（年−月−日）の設定値は「1970-01-01」，時間項目（時：分：秒．ミリ秒）の設定値は「00：00：00.000000」とします。

注※2

データベースに格納されている日時とjava.sql.Time，java.sql.Date，及びjava.sql.Timestampから得られる日時は異なることがあります。

例1：25:00:00は，01:00:00となります。

例2：2000-01-32は，2000-02-01となります。

例3：1582-10-05と1582-10-15は，どちらも1582-10-15となります（ユリウス暦とグレゴリオ暦が切り替わります）。

17.11.5　オーバフローの扱い

ここでは，setXXXメソッドを使用して値を設定する場合，及びgetXXXメソッドを使用して値を取得する場合にオーバフローするかどうかについて説明します。

(1)　setXXXメソッド（setObjectメソッドを除く）

次の表に，setXXXメソッド使用時にオーバフローするかどうかを，HiRDBのデータ型ごとに示します。

表17‒111　setXXXメソッド使用時のオーバフロー有無（1/2）

setXXXメソッド

HiRDBのデータ型

SMALLINT

INTEGER

FLOAT

REAL

DECIMAL

文字列型

setByte

○

○

○

○

×

○

setShort

○

○

○

○

×

○

setInt

×

○

○

○

×

○

setLong

×

×

○

○

×

○

setFloat

×

×

○

○

×

○

setDouble

×

×

○

○

×

○

setBigDecimal

×

×

○

○

×

○

setBoolean

○

○

○

○

×

○

setString

×

×

○

○

×

○

setBytes

−

−

−

−

−

−

setDate

−

−

−

−

−

○

setTime

−

−

−

−

−

○

setTimestamp

−

−

−

−

−

○

setBlob

−

−

−

−

−

−

setBinaryStream

−

−

−

−

−

−

setAsciiStream

−

−

−

−

−

○

setArray

×

×

×

×

×

○

setCharacterStream

−

−

−

−

−

○

（凡例）

○：値に関係なく，オーバフローしません。

×：値によっては，オーバフローすることがあります。

−：この組み合わせでは使用できません。

文字列型：CHAR型，MCHAR型，NCHAR型，VARCHAR型，MVARCHAR型，及びNVARCHAR型

表17‒112　setXXXメソッド使用時のオーバフロー有無（2/2）

setXXXメソッド

HiRDBのデータ型

DATE※

TIME※

TIMESTAMP※

BINARY

BLOB

setByte

−

−

−

−

−

setShort

−

−

−

−

−

setInt

−

−

−

−

−

setLong

−

−

−

−

−

setFloat

−

−

−

−

−

setDouble

−

−

−

−

−

setBigDecimal

−

−

−

−

−

setBoolean

−

−

−

−

−

setString

×

○

×

−

−

setBytes

−

−

−

○

○

setDate

×

−

×

−

−

setTime

−

×

×

−

−

setTimestamp

×

−

×

−

−

setBlob

−

−

−

○

○

setBinaryStream

−

−

−

○

○

setAsciiStream

−

−

−

○

○

setArray

×

×

×

−

−

setCharacterStream

−

−

−

○

○

（凡例）

○：値に関係なく，オーバフローしません。

×：値によっては，オーバフローすることがあります。

−：この組み合わせでは使用できません。

注※

java.sql.Date，java.sql.Time，又はjava.sql.TimestampクラスのgetTimeメソッドで取得した値が253,402,268,399,999より大きいか，又は-62,135,802,000,000より小さいオブジェクトである場合，オーバフローします。なお，getTimeメソッドは，1970年1月1日0時0分0秒（グリニッジ標準時）からのミリ秒数を返します。

253,402,268,399,999はHiRDBのTIMESTAMP型に格納できる最大値から，-62,135,802,000,000はjava.sql.Timestampクラスで表現できる最小値から，次に示すメソッドで取得できます。

253,402,268,399,999：

Timestamp.valueOf("9999-12-31 23:59:59.999999").getTime()

-62,135,802,000,000：

Timestamp.valueOf("0001-01-01 00:00:00.0").getTime()

(2)　setObjectメソッド

次の表に，setObjectメソッド使用時にオーバフローするかどうかを，HiRDBのデータ型ごとに示します。

表17‒113　setObjectメソッド使用時のオーバフロー有無（1/2）

setObjectメソッド

HiRDBのデータ型

SMALLINT

INTEGER

FLOAT

REAL

DECIMAL

文字列型

Byte

○

○

○

○

×

○

Short

○

○

○

○

×

○

Integer

×

○

○

○

×

○

Long

×

×

○

○

×

○

Decimal

×

×

○

○

×

○

Float

×

×

○

○

×

○

Double

×

×

○

×

×

○

Boolean

○

○

○

○

×

○

String

×

×

○

○

×

○

Date

−

−

−

−

−

○

Time

−

−

−

−

−

○

Timestamp

−

−

−

−

−

○

byte[]

−

−

−

−

−

○

Blob

−

−

−

−

−

−

Array

−

−

−

−

−

−

（凡例）

○：値に関係なく，オーバフローしません。

×：値によっては，オーバフローすることがあります。

−：この組み合わせでは使用できません。

文字列型：CHAR型，MCHAR型，NCHAR型，VARCHAR型，MVARCHAR型，及びNVARCHAR型

表17‒114　setObjectメソッド使用時のオーバフロー有無（2/2）

setObjectメソッド

HiRDBのデータ型

DATE※

TIME※

TIMESTAMP※

BINARY

BLOB

Byte

−

−

−

−

−

Short

−

−

−

−

−

Integer

−

−

−

−

−

Long

−

−

−

−

−

Decimal

−

−

−

−

−

Float

−

−

−

−

−

Double

−

−

−

−

−

Boolean

−

−

−

−

−

String

×

○

×

−

−

Date

×

−

×

−

−

Time

−

×

−

−

−

Timestamp

×

−

×

−

−

byte[]

−

−

−

○

○

Blob

−

−

−

○

○

Array

−

−

−

−

−

（凡例）

○：値に関係なく，オーバフローしません。

×：値によっては，オーバフローすることがあります。

−：この組み合わせでは使用できません。

注※

java.sql.Date，java.sql.Time，又はjava.sql.TimestampクラスのgetTimeメソッドで取得した値が253,402,268,399,999より大きいか，又は-62,135,802,000,000より小さいオブジェクトである場合，オーバフローします。なお，getTimeメソッドは，1970年1月1日0時0分0秒（グリニッジ標準時）からのミリ秒数を返します。

253,402,268,399,999はHiRDBのTIMESTAMP型に格納できる最大値から，-62,135,802,000,000はjava.sql.Timestampクラスで表現できる最小値から，次に示すメソッドで取得できます。

253,402,268,399,999：

Timestamp.valueOf("9999-12-31 23:59:59.999999").getTime()

-62,135,802,000,000：

Timestamp.valueOf("0001-01-01 00:00:00.0").getTime()

(3)　getXXXメソッド（getObjectメソッドを除く）

次の表に，getXXXメソッド使用時にオーバフローするかどうかを，HiRDBのデータ型ごとに示します。

表17‒115　getXXXメソッド使用時のオーバフロー有無（1/2）

getXXXメソッド

HiRDBのデータ型

SMALLINT

INTEGER

FLOAT

REAL

DECIMAL

文字列型

getByte

×

×

×

×

×

×

getShort

○

×

×

×

×

×

getInt

○

○

×

×

×

×

getLong

○

○

×

×

×

×

getFloat

○

○

○

○

○

○

getDouble

○

○

○

○

○

○

getBigDecimal

○

○

○

○

○

○

getBoolean

○

○

○

○

○

○

getString

○

○

○

○

○

○

getBytes

−

−

−

−

−

−

getDate

−

−

−

−

−

○

getTime

−

−

−

−

−

○

getTimestamp

−

−

−

−

−

○

getAsciiStream

−

−

−

−

−

○

getBinaryStream

−

−

−

−

−

−

getCharacterStream

−

−

−

−

−

○

getArray

−

−

−

−

−

○

getBlob

−

−

−

−

−

−

（凡例）

○：値に関係なく，オーバフローしません。

×：値によっては，オーバフローすることがあります。

−：この組み合わせでは使用できません。

文字列型：CHAR型，MCHAR型，NCHAR型，VARCHAR型，MVARCHAR型，及びNVARCHAR型

表17‒116　getXXXメソッド使用時のオーバフロー有無（2/2）

getXXXメソッド

HiRDBのデータ型

DATE

TIME

TIMESTAMP

BINARY

BLOB

getByte

−

−

−

−

−

getShort

−

−

−

−

−

getInt

−

−

−

−

−

getLong

−

−

−

−

−

getFloat

−

−

−

−

−

getDouble

−

−

−

−

−

getBigDecimal

−

−

−

−

−

getBoolean

−

−

−

−

−

getString

○

○

○

○

○

getBytes

−

−

−

○

○

getDate

○

−

○

−

−

getTime

−

○

○

−

−

getTimestamp

○

−

○

−

−

getAsciiStream

−

−

−

○

○

getBinaryStream

−

−

−

○

○

getCharacterStream

−

−

−

○

○

getArray

−

−

−

○

○

getBlob

−

−

−

○

○

（凡例）

○：値に関係なく，オーバフローしません。

−：この組み合わせでは使用できません。

(4)　getObjectメソッド

次の表に，getObjectメソッド使用時にオーバフローするかどうかを，HiRDBのデータ型ごとに示します。

表17‒117　getObjectメソッド使用時のオーバフロー有無（1/2）

getObjectメソッド

HiRDBのデータ型

SMALLINT

INTEGER

FLOAT

REAL

DECIMAL

文字列型

Byte

×

×

×

×

×

×

Short

○

×

×

×

×

×

Int

○

○

×

×

×

×

Long

○

○

×

×

×

×

Float

○

○

×

○

×

×

Double

○

○

○

×

×

×

BigDecimal

○

○

○

×

×

×

Boolean

○

○

○

○

○

○

String

○

○

○

○

○

○

Bytes

−

−

−

−

−

−

Date

−

−

−

−

−

○

Time

−

−

−

−

−

○

Timestamp

−

−

−

−

−

○

AsciiStream

−

−

−

−

−

○

BinaryStream

−

−

−

−

−

−

Object

○

○

○

○

○

○

CharacterStream

−

−

−

−

−

○

Array

−

−

−

−

−

○

Blob

−

−

−

−

−

−

（凡例）

○：値に関係なく，オーバフローしません。

×：値によっては，オーバフローすることがあります。

−：この組み合わせでは使用できません。

文字列型：CHAR型，MCHAR型，NCHAR型，VARCHAR型，MVARCHAR型，及びNVARCHAR型

表17‒118　getObjectメソッド使用時のオーバフロー有無（2/2）

getObjectメソッド

HiRDBのデータ型

DATE

TIME

TIMESTAMP

BINARY

BLOB

Byte

−

−

−

−

−

Short

−

−

−

−

−

Int

−

−

−

−

−

Long

−

−

−

−

−

Float

−

−

−

−

−

Double

−

−

−

−

−

BigDecimal

−

−

−

−

−

Boolean

−

−

−

−

−

String

○

○

○

−

−

Bytes

−

−

−

○

○

Date

○

−

○

−

−

Time

−

○

○

−

−

Timestamp

○

−

○

−

−

AsciiStream

−

−

−

○

○

BinaryStream

−

−

−

○

○

Object

○

○

○

○

○

CharacterStream

−

−

−

○

○

Array

−

−

−

○

○

Blob

−

−

−

○

○

（凡例）

○：値に関係なく，オーバフローしません。

−：この組み合わせでは使用できません。

17.12　文字コード変換機能

Javaプログラム内では，文字コードはUnicodeで扱うため，JDBCドライバがHiRDBの文字データとUnicodeとの相互文字コード変換をします。この文字コード変換処理で，JDBCドライバはJava仮想マシンが提供するエンコーダを利用します。

HiRDBの文字データとUnicodeとの相互文字コード変換の流れを次の図に示します。

図17‒2　HiRDBの文字データとUnicodeとの相互文字コード変換の流れ

HiRDBとの文字データのやり取りの際，Java仮想マシンのエンコーダに対して，JDBCドライバが文字セット名称を指定します。このとき，HiRDBサーバの文字コードを取得し，それに相当する文字セット名称にします。また，接続時のプロパティENCODELANGやsetEncodeLangメソッドによって文字セット名称が指定されている場合は，指定された文字セット名称が優先的にJava仮想マシンのエンコーダに対して指定されます。そのため，プロパティENCODELANGやsetEncodeLangメソッドにHiRDBサーバの文字コードと対応しない文字セット名称を指定した場合，文字コード変換に不正が生じます。

17.13　指定できるクライアント環境定義

JDBCドライバで指定できるクライアント環境定義の一覧を次の表に示します。なお，各環境変数の詳細は「クライアント環境定義の設定内容」を参照してください。

また，指定値に引用符（ " ）で囲む値を含む場合の注意事項については，「クライアント環境定義の一覧」の「注※5」を参照してください。

表17‒119　JDBCドライバで指定できるクライアント環境定義の一覧

環境変数名

対応するシステムプロパティ※1

機能

サポートドライバ

環境変数の分類

JDBC2.0

JDBC4.0

PDHOST

HiRDB_for_Java_PDHOST

接続するHiRDBサーバのホスト名を指定します。

○

○

システム構成

PDNAMEPORT

HiRDB_for_Java_PDNAMEPORT

HiRDBサーバのポート番号を指定します。

○

○

PDFESHOST

HiRDB_for_Java_PDFESHOST

フロントエンドサーバのホスト名を指定します。

○

○

PDSERVICEGRP

HiRDB_for_Java_PDSERVICEGRP

シングルサーバ又はフロントエンドサーバのサーバ名を指定します。

○

○

PDSRVTYPE

HiRDB_for_Java_PDSRVTYPE

HiRDBサーバの種別を指定します。

○

○

PDSERVICEPORT

HiRDB_for_Java_PDSERVICEPORT

高速接続用のポート番号を指定します。

○

○

PDFESGRP

HiRDB_for_Java_PDFESGRP

高速接続をする場合，接続するFESグループを指定します。

○

○

PDCLTRCVPORT

HiRDB_for_Java_PDCLTRCVPORT

クライアントの受信ポート番号を指定します。

○

○

PDCLTRCVADDR

HiRDB_for_Java_PDCLTRCVADDR

クライアントのIPアドレス又はホスト名を指定します。

○

○

PDUSER

HiRDB_for_Java_PDUSER

認可識別子，及びパスワードを指定します。UNIX環境の場合は，この環境変数を省略できます。

○

○

ユーザ実行環境

PDCLTAPNAME

HiRDB_for_Java_PDCLTAPNAME

HiRDBサーバに対してアクセスする，UAPの識別情報（UAP識別子）を指定します。

○

○

PDDBLOG

HiRDB_for_Java_PDDBLOG

UAPを実行するときに，データベースの更新ログを取得するかしないかを指定します。

○

○

PDEXWARN

HiRDB_for_Java_PDEXWARN

サーバから警告付きのリターンコードを受け取るかどうかを指定します。

○

○

PDSUBSTRLEN

HiRDB_for_Java_PDSUBSTRLEN

1文字を表現する最大バイト数を指定します。

○

○

PDCLTGRP

HiRDB_for_Java_PDCLTGRP

クライアントグループの接続枠保証機能を使用する場合，クライアントグループ名を指定します。

○

○

PDAUTORECONNECT

HiRDB_for_Java_PDAUTORECONNECT

自動再接続機能を使用するかどうかを指定します。

○

○

PDRCCOUNT

HiRDB_for_Java_PDRCCOUNT

自動再接続機能でのCONNECTのリトライ回数を指定します。

○

○

PDRCINTERVAL

HiRDB_for_Java_PDRCINTERVAL

自動再接続機能でのCONNECTのリトライ間隔を指定します。

○

○

PDRCTIMING

HiRDB_for_Java_PDRCTIMING

自動再接続機能での再接続契機を指定します。

○

○

PDAUTHTYPE

HiRDB_for_Java_PDAUTHTYPE

HiRDBクライアントがサーバへ接続するときの認証方式を指定します。

○

○

PDUAPENVFILE

HiRDB_for_Java_PDUAPENVFILE

UAPを個別の環境で実行する場合，実行する環境を定義したUAP環境定義ファイルを指定します。

○

○

PDDBBUFLRU

HiRDB_for_Java_PDDBBUFLRU

UAPがアクセスしたページをグローバルバッファにキャッシュするときの処理に，LRU方式を適用するかどうかを指定します。

○

○

PDHATRNQUEUING

HiRDB_for_Java_PDHATRNQUEUING

クライアントでトランザクションキューイング機能を使用しない場合に指定します。

○

○

PDCLTBINDLOOPBACKADDR

HiRDB_for_Java_PDCLTBINDLOOPBACKADDR

HiRDBサーバとの通信で使用する受信ポートの生成時，ループバックアドレスでbind()するかどうかを指定します。

○

○

PDDEFAULTOPTION

HiRDB_for_Java_PDDEFAULTOPTION

クライアント環境定義について，省略時の動作を指定します。

○

○

PDCWAITTIME

HiRDB_for_Java_PDCWAITTIME

HiRDBクライアントからHiRDBサーバへ要求をしてから，応答が戻ってくるまでのHiRDBクライアントの最大待ち時間を指定します。

○

○

システム監視

PDSWAITTIME

HiRDB_for_Java_PDSWAITTIME

HiRDBサーバがHiRDBクライアントからの要求に対する応答を返してから，次にHiRDBクライアントから要求が来るまでのHiRDBサーバの最大待ち時間を指定します。

この時間監視は，トランザクション処理中の時間を対象とします。

○

○

PDSWATCHTIME

HiRDB_for_Java_PDSWATCHTIME

HiRDBサーバがHiRDBクライアントからの要求に対する応答を返してから，次にHiRDBクライアントから要求が来るまでのHiRDBサーバの最大待ち時間を指定します。

この時間監視は，トランザクション処理以外の時間を対象とします。

○

○

PDCWAITTIMEWRNPNT

HiRDB_for_Java_PDCWAITTIMEWRNPNT

SQL実行時間警告出力機能使用時に，SQL実行時間警告情報ファイルを出力する契機を，HiRDBクライアントの最大待ち時間に対する比率，又は時間で指定します。

○

○

PDKALVL

HiRDB_for_Java_PDKALVL

HiRDBクライアントからHiRDBサーバに対して，定期的にパケットを送信する機能を使用するかどうかを指定します。

○

○

PDKATIME

HiRDB_for_Java_PDKATIME

HiRDBクライアントからHiRDBサーバに対して，定期的にパケットを送信する間隔を指定します。

○

○

PDNBLOCKWAITTIME

HiRDB_for_Java_PDNBLOCKWAITTIME

HiRDBサーバ，HiRDBクライアント間のコネクション接続完了を監視する場合，ノンブロックモード時のコネクション確立監視時間を指定します。

○

○

PDCONNECTWAITTIME

HiRDB_for_Java_PDCONNECTWAITTIME

HiRDBサーバとの接続時，HiRDBサーバから応答が戻ってくるまでのHiRDBクライアントの最大待ち時間を指定します。

○

○

PDCLTPATH

HiRDB_for_Java_PDCLTPATH

HiRDBクライアントが作成するSQLトレースファイル及びクライアントエラーログファイルの格納先ディレクトリを指定します。

○

○

トラブルシュート

PDSQLTRACE※2

HiRDB_for_Java_PDSQLTRACE

UAPのSQLトレースを出力するSQLトレースファイルのサイズを，バイト単位で指定します。

○

○

PDPRMTRC

HiRDB_for_Java_PDPRMTRC

SQLトレースにパラメタ情報及び検索データを出力するかどうかを指定します。

○

○

PDPRMTRCSIZE

HiRDB_for_Java_PDPRMTRCSIZE

SQLトレースに出力するパラメタ情報及び検索データの最大データ長を指定します。

○

○

PDUAPREPLVL

HiRDB_for_Java_PDUAPREPLVL

UAP統計レポートの出力情報を指定します。

○

○

PDREPPATH

HiRDB_for_Java_PDREPPATH

PDCLTPATHで指定したディレクトリとは別のディレクトリに，UAP統計レポートを出力するかどうかを指定します。

○

○

PDTRCPATH

HiRDB_for_Java_PDTRCPATH

動的SQLトレースファイルの格納先ディレクトリを指定します。

○

○

PDSQLTEXTSIZE

HiRDB_for_Java_PDSQLTEXTSIZE

SQLトレースに出力するSQL文のサイズを指定します。

○

○

PDSQLEXECTIME

HiRDB_for_Java_PDSQLEXECTIME

SQLトレースにSQL実行時間を出力するかどうかを指定します。

×

○

PDRCTRACE

HiRDB_for_Java_PDRCTRACE

UAPの再接続トレースを出力するファイルのサイズを指定します。

○

○

PDWRTLNPATH

HiRDB_for_Java_PDWRTLNPATH

WRITE LINE文の値式の値を出力する，ファイルの格納先ディレクトリを指定します。

○

○

PDWRTLNFILSZ

HiRDB_for_Java_PDWRTLNFILSZ

WRITE LINE文の値式の値を出力する，ファイルの最大サイズを指定します。

○

○

PDWRTLNCOMSZ

HiRDB_for_Java_PDWRTLNCOMSZ

WRITE LINE文の値式の値の合計サイズを指定します。

○

○

PDUAPEXERLOGUSE

HiRDB_for_Java_PDUAPEXERLOGUSE

拡張SQLエラー情報出力機能を使用するかどうかを指定します。

×

○

PDUAPEXERLOGPRMSZ

HiRDB_for_Java_PDUAPEXERLOGPRMSZ

拡張SQLエラー情報出力機能を使用する場合，Exceptionトレースログ及びSQLエラーレポートファイルに出力するパラメタ情報の最大データ長を指定します。

×

○

PDSQLTRCFMT

HiRDB_for_Java_PDSQLTRCFMT

SQLトレースの出力形式を指定します。

○

○

PDVWOPTMODE

HiRDB_for_Java_PDVWOPTMODE

アクセスパス情報ファイルを取得するかどうかを指定します。

○

○

アクセスパス表示ユティリティ用アクセスパス情報ファイル

PDTAAPINFPATH

HiRDB_for_Java_PDTAAPINFPATH

アクセスパス情報ファイルをHiRDBクライアント側に出力する場合に，出力先ディレクトリを指定します。この指定がない場合は出力しません。

×

○

HiRDB SQL Tuning Advisor用アクセスパス情報ファイル

PDTAAPINFMODE

HiRDB_for_Java_PDTAAPINFMODE

アクセスパス情報ファイルをHiRDBクライアント側に出力する場合に，アクセスパス情報ファイルのファイル名の形式を指定します。

×

○

PDTAAPINFSIZE

HiRDB_for_Java_PDTAAPINFSIZE

アクセスパス情報ファイルをHiRDBクライアント側に出力する場合に，アクセスパス情報ファイルのファイルサイズを指定します。

×

○

PDSTJTRNOUT

HiRDB_for_Java_PDSTJTRNOUT

UAPに関する統計情報を，トランザクションごとに統計ログファイルに出力するかどうかを指定します。

○

○

UAPに関する統計情報の出力単位

PDLOCKLIMIT

HiRDB_for_Java_PDLOCKLIMIT

一つのサーバに対してUAPから発行する排他要求の上限値を指定します。

○

○

排他制御

PDDLKPRIO

HiRDB_for_Java_PDDLKPRIO

UAPのデッドロックプライオリティ値を指定します。

○

○

PDLOCKSKIP

HiRDB_for_Java_PDLOCKSKIP

無排他条件判定をするかどうかを指定します。

○

○

PDFORUPDATEEXLOCK

HiRDB_for_Java_PDFORUPDATEEXLOCK

FOR UPDATE句を指定した（又は仮定された）SQLの排他オプションに，WITH EXCLUSIVE LOCKを適用するかどうかを指定します。

○

○

PDISLLVL

HiRDB_for_Java_PDISLLVL

SQL文のデータ保証レベルを指定します。

○

○

SQL関連

PDSQLOPTLVL

HiRDB_for_Java_PDSQLOPTLVL

データベースの状態を考慮して，最も効率的なアクセスパスを決定するための最適化の方法（SQL最適化オプション）を指定します。

○

○

PDADDITIONALOPTLVL

HiRDB_for_Java_PDADDITIONALOPTLVL

データベースの状態を考慮して，最も効率的なアクセスパスを決定するための最適化の方法（SQL拡張最適化オプション）を指定します。

○

○

PDHASHTBLSIZE

HiRDB_for_Java_PDHASHTBLSIZE

SQLの最適化で，ハッシュジョイン，副問合せのハッシュ実行を適用する場合，ハッシュ表サイズを指定します。

○

○

PDDFLNVAL

HiRDB_for_Java_PDDFLNVAL

表中のデータを埋込み変数に取り出す場合，取り出した値がナル値のときに埋込み変数に既定値を設定するかどうかを指定します。

○

○

PDAGGR

HiRDB_for_Java_PDAGGR

GROUP BY処理に使用するメモリ量を決定するため，サーバごとに発生するグループ数の最大値を指定します。

○

○

PDCMMTBFDDL

HiRDB_for_Java_PDCMMTBFDDL

操作系SQLを実行していたトランザクションで定義系SQLを実行する場合，自動的にコミットしてから定義系SQLを実行するかどうかを指定します。

○

○

PDPRPCRCLS

HiRDB_for_Java_PDPRPCRCLS

開いているカーソルで使用しているSQL識別子を再度PREPARE文で使用する場合，開いているカーソルを自動的にクローズするかどうかを指定します。

○

○

PDDDLDEAPRPEXE

HiRDB_for_Java_PDDDLDEAPRPEXE

先行トランザクションの前処理結果を無効にし，定義系トランザクションの実行を優先します。

○

○

PDDDLDEAPRP

HiRDB_for_Java_PDDDLDEAPRP

閉じているホールダブルカーソルで使用している表の定義情報を，トランザクション間に他UAPからの変更を許可するかどうかを指定します。

○

○

PDLCKWAITTIME

HiRDB_for_Java_PDLCKWAITTIME

排他要求が待ち状態になってから解除されるまでの最大監視時間を指定します。

○

○

PDDELRSVWDFILE

HiRDB_for_Java_PDDELRSVWDFILE

SQL予約語削除機能を使用する場合に，SQL予約語削除ファイル名を指定します。

○

○

PDCALCMDWAITTIME

HiRDB_for_Java_PDCALCMDWAITTIME

CALL COMMAND文によってコマンド，又はユティリティを開始してから終了するまでの，HiRDBクライアントの最大待ち時間を指定します。

○

○

PDSTANDARDSQLSTATE

HiRDB_for_Java_PDSTANDARDSQLSTATE

SQLSTATEの値を詳細に出力するかどうかを指定します。

○

○

PDBLKF

HiRDB_for_Java_PDBLKF

HiRDBサーバからHiRDBクライアントに検索結果を転送するときの，一回の転送処理で送られる行数を指定します。

○

○

ブロック転送機能

PDBINARYBLKF

HiRDB_for_Java_PDBINARYBLKF

定義長が32,001バイト以上のBINARY型の選択式がある表を検索する場合，ブロック転送機能を適用するかどうかを指定します。

○

○

PDBLKBUFFSIZE

HiRDB_for_Java_PDBLKBUFFSIZE

ブロック転送機能で使用する，サーバ，クライアント間の通信バッファのサイズを指定します。

○

○

PDDBACCS

HiRDB_for_Java_PDDBACCS

インナレプリカ機能を使用している場合，カレントRDエリアではないRDエリアをアクセスしたいときに，そのRDエリアの世代番号を指定します。

○

○

インナレプリカ機能

PDDBORGUAP

HiRDB_for_Java_PDDBORGUAP

オンライン再編成閉塞のオリジナルRDエリアに対してUAPを実行する場合に指定します。

○

○

更新可能なオンライン再編成

PDSPACELVL

HiRDB_for_Java_PDSPACELVL

データの格納，比較，及び検索時の，空白変換レベルを指定します。

○

○

データの空白変換

PDCLTRDNODE

HiRDB_for_Java_PDCLTRDNODE

XDM/RD E2接続機能使用時に，接続するXDM/RD E2のデータベース識別子を指定します。

○

○

XDM/RD E2接続機能

PDCNSTRNTNAME

HiRDB_for_Java_PDCNSTRNTNAME

参照制約，及び検査制約を定義する場合，制約名定義の位置を指定します。

○

○

参照制約及び検査制約

PDTMPTBLRDAREA

HiRDB_for_Java_PDTMPTBLRDAREA

一時表及び一時インデクスを格納するRDエリアの候補を指定します。

○

○

一時表

PDBESCONHOLD

HiRDB_for_Java_PDBESCONHOLD

バックエンドサーバ接続保持機能を使用するかどうかを指定します。

○

○

バックエンドサーバ接続保持機能

PDBESCONHTI

HiRDB_for_Java_PDBESCONHTI

バックエンドサーバ接続保持機能を使用する場合，バックエンドサーバ接続保持期間を指定します。

○

○

PDPLGIXMK

HiRDB_for_Java_PDPLGIXMK

プラグインインデクスの遅延一括作成を使用するかどうかを指定します。

○

○

プラグイン

PDPLUGINNSUB

HiRDB_for_Java_PDPLUGINNSUB

詳細については，各プラグインマニュアルを参照してください。

○

○

PDPLGPFSZ

HiRDB_for_Java_PDPLGPFSZ

プラグインの遅延一括作成用のインデクス情報ファイルの初期容量を指定します。

○

○

PDPLGPFSZEXP

HiRDB_for_Java_PDPLGPFSZEXP

プラグインの遅延一括作成用のインデクス情報ファイルの増分値を指定します。

○

○

PDHSICOPTIONS

HiRDB_for_Java_PDHSICOPTIONS

HSICを使用する運用の場合に，HSICで集積する情報を指定します。

○

○

HSIC限定

PDJDBFILEDIR

−

Type4 JDBCドライバでのExceptionトレースログのログファイル出力先を指定します。

○

○

JDBCドライバ

PDJDBFILEOUTNUM

−

Type4 JDBCドライバでのExceptionトレースログのログファイル及び不正電文トレースファイルへの出力数を指定します。

○

○

PDJDBONMEMNUM

−

Type4 JDBCドライバでのExceptionトレースログのメモリ内取得情報数を指定します。

○

○

PDJDBTRACELEVEL

−

Type4 JDBCドライバでのExceptionトレースログのトレース取得レベルを指定します。

○

○

PDJDBFILESIZE

−

Type4 JDBCドライバでのExceptionトレースログのログファイルの最大サイズを指定します。

○

○

(凡例)

−：該当しません。

○：指定できます。

×：指定できません。

注※1

クライアント環境定義と同じ意味を持つ接続情報をシステムプロパティで指定できます。指定の優先順位については，「接続情報の優先順位」を参照してください。Exceptionトレースログに関する接続情報のシステムプロパティの設定については，「Exceptionトレースログを取得するための設定」を参照してください。

なお，内部ドライバの場合，システムプロパティの指定は無効です。

注※2

出力ファイル名については，「SQLトレース機能」を参照してください。

HiRDB.INIファイルを使用してクライアント環境変数を有効にする場合

次の場合，任意のディレクトリ下のHiRDB.INIファイル内に設定しているクライアント環境変数を有効にできます。

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_HiRDB_INIを指定している

DriverManager.getConnectionのURL中にHiRDB_INIを指定している

DataSource系インタフェースのsetHiRDBINIメソッドでHiRDB_INIファイルの絶対パスを指定している

指定の優先順位については，「接続情報の優先順位」を参照してください。

なお，内部ドライバの場合，HiRDB.INIファイルの指定は無効です。

17.14　接続情報の優先順位

17.14.1　接続情報の優先順位一覧

JDBCドライバでは，意味が同じ接続情報を複数の設定方法で指定できます（例：URL中に指定するDBHOSTと，HiRDBクライアント環境定義のPDHOST）。このような複数の設定方法を持つ接続情報と，同時に複数の設定方法で設定された場合の優先順位を次の表に示します。

表17‒120　接続情報の優先順位

接続情報の意味

設定方法

優先順位

A

B

C

HiRDBのホスト名称

システムプロパティに設定したHiRDB_for_Java_PDHOST

1

1

1

DriverManager.getConnectionのProperties引数中のプロパティHiRDB_for_Java_DBHOST

2

−

−

URL中のDBHOST

3

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_ENV_VARIABLESで指定したHiRDBクライアント環境定義のPDHOST

4

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_DBIDに指定したHiRDB環境変数グループ内のPDHOST

5

−

−

URL中のDBIDに指定したHiRDB環境変数グループ内のPDHOST

6

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_HiRDB_INIに指定したHiRDB.iniファイル内のPDHOST

7

−

−

URL中のHiRDB_INIに指定したHiRDB.iniファイル内のPDHOST

8

−

−

DataSource系インタフェースのsetDBHostNameメソッド

−

2

2

DataSource系インタフェースのsetEnvironmentVariablesメソッドで指定したHiRDBクライアント環境定義のPDHOST

−

3

3

DataSource系インタフェースのsetDescriptionメソッドで指定したHiRDB環境変数グループ内のPDHOST

−

4

−

XADataSource.setXAOpenStringで指定したHiRDB環境変数グループ内のPDHOST

−

−

4

DataSource系インタフェースのsetHiRDBINIメソッドで指定したHiRDB.iniファイル内のPDHOST

−

5

5

HiRDBのポート番号

システムプロパティに設定したHiRDB_for_Java_ PDNAMEPORT

1

1

1

DriverManager.getConnectionのProperties引数中のプロパティHiRDB_for_Java_DBID

2

−

−

URL中のDBID

3

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_ENV_VARIABLESで指定したHiRDBクライアント環境定義のPDNAMEPORT

4

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_DBIDに指定したHiRDB環境変数グループ内のPDNAMEPORT

5

−

−

URL中のDBIDに指定したHiRDB環境変数グループ内のPDNAMEPORT

6

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_HiRDB_INIに指定したHiRDB.iniファイル内のPDNAMEPORT

7

−

−

URL中のHiRDB_INIに指定したHiRDB.iniファイル内のPDNAMEPORT

8

−

−

DataSource系インタフェースのsetDescriptionメソッド

−

2

−

DataSource系インタフェースのsetEnvironmentVariablesメソッドで指定したHiRDBクライアント環境定義のPDNAMEPORT

−

3

2

DataSource系インタフェースのsetDescriptionメソッドで指定したHiRDB環境変数グループ内のPDNAMEPORT

−

4

−

XADataSource.setXAOpenStringで指定したHiRDB環境変数グループ内のPDNAMEPORT

−

−

3

DataSource系インタフェースのsetHiRDBINIメソッドで指定したHiRDB.iniファイル内のPDNAMEPORT

−

5

4

接続時のユーザ名，パスワード※1

システムプロパティに設定したHiRDB_for_Java_PDUSER

1

1

1

DriverManager.getConnectionのuser引数及びpassword引数，又はProperties引数中のuser及びpassword

2

−

−

URL中のUSER及びPASSWORD

3

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_ENV_VARIABLESで指定したHiRDBクライアント環境変数内のPDUSER

4

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_DBIDに指定したHiRDB環境変数グループ内のPDUSER

5

−

−

URL中のDBIDに指定したHiRDB環境変数グループ内のPDUSER

6

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_HiRDB_INIに指定したHiRDB.iniファイル内のPDUSER

7

−

−

URL中のHiRDB_INIに指定したHiRDB.iniファイル内のPDUSER

8

−

−

DataSourceインタフェースのgetConnectionメソッドの引数，又はConnectionPoolDataSourceインタフェースのgetPooledConnectionメソッドの引数

−

2

−

XADataSourceインタフェースのgetXAConnectionメソッドの引数

−

−

2

DataSource系インタフェースのsetUserメソッド及びsetPasswordメソッド

−

3

3

DataSource系インタフェースのsetEnvironmentVariablesメソッドで指定したHiRDBクライアント環境変数内のPDUSER

−

4

4

DataSource系インタフェースのsetDescriptionメソッドで指定したHiRDB環境変数グループ内のPDUSER

−

5

−

XADataSource.setXAOpenStringで指定したHiRDB環境変数グループ内のPDUSER

−

−

5

DataSource系インタフェースのsetHiRDBINIメソッドで指定したHiRDB.iniファイル内のPDUSER

−

6

6

UAP名称※2

システムプロパティに設定したHiRDB_for_Java_ PDCLTAPNAME

1

1

1

DriverManager.getConnectionのProperties引数中のプロパティUAPNAME

2

−

−

URL中のUAPNAME

3

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_ENV_VARIABLESで指定したHiRDBクライアント環境定義のPDCLTAPNAME

4

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_DBIDに指定したHiRDB環境変数グループ内のPDCLTAPNAME

5

−

−

URL中のDBIDに指定したHiRDB環境変数グループ内のPDCLTAPNAME

6

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_HiRDB_INIに指定したHiRDB.iniファイル内のPDCLTAPNAME

7

−

−

URL中のHiRDB_INIに指定したHiRDB.iniファイル内のPDCLTAPNAME

8

−

−

DataSource系インタフェースのsetUapNameメソッド

−

2

2

DataSource系インタフェースのsetEnvironmentVariablesメソッドで指定したHiRDBクライアント環境定義のPDCLTAPNAME

−

3

3

DataSource系インタフェースのsetDescriptionメソッドで指定したHiRDB環境変数グループ内のPDCLTAPNAME

−

4

−

XADataSource.setXAOpenStringで指定したHiRDB環境変数グループ内のPDCLTAPNAME

−

−

4

DataSource系インタフェースのsetHiRDBINIメソッドで指定したHiRDB.iniファイル内のPDCLTAPNAME

−

5

5

変換文字セット

DriverManager.getConnectionのProperties引数中のプロパティENCODELANG

1

−

−

URL中のENCODELANG

2

−

−

DataSource系インタフェースのsetEncodeLang

−

1

1

カーソル動作モード

DriverManager.getConnectionのProperties引数中のプロパティHIRDB_CURSOR

1

−

−

URL中のHIRDB_CURSOR

2

−

−

DataSource系インタフェースのsetHiRDBCursorMode

−

1

1

ステートメントのコミット実行後の状態

システムプロパティに設定したHiRDB_for_Java_ DAB_STATEMENT_COMMIT_BEHAVIOR

1

1

1

DriverManager.getConnectionのProperties引数中のプロパティHiRDB_for_Java_STATEMENT_COMMIT_BEHAVIOR

2

−

−

URL中のSTATEMENT_COMMIT_BEHAVIOR

3

−

−

DataSource系インタフェースのsetStatementCommitBehavior

−

2

2

ログイン待ち時間

システムプロパティに設定したHiRDB_for_Java_PDCONNECTWAITTIME

1

1

1

DriverManager.setLoginTimeout

2

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_ENV_VARIABLESで指定したHiRDBクライアント環境定義のPDCONNECTWAITTIME

3

−

−

DriverManager.getConnectionのProperties引数中のDBIDに指定したHiRDB環境変数グループ内のPDCONNECTWAITTIME

4

−

−

URL中のDBIDに指定したHiRDB環境変数グループ内のPDCONNECTWAITTIME

5

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_HiRDB_INIに指定したHiRDB.iniファイル内のPDCONNECTWAITTIME

6

−

−

URL中のHiRDB_INIに指定したHiRDB.iniファイル内のPDCONNECTWAITTIME

7

−

−

DataSource系インタフェースのsetLoginTimeout

−

2

2

DataSource系インタフェースのsetEnvironmentVariablesメソッドで指定したHiRDBクライアント環境定義のPDCONNECTWAITTIME

−

3

3

DataSource系インタフェースのsetDescriptionメソッドで指定したHiRDB環境変数グループ内のPDCONNECTWAITTIME

−

4

−

XADataSource.setXAOpenStringで指定したHiRDB環境変数グループ内のPDCONNECTWAITTIME

−

−

4

DataSource系インタフェースのsetHiRDBINIメソッドで指定したHiRDB.iniファイル内のPDCONNECTWAITTIME

−

5

5

ステートメントのcloseメソッド実行時のSQL前処理の破棄

システムプロパティに設定したHiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR

1

1

1

DriverManager.getConnectionのProperties引数中のプロパティHiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR

2

−

−

URL中のSTATEMENT_CLOSE_BEHAVIOR

3

−

−

DataSource系インタフェースのsetStatementCloseBehavior

−

2

2

ステートメントの更新行数がJDBC規格に準拠するかどうか

システムプロパティに設定したHiRDB_for_Java_UPDATECOUNT_BEHAVIOR

1

1

1

DriverManager.getConnectionのProperties引数中のプロパティHiRDB_for_Java_UPDATECOUNT_BEHAVIOR

2

−

−

URL中のUPDATECOUNT_BEHAVIOR

3

−

−

DataSource系インタフェースのsetUpdateCountBehavior

−

2

2

（凡例）

A：DriverManagerを使用した接続の場合

B：DataSource系インタフェースを使用した非XA接続の場合

C：XADataSourceインタフェースを使用したXA接続の場合

−：接続方法によって指定できない

注※1

ユーザ名を指定してパスワードを指定していない場合，パスワード指定がないものとみなします。ユーザ名を指定しないでパスワードを指定した場合，パスワードの指定は無効になり，次に優先順位の高い指定が有効になります。

注※2

この表で示した設定方法で設定されない場合は，次の表に示すJDBCドライバの製品名称が設定されたものとして動作します。

表17‒121　UAP名称を省略した場合に設定される製品名称

JDBC

Cosminexus

J2EEサーバ名長

（バイト数）

製品名称

2.0の場合

使用しない

−

HiRDB_Type4_JDBC_Driver

使用する

23バイト以下

JDBC20_xxxx

xxxx：J2EEサーバ名

24バイト以上

JDBC20_xxxx

xxxx：J2EEサーバ名（末尾部23バイト抽出）

4.0の場合

使用しない

−

HiRDB_Type4_JDBC40_Driver

使用する

23バイト以下

JDBC40_xxxx

xxxx：J2EEサーバ名

24バイト以上

JDBC40_xxxx

xxxx：J2EEサーバ名（末尾部23バイト抽出）

（凡例）　−：該当しません。

17.14.2　そのほかのクライアント環境定義の優先順位

そのほかのHiRDBクライアント環境定義の優先順位を示します。

設定方法

優先順位

A

B

C

システムプロパティの指定

1

1

1

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_ENV_VARIABLESで指定したHiRDBクライアント環境定義

2

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_DBIDに指定したHiRDB環境変数グループファイル内のクライアント環境変数

3

−

−

DriverManager.getConnectionのURL中のDBIDに指定したHiRDB環境変数グループファイル内のクライアント環境定義

4

−

−

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_HiRDB_INIに指定したディレクトリ下のHiRDB.iniファイルに指定されたHiRDBクライアント環境変数

5

−

−

DriverManager.getConnectionのURL中のHiRDB_INIに指定したディレクトリ下のHiRDB.iniファイルに指定されたHiRDBクライアント環境変数

6

−

−

DataSource系インタフェースのsetEnvironmentVariablesメソッドで指定したクライアント環境定義

−

2

2

DataSource系インタフェースのsetDescriptionメソッドで指定したHiRDB環境変数グループファイル内のクライアント環境定義

−

3

−

XADataSource.setXAOpenStringで指定したHiRDB環境変数グループファイル内のクライアント環境定義

−

−

3

DataSource系インタフェースのsetHiRDBINIメソッドで指定したHiRDB.iniファイル内のクライアント環境定義

−

4

4

注

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_DBID及びURL中のDBIDにHiRDB環境変数グループファイルを指定した場合，URL中のDBIDの指定は無効となります。

DriverManager.getConnectionのProperties引数中のHiRDB_for_Java_HiRDB_INI及びURL中のHiRDB_INIを指定した場合，URL中のHiRDB_INIの指定は無効になります。

17.15　Type2 JDBCドライバからの移行

ここでは，Type2 JDBCドライバを使用して動作していたJavaストアドプロシジャを，Type4 JDBCドライバを使用して動作させる場合について説明します。

なお，次に示すプラットフォームの場合は，Type2 JDBCドライバからType4 JDBCドライバへ，プログラムを変更しないで移行できます。

64ビットモードのHP-UX

64ビットモードのAIX

Linux(EM64T)

Windows (x64)

上記以外のプラットフォームの場合に，内部ドライバをType2 JDBCドライバからType4 JDBCドライバに移行するときは，次に示すとおり設定を変更する必要があります。

変更が必要な項目

Type2 JDBCドライバ

Type4 JDBCドライバ

ドライバ名称

"JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver"

"JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver"

HiRDBへの接続時のURLで設定するプロトコル名称，サブプロトコル名称，及びサブネーム

jdbc:hitachi:PrdbDrive

jdbc:hitachi:hirdb

DataSourceクラスのクラス名

JdbhDataSource

PrdbDataSource

カーソルの動作モード※

次のどれかを設定します。

接続時のURLのCOMMIT_BEHAVIOR

接続時に指定するプロパティのCOMMIT_BEHAVIOR

DataSourceクラスのsetCommit_Behaviorメソッド

次のどれかを設定します。

接続時のURLのHIRDB_CURSORとSTATEMENT_COMMIT_BEHAVIORを組み合わせて設定

接続時に指定するプロパティのHIRDB_CURSORとSTATEMENT_COMMIT_BEHAVIORを組み合わせて設定

DataSourceクラスのsetStatementCommitBehaviorとsetHiRDBCursorModeメソッドを組み合わせて設定

HiRDBの配列更新，配列挿入，配列削除機能

次のどれかで，この機能を使用する設定をした場合に，使用できます。

接続時に指定するプロパティのBLOCK_UPDATE

システムプロパティのHiRDB_for_Java_BLOCK_UPDATE

DataSourceクラスの，setBlockUpdateメソッド

JdbcDbpsvPreparedStatementクラスのsetBlockUpdateメソッド

無条件に使用できます。

ただし，JdbcDbpsvPreparedStatementクラスのsetBlockUpdateメソッドは使用できません。

実行するSQLの入力，又は入出力?パラメタの最大数

次のどれかを設定します。

接続時に指定するプロパティのHiRDB_for_Java_SQL_IN_NUM

システムプロパティのHiRDB_for_Java_SQL_IN_NUM

DataSourceクラスの，setSQLInNumメソッド

デフォルト値は，64です。

次のどちらかを設定します。

接続時に指定するプロパティのHiRDB_for_Java_SQL_IN_NUM

DataSourceクラスの，setSQLInNumメソッド

デフォルト値は，300です。

実行するSQLの出力項目数の最大数

次のどれかを設定します。

接続時に指定するプロパティのHiRDB_for_Java_SQL_OUT_NUM

システムプロパティのHiRDB_for_Java_SQL_OUT_NUM

DataSourceクラスの，setSQLOutNumメソッド

デフォルト値は，64です。

次のどちらかを設定します。

接続時に指定するプロパティのHiRDB_for_Java_SQL_OUT_NUM

DataSourceクラスの，setSQLOutNumメソッド

デフォルト値は，300です。

注※

カーソルの動作モードによってコミット実行後にResultSetオブジェクト及びステートメントオブジェクトが有効になるかどうかが決まります。

Type2 JDBCドライバとType4 JDBCドライバのカーソルの動作モードの設定の対応を次に示します。

なお，Type2 JDBCドライバとType4 JDBCドライバでは，デフォルト値が異なります。

コミット実行後のResultSetオブジェクトの状態

コミット実行後のステートメントオブジェクトの状態

Type2 JDBCドライバ

Type4 JDBCドライバ

無効

無効

COMMIT_BEHAVIOR= "DELETE"（デフォルト値）

HIRDB_CURSOR=FALSE（デフォルト値）

STATEMENT_COMMIT_BEHAVIOR=FALSE

有効

COMMIT_BEHAVIOR= "CLOSE"

HIRDB_CURSOR=FALSE（デフォルト値）

STATEMENT_COMMIT_BEHAVIOR=TRUE（デフォルト値）

有効

有効

COMMIT_BEHAVIOR= "PRESERVE"

HIRDB_CURSOR=TRUE

STATEMENT_COMMIT_BEHAVIOR=TRUE又はFALSE

《Javaアプリケーション中のクライアント環境定義について》

Type2 JDBCドライバの場合は，接続時のURLなどを省略するとOSの環境変数に指定したPDHOST及びPDNAMEPORTが有効となります。

Type4 JDBCドライバの場合は，OSの環境変数は使用しません。そのため，Type2 JDBCドライバから移行するときは，接続時のURLなどにクライアント環境定義のPDHOST及びPDNAMEPORTを指定するように，UAPを変更してください。

17.16　DABroker for Javaからの移行

使用するJDBCドライバをDABroker for JavaからType4 JDBCドライバへ移行する場合，UAPの修正が必要になることがあります。このとき，システムプロパティを設定してType4 JDBCドライバをDABroker for Java互換モードで動作させる機能をDABroker for Java互換機能と呼びます。ここでは，DABroker for Java互換機能について説明します。

17.16.1　DABroker for Java互換機能に関するシステムプロパティ

DABroker for Javaとの互換機能に関する接続情報を，システムプロパティで指定できます。指定できるシステムプロパティを次の表に示します。

なお，内部ドライバの場合，システムプロパティの指定は無効です。

表17‒122　DABroker for Java互換機能に関するシステムプロパティ

プロパティ名

内容

指定可否

HiRDB_for_Java_DAB_CONVERT_NULL

CallableStatementクラスのsetString，getStringメソッドをDABroker for Java互換モードで動作させるかどうかを設定します。省略した場合，"FALSE"が仮定されます。設定した値については大文字と小文字を区別しません。

"TRUE"：

DABroker for Java互換モードで動作させます。

setStringメソッドで，？パラメタのデータ型がCHAR型，VARCHAR型，NCHAR型，NVARCHAR型，MCHAR型又はMVARCHAR型で，かつ引数で指定された値が0長文字列の場合，nullを？パラメタに設定します。

又は，getStringメソッドで取得した？パラメタ値が0長文字列の場合，戻り値にnullを設定します。

"FALSE"：

DABroker for Java互換モードで動作させません。

setStringメソッドで，？パラメタのデータ型がCHAR型，VARCHAR型，NCHAR型，NVARCHAR型，MCHAR型又はMVARCHAR型で，かつ引数で指定された値が0長文字列の場合，0長文字列を？パラメタに設定します。

又は，getStringメソッドで取得した？パラメタ値が0長文字列の場合，戻り値に0長文字列を設定します。

その他：

"FALSE"が設定されたものとみなします。

任意

HiRDB_for_Java_DAB_STATEMENT_COMMIT_BEHAVIOR

コミット実行時の，ステートメントのオブジェクトを無効にする処理を，DABroker for Java互換モードで動作させるかどうかを設定します。省略した場合，"FALSE"が仮定されます。設定した値については大文字と小文字を区別しません。

"TRUE"：

DABroker for Javaと互換させます。

コミットした場合，ステートメントのオブジェクトを無効とします。

"FALSE"：

DABroker for Javaと互換させません。

ほかの設定方法で設定した値を使用します。設定方法については，「接続情報の優先順位一覧」を参照してください。

その他：

"FALSE"が設定されたものとみなします。

任意

HiRDB_for_Java_DAB_EXECUTESQL_NOCHK

ステートメントのexecuteQuery，executeUpdateメソッドを，DABroker for Java互換モードで動作させるかどうかを設定します。省略した場合，"FALSE"が仮定されます。設定した値については大文字と小文字を区別しません。

"TRUE"：

DABroker for Java互換モードで動作させます。

ステートメントのexecuteQueryメソッドを使用して検索系SQL以外のSQLを実行できます。

ステートメントのexecuteUpdateメソッドを使用して検索系SQLを実行できます。

ステートメントのexecute，executeQuery，executeUpdateメソッドで検索系SQL以外のSQLを実行後にgetResultSetメソッドを実行した場合，0列のResultSetを返します。

"FALSE"：

DABroker for Java互換モードで動作させません。

ステートメントのexecuteQueryメソッドを使用して検索系SQL以外のSQLを実行すると，SQLExceptionを投入します。

ステートメントのexecuteUpdateメソッドを使用して検索系SQLを実行すると，SQLExceptionを投入します。

ステートメントのexecute，executeUpdateメソッドで検索系SQL以外のSQLを実行後にgetResultSetメソッドを実行した場合，nullを返します。

その他：

"FALSE"が設定されたものとみなします。

任意

HiRDB_for_Java_DAB_OUTPARMSIZE_MAX

CallableStatementクラスのregisterOutParameterメソッドを，DABroker for Java互換モードで動作させるかどうかを設定します。省略した場合，"FALSE"が仮定されます。設定した値については大文字と小文字を区別しません。

"TRUE":

DABroker for Java互換モードで動作させます。

call文の前処理で取得したデータ型がVARCHAR，NVARCHAR，MVARCHARのINOUT及びOUTパラメタのデータ型を，CallableStatementクラスregisterOutParameterメソッドによってjava.sql.Types.CHAR型と登録した場合，CallableStatementクラスgetStringメソッドでは前処理で取得したデータの最大長のサイズのデータを返します。

ストアドプロシジャが設定したデータのサイズが前処理で取得したデータの最大長より小さい場合，ストアドプロシジャが設定したデータに空白を付加し，前処理で取得したデータの最大長と同じサイズのデータにします。

"FALSE"：

DABroker for Java互換モードで動作させません。

call文の前処理で取得したデータ型がVARCHAR，NVARCHAR，MVARCHARのINOUT及びOUTパラメタのデータ型を，CallableStatementクラスregisterOutParameterメソッドによってjava.sql.Types.CHAR型と登録した場合，CallableStatementクラスgetStringメソッドではストアドプロシジャが設定したデータをそのまま返します。ストアドプロシジャが設定したデータには空白を付加しません。

その他：

"FALSE"が設定されたものとみなします。

任意

17.16.2　Type4 JDBCドライバと互換性のない項目

Type4 JDBCドライバと互換性のない項目を，対象となるDABroker for Java及びCosminexusのバージョンごとに，次の表に示します。

DABroker for Java及びCosminexusのバージョン

DABroker for Java Version 2 02-10以前

Cosminexus Studio Version 5 05-05-/E以前

Cosminexus Application Server Version 5 05-05-/E以前

Cosminexus Developer Version 5 05-05-/E以前

表17‒123　Type4 JDBCドライバと互換性のない項目（その1）

互換性のない項目

DABroker for Java

Type4 JDBCドライバ

CallableStatementクラスのsetStringメソッド及びgetStringメソッドでの0長文字列の扱い

setStringメソッド

？パラメタのデータ型がCHAR型，VARCHAR型，NCHAR型，NVARCHAR型，MCHAR型又はMVARCHAR型で，かつ引数で設定された値が0長文字列の場合，nullを？パラメタに設定します。

？パラメタのデータ型がCHAR型，VARCHAR型，NCHAR型，NVARCHAR型，MCHAR型又はMVARCHAR型で，かつ引数で設定された値が0長文字列の場合，0長文字列を？パラメタに設定します。

getStringメソッド

取得した？パラメタの値が0長文字列の場合，戻り値にnullを設定します。

取得した？パラメタの値が0長文字列の場合，戻り値に0長文字列を設定します。

ステートメントのコミット実行後の状態

コミットした場合，ステートメントのオブジェクトを無効にします。

コミットした場合，ステートメントのオブジェクトを有効にします。

DABroker for Java及びCosminexusのバージョン

DABroker for Java Version 2 02-07以前

Cosminexus Studio Version 5 05-05以前

Cosminexus Application Server Version 5 05-05以前

Cosminexus Developer Version 5 05-05以前

表17‒124　Type4 JDBCドライバと互換性のない項目（その2）

互換性のない項目

DABroker for Java

Type4 JDBCドライバ

ステートメントのexecuteQueryメソッド，executeUpdateメソッドで実行できるSQL種別

検索系SQL以外のSQL実行後のgetResultSetメソッドの戻り値

executeQueryメソッド

すべてのSQLを実行できます。

検索系SQL以外のSQLを実行した場合，0列のResultSetを返します。

検索系SQLだけ実行できます。

executeUpdateメソッド

すべてのSQLを実行できます。

検索系SQLを実行した場合，-1を返します。

検索系SQL以外のSQLだけ実行できます。

getResultSetメソッド

ステートメントのexecuteメソッド，executeQueryメソッド，executeUpdateメソッドで検索系SQL以外のSQLを実行後にgetResultSetメソッドを実行した場合，0列のResultSetを返します。

ステートメントのexecuteメソッド，executeUpdateメソッドで検索系SQL以外のSQLを実行後にgetResultSetメソッドを実行した場合，nullを返します。

DABroker for Java及びCosminexusのバージョン

Cosminexus DABroker 03-00-/D以前

Cosminexus DABroker for Java 02-06-/B以前

Cosminexus Studio Version 5 05-00-/D以前

Cosminexus Application Server Version 5 05-00-/D以前

Cosminexus Developer Version 5 05-00-/D以前

表17‒125　Type4 JDBCドライバと互換性のない項目（その3）

互換性のない項目

DABroker for Java

Type4 JDBCドライバ

call文の前処理で取得したデータ型がVARCHAR，NVARCHAR，MVARCHARであるINOUTパラメタ及びOUTパラメタのデータ型を，CallableStatementクラスのregisterOutParameterメソッドによってjava.sql.Types.CHAR型と登録した場合の，CallableStatementクラスのgetStringメソッドで受け取るデータ

前処理で取得したデータの最大長のサイズのデータを返します。

ストアドプロシジャが設定したデータのサイズが前処理で取得したデータの最大長より小さい場合，ストアドプロシジャが設定したデータに空白を付加し，前処理で取得したデータの最大長と同じサイズのデータにします。

ストアドプロシジャが設定したデータを返します。

ストアドプロシジャが設定したデータには空白を付加しません。

17.17　JDBCインタフェースメソッドトレース

トラブルシュート情報として，JDBCインタフェースのメソッド呼び出し時に，JDBCインタフェースメソッドトレースを取得できます。

17.17.1　取得するための設定

(1)　DriverManagerクラスによる接続の場合

DriverManagerクラスのsetLogWriterメソッドによって有効なログライタを指定し，getConnectionメソッドの引数（Properties info）に，JDBCインタフェースメソッドトレースの取得を指定します。

詳細は，「JDBC_IF」及び「TRC_NO」を参照してください。

(2)　DataSourceクラスによる接続の場合

DataSource，ConnectionPoolDataSource，XADataSourceの各インタフェースで提供するsetLogWriterメソッドによって有効なログライタを指定し，JDBC2.0 Optional Packageで提供するDataSource，ConnectionPoolDataSource，XADataSourceの各クラスで提供するsetJDBC_IF_TRCメソッドを指定します。また，setTRC_NOメソッドに，エントリ数を指定します。

詳細は，「setJDBC_IF_TRC」及び「setTRC_NO」を参照してください。

17.17.2　取得規則

JDBCインタフェースメソッドトレースの取得規則を次に示します。

JDBCインタフェースのメソッドの呼び出し時，及びメソッドからの戻り時に，トレース情報が取得されます。

ただし，データベース接続前に実行できるメソッドついては，トレース情報が取得されません。

トレース情報が取得されないメソッドを次に示します。

Driverインタフェース

・acceptsURL(String url)

・getMajorVersion()

・getMinorVersion()

・getPropertyInfo(String url, Properties info)

・jdbcCompliant()

DataSource系インタフェース

・getLoginTimeout()

・getLogWriter()

・setLoginTimeout(int seconds)

・setLogWriter(PrintWriter out)

トレース情報はエントリ数分保持され，Connection.closeメソッドの呼び出し時（正常終了時），又はSQLException，XAException，若しくはBatchUpdateExceptionの投入時（エラー発生時）に，指定したログライタに出力されます。

トレース情報の数がエントリ数を超えた場合は，保持されていたトレース情報を古い順に破棄され，新しいトレース情報が保持されます。

JDBCインタフェースメソッドトレースは，Entry及びReturnでそれぞれ1エントリのトレース領域を使用します。

17.17.3　出力例

JDBCインタフェースメソッドトレースの出力例を次に示します。

出力例

[1]                        [2]                    [3]
[HiRDB_Type4_JDBC40_Driver][JDBC Interface Entry ][PrdbStatement.executeQuery]
[HiRDB_Type4_JDBC40_Driver]                       sql=select * from pp                          [4]
[HiRDB_Type4_JDBC40_Driver][JDBC Interface Return][PrdbStatement.executeQuery]
[HiRDB_Type4_JDBC40_Driver]                       Return=JP.co.Hitachi.soft.HiRDB.JDBC.Prdb.... [5]
[HiRDB_Type4_JDBC40_Driver][JDBC Interface Entry ][PrdbResultSet.getMetaData]
[HiRDB_Type4_JDBC40_Driver][JDBC Interface Return][PrdbResultSet.getMetaData]
[HiRDB_Type4_JDBC40_Driver]                       Return=JP.co.Hitachi.soft.HiRDB.JDBC.Prdb.....

説明

[HiRDB_Type4_JDBC40_Driver]

JDBCドライバの名称

・JDBC2.0：HiRDB_Type4_JDBC_Driver

・JDBC4.0：HiRDB_Type4_JDBC40_Driver

[JDBC Interface Entry ]，[JDBC Interface Return]

[JDBC Interface Entry ]：JDBCメソッドの呼び出し

[JDBC Interface Return]：JDBCメソッドからの戻り

[XXXXX.YYYYY]

XXXXXクラスのYYYYYメソッド

select * from pp

JDBCメソッドの引数。

パスワードを示す引数については，"password=*"のように，"*"1個を出力します。

また，URLを示す引数にパスワードが含まれる場合は，パスワードを"*"1個に置き換えて出力します。

JP.co.Hitachi.soft.HiRDB.JDBC.Prdb

JDBCメソッドの戻り値。

戻り値にパスワードが含まれる場合は，パスワードを"*"1個に置き換えて出力します。

17.18　Exceptionトレースログ

トラブルシュート情報として，Exceptionトレースログを取得できます。Exceptionトレースログには，JDBCドライバ内で例外による障害が発生した際の障害要因が出力されます。

出力内容を次に示します。

例外発生時の情報（エラーメッセージなど）

例外が発生するまでの，JDBCのAPIメソッドの実行記録

この機能を使用すると，UAPから呼び出されるJDBCのAPIメソッドの情報がJDBCドライバのメモリ上に蓄積され，SQLException，BatchUpdateException，又はXAExceptionの発生を契機として，例外を投入する前に，メモリ上に蓄積された情報がファイルに出力されます。

JDBC4.0では，Exceptionトレースログで実行記録を取得するメソッドでRuntimeExceptionを検知した場合も同様の情報をファイルに出力します。

Exceptionを投入しない警告レベルの事象が発生した場合，メソッドの実行履歴，及び例外のスタックトレースを除く情報をファイルに出力します。出力情報の詳細については，「出力形式」を参照してください。

警告レベルの事象を次に示します。

事象

出力メッセージ

自動再接続処理の開始

KFPZ02445-I（AUTO_RECONNECT）

Connectoin.close時にエラー発生

KFPA11723-E，その他

KeepAlive処理

通信処理でエラー発生

KFPA11723-E，その他

不正電文受信

KFPZ03000-I（KeepAlive）

System.getProperties()でSecurityException発生

KFPZ02444-E

17.18.1　取得するメソッド，及び取得するための設定

(1)　Exceptionトレースログの取得対象メソッド

Exceptionトレースログの取得対象は，Java 2 Platform, Standard Edition, version 1.4のAPI仕様にあるパッケージjava.sqlに記述されているメソッドの呼び出しと戻りです。

クライアント環境定義PDJDBTRACELEVEL，又はシステムプロパティHiRDB_for_Java_TraceLevelで指定した値が，次の表に示すメソッドのトレース取得レベル以上の場合に，そのメソッドを取得対象とします。

なお，ResultSet.getXXXメソッド，PreparedStatement.setXXXメソッド，Connection.isClosedメソッドなど，オブジェクト内の情報を参照して返すだけのメソッドや，オブジェクト内に情報を格納するだけのメソッドは取得対象になりません。

Exceptionトレースログの取得対象であるメソッドと，そのメソッドのトレース取得レベルを次の表に示します。

表17‒126　Exceptionトレースログの取得対象であるメソッドとトレース取得レベル

クラス

メソッド

トレース取得レベル※1

付加情報

JDBC2.0

JDBC4.0

Driver

Connection connect(String url, Properties info)

1

1

−

Connection

Statement createStatement()※2

1

1

−

Statement createStatement(int resultSetType, int resultSetConcurrency)※3

1

1

−

Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)※4

1

1

−

PreparedStatement prepareStatement(String sql)※2

1

1

−

PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)※3

1

1

−

PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)※4

1

1

−

CallableStatement prepareCall(String sql)※2

1

1

−

CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency)※3

1

1

−

CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)※4

1

1

−

void setAutoCommit(boolean autoCommit)

2

2

−

void commit()

2

1

−

void rollback()

2

1

−

void close()

1

1

−

boolean isValid(int timeout)

2

1

−

DatabaseMetaData getMetaData()

2

2

−

void setHoldability(int holdability)

−

1

−

Statement

ResultSet executeQuery(String sql)

1

1

−

int executeUpdate(String sql)

1

1

−

boolean execute(String sql)

1

1

−

void addBatch(String sql)

−

1

−

int[] executeBatch()

2

1

−

void clearBatch()

−

2

−

void close()

1

1

−

boolean isClosed()

2

2

−

void cancel()

2

1

−

ResultSet getResultSet()

2

2

−

boolean getMoreResults()

−

1

−

void setMaxFieldSize(int max)

−

2

−

void setMaxRows(int max)

−

2

−

void setQueryTimeout(int seconds)

−

1

−

void setFetchSize(int rows)

−

1

−

boolean isPoolable()

2

2

−

PreparedStatement

ResultSet executeQuery()※2

2

1

[SQL]

int executeUpdate()※2

2

1

[SQL]

boolean execute()※2

2

1

[SQL]

ResultSetMetaData getMetaData()

2

2

−

void setBlob(int parameterIndex, Blob x)※6

−

2

−

CallableStatement

String getString(int parameterIndex)※6

−

2

−

long getLong(int parameterIndex)※6

−

2

−

byte[] getBytes(int parameterIndex)※6

−

2

−

Object getObject(int parameterIndex)※6

−

2

−

Blob getBlob(int parameterIndex)※6

−

2

−

String getString(String parameterName)※6

−

2

−

long getLong(String parameterName)※6

−

2

−

byte[] getBytes(String parameterName)※6

−

2

−

Object getObject(String parameterName)※6

−

2

−

Blob getBlob(String parameterName)※6

−

2

−

ResultSet

boolean next()※5

2

1

[COUNT]

boolean previous()

−

2

−

boolean absolute(int row)

2

1

−

boolean relative(int rows)

2

1

−

void beforeFirst()

2

1

−

boolean first()

2

1

−

boolean last()

2

1

−

void afterLast()

2

1

−

boolean isBeforeFirst()

2

1

−

boolean isAfterLast()

2

1

−

boolean isLast()

2

1

−

void close()※5

2

1

[COUNT]

boolean isClosed()

2

2

−

Statement getStatement()

2

2

−

ResultSetMetaData getMetaData()

2

2

−

int getHoldability()

2

2

−

String getString(int columnIndex)※6

−

2

−

long getLong(int columnIndex)※6

−

2

−

byte[] getBytes(int columnIndex)※6

−

2

−

Blob getBlob(int columnIndex)※6

−

2

−

Object getObject(int columnIndex)※6

−

2

−

InputStream getAsciiStream(int columnIndex)※6

−

2

−

Reader getCharacterStream(int columnIndex)※6

−

2

−

InputStream getBinaryStream(int columnIndex)※6

−

2

−

String getString(String columnLabel)※6

−

2

−

long getLong(String columnLabel)※6

−

2

−

Blob getBlob(String columnLabel)※6

−

2

−

Object getObject(String columnLabel)※6

−

2

−

InputStream getAsciiStream(String columnLabel)※6

−

2

−

Reader getCharacterStream(String columnLabel)※6

−

2

−

InputStream getBinaryStream(String columnLabel)※6

−

2

−

Blob

long length()※6

2

2

−

byte[] getBytes(long pos, int length)※6

2

2

−

long position(byte[] pattern, long start)※6

2

2

−

long position(Blob pattern, long start)※6

2

2

−

void free()※6

1

1

−

DatabaseMetaData

ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern)

2

2

−

ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern)

2

2

−

ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

2

2

−

ResultSet getSchemas()

2

2

−

ResultSet getCatalogs()

2

2

−

ResultSet getTableTypes()

2

2

−

ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)

2

2

−

ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern)

2

2

−

ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern)

2

2

−

ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable)

2

2

−

ResultSet getVersionColumns(String catalog, String schema, String table)

2

2

−

ResultSet getPrimaryKeys(String catalog, String schema, String table)

2

2

−

ResultSet getImportedKeys(String catalog, String schema, String table)

2

2

−

ResultSet getExportedKeys(String catalog, String schema, String table)

2

2

−

ResultSet getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable)

2

2

−

ResultSet getTypeInfo()

2

2

−

ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)

2

2

−

ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types)

2

2

−

Connection getConnection()

2

2

−

ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern)

2

2

−

ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern)

2

2

−

ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern)

2

2

−

RowIdLifetime getRowIdLifetime()

2

2

−

ResultSet getSchemas(String catalog, String schemaPattern)

2

2

−

boolean supportsStoredFunctionsUsingCallSyntax()

2

2

−

boolean autoCommitFailureClosesAllResultSets()

2

2

−

ResultSet getClientInfoProperties()

2

2

−

ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern)

2

2

−

ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern)

2

2

−

DataSource

Connection getConnection()※2

1

1

−

Connection getConnection(String username, String password)※3

1

1

−

ConnectionPool

DataSource

PooledConnection getPooledConnection()※2

1

1

−

PooledConnection getPooledConnection(String user, String password)※3

1

1

−

XADataSource

XAConnection getXAConnection()※2

1

1

−

XAConnection getXAConnection(String user,String password)※3

1

1

−

PooledConnection

Connection getConnection()

1

1

−

void close()

1

1

−

void addConnectionEventListener(ConnectionEventListener listener)

−

2

−

void removeConnectionEventListener(ConnectionEventListener listener)

−

2

−

void addStatementEventListener(StatementEventListener listener)

−

2

−

void removeStatementEventListener(StatementEventListener listener)

−

2

−

XAConnection

XAResource getXAResource()

1

1

−

XAResource

void start(Xid xid, int flags)

3

3

−

void end(Xid xid, int flags)

3

3

−

int prepare(Xid xid)

3

3

−

void commit(Xid xid, boolean onePhase)

3

3

−

void rollback(Xid xid)

3

3

−

void forget(Xid xid)

3

3

−

Xid[] recover(int flag)

3

3

−

boolean isSameRM(XAResource xares)

3

3

−

InputStream

int read()※2

2

2

−

int read(byte[] data)※3

2

2

−

int read(byte[] b, int off, int len)※4

2

2

−

PrdbConnection

int checkSession (int waittime)

−

1

−

（凡例）　−：出力しません。

注※1

トレース取得レベルが5の場合，内部呼び出しも含めてExceptionトレースログを取得します。

注※2

メソッド名として，「メソッド名(1)」と出力されます。

注※3

メソッド名として，「メソッド名(2)」と出力されます。

注※4

メソッド名として，「メソッド名(3)」と出力されます。

注※5

トレース取得レベルが1の場合，カーソルクローズ時だけ[COUNT]付加情報（next実行回数）付きでメソッド正常終了の履歴を出力します。トレース取得レベルが2以上の場合，メソッド呼び出しごとにメソッド開始・正常終了の履歴を出力し，[COUNT]付加情報は付けません。

注※6

対象がBLOB又はBINARY型で，位置付け子を使用している場合だけ，Exceptionトレースログを取得します。

(2)　Exceptionトレースログを取得するための設定

Exceptionトレースログのファイル出力先，ファイルへの出力数，メモリ内取得情報数，及びトレース取得レベルは，システムプロパティ又はクライアント環境定義で設定します。優先順位は次のとおりです。

システムプロパティ

クライアント環境定義

(a)　クライアント環境定義の設定

クライアント環境定義では，次の項目を指定します。

PDJDBFILEDIR

PDJDBFILEOUTNUM

PDJDBONMEMNUM

PDJDBTRACELEVEL

PDJDBFILESIZE

これらはJavaVMプロセスごとでの設定となるため，同一JavaVMプロセス上で接続ごとに異なる値を指定することはできません。指定した場合，最初の接続に対する指定が有効となります。

指定値の詳細は，「クライアント環境定義の設定内容」を参照してください。

なお，これらのクライアント環境定義に不正な値が指定されて，SQLExceptionを投入する際に取得するExceptionトレースログでは，これらのクライアント環境定義に値が指定されなかったものとみなされます。その場合は，次の表に示すデフォルトが仮定されます。

(b)　システムプロパティの設定

システムプロパティでは，次の表に示す項目を指定します。

表17‒127　Exceptionトレースログを取得するためのシステムプロパティの設定

項目

システムプロパティ

内容

デフォルト※

ファイル出力先

HiRDB_for_Java_FileDIR

Exceptionトレースログを出力するディレクトリを，絶対パスで指定します。Exceptionトレースログは，指定したディレクトリの直下に出力されます。

指定されたファイル出力先が存在しない，又は書き込み権限がない場合は，カレントディレクトリに出力します。

カレントディレクトリ

ファイルへの出力数

HiRDB_for_Java_FileOutNUM

1ファイルへ出力する情報数の上限を指定します。指定できる範囲は1〜50です。

実際に1ファイルへ出力する情報数の上限は，「ファイルへの出力数」×「メモリ内取得情報数」個となります。

ファイルへの出力数は，「出力形式」に示す形式2〜形式4をそれぞれ1個と数えます。

なお，ファイルには，メモリに蓄積した順番に出力されます。

また，上限値を超えてファイルに出力する場合は，2ファイルでラップアラウンドします。ファイル名は次のとおりです。

pdexc1.trc

pdexc2.trc

ただし，「出力形式」に示す形式1と形式2の間で出力先のファイルが切り替わることはありません。

HiRDB_for_Java_FileSizeプロパティが指定されている場合，HiRDB_for_Java_FileSizeプロパティの指定を優先し，この指定は無視します。

5

メモリ内取得情報数

HiRDB_for_Java_OnMemNUM

メモリ内で蓄積する情報数の上限を指定します。指定できる範囲は500〜10,000です。

なお，メモリ内取得情報は，表「Exceptionトレースログの取得対象であるメソッドとトレース取得レベル」で示したメソッド一つを1個と数えます。

また，上限値を超えて情報を蓄積しようとすると，古い情報から順に，新しい情報に上書きされます。

1,000

トレース取得レベル

HiRDB_for_Java_TraceLevel

トレース取得レベルを指定します。指定できる範囲は0〜5です。

5を指定すると，内部呼び出しを含めたすべてのトレース取得対象メソッドを取得します。

0を指定すると，Exceptionトレースログを取得しません。

1

最大ファイルサイズ

HiRDB_for_Java_FileSize

ファイルの最大サイズをバイト単位で指定します。指定できる範囲は4,096〜2,000,000,000です。

指定サイズを超えると出力先を切り替えます。

このプロパティを指定していない場合，HiRDB_for_Java_FileOutNUMプロパティによって出力先を切り替えます。

なし

注※

次のような場合に取得するExceptionトレースログでは，システムプロパティに値が指定されなかったものとみなされます。その場合はデフォルトが仮定されます。

システムプロパティに不正な値が指定され，データベース接続時にSQLExceptionを投入した場合

Java仮想マシンが，セキュリティマネジャによってJDBCドライバに対するシステムプロパティの受け渡しを拒否した場合

Java仮想マシンの，最初の接続が確立する前

17.18.2　出力形式

Exceptionトレースログには，次の4種類の形式があります。

形式1：ヘッダ部分

JDBC2.0の場合：

[AA....AA] HiRDB_Type4_JDBC_Driver BB-CC

JDBC4.0の場合：

[AA....AA] HiRDB_Type4_JDBC40_Driver BB-CC

形式2：メソッドの実行履歴（メソッドの実行開始）

AAAAAAAAAAAAAAAAAAAAAAA BB....BB:[C][DD....DD]
                        ConnectionID(EE....EE) : SID(FF....FF)
                        GG....GG
                        II....II

形式3：メソッドの実行履歴（メソッドの正常終了）

AAAAAAAAAAAAAAAAAAAAAAA BB....BB:[C][DD....DD]
                        ConnectionID(EE....EE) : SID(FF....FF)
                        HH....HH
                        II....II

形式4：Exceptionトレースログの出力契機

AAAAAAAAAAAAAAAAAAAAAAA BB....BB:JJ....JJ:
KK....KK

形式2及び形式3は，時系列順に，メソッドを実行した分だけ繰り返して出力されます。

Exceptionを投入しない警告レベルの事象が発生した場合では，形式2及び形式3の情報は出力しません。

(1)　形式1の変数の説明

AA....AA：

出力情報の通番です。

通番は1回の出力（出力エラーによる失敗も含む）ごとに1増加します。2,147,483,647を超えると，0に戻ります。

BB：

JDBCドライバのバージョンです。

CC：

JDBCドライバのリビジョンです。

(2)　形式2〜形式4の変数の説明

AAAAAAAAAAAAAAAAAAAAAAA：

Exceptionトレースログの取得日時を，次の形式で出力します。それぞれの変数には，すべて0〜9の値が入ります。

YYYY/MM/DD hh:mm:ss.sss

YYYY：年（西暦）

MM：月

DD：月

hh：時（24時間形式）

mm：分

ss.sss：秒（小数点以下3けたを含みます）

BB....BB：

メソッドを実行したスレッド識別情報を，次の形式で出力します。

Thread[aa....aa]@bb....bb@cc....cc

aa....aa：スレッド名，優先順位，スレッドグループ名を含む，スレッド情報です。形式はJava仮想マシンによって決まります。

bb....bb：オブジェクトのハッシュコードです。形式はJava仮想マシンによって決まります。

cc....cc：スレッドIDです。JDBC4.0版でだけ付加します。

C：

メソッドの呼び出し識別情報です。

E：メソッドが開始したときの履歴であることを示します。

R：メソッドが正常終了したときの履歴であることを示します。

DD....DD：

オブジェクト識別子及びメソッド名を，次の形式で出力します。

aa....aa.bb....bb

aa....aa：オブジェクト識別子です（最大32文字）。

形式はJava仮想マシンによって決まります。

bb....bb：メソッド名です。

EE....EE：

接続IDを次の形式で出力します。

aa....aa:bb....bb:cc....cc

aa....aa：フロントエンドサーバ名又はシングルサーバ名です（最大32文字）。

取得できない場合，"*"を出力します。

bb....bb：aa....aaで示すサーバの接続通番です（最大10文字）。

取得できない場合，"*"を出力します。

cc....cc：aa....aaで示すサーバのプロセスIDです（最大10文字）。

取得できない場合，"*"を出力します。

FF....FF：

セクションIDを出力します（最大4文字）。

GG....GG：

メソッドの引数を次の形式で出力します。引数がないメソッドでは出力しません。

aa....aa=bb....bb
aa....aa=bb....bb
        ：
aa....aa=bb....bb

aa....aa：引数の名称です。

bb....bb：引数の内容です（最大256文字）。

参照型値の場合，形式はオブジェクトによって決まります。

なお，次のメソッドの引数passwordについては，bb....bbに"*"1個を出力します。

DataSourceクラスのgetConnection(String username, String password)

ConnectionPoolDataSourceクラスのgetPooledConnection(String username, String password)

XADataSourceのgetXAConnection(String username, String password)

また，Driverクラスのconnect(String url,Properties info)の次の指定値については，"*"1個に置き換えて出力します。

引数info中のプロパティpassword

引数info中のプロパティHiRDB_for_Java_ENV_VARIABLES

引数url中のPASSWORD

HH....HH：

メソッドの戻り値を次の形式で出力します。

Return=aa....aa

aa....aa：引数の名称です。

戻り値がないメソッドでは出力しません。戻り値が参照型値の場合，形式はJava仮想マシンによって決まります。

II....II：

メソッドの動作に関係する引数・戻り値以外の情報を次の形式で出力します。

[aa....aa]=bb....bb

aa....aa：付加情報の種別です。

bb....bb：付加情報の内容です。

付加情報の種別と内容を次の表に示します。

種別

内容

[SQL]

SQL文

[COUNT]

ResultSet.nextメソッドの呼び出し回数

JJ....JJ：

ログの出力契機を示す次のどちらかの文字列を出力します。

Exception投入時

Exception

Exceptionを投入しない警告レベルのメッセージ出力時

Warning

KK....KK：

トラブルシュート情報を，次のどちらかの形式で出力します。

Exception投入時

ExceptionClass: aa....aa
UapEnvironment: bb....bb
Message: cc....cc
ErrorInfo: kk....kk
ErrorCode: dd....dd
SQLState: eeeee
UpdateCounts: ff....ff, ..<省略>.. ,ff....ff
SocketInfo: ll....ll
Etc.: gg....gg, hh....hh, iiii
URLInfo：n....n
RootAP：o....o
PropertyInfo：
p....p
ExtendedSQLErrorInfo:
mm....mm
jj....jj

Exceptionを投入しない警告レベルのメッセージ出力

UapEnvironment: b....b
Message: c....c
ErrorInfo: k....k
SocketInfo: L....L
Etc.: gg....gg, hh....hh, iiii
URLInfo：n....n
RootAP：o....o
PropertyInfo：
p....p

aa....aa：投入した例外オブジェクトの実行クラス名です。

bb....bb：例外オブジェクトの接続で使用しているクライアント環境定義を，次の形式で出力します。出力しない場合は，"*"1個に置き換えて出力します。

yy....yy (zz....zz), ..<省略>.., yy....yy (zz....zz)

yy....yy：先頭の"PD"を省略した，クライアント環境定義の名称です。次のクライアント環境定義が出力対象となっています。

項番

クライアント環境定義

1

PDUSER

2

PDNAMEPORT

3

PDCWAITTIME

4

PDSWAITTIME

5

PDHOST

6

PDFESHOST

7

PDSERVICEGRP

8

PDSWATCHTIME

9

PDSERVICEPORT

10

PDSRVTYPE

11

PDCLTRCVPORT

12

PDCLTRCVADDR

13

PDFESGRP

zz....zz：クライアント環境定義の内容です。なお，PDUSERのパスワード部分は出力しません。

cc....cc：例外オブジェクトが持つメッセージです。

dd....dd：SQLCODEのエラーコード（XAExceptionの場合，XAExceptionオブジェクトのフィールドerrorCodeが示すエラーコード）です（最大11文字）。

投入した例外オブジェクトの実行クラスが次のクラス又はサブクラスの場合に出力します。

SQLException

XAException

eeeee：SQLSTATEを出力します（5文字）。

投入した例外オブジェクトの実行クラスがSQLException，又はSQLExceptionのサブクラスの場合に出力します。

ff....ff：この例外が発生するまでに正常に実行されたバッチ更新の，各更新文の更新行数を出力します（最大11文字）。

例外オブジェクトの実行クラスがBatchUpdateExceptionの場合に出力します。

更新行数が取得できない場合，"*"を出力します。

gg....gg：SQLカウンタを出力します（最大6文字）。

SQLトレース機能によって出力したトレース情報との対応付けに使用できます。

SQLカウンタが取得できない場合，"*"を出力します。

hh....hh：HiRDBサーバでエラーが発生している場合，HiRDBサーバの障害情報を出力します（最大22文字）。

障害情報は，保守員が使用します。

HiRDBサーバでエラーが発生していない場合，"*"を出力します。

iiii：HiRDBサーバでエラーが発生している場合，JDBCドライバがHiRDBサーバに対して行った要求の種別（オペレーションコード）を出力します。

HiRDBサーバでエラーが発生していない場合，"****"を出力します。

jj....jj：例外投入メソッドを基点としたスタックトレースを出力します。

形式はJava仮想マシンによって決まります。

kk....kk：トラブルシュート用の付加情報を，メッセージの形式で出力します。

ll....ll：例外が発生したオブジェクトの接続で使用しているソケット情報を，次の形式で出力します。

aa....aa(bb....bb), ....省略...., aa....aa(bb....bb)

ソケット情報の内容を次に示します。

ソケット情報の名称（aa....aa）

ソケット情報の内容（bb....bb）

LocalAddress

ローカルのIPアドレス

LocalPort

ローカルのポート番号

RemoteAddress

リモートのIPアドレス

RemotePort

リモートのポート番号

SendBufferSize

送信バッファサイズ

RecvBufferSize

受信バッファサイズ

SoLinger

SO_LINGER

KeepAlive

SO_KEEPALIVE

ReuseAddr

SO_REUSEADDR

注　内容が設定されていないソケット情報については，空括弧( )を出力します。また，ソケット情報が一つも設定されていない場合は，ll....llの項目を出力しません。

mm....mm：拡張SQLエラー情報を出力します（JDBC4.0の場合だけです）。

出力内容については，「拡張SQLエラー情報出力機能」を参照してください。拡張SQLエラー情報出力の設定がされていない場合は，何も出力しません。

nn....nn：DriverManegerのgetConnectionメソッドで指定したURL文字列を出力します。

URLでPASSWORDを指定している場合，PASSWORD指定値を"*"1個に置き換えて出力します。

DataSourceを使用して取得したConnectionの場合は何も出力しません。

oo....oo：Cosminexusを使用している場合，ルートアプリケーション情報を出力します。

ルートアプリケーション情報を取得できない（当該製品ではない，又はルートアプリケーション情報の適用範囲外から呼び出された）場合，何も出力しません。

ルートアプリケーション情報については，当該製品のマニュアルを参照してください。

pp....pp：JDBC4.0の場合だけ出力します。Type4 JDBCドライバ固有の各種設定項目（プロパティ，URL項目，及びDataSourceのsetXXXメソッド）について，明示的に指定されたものを次の形式で出力します。

[a....a]b....b=c....c
[a....a]b....b=c....c
　　　：
[a....a]b....b=c....c

各要素の意味を次に示します。

aa....aa：次に示す設定方法

設定方法

出力文字列

システムプロパティ

SPR

ユーザプロパティ

UPR

URL

URL

DataSource又はDriverManegerのsetXXXメソッド

MTD

クライアント環境定義

ENV

b....b：設定項目名

c....c：設定値

一つの項目を複数の方法で設定した場合，それぞれについて設定情報を出力します。

17.18.3　出力例と解析方法

(1)　出力例

Exceptionトレースログの出力例を次に示します。

[1] HiRDB_Type4_JDBC40_Driver 09-50
2006/07/06 23:07:09.129 Thread[main,5,main]@1259414@1:[E][PrdbConnection@82c01f.createStatement(1)]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:09.160 Thread[main,5,main]@1259414@1:[R][PrdbConnection@82c01f.createStatement(1)]
                        ConnectionID(sds:23:20484) : SID(0)
                        Return=JP.co.Hitachi.soft.HiRDB.JDBC.PrdbStatement@1e4cbc4
2006/07/06 23:07:09.160 Thread[main,5,main]@1259414@1:[E][PrdbStatement@1e4cbc4.execute]
                        ConnectionID(sds:23:20484) : SID(0)
                        sql=DELETE FROM SEINO_TABLE
2006/07/06 23:07:14.285 Thread[main,5,main]@1259414@1:[E][PrdbConnection@82c01f.commit]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:14.301 Thread[main,5,main]@1259414@1:[R][PrdbConnection@82c01f.commit]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:14.301 Thread[main,5,main]@1259414@1:[R][PrdbStatement@1e4cbc4.execute]
                        ConnectionID(sds:23:20484) : SID(1)
                        Return=false
2006/07/06 23:07:14.301 Thread[main,5,main]@1259414@1:[E][PrdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(sds:23:20484) : SID(0)
                        sql=INSERT INTO SEINO_TABLE VALUES(?, ?)
2006/07/06 23:07:14.348 Thread[main,5,main]@1259414@1:[R][PrdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(sds:23:20484) : SID(0)
                        Return=JP.co.Hitachi.soft.HiRDB.JDBC.PrdbPreparedStatement@15d56d5
2006/07/06 23:07:26.567 Thread[main,5,main]@1259414@1:[E][PrdbConnection@82c01f.commit]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:26.567 Thread[main,5,main]@1259414@1:[R][PrdbConnection@82c01f.commit]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:26.567 Thread[main,5,main]@1259414@1:[E][PrdbStatement@1e4cbc4.executeQuery]
                        ConnectionID(sds:23:20484) : SID(0)
                        sql=SELECT * FROM SEINO_TABLE
2006/07/06 23:07:26.676 Thread[main,5,main]@1259414@1:[R][PrdbStatement@1e4cbc4.executeQuery]
                        ConnectionID(sds:23:20484) : SID(1)
                        Return=JP.co.Hitachi.soft.HiRDB.JDBC.PrdbResultSet@3eca90
2006/07/06 23:07:28.332 Thread[main,5,main]@1259414@1:[E][PrdbResultSet@3eca90.close]
                        ConnectionID(sds:23:20484) : SID(1)
2006/07/06 23:07:28.332 Thread[main,5,main]@1259414@1:[E][PrdbConnection@82c01f.commit]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:28.332 Thread[main,5,main]@1259414@1:[R][PrdbConnection@82c01f.commit]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:28.332 Thread[main,5,main]@1259414@1:[R][PrdbResultSet@3eca90.close]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:28.332 Thread[Thread-0,5,main]@30090737@2:[E][PrdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(sds:23:20484) : SID(0)
                        sql=SELECT * FROM SEINO_TABLE
2006/07/06 23:07:28.332 Thread[Thread-0,5,main]@30090737@2:[R][PrdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(sds:23:20484) : SID(0)
                        Return=JP.co.Hitachi.soft.HiRDB.JDBC.PrdbPreparedStatement@2808b3
2006/07/06 23:07:28.348 Thread[Thread-1,5,main]@5462872@3:[E][PrdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(sds:23:20484) : SID(0)
                        sql=DELETE FROM SEINO_TABLE WHERE I1=?
2006/07/06 23:07:28.358 Thread[Thread-1,5,main]@5462872@3:[E][PrdbConnection@82c01f.commit]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:29.672 Thread[Thread-1,5,main]@5462872@3:[R][PrdbConnection@82c01f.commit]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:30.098 Thread[Thread-1,5,main]@5462872@3:[R][PrdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(sds:23:20484) : SID(0)
                        Return=JP.co.Hitachi.soft.HiRDB.JDBC.PrdbPreparedStatement@922804
2006/07/06 23:07:30.332 Thread[Thread-2,5,main]@25253977@4:[E][PrdbConnection@82c01f.rollback(1)]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:42.098 Thread[Thread-2,5,main]@25253977@4:[R][PrdbConnection@82c01f.rollback(1)]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:42.098 Thread[Thread-2,5,main]@25253977@4:[E][PrdbConnection@82c01f.close]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:42.098 Thread[Thread-2,5,main]@25253977@4:[R][PrdbConnection@82c01f.close]
                        ConnectionID(sds:23:20484) : SID(0)
2006/07/06 23:07:42.535 Thread[Thread-1,5,main]@5462872:Exception:
ExceptionClass: SQLException
UapEnvironment: *
Message: KFPJ20006-E Connection closed[PrdbPreparedStatement.setInt]
ErrorCode: -1020006
SQLState: R2400
Etc.: *,*,****
URLInfo: jdbc:hitachi:hirdb://DBHOST=localhost,DBID=22200, ENCODELANG=UTF-8
RootAP：127.0.0.1/1234/0x0000000000000001
PropertyInfo：
  [URL]ENCODELANG=UTF-8
java.sql.SQLException: KFPJ20006-E Connection closed[PrdbPreparedStatement.setInt]
at JP.co.Hitachi.soft.HiRDB.JDBC.JdbMakeException.generateSQLException(JdbMakeException.java:31)
at JP.co.Hitachi.soft.HiRDB.JDBC.PrdbStatement.generateClosedSQLException(PrdbStatement.java:3005)
at JP.co.Hitachi.soft.HiRDB.JDBC.PrdbPreparedStatement.setInt(PrdbPreparedStatement.java:1170)
at Exception1.run(ExceptionTraceSample.java:57)
[2] HiRDB_Type4_JDBC_Driver 09-50
2006/07/06 23:07:25.863 Thread[Thread-5,5,main]@24431647@5:Warning:
UapEnvironment: USER(USER1), NAMEPORT(22200), CWAITTIME(0), SWAITTIME(600), HOST(localhost), FESHOST( ), SERVICEGRP(sds), SWATCHTIME( ), SERVICEPORT( ), SRVTYPE(WS), CLTRCVPORT( ), CLTRCVADDR( ), FESGRP( )
Message: KFPZ02445-I Client information, Type=Reconnect,inf=AUTO_RECONNECT,number=5,interval=5 [PrdbStatement.prepare]
Etc.: 4,sqapyac1.c(651),SET
URLInfo: jdbc:hitachi:hirdb://DBHOST=localhost,DBID=22200, ENCODELANG=UTF-8
RootAP：127.0.0.1/1234/0x0000000000000001
PropertyInfo：
  [URL]ENCODELANG=UTF-8

(2)　解析方法

Exceptionトレースログの解析方法について説明します。Exceptionトレースログはテキストエディタなどで参照できます。

ここでは，「出力例」のExceptionトレースログを解析する例を示します。

解析例

調査対象の例外を含む通番の情報を抜き出します。

情報をThread識別情報で分類し，スレッドごとに分割します。

取得時刻によって，情報を時系列に並べます。

次の表に示すようになります。

表17‒128　Exceptionトレースログを時系列に並べた例

日時

スレッド1

スレッド2

スレッド3

スレッド4

Thread[main,5,main]

@1259414@1

Thread[Thread-0,5,main]

@30090737@2

Thread[Thread-1,5,main]

@5462872@3

Thread[Thread-2,5,main]

@25253977@4

2006/07/06

23:07:09.129

PrdbConnection

@82c01f.createStatement(1)

2006/07/06

23:07:09.160

PrdbStatement

@1e4cbc4.execute

2006/07/06

23:07:14.285

PrdbConnection

@82c01f.commit

2006/07/06

23:07:14.301

PrdbConnection

@82c01f.prepareStatement(1)

2006/07/06

23:07:26.567

PrdbConnection

@82c01f.commit

2006/07/06

23:07:26.567

PrdbStatement

@1e4cbc4.executeQuery

2006/07/06

23:07:26.567

PrdbStatement

@1e4cbc4.execute

2006/07/06

23:07:28.332

PrdbResultSet

@3eca90.close

PrdbConnection

@82c01f.prepareStatement(1)

2006/07/06

23:07:28.332

PrdbConnection

@82c01f.commit

2006/07/06

23:07:28.348

PrdbConnection

@82c01f.prepareStatement(1)

2006/07/06

23:07:28.358

PrdbConnection

@82c01f.commit

2006/07/06

23:07:30.332

PrdbConnection

@82c01f.rollback

2006/07/06

23:07:42.098

PrdbConnection

@82c01f.close

2006/07/06

23:07:42.535

SQLException発生

KFPJ20006-E Connection closed

Exceptionのエラーの内容を確認します。

2006/07/06 23:07:42.535のスレッド3でSQLExceptionが発生し，Statementオブジェクト又はConnectionオブジェクトが既にクローズされていることが分かります。

時系列でオブジェクトの操作を確認します。

次のスレッドのConnectionオブジェクトのオブジェクトIDが同じであることから，四つのスレッドが同一のコネクションで処理されていることが分かります。

2006/07/06 23:07:09.129のスレッド1

2006/07/06 23:07:28.332のスレッド2

2006/07/06 23:07:28.348のスレッド3

2006/07/06 23:07:30.332のスレッド4

エラーの原因である箇所を探します。

四つのスレッドが同一のコネクションであることは分かったので，Statement.closeメソッド又はConnection.closeメソッドを実行している箇所を探すと，スレッド4が2006/07/06 23:07:42.098でConnection.closeメソッドを実行していることが分かります。このことから，2006/07/06 23:07:42.535のスレッド3で発生したSQLExceptionの原因は，スレッド4が2006/07/06 23:07:42.098でConnection.closeメソッドを実行したことであると分かります。

17.18.4　必要となるメモリ所要量及びファイルサイズ

(1)　メモリ所要量

Exceptionトレースログを取得するためのメモリ所要量は，次に示す計算式で求められます。

計算式

↑360×n÷1024↑　　（単位：キロバイト）

変数の説明

n：メモリ内取得情報数

(2)　必要となるファイルサイズ

Exceptionトレースログのファイルサイズの上限はクライアント環境定義PDJDBFILESIZE，又はシステムプロパティHiRDB_for_Java_FileSizeで指定したサイズ（単位：バイト）となります。これらのクライアント環境定義，及びシステムプロパティを指定していない場合，Exceptionトレースログを取得するためのファイルサイズの概算は，次に示す計算式で求められます。

計算式

↑（180×n×m＋a×m）÷1024↑＋1　　（単位：キロバイト）

変数の説明

a：拡張SQLエラー情報長

241＋SQL文長＋b

拡張SQLエラー情報長は次のどちらかに該当する場合に加算します。

クライアント環境定義PDUAPEXERLOGUSEにYESを指定した場合

クライアント環境定義PDUAPEXERLOGUSEを省略し，かつシステム定義pd_uap_exerror_log_useがYES，又はAUTOの場合

b：パラメタ情報長

 d
Σ（41＋↑c÷16↑×83）
i=1

パラメタ情報長は，クライアント環境定義PDUAPEXERLOGPRMSZに0以外，又はシステム定義pd_uap_exerror_log_param_sizeに0以外を指定した場合に加算してください。

c：パラメタ情報の最大データ長

クライアント環境定義PDUAPEXERLOGPRMSZ，又はシステム定義pd_uap_exerror_log_param_sizeの値になります。

cの値は次のように決定してください。

クライアント環境定義PDUAPEXERLOGPRMSZに0以外を指定した場合，PDUAPEXERLOGPRMSZに指定した値がcの値になります。

クライアント環境定義PDUAPEXERLOGPRMSZを省略し，かつシステム定義pd_uap_exerror_log_param_sizeに0以外を指定した場合，pd_uap_exerror_log_param_sizeに指定した値がcの値になります。

d：入出力パラメタ数

n：メモリ内取得情報数※

m：ファイル出力情報数※

注※　詳細については，「Exceptionトレースログを取得するためのシステムプロパティの設定」を参照してください。

17.18.5　注意事項

(1)　システムプロパティとクライアント環境定義の設定が異なる場合

システムプロパティとクライアント環境定義の設定が異なる場合，最初のHiRDB接続確立前にJDBCドライバのメモリに蓄積したメソッド実行履歴を，次の表に示すように移行します。

表17‒129　JDBCドライバのメモリに蓄積したメソッド実行履歴の移行

項目

システムプロパティとクライアント環境定義の関係

移行時の動作

メモリ内取得情報数

HiRDB_for_Java_OnMemNUM < PDJDBONMEMNUM

PDJDBONMEMNUMの指定に基づいてメソッド実行履歴の蓄積用メモリを再確保し，それまでに蓄積した実行履歴を再確保した領域にコピーします。

ただし，PDJDBTRACELEVELの指定が0の場合はメモリの再確保はしません。

HiRDB_for_Java_OnMemNUM > PDJDBONMEMNUM

PDJDBONMEMNUMの指定に基づいてメソッド実行履歴の蓄積用メモリを再確保します。それまでに蓄積した実行履歴のうち，再確保した領域に格納できない情報を破棄して，再確保領域にコピーします。

ただし，PDJDBTRACELEVELの指定が0の場合はメモリの再確保はしません。

トレース取得レベル

HiRDB_for_Java_TraceLevel < PDJDBTRACELEVEL

それまでに蓄積した実行履歴をそのまま移行します。

HiRDB_for_Java_TraceLevel > PDJDBTRACELEVEL

PDJDBTRACELEVELの指定が1以上の場合，それまでに蓄積した実行履歴をそのまま移行します。PDJDBTRACELEVELで指定したトレース取得レベルでは取得対象外になっているメソッドの実行履歴についても，そのまま移行します。

PDJDBTRACELEVELの指定が0の場合は，それまでに蓄積した実行履歴を蓄積用メモリごと破棄します。

(2)　Java仮想マシン起動後の最初の出力

Java仮想マシン起動後，最初にファイルにExceptionトレースログを出力する場合は，更新日時が古い方のファイルに出力されます。同じ場合は，pdexc1.trcに出力されます。

(3)　ファイル出力先の指定

複数のプロセスからExceptionトレースログを取得する場合，同じファイル出力先を指定していると，同一ファイルに異なるプロセスのトレースが出力されます。プロセスごとにトレースを取得する場合は，プロセスごとに異なるファイル出力先を指定してください。

JDBCドライバは，Java仮想マシンの機能を通じてOSが提供するファイルシステム上にログファイルを作成します。そのため，次の点については，使用するJava仮想マシン及びファイルシステムに依存します。

絶対パス名の接頭辞

パスの区切り文字

出力先ファイル（絶対パス）の最大文字数

1ファイル当たりのサイズ

(4)　エラー発生時の処理

ファイルの作成や出力に失敗しても，Exceptionトレースログには情報が出力されません。また，エラーメッセージがUAPに返されたり，ファイル出力をリトライすることもありません。

(5)　文字コード

Exceptionトレースログは，使用するJava仮想マシンのデフォルトの変換文字セットで出力されます。

17.19　不正電文トレース

サーバから不正電文を受信した場合に，不正電文トレースを取得します。

次のどれかのエラーが発生した場合，不正電文トレースファイルを出力することがあります。

KFPA11720-E

KFPA11722-E（reason=INVALID DATA）

KFPA11723-E（reason=HiRDB DATA ERROR）

KFPA11733-E

KFPA11735-E

17.19.1　不正電文トレースを取得するための設定

不正電文トレースのファイル出力先，ファイルへの出力数，ファイル出力電文長は，システムプロパティ又はクライアント環境定義で設定します。優先順位は次のとおりです。

システムプロパティ

クライアント環境定義

JavaVM起動後の最初の接続が確立するまでは，クライアント環境定義の指定は有効となりません。

(1)　クライアント環境定義の設定

クライアント環境定義では，ファイル出力先として次の項目を指定します。

PDJDBFILEDIR

PDCLTPATH

PDJDBFILEDIRとPDCLTPATHを共に指定した場合，PDJDBFILEDIRの指定が有効となります。

接続ごとに異なる値を指定した場合，最初の接続に対する指定が有効となります。

指定値の詳細は，「クライアント環境定義の設定内容」を参照してください。

(2)　システムプロパティの設定

システムプロパティでは，次の表に示す項目を指定します。

表17‒130　不正電文トレースを取得するためのシステムプロパティの設定

項目

システムプロパティ

内容

デフォルト

ファイル出力先

HiRDB_for_Java_FileDIR

不正電文トレースを出力するディレクトリを，絶対パスで指定します。不正電文トレースは，指定したディレクトリの直下に出力されます。

指定したファイル出力先が存在しない，又は書き込み権限がない場合は，カレントディレクトリに出力されます。

カレントディレクトリ

ファイルへの出力数

HiRDB_for_Java_DataErrOutNum

1ファイルに出力する不正電文の個数の上限を指定します。指定できる範囲は50〜2147483647です。範囲外の値を指定した場合，デフォルトが仮定されます。

また，上限値を超えてファイルに出力する場合は，2ファイルでラップアラウンドします。

50

ファイル出力電文長

HiRDB_for_Java_DataErrSize

出力する送信電文，受信電文の最大長(バイト)を指定します。指定できる範囲は1024〜2147483647です。範囲外の値を指定した場合，デフォルトが仮定されます。

電文のこの指定値を超える部分については，不正電文トレースに出力しません。

1024

Java仮想マシンが，セキュリティマネジャによってJDBCドライバに対するシステムプロパティの受け渡しを拒否した場合，デフォルトが仮定されます。

17.19.2　ファイル名

不正電文トレースファイルのファイル名はpdjdataerr1.trc又はpdjdataerr2.trcとなります。

17.19.3　必要となるファイルサイズ

不正電文トレースファイルの１ファイル当たりの最大サイズは，次に示す計算式で求められます。

計算式

((↑len÷16↑×76)×2+1024)×num　　（単位：バイト）

変数の説明

len：システムプロパティHiRDB_for_Java_DataErrSize

num：システムプロパティHiRDB_for_Java_DataErrOutNum

17.20　JDBCドライバを使用したUAP例

JDBCドライバを使用したUAP例を次に示します。

指定した条件と一致する行を表示させるSQL文を実行します。SQL文のエラー判定をして，エラーがある場合はエラー情報を取得します。

import java.sql.*;
import java.io.*;
import java.util.Properties;

public class SAMPLE {

    public static void main(String[] args) {

        //接続オブジェクト変数
        String url = "jdbc:hitachi:hirdb://DBID=22200,DBHOST=host1";
        String user = "USER1";
        String passwd = "USER1";
        String driver = "JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver";
        try {
            Class.forName(driver);
        }catch(Exception e){e.printStackTrace();return;}

        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        // *** 環境変数 ***
        java.util.Properties info = new java.util.Properties();
        info.setProperty("user",user);
        info.setProperty("password",passwd);
        info.setProperty("HiRDB_for_Java_ENV_VARIABLES",
                     "PDCLTPATH=C:¥¥tmp;PDSQLTRACE=0;PDPRMTRC=INOUT;");
        // ************

        //Driverの登録及びロード
        System.setProperty("jdbc.drivers",
                           "JP.co.Hitachi.soft.HiRDB.JDBC.HiRDBDriver");

        //環境構築
        try {
            // 接続  ..................................................1
            con = DriverManager.getConnection(url,info);

            // *********************************************
            // SAMPLE1(C1 INT,C2 INT,C3 VARCHAR(30))の検索例  .........2
            // *********************************************
            // PreparedStatement取得
            pstmt = con.prepareStatement
                            ("SELECT C2,C3 FROM SAMPLE1 WHERE C1 = ? ");
            // ?パラメタの設定(C1=200)
            pstmt.setInt(1,200);
            // ResultSet取得
            rs = pstmt.executeQuery();
            int cnt=1;
            System.out.println("**** 検索実行 ****");
            while(rs.next()){
                System.out.println("**** "+cnt+"行目検索 ***");
                // C2データの取得&表示
                int i_data = rs.getInt(1);
                System.out.println("C2="+i_data);
                // C3データの取得&表示
                String c_data = rs.getString(2);
                System.out.println("C3="+c_data);
                cnt++;
            }
            // ResultSetの解放
            rs.close();
            // PreparedStatementの解放
            pstmt.close();
            // 切断  ..................................................3
            con.close();
            }

        catch(SQLException e){  .......................................4
            // エラー情報出力
            e.printStackTrace();
            // 個別情報は以下の処理で取得
            // SQLSTATEの出力
            System.out.println("SQLSTATE=" + e.getSQLState());
            // SQLCODEの出力
            System.out.println("SQLCODE=" + e.getErrorCode());
            // SQLERRM(SQLメッセージ)の出力
            System.out.println("SQLERRM=" + e.getMessage());
            return;
        }
    }
}

[説明]

getConnectionメソッドを使用してHiRDBへ接続します。

指定した条件と一致する行を表示させるSQL文を実行します。

closeメソッドを使用してHiRDBから切断します。

エラーになった場合はSQLExceptionを返し，エラー情報を出力します。

17.21　JDBCドライバを使用した場合のメモリの容量見積もり

JDBCドライバが使用するJavaヒープの容量見積もりについて説明します。

17.21.1　Connectionオブジェクトの容量見積もり

Connectionオブジェクトの容量見積もりの計算式を次に示します。

計算式（32ビットモードの場合）

Connectionオブジェクトの容量＝
　70000＋（11000＋送信バッファ長＋受信バッファ長＋不正電文トレース出力電文長）×Connectionインスタンス数
　　（単位：バイト）

計算式（64ビットモードの場合）

Connectionオブジェクトの容量＝
　304000＋（14000＋送信バッファ長＋受信バッファ長＋不正電文トレース出力電文長）×Connectionインスタンス数
　　（単位：バイト）

(1)　送信バッファ長

送信バッファ長は，次に示す計算式から求めてください。複数のSQL文を実行する場合，SQL文ごとに送信バッファ長を求め，最大値を使用します。

送信バッファ長＝
　MAX（A，
　　　↑（240＋SQL文長＋ユーザ付加情報長）÷4096↑×4096，
　　　↑（240＋入力パラメタ情報長＋出力パラメタ情報長
　　　＋ユーザ付加情報長）÷4096↑×4096）

A：次のどちらかになります。

次のすべての条件を満たす場合：SEND_BUFFER_SIZEの指定値×1024

コネクションプーリング（ConnectionPoolDataSource又はXADataSourceを使用した接続）を使用している

SEND_BUFFER_SIZE（システムプロパティHiRDB_for_Java_SEND_BUFFER_SIZE，又はDataSource系インタフェースのsetSendBufferSizeメソッド）に0以外を指定している

上記以外の場合：32768

SQL文長：SQL文（String）をHiRDBサーバの文字コードに変換した長さ

ユーザ付加情報長：ユーザ付加情報1，2，3の長さの合計

Connection.setHiRDB_Audit_Infoを使用する場合に加算してください。

ユーザ付加情報1：次に示す計算式から求めてください。

16＋ユーザ付加情報1（String）をHiRDBサーバの文字コードに変換した長さ

ユーザ付加情報2：次に示す計算式から求めてください。

16＋ユーザ付加情報2（String）をHiRDBサーバの文字コードに変換した長さ

ユーザ付加情報3：次に示す計算式から求めてください。

16＋ユーザ付加情報3（String）をHiRDBサーバの文字コードに変換した長さ

入力パラメタ情報長：入力パラメタがある場合に次に示す計算式から求めて加算してください。

　 入力パラメタ数
24 ＋　Σ　（16＋入力データ長i ）
　　　i=1

入力パラメタ数：次に示します。

オブジェクト

入力パラメタ数

PreparedStatement

?パラメタ数

CallableStatement

INパラメタ及びINOUTパラメタ数

入力データ長：setXXXメソッドで設定したデータの実長

setStringメソッドで設定した場合はHiRDBサーバの文字コードに変換した長さです。

出力パラメタ情報長：検索系SQLの実行，又はストアドプロシジャを実行してOUTパラメタ又はINOUTパラメタ値を取得する場合に次に示す計算式から求めて加算してください。

24＋16×出力パラメタ数

出力パラメタ数：検索系SQLを実行する場合は検索列数です。ストアドプロシジャを実行する場合はOUTパラメタ及びINOUTパラメタの合計数です。

(2)　受信バッファ長

受信バッファ長は，次に示す計算式から求めてください。複数のSQL文を実行する場合，SQL文ごとに受信バッファ長を求め，最大値を使用します。

受信バッファ長＝
　MAX（A，
　　　↑（240＋52×（入力パラメタ数＋出力パラメタ数））÷4096↑×4096，
　　　（↑（240＋位置付け子機能によるアクセス時の出力データ長）÷4096↑×4096）※）

注※

次のどちらかの指定によって，位置付け子機能を使用してアクセスする場合に求めてください。

DriverManager.getConnectionの引数のurl，又はユーザプロパティのLONGVARBINARY_ACCESSでLOCATORを指定

DataSource系インタフェースのsetLONGVARBINARY_AccessメソッドでLOCATORを指定

A：次のどちらかになります。

次のすべての条件を満たす場合：RECEIVE_BUFFER_SIZEの指定値×1024

コネクションプーリング（ConnectionPoolDataSource又はXADataSourceを使用した接続）を使用している

RECEIVE_BUFFER_SIZE（システムプロパティHiRDB_for_Java_RECEIVE_BUFFER_SIZE，又はDataSource系インタフェースのsetReceiveBufferSizeメソッド）に0以外を指定している

上記以外の場合：32768

入力パラメタ数：次に示します。

オブジェクト

入力パラメタ数

Statement

0

PreparedStatement

?パラメタ数

CallableStatement

INパラメタ及びINOUTパラメタ数

出力パラメタ数：求め方は，送信バッファ長の出力パラメタ数と同じです。

位置付け子機能によるアクセス時の出力データ長：次のどちらかの値となります。

HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZEに0以外を指定している場合

次に示す計算式から求めてください。

HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZE指定値×1024

HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZEに0を指定，又は省略している場合

BLOB又はBINARY型の列に格納されているデータの実長

(3)　不正電文トレース出力電文長

HiRDB_for_Java_DataErrSize指定値

詳細については「不正電文トレースを取得するためのシステムプロパティの設定」を参照してください。

17.21.2　Statementオブジェクトの容量見積もり

Statementオブジェクトの容量見積もりの計算式を次に示します。

計算式（32ビットモードの場合）

Statementオブジェクトの容量＝
　38000＋（2000＋検索結果格納領域長）×Statementインスタンス数　（単位：バイト）

計算式（64ビットモードの場合）

Statementオブジェクトの容量＝
　38000＋（2100＋検索結果格納領域長）×Statementインスタンス数　（単位：バイト）

検索結果格納領域長：検索系SQLでない場合は0となります。

検索系SQLの場合は，次に示す計算式から求めてください。

検索列数
　Σ　（120＋検索列のデータの定義長i ）
 i=1

検索列のデータの定義長：検索列がBLOB又はBINARYの場合で，位置付け子機能を使用しているときは4となります。位置付け子機能を使用していないときは，次のどちらかの値となります。

HiRDB_for_Java_MAXBINARYSIZEを指定していない場合

8＋定義長

HiRDB_for_Java_MAXBINARYSIZEを指定している場合

MIN（8＋定義長，8＋MAXBINARYSIZE指定値）

17.21.3　PreparedStatementオブジェクトの容量見積もり

PreparedStatementオブジェクトの容量見積もりの計算式を次に示します。

計算式（32ビットモードの場合）

PreparedStatementオブジェクトの容量＝
　39000＋（2100＋入力データ格納領域長＋検索結果格納領域長）
　　×PreparedStatementインスタンス数　（単位：バイト）

計算式（64ビットモードの場合）

PreparedStatementオブジェクトの容量＝
　40000＋（2600＋入力データ格納領域長＋検索結果格納領域長）
　　×PreparedStatementインスタンス数　（単位：バイト）

入力データ格納領域長：?パラメタがある場合，次に示す計算式から求めてください。

?パラメタ数
　Σ　（120＋入力データ長i ）
 i=1

検索結果格納領域長の求め方は，Statementオブジェクトの容量見積もりと同じです。

17.21.4　CallableStatementオブジェクトの容量見積もり

CallableStatementオブジェクトの容量見積もりの計算式を次に示します。

計算式（32ビットモードの場合）

CallableStatementオブジェクトの容量＝
　39000＋（2100＋入力データ格納領域長＋出力データ格納領域長）
　　×CallableStatementインスタンス数　（単位：バイト）

計算式（64ビットモードの場合）

CallableStatementオブジェクトの容量＝
　40000＋（2600＋入力データ格納領域長＋出力データ格納領域長）
　　×CallableStatementインスタンス数　（単位：バイト）

入力データ格納領域長：INパラメタ及びINOUTパラメタがある場合，次に示す計算式から求めてください。

INパラメタ及び
INOUTパラメタ数
　Σ　（120＋INパラメタ及びINOUTパラメタのデータ長i ）
 i=1

INパラメタ及びINOUTパラメタのデータ長の求め方は，Connectionオブジェクトの容量見積もりの入力パラメタ情報長の求め方と同じです。

出力データ格納領域長：INOUTパラメタ及びOUTパラメタがある場合，次に示す計算式から求めてください。

INOUTパラメタ及び
OUTパラメタ数
　Σ　（120＋INOUTパラメタ及びOUTパラメタのデータの定義長i ）
 i=1

INOUTパラメタ及びOUTパラメタのデータの定義長：

INOUTパラメタ及びOUTパラメタがBLOB又はBINARYの場合で，位置付け子機能を使用しているときは4となります。位置付け子機能を使用していないときは，次のどちらかの値となります。

HiRDB_for_Java_MAXBINARYSIZEを指定していない場合

8＋定義長

HiRDB_for_Java_MAXBINARYSIZEを指定している場合

MIN（8＋定義長，8＋HiRDB_for_Java_MAXBINARYSIZE指定値）

17.21.5　ResultSetオブジェクトの容量見積もり

ResultSetオブジェクトの容量見積もりの計算式を次に示します。

計算式（32ビットモードの場合）

ResultSetオブジェクトの容量＝
　16000＋（900＋ロケータアクセスオブジェクト長＋受信バッファ長
　　＋一時的作業領域長））×ResultSetインスタンス数
　　＋検索結果蓄積領域長×ResultSetインスタンス数2
　　　（単位：バイト）

計算式（64ビットモードの場合）

ResultSetオブジェクトの容量＝
　17000＋（1300＋ロケータアクセスオブジェクト長＋受信バッファ長
　　＋一時的作業領域長））×ResultSetインスタンス数
　　＋検索結果蓄積領域長×ResultSetインスタンス数2
　　　（単位：バイト）

ロケータアクセスオブジェクト長：

位置付け子機能を使用する場合（DriverManager.getConnectionの引数のurl又はユーザプロパティのLONGVARBINARY_ACCESSでLOCATORを指定，又はDataSource系インタフェースのsetLONGVARBINARY_AccessメソッドでLOCATORを指定），1,600を加算してください。

受信バッファ長：

次に示す計算式から求めてください。

MAX（A，
　　　↑（240＋検索行データ長×ブロック転送の行数）÷4096↑×4096，
　　　Connectionオブジェクトの容量見積もりの受信バッファ長）

A：次のどちらかになります。

次のすべての条件を満たす場合：RECEIVE_BUFFER_SIZEの指定値×1024

コネクションプーリング（ConnectionPoolDataSource又はXADataSourceを使用した接続）を使用している

RECEIVE_BUFFER_SIZE（システムプロパティHiRDB_for_Java_RECEIVE_BUFFER_SIZE，又はDataSource系インタフェースのsetReceiveBufferSizeメソッド）に0以外を指定している

上記以外の場合：32768

検索行データ長：

次に示す計算式から求めてください。

　検索列数
8＋ Σ （列データの定義長i ）
 　i=1

列データの定義長：

BLOB又はBINARYの場合で，ロケータを使用しているときは4となります。ロケータを使用していないときは，次のどちらかの値となります。

HiRDB_for_Java_MAXBINARYSIZEを指定していない場合

8＋定義長

HiRDB_for_Java_MAXBINARYSIZEを指定している場合

MIN（8＋定義長，8＋HiRDB_for_Java_MAXBINARYSIZE指定値）

ブロック転送の行数：

ブロック転送機能を使用しない場合は1となります。

一時的作業領域長：

次に示す計算式から求めてください。

一時的作業領域長＝検索列の「列データの実長2」の最大値
　　＋検索列の「列データの実長3」の最大値

列データの実長2：

次の表に示します。

出力データ属性

列データの実長2

INTEGER

4

SMALLINT

2

DECIMAL（m, n）

↓m÷2↓＋1

FLOAT

8

SMALLFLT

4

上記以外

実長

列データの実長3：

位置付け子機能を使用しBLOB又はBINARY型列を検索した場合，次のどちらかの値となります。

HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZEに0以外を指定している場合

HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZE指定値×1024

HiRDB_for_Java_LONGVARBINARY_ACCESS_SIZEに0を指定，又は省略している場合

BLOB又はBINARY型の列に格納されているデータの実長

上記以外の場合は0となります。

検索結果蓄積領域長：

次に示す計算式から求めてください。

検索列数
　Σ （100＋列データの実長i ）×検索行数
 i=1

列データの実長：

次に示します。

出力データ属性

列データの実長

INTEGER

4

SMALLINT

2

DECIMAL(m, n)

↓m÷2↓＋1

FLOAT

8

SMALLFLT

4

BLOB又はBINARY

位置付け子機能を使用しているときは4となります。位置付け子機能を使用していないときは，次のどちらかの値となります。

HiRDB_for_Java_MAXBINARYSIZEを指定していない場合

8＋実長

HiRDB_for_Java_MAXBINARYSIZEを指定している場合

MIN（8＋実長，8＋MAXBINARYSIZE指定値）

上記以外

実長

ResultSetインスタンス数2：

結果集合の型がResultSet.TYPE_SCROLL_INSENSITIVE，又はResultSet.TYPE_SCROLL_SENSITIVEであるResultSetインスタンスの数

17.21.6　トレースオブジェクトの容量見積もり

トレースオブジェクトの総容量は，次に示すトラブルシュート情報を取得するためのメモリの容量の合計値です。

インタフェースメソッドトレース

Exceptionトレースログ

SQLトレース

(1)　インタフェースメソッドトレース

インタフェースメソッドトレースを取得する場合に加算してください。

計算式

インタフェースメソッドトレースの容量＝300×エントリ数×Connectionインスタンス数
　（単位：バイト）

エントリ数：次のどちらかの値です。

DriverManager.getConnectionの引数のurl，又はユーザプロパティのTRC_NOの指定値

DataSource系インタフェースのsetTRC_NOメソッドの指定値

(2)　Exceptionトレースログの容量見積もり

Exceptionトレースログのトレース取得レベルが0以外の場合に加算してください。

計算式

Exceptionトレースログの容量＝360×メモリ内取得情報数　（単位：バイト）

メモリ内取得情報数：次のどちらかの値です。

システムプロパティHiRDB_for_Java_OnMemNUMの指定値

クライアント環境定義PDJDBONMEMNUMの指定値

(3)　SQLトレースの容量見積もり

SQLトレースを取得する場合に加算してください。

計算式

SQLトレースの容量＝10000×Connectionインスタンス数　（単位：バイト）

18　SQLJ

この章では，SQLJを使用してUAPを開発する方法について説明します。

SQLJを使用する場合は，HiRDBサーバとの接続時にパスワードを指定するユーザインタフェースにおいて，29バイト以上のパスワードを引用符で囲んで指定できません。

18.1　概要

18.1.1　SQLJとは

SQLJとは，Javaで静的SQLを埋込み型SQLとして記述，及び実行するための言語仕様です。

SQLJを使用したUAP開発の流れを次の図に示します。

図18‒1　SQLJを使用したUAP開発の流れ

SQLJは，SQLJトランスレータとSQLJランタイムライブラリから構成されます。

SQLJトランスレータ：

SQLJソースプログラムを解析して，SQL文をSQLJランタイムを通じてデータベースにアクセスする標準的なJavaの命令に置き換えます。

SQLJトランスレータは，Javaソースファイルと，SQLの情報を格納したプロファイルを生成します。ユーザは，JavaソースファイルをJavaコンパイラでコンパイルしてclassファイル（実行ファイル）を作成します。

SQLJランタイムライブラリ：

コンパイルされたclassファイルを実行するときに使用します。

SQLJランタイムライブラリには，アクセスするインタフェースによって次のどちらかの使用方法があります。

JDBCインタフェースのAPIを呼び出してSQLを実行する（スタンダードインタフェース版）。

JDBCインタフェースを使用しないで，独自のインタフェースを呼び出してSQLを実行する（ネイティブインタフェース版）。

SQLJを使用したUAPの実行を次の図に示します。

図18‒2　SQLJを使用したUAPの実行

［説明］

JavaコンパイラでコンパイルしたSQLJソースのclassファイルは，SQLJランタイムライブラリを通じてデータベースをアクセスします。

ネイティブインタフェースを使用する場合は，SQLJランタイムライブラリはJDBCを呼び出さないで，HiRDBクライアントライブラリを直接呼び出します。このとき，JDBCのAPIを直接呼び出して，接続や結果セットをJDBCと共有するコーディングはできません。

SQLJランタイムライブラリは，実行時にプロファイルを読み込みます。そのため，classファイルとプロファイルは同じディレクトリに格納する必要があります。また，classファイルをjarファイルに格納する場合も，プロファイルを併せてjarファイルに格納する必要があります。

18.1.2　環境設定

SQLJが動作するときに必要となる，環境変数の設定を次に示します。なお，SQLJはJDBCドライバを使用するため，JDBCドライバの環境設定もしておく必要があります。

(1)　UNIX版での環境設定

実行環境の環境変数に，次の内容を設定してください。

(a)　HiRDB/Developer's Kitの場合

CLASSPATH=$CLASSPATH:[インストールディレクトリ]/client/lib/pdsqlj.jar※

注※

32ビットモードのHP-UX (IPF)版の場合はpdsqlj32.jarとなります。

(b)　HiRDB/Run Timeの場合

CLASSPATH=$CLASSPATH:[インストールディレクトリ]/client/lib/pdruntime.jar※１
CLASSPATH=$CLASSPATH:[インストールディレクトリ]/client/lib/pdnativert.jar※２

注

32ビットモードのHP-UX (IPF)版の場合，次のファイルは同時に指定しないでください。

pdsqlj.jarとpdsqlj32.jar

pdruntime.jarとpdruntime32.jar

pdnativert.jarとpdnativert32.jar

注※1

32ビットモードのHP-UX (IPF)版の場合はpdruntime32.jarとなります。

注※2

32ビットモードのHP-UX (IPF)版の場合はpdnativert32.jarとなります。

(2)　Windows版での環境設定

［コントロールパネル］−［システム］−［システムのプロパティ］の「環境」に，次の内容を設定してください。

(a)　HiRDB/Developer's Kitの場合

CLASSPATH=%CLASSPATH%:[インストールディレクトリ]¥UTL¥pdsqlj.jar

(b)　HiRDB/Run Timeの場合

CLASSPATH=%CLASSPATH%:[インストールディレクトリ]¥UTL¥pdruntime.jar
CLASSPATH=%CLASSPATH%:[インストールディレクトリ]¥UTL¥pdnativert.jar

18.2　SQLJトランスレータ

SQLJトランスレータは，SQLJソースプログラムを解析して，Javaソースファイルとプロファイルを生成します。

SQL文は，JDBCのAPI呼び出しを含むJavaの命令に置き換えられて，Javaソースファイルに出力されます。

SQLの文字列，パラメタの個数，各パラメタのタイプとモード，及び出力する列の記述は，プロファイルに出力されます。プロファイルは，SQLJランタイムライブラリから参照されます。プロファイルの実体は，java.sql.runtime.Profileクラスのインスタンスです。

SQLJトランスレータが生成，参照するファイルの一覧を次の表に示します。

表18‒1　SQLJトランスレータが生成，参照するファイルの一覧

ファイル区分

ファイル名の形式

説明

種別

SQLJソースファイル

ファイル名.sqlj

SQLJソースファイルです。

参照

Javaソースファイル

ファイル名.java

Javaソースファイルです。

生成

プロファイル

ファイル名_SJProfileプロファイル番号.ser

SQLJソースファイルから抽出した各SQL文の情報を格納します。プロファイル番号は，コンテキストごとに付けられます。基数はどちらも0です。

生成

SQLJトランスレータが内部的に生成する，クラスや変数のプリフィクスは次のようになります。

_sJT_：内部的に生成した変数の名称

_SJ：内部的に生成したクラスやプロファイルの名称

18.3　UAPの記述規則

SQLJソースファイルの記述規則について説明します。

18.3.1　名標の付け方の規則

次の名標は使用できません。

「_sJT_」で始まる名標

「_SJ」で始まる名標

「p_rdb」で始まる名標

これ以外の規則については，Java言語の規則に従います。

18.3.2　SQLの記述規則

(1)　SQL文の記述形式

SQL文は，一つのSQL文ごとに，SQL先頭子（#sql）とSQL終了子（;）で囲みます。SQL文自体は，更に｛｝で囲みます。接続クラスやカーソルの宣言についても，SQL先頭子とSQL終了子で囲みます。

SQL文の記述形式を次の表に示します。

表18‒2　SQL文の記述形式

機能

形式

用途

SQLの実行

#sql [コンテキスト] { SQL文 } ;

SQL文を実行します。スタンダードインタフェース版とネイティブインタフェース版とでは，使用できるSQLが違います。詳細については，「SQLJで使用できるSQL文」を参照してください。

列名指定反復子クラスの宣言

スタンダードインタフェース版の場合

#sql 修飾子 iterator クラス名

(データ型 列名,…) ;

ネイティブインタフェース版の場合

使用できません。

カーソルの宣言で使用するクラスを宣言します。FETCH文には使用できません。

位置指定反復子クラスの宣言

スタンダードインタフェース版の場合

#sql 修飾子 iterator クラス名

(データ型,…) ;

ネイティブインタフェース版の場合

#sql 修飾子 iterator クラス名

[implements

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.

ForUpdate]

[with (キーワード=値,…)]

(データ型,…) ;

カーソルの宣言で使用するクラスを宣言します。FETCH文で使用します。

接続クラスの宣言

#sql 修飾子 context クラス名 ;

接続で使用するクラスを宣言します。

カーソルの宣言

#sql 反復子オブジェクト = { SELECT文 } ;

カーソルの定義とオープンをします。

結果セットの変換

スタンダードインタフェース版の場合

#sql [コンテキスト] 反復子オブジェクト

= {CAST :JDBCの結果セット} ;

ネイティブインタフェース版の場合

使用できません。

JDBCの結果セットをSQLJ用に変換します。

注

修飾子：

private，public，protected，final，abstract，protected，static，native，synchronized，transient，及びvolatileの組み合わせ

コンテキスト：

｛接続コンテキスト｜接続コンテキスト,実行コンテキスト｜実行コンテキスト｝

キーワード：

holdability，又はupdateColumns

値：

true，false，又は"列名1,列名2,…"

データ型：

Javaのデータ型

列名：

検索項目

(2)　複数接続機能を使用する場合の接続コンテキストの明示指定

複数接続機能を使用する場合，SQL先頭子とSQL文との間に，接続コンテキストを[ ]で囲んで記述して，使用する接続を明示します。例を次に示します。

 #sql [connCtx] { DELETE FROM EMP WHERE SAL > 1000};

接続コンテキストを明示指定しない場合，デフォルトの接続コンテキストが仮定されます。

(3)　実行環境の明示指定

SQLJでは，デフォルトの実行環境のほかに，ユーザが明示的に指定することもできます。実行環境を指定する場合は，SQL先頭子とSQL文との間に，実行接続コンテキストを[ ]で囲んで記述します。

一つの接続に対して，複数のスレッドで同時にSQLを実行している場合，複数の実行環境を使い分けることで，実行結果がほかのSQLに上書きされることを防げます。例を次に示します。

 ExecutionContext execCtx = new ExecutionContext();
 try {
  #sql [execCtx] { DELETE FROM ZAIKO WHERE SCODE > 1000 };
  System.out.println
   ("removed " + execCtx.getUpdateCount() + "goods");
 }
 catch(SQLException e){
  System.out.println("SQLException has occurred with "+ " exception " + e);
 }

実行接続コンテキストを明示指定しない場合，デフォルトの実行環境が使用されます。

実行環境では，次の値を保持します。値は，set<名称>メソッドで設定し，get<名称>で求めます。

名　称

内　　容

MaxRows

検索で返す最大の行数です。

MaxFieldSize

列やOUTPUT変数の値で返される，データの最大バイト数です。

QueryTimeout

SQLの実行完了までの待ち時間最大値です。HiRDBでは無効となります。

UpdateCount

更新，挿入，又は削除した行数です（参照だけです）。

SQLWarnings

SQLWARN0〜SQLWARNFに相当します（参照だけです）。

なお，複数接続の指定と併用する場合は，接続コンテキストと実行接続コンテキストの順に，コンマで区切って指定します。例を次に示します。

 #sql [connCtX, execCtx] { DELETE FROM ZAIKO WHERE SCODE > 1000 };

(4)　埋込み変数の指定方法

SQLJでは，埋込み変数を宣言するためのBEGIN DECLARE SECTIONは使用しません。

任意の変数，パラメタ，及びオブジェクトのフィールドを，埋込み変数として使用できます。SQL文中では，先頭にコロンを付けて":変数名"と記述します。コロンと変数名の間には空白があってもかまいません。

CALL文のIN，OUT，又はINOUTパラメタは，":｛IN｜OUT｜INOUT｝変数名"と記述します。

また，SQLJでは，埋込み変数として":（式）"を使用できます。式は必ず( )で囲む必要があります。なお，これはJavaの式であり，SQLの式ではありません。例を次に示します。

#sql { SELECT COL1, COL2 FROM TABLE1 WHERE :(x[--i]) > COL3 };

(5)　標識変数の指定方法

SQLJでは標識変数がないため，埋込み変数にナル値を設定する場合は，基本データ型ではなく，sql.langパッケージで定義されているWrapper型を使用します。ナル値を基本データ型のJava変数で受け取った場合，SQLNullException例外が発生します。

(6)　例外処理

SQLJでは，埋込み型SQLのWHENEVERでの例外処理ができません。このため，WHENEVERの代わりに，Javaの例外処理（try…catch）を使用します。例を次に示します。

 try{
    #sql { DELETE FROM ZAIKO WHERE SCODE > 1000 };
 }
 catch(SQLException e){
    System.out.println("SQLCODE:" + e.getErrorCode() +
                       "¥nERRMSG:" + e.getMessage() );
 }

SQL実行時にエラーが発生した場合，JDBCの例外オブジェクト（java.sql.SQLException）が発行されます。

SQLCODE，SQLSTATE，及びエラーメッセージは例外オブジェクトに格納され，値はgetErrorCodeメソッド，getSQLStateメソッド，及びgetMessageメソッドで取得できます。

(7)　静的SQLと動的SQL

SQLJでは静的SQLだけ記述できます。動的SQLは記述できません。

動的SQLを使用したい場合は，JDBCのAPIを使用してください。

(8)　動的カーソルの結果セットの読み出し

JDBCのAPIを使用して作成した，動的カーソルの結果セットをCAST文で変換し，SQLJのカーソルの結果セットとして読み出しができます。例を次に示します。

 #sql iterator Employees(String ename, double sal);
 Statement stmt=conn.createStatement();
 String Query="SELECT sname, scode FROM zaiko WHERE scode > 1000";
 ResultSet rs=stmt.executeQuery(query);
 Employees emps;
 #sql emps ={CAST :rs };

ネイティブインタフェース版では，CAST文は使用できません。使用した場合，トランスレート時にエラーとなります。

(9)　HiRDBサーバとの接続，切り離し

スタンダードインタフェース版の場合，CONNECT文及びDISCONNECT文は使用できません。ネイティブインタフェース版の場合は使用できます。なお，スタンダードインタフェース版，及びネイティブインタフェース版共に，Javaの命令を使用すると，HiRDBサーバとの接続，切り離しができます。

(10)　例外の発生条件

HiRDBの埋込み型SQLでは，次の場合に警告が発生しますが，SQLJでは例外が発生します。

1行SELECT文で，検索項目とINTO句に指定した変数の個数が一致していない場合

1行SELECT文で，検索結果が０行の場合

1行SELECT文で，検索結果が複数行の場合

FETCH文で，検索項目数とINTO句に指定した変数の個数が一致していない場合

位置指定反復子で定義されている列数と，検索項目数が一致していない場合

列名指定反復子で定義されている列数より，検索項目数が少ない場合

(11)　注釈及びSQL最適化指定の扱い

SQL先頭子からSQL終了子までの間に記述した注釈（/*〜*/）は削除します。ただし，カーソルの宣言とSQL文の実行の場合，{ }内に記述したSQL最適化指定（/*>>〜<<*/）は削除しないで，SQL文として扱います。これ以外のSQL最適化指定（/*>>〜<<*/）については，注釈とみなされます。SQL文中での注釈及びSQL最適化指定については，マニュアル「HiRDB SQLリファレンス」を参照してください。

18.3.3　SQLJで使用できるSQL文

SQLJで使用できるSQL文を次の表に示します。

表18‒3　SQLJで使用できるSQL文

種別

SQL文

使用可否

代替手段

スタンダードインタフェース版

ネイティブインタフェース版

定義系SQL

すべて

○

○

−

操作系SQL

ASSIGN LIST文

△

△

JDBCを使用します。

CALL文

○

○

−

CLOSE文

△

△

反復子を使用します。

DECLARE CURSOR

△

△

DELETE文

○

○

−

DESCRIBE文

▲

▲※

JDBCを使用します。

DESCRIBE TYPE文

▲

▲※

DROP LIST文

▲

▲※

EXECUTE文

▲

▲※

EXECUTE IMMEDIATE文

▲

▲※

FETCH文（形式1又は形式3）

○

○

−

FETCH文（形式2）

×

×

−

INSERT文

○

○

−

OPEN文（形式1）

△

△

反復子を使用します。

OPEN文（形式2）

△

△

JDBCを使用します。

PREPARE文

△

△

PURGE TABLE文

○

○

−

1行SELECT文

○

○

−

動的SELECT文

▲

▲※

JDBCを使用します。

UPDATE文

○

○

−

制御系SQL

COMMIT文

○

○

−

COMMIT文（RELEASE指定）

△

△

COMMITとDISCONNECTに分けます。

CONNECT文

×

○

−

DISCONNECT文

×

○

−

LOCK文

○

○

−

ROLLBACK文

○

○

−

ROLLBACK文（RELEASE指定）

△

△

ROLLBACKとDISCONNECTに分けます。

SET SESSION AUTHORIZATION文

×

×

−

埋込み言語文法

BEGIN DECLARE SECTION

×

×

−

END DECLARE SECTION

×

×

−

ALLOCATE CONNECTION HANDLE

△

△

接続コンテキストを使用します。

DECLARE CONNECTION HANDLE

△

△

FREE CONNECTION HANDLE

△

△

GET CONNECTION HANDLE

×

×

−

COPY

×

×

−

GET DIAGNOSTICS

×

×

−

WHENEVER

△

△

try…catchで実装します。

（凡例）

○：SQLJで使用できます。

△：SQLJでは使用できませんが，SQLJ，又はJAVAが提供する機能で同等の機能を使用できます。

▲：SQLJでは使用できませんが，JDBCを使用することで同等の機能を使用できます。

×：SQLJでは使用できません。

−：代替手段はありません。

注

SQLJでは，使用するJDBCドライバが提供していないHiRDBの機能は使用できません。使用できない機能を次に示します。

反復子を使用したUPDATE文及びDELETE文

反復子の宣言時にWITH句のキーワードを指定

配列を使用したINSERT，UPDATE及びDELETE機能は使用できません。

?パラメタにNULL述語を指定したSQL（? IS〔NOT〕 NULL）は使用できません。

注※

JDBCの接続オブジェクトを使用して接続コンテキストを作成した場合，ネイティブインタフェースでも代替手段が使用できます。JDBCの接続オブジェクトを使用しないで接続コンテキストを作成した場合は，代替手段は使用できません。

18.3.4　HiRDBのデータ型とSQLJのデータ型の対応

HiRDBのデータ型とSQLJのデータ型の対応を次の表に示します。SQLJで埋込み変数を使用する場合は，この表に従って変数を宣言してください。

表18‒4　HiRDBのデータ型とSQLJのデータ型の対応

HiRDBのデータ型

SQLJのデータ型（Javaのデータ型）

ナル値を含む場合

ナル値を含まない場合

CHAR※１

java.lang.String

−

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBCHAR※４

−

VARCHAR

java.lang.String

−

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBVARCHAR※４

−

NCHAR※１

java.lang.String

−

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBNCHAR※４

−

NVARCHAR※１

java.lang.String

−

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBNVARCHAR※４

−

MCHAR※１

java.lang.String

−

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBMCHAR※４

−

MVARCHAR※１

java.lang.String

−

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBMVARCHAR※４

−

DECIMAL※２

java.math.BigDecimal

−

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBDECIMAL※４

−

SMALLINT

java.lang.Short

short

INTEGER

java.lang.Integer

int

REAL，SMALLFLT

java.lang.Float

float

FLOAT，DOUBLE PRECISION

java.lang.Double

double

DATE

java.sql.Date

−

TIME

java.sql.Time

−

TIMESTAMP

java.sql.Timestamp

−

INTERVAL HOUR TO SECOND

−

−

INTERVAL YEAR TO DAY

−

−

BLOB※３

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBBLOB※４

byte[]

BINARY

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBBINARY※４

byte[]

（凡例）

−：使用できない，又は該当しないことを意味します。

注

繰返し列は使用できません。

注※1

ネイティブインタフェース版の場合，java.lang.Stringを指定したときは，VARCHAR型としてサーバに要求します。また，出力変数に指定した場合は，データの受け取り領域の長さとして32,000バイトが仮定されます。

注※2

ネイティブインタフェース版の場合，java.math.BigDecimalを出力変数として使用するときは，精度15，位取り0として設定されます。

注※3

ネイティブインタフェース版の場合，byte[]で指定したときは，BINARY型としてサーバ側に要求します。なお，HiRDBサーバがバージョン06-02以前の場合にBLOB型を使用するときは，HiRDBのデータ型であるJP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBBLOBを使用してください。byte[]を指定するとエラーとなります。

注※4

ネイティブインタフェース版の場合に指定できます。

18.3.5　出力変数の設定（ネイティブインタフェース版限定）

1行検索，及びCALL文のOUTパラメタで使用する出力変数は，出力変数の初期値によって，サーバへ実行要求をするときのSQL記述領域に設定するデータの長さが変わります。各データ型の初期値とSQL記述領域に設定されるデータの長さを次の表に示します。

表18‒5　各データ型の初期値とSQL記述領域に設定されるデータの長さ

データ型

初期値

SQL記述領域に設定されるデータの長さ

HiRDBCHAR

変数 = null;

30,000バイト

変数 = new HiRDBCHAR(int n);

nバイト（1≦n≦30,000）

変数 = new HiRDBCHAR(String t);

tの長さ（t.getBytes()で得られるbyte配列の長さ）

HiRDBVARCHAR

変数 = null;

32,000バイト

変数 = new HiRDBVARCHAR(int n);

nバイト（1≦n≦32,000）

変数 = new HiRDBVARCHAR(String t)

tの長さ（t.getBytes()で得られるbyte配列の長さ）

HiRDBNCHAR

変数 = null;

30,000バイト（全角15,000文字）

変数 = new HiRDBNCHAR(int n);

(n*2)バイト（全角n文字）（1≦n≦15,000）

変数 = new HiRDBNCHAR(String t)

tの長さ（t.getBytes()で得られる(byte配列/2)の長さ）

HiRDBNVARCHAR

変数 = null;

32,000バイト（全角16,000文字）

変数 = new HiRDBNVARCHAR(int n);

(n*2)バイト（全角n文字）（1≦n≦16,000）

変数 = new HiRDBNVARCHAR(String t)

tの長さ（t.getBytes()で得られる(byte配列/2)の長さ）

HiRDBMCHAR

変数 = null;

30,000バイト

変数 = new HiRDBMCHAR(int n);

nバイト（1≦n≦30,000）

変数 = new HiRDBMCHAR(String t)

tの長さ（t.getBytes()で得られるbyte配列の長さ）

HiRDBMVARCHAR

変数 = null;

32,000バイト

変数 = new HiRDBMVARCHAR(int n);

nバイト（1≦n≦32,000）

変数 = new HiRDBMVARCHAR(String t)

tの長さ（t.getBytes()で得られるbyte配列の長さ）

HiRDBDECIMAL

変数 = null;

精度15，位取り0

変数 = new HiRDBDECIMAL(int p,int s);

精度p，位取りs（1≦p≦38，0≦s≦p）

変数 = new HiRDBDECIMAL(String t)

精度は，tから符号及びピリオドを除いた文字列長です。位取りは，ピリオド以降の文字列長（ピリオドは含まない）。

変数 = newHiRDBDECIMAL(java.math.BigDecimal t)

精度は，tからtoString()で取り出した文字列の符号及びピリオドを除いた文字列長です。位取りは，BigDecimalオブジェクトのscale()メソッドで取り出した値です。

HiRDBBLOB

変数 = null;

1メガバイト

変数 = new HiRDBBLOB(int n);

nバイト（1≦n≦2,147,483,647）

変数 = new HiRDBBLOB(byte[] t)

tの長さ

HiRDBBINARY

変数 = null;

1メガバイト

変数 = new HiRDBBINARY(int n);

nバイト（1≦n≦2,147,483,647）

変数 = new HiRDBBINARY(byte[] t)

tの長さ

Java.math.BigDecimal

変数 = null;

精度15，位取り0

変数 = new java.math.BigDecimal;

精度には，BigDecimalオブジェクトからtoString()で取り出した文字列の符号及びピリオドを除いた文字列長を設定します。位取りには，scale()メソッドで取り出した値を設定します。

byte[]

変数 = null;

1メガバイト

変数 = new byte[int n]

nバイト（1≦n≦2,147,483,647）

18.3.6　カーソル宣言時のデータ型の使用（ネイティブインタフェース版限定）

カーソル宣言時にHiRDBのデータ型を使用する場合は，次の表のように記述してください。

表18‒6　カーソル宣言時にHiRDBのデータ型を使用する場合の記述と受け取り領域の設定

データ型

カーソル宣言時の記述

受け取り領域の設定

HiRDBCHAR

#sql iterator カーソル名(HiRDBCHAR(int n));

nバイト（1≦n≦30,000）

HiRDBVARCHAR

#sql iterator カーソル名(HiRDBVARCHAR(int n));

nバイト（1≦n≦32,000）

HiRDBNCHAR

#sql iterator カーソル名(HiRDBNCHAR(int n));

(n*2)バイト（全角n文字）

（1≦n≦15,000）

HiRDBNVARCHAR

#sql iterator カーソル名(HiRDBNVARCHAR(int n));

(n*2)バイト（全角n文字）

（1≦n≦16,000）

HiRDBMCHAR

#sql iterator カーソル名(HiRDBMCHAR(int n));

nバイト（1≦n≦30,000）

HiRDBMVARCHAR

#sql iterator カーソル名(HiRDBMVARCHAR(int n));

nバイト（1≦n≦32,000）

HiRDBDECIMAL

#sql iterator カーソル名(HiRDBMVARCHAR(int p,int s));

精度p，位取りs

（1≦p≦38，0≦s≦p）

HiRDBBLOB

#sql iterator カーソル名(HiRDBBLOB(int n));

nバイト

（1≦n≦2,147,483,647）

HiRDBBINARY

#sql iterator カーソル名(HiRDBBINARY(int n));

nバイト

（1≦n≦2,147,483,647）

18.3.7　HiRDBサーバとの接続，切り離しの記述

SQLJにはCONNECT文及びDISCONNECT文がないため，HiRDBサーバとの接続，切り離しはJavaの命令で記述します。

(1)　HiRDBサーバとの接続

HiRDBサーバと接続する場合，接続コンテキストを使用して次のように記述します。

(a)　接続コンテキストクラスの定義

接続コンテキストのクラスを定義します。クラス名はJavaの識別子です。定義したクラスは，sqlj.runtime.ConnectionContextを継承しています。

 #sql 修飾子 context  クラス名 ;

(b)　接続コンテキストの宣言

宣言したクラスを使用して，接続コンテキストを宣言します（Javaの変数宣言として宣言します）。接続コンテキストはJavaの識別子です。

 修飾子 クラス名  接続コンテキスト ;

(c)　HiRDBサーバへの接続

new演算子で接続コンテキストのオブジェクトを生成します。このとき，HiRDBサーバへ接続されます。接続パラメタには，接続先のHiRDBサーバ，ポート番号，認可識別子，及びパスワードを，JDBCと同じ形式で記述します。

 接続コンテキスト = new クラス名(接続パラメタ) ;

(d)　ネイティブインタフェース版を使用した場合のHiRDBサーバへの接続

ネイティブインタフェース版を使用した場合，次の3種類の接続方法があります。

Javaの命令として記述

CONNECT文を使用

JDBCの接続オブジェクト（Connection）を使用

各接続方法の説明を次に示します。

1.Javaの命令として記述

new演算子で接続コンテキストのオブジェクトを生成します。ただし，JDBCを使用しないため，接続パラメタには認可識別子，パスワード，サーバ名，及びポート番号を指定します。

 接続コンテキスト = new クラス名(接続パラメタ);

接続パラメタに何も指定しない場合，クライアント環境定義を参照します。

 接続コンテキスト = new クラス名();

接続コンテキストの作成例を次に示します。

 #sql context Ctx;
 String Userid=new String(“user1”);
 String Passwd=new String(“puser1”);
 String Host=new String(“HiRDB_SV”);
 short port=22000;

 Ctx con = new Ctx(:Userid,:Passwd,:Host,:port);

2.CONNECT文を使用

接続パラメタには，認可識別子，及びパスワードを指定します。

ポート番号，及びサーバ名は，クライアント環境定義を参照します。

 #sql [接続コンテキスト]{CONNECT USER :埋込み変数 USING :埋込み変数}；
 又は
 #sql [接続コンテキスト]{CONNECT :埋込み変数 IDENTIFIED BY :埋込み変数}；

接続パラメタを指定しない場合，クライアント環境定義を参照します。

 #sql [接続コンテキスト]{CONNECT}；

CONNECT文の例を次に示します。

 #sql context Ctx;
 String Userid=new String(“user1”);
 String Passwd=new String(“puser1”);
 Ctx con;

 #sql [con] {CONNECT USER :Userid USING :Passwd };

3.JDBCの接続オブジェクト（Connection）を使用

new演算子で接続コンテキストのオブジェクトを生成します。接続パラメタには，JDBCの接続オブジェクト（java.sql.Connection）を指定します。

 接続コンテキスト = new クラス名(接続オブジェクト);

接続コンテキストの作成例を次に示します。

 #sql context Ctx;
 java sql.Connection con =

 java.sql.DriverManager.getConnection("jdbc:hitachi:PrdbDrive://DBID=22200,
 DBHOST=HiRDB_SV",”user1”,”user1”);

 Ctx ctx = new Ctx(con);

(2)　HiRDBサーバとの切り離し

HiRDBサーバとの切り離しをする場合は，接続コンテキストのcloseメソッドを呼び出します。なお，再接続用のメソッドはありません。再接続する場合は，オブジェクトを新たに作成します。

 接続コンテキスト.close() ;

接続コンテキストのcloseメソッドを呼び出す例を次に示します。

 #sql context DeptContext;
            :
 {
     DeptContext deptCtx = new DeptContext(deptURL,true);
     #sql [deptCtx] { DELETE FROM TAB };
     deptCtx.close();
 }

ネイティブインタフェース版を使用した場合，接続テキストのcloseメソッドを呼び出す方法以外に，DISCONNECT文を使用することもできます。

 #sql[接続コンテキスト]{DISCONNECT}；

DISCONNECT文の例を次に示します。

 #sql context Ctx;
 Ctx con;
 #sql[con]{CONNECT};

 #sql[con]{DISCONNECT};

(3)　デフォルト接続

(a)　スタンダードインタフェース版の場合

スタンダードインタフェース版の場合，SQL文に接続コンテキストを明示しないときは，デフォルトの接続コンテキストが指定されたものとみなされます。

デフォルト接続コンテキストを使用する場合は，UAPがあらかじめ接続コンテキストを作成し，その接続コンテキストをデフォルト接続コンテキストとして設定しておく必要があります。一度設定したデフォルト接続コンテキストは，デフォルト接続コンテキストのclose()メソッドを発行するか，又は新たな接続コンテキストをデフォルトの接続コンテキストとして再設定しないかぎり有効です。

デフォルト接続コンテキストは，デフォルト接続コンテキストクラス(JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext)内の変数に保持されています。

デフォルト接続コンテキストは，次のような異なる引数を持つ，複数のコンストラクタを持っています。

JDBCのconnectionオブジェクトを引数に持つコンストラクタ

接続先のURL，認可識別子，パスワード，及びオートコミットの指定を引数に持つコンストラクタ

接続先のURL，Propertiesオブジェクト，及びオートコミットの指定を引数に持つコンストラクタ

接続コンテキストを引数に持つコンストラクタ

接続先のURL，認可識別子，及びパスワードの指定は，HiRDBのJDBCドライバと同じ形式で記述します。

SQLJでは，接続コンテキスト作成時に接続URLを含むコンストラクタを使用する場合，オートコミットの指定が必要であり，有効にするときはTRUE，無効にするときはFALSEと指定します。

JDBCの接続コンテキストから生成する場合は，オートコミットの設定はJDBCの接続コンテキストの設定を引き継ぎます。

デフォルト接続コンテキストの作成と設定

デフォルト接続コンテキストの作成と設定の例を次に示します。

 import JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext;
                          ：
 PrdbContext pctx = new PrdbContext(url,user,passwd,autoCommit);
 PrdbContext.setDefaultContext(pctx);

デフォルト接続コンテキストの解放と再設定

デフォルト接続コンテキストの解放と再設定の例を次に示します。

 import JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext;
                            ：
 PrdbContext pctx = new PrdbContext(url,user,passwd,autoCommit);
 PrdbContext.setDefaultContext(pctx);
                 ：
 pctx.close();
 PrdbContext new_pctx = new PrdbContext(url.use,passwd,autoCommit);

 PrdbContext.setDefaultContext(new_pctx);

デフォルト接続コンテキストの取得

次のメソッドを呼び出すと，デフォルトの接続コンテキストを取得できます。

JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext.getDefaultContext();

デフォルトコンテキストを明示的に指定した場合の例を次に示します。

 void print_address(String name) throws SQLException;
 {
   String telno;
   sqlj.runtime.ConnectionContext ctx;
   ctx = JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext.getDefaultContext();
   #sql [ctx] { SELECT TELNO INTO :telno
                FROM PERSON
                WHERE :name = NAME } ;
 }

(b)　ネイティブインタフェース版の場合

ネイティブインタフェース版の場合，デフォルト接続コンテキストクラスはJP.co.Hitachi.soft.HiRDB.pdjpp.runtime.PrdbContext内の変数に保持されています。

デフォルト接続コンテキストクラスは，次の複数のコンストラクタを持ちます。

JDBCのconnectionオブジェクトを引数に持つコンストラクタ

接続先の認可識別子，パスワード，サーバ名，及びポート番号を引数に持つコンストラクタ

接続先の認可識別子，及びパスワード指定を引数に持つコンストラクタ

接続コンテキストを引数に持つコンストラクタ

引数なしのコンストラクタ

デフォルト接続コンテキストの作成と設定

デフォルト接続コンテキストの作成と設定の例を次に示します。

 import JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.PrdbContext;
                          :
 PrdbContext pctx = new PrdbContext();
 PrdbContext.setDefaultContext(pctx);

デフォルト接続コンテキストの解放と再設定

デフォルト接続コンテキストの解放と再設定の例を次に示します。

 import JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.PrdbContext;
                          :
 PrdbContext pctx = new PrdbContext(user,passwd,host,port);
 PrdbContext.setDefaultContext(pctx);
                          :
 pctx.close();
 PrdbContext new_pctx = new PrdbContext(user,passwd,host,port);

 PrdbContext.setDefaultContext(new_pctx);

デフォルト接続コンテキストの取得

次のメソッドを呼び出すと，デフォルトの接続コンテキストが得られます。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.PrdbContext.getDefaultContext（）；

デフォルトコンテキストを明示的に指定した場合のコーディング例を次に示します。

void print_address(String name) throws SQLException;
{
  String telno;
  JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.ConnectionContext ctx;
  ctx = JP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContext.getDefaultContext();
  #sql [ctx] { SELECT TELNO INTO :telno FROM PERSON WHERE :name = NAME } ;
}

18.3.8　カーソルによる検索の記述

SQLJにはDECLARE CURSOR，OPEN文，及びCLOSE文がないため，カーソルの宣言，オープン，及びクローズは，Javaの命令として記述します。このとき，カーソル名の代わりに反復子オブジェクトを使用します。反復子オブジェクトは，オブジェクトへの参照変数として宣言されるため，名称規則と有効範囲についてはJavaの規則に従います。

検索結果の取得は，使用する反復子オブジェクトの型によって，FETCH文で取得する方法と，FETCH文を使用しない方法とがあります。FETCH文では，位置指定反復子型のオブジェクトを使用し，列名指定反復子のオブジェクトは使用できません。

(1)　FETCH文を使用した検索

FETCH文を使用して検索をする場合の，記述方法について説明します。

(a)　位置指定反復子クラスの定義と反復子オブジェクトの宣言

スタンダードインタフェース版の場合

スタンダードインタフェース版の場合，位置指定反復子のクラスを定義して，反復子オブジェクトを宣言します。クラス名はJavaの識別子です。データ型Nは，FETCH文でN番目の検索項目を格納するJavaの変数のデータ型です。

 #sql 修飾子 iterator クラス名
               (データ型１,データ型2,…) ;
 修飾子 クラス名 反復子オブジェクト ;

ネイティブインタフェース版の場合

ネイティブインタフェース版の場合，次のようになります。

 #sql 修飾子 iterator クラス名
           [ implements JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.ForUpdate ]
           [ with キーワード=設定値,…]
               (データ型１,データ型2,…) ;
 修飾子 クラス名 反復子オブジェクト ;

UPDATE文，DELETE文で反復子を使用する場合，JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.ForUpdateインタフェースを継承します。

WITH句のキーワードは，反復子の機能を示します。設定値は定数だけです。WITH句のキーワードと値の組み合わせを次の表に示します。

表18‒7　WITH句のキーワードと値の組み合わせ

WITH句のキーワード

機能

設定値

holdability

ホールダブルカーソルであることを示します。

TRUE

updateColumns

更新する列を示します。

"列名,列名,…"

(b)　カーソルの定義とオープン

宣言した反復子オブジェクトに，SELECT文の結果セットを代入します。

 #sql [コンテキスト] 反復子オブジェクト = { SELECT文 } ;

(c)　検索結果の取り出し

カーソル名の代わりに，反復子オブジェクトを指定してFETCH文を実行します。反復子オブジェクトは，先頭にコロンを付けます。

 #sql [コンテキスト] {
    FETCH :反復子オブジェクト INTO :変数1,:変数2,…} ;

(d)　NOT FOUNDの判定

反復子オブジェクトのendFetchメソッドを呼び出して，NOT FOUNDかどうかを判定します。検索する行がない場合はtrueが返ります。次の行がある場合はfalseが返ります。カーソルを閉じた後に呼んだ場合はtrueが返ります。

 while(! 反復子オブジェクト.endFetch()) {
      取り出した行に対する処理
 }

(e)　カーソルのクローズ

カーソルをクローズする場合は，closeメソッドを呼び出します。

 反復子オブジェクト.close() ;

FETCH文を使用した検索例を次に示します。

 #sql public iterator ByPos(String, int);
                   :
 {
   ByPos positer;
   String name = null;
   int code = 0;

   #sql positer = { SELECT SNAME,SCODE FROM ZAIKO };
   #sql { FETCH :positer INTO :name,:code };
   while( !positer.endFetch() ){
     System.out.println(name + ":" + code);
     #sql { FETCH :positer INTO :name,:scode };
   }
   positer.close();
 }

(2)　FETCH文を使用しない検索

列名指定反復子のフィールドを使用して，検索結果の各列を読み出します。

(a)　列名指定反復子クラスの定義

検索項目と同じ名称（大文字と小文字は区別しない）を，クラスのフィールドとして定義します。データ型は，検索結果を受け取るJavaの変数のデータ型を指定します。なお，ネイティブインタフェースの場合は使用できません。

検索項目が，値式，Javaで使用できない文字を含む列名などの場合，AS句で検索項目に別名を定義しておいて，その別名を使用します。

 #sql 修飾子 iterator クラス名
            (データ型1 列名1,
             データ型2 列名2,…) ;
 修飾子 クラス名 反復子オブジェクト;

(b)　カーソルの定義とOPEN

宣言した反復子オブジェクトに，SELECT文の結果セットを代入します。

 #sql [コンテキスト] 反復子オブジェクト = { SELECT文 } ;

(c)　次の行の取り出しとNOT FOUNDの判定

反復子オブジェクトのnextメソッドを呼び出して，NOT FOUNDかどうかを判定します。NOT FOUNDの場合はTRUEが返ります。行がある場合はFALSEが返ります。カーソルがオープンした後，最初のnextメソッドが実行されるまで，カーソルは検索結果の最初の行に位置づけられません。

 while(反復子オブジェクト.next()){
     取り出した行に対する処理
 }

(d)　検索結果の取得

反復子オブジェクトの各フィールドから，データを読み出します。NOT FOUNDの場合や，カーソルがクローズされた後に読み出すと，結果は不定となります。フィールドのデータ型がJavaの基本データ型で，検索結果がナル値の場合に読み出すと，SQLNullExceptionオブジェクトが発生します。

フィールドに対して代入しても，データベースには反映されません。

 変数1 = 反復子オブジェクト.列名1 ;
 変数2 = 反復子オブジェクト.列名2 ;
              ：

(e)　カーソルのCLOSE

反復子オブジェクトのcloseメソッドを呼び出します。

 反復子オブジェクト.close() ;

FETCH文を使用しない検索例を次に示します。

(例)

 #sql public iterator ByName(String sname,
                            int scode);
                  :
 {
    ByName nameiter;
    String s;
    int i;

    #sql nameiter = { SELECT SNAME, SCODE FROM ZAIKO };
    while( nameiter.next() ){
      s = nameiter.sname();
      i = nameiter.scode();
      System.out.println(s + ":" + i);
    }
    nameiter.close();
 }

(3)　カーソルを使った更新

ネイティブインタフェース版の場合，カーソルを使った更新ができます。

UPDATE文，DELETE文で，カーソルが位置づけられている行を操作する場合，カーソル名の代わりに反復子を指定します。なお，反復子のクラス定義のときに，必ずForUpdateインタフェースを継承しておく必要があります。

 #sql [コンテキスト] { DELETE文 WHERE CURRENT OF :反復子オブジェクト } ;

 #sql [コンテキスト] { UPDATE文 WHERE CURRENT OF :反復子オブジェクト } ;

反復子を使用した更新例を次に示します。

 #sql public iterator ByPos
             implements JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.ForUpdate
             (String, int);
              :

 {
   ByPos positer;
   String name = null;
   int year = 0;
   int newyear;

   #sql positer = { SELECT FULLNAME, BIRTHYEAR FROM PEOPLE };
   #sql { FETCH :positer INTO :name,:year };
   while( !positer.endFetch() ){
     newyear=year+10;
     #sql { UPDATE PEOPLE SET YEAR=:newyear WHERE CURRENT OF :positer; };
   }
   positer.close();
 }

18.3.9　動的結果セットの受け取り

動的結果セットを返すプロシジャを呼び出して，動的結果セットを受け取る場合，実行コンテキストのgetNextResultSet()メソッドを使用します。なお，ネイティブインタフェース版の場合，JDBCの結果セットを使用できないため，動的結果セットを返すプロシジャは使用できません。

getNextResultSetメソッドは，返り値として動的結果セット（ResultSetオブジェクト）を返します。呼び出されるごとに，次の結果セットを返します。最後の結果セットを返した後は，ナル値を返します。

動的結果セットを返さないプロシジャやSQLの場合は，ナル値を返します。SQLの実行が正常終了しなかった場合もナル値を返します。

getNextResultSetメソッド実行中にエラーが発生した場合は，SQLExceptionが発生します。

例を次に示します。

 #sql  [execCtx] { CALL MULTI_RESULTS() };
 ResultSet rs;
 while((rs == execCtx.getNextResultSet() ) != null){
   検索結果の処理；
   rs.close();
 }

18.3.10　JDBCとの相互運用

JDBCとSQLJを併用するときの運用について説明します。

(1)　SQLJの反復子からの，JDBCの結果セットの取得

SQLJの反復子を，JDBCの結果セット（ResultSetオブジェクト）に変換して，JDBCのAPIを利用して検索結果を取得できます。なお，ネイティブインタフェース版の場合，JDBCの結果セットを取得できません。

JDBCの結果セットを取得するには，反復子クラス(ResultSetIterator)のgetResultSetメソッドを使用します。返り値として，getResultSetメソッドはJDBCの結果セットを返します。反復子でnextメソッドを実行した後は，getResultSetメソッドを呼び出さないでください。

getResultSetメソッドでJDBCの結果セットに変換した後は，元の反復子を使用して検索結果を受け取ってはいけません。

例を次に示します。

 public void showEmployeeName() throws SQLException
 {
 sqlj.runtime.ResultSetIterator iter;
 #sql iter = { SELECT ename FROM rmp } ;
 ResultSet rs = iter.getResultSet();
 while(rs.next()){
 System.out.println("employee name: " + rs.getString(1));
 }
 iter.close();
 }

(2)　JDBCの結果セットを，SQLJの反復子の結果セットとして読み出す方法（スタンダードインタフェース版限定）

JDBCのAPIを使用して作成した，JDBCの結果セット（ResultSet）をCAST文で変換し，SQLJのカーソルの結果セットとして読み出せます。

コーディング例を次に示します。

 #sql iterator Employees(String ename, double sal);
 Statement stmt=conn.createStatement();
 String query=”SELECT sname, scode FROM zaiko WHERE scode > 1000”;
 ResultSet rs=stmt.executeQuery(query);
 Employees emps;
 ＃sql emps =｛CAST :rs ｝;

(3)　JDBCの接続の，SQLJの接続コンテキストへの変換

SQLJの接続コンテキストには，JDBCの接続からオブジェクトを生成するコンストラクタが定義されています。このコンストラクタを使用することで，JDBCの接続からSQLJの接続コンテキストに変換できます。なお，コンストラクタの引数としてJDBCの接続を渡します。また，両方の接続は併用できます。

例を次に示します。

 java.sql.Connection jdbcConCtx =java.sql.DriverManager.getConnection(…);
  #sql context Inventory;
 Inventory sljConCtx = new Inventory(jdbcConCtx);

(4)　SQLJの接続の，JDBCの接続への変換

SQLJの接続コンテキストは，getConnectionメソッドでJDBCの接続を取得できます。両方の接続は併用できます。

ネイティブインタフェース版の場合，SQLJの接続をJDBCに変換することはできません。JDBCと同一の接続を使用したい場合は，あらかじめJDBC側で接続を作成し，SQLJの接続コンテキストに変換する必要があります。

例を次に示します。

 #sql context Inventory;
 Inventory sljConCtx = new Inventory(url);
 java.sql.Connection jdbcConCtx = sqljConCtx.getConnection()；

(5)　動的SQL

SQLJでは静的SQLだけ記述できるため，動的SQLを実行する場合はJDBCのAPIを使用する必要があります。

(a)　動的SQLの実行

動的SQLは，JDBCのPreparedStatementオブジェクトを使用して実行します。

接続コンテキストのprepareStatementメソッドを，SQLを引数にして実行すると，返り値としてPreparedStatementオブジェクトが返ります。

動的SQLへのパラメタの設定には，PreparedStatementのsetメソッドを使用します。また，SQLの実行には，PreparedStatementオブジェクトのexecuteメソッドを使用します。

動的SQLの実行例を次に示します。

 java.sql.PreparedStatement pstmt = con.prepareStatement(
           "INSERT INTO FOO_TABLE VALUES(?, ?)");
 pstmt.setInt(1, 100);
 pstmt.setString(2, "テスト");
 pstmt.execute();

(b)　動的カーソルの検索

SQLJでは静的カーソルだけ使用できるため，動的カーソルを実行するにはJDBCのAPIを使用する必要があります。

接続コンテキストのprepareStatementメソッドを，SELECT文を示す文字列で実行すると，返り値としてPreparedStatementオブジェクトが返ります。

パラメタの設定には，PreparedStatementのsetメソッドを使用します。また，SQLの実行には，PreparedStatementオブジェクトのexecuteQueryメソッドを使用します。このexecuteQueryメソッドは，JDBCの結果セットを返します。

検索結果の受け取りには，結果セットのgetメソッドを使用します。

動的カーソルの検索例を次に示します。

 java.sql.PreparedStatement pstmt = con.prepareStatement(
           "SELECT NAME, POINT FROM FOO_TABLE WHERE BAR=100");
 ResultSet rs = pstmt.executeQuery();
 String name;
 Integer point;
 rs.next();
 name = pstmt.getString(1);
 point = pstmt.getInteger(2);

(c)　DESCRIBE文の実行

動的カーソルの各検索項目の列名及びデータ型を求めるためには，ResultSetMetaDataオブジェクトを使用します。

ResultSetMetaDataオブジェクトは，結果セットのgetMetaDataオブジェクトから取得できます。また，ResultSetMetaDataオブジェクトのgetColumnClassNameメソッドで，各検索項目のデータ型を示す文字列を取得できます。

列名はgetColumnNameメソッドで取得できます。

対象とする検索項目は，番号（1〜）で指定します。また，列数はgetColumnCountメソッドで取得できます。

DESCRIBE文の実行例を次に示します。

 java.sql.PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM FOO_TABLE");
 java.sql.ResultSetMetaData aMeta = pstmt.getMetaData();
 int columCount = aMeta.getColumnCount();
 Vector nameList = new Vector();
 Vector classList = new Vector();
 for(int i = 1; i <= columnCount; i++){
      nameList.addElement(aMeta.getColumnName(i));
      classList.addElement(a.Meta.getColumnClassName(i));
 }
 Vector dataList = new Vector();
 rs.next();
 for(int i = 1; i <= columnCount; i++){
      dataList.addElement(rs.getObject(i));
 }

18.3.11　UAPの作成と実行

(1)　SQLJトランスレータの実行方法

1．環境変数を設定する

HiRDBクライアントがIPF版のUNIX版の場合：

環境変数に次の内容を設定してください。なお，下線部はデフォルトのインストールディレクトリです。

HiRDB/Developer's Kitのとき

CLASSPATH=$CLASSPATH:/HiRDB/client/lib/pdsqlj.jar※１

HiRDB/Run Timeのとき

CLASSPATH=$CLASSPATH:/HiRDB/client/lib/pdruntime.jar※２

CLASSPATH=$CLASSPATH:/HiRDB/client/lib/pdnativert.jar※３

注※1

32ビットモードのHP-UX (IPF)版の場合はpdsqlj32.jarとなります。

注※2

32ビットモードのHP-UX (IPF)版の場合はpdruntime32.jarとなります。

注※3

32ビットモードのHP-UX (IPF)版の場合はpdnativert32.jarとなります。

HiRDBクライアントがWindows版の場合：

「コントロールパネル」−「システム」−「詳細」-「環境変数」に，次の内容を設定してください。なお，下線部はデフォルトのインストールディレクトリです。

HiRDB/Developer's Kitのとき

CLASSPATH=%CLASSPATH%:¥HiRDB¥UTL¥pdsqlj.jar

HiRDB/Run Timeのとき

CLASSPATH=%CLASSPATH%¥HiRDB¥UTL¥pdruntime.jar

CLASSPATH=%CLASSPATH%¥HiRDB¥UTL¥pdnativert.jar

2．SQLJトランスレータを実行する

SQLJトランスレータは，Java仮想マシン上で動作します。

形式：

 pdjava [オプション] ファイル名1.sqlj [ファイル名2.java]

説明：

オプション：

SQLJトランスレータのオプションを次の表に示します。

ファイル名1：

SQLJを記述したUAPソースファイルです。

ファイル名2：

ポストソースファイルです。

ファイル名1，ファイル名2にはパスを含んでもかまいません。ファイル名2.javaを指定しない場合は，ファイル名1.javaを指定したとみなされます。

表18‒8　SQLJトランスレータのオプション

オプション

記述形式

説明

-dir

-dir=ディレクトリ名

ポストソースファイルを生成するディレクトリを指定します。

-d

-d=ディレクトリ名

-status

-status

プリプロセスするときの内部状態を表示します。デバッグ用のオプションです。

-J

-J-オプション

SQLJトランスレータ実行時の，Java仮想マシンのオプションを指定します。

-version

-version

SQLJトランスレータのバージョンを表示します。トランスレートは行いません。

-help

-help

オプションの説明を表示する場合に指定します。トランスレートは行いません。

-native

-native

ネイティブインタフェース用のポストソースを生成します。オプションを複数指定する場合は，必ず先頭に指定してください。

-d 64

-d 64

64ビットモードのHP-UX(IPF)版でSQLJトランスレータを実行する場合に指定します。

注1

オプションを複数指定する場合は，スペースを入れて指定してください。

スタンダードインタフェース版の場合は二つまで，ネイティブインタフェース版の場合は三つ（-native含む）まで指定できます。それ以上指定するとエラーとなります。

注2

ネイティブインタフェース版を使用するための-nativeオプションは，必ず先頭に指定してください。2番目以降に指定するとエラーとなります。

注3

-help又は-versionオプションを指定した場合，ほかのオプションは無視されます。ただし，-helpと-versionを同時に指定した場合は，どちらも有効となります。

実行例：

実行例を次に示します。

スタンダードインタフェース版の場合

(例1)pdjava ファイル名.sqlj

(例2)pdjava -dir=d:¥sqljsrc ファイル名.sqlj

(例3)pdjava -d64 ファイル名.sqlj※

注※

64ビットモードのHP-UX (IPF)版での実行例です。

ネイティブインタフェース版の場合

(例1)pdjava -native ファイル名.sqlj

(例2)pdjava -native -dir=d:¥sqljsrc ファイル名.sqlj

(例3)pdjava -native -d64 ファイル名.sqlj※

注※

64ビットモードのHP-UX (IPF)版での実行例です。

(2)　UAPのコンパイルと実行

1．環境変数を設定する

「SQLJトランスレータの実行方法」の1.を参照してください。

2．ポストソースをコンパイルする

SQLJトランスレータで生成したポストソースを，javaコンパイラでコンパイルします。コンパイル時の形式を次に示します。

 javac ファイル名2.java

3．CLASSPATHにJDBCのドライバのパスを設定する

JDBCのドライバのパスの設定方法については，「インストールと環境設定」を参照してください。

4．DriverManagerを使用したDB接続

DriverManagerを使用したDB接続については，「Driverクラス」を参照してください。

5．Java仮想マシンでCLASSファイルを実行する

Java仮想マシンでClassファイルを実行します。実行時の形式を次に示します。

 java ファイル名2

32ビットモードのHP-UX (IPF)版で実行する場合は次のようになります。

 java -d64 ファイル名2

18.3.12　スタンダードインタフェース版からネイティブインタフェース版への移行

スタンダードインタフェース版からネイティブインタフェース版へSQLJソースを移行する場合，修正が必要になる部分があります。ネイティブインタフェース版に移行した場合の修正要否を次の表に示します。

表18‒9　スタンダードインタフェース版からネイティブインタフェース版へ移行した場合の修正要否

コマンド名

スタンダードインタフェース版

ネイティブインタフェース版

修正の要否

UAP(入力)ソース

ファイル名.sqlj

同じです。

−

UAP(出力)ソース

JAVAソースファイル名.

javaプロファイル名.ser

JAVAソースファイル.java

−

オプション

出力ファイル名指定など

同じです。

−

SQL先頭子

#sql

同じです。

−

SQL終了子

;

同じです。

−

SQL宣言節

不要です。

同じです。

−

埋込み変数

:変数名

同じです。

−

宣言文

#sql context クラス名

#sql iterator クラス名

同じです。※１

−※２

接続コンテキストの作成

パラメタにJDBC接続オブジェクトを指定できます。

同じです。

−

パラメタにJDBC接続オブジェクト以外を指定できます。

同じパラメタを取得するものはありません。

○※３

デフォルト接続コンテキストの使用

JP.co.Hitachi.soft.HiRDB.sqj.runtime.

PrdbContext

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.

PrdbContext

○※４

実行コンテキストの明示指定

sqlj.runtime.ExecutionContext

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.

ExecutionContext

○※5

CAST文の使用(JDBC結果セットの受け取り)

実行できます。

実行できません。

○※６

動的結果セットの受け取り

実行できます。

実行できません。

○※７

データ型

byte[]

java.math.BigDecimal

java.lang.String

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.

HiRDBBLOB

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.

HiRDBDECIMAL

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.

HiRDBCHARなど

○※８

同一反復子オブジェクト名を使用した異なるSELECT文の実行

実行できます。

実行できません。

○※９

（凡例）

○：修正する必要があります。

−：修正する必要はありません。

注※1

名前反復子は使用できません。また，位置反復子を使用した場合は，インナークラスには使用できません。

注※2

名前反復子を使用する場合，及びインナークラスを使用する場合は，修正が必要となります。

注※3

接続処理を変更してください。詳細については，「ネイティブインタフェース版を使用した場合のHiRDBサーバへの接続」を参照してください。

注※4

パッケージ名のJP.co.Hitachi.soft.HiRDB.sqj.runtime.PrdbContextをJP.co.Hitachi.soft.HiRDB.pdjpp.runtime.PrdbContextに変更してください。

注※5

sqlj.runtime.ExecutionContextをJP.co.Hitachi.soft.HiRDB.pdjpp.runtime.ExecutionContextに変更してください。

注※6

CAST文はトランスレート時にエラーとなります。そのため，CAST文は削除してください。また，JDBCの結果セットは，SQLJの反復子を使用しないで直接操作するようにUAPを変更してください。

注※7

動的結果セットを受け取るためのメソッドがないため，javaコンパイル時にエラーとなります。そのため，ExecutionContext.getNextResultSet()を発行している部分を削除してください。なお，動的結果セットを取得したい場合は，JDBCを直接使用するようにUAPを変更してください。

注※8

byte[]は，BINARY型としてHiRDBサーバに要求します。HIRDBサーバのバージョンが06-02以前の場合に変更が必要です。

BigDecimal型を受け取り変数に指定している場合は，精度15，位取り0が設定されるため，それ以外の精度，位取りのときは変更が必要です。

Stringを入力変数に使用した場合，VARCHAR型としてHiRDBサーバに要求します。データ型をHiRDBサーバのデータ型に対応させたい場合は，変更が必要です。

注※9

同一の反復子オブジェクト名を使用して，異なるSELECT文を実行することはできません。この場合，SELECT文ごとに，反復子オブジェクト名を分ける必要があります。例を次に示します。

#sql iterator pos(HiRDBCHAR(10));
   :
pos positer = null
pos positer2 = null;
HiRDBCHAR out = null;
   :
#sql positer = {SELECT * FROM T1};
#sql {FETCH :positer INTO :out}
positer.close();

#sql positer2 = {SELECT * FROM T2};
#sql {FETCH :positer2 INTO :out}
positer2.close();

18.3.13　UAP開発時の注意事項

マルチスレッドを使用したUAPを開発する場合，接続コンテキストにデフォルト接続コンテキストを使用しないでください。同一の接続コンテキストを複数のスレッドで使用すると，エラーとなります。

マルチスレッドを使用する場合は，必ず接続コンテキストを明示的に指定してください。接続コンテキストを明示的に指定した例を次に示します。

#sql context Ctx;

public class sample{
 public void main(String args[]){
   Ctx con = null;
   #sql [con] {CONNECT};                      //接続コンテキストの明示指定
   ‥
   int data = 100;
   #sql [con] {INSERT INTO T1 VALUES(:data)}; //接続コンテキストの明示指定

   #sql [con] {DISCONNECT};                   //接続コンテキストの明示指定
 }
}

SQLJネイティブインタフェース版を使用する場合，SELECT文の検索項目数と使用する反復子オブジェクトの列数が一致するようにしてください。一致しないと，不正にエラーとなることがあります。

18.4　ネイティブランタイム

ネイティブインタフェースで使用するSQLJランタイムライブラリを，ネイティブランタイムといいます。

ネイティブランタイムでは，次の機能を提供します。

-nativeオプション指定時のコンパイルで使用するクラス，及びインタフェース

HiRDBへのアクセス

18.4.1　パッケージの構成

ネイティブランタイムのパッケージ構成を次の表に示します。

表18‒10　ネイティブランタイムのパッケージ構成

パッケージ名称

収録内容

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

クラス，及びインタフェース

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.error

エラークラス

18.4.2　ネイティブランタイムの公開クラス一覧

ネイティブランタイムの公開クラス一覧を次の表に示します。

表18‒11　ネイティブランタイムの公開クラス一覧

パッケージ

クラス名，又はインタフェース名

機能

−

接続コンテキスト

SQLJトランスレータの「#sql context クラス名;」で生成されるクラスです。SQLJの接続コンテキストに該当します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

PrdbContext

デフォルト接続コンテキストです。SQLJのデフォルト接続コンテキストに該当します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

ExecutionContext

実行コンテキストです。SQLJの実行コンテキストに該当し，SQLの実行を管理するクラスです。

−

反復子（イテレータ）

SQLJトランスレータの「#sql iterator クラス名;」で生成されるクラスです。SQLJの反復子に該当します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

RTResultSet

結果セットオブジェクトです。JDBCの結果セットに該当し，結果を管理するクラスです。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

ForUpdate

反復子を使用したカーソル更新を使用する場合に，反復子宣言でimplementするインタフェースです。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

HiRDBCHAR

HiRDBのCHAR型を表します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

HiRDBVARCHAR

HiRDBのVARCHAR型を表します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

HiRDBNCHAR

HiRDBのNCHAR型を表します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

HiRDBNVARCHAR

HiRDBのNVARCHAR型を表します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

HiRDBMCHAR

HiRDBのMCHAR型を表します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

HiRDBMVARCHAR

HiRDBのMVARCHAR型を表します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

HiRDBDECIMAL

HiRDBのDECIMAL型を表します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

HiRDBBLOB

HiRDBのBLOB型を表します。

JP.co.Hitachi.soft.HiRDB.pdjpp.runtime

HiRDBBINARY

HiRDBのBINARY型を表します。

（凡例）−：パッケージはありません。

18.4.3　クラス仕様

各クラスのメソッドと，フィールドの値について説明します。

(1)　JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBCHARクラス

説明：

HiRDBのCHAR型と対応します。

コンストラクタ：

戻り値

メソッド

機能説明

HiRDBCHAR

HiRDBCHAR(String s)

throws SQLException

新しいHiRDBCHARクラスを生成します。

指定した文字列の長さが30,001バイト以上の場合，SQLExceptionが投入されます。

HiRDBCHAR

HiRDBCHAR(int len)

throws SQLException

長さlenを持つHiRDBCHARクラスを返却します。

1行検索，及びCALL文のOUTパラメタに指定する場合に使用します。なお，入力変数に指定した場合，(半角スペース*len)を指定したとみなされます。指定したlenが1〜30,000の範囲でない場合，SQLExceptionが投入されます。

メソッド：

戻り値

メソッド

機能説明

String

getString()

Stringオブジェクトを返却します。

int

length()

文字列の長さを返却します。

(2)　JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBVARCHARクラス

説明：

HiRDBのVARCHAR型と対応します。

コンストラクタ：

戻り値

メソッド

機能説明

HiRDBVARCHAR

HiRDBVARCHAR(String s)

throws SQLException

新しいHiRDBVARCHARクラスを生成します。

指定した文字列の長さが32,001バイト以上の場合，SQLExceptionが投入されます。

HiRDBVARCHAR

HiRDBVARCHAR(int len)

throws SQLException

長さlenを持つHiRDBVARCHARクラスを返却します。

1行検索，及びCALL文のOUTパラメタに指定する場合に使用します。なお，入力変数に指定した場合，(半角スペース*len)を指定したとみなされます。指定したlenが1〜32,000の範囲でない場合，SQLExceptionが投入されます。

メソッド：

戻り値

メソッド

機能説明

String

getString()

Stringオブジェクトを返却します。

int

length()

文字列の長さを返却します。

(3)　JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBNCHARクラス

説明：

HiRDBのNCHAR型と対応します。

コンストラクタ：

戻り値

メソッド

機能説明

HiRDBNCHAR

HiRDBNCHAR(String s)

throws SQLException

新しいHiRDBNCHARクラスを生成します。

指定した文字列の長さが15,001文字以上の場合，SQLExceptionが投入されます。

HiRDBNCHAR

HiRDBNCHAR(int len)

throws SQLException

長さlen（lenは全角の文字数）を持つHiRDBNCHARクラスを返却します。

1行検索，及びCALL文のOUTパラメタに指定する場合に使用します。なお，入力変数に指定すると，(全角スペース*len)を指定したとみなされます。指定したlenが1〜15,000の範囲でない場合，SQLExceptionが投入されます。

メソッド：

戻り値

メソッド

機能説明

String

getString()

Stringオブジェクトを返却します。

int

length()

文字列の長さを返却します。

(4)　JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBNVARCHARクラス

説明：

HiRDBのNVARCHAR型と対応します。

コンストラクタ：

戻り値

メソッド

機能説明

HiRDBNVARCHAR

HiRDBNVARCHAR(String s)

throws SQLException

新しいHiRDBNVARCHARクラスを生成します。

指定した文字列の長さが16,001文字以上の場合，SQLExceptionが投入されます。

HiRDBNVARCHAR

HiRDBNVARCHAR(int len)

throws SQLException

長さlen（lenは全角の文字数）を持つHiRDBNVARCHARクラスを返却します。

1行検索，及びCALL文のOUTパラメタに指定する場合に使用します。なお，入力変数に指定すると，(全角スペース*len)を指定したとみなされます。指定したlenが1〜16,000の範囲でない場合，SQLExceptionが投入されます。

メソッド：

戻り値

メソッド

機能説明

String

getString()

Stringオブジェクトを返却します。

int

length()

文字列の長さを返却します。

(5)　JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBMCHARクラス

説明：

HiRDBのMCHAR型と対応します。

コンストラクタ：

戻り値

メソッド

機能説明

HiRDBMCHAR

HiRDBMCHAR(String s)

throws SQLException

新しいHiRDBMCHARクラスを生成します。

指定した文字列の長さが30,001バイト以上の場合，SQLExceptionが投入されます。

HiRDBMCHAR

HiRDBMCHAR(int len)

throws SQLException

長さlenを持つHiRDBMCHARクラスを返却します。

1行検索，及びCALL文のOUTパラメタに指定する場合に使用します。なお，入力変数に指定すると，(半角スペース*len)を指定したとみなされます。指定したlenが1〜30,000の範囲でない場合，SQLExceptionが投入されます。

メソッド：

戻り値

メソッド

機能説明

String

getString()

Stringオブジェクトを返却します。

int

length()

文字列の長さを返却します。

(6)　JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBMVARCHARクラス

説明：

HiRDBのMVARCHAR型と対応します。

コンストラクタ：

戻り値

メソッド

機能説明

HiRDBMVARCHAR

HiRDBMVARCHAR(String s)

throws SQLException

新しいHiRDBMVARCHARクラスを生成します。

指定した文字列の長さが32,001バイト以上の場合，SQLExceptionが投入されます。

HiRDBMVARCHAR

HiRDBMVARCHAR(int len)

throws SQLException

長さlenを持つHiRDBMVARCHARクラスを返却します。

1行検索，及びCALL文のOUTパラメタに指定する場合に使用します。なお，入力変数に指定すると，(半角スペース*len)を指定したとみなされます。指定したlenが1〜32,000の範囲でない場合，SQLExceptionが投入されます。

メソッド：

戻り値

メソッド

機能説明

String

getString()

Stringオブジェクトを返却します。

int

length()

文字列の長さを返却します。

(7)　JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBBLOBクラス

説明：

HiRDBのBLOB型と対応します。

コンストラクタ：

戻り値

メソッド

機能説明

HiRDBLOB

HiRDBBLOB(byte[] b)

新しいHiRDBBLOBクラスを生成します。

HiRDBBLOB

HiRDBBLOB(int len)

throws SQLException

長さlenを持つHiRDBBLOBクラスを返却します。

1行検索，及びCALL文のOUTパラメタに指定する場合に使用します。なお，入力変数に指定すると，(数字の0(0x30)*len)を指定したとみなされます。指定したlenが0以下の場合，SQLExceptionが投入されます。

メソッド：

戻り値

メソッド

機能説明

byte[]

getBytes[]

byte[]を返却します。

int

length()

byte[]の長さを返却します。

(8)　JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBBINARYクラス

説明：

HiRDBのBINARY型と対応します。

コンストラクタ：

戻り値

メソッド

機能説明

HiRDBBINARY

HiRDBBINARY(byte[] b)

新しいHiRDBBINARYクラスを生成します。

HiRDBBINARY

HiRDBBINARY(int len)

throws SQLException

長さlenを持つHiRDBBINARYクラスを返却します。

1行検索，及びCALL文のOUTパラメタに指定する場合に使用します。なお，入力変数に指定すると，(数字の0(0x30)*len)を指定したとみなされます。指定したlenが0以下の場合，SQLExceptionが投入されます。

メソッド：

戻り値

メソッド

機能説明

byte[]

getBytes()

byte[]を返却します。

int

length()

byte[]長さを返却します。

(9)　JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.HiRDBDECIMALクラス

説明：

HiRDBのDECIMAL型と対応します。

コンストラクタ：

戻り値

メソッド

機能説明

HiRDBDECIMAL

HiRDBDECIMAL(String s)

throws SQLException

新しいHiRDBDECIMALクラスを生成します。

引数の文字列に数値，ピリオド，及び符号以外の文字列を含む場合，又は文字列から求められる精度，位取りが39以上の場合は，SQLExceptionが発生します。

HiRDBDECIMAL

HiRDBDECIMAL

(java.math.BigDecimal)

throws SQLException

新しいHiRDBDECIMALクラスを生成します。

引数の精度及び位取りが39以上の場合，SQLExceptionが発生します。

HiRDBDECIMAL

HiRDBDECIMAL(int x,int y)

throws SQLException

精度x，位取りyのHiRDBDECIMALクラスを返却します。

1行検索，及びCALL文のOUTパラメタに指定する場合に使用します。なお，入力変数に指定すると，0を指定したものとみなされます。xが1〜38の範囲外，yが0〜38の範囲外で，かつx＜yの場合は，SQLExceptionが発生します。

メソッド：

戻り値

メソッド

機能説明

String

getString()

Stringオブジェクトを返却します。

java.math.BigDecimal

getBigDecimal()

java.math.BigDecimalオブジェクトを返却します。

int

precision()

精度を返却します。

int

scale()

位取りを返却します。

18.4.4　ネイティブインタフェースを使用したコーディング例

(1)　データの挿入と検索

データの挿入と検索をするコーディング例（sample1.sqlj）を次に示します。

import java.sql.*;
import JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.*;
//反復子(カーソル)宣言
#sql iterator Pos(int,HiRDBCHAR(10),HiRDBNCHAR(5),HiRDBDECIMAL(10,5));

public class sample1{
  public static void main(String args[]){

    //接続及びテーブル作成
    try{
      #sql{CONNECT};    //クライアント環境変数を参照し接続します
      #sql{CREATE TABLE SAMPLE1(c1 int,c2 char(10),c3 nchar(5),c4 decimal(10,5))};
    }catch(SQLException e){System.out.println(e.getMessage());};

    //データのインサート
    try{
      int InInt = 100;
      HiRDBCHAR InChar = new HiRDBCHAR("CHAR");
      HiRDBNCHAR InNchar = new HiRDBNCHAR("ＮＣＨＡＲ");
      HiRDBDECIMAL InDecimal = new HiRDBDECIMAL("12345.678");

      #sql{INSERT INTO SAMPLE1 VALUES(:InInt,:InChar,:InNchar,:InDecimal)};
      #sql{COMMIT};
    }catch(SQLException e){System.out.println(e.getMessage());};

    //データの検索(FETCH)
    try{
      Pos sampleCur = null;
      int OutInt = 0;
      HiRDBCHAR OutChar = null;
      HiRDBNCHAR OutNchar = null;
      HiRDBDECIMAL OutDecimal = null;

      #sql sampleCur  = {SELECT * FROM SAMPLE1};
      while(true){
        #sql {FETCH :sampleCur INTO :OutInt ,:OutChar ,:OutNchar ,:OutDecimal };
        if(sampleCur.endFetch()) break;
          System.out.println("c1="+ OutInt +" c2="+ OutChar.getString() +
             " c3="+ OutNchar.getString() + " c4="+ OutDecimal.getString());
      }
    }catch(SQLException e){System.out.println(e.getMessage());};
    try{#sql{DISCONNECT};}catch(SQLException e){System.out.println(e.getMessage());}
  }
}

(2)　データの挿入と1行検索

データの挿入と1行検索をするコーディング例（sample2.sqlj）を次に示します。

import java.sql.*;
import JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.*;

public class sample2{
  public static void main(String args[]){
    String userid = "user1";
    String passwd = "user1";

    //接続及びテーブル作成
    try{
    //指定された認可識別子，パスワードで接続します
      #sql{CONNECT USER :userid USING :passwd};
      #sql{CREATE TABLE SAMPLE1(c1 int,c2 char(10),c3 nchar(5),c4 decimal(10,5))};
    }catch(SQLException e){System.out.println(e.getMessage());};

    //データのインサート
    try{
      int InInt = 100;
      HiRDBCHAR InChar = new HiRDBCHAR("CHAR");
      HiRDBNCHAR InNchar = new HiRDBNCHAR("ＮＣＨＡＲ");
      HiRDBDECIMAL InDecimal = new HiRDBDECIMAL("12345.678");

      #sql{INSERT INTO SAMPLE1 VALUES(:InInt,:InChar,:InNchar,:InDecimal)};
      #sql{COMMIT};
    }catch(SQLException e){System.out.println(e.getMessage());};

    //データの検索(1行検索)
    try{
      //出力変数の宣言
      int OutInt = 0;
      HiRDBCHAR OutChar = new HiRDBCHAR(10);
      HiRDBNCHAR OutNchar = new HiRDBNCHAR(5);
      HiRDBDECIMAL OutDecimal = new HiRDBDECIMAL(10,5);

      #sql {SELECT * INTO :OutInt,:OutChar,:OutNchar,:OutDecimal FROM SAMPLE1};
      System.out.println("c1="+ OutInt +" c2="+ OutChar.getString() +
        " c3="+ OutNchar.getString() + " c4="+ OutDecimal.getString());
    }catch(SQLException e){System.out.println(e.getMessage());};
    try{#sql{DISCONNECT};}catch(SQLException e){System.out.println(e.getMessage());}
  }
}

(3)　CALL文の実行

CALL文を実行するコーディング例（sample3.sqlj）を次に示します。

import java.sql.*;
import JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.*;

public class sample3{
  public static void main(String args[]){

    Integer PInteger1 = new Integer(99);
    Integer PInteger2 = new Integer(100);
    Integer PInteger3 = new Integer(101);try{
      #sql {CONNECT};
    }catch(SQLException e){System.out.println(e.getMessage());}

    try{
      #sql {DROP PROCEDURE PROCSQLJ};
      #sql {DROP TABLE PROCTABLE};
    }catch(SQLException e1){}

    try{
      #sql {CREATE TABLE PROCTABLE(c1 int, c2 int)};
      #sql {CREATE PROCEDURE PROC1(in p1 int,out p2 int,inout p3 int)
        begin
        insert into PROCTABLE values(p1,p3);
        select * into p2,p3 from PROCTABLE;
        end};
      #sql {COMMIT};
    }catch(SQLException e){System.out.println(e.getMessage());}

    try{
      #sql {CALL PROC1(in :PInteger1 ,out :PInteger2 ,inout :PInteger3 )};
    }catch(SQLException e){System.out.println(e.getMessage());}

    System.out.println("INパラメタPInteger1 = " + PInteger1 );
    System.out.println("OUTパラメタPInteger2 = " + PInteger2 );
    System.out.println("INOUTパラメタPInteger3 = " + PInteger3 );

    try{#sql {DISCONNECT};}catch(SQLException e){System.out.println(e.getMessage());}
  }
}

(4)　カーソルを使用した更新

カーソルを使用した更新をするコーディング例（sample4.sqlj）を次に示します。

import java.sql.*;
import JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.*;
#sql iterator iterP implements JP.co.Hitachi.soft.HiRDB.pdjpp.runtime.ForUpdate(short);

public class sample4{
  public static void main(String args[]){
    iterP positer = null;
    iterP positer2 = null;
    short indata;
    short indata2 = 0;
    short indata3 = 999;
    try{
      #sql {CONNECT};
      #sql {DROP TABLE CURTABLE};
    }catch(SQLException e){System.out.println(e.getMessage());}
    //テーブル作成
    try{#sql {CREATE TABLE CURTABLE(c1 smallint)};
    }catch(SQLException e){System.out.println(e.getMessage());}
    //データのインサート
    for(short i = 0;i < 5;i++){
      indata = i;
      try{#sql{INSERT INTO CURTABLE VALUES(:indata)};}catch(SQLException e){}
    }
    //SELECTの実行とカーソルを使用した更新
    try{
      #sql positer = {SELECT * FROM CURTABLE};
    }catch(SQLException e){}
    try{
      while(true){
        #sql {FETCH :positer INTO :indata2};
        if(positer.endFetch()) break;
        System.out.println(indata2);
        #sql { UPDATE CURTABLE SET C1=:indata3 WHERE CURRENT OF :positer };
      }
    }catch(SQLException e){e.getMessage();}
    //更新結果の確認
    try{#sql positer2 = {SELECT * FROM CURTABLE};}catch(SQLException e){}
    try{
      while(true){
        #sql {FETCH :positer2 INTO :indata2};
        if(positer2.endFetch()) break;
        System.out.println(indata2);
      }
    }catch(SQLException e){System.out.println(e.getMessage());}
    try{#sql{DISCONNECT};}catch(SQLException e){}
  }
}

付録

付録A　SQL連絡領域

SQLを実行すると，HiRDBはSQLが正常に実行されたかどうかを示すリターンコードと関連する情報をUAPに返します。これらの情報を受け取るための領域をSQL連絡領域といいます。ここでは，SQL連絡領域の構成と内容，及びSQL連絡領域の展開について説明します。

なお，SQL連絡領域の使用方法については，「SQLのエラーの判定と処置」を参照してください。

付録A.1　SQL連絡領域の構成と内容

SQL実行時の情報を受け取る領域の構成，及び内容について説明します。

(1)　SQL連絡領域の構成

SQL連絡領域の構成を次の図に示します。

図A‒1　SQL連絡領域の構成

注1

( )内は領域の長さ(単位：バイト)を示します。

注2

( )内の[ ]の値は，64ビットモードの場合の長さを示します。なお，64ビットモードのWindowsの場合，SQLCAは336バイトとなります。

注3

64ビットモードでのSQLCABC，SQLCODE，及びSQLERRDの長さは，プラットフォームごとのlong型のサイズになります。

(2)　SQL連絡領域の内容

SQL連絡領域の内容を次の表に示します。

表A‒1　SQL連絡領域の内容

レベル

番号※1

連絡領域名

データ型

長さ

(バイト)

内　　　　　容

1

SQLCA

−

336 [368]

SQL連絡領域全体の名前を表します。

2

SQLCAID

−

8

SQLCAIDC領域，SQLCAIDS領域，及びSQLCAIDE領域の内容を値として持ちます。

3

SQLCAIDC

char

5

SQL連絡領域である文字列('SQLCA')が設定されます。

3

SQLCAIDS

char

2

HiRDBが使用します。

3

SQLCAIDE

char

1

HiRDBが使用します。

2

SQLCABC

long

4 [8]※3

SQL連絡領域の長さ(336 [368]バイト)が設定されています。

2

SQLCODE

long

4 [8]※3

SQL実行後にHiRDBから返されるリターンコードを受け取る領域です。リターンコードには次に示す意味があります。

負：正常に終了していません

０：正常に終了しました

正：正常に終了したが，メッセージ情報があります。

リターンコードに対応するメッセージについては，マニュアル「HiRDB メッセージ」を参照してください。なお，リターンコードに対応するメッセージは，次のように検索します。

リターンコード→対応するメッセージID

　-yyy　　　→ KFPA11yyy

　-1yyy　　 → KFPA19yyy

　-3yyy　　 → KFPA18yyy

　yyy　　　 → KFPA12yyy

　3yyy　　　→ KFPA13yyy

(例)

<リターンコード>→<メッセージID>

　-125　　　　→ KFPA11125

　-1200 　　　→ KFPA19200

　-3200 　　　→ KFPA18200

　100　　　　 → KFPA12100

　3010　　　　→ KFPA13010

2

SQLERRM

−

256

SQLERRML領域，及びSQLERRMC領域の内容を値として持ちます。なお，SQLCODE領域に返されるリターンコードの正負によって次に示すように異なります。

リターンコードが負の場合，誤りの箇所や原因を示す文字列を返すときがある。

リターンコードが正の場合，メッセージ情報を示す文字列を返すときがある。

3

SQLERRML

short

2

SQLERRMC領域に返されるメッセージの長さを示します。

3

SQLERRMC

char

254

SQLCODE領域に返されるリターンコードに対応するメッセージが格納される領域です。設定内容については，マニュアル「HiRDB メッセージ」を参照してください。

2

SQLERRP

char

8

HiRDBが使用します。

2

SQLERRD

long

4※3×6

HiRDBの内部状態を示す領域で，データ型がlongの6個の配列です。

SQLERRD[0]:未使用

SQLERRD[1]:未使用

SQLERRD[2]:

SQLCODEの値が0，又は正の場合：

次のどれかの値が返されます。

・SELECT文で取り出した行数

・UPDATE文で更新した行数

・DELETE文で削除した行数

・INSERT文で挿入した行数

・FETCH文で取り出した行数

・ASSIGN LIST文で作成した行数

・ASSIGN LIST文で名称変更したリストの行数※4

上記以外のSQLを実行する場合は，この領域は使用しないでください。

SQLCODEの値が負の場合：

配列を使った更新時にエラーとなった配列要素を示す値が返されます。

SQLERRD[3]:システムが使用します。

SQLERRD[4]:システムが使用します。

SQLERRD[5]:未使用

2

SQLWARN0

char

1

SQLWARN1〜Fの領域のどれかに警告フラグ('W')が設定された場合に'W'が設定されます。

2

SQLWARN1

char

1

文字データの検索で，データを受け取る埋込み変数の長さが短いために，切り捨てられた値を受け取った場合，'W'が設定されます。

又は，繰返し列の検索で，データを受け取る埋込み変数の要素数が足りなかったために，要素が切り捨てられた値を受け取った場合，'W'が設定されます。

それ以外は空白が設定されます。

2

SQLWARN2

char

1

集合関数の処理でナル値を無視した場合に'W'が設定されます。それ以外は空白が設定されます。

ただし，次のどちらかの場合は，集合関数の処理でナル値を無視しても空白が設定されることがあります。

ナル値を除外値とするインデクスを定義した表を検索する場合

グループ分け高速化機能を使用する場合

2

SQLWARN3

char

1

検索結果の列の数と，その検索結果を受け取る埋込み変数の数が一致しない場合，'W'が設定されます。それ以外は空白が設定されます。

2

SQLWARN4

char

1

WHERE句がないUPDATE文，又はWHERE句がないDELETE文が実行された場合，'W'が設定されます。それ以外は空白が設定されます。

2

SQLWARN5

char

1

予備

2

SQLWARN6

char

1

暗黙的にトランザクションが取り消された場合に'W'が設定されます。それ以外は空白が設定されます。

2

SQLWARN7

char

1

UPDATE文で，SET句又はDELETE句に添字付きの繰返し列を指定した場合，更新する行に要素がなくてその更新が無視されたときに，'W'が設定されます。

それ以外は空白が設定されます。

2

SQLWARN8

char

1

予備

2

SQLWARN9

char

1

予備

2

SQLWARNA※2

char

1

日付演算の結果，存在しない日付が現れると，その月の最終日に修正した場合　'W'　が設定されます。それ以外は空白が設定されます。

2

SQLWARNB※2

char

1

SQL実行時の演算途中でオーバフロー，又は0除算が発生し，その演算結果をナル値とした場合，'W'が設定されます。それ以外は空白が設定されます。

2

SQLWARNC※2

char

1

日付演算の結果の日間隔中の日の部分が，00〜99の範囲内にない場合，'W'が設定されます。それ以外の場合，空白'△'になります。

2

SQLWARND

char

1

HiRDBが使用します。

2

SQLWARNE

char

1

予備

2

SQLWARNF

char

1

予備

2

SQLCASYS

char

16

HiRDBが使用します。

(凡例)　−：該当しません。

注

長さの[ ]内の値は，64ビットモードの場合の長さです。なお，64ビットモードのWindowsの場合，SQLCAは336バイトとなります。

注※1

表のレベル番号は，SQL連絡領域の包含関係を示します。例えば，レベル番号1の連絡領域はレベル番号2の連絡領域で構成されることを示します。

注※2

ソート処理を含むSQL文，又はEXISTS述語を使用したSQL文を実行した場合，最初のFETCH文で'W'を返します。

また，HiRDB/パラレルサーバ環境のとき，WHERE句で警告を出す要因が発生した場合，'W'を返す行が不定となります。

注※3

64ビットモードの場合，プラットフォームごとのlong型のサイズになります。

注※4

システム共通定義でpd_list_rowcount_in_renameオペランドにYを指定した場合だけ参照してください。

付録A.2　SQL連絡領域の展開

SQL連絡領域は，SQLプリプロセサが高級言語のソースプログラム中に展開するため，UAP内に記述する必要はありません。

ここでは，SQLプリプロセサがソースプログラム中に展開したSQL連絡領域の形を示します。

(1)　C言語の場合

C言語の場合のSQL連絡領域の展開形を次に示します。

  #define  SQLCAIDE sqlca.sqlcaide
  #define  SQLCODE  sqlca.sqlcode
  #define  SQLERRML sqlca.sqlerrml
  #define  SQLERRMC sqlca.sqlerrmc
  #define  SQLERRMD sqlca.sqlerrmd
  #define  SQLERRD0 sqlca.sqlerrd[0]
  #define  SQLERRD1 sqlca.sqlerrd[1]
  #define  SQLERRD2 sqlca.sqlerrd[2]
  #define  SQLERRD3 sqlca.sqlerrd[3]
  #define  SQLERRD4 sqlca.sqlerrd[4]
  #define  SQLERRD5 sqlca.sqlerrd[5]
  #define  SQLWARN0 sqlca.sqlwarn0
  #define  SQLWARN1 sqlca.sqlwarn1
  #define  SQLWARN2 sqlca.sqlwarn2
  #define  SQLWARN3 sqlca.sqlwarn3
  #define  SQLWARN4 sqlca.sqlwarn4
  #define  SQLWARN5 sqlca.sqlwarn5
  #define  SQLWARN6 sqlca.sqlwarn6
  #define  SQLWARN7 sqlca.sqlwarn7
  #define  SQLWARN8 sqlca.sqlwarn8
  #define  SQLWARN9 sqlca.sqlwarn9
  #define  SQLWARNA sqlca.sqlwarna
  #define  SQLWARNB sqlca.sqlwarnb
  #define  SQLWARNC sqlca.sqlwarnc
  #define  SQLWARND sqlca.sqlwarnd
  #define  SQLWARNE sqlca.sqlwarne
  #define  SQLWARNF sqlca.sqlwarnf
  typedef struct sqlca {
   char       sqlcaidc[5];    /* 表ＩＤ　　　　　　　 */
   char       sqlcaids[2];    /* ＨｉＲＤＢで使用　　 */
   char       sqlcaide;       /* ＨｉＲＤＢで使用　　 */
   long       sqlcabc;        /* ＳＱＬＣＡの領域長　 */
   long       sqlcode;        /* ＳＱＬＣＯＤＥ　　　 */
   short      sqlerrml;       /* メッセージの有効長　 */
   char       sqlerrmc[254];  /* メッセージテキスト　 */
   char       sqlerrp[8];     /* ＨｉＲＤＢで使用　　 */
   long       sqlerrd[6];     /* ＨｉＲＤＢ内部状態　 */
   char       sqlwarn0;       /* 警告情報有無フラグ　 */
   char       sqlwarn1;       /* 警告情報１　　　　　 */
   char       sqlwarn2;       /* 警告情報２　　　　　 */
   char       sqlwarn3;       /* 警告情報３　　　　　 */
   char       sqlwarn4;       /* 警告情報４　　　　　 */
   char       sqlwarn5;       /* 警告情報５　　　　　 */
   char       sqlwarn6;       /* 警告情報６　　　　　 */
   char       sqlwarn7;       /* 警告情報７　　　　　 */
   char       sqlwarn8;       /* 警告情報８　　　　　 */
   char       sqlwarn9;       /* 警告情報９　　　　　 */
   char       sqlwarna;       /* 警告情報１０　　　　 */
   char       sqlwarnb;       /* 警告情報１１　　　　 */
   char       sqlwarnc;       /* 警告情報１２　　　　 */
   char       sqlwarnd;       /* 警告情報１３（予備） */
   char       sqlwarne;       /* 警告情報１４（予備） */
   char       sqlwarnf;       /* 警告情報１５（予備） */
   char       sqlcasys1[16];  /* 予備　　　　　　　　 */
  } SQLCA;
  extern SQLCA sqlca;

(2)　COBOL言語の場合

COBOL言語の場合のSQL連絡領域の展開形を次に示します。

  01  SQLCA IS EXTERNAL.
    02  SQLCAID    PIC X(8).
    02  FILLER    REDEFINES SQLCAID.
      03  SQLCAIDC  PIC X(5).
      03  SQLCAIDS  PIC X(2).
      03  SQLCAIDE  PIC X(1).
    02  SQLCABC     PIC S9(9) COMP.
    02  SQLCODE     PIC S9(9) COMP.
    02  SQLERRM.
      03  SQLERRML  PIC S9(4) COMP.
      03  SQLERRMC  PIC X(254).
    02  SQLERRP     PIC X(8).
    02  SQLERRD     PIC S9(9) COMP OCCURS 6 TIMES.
    02  SQLWARN.
      03  SQLWARN0  PIC X.
      03  SQLWARN1  PIC X.
      03  SQLWARN2  PIC X.
      03  SQLWARN3  PIC X.
      03  SQLWARN4  PIC X.
      03  SQLWARN5  PIC X.
      03  SQLWARN6  PIC X.
      03  SQLWARN7  PIC X.
    02  SQLEXT.
      03  SQLWARN8  PIC X.
      03  SQLWARN9  PIC X.
      03  SQLWARNA  PIC X.
      03  SQLWARNB  PIC X.
      03  SQLWARNC  PIC X.
      03  SQLWARND  PIC X.
      03  SQLWARNE  PIC X.
      03  SQLWARNF  PIC X.
    02  SQLCASYS1   PIC X(16).

付録B　SQL記述領域

UAP実行時に動的にSQLを組み立てて実行する場合，そのSQLの実行に必要な入出力変数(データの受け渡し領域)の個数や属性などもUAP実行時にしか決まらないことがあります。そのために，入出力変数をUAPの実行時に動的に決定して，その情報(個数，属性，番地など)をHiRDBに通知する領域が必要です。

SQL記述領域は，UAP実行時に動的に決定した入出力変数の情報を記述して，OPEN文，FETCH文，又はEXECUTE文でシステムに通知するための領域です。また，動的に実行する場合，前処理したSQLの検索項目，又は?パラメタの情報をDESCRIBE文で指定して受け取るためにSQL記述領域を使用することもできます。

SQL記述領域を使用できるUAPの記述言語については，「UAPの記述」を参照してください。

付録B.1　SQL記述領域の構成と内容

UAP実行時に動的に決定した入出力変数の情報を記述する領域の構成，及び内容について説明します。

(1)　SQL記述領域の構成

SQL記述領域の構成を次の図に示します。

図B‒1　SQL記述領域の構成

注1

( )内は，領域の長さ(単位：バイト)を示します。

注2

nはSQLNに指定したSQLVARの数を示します。

注3

( )の[ ]内の値は，64ビットモードの場合の長さです。64ビットモードのWindowsの場合，SQLDAは16＋24nバイトとなります。

注4

64ビットモードでのSQLDABCの長さは，プラットフォームごとのlong型のサイズになります。

注※

BLOB型，及びBINARY型のデータを使用する場合，領域名はSQLVAR_LOBとなり，SQLDIM(1)，SQLCOD(1)，SQLXDIM(2)，SQLLOBLEN(4)，SQLDATA(4 [8])，SQLLOBIND(4 [8])から構成されます。

SQLVAR_LOB領域は，SQLVAR領域で定義し，BLOB型のデータ入出力時にSQLVAR領域に上書きする形で使用してください。SQLVAR_LOBの内容については，表「SQLVAR_LOBの内容」を参照してください。

(2)　SQL記述領域の内容

SQL記述領域の内容を次の表に示します。

表B‒1　SQL記述領域の内容

レベル

番号※1

記述領域名

データ型

長さ

(バイト)

値の

設定元

内　　　　　容

1

SQLDA

−

16+16n

[24＋24n]

−

SQL記述領域全体の名前です。

2

SQLDAID

char

8

HiRDB

SQLDAを示すID 'SQLDA△△△'です。DESCRIBE文，又はDESCRIBE TYPE文を発行したとき格納されます。

2

SQLDABC

long

4 [8]※6

HiRDB

SQLDAの長さです。DESCRIBE文，又はDESCRIBE TYPE文を発行したとき格納されます。

2

SQLN※2

short

2

UAP

SQLDAの領域を確保したとき，又はSQLDAを使用するとき，確保したSQLDA領域のSQLVARの個数(1〜30000)を指定します。

HiRDB

DESCRIBE文，又はDESCRIBE TYPE文を発行したときSQLDAの領域が不足(SQLN<SQLD)する場合，2進数の0が格納されます。

2

SQLD

short

2

UAP

OPEN文，又はEXECUTE文を発行するとき，USING句に指定するSQL記述領域のSQLDには，入力?パラメタ数を指定します。

EXECUTE文を発行するとき，INTO句に指定するSQL記述領域のSQLDAには，出力?パラメタ数を指定します。FETCH文を発行するときは，検索項目数(1〜4000)を指定します。

HiRDB

DESCRIBE[OUTPUT]文を発行したとき，2進数の0，検索項目数，又は出力?パラメタ数が設定されます。

0：前処理したSQLがSELECT文以外で，かつ出力?パラメタがあるCALL文以外

検索項目数：前処理したSQLがSELECT文

出力?パラメタ数：前処理したSQLがCALL文

DESCRIBE INPUT文を発行したとき，入力?パラメタ数が設定されます。

DESCRIBE TYPE文を発行したとき，受け取ろうとしたユーザ定義型と継承している，上位のユーザ定義型の全構成要素数が設定されます。ただし，構成要素数が30000を超えた場合，30001が設定されます。

2

SQLVAR

−

16n

[24n]

−

SQLDIM，SQLCOD，SQLXDIM，SQLLEN，SQLSYS，SQLDATA，及びSQLINDから構成される領域。この領域は，SQLNで指定した個数，又はそれ以上の領域として繰り返し定義する必要があります。

3

SQLDIM

unsigned char

1

−

未使用

3

SQLCOD

unsigned char

1

UAP

EXECUTE文，OPEN文,又はFETCH文を発行するときデータコード※3を指定します。

HiRDB

DESCRIBE文，又はDESCRIBE TYPE文を発行後，データコード※3が格納されます。

3

SQLXDIM

short

2

UAP

EXECUTE文，OPEN文，又はFETCH文を発行するとき，SQLDAで指定する変数の領域の構造によって，次の値を指定します。

単純構造の場合：

1

繰返し構造の場合：

2〜30000（領域の最大要素数を示す整数）

データ領域の構造については，「SQLのデータ型とデータ記述」を参照してください。

HiRDB

DESCRIBE文，又はDESCRIBE TYPE文を発行したとき，検索項目又は？パラメタの構造によって，次の値が設定されます。

単純構造の場合：

1

繰返し構造の場合：

2〜30000（領域の最大要素数を示す整数）

3

SQLLEN※3※4

short

2

UAP

EXECUTE文，OPEN文，又はFETCH文を発行するときの埋込み変数の長さ※3を指定します。

HiRDB

DESCRIBE文，又はDESCRIBE TYPE文を発行したとき，データの定義長※3が格納されます。

3

SQLSYS

short

2

UAP

EXECUTE文，OPEN文，又はFETCH文を発行するとき，次の値を指定します。

繰返し構造，又は配列構造の可変長の文字列型（VARCHAR，NVARCHAR，MVARCHAR）を指定した場合，ギャップを含む1要素の領域の長さ

上記以外の場合は0

HiRDB

DESCRIBE文，又はDESCRIBE TYPE文を発行したとき，0が設定されます。

3

SQLDATA※5

unsigned char *

4 [8]

UAP

EXECUTE文，又はOPEN文を発行するとき，?パラメタ値※5が格納されているデータ領域のアドレスを指定します。FETCH文を発行するとき，データを受け取るためのデータ領域のアドレスを指定します。

3

SQLIND※5

short *

4 [8]

UAP

EXECUTE文，OPEN文，又はFETCH文を発行するとき，標識変数有のデータコードをSQLCODEに設定したときだけ，標識変数の値を受け取るための領域のアドレスを指定します。標識変数の値を受け取るための領域は2バイトです。標識変数の有無の指定については，表「SQL記述領域に設定するデータコードとデータの長さ」を参照してください。

(凡例)

△：空白を示します。

−：該当しません。

注

長さの[ ]内の値は，64ビットモードの場合の長さです。なお，64ビットモードのWindowsの場合，SQLCAは16＋24nバイトとなります。

注※1

表のレベル番号は，SQL記述領域の包含関係を示しています。例えば，レベル番号2の記述領域はレベル番号3の記述領域から構成されることを示します。

注※2

UAPがSQLNに設定するSQLVARの数は，SQLDに設定する?パラメタ数，又は検索項目数以上にしてください。?パラメタ数，又は検索項目数よりSQLVARの数が小さい場合，それを知らせるために，HiRDBはSQLNに2進数の0(ゼロ)を返します。

注※3

データの長さ，及びデータコードの詳細については，表「SQL記述領域に設定するデータコードとデータの長さ」を参照してください。

注※4

パック形式10進数(DECIMAL，INTERVAL YEAR TO DAY，又はINTERVAL HOUR TO SECOND)の場合，SQLLENの領域は次の内容で構成されます。

記述領域名

データ型

長さ(バイト)

内　容

SQLPRCSN

B

1

精度(p)

SQLSCALE

B

1

位取り(s)

注※5

SQLDATA，及びSQLINDは，DESCRIBE文を実行した時にクリアされるので，DESCRIBE文を使用する場合，その実行後に値を再設定してください。繰返し列の場合に，値を設定するときは次のような構造になります（例として，SQLDATAについて説明します）。

注※6

64ビットモードの場合，プラットフォームごとのlong型のサイズになります。また，COBOL言語の場合，64ビットモードのときは，long型に対応する宣言は，S9(18) COMPとなります。

SQLのデータの詳細を次の表に示します。

表B‒2　SQL記述領域に設定するデータコードとデータの長さ

データ

コード

10進数

データ

コード

16進数

標識

変数

データ型

データの長さ

単位

0

00

−

HiRDBにはないデータ型

0

バイト

1

01

−

任意のデータ型※1

0

48

30

なし

C VARCHAR(n)※４

1≦n≦32000※２

49

31

あり

68

44

なし

ROW

操作対象表の行長L

1≦L≦30000

69

45

あり

100

64

なし

INTERVAL YEAR TO DAY

精度8，位取り0

けた

101

65

あり

110

6E

なし

INTERVAL HOUR TO SECOND

精度6，位取り0

111

6F

あり

112

70

なし

DATE

4

バイト

113

71

あり

120

78

なし

TIME

3

121

79

あり

124

7C

なし

TIMESTAMP[(p)]

7＋↑p÷2↑

p=0,2,4,又は6

125

7D

あり

131

83

−

抽象データ型※３

−

−

144

90

なし

BINARY(n)

1≦n≦2147483647※２

バイト

145

91

あり

146

92

なし

BLOB[(n)]

1≦n≦2147483647

147

93

あり

154

9A

なし

BINARY位置付け子

4

155

9B

あり

158

9E

なし

BLOB位置付け子

4

159

9F

あり

160

A0

なし

MVARCHAR(n)

1≦n≦32000※２

161

A1

あり

164

A4

なし

MCHAR[(n)]

1≦n≦30000

165

A5

あり

176

B0

なし

NVARCHAR(n)

1≦n≦16000※２

文字

177

B1

あり

180

B4

なし

NCHAR[(n)]，又は

NATIONAL CHAR[ACTER][(n)]

1≦n≦15000

181

B5

あり

192

C0

なし

VARCHAR(n)

1≦n≦32000※２

バイト

193

C1

あり

196

C4

なし

CHAR[ACTER](n)

1≦n≦30000

197

C5

あり

224

E0

なし

FLOAT，又は

DOUBLE PRECISION

8

225

E1

あり

226

E2

なし

SMALLFLT，又は

REAL

4

227

E3

あり

228

E4

なし

[LARGE]DEC[IMAL][(p[，s])]※５

精度p，位取り因数s

1≦p≦38，0≦s≦p

けた

229

E5

あり

234

EA

なし

[LARGE]DEC[IMAL][(p[，s])]※５

精度p，位取り因数s

1≦p≦38，0≦s≦p

235

EB

あり

236

EC

なし

[LARGE]DEC[IMAL][(p[，s])]※５

精度p，位取り因数s

1≦p≦38，0≦s≦p

237

ED

あり

240

F0

なし

INT[EGER]

4

バイト

241

F1

あり

244

F4

なし

SMALLINT

2

245

F5

あり

（凡例）

−：該当しません。

注※1

?パラメタにNULL述語を指定したSQL（? IS NULL）に対して，DESCRIBE INPUT文，又はINPUTを指定したPREPARE文を実行した場合にだけ，HiRDBがこのデータコードを設定します。それ以外の用途ではこのデータコードを使用できません。?パラメタに値を指定するために，DESCRIBE INPUT文，又はINPUTを指定したPREPARE文で受け取ったSQL記述領域を使用する場合は，データコードとデータ長を設定し直してください。

注※2

UAPで長さ0の可変長文字列を設定する場合，SQLLEN領域に1を設定してください。

注※3

DESCRIBE文を実行した場合に，サーバからデータ型が返されます。UAPではデータ型の参照ができます。データ型の設定，及びデータの長さの参照，設定はできません。

注※4

C言語の場合に設定できます。

注※5

DECIMAL型を使用する場合のCOBOL言語のデータ記述との対応を次に示します。COBOL言語のデータ記述の詳細は，「SQLのデータ型とCOBOL言語のデータ記述」を参照してください。

HiRDBのデータ型

データコード

COBOL言語のデータ記述

10進数

16進数

標識変数

[LARGE]

DEC[IMAL]

[(p[，s])]

228

E4

なし

L1 基本項目名

PICTURE S9(p-s)[V9(s)]

COMPUTATIONAL-3.

229

E5

あり

234

EA

なし

L1 基本項目名

PICTURE S9(p-s)[V9(s)]

DISPLAY SIGN LEADING SEPARATE.

235

EB

あり

236

EC

なし

L1 基本項目名

PICTURE S9(p-s)[V9(s)]

DISPLAY SIGN TRAILING.

237

ED

あり

（凡例）

L1：レベル番号01〜49，又は77

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

表B‒3　SQLVAR_LOBの内容

レベル

番号※1

記述領域名

データ型

長さ

(バイト)

値の

設定元

内　　　　　容

2

SQLVAR_LOB

−

16n

[24n]

−

SQLDIM，SQLCOD，SQLXDIM，SQLLOBLEN，SQLDATA， SQLDATA，及びSQLLOBINDから構成される領域です。この領域は，SQLVARで定義し，BLOB型，及びBINARY型のデータを入出力するときにSQLVAR領域に上書きする形で使用してください。

3

SQLDIM

unsigned char

1

−

未使用

3

SQLCOD

unsigned char

1

UAP

EXECUTE文，OPEN文，又はFETCH文を発行するときデータコード※2を指定します。

HiRDB

DESCRIBE文，又はDESCRIBE TYPE文を発行後，データコード※2が格納されます。

3

SQLXDIM

short

2

UAP

EXECUTE文，OPEN文，又はFETCH文を発行するとき，1を指定します。データ領域の構造については，「SQLのデータ型とデータ記述」を参照してください。

HiRDB

DESCRIBE文，又はDESCRIBE TYPE文を発行したとき，1が格納されます。

3

SQLLOBLEN※2

long [int]

4

UAP

EXECUTE文，OPEN文，又はFETCH文を発行するときの埋込み変数の長さ※2を指定します。

HiRDB

DESCRIBE文，又はDESCRIBE TYPE文を発行したとき，データの定義長※2が格納されます。

3

SQLDATA※３

unsigned char *

4 [8]

UAP

EXECUTE文，又はOPEN文を発行するとき，?パラメタ値が格納されているデータ領域のアドレスを指定します。FETCH文を発行するとき，データを受け取るためのデータ領域のアドレスを指定します。

3

SQLLOBIND※３

long *

[int *]

4 [8]

UAP

EXECUTE文，OPEN文，又はFETCH文を発行するとき，標識変数有のデータコードをSQLCODEに設定したときだけ，標識変数の値を受け取るための領域のアドレスを指定します。標識変数の値を受け取るための領域は4バイトです。標識変数の有無の指定については，表「SQL記述領域に設定するデータコードとデータの長さ」を参照してください。

(凡例)

−：該当しません。

注

データ型，及び長さの[ ]内は，64ビットモードの場合のデータ型，及び長さです。

注※1

表のレベル番号は，SQL記述領域の包含関係を示しています。例えば，レベル番号2の記述領域はレベル番号3の記述領域から構成されることを示します。

注※2

データの長さ，及びデータコードの詳細については，表「SQL記述領域に設定するデータコードとデータの長さ」を参照してください。

注※3

SQLDATA，及びSQLLOBINDは，DESCRIBE文を実行した時にクリアされるので，DESCRIBE文を使用する場合，その実行後に値を再設定してください。繰返し列の場合に，値を設定するときの構造については，表「SQL記述領域の内容」の注※5を参照してください。

付録B.2　SQL記述領域の展開

SQL記述領域は，UAP内で宣言することで確保します。

ここでは，ソースプログラム中に展開するSQL記述領域の形，及び使用例を示します。

(1)　SQL記述領域の展開形

(a)　C言語の場合

C言語の場合のSQL記述領域の展開形を次に示します。

  struct {
    char   sqldaid[8];              /* 表ＩＤ　　　　　　　　　　 */
    long   sqldabc;                 /* 表の長さ　　　　　　　　　 */
    short   sqln;                   /* ＳＱＬＶＡＲの配列の要素数 */
    short   sqld;                   /* ？パラメタ数，検索項目数　 */
    struct  sqlvar{                 /* データ情報エリア　　　　　 */
      unsigned char  sqldim;        /* 未使用　　　　　　　　　　 */
      unsigned char  sqlcod;        /* データコード　　　　　　　 */
      short      sqlxdim;           /* 最大要素数　　　　　　　　 */
      union {
        short      sqllen;          /* データ長　　　　　　　　　 */
        struct {
          unsigned char  sqlprcsn;  /* 精度　　　　　　　　　　　 */
          unsigned char  sqlscale;  /* 位取り　　　　　　　　　　 */
        } s_sqllen;
      } sqllen;
      short      sqlsys;            /* 未使用　　　　　　　　　　 */
      unsigned char  *sqldata;      /* データ領域アドレス　　　　 */
      short      *sqlind;           /* 標識変数アドレス　　　　　 */
    } SQLVAR[n];※１
  } sqlda;※２

注※1　nは，必要な個数(1〜30000)を指定します。

注※2　構造体名称( 'sqlda' の部分)は，任意の文字列を指定してください。なお，構造体名称に'SQL'で始まる文字列は指定できません。

(b)　COBOL言語の場合

COBOL言語の場合のSQL記述領域の展開形を次に示します。

Windows版，及び32ビットモードのUNIX版の場合

  01  USQLDA.※1
    02  USQLDAID         PIC  X(8)  VALUE  'SQLDA'.
    02  USQLDABC         PIC  S9(9)  COMP.
    02  USQLN            PIC  S9(4)  COMP.
    02  USQLD            PIC  S9(4)  COMP.
    02  USQLVAR   OCCURS  n  TIMES.※2
      03  USQLTYPE       PIC  S9(4)  COMP.
      03  FILLER  REDEFINES  USQLTYPE.
        04  USQLDIM      PIC  X(1).
        04  USQLCOD      PIC  X(1).
      03  USQLXDIM       PIC  S9(4)  COMP  VALUE  IS  1.
      03  USQLATTR.
        04  USQLLEN      PIC  S9(4)  COMP.
        04  FILLER  REDEFINES  USQLLEN.
          05  USQLPRCSN  PIC  X(1).
          05  USQLSCALE  PIC  X(1).
        04  USQLSYS      PIC  S9(4)  COMP.
      03  FILLER  REDEFINES  USQLATTR.
        04  USQLLOBLEN   PIC  S9(9)  COMP.
      03  USQLDATA  USAGE  IS  ADDRESS.
      03  USQLIND   USAGE  IS  ADDRESS.

注※1　集合項目の名称（'USQLDA'の部分）は，任意の名称を指定してください。なお，データ項目にSQLで始まる文字列は指定できません。

注※2　nは必要な個数（１〜30000）を指定します。

64ビットモードのUNIX版の場合

  01  USQLDA.※1
    02  USQLDAID         PIC  X(8)  VALUE  'SQLDA'.
    02  USQLDABC         PIC  S9(18)  COMP. ※3
    02  USQLN            PIC  S9(4)  COMP.
    02  USQLD            PIC  S9(4)  COMP.
    02  FILLER           PIC  X(4). ※3
    02  USQLVAR   OCCURS  n  TIMES.※2
      03  USQLTYPE       PIC  S9(4)  COMP.
      03  FILLER  REDEFINES  USQLTYPE.
        04  USQLDIM      PIC  X(1).
        04  USQLCOD      PIC  X(1).
      03  USQLXDIM       PIC  S9(4)  COMP  VALUE  IS  1.
      03  USQLATTR.
        04  USQLLEN      PIC  S9(4)  COMP.
        04  FILLER  REDEFINES  USQLLEN.
          05  USQLPRCSN  PIC  X(1).
          05  USQLSCALE  PIC  X(1).
        04  USQLSYS      PIC  S9(4)  COMP.
      03  FILLER  REDEFINES  USQLATTR.
        04  USQLLOBLEN   PIC  S9(9)  COMP.
      03  USQLDATA  USAGE  IS  ADDRESS.
      03  USQLIND   USAGE  IS  ADDRESS.

注※1　集合項目の名称（'USQLDA'の部分）は，任意の名称を指定してください。なお，データ項目にSQLで始まる文字列は指定できません。

注※2　nは必要な個数（１〜30000）を指定します。

注※3　Windows版，及び32ビットモードのUNIX版との違いを次に示します。

・USQLDABCのPICTURE句の内容

・USQLDとUSQLVARの間のFILLER項目の有無

(2)　SQL記述領域の使用例

(a)　SQL記述領域を使用するための宣言，及び領域の確保

SQL記述領域は，UAP内で宣言し，確保します。

(b)　検索項目情報の取得

検索項目情報の取得例を次に示します。

EXEC SQL BEGIN DECLARE SECTION;   .................... 1
struct{   ............................................ 1
long※  cmd_len;   .................................... 1
char  cmd_data[1000];   .............................. 1
}XCMND;   ............................................ 1
EXEC SQL END DECLARE SECTION;   ...................... 1
XCMND.cmd_len=(long※)sprintf(XCMND.cmd_data,
                 "SELECT*FROM ZAIKO WHERE GNO=1")   .. 2
EXEC SQL WHENEVER SQLERROR GO TO :RERROR;   .......... 3
EXEC SQL PREPARE ST1 FROM :XCMND;   .................. 4
EXEC SQL DESCRIBE ST1 INTO :DAREA;   ................. 5

注1　DESCRIBE文を実行すると，SQLD領域に2進数の0，又は検索項目が設定されます。

0：前処理したSQLがSELECT文以外の場合

検索項目：前処理したSQLがSELECT文の場合

注2　各検索項目のデータコードがSQLCODに，データの定義長がSQLLENに，最大要素数がSQLXDIMにそれぞれ設定されます。

注※　64ビットモードの場合は，intとなります。

＜説明＞

SQL格納用の埋込み変数(XCMND)を宣言します。

SQL文を変数(XCMND)に設定します。

SQL実行後のエラーに対する処置を指定します。

変数XCMNDとして指定したSQLを前処理して，SQL文識別子(ST1)を付けます。

SQL(ST1)の検索項目情報をSQL記述領域(DAREA)に取得します。

(c)　受取り領域を動的に決定した検索結果の取出し

DESCRIBE文で得た情報を基に割り当てた領域に検索結果を取り出す場合の例を次に示します。

for(n=0;n<DAREA.sqld;n++){   ...................................... 1
    DAREA.SQLVAR[n].sqldata=(unsigned char *)&(X_INT_DATA[n]);   .. 1
    DAREA.SQLVAR[n].sqlind=&(X_IND[n]);   ......................... 1
}   ................................................................1
EXEC SQL DECLARE CR1 CURSOR FROM ST1;   ........................... 2
EXEC SQL OPEN CR1   ............................................... 3
EXEC SQL WHENEVER NOT FOUND GO TO:FEND;   ......................... 4
for(;;){   ........................................................ 5
    EXEC SQL FETCH CR1 USING DESCRIPTOR:DAREA   ................... 5
                    :   ........................................... 5,6
}   ............................................................... 5
    EXEC SQL WHENEVER NOT FOUND CONTINUE;   ....................... 7
FEND:EXEC SQL CLOSE CR1;   ........................................ 8

注　FETCH文を実行するまでに，次に示す情報をDAREAに設定してください。

SQLVAR配列の大きさ(SQLN)

検索結果を受け取る領域の個数(SQLD)：DESCRIBE文を実行すると設定される。

受取り領域のデータ型(SQLCOD)：DESCRIBE文を実行すると設定される。

受取り領域のデータ長(SQLLEN)：DESCRIBE文を実行すると設定される。

＜説明＞

割り当てた領域の番地をSQL記述領域(DAREA)に設定する。

SQL文識別子(ST1)に対してカーソル(CR1)を宣言する。

カーソル(CR1)を開く。

検索終了時の処理(FENDへの分岐)を指定する。

カーソル(CR1)を次の行に位置付け，その行をSQL記述領域(DAREA)で指定した領域に取り出す。

編集・出力など検索結果に対する処理を指定する。

検索終了時の処置を無効にする。

カーソル(CR1)を閉じる。

(d)　?パラメタに対する値を指定するためのデータ領域の動的決定

動的に指定された表にデータを挿入する場合の例を次に示します。

char TNAME[30];   ............................................... 1
scanf("%S",TNAME);   ............................................ 2
XCMND.cmd_len=(long※)sprint(XCMND.cmd_data,
                    "SELECT * FROM %S",TNAME);   ................ 3

EXEC SQL PREPARE ST1 FROM:XCMND;   .............................. 3

EXEC SQL DESCRIBE ST1 INTO:DAREA;   ............................. 3
         :   .................................................... 4
for(n=0;n<DAREA.sqld;n++){   .................................... 5
DAREA.SQLVAR[n].sqldata=(unsigned char *)&(X_INT_DATA[n]);   .... 5
DAREA.SQLVAR[n].sqlind=&(X_IND[n]);   ........................... 5
}   ............................................................. 3
XCMND.cmd_len=(long※)sprit(XCMND.cmd_data,
              "INSERT INTO %S VALUES(?,…,?)",TNAME);   ......... 6
 EXEC SQL PREPARE ST2 FROM:XCMND;   ............................. 7
for(;;){   ...................................................... 8
   〔挿入データの入力（データがない場合，ＩＥＮＤに分岐）〕;   .. 8
   〔データ領域，標識変数領域にデータを挿入〕;   ................ 8
  EXEC SQL EXECUTE ST2 USING DESCRIPTOR:DAREA;   ................ 8
}   ............................................................. 8
IEND:

注※　64ビットモードの場合は，intとなります。

＜説明＞

表名を格納する変数(TNAME)を宣言します。

入力データから変数(TNAME)に表名を読み込みます。

?パラメタの個数，及び各?パラメタに対するデータ領域のデータ型，データ長，最大要素数として，2で指定された表の列数，各列のデータ型，データの定義長，最大要素数をDESCRIBE文を利用して，SQL記述領域(DAREA)に設定します。

各?パラメタに対するデータ領域を確保して割り当てます。

割り当てた領域の番地をSQL記述領域(DAREA)に設定します。

指定された表にデータを挿入するためのINSERT文を生成します。

XCMND中のINSERT文を前処理して，SQL文識別子(ST2)を付けます。

挿入するデータがない間，行単位に挿入データの入力，データ領域への設定，EXECUTE文による実行を繰り返します。

(e)　FETCH文でDECIMAL型のデータを検索する場合の例

FETCH文でDECIMAL型のデータを検索する例を次に示します。

データ領域，及び標識変数の宣言

EXEC  SQL  BEGIN  DECLARE  SECTION ;

   SQL TYPE IS DECIMAL(20,0) xdec1 ;     /* データ領域       */
   short                     xdec1_i ;   /* 標識変数         */

EXEC  SQL  END  DECLARE  SECTION ;

SQL記述領域の設定

PDSQLCOD(usrsqlda, 2)=PDSQL_DECIMAL_I ; /* データコード設定  */

  PDSQLPRCSN(usrsqlda, 2)=20          ; /* 精度の設定        */
  PDSQLSCALE(usrsqlda, 2)= 0          ; /* 位取りの設定      */
  PDSQLDATA(usrsqlda, 2)=(void*)xdec1 ; /* 埋込み変数アドレス*/
                                        /* 設定              */
  PDSQLXDIM(usrsqlda, 2)=1;             /* 繰返し列ではない  */

PDSQLIND(usrsqlda, 2)=(void*)&xdec1_i ; /* 標識変数アドレス  */
                                        /* 設定              */

(3)　SQL記述領域の展開方法

SQL記述領域の展開方法を次の表に示します。

表B‒4　SQL記述領域の展開方法

言語

インクルードファイルを利用する

ユーザが直接記述する

C

#include <pdbsqlda.h>

PDUSRSQLDA(n) usrsqlda;

SQL記述領域の展開形を直接コーディングします。

COBOL

COPY SQLDA※

[ REPLACING 256 BY n ].

SQL記述領域の展開形を直接コーディングします。必ず01レベルから記述してください。

注※　64ビットモードの場合はSQLDAをSQLDA64に変更してください。

COBOL言語の場合のSQL記述領域でパラメタを指定した場合の記述例を次に示します。

EXEC  SQL
    BEGIN  DECLARE  SECTION
END   EXEC
01  IN-CHR1  PIC  X(15).
01  IN-IND1  PIC  S9(4)  COMP.
EXEC  SQL
    END  DECLARE  SECTION
END-EXEC
COPY  SQLDA.
         :
COMPUTE  USQLDABC=32
COMPUTE  USQLN=1
COMPUTE  USQLD=1
COMPUTE  USQLDATA(1)=FUNCTION  ADDR(IN-CHR1)
MOVE  SQLCNST0    TO USQLDIM(1)
MOVE  SQLDCOD197  TO USQLCOD(1)
COMPUTE  USQLXDIM(1)=1
COMPUTE  USQLLEN(1)=15
COMPUTE  USQLIND(1)=FUNCTION  ADDR(IN-INT1)
EXEC  SQL
    EXECUTE  ST1  USING  DESCRIPTOR  :USQLDA
END-EXEC

(4)　SQL記述領域操作用マクロ

C言語では，SQLDAの宣言，及び値の設定・参照用に各種のマクロが定義されています。これらのマクロは専用のヘッダファイル（pdbsqlda.h）をUAPにインクルードすることで使用できます。SQL記述領域操作用マクロを次の表に示します。

表B‒5　SQL記述領域操作用マクロ

マクロ名

機能

PDUSRSQLDA(m)

ユーザ用SQLDAを宣言します。

PDSETSIZE(usrsqlda,m)

SQLDAのサイズを設定します。

PDSQLN(usrsqlda)

?パラメタ数を設定します。

PDSQLD(usrsqlda)

?パラメタ，検索項目数を設定・参照します。

PDSQLCOD(usrsqlda,n)

データコードを設定・参照します。

PDSQLLEN(usrsqlda,n)

?パラメタの実長を設定・参照します（BLOBと10進数以外）。

PDSQLPRCSN(usrsqlda,n)

精度を設定・参照します（10進数だけ）。

PDSQLSCALE(usrsqlda,n)

位取りを設定・参照します（10進数だけ）。

PDSQLDATA(usrsqlda,n)

データ領域のアドレスを設定します。

PDSQLIND(usrsqlda,n)

標識変数アドレスを設定します。

PDSQLLOBLEN(usrsqlda,n)

BLOBのデータ長を設定・参照します。

PDSQLDIM(usrsqldata,n)

未使用領域の値を設定・参照します。

PDSQLXDIM(usrsqldata,n)

繰り返し構造の最大要素数を設定・参照します。

PDSQLSYS(usrsqldata,n)

繰り返し構造又は配列構造の可変長の文字列型のギャップを含む1要素の長さを設定します。

（凡例）

usrsqlda：ユーザ定義のSQL記述領域名。任意の値を指定してください。

m：？パラメタの個数（1〜30000）

n：設定，又は参照する？パラメタの番号（0〜29999）

データ型指定用マクロを次の表に示します。

表B‒6　データ型指定用マクロ

マクロ名

標識変数

対応するデータ型

PDSQL_FLOAT

なし

FLOAT

PDSQL_FLOAT_I

あり

PDSQL_SMALLFLT

なし

SMALLFLT

PDSQL_SMALLFLT_I

あり

PDSQL_DECIMAL

なし

DECIMAL

PDSQL_DECIMAL_I

あり

PDSQL_INTEGER

なし

INTEGER

PDSQL_INTEGER_I

あり

PDSQL_SMALLINT

なし

SMALLINT

PDSQL_SMALLINT_I

あり

PDSQL_VARCHAR

なし

VARCHAR

PDSQL_VARCHAR_I

あり

PDSQL_CHAR

なし

CHAR

PDSQL_CHAR_I

あり

PDSQL_NVARCHAR

なし

NVARCHAR

PDSQL_NVARCHAR_I

あり

PDSQL_NCHAR

なし

NCHAR

PDSQL_NCHAR_I

あり

PDSQL_MVARCHAR

なし

MVARCHAR

PDSQL_MVARCHAR_I

あり

PDSQL_MCHAR

なし

MCHAR

PDSQL_MCHAR_I

あり

PDSQL_DATE

なし

DATE

PDSQL_DATE_I

あり

PDSQL_TIME

なし

TIME

PDSQL_TIME_I

あり

PDSQL_YEARTODAY

なし

INTERVAL YEAR TO DAY

PDSQL_YEARTODAY_I

あり

PDSQL_HOURTOSEC

なし

INTERVAL HOUR TO SECOND

PDSQL_HOURTOSEC_I

あり

PDSQL_ROW

なし

ROW

PDSQL_ROW_I

あり

PDSQL_BLOB

なし

BLOB

PDSQL_BLOB_I

あり

PDSQL_TIMESTAMP

なし

TIMESTAMP

PDSQL_TIMESTAMP_I

あり

PDSQL_BINARY

なし

BINARY

PDSQL_BINARY_I

あり

PDSQL_BLOB_LOC

なし

BLOB位置付け子

PDSQL_BLOB_LOC_I

あり

PDSQL_BINARY_LOC

なし

BINARY位置付け子

PDSQL_BINARY_LOC_I

あり

PDSQL_CVARCHAR

なし

C言語用のVARCHAR

PDSQL_CVARCHAR_I

あり

C言語の場合のSQL記述領域でパラメタを指定した場合の記述例を次に示します。

#include <pdbsqlda.h>              /* ヘッダファイルのインクルード */

EXEC  SQL  BEGIN  DECLARE  SECTION ;
short  xint1 ;
char   xchr1[16] ;
EXEC  SQL  END  DECLARE  SECTION ;
PDUSRSQLDA(2)  usrsqlda ;                /* ＳＱＬ記述領域の宣言　 */
          :
ClearSqlda(2) ;                          /* SQL記述領域のクリア　 */
PDSQLCOD(usrsqlda, 0)=PDSQL_SMALLINT ;   /* データコード設定　　　 */
PDSQLLEN(usrsqlda, 0)=sizeof(short) ;    /* データ長設定　　　　　 */
PDSQLDATA(usrsqlda, 0)=(void*)&xint ;    /* 埋込み変数アドレス設定 */
PDSQLIND(usrsqlda, 0)=NULL ;             /* 標識変数アドレス設定　 */
PDSQLCOD(usrsqlda, 1)=PDSQL_CHAR ;       /* データコード設定　　　 */
PDSQLLEN(usrsqlda, 1)=sizeof(xchar)-1 ;  /* データ長設定　　　　　 */
PDSQLDATA(usrsqlda, 1)=(void*)xchr ;     /* 埋込み変数アドレス設定 */
PDSQLIND(usrsqlda, 1)=NULL ;             /* 標識変数アドレス設定　 */

EXEC  SQL
    EXECUTE  ST1  USING  DESCRIPTOR  :usrsqlda ;
          :
/*******************************************************************/
/* SQL記述領域初期設定                                             */
/*******************************************************************/
void ClearSqlda(
short num)
{
  PDSETSIZE(usrsqlda, 2) ;             /* SQL記述領域のサイズ設定 */
  PDSQLN(usrsqlda) = num ;             /* 配列サイズの上限設定　  */
  PDSQLD(usrsqlda) = num ;             /* ？パラメタ数の設定　　  */
  while(num-->0) {
    PDSQLDATA(usrsqlda, num) = NULL ; /* 埋込み変数のクリア　　　　 */
    PDSQLIND(usrsqlda, num) = NULL ;  /* 標識変数のクリア　　　　　 */
    PDSQLDIM(usrsqlda, num) = 0 ;     /* 未使用領域のクリア　　　　 */
    PDSQLXDIM(usrsqlda, num) = 1 ; /* 繰り返し構造の要素数クリア　　 */
    PDSQLSYS(usrsqlda, num) = 0 ;  /* 配列，繰り返し構造の要素サイズ */
    PDSQLCOD(usrsqlda, num) = 0 ;     /* データコードクリア　　　　  */
    PDSQLLEN(usrsqlda, num) = 0 ;     /* データ長クリア　　　　　　  */
  }
  return ;
}

(5)　繰返し列の展開形式

繰返し列の埋込み変数は，コンパイル時にマクロ定義によって表B-7に示す構造体が展開されます。ここでは，C言語の場合について説明します。

繰返し列操作用のマクロは，展開される構造体のメンバを使用して繰返し列の要素を参照します。

ユーザが領域を確保して，SQL記述領域にアドレスを直接設定する場合は，領域を語境界に割り当てる必要があります。FLOAT ARRAYの場合は，語境界調整のために空領域が明示的に含まれていますが，SQL記述領域に設定するアドレスは，空領域分を考慮して設定する必要があります。

なお，これらの展開形式は，上記の領域確保での境界調整，及び構造体のサイズを取得する場合にだけ指定してください。埋込み変数として繰返し列を指定する場合は，展開形式を指定しないで，「SQLのデータ型とデータ記述」のマクロを使用してください。

表B‒7　繰返し列の展開形式

SQLのデータ型

マクロ名

展開形式

SMALL INT ARRAY[m]

PD_MV_SINT(m)

struct {

long mcnt;

short data[m];

}

INTTGER ARRAY[m]

PD_MV_INT(m)

struct{

long mcnt

long data[m];

}

SMALL FLT ARRAY[m]

PD_MV_SFLT(m)

struct{

long mcnt;

float data[m];

}

FLOAT ARRAY[m]

PD_MV_FLT(m)

struct{

union {

double resv1;

struct {

long resv2;

long mcnt;

}mcnt_dmy2;

} mcnt_dmy1;

double data[m];

}

CHAR(n) ARRAY[m]

PD_MV_CHAR(m, n)

struct {

long mcnt;

char data[m][(n)+1];

}

NCHAR(n) ARRAY[m]

PD_MV_NCHAR(m, n)

struct {

long mcnt;

char data[m][2*(n)+1];

}

VARCHAR(n) ARRAY[m]

PD_MV_VCHAR(m, n)

struct {

long mcnt;

struct {

short len;

char str[n];

} data[m];

}

PD_MV_CVCHAR(m, n)

struct {

long mcnt;

char data[m][(n)+1];

}

NVARCHAR(n) ARRAY[m]

PD_MV_NVCHAR(m, n)

struct {

long mcnt;

struct {

short len;

char str[2*(n)+1];

} data[m];

}

DECIMAL

〔(p〔,s〕)〕ARRAY[m]

PD_MV_DEC(m, p, s)

struct {

long mcnt;

unsigned char data[m][(p)/2+1];

}

付録C　列名記述領域

SQL記述領域を使用して次の情報を受け取る場合，同時に列名記述領域を指定することで，列名情報，及びルーチンのパラメタ情報も受け取れます。

検索項目情報（検索項目数，及び各検索項目のデータ型，データ長，最大要素数）

CALL文の入力，出力？パラメタ情報（？パラメタ数，及び？パラメタのデータ型，データ長）

ここでは，列名記述領域の構成と内容，及び列名記述領域の展開について説明します。

付録C.1　列名記述領域の構成と内容

列名情報を受け取る列名記述領域の構成と内容について説明します。

(1)　列名記述領域の構成

列名記述領域の構成を次の図に示します。

図C‒1　列名記述領域の構成

注

( )内は領域の長さ(単位：バイト)を示します。

注※

SQLNAMECは，最大長30バイトの可変長文字列の配列です。配列の大きさは，SQL記述領域のSQLVAR配列の大きさと同じです。SQLVAR配列の大きさについては，「SQL記述領域の構成と内容」を参照してください。

(2)　列名記述領域の内容

列名記述領域の内容を次の表に示します。

表C‒1　列名記述領域の内容

取得情報項目

検索項目の種類

内　　　　　容

検索項目

列（添字指定なし）

列名

列（添字指定あり）

列名［添字］

集合関数

△△COUNT(*)

△△COUNT_FLOAT(*)

{△ {■｜△} 関数名(列名)｜

△ {■｜△} 関数名(DISTINCT列名)｜

△△関数名(△EXP) }

ウィンドウ関数

△△EXP(整数)

値式(定数を含む)

△△EXP(整数)

WRITE指定

△△EXP(整数)

ROW

△△ROW

CALL文の入力？パラメタ

？パラメタ

ルーチンのパラメタ名

CALL文の出力？パラメタ

ユーザ定義型の構成要素

属性

属性名

CALL COMMAND文の入力？パラメタ

？パラメタ

コマンド名称：'COMMAND_NAME'

WITH句：

（1番目の場合）'WITH'

（2番目以降の場合）'WITH（引数の番号）'

INPUT句：'INPUT'

ENVIRONMENT句：'ENVIRONMENT'

SERVER句：'SERVER'

CALL COMMAND文の出力？パラメタ

？パラメタ

OUTPUT TO句：'OUTPUT'

ERROR TO句：'ERROR'

RETRUN CODE TO句：'RETURN_CODE'

(凡例)

■：X'FF'を示します。

△：空白を示します。

注1

列名記述領域のi番目の要素に検索項目のi番目の列名情報が設定されます。

注2

検索項目が列の場合は先頭から列名が設定され，添字を含めた長さが30バイトを超えるときは，30バイト以下になるように列名の後ろを切り捨てます。

検索項目が列以外の場合は，1〜2バイト目に空白が設定されます。なお，30バイトを超える場合は，2バイト目にX'FF'が設定されます。

注3

整数は，項目が何番目に検索されるかを表します。

注4

UNION[ALL]，又はEXCEPT[ALL]の場合，最初に指定した問合せの検索項目の内容が設定されます。

注5

AS 列名を指定している場合は，AS 列名で指定した列名の内容が設定されます。

注6

ルーチンのパラメタ名は，CALL文の引数に単独で？パラメタを指定したときだけ設定されます。？パラメタを含む値式を指定した場合は，SQLNAMELが0になります。

注7

検索項目が導出表の列の場合，導出表の後の導出列リストを省略し，かつ問合せの選択式に列名がない導出列のときは，△NONAMEが設定されます。

付録C.2　列名記述領域の展開

列名記述領域は，UAP内で宣言することで静的なエリアとして確保します。

(1)　C言語の場合

C言語の場合のソースプログラム中に展開する列名記述領域の形式を次に示します。

struct {
    short       sqlnz;             /* 配列の有効数　 */
    struct {
      short     sqlnamel;          /* 列名の有効長　 */
      char      sqlnamec[30];      /* 列名格納エリア */
    } SQLNAME[n];※1
}×××××;※2

注※1　nは，SQL記述領域のSQLVARの配列の大きさと同じ個数(1〜30000)を指定します。

注※2　構造体名称( '×××××' の部分)は，任意の文字列を指定してください。なお，構造体名称に 'SQL' で始まる文字列は指定できません。また，DESCRIBE文で列名記述領域を指定する場合，確保した領域の名称を指定します。

(2)　COBOL言語の場合

COBOL言語の場合のソースプログラム中に展開する列名記述領域の形式を次に示します。

01  SQLCNDA.※１
  02  SQLNZ  PIC  S9(4) COMP.
  02  SQLNAME  OCCURS  1  TIMES  n.※２
    03  SQLNAMEL  PIC  S9(4)  COMP.
    03  SQLNAMEC  PIC  X(30).

注※1　集合項目の名称（'SQLCNDA'の部分）は，任意の名称を指定してください。なお，データ項目に'SQL'で始まる文字列は指定できません。また，集合項目のレベルは必ず01レベルにしてください。

注※2　nは必要な個数（1〜30000）を指定します。

付録D　型名記述領域

SQL記述領域を使用して，検索項目情報，及びユーザ定義型の定義情報を受け取る場合，型名記述領域を指定すればユーザ定義型のデータ型名も受け取れます。

ここでは，型名記述領域の構成と内容，及び型名記述領域の展開について説明します。

付録D.1　型名記述領域の構成

型名記述領域の構成を次の図に示します。

図D‒1　型名記述領域の構成

注

( )内は領域の長さ(バイト)を示します。

注※

SQLTNVARは，最大長10バイトの可変長文字列SQLSCHEMA，及び最大長32バイトの可変長文字列SQLTYPEから構成される構造体の配列です。配列の大きさは，SQL記述領域のSQLVAR配列の大きさと同じです。SQLVAR配列の大きさについては，「SQL記述領域の構成と内容」を参照してください。

付録D.2　型名記述領域の内容

型名記述領域の内容を次の表に示します。

表D‒1　型名記述領域の内容

レベル番号※

型名領域名

データ型

長さ

(バイト)

内　容

1

SQLTNDA

−

2＋42×n

型名記述領域全体の名前を表します。

2

SQLTZ

short

2

検索項目数を指定します。

2

SQLTNVAR

−

42×n

認可識別子，データ型識別子から構成される領域です。

3

SQLSCHEMA

−

10

ユーザ定義型の認可識別子の情報を持つ領域です。

4

SQLSCHEMAL

short

2

認可識別子の長さが設定されます。

対応する検索項目のデータ型がユーザ定義型でない場合，0が設定されます。

4

SQLSCHEMAC

char

8

認可識別子が設定されます。

3

SQLTYPE

−

32

ユーザ定義型のデータ型識別子の情報を持つ領域です。

4

SQLTYPEL

short

2

ユーザ定義型の長さが設定されます。

対応する検索項目のデータ型がユーザ定義型でない場合，0が設定されます。

4

SQLTYPEC

char

30

ユーザ定義型のデータ型識別子が設定されます。

（凡例）−：該当しません。

注※

表のレベル番号は，型名記述領域の包含関係を示します。例えば，レベル番号2の記述領域はレベル番号3の記述領域から構成されることを示します。

付録D.3　型名記述領域の展開

型名記述領域は，UAP内で宣言することで静的なエリアとして確保します。

(1)　C言語の場合

C言語の場合のソースプログラム中に展開する型名記述領域の形式を次に示します。

  struct {
      short         sqltz;               /*  配列の有効数              */
      struct {
          struct {
              short     sqlschemal;      /*  認可識別子の有効長        */
              char      sqlschemac[8 ];  /*  認可識別子格納エリア      */
          } sqlschema;
          struct {
              short     sqltypel;        /*  ユーザ定義型名の有効長    */
              char      sqltypec[30];    /*  ユーザ定義型名格納エリア  */
          } sqltype;
      } sqltnvar[n];※１
  } Usrsqltnda;※２

注※1

nは，SQL記述領域のSQLVARの配列の大きさと同じ個数（1〜30000）を指定します。

注※2

構造体名称（’Usrsqltnda’の部分）は，任意の文字列を指定してください。なお，構造体名称に’SQL’で始まる文字列は指定できません。また，DESCRIBE文で型名記述領域を指定する場合，確保した領域の名称を指定します。

(2)　COBOL言語の場合

COBOL言語の場合のソースプログラム中に展開する型名記述領域の形式を次に示します。

  01  USQLTNDA. ※１
    02  USQLTZ  PIC  S9(4) COMP.
    02  USQLTNVAR  OCCURS  1  TIMES  n. ※２
      03  USQLSCHEMA.
        04  USQLSCHEMAL  PIC  S9(4)  COMP.
        04  USQLSCHEMAC  PIC  X(8).
      03  USQLTYPE.
        04  USQLTYPEL  PIC  S9(4)  COMP.
        04  USQLTYPEC  PIC  X(30).

注※1

集合項目の名称（’USQLTNDA’の部分）は，任意の名称を指定してください。なお，データ項目に’SQL’で始まる文字列は指定できません。

注※2

nはSQL記述領域のSQLVARの配列の大きさと同じ個数（1〜30000）を指定します。

付録E　文字集合名記述領域

文字集合名記述領域は，UAP実行時に動的に決定した入出力変数の文字集合名を記述して，OPEN文，FETCH文，又はEXECUTE文でシステムに通知するための領域です。また，動的に実行する場合，前処理したSQLの検索項目，又は？パラメタの文字集合名の受け取りのために文字集合名記述領域を使用することもできます。

文字集合名記述領域を使用できるUAPの記述言語については，「UAPの記述」を参照してください。

付録E.1　文字集合名記述領域の構成と内容

UAP実行時に動的に決定した入出力変数の文字集合名を記述する領域の構成，及び内容について説明します。

(1)　文字集合名記述領域の構成

文字集合名記述領域の構成を次の図に示します。

図E‒1　文字集合名記述領域の構成

注1

( )内は領域の長さ(バイト)を示します。

注2

nはSQLCVARNに指定したSQLCVARの数を示します。

mはSQLCSNNに指定したSQLCSNの数を示します。

注3

( )の[ ]内の値は，64ビットモードの場合の長さです。なお，64ビットモードのWindowsの場合は32ビットモードと同じになります。

注4

64ビットモードでのSQLCSNBCの長さは，プラットフォームごとのlong型のサイズになります。

(2)　文字集合名記述領域の内容

文字集合名記述領域の内容を次の表に示します。

表E‒1　文字集合名記述領域の内容

レベル

番号※1

記述領域名

データ型

長さ

(バイト)

値の

設定元

内　　　　　容

1

SQLCSNA

−

32[36]※2

+2×n

+64×m

−

文字集合名記述領域全体の名前です。

2

SQLCSNID

char

8

HiRDB

SQLCSNAを示すID 'SQLCSNA△'です。DESCRIBE文，DESCRIBE CURSOR文，又はPREPARE文を発行したとき格納されます。

2

SQLCSNBC

long

4 [8]※2

HiRDB

SQLCSNAの長さです。DESCRIBE文，DESCRIBE CURSOR文，又はPREPARE文を発行したとき格納されます。

2

SQLCVARN

short

2

UAP

SQLCSNAの領域を確保したとき，又はSQLCSNAを使用するとき，確保したSQLCSNA領域のSQLCVARの個数(1〜30000)を指定します。

HiRDB

DESCRIBE文，DESCRIBE CURSOR文，又はPREPARE文を発行したときSQLCSNAの領域が不足(SQLCVARN<SQLCVARD)する場合，2進数の0が格納されます。

2

SQLCVARD

short

2

UAP

OPEN文，EXECUTE文，EXECUTE IMMEDIATE文，又はFETCH文を発行するとき，入力？パラメタに対する文字集合情報を指定したSQLCVARの要素番号の最大値を指定します。

HiRDB

DESCRIBE[OUTPUT]，DESCRIBE CURSOR文，又はPREPARE文を発行したとき，2進数の0，検索項目数，又は出力？パラメタに対応する文字集合情報が設定されたSQLCVARの要素番号の最大値が設定されます。

0：

次のどれかの場合に設定されます。

SQLがSELECT文以外で，かつ出力？パラメタがあるCALL文以外である

検索項目，又は出力？パラメタが既定文字集合以外の文字集合を持たない

最大要素番号：

次のすべての条件を満たす場合に設定されます。

SQLがSELECT文，又は出力？パラメタがあるCALL文である

検索項目，出力？パラメタが既定文字集合以外の文字集合を持つ

DESCRIBE INPUT文，又はPREPARE文を発行したとき，2進数の0，又は入力？パラメタに対応する文字集合情報が設定されたSQLCVARの要素番号の最大値が設定されます。

0：

次のどれかの場合に設定されます。

SQL文中に入力？パラメタを含まない

入力？パラメタが既定文字集合以外の文字集合を持たない

最大要素番号：

次のすべての条件を満たす場合に設定されます。

SQL文中に入力？パラメタを含む

入力？パラメタが既定文字集合以外の文字集合を持つ

2

SQLCSNN

short

2

UAP

SQLCSNAの領域を確保したとき，確保したSQLCSN領域の個数（1）を指定します。

HiRDB

DESCRIBE文，DESCRIBE CURSOR文，又はPREPARE文を発行したとき，SQLCSNの領域が不足（SQLCSNN＜SQLCSND）する場合，2進数の0が格納されます。

2

SQLCSND

short

2

UAP

OPEN文，EXECUTE文，EXECUTE IMMEDIATE文，又はFETCH文を発行するとき，入力？パラメタで使用する文字集合数（1）を指定します。

HiRDB

DESCRIBE[OUTPUT]，DESCRIBE CURSOR文，又はPREPARE文を発行した場合，SQLCSNの領域が不足（SQLCSNN＜SQLCSND）するとき，2進数の0，検索項目，又は出力？パラメタで使用する文字集合数が格納されます。

0：

次のどれかの場合に設定されます。

SQLがSELECT文以外で，かつ出力？パラメタがあるCALL文以外である

検索項目，又は出力？パラメタが既定文字集合以外の文字集合を持たない

最大要素番号：

次のすべての条件を満たす場合に設定されます。

SQLがSELECT文，又は出力？パラメタがあるCALL文である

検索項目，出力？パラメタが既定文字集合以外の文字集合を持つ

DESCRIBE INPUT文，又はPREPARE文を発行したとき，2進数の0，又は入力？パラメタで使用している文字集合数が設定されます。

0：

次のどれかの場合に設定されます。

SQL文中に入力？パラメタを含まない

入力？パラメタが既定文字集合以外の文字集合を持たない

最大要素番号：

次のすべての条件を満たす場合に設定されます。

SQL文中に入力？パラメタを含む

入力？パラメタが既定文字集合以外の文字集合を持つ

2

SQLCSNEX

−

12

−

未使用

2

SQLCVAR

−

2×n

−

SQLCSNXから構成される領域。この領域は，SQLDAのSQLVARに対応する領域であり，SQLCVARNで指定した個数分を繰り返し定義する必要があります。

3

SQLCSNX

short

2

UAP

OPEN文，EXECUTE文，EXECUTE IMMEDIATE文，又はFETCH文を発行するとき，入力？パラメタに対する文字集合名を持つSQLCSNの要素番号を指定します。

HiRDB

DESCRIBE文，DESCRIBE CURSOR文，又はPREPARE文を発行したとき，検索項目又は？パラメタで使用している文字集合名を持つSQLCSNの要素番号が格納されます。検索項目，又は出力？パラメタ中に文字集合指定がない場合は，2進数の0が格納されます。

DESCRIBE INPUT文，PREPARE文を発行したとき，入力？パラメタで使用している文字集合名を持つSQLCSNの要素番号が格納されます。入力？パラメタ中に文字集合指定がない場合は，2進数の0が格納されます。

2

SQLCSN

−

64×m

−

SQLCSOL，SQLCSOC，SQLCSNL，及びSQLCSNCから構成される領域。この領域は文字集合情報ごとの領域であり，SQLCSNNで指定した個数の領域を繰り返し定義する必要があります。

3

SQLCSOL

short

2

UAP

OPEN文，EXECUTE文，EXECUTE IMMEDIATE文，又はFETCH文を発行するとき，認可識別子の長さを指定します。

HiRDB

DESCRIBE文，DESCRIBE CURSOR文，又はPREPARE文を発行したとき，認可識別子の長さが格納されます。

3

SQLCSOC

char

30

UAP

OPEN文，EXECUTE文，EXECUTE IMMEDIATE文，又はFETCH文を発行するとき，認可識別子を指定します。

HiRDB

DESCRIBE文，DESCRIBE CURSOR文，又はPREPARE文を発行したとき，認可識別子が格納されます。

3

SQLCSNL

short

2

UAP

OPEN文，EXECUTE文，EXECUTE IMMEDIATE文，又はFETCH文を発行するとき，文字集合名の長さを指定します。

HiRDB

DESCRIBE文，DESCRIBE CURSOR文，又はPREPARE文を発行したとき，文字集合名の長さが格納されます。

3

SQLCSNC

char

30

UAP

OPEN文，EXECUTE文，EXECUTE IMMEDIATE文，又はFETCH文を発行するとき，文字集合名を指定します。

HiRDB

DESCRIBE文，DESCRIBE CURSOR文，又はPREPARE文を発行したとき，文字集合名が格納されます。

(凡例)

△：空白を示します。

−：該当しません。

注※1

表のレベル番号は，文字集合名記述領域の包含関係を示しています。例えば，レベル番号2の記述領域はレベル番号3の記述領域から構成されることを示します。

注※2

長さの[ ]内の値は，64ビットモードの場合の長さです。なお，64ビットモードのWindowsの場合は32ビットモードと同じになります。

(3)　文字集合名記述領域のSQLCSNに設定できる文字集合情報

UAPがSQLCSNに設定できる文字集合情報の内容を次の表に示します。

表E‒2　UAPがSQLCSNに設定できる文字集合情報の内容

SQLCSOL

SQLCSOC

SQLCSNL

SQLCSNC

6

MASTER

6

EBCDIK※1

6

MASTER

8

UTF-16LE※2

6

MASTER

8

UTF-16BE※2

6

MASTER

5

UTF16※2

注※1

pdntenvコマンド（UNIX版の場合はpdsetupコマンド）で，文字コード種別にsjisを指定した場合にだけ使用できます。

注※2

pdntenvコマンド（UNIX版の場合はpdsetupコマンド）で，文字コード種別にutf-8，又はutf-8_ivsを指定した場合にだけ使用できます。

C言語のUTF-16のデータ記述を使用する場合，又はCOBOL2002のUnicode機能を使用して，COBOL言語の日本語項目（PICTURE N）を含むデータ記述を使用する場合，文字集合UTF16，UTF-16LE及びUTF-16BEを設定します。

C言語のUTF-16のデータ記述については，「SQLのデータ型とC言語のデータ記述」を参照してください。COBOL言語の日本語項目（PICTURE N）を含むデータ記述については，「SQLのデータ型とCOBOL言語のデータ記述」を参照してください。

文字集合UTF16，UTF-16LE及びUTF-16BEの属性を次の表に示します。

表E‒3　文字集合UTF16，UTF-16LE及びUTF-16BEの属性

文字集合名

使用形式

文字レパートリ

UTF-16LE

UTF-16リトルエンディアン

UTF-16でコード化できるUnicodeの文字

UTF-16BE，UTF16

UTF-16ビッグエンディアン

結果の文字集合がUTF16となるSQLの検索項目，又は？パラメタに対してDESCRIBE文，DESCRIBE TYPE文，DESCRIBE CURSOR文，PREPARE文を発行した場合，HiRDBは文字集合名記述領域に文字集合名としてUTF16を設定します。

OPEN文，EXECUTE文，EXECUTE IMMEDIATE文，FETCH文で結果の文字集合がUTF16となるSQLの検索項目，又は？パラメタのデータを取り出す場合，又はUTF-16で表現されたデータを？パラメタを用いてHiRDBにデータを渡す場合，文字集合名にUTF16，UTF-16LE，又はUTF-16BEを指定してください。

(4)　SQL記述領域との関係

SQL記述領域と文字集合名記述領域の関係を次の図に示します。

図E‒2　SQL記述領域と文字集合名記述領域の関係

（凡例）

N：SQLN設定値（SQLVARの最大数）

D：SQLD設定値（SQLVARの有効数）

n：SQLCVARN設定値（SQLCVARの最大数）

dn：SQLCVARD設定値（SQLCVARの有効数）

m：SQLCSNN設定値（SQLCSNの最大値）

dm：SQLCSND設定値（SQLCSNの有効値）

付録E.2　文字集合名記述領域の展開

文字集合名記述領域は，UAP内で宣言することで確保します。

ここでは，ソースプログラム中に展開する文字集合名記述領域の形，及び使用例を示します。

(1)　文字集合名記述領域の展開形

(a)　C言語の場合

C言語の場合の文字集合名記述領域の展開形を次に示します。

struct {
    char    sqlcsnid[8];           /* SQLCSNAを示す名称        */
    long    sqlcsnbc;              /* SQLCSNAの長さ            */
    short   sqlcvarn;              /* SQLCVAR配列の要素数      */
    short   sqlcvard;              /* SQLCVARの有効数          */
    short   sqlcsnn;               /* SQLCSN配列の要素数       */
    short   sqlcsnd;               /* SQLCSNの有効数           */
    char    sqlcsnex[12];          /* 予備                      */
    struct sqlcvar {
        short   sqlcsnx;           /* 対応する文字集合名を持つ  */
                                   /* SQLCSNの番号             */
    } SQLCVAR[m]; ※1
    struct sqlcsn {
       short   sqlcsol;            /* 認可識別子の有効長        */
       char    sqlcsoc[30];        /* 認可識別子格納エリア      */
       short   sqlcsnl;            /* 文字集合名の有効長        */
       char    sqlcsnc[30];        /* 文字集合名格納エリア      */
    } SQLCSN[n]; ※2
} sqlcsna; ※3

注※1　mは，必要な個数(1〜30000)を指定します。

注※2　nは，必要な個数(1)を指定します。

注※3　構造体名称( 'sqlcsna' の部分)は，任意の文字列を指定してください。なお，構造体名称に'SQL'で始まる文字列は指定できません。

(b)　COBOL言語の場合

COBOL言語の場合の文字集合名記述領域の展開形を次に示します。

01  USQLCSNA.※1
    02  USQLCSNID        PIC  X(8)  VALUE  'SQLCSNA'.
    02  USQLCSNBC        PIC  S9(9)  COMP.※4
    02  USQLCVARN        PIC  S9(4)  COMP.
    02  USQLCVARD        PIC  S9(4)  COMP.
    02  USQLCSNN         PIC  S9(4)  COMP.
    02  USQLCSND         PIC  S9(4)  COMP.
    02  USQLCSNEX        PIC  X(12).
    02  USQLCVAR  OCCURS  m  TIMES. ※2
      03  USQLCSNX       PIC  S9(4)  COMP.
    02  USQLCSN   OCCURS  n  TIMES. ※3
      03  USQLCSOL       PIC  S9(4)  COMP.
      03  USQLCSOC       PIC  X(30).
      03  USQLCSNL       PIC  S9(4)  COMP.
      03  USQLCSNC       PIC  X(30).

注※1　集合項目の名称（'USQLCSNA'の部分）は，任意の名称を指定してください。なお，データ項目にSQLで始まる文字列は指定できません。

注※2　mは必要な個数（１〜30000）を指定します。

注※3　nは必要な個数（１）を指定します。

注※4　64ビットモードのUNIXの場合は，USQLCSNBCのPICTURE句をS9(18)に変更してください。

(2)　文字集合名記述領域の展開方法

文字集合名記述領域の展開方法を次の表に示します。

表E‒4　文字集合名記述領域の展開方法

言語

インクルードファイルを利用する

ユーザが直接記述する

C

#include <pdbsqlcsna.h>

PDUSRSQLCSNA(m,n) usrsqlcsna

m，n，usrsqlcsnaについては，「文字集合名記述領域操作用マクロ」を参照してください。

文字集合名記述領域の展開形を直接コーディングします。

COBOL

COPY SQLCSNA※

[ REPLACING 256 BY m

==OCCURS 1 == BY ==OCCURS n == ].

文字集合名記述領域の展開形を直接コーディングします。必ず01レベルから記述してください。

注※　64ビットモードの場合は，SQLCSNAをSQLCSNA64に変更してください。

(3)　文字集合名記述領域操作用マクロ

C言語では，SQLCSNAの宣言，及び値の設定・参照用に各種のマクロが定義されています。これらのマクロは専用のヘッダファイル（pdbsqlcsna.h）をUAPにインクルードすることで使用できます。文字集合名記述領域操作用マクロを次の表に示します。

表E‒5　文字集合名記述領域操作用マクロ

マクロ名

機能

PDUSRSQLCSNA(m,n)

ユーザ用SQLCSNAを宣言します。

PDSETCSNASIZE(usrsqlcsna,m,n)

SQLCSNAのサイズを設定します。

PDSQLCVARN(usrsqlcsna)

SQLCVAR配列の要素数を設定します。

PDSQLCVARD(usrsqlcsna)

SQLCVARの有効数を設定・参照します。

PDSQLCSNN(usrsqlcsna)

SQLCSN配列の要素数を設定します。

PDSQLCSND(usrsqlcsna)

SQLCSNの有効数を設定・参照します。

PDSQLCSNX(usrsqlcsna,o)

対応する文字集合名を持つSQLCSNの番号を設定・参照します。

PDSQLCSOL(usrsqlcsna,p)

文字集合の認可識別子の長さを設定・参照します。

PDSQLCSOC(usrsqlcsna,p)

文字集合の認可識別子を設定・参照します。

PDSQLCSNL(usrsqlcsna,p)

文字集合の文字集合名の長さを設定・参照します。

PDSQLCSNC(usrsqlcsnaa,p)

文字集合の文字集合名を設定・参照します。

（凡例）

usrsqlcsna：ユーザ定義の文字集合名記述領域名。任意の値を指定してください。

m：？パラメタの個数（1〜30000）

n：文字集合名の個数（0〜1）

o：設定，若しくは参照する？パラメタ，又は検索項目の番号（0〜29999）

p：設定，又は参照する文字集合名の番号（0）

文字集合名指定用マクロを次の表に示します。

表E‒6　文字集合名指定用マクロ

マクロ名

機能

PDSQL_CS_MASTER_L

認可識別子MASTERの長さ

PDSQL_CS_MASTER_C

認可識別子MASTERの文字列

PDSQL_CS_EBCDIK_L

文字集合名EBCDIKの長さ

PDSQL_CS_EBCDIK_C

文字集合名EBCDIKの文字列

PDSQL_CS_UTF16_L

文字集合名UTF16の長さ

PDSQL_CS_UTF16_C

文字集合名UTF16の文字列

PDSQL_CS_UTF_16LE_L

文字集合名UTF-16LEの長さ

PDSQL_CS_UTF_16LE_C

文字集合名UTF-16LEの文字列

PDSQL_CS_UTF_16BE_L

文字集合名UTF-16BEの長さ

PDSQL_CS_UTF_16BE_C

文字集合名UTF-16BEの文字列

付録F　SQLのデータ型とデータ記述

付録F.1　SQLのデータ型とC言語のデータ記述

SQLのデータ型とC言語のデータ記述の対応を示します。

なお，データの受け渡しには，対応するデータ型以外に，変換，又は代入できるデータ型も使用できます。

(1)　SQLのデータ型とC言語のデータ記述

SQLのデータ型とC言語のデータ記述を次の表に示します。

表F‒1　SQLのデータ型とC言語のデータ記述

SQLのデータ型

C言語のデータ記述

備　　考

SMALLINT

short 変数名;

−

INTEGER

long 変数名;

−

DECIMAL

[(p[，s])]

SQL TYPE IS

DECIMAL(p,s)

変数名;※5

1≦p≦38，0≦s≦p

SMALLFLT，REAL

float 変数名;

−

FLOAT(DOUBLE PRECISION)

double 変数名;

−

CHAR[(n)]

[CHARACTER SET 文字集合指定]

char

[CHARACTER SET[IS]

文字集合指定]

変数名[n+1];※1

1≦n≦30000

文字集合指定：[MASTER.]EBCDIK

CHAR[(2n)]

CHARACTER SET 文字集合指定

char

CHARACTER SET[IS]

文字集合指定

変数名[2n+2];

1≦n≦15000

文字集合指定：[MASTER.]UTF16

SQL TYPE IS CHAR(2n)

CHARACTER SET[IS]

文字集合指定

変数名;※10

VARCHAR(n)

[CHARACTER SET 文字集合指定]

struct{

short 変数名1;

char 変数名2[n];

}[CHARACTER SET[IS]

文字集合指定]

構造体名;

1≦n≦32000

変数名1：文字列長（バイト数）

変数名2：文字列

文字集合指定：[MASTER.]EBCDIK

SQL TYPE IS

VARCHAR(n)

[CHARACTER SET[IS]

文字集合指定]

変数名;※6

VARCHAR

[CHARACTER SET[IS]

文字集合指定]

変数名[n+1];※9

VARCHAR(2n)

CHARACTER SET 文字集合指定

struct{

short 変数名1;

char 変数名2[2n];

}CHARACTER SET[IS]

文字集合指定

構造体名;

1≦n≦16000

変数名1：文字列長

変数名2：文字列

文字列長：

バイト数で，2の倍数

文字集合指定：[MASTER.]UTF16

SQL TYPE IS

VARCHAR(2n)

CHARACTER SET[IS]

文字集合指定

変数名;※11

VARCHAR

CHARACTER SET[IS]

文字集合指定

変数名[2n+2];※10

NCHAR[(n)]

char 変数名[2n+1];※1

1≦n≦15000

NVARCHAR(n)

struct{

short 変数名1;

char 変数名2[2n];

}構造体名;

1≦n≦16000

変数名1：文字列長（文字数）

変数名2：文字列

SQL TYPE IS

NVARCHAR(n)

変数名;※6

MCHAR[(n)]

char 変数名[n+1];※1

1≦n≦30000

MVARCHAR(n)

struct{

short 変数名1;

char 変数名2[n];

}構造体名;

1≦n≦32000

変数名1：文字列長（バイト数）

変数名2：文字列

SQL TYPE IS

MVARCHAR(n)

変数名;※6

DATE

char 変数名[11];※2

−

TIME

char 変数名[9];※2

−

INTERVAL YEAR TO DAY

SQL TYPE IS

DECIMAL(8,0)

変数名;※5

−

INTERVAL HOUR TO SECOND

SQL TYPE IS

DECIMAL(6,0)

変数名;※5

−

TIMESTAMP[(p)]

char 変数名[n+1];※2

p=0の場合はn=19

p=2の場合はn=21,22

p=4の場合はn=23,24

p=6の場合はn=25,26

ROW※3

char 変数名[n+1];

1≦全体長≦30000

BLOB

SQL TYPE IS BLOB(n{K｜M｜G})

変数名;※4

単位省略時：

1≦n≦2147483647

単位がK：

1≦n≦2097152

単位がM：

1≦n≦2048

単位がG：

1≦n≦2

BINARY(n)

struct{

long 変数名1;

char 変数名2[n];

}構造体名;

1≦n≦2147483647

変数名1：文字列長（バイト数）

変数名2：文字列

SQL TYPE IS BINARY(n)

変数名;※7

BLOB位置付け子

SQL TYPE IS BLOB AS LOCATOR

変数名;※8

−

BINARY位置付け子

SQL TYPE IS BINARY AS LOCATOR

変数名;※8

−

標識変数

BLOB，BINARY，BLOB位置付け子，BINARY位置付け子以外

short 変数名;

−

BLOB，BINARY，BLOB位置付け子，BINARY位置付け子

long 変数名;

SQL文

struct{

long 変数名1;

char 変数名2[n];

}構造体名;

1≦n≦2000000

変数名1：文字列長（バイト数）

変数名2：文字列

（凡例）

n：長さ（バイト）

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

−：なし

注

64ビットモードの場合，longの代わりにintを使用してください。

注※1

SQLのデータ型(CHAR(n)，NCHAR(n)，MCHAR(n))と，C言語のデータ型(char[n+1]，char[2n+1]，char[n+1])との間での変換規則を示します。

・入力時

char[n+1]からCHAR(n)への変換

char[2n+1]からNCHAR(n)への変換

char[n+1]からMCHAR(n)への変換

C言語の文字列からHiRDBが受け取る固定長文字列の長さは，先頭からナル文字の一つ前までの長さとします。なお，n+1個の配列要素の中にナル文字がない場合，長さをnとします。

・出力時

CHAR(n)からchar[n+1]への変換

NCHAR(n)からchar[2n+1]への変換

MCHAR(n)からchar[n+1]への変換

文字列の終端にナル文字を付け加え，UAPでの文字列長はSQLの文字列長に1を加えます。

注※2

動的SQLで日付データ(DATE)を検索する場合，DESCRIBE文で取得した検索項目情報のデータコードを文字データ型に，データ長を10バイト以上に設定する必要があります。また，動的SQLで時刻データを検索する場合，DESCRIBE文で取得した検索項目情報のデータコードを文字データ型に，データ長を8バイト以上に設定する必要があります。

動的SQLで時刻印データ（TIMESTAMP）を検索する場合，次のように設定してください。

DESCRIBE文で取得した検索項目情報のデータコードは，文字データ型にしてください。

pが0の場合は，データ長を19バイト以上にしてください。pが2，4，又は6の場合は，20+pバイト以上にしてください。

注※3

HiRDBサーバとHiRDBクライアントのエンディアンが同じ場合にだけ，ROW型を使用できます。

注※4

BLOBのUAPの記述は，内部的に次のように展開されます。

struct{
      long           変数名_reserved;         … 1
      unsigned long  変数名_length;           … 2
      char           変数名_data[m];          … 3
}変数名

[説明]

変数名_reservedは，使用しません。64ビットモードの場合は，int 変数名_reserved;となります。

変数名_lengthは，BLOBの実際の長さになります。64ビットモードの場合は，unsigned int 変数名_length;となります。

変数名_data[m]は，BLOBのデータ格納領域(mは実際のデータ長)になります。

注※5

DECIMALのUAPの記述は，内部的に次のように展開されます。

unsigned char 変数名[↓p/2↓+1];

DECIMALのデータは1バイトで2けたの数字を表現します。符号は，右端のバイトの右4ビットで表します。そのため，偶数けたのDECIMAL型の場合，左端の左4ビットに0を補う必要があります。0以外の値は設定しないでください。

標準的な符号表現を次に示します。HiRDBでのDECIMAL型の符号については，マニュアル「HiRDB SQLリファレンス」を参照してください。

符号の16進数表現

意　味

X'C'

正の符号とみなします。正数には0を含みます。

X'D'

負の符号とみなします。

（記述例）

123.4567の場合（奇数けた）

unsigned char ex1[4]={0x12,0x34,0x56,0x7c} ;

-123.456の場合（偶数けた）

unsigned char ex2[4]={0x01,0x23,0x45,0x6d} ;

0の場合（奇数けた）

unsigned char ex3[1]={0x0c} ;

注※6

内部的に次のように展開されます。

struct{
         short   len;
         char    str[n];
}変数名

NVARCHARの場合は，str[2n]になります。

注※7

内部的に次のように展開されます。

struct{
         long  len;
         char  str[n];
}変数名

なお，64ビットモードの場合，「long len;」は「int len;」になります。

注※8

内部的に次のように展開されます。

unsigned long 変数名;

なお，64ビットモードの場合，「unsigned long 変数名;」は「unsigned int 変数名;」になります。

注※9

内部的に次のように展開されます。

char 変数名[n+1];

文字列長は，先頭からNULL文字の一つ前までの長さになります。なお，C言語の文字列を受け取る場合，n+1個の配列要素中にNULL文字がないときは，エラーとなります。

注※10

内部的に次のように展開されます。

＜プリプロセサの-XU16オプションで型指定子を指定しなかった場合＞

char 変数名[2n+2];

＜プリプロセサの-XU16オプションで型指定子を指定した場合＞

型指定子 変数名[n+1];

-XU16オプションについては，「UNIX環境でのプリプロセス」，又は「Windows環境でのプリプロセス」を参照してください。

注※11

内部的に次のように展開されます。

＜プリプロセサの-XU16オプションで型指定子を指定しなかった場合＞

struct{
         short  len;
         char   str[2n];
} 変数名;

＜プリプロセサの-XU16オプションで型指定子を指定した場合＞

struct{
         short     len;
         型指定子  str[n];
} 変数名;

-XU16オプションについては，「UNIX環境でのプリプロセス」，又は「Windows環境でのプリプロセス」を参照してください。

(2)　配列を使用した場合のSQLのデータ型とC言語のデータ記述

配列を使用した場合のSQLのデータ型とC言語のデータ記述を次の表に示します。

表F‒2　配列を使用した場合のSQLのデータ型とC言語のデータ記述

SQLのデータ型

C言語のデータ記述

備　　考

SMALLINT

short 変数名[m];

−

INTEGER

long 変数名[m];

−

DECIMAL[(p[,s])]

SQL TYPE IS DECIMAL(p,s)

変数名[m];

1≦p≦38，0≦s≦p

SMALLFLT，

REAL

float 変数名[m];

−

FLOAT

(DOUBLE PRECISION)

double 変数名[m];

−

CHAR[(n)]

[CHARACTER SET 文字集合指定]

char

[CHARACTER SET[IS]

文字集合指定]

変数名[m][n+1];

1≦n≦30000

文字集合指定：[MASTER.]EBCDIK

CHAR[(2n)]

CHARACTER SET 文字集合指定

char

CHARACTER SET[IS]

文字集合指定

変数名[m][2n+2];

1≦n≦15000

文字集合指定：[MASTER.]UTF16

SQL TYPE IS CHAR(2n)

CHARACTER SET[IS]

文字集合指定

変数名[m];

VARCHAR(n)

[CHARACTER SET 文字集合指定]

struct{

short 変数名1;

char 変数名2[n];

}[CHARACTER SET[IS]

文字集合指定]

構造体名[m];

1≦n≦32000

文字集合指定：[MASTER.]EBCDIK

SQL TYPE IS VARCHAR(n)

[CHARACTER SET[IS]

文字集合指定]

変数名[m];

VARCHAR

[CHARACTER SET[IS]

文字集合指定]

変数名[m][n+1];

VARCHAR(2n)

CHARACTER SET 文字集合指定

struct{

short 変数名1;

char 変数名2[2n];

}CHARACTER SET[IS]

文字集合指定

構造体名[m];

1≦n≦16000

変数名1：文字列長

変数名2：文字列

文字列長：

バイト数で，2の倍数

文字集合指定：

[MASTER.]UTF16

SQL TYPE IS VARCHAR(n)

CHARACTER SET[IS]

文字集合指定

変数名[m];

VARCHAR

CHARACTER SET[IS]

文字集合指定

変数名[m][2n+2];

NCHAR[(n)]

char 変数名[m][2n+1];

1≦n≦15000

NVARCHAR(n)

struct{

short 変数名1;

char 変数名2[2n];

}構造体名[m];

1≦n≦16000

SQL TYPE IS NVARCHAR(n)

変数名[m];

MCHAR[(n)]

char 変数名[m][n+1];

1≦n≦30000

MVARCHAR(n)

struct{

short 変数名1;

char 変数名2[n];

}構造体名[m];

1≦n≦32000

SQL TYPE IS MVARCHAR(n)

変数名[m];

DATE

char 変数名[m][11];

−

TIME

char 変数名[m][9];

−

TIMESTAMP[(p)]

char 変数名[m][n+1];

p=0の場合はn=19

p=2の場合はn=21,22

p=4の場合はn=23,24

p=6の場合はn=25,26

INTERVAL YEAR

TO DAY

SQL TYPE IS DECIMAL(8,0)

変数名[m];

−

INTERVAL HOUR TO SECOND

SQL TYPE IS DECIMAL(6,0)

変数名[m];

−

ROW

char 変数名[m][n+1];

1≦n≦30000

BLOB

記述できない

−

BINARY

struct{

long 変数名1;

char 変数名2[n];

}構造体名[m];

配列を使用したFETCHの場合

4≦n≦2147483644（nは4の倍数であること）

配列を使用したFETCH以外の場合

4≦n≦32000（nは4の倍数であること）

SQL TYPE IS BINARY(n)

変数名[m];

BLOB位置付け子

記述できない

−

BINARY位置付け子

SQL TYPE IS

BINARY AS LOCATOR

変数名[m];

−

標識変数

BINARY，BINARY位置付け子以外

short 変数名[m];

−

BINARY，BINARY位置付け子

long 変数名[m];

−

SQL文

記述できない

−

(凡例)

ｍ：配列の要素数（1〜4,096）

n：長さ（バイト）

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

−：なし

注

64ビットモードの場合，longの代わりにintを使用してください。

(3)　繰返し列を使用した場合のSQLのデータ型とC言語のデータ記述

繰返し列を使用した場合のSQLのデータ型とC言語のデータ記述を次の表に示します。

表F‒3　繰返し列を使用した場合のSQLのデータ型とC言語のデータ記述

SQLのデータ型

C言語のデータ記述

備　　考

SMALLINT

PD_MV_SINT(m)　変数名;

−

INTEGER

PD_MV_INT(m)　変数名;

−

DECIMAL

PD_MV_DEC(m,p,s)　変数名;

1≦p≦38，0≦s≦p

SMALLFLT，

REAL

PD_MV_SFLT(m)　変数名;

−

FLOAT

(DOUBLE PRECISION)

PD_MV_FLT(m)　変数名;

−

CHAR[(n)]

PD_MV_CHAR(m,n)　変数名;

1≦n≦30000

VARCHAR(n)

PD_MV_VCHAR(m,n)　変数名;

1≦n≦32000

PD_MV_CVCHAR(m,n)　変数名;

NCHAR[(n)]

PD_MV_NCHAR(m,n)　変数名;

1≦n≦15000

NVARCHAR(n)

PD_MV_NVCHAR(m,n)　変数名;

1≦n≦16000

MCHAR[(n)]

PD_MV_CHAR(m,n)　変数名;

1≦n≦30000

MVARCHAR(n)

PD_MV_VCHAR(m,n)　変数名;

1≦n≦32000

DATE

PD_MV_CHAR(m,10)　変数名;

−

TIME

PD_MV_CHAR(m,8)　変数名;

−

TIMESTAMP[(p)]

PD_MV_CHAR(m,n)　変数名;

p=0の場合はn=19

p=2の場合はn=21,22

p=4の場合はn=23,24

p=6の場合はn=25,26

INTERVAL YEAR

TO DAY

PD_MV_DEC(m,8,0)　変数名;

−

INTERVAL HOUR TO SECOND

PD_MV_DEC(m,6,0)　変数名;

−

ROW

記述できない

−

BLOB

記述できない

−

BINARY

記述できない

−

標識変数（BLOB，BINARY，BLOB位置付け子，BINARY位置付け子以外）

PD_MV_SINT(m)　変数名;

−

SQL文

記述できない

−

(凡例)

m：繰返し列の最大要素数（2〜30,000）

n：長さ（バイト）

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

−：なし

(4)　埋込み変数の参照・設定に使用するマクロ

繰返し列を使用した場合のSQLのデータ型とC言語のデータ記述では，各データ型の埋込み変数の参照・設定に，専用のマクロを使用します。埋込み変数の参照・設定に使用するマクロを次の表に示します。

表F‒4　埋込み変数の参照・設定に使用するマクロ

SQLのデータ型

マクロ名

参照・設定するデータ

データ型

SMALLINT

PD_MV_SINT_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_SINT_DATA(変数名，m)

繰返しの各要素

short

INTEGER

PD_MV_INT_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_INT_DATA(変数名，m)

繰返しの各要素

long※

DECIMAL[(p[,s])]

PD_MV_DEC_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_DEC_DATA(変数名，m)

繰返しの各要素の10進数の先頭アドレス

unsigned

SMALLFLT，

REAL

PD_MV_SFLT_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_SFLT_DATA(変数名，m)

繰返しの各要素

float

FLOAT

(DOUBLE PRECISION)

PD_MV_FLT_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_FLT_DATA(変数名，m)

繰返しの各要素

double

CHAR[(n)]

PD_MV_CHAR_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_CHAR_DATA(変数名，m)

繰返しの各要素の，文字列の先頭アドレス

char[ ]

VARCHAR(n)

PD_MV_VCHAR_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_VCHAR_LEN(変数名，m)

繰返しの各要素の，文字列の実長

short

PD_MV_VCHAR_STR(変数名，m)

繰返しの各要素の，文字列のアドレス

char[ ]

PD_MV_CVCHAR_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_CVCHAR_DATA(変数名，m)

繰返しの各要素の，文字列のアドレス

char[ ]

NCHAR[(n)]

PD_MV_NCHAR_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_NCHAR_DATA(変数名，m)

繰返しの各要素の，文字列の先頭アドレス

char[ ]

NVARCHAR(n)

PD_MV_NVCHAR_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_NVCHAR_LEN(変数名，m)

繰返しの各要素の，文字列の実長

short

PD_MV_NVCHAR_STR(変数名，m)

繰返しの各要素の，文字列の先頭アドレス

char[ ]

MCHAR[(n)]

PD_MV_CHAR_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_CHAR_DATA(変数名，m)

繰返しの各要素の，文字列の先頭アドレス

char[ ]

MVARCHAR(n)

PD_MV_VCHAR_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_VCHAR_LEN(変数名，m)

繰返しの各要素の，文字列の実長

short

PD_MV_VCHAR_STR(変数名，m)

繰返しの各要素の，文字列のアドレス

char[ ]

DATE

CHAR(10)と同じ

−

−

TIME

CHAR(8)と同じ

−

−

TIMESTAMP[(p)]

CHAR(n)と同じ

p=0の場合はn=19

p=2の場合はn=21,22

p=4の場合はn=23,24

p=6の場合はn=25,26

−

−

INTERVAL YEAR TO DAY

DECIMAL(8,0)と同じ

−

−

INTERVAL HOUR TO SECOND

DECIMAL(6,0)と同じ

−

−

標識変数

PD_MV_SINT_CNT(変数名)

繰返し列全体の標識

long※

PD_MV_SINT_DATA(変数名，m)

繰返し列の各要素の標識

short

(凡例)

−：該当しません。

ｍ：繰返し列の各要素を示す番号（0〜m-1）

n：長さ（バイト）

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

注※

64ビットモードの場合，intとなります。

繰返し列用の埋込み変数を参照・設定するマクロの使用例を次に示します。

EXEC SQL BEGIN DECLARE SECTION;
char xname[5];
PD_MV_SINT(4) xmten;
PD_MV_CHAR(4,5) xmkamoku;
EXEC SQL END DECLARE SECTION;
         :
strcpy(xname,"山田")
PD_MV_SINT_DATA(xmten,0)=90;
PD_MV_SINT_DATA(xmten,1)=65;
PD_MV_SINT_DATA(xmten,2)=85;
PD_MV_SINT_DATA(xmten,3)=55;
PD_MV_SINT_CNT(xmten)=4;
strcpy(PD_MV_CHAR_DATA(xmkamoku,0),"数学");
strcpy(PD_MV_CHAR_DATA(xmkamoku,1),"国語");
strcpy(PD_MV_CHAR_DATA(xmkamoku,2),"理科");
strcpy(PD_MV_CHAR_DATA(xmkamoku,3),"社会");
PD_MV_CHAR_CNT(xmkamoku)=4;
EXEC SQL
  INSERT INTO 成績表(氏名,科目,成績) VALUES(:xname,:xmkamoku,:xmten);

(5)　ポインタ変数とC言語のデータ記述

ポインタ変数とC言語のデータ記述を次の表に示します。

表F‒5　ポインタ変数とC言語のデータ記述

SQLのデータ型

C言語のデータ記述

備考

SMALLINT

short *変数名;

−

INTEGER

long *変数名;

−

DECIMAL[(p[,s])]

SQL TYPE IS DECIMAL(p,s)

*変数名;

1≦p≦38，0≦s≦p

SMALLFLT，REAL

float *変数名;

−

FLOAT

(DOUBLE PRECISION)

double *変数名;

−

CHAR[(n)]

[CHARACTER SET 文字集合指定]

char

[CHARACTER SET[IS]

文字集合指定]*変数名;

1≦n≦30000※

文字集合指定：[MASTER.]EBCDIK

CHAR[(2n)]

CHARACTER SET 文字集合指定

SQL TYPE IS CHAR(2n)

CHARACTER SET[IS]

文字集合指定 *変数名;

1≦n≦15000

文字集合指定：

[MASTER.]UTF16

VARCHAR(n)

[CHARACTER SET 文字集合指定]

struct {

short 変数名1;

char 変数名2[n];

} [CHARACTER SET[IS]

文字集合指定]*構造体名;

1≦n≦32000

変数名1：文字列長（バイト数）

変数名2：文字列

文字集合指定：[MASTER.]EBCDIK

SQL TYPE IS VARCHAR(n)

[CHARACTER SET[IS]

文字集合指定] *変数名;

VARCHAR

[CHARACTER SET[IS]

文字集合指定] *変数名;※

VARCHAR(2n)

CHARACTER SET 文字集合指定

struct {

short 変数名1;

char 変数名2[2n];

} CHARACTER SET[IS]

文字集合指定 *構造体名;

1≦n≦16000

変数名1：文字列長

変数名2：文字列

文字列長：

バイト数で，2の倍数

文字集合指定：

[MASTER.]UTF16

SQL TYPE IS VARCHAR(2n)

CHARACTER SET[IS]

文字集合指定 *変数名;

NCHAR[(n)]

char *変数名;

1≦n≦15000※

NVARCHAR(n)

struct {

short 変数名1;

char 変数名2[2n];

} *構造体名;

1≦n≦16000

変数名1：文字列長（文字数）

変数名2：文字列

SQL TYPE IS NVARCHAR(n)

*変数名;

MCHAR[(n)]

char *変数名;

1≦n≦30000※

MVARCHAR(n)

struct {

short 変数名1;

char 変数名2[n];

} *構造体名;

1≦n≦32000

変数名1：文字列長（バイト数）

変数名2：文字列

SQL TYPE IS MVARCHAR(n)

*変数名;

DATE※

char *変数名;

−

TIME※

char *変数名;

−

TIMESTAMP※

char *変数名;

−

INTERVAL YEAR TO DAY

SQL TYPE IS DECIMAL(8,0)

*変数名;

−

INTERVAL HOUR TO SECOND

SQL TYPE IS DECIMAL(6,0)

*変数名;

−

ROW

char *変数名;

1≦全体長≦30000※

BLOB

SQL TYPE IS

BLOB(n[{K｜M｜G}])

*変数名;

単位を省略した場合：

1≦n≦2147483647

単位がKの場合：

1≦n≦2097152

単位がMの場合：

1≦n≦2048

単位がGの場合：

1≦n≦2

BINARY(n)

struct {

long 変数名1;

char 変数名2[n];

} *構造体名;

1≦n≦2147483647

SQL TYPE IS BINARY(n)

*変数名;

BLOB位置付け子

SQL TYPE IS

BLOB AS LOCATOR

*変数名;

−

BINARY位置付け子

SQL TYPE IS

BINARY AS LOCATOR

*変数名;

−

標識変数

BLOB，BINARY，BLOB位置付け子，BINARY位置付け子以外

short *変数名;

−

BLOB，BINARY，BLOB位置付け子，BINARY位置付け子

long *変数名;

SQL文

struct {

long 変数名1;

char 変数名2[n];

} *構造体名;

1≦n≦2000000

SMALLINT ARRAY m

PD_MV_SINT(m)

*変数名;

−

INTEGER ARRAY m

PD_MV_INT(m)

*変数名;

−

DECIMAL[(p[,s])] ARRAY m

PD_MV_DEC(m,p,s)

*変数名;

1≦p≦38，0≦s≦p

SMALLFLT ARRAY m

(REAL)

PD_MV_SFLT(m)

*変数名;

−

FLOAT ARRAY m

(DOUBLE PRECISION)

PD_MV_FLT(m)

*変数名;

−

CHAR[(n)] ARRAY m，及び

MCHAR[(n)] ARRAY m

PD_MV_CHAR(m,n)

*変数名;

1≦n≦30000

VARCHAR[(n)] ARRAY m，及びMVARCHAR[(n)] ARRAY m

PD_MV_VCHAR(m,n)

*変数名;

1≦n≦32000

PD_MV_CVCHAR(m,n)

*変数名;

NCHAR[(n)] ARRAY m

PD_MV_NCHAR(m,n)

*変数名;

1≦n≦15000

NVARCHAR[(n)] ARRAY m

PD_MV_NVCHAR(m,n)

*変数名;

1≦n≦16000

DATE ARRAY m

PD_MV_CHAR(m,10)

*変数名;

−

TIME ARRAY m

PD_MV_CHAR(m,8)

*変数名;

−

TIMESTAMP ARRAY m

PD_MV_CHAR(m,n)

*変数名;

p=0の場合はn=19

p=2の場合はn=21,22

p=4の場合はn=23,24

p=6の場合はn=25,26

INTERVAL YEAR TO DAY ARRAY m

PD_MV_DEC(m,8,0)

*変数名;

−

INTERVAL HOUR TO SECOND ARRAY m

PD_MV_DEC(m,6,0)

*変数名;

−

繰返し列用標識変数

PD_MV_SINT(m)

*変数名;

−

(凡例)

ｍ：繰返し列の各要素を示す番号（0〜m-1）

n：長さ（バイト）

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

−：なし

注

64ビットモードの場合，longの代わりにintを使用してください。

注※

プリプロセス時に領域の定義長が決定できないため，実行時にポインタが指す領域に格納されている文字列の長さを，strlen(変数名)で求めて，領域長の代わりに使用します。検索結果を受け取る場合は，ポインタが指す領域をNULL文字以外でクリアして，最後にNULL文字を入れてください。

(6)　ポインタ型の繰返し列用のマクロ

ポインタ型の繰返し列用の変数を参照，及び設定するには，専用のマクロを使用します。ポインタ型の繰返し列用のマクロを次の表に示します。

表F‒6　ポインタ型の繰返し列用のマクロ

SQLのデータ型

マクロ名

参照・設定するデータ

データ型

SMALLINT ARRAY m

PD_MV_SINTP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_SINTP_DATA(変数名，m)

繰返しの各要素

short

INTEGER ARRAY m

PD_MV_INTP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_INTP_DATA(変数名，m)

繰返しの各要素

long※

DECIMAL[(p[,s])] ARRAY m

PD_MV_DECP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_DECP_DATA(変数名，m)

繰返しの各要素の10進数の先頭アドレス

char[ ]

SMALLFLT ARRAY m

(REAL)

PD_MV_SFLTP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_SFLTP_DATA(変数名，m)

繰返しの各要素

float

FLOAT ARRAY m

(DOUBLE PRECISION)

PD_MV_FLTP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_FLTP_DATA(変数名，m)

繰返しの各要素

double

CHAR[(n)] ARRAY m，又はMCHAR[(n)] ARRAY m

PD_MV_CHARP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_CHARP_DATA(変数名，m)

繰返しの各要素の，文字列の先頭アドレス

char[ ]

VARCHAR(n) ARRAY m，又はMVARCHAR(n) ARRAY m

PD_MV_VCHARP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_VCHARP_LEN(変数名，m)

繰返しの各要素の，文字列の実長

short

PD_MV_VCHARP_STR(変数名，m)

繰返しの各要素の，文字列のアドレス

char[ ]

PD_MV_CVCHARP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_CVCHARP_DATA(変数名，m)

繰返しの各要素の，文字列のアドレス

char[ ]

NCHAR[(n)] ARRAY m

PD_MV_NCHARP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_NCHARP_DATA(変数名，m)

繰返しの各要素の，文字列の先頭アドレス

char[ ]

NVARCHAR(n) ARRAY m

PD_MV_NVCHARP_CNT(変数名)

繰返しデータの現在要素数

long※

PD_MV_NVCHARP_LEN(変数名，m)

繰返しの各要素の，文字列の実長

short

PD_MV_NVCHARP_STR(変数名，m)

繰返しの各要素の，文字列の先頭アドレス

char[ ]

DATE ARRAY m

CHAR(10)と同じ

−

−

TIME ARRAY m

CHAR(8)と同じ

−

−

TIMESTAMP[(p)] ARRAY m

CHAR(n)と同じ

p=0の場合はn=19

p=2の場合はn=21,22

p=4の場合はn=23,24

p=6の場合はn=25,26

−

−

INTERVAL YEAR TO DAY

DECIMAL(8,0)と同じ

−

−

INTERVAL HOUR TO SECOND

DECIMAL(6,0)と同じ

−

−

標識変数

PD_MV_SINTP_CNT(変数名)

繰返し列全体の標識

long※

PD_MV_SINTP_DATA(変数名，m)

繰返し列の各要素の標識

short

(凡例)

−：該当しません。

ｍ：繰返し列の各要素を示す番号（0〜m-1）

n：長さ（バイト）

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

注※

64ビットモードの場合，intとなります。

(7)　一括指定用の構造体

一括指定用の構造体を次の表に示します。

表F‒7　一括指定用の構造体

SQLのデータ型

C言語のデータ記述

項目の記述

備考

複数の項目

表F-1〜表F-3のデータ型をメンバとして含む構造体

複数の埋込み変数を一括指定します。

ポインタ宣言ができます。

複数の項目用の標識変数

表F-1〜表F-3の標識変数をメンバとして含む構造体

複数の標識変数を一括指定します。

ポインタ宣言ができます。

付録F.2　SQLのデータ型とCOBOL言語のデータ記述

SQLのデータ型とCOBOL言語のデータ記述の対応を示します。

なお，データの受け渡しには，対応するデータ型以外に，変換，又は代入できるデータ型も使用できます。

(1)　SQLのデータ型とCOBOL言語のデータ記述

SQLのデータ型とCOBOL言語のデータ記述を次の表に示します。なお，表中のデータ記述は，次のように表記することもできます。

PICTURE：

PIC

COMPUTATIONAL：

COMP

COMPUTATIONAL-n：

COMP-n

9(n)：

99…9

X(n)：

XX…X

OCCURS n TIMES：

OCCURS 1 TO n TIMES

OCCURS 1 TO n

OCCURS n

表F‒8　SQLのデータ型とCOBOL言語のデータ記述

SQLのデータ型

COBOL言語のデータ記述

項目の記述

備　　考

SMALLINT

L1 基本項目名

PICTURE S9(4)

COMPUTATIONAL.

基本項目，又は独立項目

−

INTEGER

L1 基本項目名

PICTURE S9(9)

COMPUTATIONAL.

基本項目，又は独立項目

−

DECIMAL[(p[，s])]

L1 基本項目名

PICTURE S9(p-s)[V9(s)]

COMPUTATIONAL-3.

基本項目，又は独立項目

1≦p≦38※１０，

0≦s≦p

p=sの場合，SV9(s)とします。

s=0の場合，[V9(s)]を省略します。

L1 基本項目名

PICTURE S9(p-s)[V9(s)]

DISPLAY SIGN

LEADING SEPARATE.※９※１２

L1 基本項目名

PICTURE S9(p-s)[V9(s)]

DISPLAY SIGN

TRAILING.※１１※１２※１３

SMALLFLT

(REAL)

L1 基本項目名

COMPUTATIONAL-1.

基本項目，又は独立項目

−

FLOAT

(DOUBLE

PRECISION)

L1 基本項目名

COMPUTATIONAL-2.

基本項目，又は独立項目

−

CHAR[(n)]

[CHARACTER SET [MASTER.]EBCDIK]

L1 基本項目名

[CHARACTER SET[IS]

[MASTER.]EBCDIK]

PICTURE X(n).※５

基本項目，又は独立項目

1≦n≦30000

CHAR[(2n)]

CHARACTER SET [MASTER.]UTF16

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※15

CHAR型は使用できません。

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合：※15

L1 基本項目名

PICTURE N(n).

基本項目，又は独立項目

1≦n≦15000

VARCHAR(n)

[CHARACTER SET [MASTER.]EBCDIK]

L2 集団項目名

[CHARACTER SET[IS]

[MASTER.]EBCDIK].

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n).※５

二つの基本項目から構成される集団項目

基本項目名1：文字列長

基本項目名2：文字列

文字列長はバイト数

1≦n≦32000

VARCHAR(2n)

CHARACTER SET [MASTER.]UTF16

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※15

VARCHAR型は使用できません。

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合：※15

L2 集団項目名.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n).

二つの基本項目から構成される集団項目

基本項目名1：文字列長

基本項目名2：文字列

文字列長はバイト数

1≦n≦16000

NCHAR[(n)]

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※１５

L1 基本項目名

PICTURE N(n).

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合：※１５

NCHAR型は使用できません。

基本項目，又は独立項目

1≦n≦15000

NVARCHAR(n)

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※１５

L2 集団項目名.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n).

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合：※１５

NVARCHAR型は使用できません。

二つの基本項目から構成される集団項目

基本項目名1：文字列長基本項目名2：文字列

1≦n≦16000

MCHAR[(n)]

L1 基本項目名

PICTURE X(n).※６

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合は※１５，次のように記述することもできます。

L1 基本項目名

PICTURE N(n₂).※１４

基本項目，又は独立項目

1≦n≦30000

MVARCHAR(n)

L2 集団項目名.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n).※６

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合は※１５，次のように記述することもできます。

L2 集団項目名.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n₂).※１４

二つの基本項目から構成される集団項目

基本項目名1：文字列長

基本項目名2：文字列

1≦n≦32000

DATE

L1 基本項目名

PICTURE X(10).※６

基本項目，又は独立項目

−

TIME

L1 基本項目名 PICTURE X(8).※６

基本項目，又は独立項目

−

TIMESTAMP[(p)]

L1 基本項目名 PICTURE X(n).※６

基本項目，又は独立項目

p=0の場合はn=19

p=2の場合はn=21,22

p=4の場合はn=23,24

p=6の場合はn=25,26

INTERVAL

YEARTO DAY

L1 基本項目名

PICTURE S9(8)

COMPUTATIONAL-3.

基本項目，又は独立項目

−

INTERVAL

HOUR TO

SECOND

L1 基本項目名

PICTURE S9(6)

COMPUTATIONAL-3.

基本項目，又は独立項目

−

ROW※３

この表中のデータ項目と集団項目の組み合わせ※1

複数の基本項目から構成される集団項目

1≦全体長≦30000

BLOB

L2 集団項目名※2

[USAGE [IS]]

SQL TYPE IS

BLOB(n{K｜M｜G}).※４※７

基本項目

単位省略時：

1≦n≦2147483647

単位がK：

1≦n≦2097152

単位がM：

1≦n≦2048

単位がG：

1≦n≦2

BINARY(n)

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9)

COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n).※５※７

二つの基本項目から構成される集団項目

基本項目名1：文字列長

基本項目名2：文字列

文字列長はバイト数

1≦n≦2147483647

BLOB位置付け子

L1 基本項目名

SQL TYPE IS

BLOB AS LOCATOR.※８

基本項目，又は独立項目

−

BINARY位置付け子

L1 基本項目名

SQL TYPE IS

BINARY AS LOCATOR.※８

基本項目，又は独立項目

−

標識変数

BLOB，BINARY，BLOB位置付け子，BINARY位置付け子以外

L1 基本項目名

PICTURE S9(4)

COMPUTATIONAL.

基本項目，又は独立項目

−

BLOB，BINARY，BLOB位置付け子，BINARY位置付け子

L1 基本項目名

PICTURE S9(9)

COMPUTATIONAL.

SQL文

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9)

COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n).

二つの基本項目から構成される集団項目

基本項目名1：文字列長

基本項目名2：文字列

1≦n≦2000000

(凡例)

L1：レベル番号01〜49，又は77

L2：レベル番号01〜48

L3：レベル番号02〜49(L2<L3)

n：長さ（バイト）

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

−：なし

注※1

次に示す句を使用できます。

REDEFINES句

OCCURS句

ADDRESSED BY句

FIX属性の表を行単位に操作する場合，1行分のデータを格納するデータ項目を集団項目として記述します。操作対象の表の各列と集団項目に従属する各データ項目とが対応するように記述します。各列に対応するデータ項目はその列のデータ型に対応するデータ記述を使用して記述します。ただし，データ形式の変換が必要になるデータ記述は使用できません。

データ形式の変換が必要になるデータ記述と，その代わりに使用できるデータ記述を次の表に示します。

列のデータ型

データ形式の変換が必要になるため使用できないデータ記述

代わりに使用できるデータ記述

DECIMAL

DISPLAY （外部10進形式）

COMP-3 （内部10進形式）

MCHAR

PICTURE N（日本語項目）

PICTURE X（英数字項目）

DATE

PICTURE X(10)

10=文字列表現の文字数

PICTURE X(4)

4=X'YYYYMMDD'形式のバイト数

TIME

PICTURE X(8)

8=文字列表現の文字数

PICTURE X(3)

3=X'hhmmss'形式のバイト数

TIMESTAMP(p)

PICTURE X(n)

n=文字列表現の文字数

PICTURE X(n)

n=7＋p/2

n=X'YYYYMMDDhhmmss〔nn…n〕'形式のバイト数

操作対象の表の列に対応するデータ項目を，REDEFINES句を使用して再定義できます。この場合，再定義する項目は再定義される項目に対応する列のデータ型と関係なく記述できます。ただし，表「SQLのデータ型とCOBOL言語のデータ記述」のINTEGER，SMALLINT，DECIMAL，FLOAT，SMALLFLT，CHAR，及びNCHAR型に対応する基本項目とこれらを組み合わせた集団項目だけが使用できます。これらの基本項目と集団項目に，OCCURS句を指定できます。

プリプロセサの-Xbオプションを指定する場合は，ROW型のデータ項目に含まれる2進項目のデータ記述のUSAGE句にCOMPの代わりにCOMP-5を指定する必要があります。-Xbオプションを指定しない場合は，ROW型のデータ項目に含まれる2進項目のデータ記述のUSAGE句にCOMPとCOMP-5のどちらでも指定できます。

注※2

集団項目名は21文字以下にしてください。ただし，COBOL2002の場合は，22文字以下にしてください。

注※3

HiRDBサーバとHiRDBクライアントのエンディアンが同じ場合にだけ，ROW型を使用できます。

注※4

BLOBのUAPの記述は，内部的に次のように展開されます。

L2 集団項目名.
   49 集団項目名-RESERVED PIC S9(9) USAGE IS BINARY.  … 1
   49 集団項目名-LENGTH   PIC S9(9) USAGE IS BINARY.  … 2
   49 集団項目名-DATA     PIC X(m).                   … 3

変数名-RESERVEDは，使用しません。

変数名-LENGTHは，BLOBの実際の長さになります。

変数名-DATAは，BLOBのデータ格納領域(mは実際のデータ長)になります。

注※5

Xの代わりに9を使用して定義できます。9を使用して定義した場合，数字以外の文字を含む文字列を代入したり，検索結果として受け取ったときの動作はCOBOL言語のコンパイラの実装に依存します。

注※6

Xの代わりに9を使用して定義した場合，プリプロセス時にエラーとなりませんが，使用しないでください。

注※7

宣言できる上限値は，COBOLコンパイラの実装に依存します。詳細については，使用するCOBOLコンパイラのマニュアルを参照してください。

注※8

内部的には，次のように展開されます。

L1 基本項目名 PICTURE S9(9) COMPUTATIONAL.

注※9

HiRDBサーバのデータ型はDECIMAL型ですが，先頭1バイトに演算符号が付く外部10進項目として表します。

注※10

COBOLコンパイラの仕様に依存します。例えば，COBOL85の場合は1≦p≦18となります。

注※11

HiRDBサーバのデータ型はDECIMAL型ですが，右端1バイトの上位4ビットに演算符号が付く外部10進項目（ゾーン形式）として表します。

注※12

演算符号が付く数字項目にデータ項目の表現形式が指定されていない場合は，DISPLAY（外部10進項目）とみなします。演算符号が付く外部10進項目にSIGN句が指定されていない場合は，演算符号の位置と表現形式はDISPLAY SIGN TRAILING形式と同じであるとみなします。

注※13

DISPLAY SIGN TRAILING形式は，COBOL85及びCOBOL2002でだけサポートしています。

注※14

COBOL言語の日本語項目（PICTURE N）を含むこのデータ記述は，COBOL2002のUnicode機能を使用する場合にだけ，SQLの混在文字データ型（MCHAR又はMVARCHAR）に対応するデータ記述として使用できます。

COBOL2002のUnicode機能を使用したUAPの実行については「COBOL2002のUnicode機能を使用したUAPの実行」を参照してください。

このデータ記述は，埋込み変数の宣言，及び？パラメタの値を格納するデータ領域の宣言に使用できます。

埋込み変数の場合

-XU16オプションの指定に従って，文字集合名UTF-16LE又はUTF-16BEを指定した文字データ型（CHAR又はVARCHAR）のデータとして扱います。詳細を次の表に示します。

データ記述の形式

COBOL言語のデータ記述

埋込み変数の属性

データ型

文字集合名

固定長

L1 基本項目名

PICTURE N(n₂).

CHAR(m)

m = 2×n₂

UTF-16LE又はUTF-16BE

可変長

L2 集団項目名.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n₂).

VARCHAR(m)

m = 2×n₂

UTF-16LE又はUTF-16BE

注　可変長形式の基本項目名1には，基本項目名2に格納する日本語文字列の長さをバイト単位で指定します。日本語項目に格納するデータの文字コードはUTF-16（UCS-2の範囲内）になるため，日本語文字列のバイト数は文字数の2倍になります。なお，このバイト数は2×n₂以下になります。

？パラメタの値を格納するデータ領域の場合

？パラメタの値を格納するデータ領域の宣言にこのデータ記述を使用する場合は，SQL記述領域と文字集合名記述領域を次の表に示すとおりに設定してください。

データ記述の形式

COBOL言語のデータ記述

SQL記述領域の設定値

文字集合名記述領域の設定値

データコード

データ長

固定長

L1 基本項目名

PICTURE N(n₂).

CHAR型のデータコード

2×n₂

UTF-16LE又はUTF-16BE

可変長

L2 集団項目名.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n₂).

VARCHAR型のデータコード

2×n₂

UTF-16LE又はUTF-16BE

注　可変長形式の基本項目名1には，基本項目名2に格納する日本語文字列の長さをバイト単位で指定します。日本語項目に格納するデータの文字コードはUTF-16（UCS-2の範囲内）になるため，日本語文字列のバイト数は文字数の2倍になります。なお，このバイト数は2×n₂以下になります。

なお，文字集合名の詳細については，「文字集合名記述領域のSQLCSNに設定できる文字集合情報」を参照してください。

注※15

pdntenvコマンド（UNIX版の場合はpdsetupコマンド）で，文字コード種別にutf-8を指定した場合に，HiRDBサーバの既定文字集合がUTF-8になります。

また，文字コード種別にutf-8_ivsを指定した場合，HiRDBサーバの既定文字集合がIVS対応UTF-8になります。

(2)　配列を使用した場合のSQLのデータ型とCOBOL言語のデータ記述

配列を使用した場合のSQLのデータ型とCOBOL言語のデータ記述を次の表に示します。

表F‒9　配列を使用した場合のSQLのデータ型とCOBOL言語のデータ記述

SQLのデータ型

COBOL言語のデータ記述

項目の記述

備　　考

SMALLINT

L2 基本項目名

PICTURE S9(4)

COMPUTATIONAL

OCCURS m TIMES.

OCCURSの指定によって同じデータ構造を繰り返す反復データ項目から構成される集団項目

−

INTEGER

L2 基本項目名

PICTURE S9(9)

COMPUTATIONAL

OCCURS m TIMES.

−

DECIMAL

[(p[,s])]

L2 基本項目名

PICTURE S9(p-s)[V9(s)]

COMPUTATIONAL-3

OCCURS m TIMES.

1≦p≦38※３，

0≦s≦p

p=sの場合，SV9(s)とします。

s=0の場合，[V9(s)]を省略します。

L2 基本項目名

PICTURE S9(p-s)[V9(s)]

DISPLAY SIGN LEADING

SEPARATE OCCURS m

TIMES.

L2 基本項目名

PICTURE S9(p-s)[V9(s)]

DISPLAY SIGN TRAILING

OCCURS m TIMES.

SMALLFLT

(REAL)

L2 基本項目名

COMPUTATIONAL-1

OCCURS m TIMES.

−

FLOAT

(DOUBLE

PRECISION)

L2 基本項目名

COMPUTATIONAL-2

OCCURS m TIMES.

−

CHAR[(n)]

[CHARACTER SET [MASTER.]EBCDIK]

L2 基本項目名

[CHARACTER SET[IS]

[MASTER.]EBCDIK]

PICTURE X(n)

OCCURS m TIMES.※１

1≦n≦30000

CHAR[(2n)]

CHARACTER SET [MASTER.]UTF16

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

CHAR型は使用できません。

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

L2 基本項目名

PICTURE N(n)

OCCURS m TIMES.

1≦n≦15000

VARCHAR(n)

[CHARACTER SET [MASTER.]EBCDIK]

L2 集団項目名2

[CHARACTER SET[IS]

[MASTER.]EBCDIK]

OCCURS m TIMES.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n).※１

1≦n≦32000

VARCHAR(2n)

CHARACTER SET [MASTER.]UTF16

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

VARCHAR型は使用できません。

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

L2 集団項目名2

OCCURS m TIMES.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n).

1≦n≦16000

NCHAR[(n)]

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

L2 基本項目名

PICTURE N(n)

OCCURS m TIMES.

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

NCHAR型は使用できません。

1≦n≦15000

NVARCHAR(n)

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

L2 集団項目名2

OCCURS m TIMES.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n).

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

NVARCHAR型は使用できません。

1≦n≦16000

MCHAR[(n)]

L2 基本項目名

PICTURE X(n)

OCCURS m TIMES.※２

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合は※５，次のように記述することもできます。

L2 基本項目名

PICTURE N(n₂)

OCCURS m TIMES.※4

1≦n≦30000

MVARCHAR(n)

L2 集団項目名2

OCCURS m TIMES.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n).※２

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合は※５，次のように記述することもできます。

L2 集団項目名2

OCCURS m TIMES.

L3 基本項目名1

PICTURE S9(4)

COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n₂).※4

1≦n≦32000

DATE

L2 基本項目名

PICTURE X(10)

OCCURS m TIMES.※２

−

TIME

L2 基本項目名

PICTURE X(8)

OCCURS m TIMES.※２

−

TIMESTAMP(p)

L2 基本項目名

PICTURE X(n)

OCCURS m TIMES.※２

p=0の場合，n=19

p=2の場合，n=21,22

p=4の場合，n=23,24

p=6の場合，n=25,26

INTERVAL

YEARTO DAY

L2 基本項目名

PICTURE S9(8)

COMPUTATIONAL-3

OCCURS m TIMES.

−

INTERVAL

HOUR TO

SECOND

L2 基本項目名

PICTURE S9(6)

COMPUTATIONAL-3

OCCURS m TIMES.

−

ROW

L2 集団項目名2

OCCURS m TIMES.

この表の中のデータ項目と集団項目の組み合わせ※６

−

BLOB

記述できない

記述できない

−

BINARY

L2 集団項目名2

OCCURS m TIMES.

L3 基本項目名1

PICTURE S9(9)

COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n).※１

OCCURSの指定によって同じデータ構造を繰り返す反復データ項目から構成される集団項目

配列を使用したFETCHの場合，

4≦n≦2147483644（nは4の倍数であること）

配列を使用したFETCH以外の場合，

4≦n≦32000（nは4の倍数であること）

BLOB位置付け子

記述できない

記述できない

−

BINARY位置付け子

L2 基本項目名

SQL TYPE IS

BINARY AS LOCATOR

OCCURS m TIMES.

OCCURSの指定によって同じデータ構造を繰り返す反復データ項目から構成される集団項目

−

標識変数

BINARY，BINARY位置付け子以外

L2 基本項目名

PICTURE S9(4)

COMPUTATIONAL

OCCURS m TIMES.

−

BINARY，BINARY位置付け子

L2 基本項目名

PICTURE S9(9)

COMPUTATIONAL

OCCURS m TIMES.

−

SQL文

記述できない

記述できない

−

（凡例）

L2：レベル番号02〜49（L2<L3）

L2にはレベル番号01，66，77，又は88を指定できません。詳細はCOBOL言語のマニュアルのOCCURS句の構文規則を参照してください。

L3：レベル番号03〜49

m：配列の要素数（1〜4,096）

n：長さ（バイト）

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

−：なし

注※1

Xの代わりに9を使用して定義できます。9を使用して定義した場合，数字以外の文字を含む文字列を代入したり，検索結果として受け取ったときの動作はCOBOL言語のコンパイラの実装に依存します。

注※2

Xの代わりに9を使用して定義した場合，プリプロセス時にエラーとなりませんが，使用しないでください。

注※3

COBOLコンパイラの仕様に依存します。例えば，COBOL85の場合は1≦p≦18となります。

注※4

COBOL言語の日本語項目（PICTURE N）を含むこのデータ記述は，COBOL2002のUnicode機能を使用する場合にだけ，SQLの混在文字データ型（MCHAR又はMVARCHAR）に対応するデータ記述として使用できます。詳細については，表「SQLのデータ型とCOBOL言語のデータ記述」のMCHAR[(n)]及びMVARCHAR(n)の注を参照してください。

注※5

pdntenvコマンド（UNIX版の場合はpdsetupコマンド）で，文字コード種別にutf-8を指定した場合に，HiRDBサーバの既定文字集合がUTF-8になります。

また，文字コード種別にutf-8_ivsを指定した場合，HiRDBサーバの既定文字集合がIVS対応UTF-8になります。

注※6

組み合わせの詳細については，表「SQLのデータ型とCOBOL言語のデータ記述」を参照してください。

(3)　繰返し列を使用した場合のSQLのデータ型とCOBOL言語のデータ記述

繰返し列を使用した場合のSQLのデータ型とCOBOL言語のデータ記述を次の表に示します。

表F‒10　繰返し列を使用した場合のSQLのデータ型とCOBOL言語のデータ記述

SQLのデータ型

COBOL言語のデータ記述

項目の記述

備考

SMALLINT

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE S9(4) COMPUTATIONAL

OCCURS m TIMES.

二つの基本項目から構成される集団項目

−

INTEGER

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE S9(9) COMPUTATIONAL

OCCURS m TIMES.

−

DECIMAL

[(p[,s])]

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE S9(p-s)[V9(s)]

COMPUTATIONAL-3

OCCURS m TIMES.

1≦p≦38※３，

0≦s≦p

p=sの場合，SV9(s)とします。

s=0の場合，[V9(s)]を省略します。

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE S9(p-s)[V9(s)]

DISPLAY SIGN LEADING SEPARATE

OCCURS m TIMES.

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE S9(p-s)[V9(s)]

DISPLAY SIGN TRAILING

OCCURS m TIMES.

SMALLFLT

(REAL)

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

COMPUTATIONAL-1

OCCURS m TIMES.

−

FLOAT

(DOUBLE

PRECISION)

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2 COMPUTATIONAL-2

OCCURS m TIMES.

−

CHAR[(n)]

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n) OCCURS m TIMES.※１

1≦n≦30000

VARCHAR(n)

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 集団項目名2 OCCURS m TIMES.

L4 基本項目名3

PICTURE S9(4)

COMPUTATIONAL.

L4 基本項目名4 PICTURE X(n).※１

二つの基本項目から構成される集団項目と，一つの基本項目から成る集団項目

1≦n≦32000

NCHAR[(n)]

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n) OCCURS m TIMES.

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合：※５

NCHAR型は使用できません。

二つの基本項目から構成される集団項目

1≦n≦15000

NVARCHAR(n)

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8以外の場合：※５

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 集団項目名2 OCCURS m TIMES.

L4 基本項目名3

PICTURE S9(4)

COMPUTATIONAL.

L4 基本項目名4 PICTURE N(n).

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合：※５

NVARCHAR型は使用できません。

二つの基本項目から構成される集団項目と，一つの基本項目から成る集団項目

1≦n≦16000

MCHAR[(n)]

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n) OCCURS m TIMES.※１

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合は※５，次のように記述することもできます。

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE N(n₂) OCCURS ｍ TIMES.※４

二つの基本項目から構成される集団項目

1≦n≦30000

MVARCHAR(n)

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 集団項目名2 OCCURS m TIMES.

L4 基本項目名3

PICTURE S9(4)

COMPUTATIONAL.

L4 基本項目名4 PICTURE X(n).※１

HiRDBサーバの既定文字集合がUTF-8，又はIVS対応UTF-8の場合は※５，次のように記述することもできます。

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 集団項目名2 OCCURS m TIMES.

L4 基本項目名3

PICTURE S9(4)

COMPUTATIONAL.

L4 基本項目名４ PICTURE N(n₂).※４

二つの基本項目から構成される集団項目と，一つの基本項目から成る集団項目

1≦n≦32000

DATE

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE X(10) OCCURS m TIMES.※２

二つの基本項目から構成される集団項目

−

TIME

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE X(8) OCCURS m TIMES.※２

−

TIMESTAMP[(n)]

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE X(n) OCCURS m TIMES.※２

p=0の場合はn=19

p=2の場合はn=21,22

p=4の場合はn=23,24

p=6の場合はn=25,26

INTERVAL

YEARTO DAY

L2 集団項目名.

L3 基本項目名1

PICTURE S9(8) COMPUTATIONAL.

L3 基本項目名2

PICTURE S9(8)

COMPUTATIONAL-3

OCCURS m TIMES.

−

INTERVAL

HOUR TO

SECOND

L2 集団項目名.

L3 基本項目名1

PICTURE S9(6) COMPUTATIONAL.

L3 基本項目名2

PICTURE S9(6)

COMPUTATIONAL-3

OCCURS m TIMES.

−

ROW

記述できない

記述できない

−

BLOB

記述できない

記述できない

−

BINARY

記述できない

記述できない

−

BLOB位置付け子

記述できない

記述できない

−

BINARY位置付け子

記述できない

記述できない

−

標識変数（BLOB，BINARY，BLOB位置付け子，BINARY位置付け子以外）

L2 集団項目名.

L3 基本項目名1

PICTURE S9(9) COMPUTATIONAL.

L3 基本項目名2

PICTURE S9(4) COMPUTATIONAL

OCCURS m TIMES.

二つの基本項目から構成される集団項目

−

SQL文

記述できない

記述できない

−

（凡例）

L2：レベル番号02〜49

L3，L4：レベル番号03〜49

m：繰返し列の最大要素数（2〜30,000）

n：長さ（バイト）

p：精度（全体のけた数）

s：位取り（小数点以下のけた数）

−：なし

注1

基本項目名1の値は，現在の要素数としてください。

注2

基本項目名2又は集団項目名2の値は，繰返しの各要素の値としてください。

注3

標識変数の基本項目名1は，繰返し列全体の標識としてください。

注4

標識変数の基本項目名2は，繰返し列の各要素の標識としてください。

注※1

Xの代わりに9を使用して定義できます。9を使用して定義した場合，数字以外の文字を含む文字列を代入したり，検索結果として受け取ったときの動作はCOBOL言語のコンパイラの実装に依存します。

注※2

Xの代わりに9を使用して定義した場合，プリプロセス時にエラーとなりませんが，使用しないでください。

注※3

COBOLコンパイラの仕様に依存します。例えば，COBOL85の場合は1≦p≦18となります。

注※4

COBOL言語の日本語項目（PICTURE N）を含むこのデータ記述は，COBOL2002のUnicode機能を使用する場合にだけ，SQLの混在文字データ型（MCHAR又はMVARCHAR）に対応するデータ記述として使用できます。詳細については，表「SQLのデータ型とCOBOL言語のデータ記述」のMCHAR[(n)]及びMVARCHAR(n)の注を参照してください。

注※5

pdntenvコマンド（UNIX版の場合はpdsetupコマンド）で，文字コード種別にutf-8を指定した場合に，HiRDBサーバの既定文字集合がUTF-8になります。

また，文字コード種別にutf-8_ivsを指定した場合，HiRDBサーバの既定文字集合がIVS対応UTF-8になります。

付録G　データディクショナリ表の検索

ここでは，データディクショナリ表の検索及び参照について説明します。

HiRDBのデータディクショナリ表は，次の二つの方法で参照できます。

GUI版HiRDB SQL Executer

操作系SQL

付録G.1　GUI版HiRDB SQL Executerによるデータディクショナリ表の参照

GUI版HiRDB SQL Executerのディクショナリビューでは，接続ユーザが参照可能なデータディクショナリ情報を，ツリー形式で表示します。

ここでは，GUI版HiRDB SQL Executerで表定義情報を参照する場合について説明します。

(1)　GUI版HiRDB SQL Executerの起動

GUI版HiRDB SQL Executerは，次の手順で起動します。

［スタート］−［プログラム］−［HiRDB SQL Executer］−［GUI版HiRDB SQL Executer］を選択します。

GUI版HiRDB SQL Executerが起動します。

HiRDBサーバに接続後，［ディクショナリビュー］画面の接続データベース名（ここではHiRDB 08-02 US）をクリックすると，接続ユーザ名（ここではUSER1）とRDエリアの階層が表示されます。接続ユーザ名をクリックすると，テーブル，ビュー，インデクス，手続きの階層が表示されます。

(2)　表定義情報の参照

表定義情報の参照について説明します。

［ディクショナリビュー］画面で［テーブル］をクリックすると，そのユーザが所有する表の一覧が表示されます。表名を選択すると，［ディクショナリ詳細］画面に表定義情報が表示されます。

［プロパティ］タブでは，列数，定義長，格納先RDエリア名などが確認できます。

［構成列］タブでは，構成列の列名や属性などが確認できます。

［インデクス］タブでは，表に定義されているインデクス名などが確認できます。

(3)　インデクス定義情報の参照

インデクス定義情報の参照について説明します。

［ディクショナリビュー］画面で［インデクス］をクリックすると，そのユーザが所有するインデクスの一覧が表示されます。インデクス名を選択すると，［ディクショナリ詳細］画面にインデクス定義情報が表示されます。

［プロパティ］タブでは，インデクスの格納先RDエリア名などが確認できます。

［構成列］タブでは，インデクス構成列名などが確認できます。

［ディクショナリビュー］画面の［ビュー］及び［手続き］の階層も，同様に各資源の定義情報が参照できます。詳細は，GUI版HiRDB SQL Executerのヘルプを参照してください。

付録G.2　操作系SQLによるデータディクショナリ表の参照

HiRDBのデータディクショナリ表は，一般のHiRDBのデータベースと同様に，操作系のSQLで参照できます。なお，ディクショナリ表の認可識別子はMASTERとなります。

ここでは，検索時のSQLの記述例と，参照するために必要な定義情報について説明します。

参照するデータディクショナリ表の一覧を次の表に示します。

表G‒1　データディクショナリ一覧

表　　　名

内　　　　容

情　報　量

(1行当たり)

SQL_PHYSICAL_FILES

HiRDBファイルの情報(HiRDBファイルシステム名，RDエリア名との対応関係)

1HiRDBファイル分

SQL_RDAREAS

RDエリア名称，定義情報，RDエリア種別，格納表数，インデクス数などの情報

1RDエリア分

SQL_TABLES

データベース中の各表(ディクショナリ表を含む)の所有者名，表名

1表分

SQL_COLUMNS

列に関する列名，データ型などの定義情報

1列分

SQL_INDEXES

データベース中の各インデクス(ディクショナリ表を含む)の所有者名，インデクス名

1インデクス分

SQL_USERS

ユーザの実行権限，及びデータベースに対するアクセスを許可したユーザの認可識別子

1ユーザ分

SQL_RDAREA_PRIVILEGES

RDエリア利用権限の許可状況

1認可識別子の1RDエリア分

SQL_TABLE_PRIVILEGES

表に対するアクセス権限の付与状況

1認可識別子の1表分

SQL_VIEW_TABLE_USAGE

ビュー表の基の実表名

1ビュー表分

SQL_VIEWS

ビュー定義情報

1ビュー表分

SQL_DIV_TABLE

表の分割情報(CREATE TABLE時に指定した分割条件，及び格納RDエリア名)

n行で1表分

SQL_INDEX_COLINF

インデクスが定義された列名

n行で1インデクス分

SQL_DIV_INDEX

インデクスの分割情報(格納RDエリア名)

n行で1インデクス分

SQL_DIV_COLUMN

BLOB型列の分割情報(CREATE TABLE時に指定した格納RDエリア名)

n行で1列分

SQL_ROUTINES

ルーチン定義情報

1行で1ルーチン分

SQL_ROUTINE_RESOURCES

ルーチン中の使用リソース情報

n行で1ルーチン分

SQL_ROUTINE_PARAMS

ルーチン中のパラメタ定義情報

n行で1ルーチン分

SQL_TABLE_STATISTICS

表の統計情報

1表分

SQL_COLUMN_STATISTICS

列の統計情報

1列分

SQL_INDEX_STATISTICS

インデクスの統計情報

1インデクス分

SQL_DATATYPES

ユーザ定義型の情報

1ユーザ定義型分

SQL_DATATYPE_DESCRIPTORS

ユーザ定義型の構成属性の情報

1属性分

SQL_TABLE_RESOURCES

表で使用するリソース情報

1リソース分

SQL_PLUGINS

プラグイン情報

1プラグイン分

SQL_PLUGIN_ROUTINES

プラグインのルーチン情報

1プラグインのルーチン分

SQL_PLUGIN_ROUTINE_PARAMS

プラグインのルーチンのパラメタ情報

1パラメタ情報

SQL_INDEX_TYPES

インデクス型の情報

1インデクス型分

SQL_INDEX_RESOURCES

インデクスで使用するリソース情報

1リソース情報分

SQL_INDEX_DATATYPE

インデクスの対象項目情報

1対象項目情報分（1段分）

SQL_INDEX_FUNCTION

インデクスで利用する抽象データ型関数の情報

一つの抽象データ型関数の情報分

SQL_TYPE_RESOURCES

ユーザ定義型で使用するリソース情報

1リソース情報分

SQL_INDEX_TYPE_FUNCTION

インデクス型を定義したインデクスで利用できる抽象データ型関数の情報

n行で1インデクス型分

SQL_EXCEPT

インデクスの除外キー値の情報

n行で1インデクスの除外キー群

SQL_IOS_GENERATIONS

UNIX版の場合：

インナレプリカ機能使用時のHiRDBファイルシステム領域の世代情報

Windows版の場合：

システムが使用する情報（内容は空となります）

UNIX版の場合：

1行で1HiRDBファイルシステム領域分

Windows版の場合：

なし

SQL_TRIGGERS

スキーマ内にあるトリガの情報

1行で1トリガ分

SQL_TRIGGER_COLUMNS

UPDATEトリガの契機列リスト情報

1行で1契機列情報

SQL_TRIGGER_DEF_SOURCE

トリガ定義ソース情報

n行で1トリガ定義ソース情報

SQL_TRIGGER_USAGE

トリガ動作条件中で参照している資源情報

1行で，トリガ動作条件中で参照している資源名称一つ

SQL_PARTKEY

マトリクス分割表の分割キーの情報

1行で1分割キー情報

SQL_PARTKEY_DIVISION

マトリクス分割表の分割条件値の情報

1行で1分割条件値情報

SQL_AUDITS

監査対象の情報

1行で1オブジェクト又は1ユーザに対する1イベント分の情報

SQL_REFERENTIAL_CONSTRAINTS

参照制約の対応状況

1行で1制約分の情報

SQL_KEYCOLUMN_USAGE

外部キーを構成する列情報

1行で1列分の情報

SQL_TABLE_CONSTRAINTS

スキーマ内にある整合性制約の情報

1行で1整合性制約分の情報

SQL_CHECKS

検査制約の情報

1行で1検査制約分の情報

SQL_CHECK_COLUMNS

検査制約で使用している列の情報

1行で一つの検査制約で使用している1列分の情報

SQL_DIV_TYPE

キーレンジ分割とハッシュ分割を組み合わせたマトリクス分割表の分割キーの情報

1行で1分割キー数分の情報

SQL_SYSPARAMS

連続認証失敗回数制限，及びパスワードの文字列制限の情報

1行で1設定項目数分，n行で一つの連続認証失敗回数制限分，又は一つのパスワードの文字列制限分の情報

SQL_INDEX_XMLINF

部分構造インデクスの構成部分構造パス情報

1行で1インデクスの情報

SQL_SEQUENCES

順序数生成子の情報

1行で1順序数生成子分の情報

SQL_ACCESS_SECURITY

IPアドレスによる接続制限の情報

1行で1接続制約分の情報

検索時のSQLの記述例

データディクショナリ表を検索するSQL文の例を次に示します。SQLの詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

ディクショナリ表の参照権限の設定によっては，検索できる情報が限られます。データディクショナリ表の参照権限の設定については，マニュアル「HiRDB システム運用ガイド」を参照してください。

なお，ディクショナリ表を検索した後は，すぐにCOMMIT文を発行するか，又は検索例のようにWITHOUT LOCK NOWAITを指定するかしてください。

＜例1＞

HiRDBのシステムにないRDエリアのサーバ名，HiRDBファイル名，及び所属するRDエリア名を知りたい場合

   SELECT X.SERVER_NAME, PHYSICAL_FILE_NAME, X.RDAREA_NAME
      FROM MASTER.SQL_PHYSICAL_FILES X, MASTER.SQL_RDAREAS Y
      WHERE X.RDAREA_NAME=Y.RDAREA_NAME
      ORDER BY X.SERVER_NAME
      WITHOUT LOCK NOWAIT

＜例2＞

自分の所有する表の列の定義情報の中から，列を含む表の名称，列名，データ型，及び列データ長を知りたい場合

   SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH
      FROM MASTER.SQL_COLUMNS
      WHERE TABLE_SCHEMA=USER※
      ORDER BY TABLE_NAME
      WITHOUT LOCK NOWAIT

＜例3＞

自分の所有する表のインデクス定義情報の中から，インデクスを含む表の名称，インデクスの名称，及びページ内未使用領域の比率を知りたい場合

   SELECT TABLE_NAME, INDEX_NAME, FREE_AREA
      FROM MASTER.SQL_INDEXES
      WHERE TABLE_SCHEMA=USER※
      ORDER BY TABLE_NAME
      WITHOUT LOCK NOWAIT

＜例4＞

自分がアクセスできる表と，その表に対するアクセス権限の種類(SELECT権限，INSERT権限，DELETE権限，及びUPDATE権限)の有無について知りたい場合

   SELECT TABLE_NAME, SELECT_PRIVILEGE, INSERT_PRIVILEGE,
      DELETE_PRIVILEGE, UPDATE_PRIVILEGE
      FROM MASTER.SQL_TABLE_PRIVILEGES
      WHERE GRANTEE=USER※ OR GRANTEE='PUBLIC'
      WITHOUT LOCK NOWAIT

＜例5＞

コマンドをグループ指定するとき，対象となるRDエリア(先行文字列がRD1のRDエリア)の数を知りたい場合

   SELECT COUNT(*) FROM MASTER.SQL_RDAREAS
      WHERE RDAREA_TYPE='U' AND
      RDAREA_NAME LIKE 'RD1%'
      WITHOUT LOCK NOWAIT

＜例6＞

コマンドをグループ指定するとき，対象となるRDエリア(先行文字列がRD1のRDエリア)の名称を知りたい場合

   SELECT RDAREA_NAME FROM MASTER.SQL_RDAREAS
      WHERE RDAREA_TYPE='U' AND
      RDAREA_NAME LIKE 'RD1%' ORDER BY RDAREA_NAME
      WITHOUT LOCK NOWAIT

＜例7＞

自分の所有する非分割表(名称がT1の表)が格納されているRDエリアのRDエリア名を知りたい場合

   SELECT X.RDAREA_NAME
      FROM MASTER.SQL_RDAREAS X, MASTER.SQL_TABLES Y
      WHERE Y.TABLE_SCHEMA=USER※
        AND Y.TABLE_NAME='T1'
        AND X.RDAREA_NAME=Y.RDAREA_NAME
      WITHOUT LOCK NOWAIT

注※　USERは，実行ユーザの認可識別子を値に持つ変数です。認可識別子の詳細については，マニュアル「HiRDB SQLリファレンス」を参照してください。

＜例8＞

データディクショナリLOB用RDエリアを再初期化するとき，実行時に使用するストアドプロシジャ及びストアドファンクションのオブジェクトを格納しているRDエリアの名称(オブジェクト格納用RDエリア名)を知りたい場合

   SELECT RDAREA_NAME FROM MASTER.SQL_DIV_COLUMN
      WHERE TABLE_SCHEMA='HiRDB'
        AND TABLE_NAME='SQL_ROUTINES'
        AND COLUMN_NAME='ROUTINE_OBJECT'
      WITHOUT LOCK NOWAIT

注　データディクショナリLOB用RDエリアを再初期化した場合，実行後にすべてのSQLオブジェクトを再作成する必要があります。

＜例9＞

無効となったSQLオブジェクト，又はインデクス無効状態のストアドプロシジャ及びストアドファンクションの名称を知りたい場合

   SELECT ROUTINE_SCHEMA,ROUTINE_NAME
      FROM MASTER.SQL_ROUTINES
      WHERE ROUTINE_VALID='N'
        OR INDEX_VALID='N'
      WITHOUT LOCK NOWAIT

＜例10＞

ユーザ定義関数FUNC1の引数に埋込み変数を利用する場合に，実際に使用するユーザ定義関数の引数のデータ型を知りたい場合

   SELECT PARAMETER_NAME,DATA_TYPE,UDT_OWNER,UDT_NAME,PARAMETER_NO
      FROM MASTER.SQL_ROUTINE_PARAMS
      WHERE ROUTINE_SCHEMA=USER AND ROUTINE_NAME='FUNC1'
        ORDER BY PARAMETER_NO
      WITHOUT LOCK NOWAIT

＜例11＞

ユーザ（USERA）が所有するすべての表を再編成する場合に，その表が格納されているRDエリアを知りたいとき（閉塞する必要があるRDエリアを知りたいとき）

非分割表の場合：
   SELECT DISTINCT(RDAREA_NAME) FROM MASTER.SQL_TABLES
      WHERE TABLE_SCHEMA=USERA AND RDAREA_NAME IS NOT NULL
      WITHOUT LOCK NOWAIT

分割表の場合：
   SELECT DISTINCT(RDAREA_NAME) FROM MASTER.SQL_DIV_TABLE
      WHERE TABLE_SCHEMA=USERA
      WITHOUT LOCK NOWAIT

求められたRDエリア名を重複排除した結果が，閉塞する必要があるRDエリア名となります。

付録G.3　ディクショナリ表の詳細

参照するために必要なデータディクショナリ表の定義情報を表ごとに示します。

なお，各ディクショナリ表にVARCHAR又はMVARCHARのデータ型の列がありますが，これはデータベース初期設定ユティリティ，又はデータベース構成変更ユティリティのdictionary datatypeオペランドで，データ型をどちらにするか設定してください。

(1)　SQL_PHYSICAL_FILES表の内容

この表では，HiRDBファイルの情報(HiRDBファイルとRDエリアとの関係)を管理します（1行で1HiRDBファイル分）。

SQL_PHYSICAL_FILES表の内容を次の表に示します。

表G‒2　SQL_PHYSICAL_FILES表の内容

項番

列　　名

データ型

内　　　容

1

SERVER_NAME

CHAR(8)

サーバ名称(バックエンドサーバ名又はディクショナリサーバ名)。

2

PHYSICAL_FILE_NAME

VARCHAR(167)

HiRDBファイル名。

3

RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

HiRDBファイルを割り当てたRDエリア名。

4

INITIAL_SIZE

INTEGER

HiRDBファイルのセグメント数。

5

PHYSICAL_FILE_ID

INTEGER

物理ファイルID。

(2)　SQL_RDAREAS表の内容

この表では，RDエリアの定義情報を管理します（1行で1RDエリア分）。

SQL_RDAREAS表の内容を次の表に示します。

表G‒3　SQL_RDAREAS表の内容

項番

列　　名

データ型

内　　　容

1

RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

RDエリアの名称。

2

SERVER_NAME

CHAR(8)

サーバ名称(バックエンドサーバ名又はディクショナリサーバ名) 。

3

RDAREA_TYPE

CHAR(1)

RDエリアの種類。

Ｍ：マスタディレクトリ用RDエリア

Ｄ：データディレクトリ用RDエリア

Ｓ：データディクショナリ用RDエリア

Ｗ：ワーク用のユーザ用RDエリア

Ｕ：ユーザ用RDエリア

Ｐ：データディクショナリLOB用RDエリア

Ｌ：ユーザLOB用RDエリア

Ｒ：レジストリ用RDエリア

Ｋ：レジストリLOB用RDエリア

Ａ：リスト用RDエリア

4

PAGE_SIZE

INTEGER

ページ長(単位：バイト) 。

5

SEGMENT_SIZE

INTEGER

セグメントサイズ(単位：ページ) 。

6

FILE_COUNT

INTEGER

HiRDBファイル数。

7

N_TABLE

INTEGER

格納表数(定義数)。

初期値は0となります。表と順序数生成子を定義している場合は，表と順序数生成子を合わせて500が上限値となります。

8

N_INDEX

INTEGER

格納インデクス数(定義数)。

初期値は0となります。

9

RDAREA_ID

INTEGER

RDエリアID。

10

REBALANCE_TABLE

CHAR(1)

リバランス表の有無。

Y：リバランス表あり

ナル値：リバランス表なし

11

MAX_ENTRIES

INTEGER

最大リスト登録数。

リスト用RDエリア以外の場合，又はmax entriesを指定していない場合はナル値となります。

12

EXTENSION

CHAR(1)

RDエリアの増分指定有無。

U：指定あり

N：指定なし

13

EXTENSION_SEGMENT_SIZE

INTEGER

増分セグメント数。

RDエリアの増分指定がない場合はナル値となります。

14

ORIGINAL_RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

UNIX版の場合：

オリジナルRDエリアの名称。

レプリカRDエリアでない場合はナル値となります。

Windows版の場合：

システムが使用する情報（内容は空となります）。

15

ORIGINAL_RDAREA_ID

INTEGER

UNIX版の場合：

オリジナルRDエリアのID。

レプリカRDエリアでない場合はナル値となります。

Windows版の場合：

システムが使用する情報（内容は空となります）。

16

GENERATION_NUMBER

SMALLINT

UNIX版の場合：

世代番号。

オリジナルRDエリア及びレプリカRDエリア以外のRDエリアの場合はナル値となります。

Windows版の場合：

システムが使用する情報（内容は空となります）。

17

REPLICA_COUNT

SMALLINT

UNIX版の場合：

レプリカカウンタ。

オリジナルRDエリア以外の場合，及びレプリカRDエリアがなくなったRDエリアの場合はナル値となります。

Windows版の場合：

システムが使用する情報（内容は空となります）。

18

REPLICA_STATUS

CHAR(1)

UNIX版の場合：

レプリカステータス。

C：カレントRDエリア

S：サブRDエリア

オリジナルRDエリア及びレプリカRDエリア以外のRDエリアの場合はナル値となります。

Windows版の場合：

システムが使用する情報（内容は空となります）。

19

SHARED

CHAR(1)

共用RDエリアの指定。

S：共用RDエリア

ナル値：非共用RDエリア

20

N_SEQUENCE

INT

格納順序数生成子数。

順序数生成子数が0の場合はナル値となります。表と順序数生成子を定義している場合は，表と順序数生成子を合わせて500が上限値となります。

21

DATA_MODEL

CHAR(1)

システムが使用する情報。

22

TEMPORARY_ATTR

CHAR(1)

一時表用RDエリアの属性。

S：SQLセッション間共有属性の一時表用RDエリア

C：特定SQLセッション占有属性の一時表用RDエリア

ユーザ用RDエリア及び一時表用RDエリアでない場合はナル値となります。

(3)　SQL_TABLES表の内容

この表では，スキーマ内にある表の情報を管理します（1行で1表分）。

なお，SQL_TABLES表の行は，表を定義するときに作成され，表を削除するときに削除されます。

SQL_TABLES表の内容を次の表に示します。

表G‒4　SQL_TABLES表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。パブリックビュー表の場合はPUBLIC。

2

TABLE_NAME

VARCHAR(30) ，又は

MVARCHAR(30)

表の名称。

3

TABLE_TYPE

CHAR(16)

表の種別。

BASE TABLE：永続実表

VIEW：ビュー表

READ ONLY VIEW：読み込み専用ビュー表

GLOBAL TEMPORARY：一時表

4

TABLE_ID

INTEGER

表ID。

システム内のユニークな内部IDを示します。

5

N_COLS

SMALLINT

構成列数。

6

N_INDEX

SMALLINT

インデクス定義数。

次のインデクスの定義数の合計です。

B-treeインデクス（主キー，クラスタキー，及び部分構造インデクスを含む）

プラグインインデクス

初期値は0です。

7

DCOLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

分割列名（複数列の分割，及びマトリクス分割の場合は先頭の分割キーの列名）。

非分割表，及びビュー表の場合はナル値となります。

8

VDEFLEN

INTEGER

ビュー解析情報長。

実表の場合はナル値となります。

9

FREE_AREA

SMALLINT

ページ内未使用領域の比率(%)。

ビュー表の場合は0となります。

10

FREE_PAGE

SMALLINT

セグメント内空きページ(未使用ページ)比率(%)。

ビュー表の場合は0となります。

11

TABLE_COMMENT

VARCHAR(255)，又は

MVARCHAR(255)

コメント。

初期値はナル値となります。

12

CREATE_TIME

CHAR(14)

表作成時刻(YYYYMMDDHHMMSS) 。

13

ENQ_RESOURCE_SIZE

CHAR(1)

排他資源単位。

P：ページ単位

行単位の排他の場合，ビュー表，及び一時表の場合はナル値となります。

14

DEFAULT_COLUMN

SMALLINT

既定値（DEFAULT句又はWITH DEFAULT）の指定列数。

ビュー表及びディクショナリ表の場合はナル値となります。

15

RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

非分割格納先RDエリア名称。

分割表，ビュー表，及び一時表の場合はナル値となります。

16

DEFINITION_CACHE_SIZE

INTEGER

表定義キャッシュサイズ(単位： バイト)。

ディクショナリの場合はナル値となります。

17

STATISTICS_CACHE_SIZE

INTEGER

統計情報キャッシュサイズ(単位：バイト)。

初期値はナル値となります。

18

N_RDAREA

INTEGER

格納先RDエリア数(1〜4096)。

ビュー表，及び一時表の場合は0となります。

19

FIX_TABLE

CHAR(1)

FIX指定。

F：指定あり

N：指定なし

20

VIEW_LEVEL

INTEGER

ビュー定義のネスト数。

実表の場合はナル値となります。

21

N_BASETABLE

INTEGER

ビュー表の基となる表の数。

実表の場合はナル値となります。

22

ROW_LENGTH

INTEGER

FIX表の行長。

FIX表でない表，及びビュー表の場合はナル値となります。

23

N_NOTNULL

INTEGER

非ナル値列数。

ビュー表，及びディクショナリ表の場合はナル値となります。

24

COMPRESS_TYPE

VARCHAR(8)

データ圧縮情報。

圧縮種別(先頭1バイト)

　S：データ抑制(SUPPRESS)

2バイト目以降

　抑制データ型

　　D：DECIMAL

SUPPRESSを指定していない表，ビュー表，及びディクショナリ表の場合はナル値となります。

25

DIV_TYPE

CHAR(1)

分割種別。

P：境界値分割，及びマトリクス分割

H：フレキシブルハッシュ分割

F：FIXハッシュ分割

M：ハッシュ混在マトリクス分割

非分割表，キーレンジ分割表，及びビュー表の場合はナル値となります。

26

HASH_NAME

VARCHAR(8)，又は

MVARCHAR(8)

ハッシュ関数名。

"HASH1"

"HASH2"

"HASH3"

"HASH4"

"HASH5"

"HASH6"

"HASH0"

"HASHA"

"HASHB"

"HASHC"

"HASHD"

"HASHE"

"HASHF"

"HASHZ"

HASHを指定していない表，マトリクス分割表，ビュー表，及びディクショナリ表の場合はナル値となります。

27

N_LOB_COLUMN

SMALLINT

データ型がBLOBの列数。

ビュー表，及びBLOBの列がない表の場合はナル値となります。

28

N_LOB_RDAREA

INTEGER

表が持つユーザLOB用RDエリア数。

ビュー表，BLOBの列がない表，及びBLOB属性を含む抽象データ型がない表の場合はナル値となります。

29

CHANGE_TIME

CHAR(14)

表定義の変更時刻(YYYYMMDDHHMMSS)。

表の初期作成時はナル値となります。

30

N_DIV_COLUMN

SMALLINT

分割キー列数(2〜16)。

非分割表，単一列分割キーを指定した表，及びビュー表の場合はナル値となります。

31

COLUMN_SUP_INF

CHAR(1)

列ごとのデータ抑制指定有無。

Y：指定あり

ナル値：指定なし

列ごとのデータ抑制を指定していない表，及びビュー表の場合はナル値となります。

32

N_ADT_COLUMN

SMALLINT

データ型が抽象データ型の列数。

抽象データ型が定義されていない表の場合はナル値となります。

33

WITHOUT_ROLLBACK

CHAR(1)

WITHOUT ROLLBACK指定有無。

Y：指定あり

ナル値：指定なし

WITHOUT ROLLBACKを指定していない表，及びビュー表の場合はナル値となります。

34

N_EXCEPT_VALUES

INTEGER

インデクス除外キー値の数。

除外値指定がないインデクス，及びビュー表の場合はナル値となります。

35

EXCEPT_VALUES_LEN

INTEGER

インデクス除外キー値の合計長（バイト）。

除外値指定がないインデクス，及びビュー表の場合はナル値となります。

36

REBALANCE

CHAR(1)

リバランス機能の使用有無。

Y：使用します。

リバランス機能を使用しない表，及びビュー表の場合はナル値となります。

37

INDEXLOCK_OPT

CHAR(1)

システムが使用する情報。

38

N_PK_COLUMNS

SMALLINT

主キーの列数。

主キーを定義していない場合はナル値となります。

39

FOREIGN_SERVER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

システムで使用する情報。

40

FOREIGN_SERVER_ID

INTEGER

システムで使用する情報。

41

BASE_FOREIGN_TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

システムで使用する情報。

42

BASE_FOREIGN_TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

システムで使用する情報。

43

N_RDAREA_BEFORE_REBALANCE

INTEGER

ALTER TABLE ADD RDAREA実行前の分割情報数（SQL_DIV_TABLE表の行数）※１

リバランスを開始した場合，及びリバランス表以外の表，ビュー表の場合はナル値となります。

44

ON_REBALANCE

CHAR(1)

リバランス実行状態。

Y：実行中

ナル値：実行中でない

リバランス開始後にYとなり，リバランスが正常終了するとナル値になります。

45

SEGMENT_REUSE

CHAR(1)

SEGMENT REUSEの指定有無。

Y：指定あり

ナル値：指定なし

SEGMENT REUSEにNOを指定している場合（省略している場合も含む），及びビュー表の場合はナル値となります。

46

N_REUSE_SEGMENT

INTEGER

空き領域の再利用を開始するセグメント数。※２

SEGMENT REUSEにNOを指定している場合（SEGMENT REUSEを省略している場合も含む），及びビュー表の場合はナル値となります。

47

REUSE_SEGMENT_SIZE

CHAR(10)

空き領域の再利用を開始するセグメント数の指定値。※３

SEGMENT REUSEにセグメント数以外を指定している場合，及びビュー表の場合はナル値となります。

48

REUSE_SEGMENT_SIZE_TYPE

CHAR(1)

空き領域の再利用を開始するセグメント数の単位。

K：K指定時

M：M指定時

ナル値：省略時

SEGMENT REUSEにセグメント数以外を指定している場合，及びビュー表の場合はナル値となります。

49

INSERT_ONLY

CHAR(1)

改竄防止機能の指定有無。

Y：指定あり

ナル値：指定なし

改竄防止機能を使用していない場合，及びビュー表の場合はナル値となります。

50

DELETE_PROHIBIT_TERM_TYPE

CHAR(1)

行削除禁止期間の種別。

I：日間隔データ

Y：ラベル付き間隔（YEAR）

M：ラベル付き間隔（MONTH）

D：ラベル付き間隔（DAY）

ナル値：指定なし

改竄防止機能を使用していない場合，行削除禁止期間を指定していない場合，及びビュー表の場合はナル値となります。

51

DELETE_PROHIBIT_TERM

CHAR(10)

行削除禁止期間の指定値※４。

改竄防止機能を使用していない場合，行削除禁止期間を指定していない場合，及びビュー表の場合はナル値となります。

52

SYSGEN_COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

挿入履歴保持列の名称。

改竄防止機能を使用していない場合，行削除禁止期間を指定していない場合，及びビュー表の場合はナル値となります。

53

N_TRIGGER

INTEGER

トリガ定義数。

トリガ未定義，ビュー表，及びディクショナリ表の場合はナル値となります。

54

N_DIV_DIMENSION

SMALLINT

分割次元数。

マトリクス分割表以外の場合はナル値となります。

55

AUDIT_TABLE_OPTION

CHAR(1)

この表が監査証跡表であるかどうかの値。

Y：監査証跡表

V：監査証跡表を基にしたビュー表

監査証跡表，及び監査証跡表を基にしたビュー表以外の場合はナル値となります。

56

N_PARENTS

SMALLINT

外部キーの数。

参照制約を定義していない表，及びビュー表の場合はナル値となります。

57

N_CHILDREN

SMALLINT

この表の主キーを参照する外部キーの数。

被参照表以外の表，及びビュー表の場合はナル値となります。

58

N_FK_COLUMNS

SMALLINT

外部キーの列数の合計。

参照制約を定義していない表，及びビュー表の場合はナル値となります。

59

CHECK_PEND

CHAR(1)

参照制約の検査保留状態の種別。

C：保留状態

ナル値：非保留状態

ビュー表の場合はナル値となります。

60

N_CHECK

INTEGER

定義した検査制約の数。

検査制約を定義していない表，及びビュー表の場合はナル値となります。

61

N_CHECK_LIMIT

INTEGER

検査制約制限値※５。

検査制約を定義していない表，及びビュー表の場合はナル値となります。

62

CHECK_PEND2

CHAR(1)

検査制約の検査保留状態の種別。

C：保留状態

ナル値：非保留状態

ビュー表の場合はナル値となります。

63

CHK_SOURCE_LEN

INTEGER

検査制約の探索条件の長さの合計。

検査制約を定義していない表，及びビュー表の場合はナル値となります。

64

SHARED

CHAR(1)

共用表の指定。

S：共用表

ナル値：非共用表

65

CHANGE_TIME_INSERT_ONLY

CHAR(14)

改竄防止表への変更時間（YYYYMMDDHHMMSS）。

表定義時，及びビュー表の場合はナル値となります。

66

N_UPDATE_COLUMN

SMALLINT

更新可能列属性の指定列数。

更新可能列属性を指定していない表，及びビュー表の場合はナル値となります。

67

TABLE_CREATOR

VARCHAR(30)，又は

MVARCHAR(30)

パブリックビュー表の定義者。

パブリックビュー表以外の場合，ナル値となります。

68

N_CONSTRUCTOR_COLUMN

SMALLINT

システムが使用する情報。常にナル値となります。

69

CONSTRUCTOR_TYPE

CHAR(1)

システムが使用する情報。常にナル値となります。

70

NONE_DFLTCST_CLMCOUNT

SMALLINT

既定文字集合以外の文字集合の指定列数。

文字集合を指定していない場合はナル値となります。

71

CHARSET_SPECCOUNT

SMALLINT

文字集合を指定した列数。

文字集合を指定していない場合はナル値となります。

72

N_PARTIAL_STRUCTURE_INDEXES

SMALLINT

部分構造インデクス定義数。

部分構造インデクスを定義していない場合，及びビュー表の場合はナル値となります。

73

MEMORY_TABLE

CHAR(1)

システムが使用する情報。常にナル値となります。

74

DBAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

システムが使用する情報。常にナル値となります。

75

XDS_NAME

CHAR(8)

システムが使用する情報。常にナル値となります。

76

N_COMPRESS

SMALLINT

圧縮列の数。

圧縮列がない場合，及びビュー表の場合はナル値となります。

77

TMP_COMMIT_ROWS

CHAR(1)

一時表のデータ有効期間。

D：DELETE（トランザクション固有一時表）

P：PRESERVE（SQLセッション固有一時表）

一時表以外の場合はナル値となります。

78

REUSE_OPTION

INTEGER

空き領域の再利用の再利用オプション値。

SEGMENT_REUSE列の値がナル値の場合，再利用オプション値が0の場合，及び再利用オプションを指定していない場合はナル値となります。

注※1

リバランス表に対して，ALTER TABLE ADD RDAREAでRDエリアを追加した場合，RDエリア追加前の分割情報数（SQL_DIV_TABLE表の行数）が格納されます。ただし，一度設定した分割情報数は，リバランスユティリティ（pdrbal）を実行してリバランスが終了するまでは，ALTER TABLE ADD RDAREAでRDエリアを追加しても更新されません。リバランスが終了するとナル値となります。

注※2

セグメント数の単位を指定した場合，値は次のように格納されます。

'K'指定時：指定値×1024

'M'指定時：指定値×1024²

注※3

値は，右詰めの文字形式で格納されます。なお，セグメント数の単位（'K'，及び'M'）は含まれません。

注※4

行削除禁止期間の種別によって，次のように格納されます。

'I'の場合："＋YYYYMMDD."の文字形式

'Y'，'M'，及び'D'の場合：右詰めの文字形式

注※5

検査制約制限値は，検査制約の探索条件中で指定した論理演算子の数（CASE式のWHEN探索条件中のAND，ORを除くANDの数，及びORの数）の合計と，検査制約数の合計となります。

例：

次のように表定義をした場合，検査制約制限値は4となります（論理演算子（ANDとOR）の合計が2，検査制約数の合計が2）。

CREATE TABLE "ZAIKO"
  ("GNO" CHAR(5),"GNAME" CHAR(8),"TANKA" INTEGER,
    "SURYO" INTEGER,"NYUKOBI" DATE)
  CHECK("SURYO"≧100 AND "SURYO"≦1000)
  CONSTRAINT "SURYOKISOKU"
  CHECK("NYUKOBI"=DATE('1992-08-21')
    OR "NYUKOBI"=DATE('1992-09-21'))
  CONSTRAINT "NYUKOBIKISOKU"

(4)　SQL_COLUMNS表の内容

この表では，列の定義情報を管理します（1行で1列分）。

なお，SQL_COLUMNS表の行は，表を定義するときに作成され，表を削除(スキーマの削除も含む)するときに削除されます。

SQL_COLUMNS表の内容を次の表に示します。

表G‒5　SQL_COLUMNS表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。パブリックビュー表の場合はPUBLIC。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

列を含む表の名称。

3

COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

列名。

4

TABLE_ID

INTEGER

表ID。

5

COLUMN_ID

SMALLINT

列ID。

1から始まる整数です。0以下はありません。

6

DATA_TYPE

CHAR(24)

データ型。※１

7

DATA_LENGTH

CHAR(7)

列データ長。

右詰めで文字形式にして格納します(上位の0は空白にします)。

8

IS_NULLABLE

CHAR(3)

列ナル情報。

YES：ナル値を許容する

NO：ナル値を許容しない

9

DIVIDED_KEY

CHAR(1)

分割キー。

Y：分割キー

空白：分割キー以外

10

CLUSTER_KEY

CHAR(1)

クラスタキー。

Y：クラスタキー構成列

空白：クラスタキー構成列以外

11

COLUMN_COMMENT

VARCHAR(255)，又は

MVARCHAR(255)

コメント。

初期値はナル値となります。

12

BASE_TYPE

CHAR(1)

基の列の種別。※７

C：列

F：集合関数

E：そのほか

実表の場合はナル値となります。

13

BASE_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

基の列を含む実表の所有者。

実表の場合はナル値となります。

14

BASE_TABLE

VARCHAR(30)，又は

MVARCHAR(30)

基の列を含む実表の名称。

実表の場合はナル値となります。

15

BASE_COLUMN

VARCHAR(30)，又は

MVARCHAR(30)

基の列名。

実表の場合はナル値となります。

16

DEFAULT_COLUMN

CHAR(1)

WITH DEFAULTの指定。

Y：指定あり

N：指定なし

ビュー表の場合はナル値となります。

17

COLUMN_OFFSET

SMALLINT

列オフセット。

FIX表でない表，及びビュー表の場合はナル値となります。

18

HASH_KEY

CHAR(1)

ハッシュキー。

Y：ハッシュキー

空白：ハッシュキー以外

19

RECOVERY_TYPE

CHAR(1)

RECOVERYの指定。

A：ALL

P：PARTIAL

N：NO

データ型がBLOB以外の場合はナル値となります。※８

20

LOB_LENGTH

CHAR(20)

列長の指定値。

右詰めで文字形式にして格納します（上位の0は空白にします）。

データ型がBLOB及びBINARY以外の場合はナル値となります。※８

21

LOB_LENGTH_TYPE

CHAR(1)

列長のタイプ(列長の単位) 。

K：K指定時

M：M指定時

G：G指定時

空白：省略時

データ型がBLOB以外の場合はナル値となります。※８

22

DATA_TYPE_CODE

SMALLINT

データ型コード。※２

23

DATA_LENGTH_CODE

SMALLINT

列データ長コード。※３

24

LOB_LENGTH_CODE

CHAR(8)

BLOB列データ長コード。※４※５

データ型がBLOB及びBINARY以外の場合はナル値となります。

25

DIVCOL_ORDER

SMALLINT

分割キー指定順序(0〜16)。

該当する表内で1から始まるユニークな値です。分割キーの指定順に+1した値となります。分割キーでない列は0を設定します。

非分割表，単一列分割キーを指定した表，及びビュー表の場合はナル値となります。

26

SUPPRESS_INF

CHAR(1)

データ抑制指定有無。

Y：指定あり

ナル値：指定なし

データ抑制を指定していない表，及びビュー表の場合はナル値となります。

27

PLUGIN_DESCRIPTION

VARCHAR(255)

プラグインオプションの内容。

PLUGIN句の指定がない場合はナル値となります。

28

UDT_OWNER

VARCHAR(30)

ユーザ定義型の所有者。

ユーザ定義型でない場合はナル値となります。

29

UDT_NAME

VARCHAR(30)

ユーザ定義型の型名称。

ユーザ定義型でない場合はナル値となります。

30

UDT_TYPE_ID

INTEGER

ユーザ定義型の型ID。

ユーザ定義型でない場合はナル値となります。

31

MAX_ELM

SMALLINT

繰返し列の最大要素数。

繰返し列でない列の場合はナル値となります。

32

NO_SPLIT

CHAR(1)

NO SPLITの指定有無。

Y：指定あり

ナル値：指定なし

ビュー表の場合，及びALTER TABLE CHANGE SPLIT実行時の場合はナル値となります。

33

PRIMARY_KEY

CHAR(1)

主キー種別。

Y：主キーです。

空白：主キーではありません。

34

COLLATING_SEQUENCE

CHAR(1)

システムで使用する情報。

35

TRAILING_SPACE

CHAR(1)

システムで使用する情報。

36

SYSTEM_GENERATED

CHAR(1)

SYSTEM GENERATEDの指定有無。

Y：指定あり

ナル値：指定なし

SYSTEM GENERATEDを指定していない場合，及びビュー表の場合はナル値となります。

37

DEFAULT_CLAUSE

CHAR(1)

DEFAULT句の指定有無。

Y：指定あり

ナル値：指定なし

DEFAULT句を指定していない場合，及びビュー表の場合はナル値となります。

38

DEFAULT_VALUE

VARCHAR(32000)，又は

MVARCHAR(32000)※６

DEFAULT句に指定した既定値（文字形式）。※９

DEFAULT句を指定していない場合，及びビュー表の場合はナル値となります。

39

DEFAULT_VALUE2

VARCHAR(32000)，又は

MVARCHAR(32000)※６

DEFAULT句に指定した既定値（定数指定時に，32,001〜64,000バイト目までの値を文字形式で格納）。※９

定数指定でない場合，DEFAULT句を指定していない場合，及びビュー表の場合はナル値となります。

40

DEFAULT_VALUE3

VARCHAR(3)，又は

MVARCHAR(3)

DEFAULT句に指定した既定値（定数指定時に，64,001バイト目以降の値を文字形式で格納）。※９

定数指定でない場合，DEFAULT句を指定していない場合，及びビュー表の場合はナル値となります。

41

CHECK_COLUMN

CHAR(1)

検査制約の指定。

Y：あり

検査制約を定義していない場合，及びビュー表の場合はナル値となります。

42

FOREIGN_KEY

CHAR(1)

外部キーの種別。

Y：外部キー構成列

ナル値：非外部キー構成列

43

UPDATABLE

CHAR(1)

更新可能列属性。

U：更新できます（UPDATE）

N：ナル値から非ナル値へ一度だけ更新できます（UPDATE ONLY FROM NULL）

更新可能列属性を指定していない表，及びビュー表の場合はナル値となります。

44

CONSTRUCTOR_TYPE

CHAR(1)

システムが使用する情報。常にナル値となります。

45

CHARSET_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

文字集合所有者（常に"MASTER"）。

文字集合を指定していない場合はナル値となります。

46

CHARSET_NAME

VARCHAR(30)，又は

MVARCHAR(30)

文字集合名。

"EBCDIK"：文字集合にEBCDIKを指定した場合

"UTF16"：文字集合にUTF16を指定した場合

文字集合を指定していない場合はナル値となります。

47

CHARSET_ID

INTEGER

文字集合ID。

文字集合を指定していない場合はナル値となります。

文字集合IDについては，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

48

COMPRESS_COLUMN

CHAR(1)

圧縮指定の有無。

Y：圧縮指定あり。

圧縮指定がない場合，及びビュー表の場合はナル値となります。

49

COMPRESS_PARTITION_SIZE_CODE

CHAR(8)

圧縮分割サイズ。※４※５

圧縮指定がない場合，及びビュー表の場合はナル値となります。

50

COMPRESS_PARTITION_SIZE

CHAR(20)

圧縮分割サイズ。

右詰めで文字形式にして格納します（上位の0は空白にします）。

圧縮指定がない場合，及びビュー表の場合はナル値となります。

51

COMPRESS_PARTITION_SIZE_TYPE

CHAR(1)

圧縮分割サイズの単位。

K：K指定時

M：M指定時

G：G指定時

空白：省略時

圧縮指定がない場合，及びビュー表の場合はナル値となります。

52

RESERVED_COLUMN

CHAR(1)

予備列状態。

R：予備列

予備列でない列の場合，及びビュー表の場合はナル値となります。

53

DEFAULT_ROW_EXISTS

CHAR(1)

DEFAULT句のON ROW EXISTS指定の有無。

Y：指定あり

ON ROW EXISTS指定でない場合，DEFAULT句を指定していない場合，及びビュー表の場合はNULL値となります。また，CREATE TABLE実行時は常にナル値となります。

注※1

データ型によって格納する値は次のように異なります。

データ型

格納する値

INTEGER

INTEGER

SMALLINT

SMALLINT

DECIMAL

DECIMAL

FLOAT

FLOAT

DOUBLE PRECISION

SMALLFLT

SMALLFLT

REAL

CHAR

CHAR

VARCHAR

VARCHAR

NCHAR

NCHAR

NVARCHAR

NVARCHAR

MCHAR

MCHAR

MVARCHAR

MVARCHAR

DATE

DATE

TIME

TIME

TIMESTAMP

TIMESTAMP

INTERVAL YEAR TO DAY

INTERVAL YEAR TO DAY

INTERVAL HOUR TO SECOND

INTERVAL HOUR TO SECOND

BINARY

BINARY

BLOB

BLOB

抽象データ型

ADT

BOOLEAN

BOOLEAN

注※2

データ型によって格納する値は次のように異なります。

データ型

格納する値

ナル値の指定ができる場合

ナル値の指定ができない場合

INTEGER

F1

F0

SMALLINT

F5

F4

DECIMAL

E5

E4

FLOAT

E1

E0

DOUBLE PRECISION

SMALLFLT

E3

E2

REAL

CHAR

C5

C4

VARCHAR

C1

C0

NCHAR

B5

B4

NVARCHAR

B1

B0

MCHAR

A5

A4

MVARCHAR

A1

A0

DATE

71

70

TIME

79

78

TIMESTAMP

7D

7C

INTERVAL YEAR TO DAY

65

64

INTERVAL HOUR TO SECOND

6F

6E

BINARY

91

90

BLOB

93

92

抽象データ型

83

82

BOOLEAN

21

20

注※3

DECIMAL型，INTERVAL YEAR TO DAY型，INTERVAL HOUR TO SECOND型の場合は，精度，位取りをそれぞれ1バイトに格納し，それ以外の場合は，2バイトの2進形式で長さ（NCHAR型，NVARCHAR型の場合は文字数）を格納します。ただし，BLOB型，BINARY型，及び抽象データ型の場合は0になります。

注※4

列長，又は圧縮分割サイズの指定値を，4バイトごとに区切られた8バイトの2進形式で格納します。

注※5

エンディアンが異なる接続形態でも，SQLの結果はエンディアン変換されません。したがって，アクセスする場合は，アプリケーション側でエンディアンを考慮して変換する必要があります。

注※6

NO SPLITを指定しています。

注※7

選択式が次のどれかの場合に，E（そのほか）が設定されます。

スカラ演算（四則演算，日付演算，時刻演算，連結演算，CASE式，及びスカラ関数）

定数

CAST指定

関数呼出し（プラグイン関数を除く）

USER値関数

CURRENT_DATE値関数

CURRENT_TIME値関数

CURRENT_TIMESTAMP値関数

注※8

ビュー表の列の場合，結果のデータ型がBLOBとなる関数呼出しを指定していると，次の値を設定します。これによって，関数定義時に指定した形式とは異なる形式となることがあります。

RECOVERY_TYPE列にはNULLを設定する

LOB_LENGTH列には割り切れる最大の単位（K，M，又はG）で割った値を設定する

LOB_LENGTH_TYPE列には，割り切れる最大の単位を設定する

注※9

DEFAULT句を指定した場合に格納される値を次の表に示します。

表G‒6　DEFAULT句を指定した場合に格納される値

既定値

データ型※１

DEFAULT_VALUE列，DEFAULT_VALUE2列，又はDEFAULT_VALUE3列に格納される値※２

データ長(文字形式での長さ)

既定値(文字形式)

省略

すべて

ナル値

ナル値

NULL

すべて

4

'NULL'

USER

CHAR，及びMCHAR

4

'USER'

VARCHAR，及びMVARCHAR

CURRENT_USER

CHAR，及びMCHAR

12

'CURRENT_USER'

VARCHAR，及びMVARCHAR

CURRENT DATE

DATE，又はCHAR(10)

12

'CURRENT△DATE'※３

CURRENT_DATE

12

'CURRENT_DATE'

CURRENT TIME

TIME，又はCHAR(8)

12

'CURRENT△TIME'※３

CURRENT_TIME

12

'CURRENT_TIME'

CURRENT TIMESTAMP(p)

（p:小数秒精度）

TIMESTAMP，CHAR(19)，CHAR(22)，CHAR(24)，又はCHAR(26)

20

'CURRENT△TIMESTAMP(p)'※３※７

CURRENT_TIMESTAMP(p)

（p:小数秒精度）

20

'CURRENT_TIMESTAMP(p)'※７

定数

文字列定数

文字列定数

例1：'HiRDB'

例2：'2002-10-24△10:50:23.1234'

CHAR，又はMCHAR

指定した既定値長＋2※４

指定した既定値※４

例：''HiRDB''

VARCHAR，又はMVARCHAR

DATE，TIME，又はTIMESTAMP

指定した既定値長＋2※４

指定した既定値※４

例：''2002-10-24△10:50:23.1234''

混在文字列定数

例：M'100年'

CHAR，又はMCHAR

指定した既定値長＋3※４

指定した既定値※４

例：'M'100年''

VARCHAR，又はMVARCHAR

各国文字列定数

例：N'ソフト'

NCHAR，又はNVARCHAR

指定した既定値長＋3※４

指定した既定値※４

例：'N'ソフト''

16進文字列定数

例1：X'48692D43'

例2：X'2002102410502312'

CHAR，VARCHAR，MCHAR，MVARCHAR，又はBINARY

指定した既定値長＋3※４

例：'X'48692D43''※４※６

DATE，TIME，又はTIMESTAMP(p)

例：'X'2002102410502312''※４※６

数定数

整数定数

例：10

INTEGER，SMALLINT，DECIMAL，FLOAT，又はSMALLFLT

指定した既定値長※５

指定した既定値※５

例：'10'

浮動小数点定数

例：15e+3

INTEGER，SMALLINT，DECIMAL，FLOAT，又はSMALLFLT

22又は23

指定した既定値※５

例：'+1.500000000000000E+04'

(左から，±1バイト，仮数部17バイト(10進数定数)，'E'1バイト，±1バイト，指数部2〜3バイト(10のべき乗))

10進数定数

例1：15.5

例2：-010101.

例3：00011399.

INTEGER，SMALLINT，DECIMAL，FLOAT，SMALLINT，INTERVAL YEAR TO DAY，又はINTERVAL HOUR TO SECOND

指定した既定値長※５

指定した既定値※５

例1：'△15.5'

例2：'-010101.'

例3：

INTERVAL YEAR TO DAYの場合，'+00020199.'

INTEGERの場合，'△00011399.'

(INTERVAL YEAR TO DAY，及びINTERVAL HOUR TO SECONDの場合，値を補正し，先頭に正負を表す符号が付きます(それ以外の場合，正の値のときは空白になります))

（凡例）△：1バイトの空白

注※1

BLOB，抽象データ型，及び32,001バイト以上のBINARYを除きます。

注※2

データ長が32,001バイト未満の場合，DEFAULT_VALUE2列及びDEFAULT_VALUE3列はナル値となります。データ長が32,001〜64,000バイトの場合，DEFAULT_VALUE3列がナル値となります。

注※3

CURRENTと，DATE，TIME，及びTIMESTAMPの間の空白は一つに編集します。

注※4

指定した既定値を文字形式の定数表現で格納します。データ長及び既定値に，定数表現のM，N，X，及びアポストロフィを含みます。したがって，データ長の範囲は，文字列定数の場合' 'を含めて2〜32,002バイト，混在文字列定数及び各国文字列定数の場合M' '，N' 'を含めて3〜32,003バイト，16進文字列定数の場合X' 'を含めて3〜64,003バイトとなります。

指定した定数の先頭1〜32,000バイト目までをDEFAULT_VALUE列に，32,001〜64,000バイト目までをDEFAULT_VALUE2列に，64,000バイト以降をDEFAULT_VALUE3列に格納します。

例：

16進文字列定数で32,000バイト分の既定値を指定した場合（Xとアポストロフィを含めて合計64,003バイト）

VARCHAR(32000) DEFAULT X'C1C1C1…C1C1C1'

DEFAULT_VALUE列には，先頭から32,000バイト「X'C1C1C1…」が格納されます。

DEFAULT_VALUE2列には，続きの32,000バイト「C1C1C1…」が格納されます。

DEFAULT_VALUE3列には，残りの3バイト「C1'」が格納されます。

注※5

指定した既定値が，文字形式の定数表現で格納されます。データ長には，文字形式表現での長さを格納します。

例：

数定数で既定値を指定した場合

INTEGER DEFAULT 100

DEFAULT_VALUE列には，先頭から3バイト「100」が格納されます。

DEFAULT_VALUE2列及びDEFAULT_VALUE3列には，ナル値が格納されます。

注※6

値はすべて大文字です（指定した値が小文字でも大文字で格納されます）。

注※7

既定値に指定するCURRENT_TIMESTAMP値の小数秒精度（p）を省略した場合，p=0が仮定されます。

(5)　SQL_INDEXES表の内容

この表では，次に示すインデクスに関する情報を管理します（1行で1インデクス分）。

B-treeインデクス（主キー，クラスタキー，及び部分構造インデクスを含む）

プラグインインデクス

SQL_INDEXES表の内容を次の表に示します。

表G‒7　SQL_INDEXES表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスを含む表の名称。

3

INDEX_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスの名称。

4

INDEX_ID

INTEGER

インデクスID。

5

TABLE_ID

INTEGER

表ID。

6

UNIQUE_TYPE

CHAR(1)

ユニークタイプ。

U：ユニーク

N：非ユニーク

7

COLUMN_COUNT

SMALLINT

インデクス構成列数。

8

CREATE_TIME

CHAR(14)

インデクス作成時刻(YYYYMMDDHHMMSS) 。

9

RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

非分割格納先RDエリア名称。

インデクスが分割されて格納されている場合，及び一時インデクスの場合はナル値となります。

10

CLUSTER_KEY

CHAR(1)

インデクス種別。

Y：クラスタキーのインデクス

N：クラスタキーのインデクス以外

11

DIV_INDEX

CHAR(1)

インデクス構成列の先頭列の種別。

Y：分割キー（複数列分割キーの場合は，CREATE TABLEで指定した分割キーと先頭から同じ並び順），又はプラグインインデクス

N：分割キー以外

12

FREE_AREA

SMALLINT

ページ内未使用領域の比率(%)。

13

COLUMN_ID_LIST

VARCHAR(128)

インデクスを構成する列IDリスト。※

+-で昇順降順を示します。単一列インデクス（クラスタキーのインデクス以外）の降順指定時には+を設定します。プラグインインデクスの場合は常に+を設定します。

14

SPLIT_OPT

CHAR(1)

ページスプリットオプション。

U：アンバランススプリット

アンバランススプリットを指定していないインデクスの場合はナル値となります。

15

ATTR_COUNT

SMALLINT

インデクスを構成する抽象データ型の属性の数。

CREATE INDEX(形式1)の場合はナル値となります。

16

INDEX_TYPE_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

インデクス型の所有者。

CREATE INDEX(形式1)の場合はナル値となります。

17

INDEX_TYPE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクス型の名称。

CREATE INDEX(形式1)の場合はナル値となります。

18

INDEX_TYPE_ID

INTEGER

インデクス型のID。

CREATE INDEX(形式1)の場合はナル値となります。

19

PLUGIN_DESCRIPTION

VARCHAR(255)

プラグインオプションの内容。

PLUGIN指定がない場合はナル値となります。

20

N_FUNCTION

INTEGER

適用関数の数。

CREATE INDEX(形式1)の場合はナル値となります。

21

EXCEPT_VALUES

CHAR(1)

除外値指定の有無。

Ｙ：あり

Ｎ：なし

22

N_EXCEPT_VALUES

SMALLINT

インデクスの除外キー値の数。

除外値指定のないインデクスの場合はナル値となります。

23

ARRAY_TYPE

CHAR(1)

インデクス構成列の種別。

M：インデクス構成列に繰返し列を含みます。

ナル値：インデクス構成列に繰返し列を含みません。

24

LOCK_OPT

CHAR(1)

システムが使用する情報。

25

PRIMARY_KEY

CHAR(1)

インデクスの種別。

Y：主キーインデクスです。

ナル値：主キーインデクスではありません。

26

DIV_IN_SRV

CHAR(1)

非分割キーインデクスのサーバ内横分割の有無。

Y：サーバ内分割しています。

ナル値：サーバ内分割していません。

分割キーインデクスの場合もナル値となります。

27

SHARED

CHAR(1)

共用インデクスの指定。

S：共用インデクス

ナル値：非共用インデクス

28

N_PARTIAL_STRUCTURE_PATHS

SMALLINT

部分構造インデクスの構成部分構造パス数。

部分構造インデクスを定義していない場合はナル値となります。

29

USING_UNIQUE_TAG

CHAR(1)

部分構造パスのユニーク種別

'Y'：部分構造パスがユニークである

NULL：上記以外

部分構造インデクスを定義していない場合，及びUSING UNIQUE TAGを指定していない場合はナル値となります。

30

DBAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

システムが使用する情報。常にナル値となります。

31

TMP_INDEX_TYPE

CHAR(1)

一時インデクスの種別。

G：一時インデクス

一時インデクス以外の場合はナル値となります。

注※

エンディアンが異なる接続形態でも，SQLの結果はエンディアン変換されません。したがって，アクセスする場合は，アプリケーション側でエンディアンを考慮して変換する必要があります。

(6)　SQL_USERS表の内容

この表では，ユーザの実行権限，及びDBA権限の情報を管理します（1行で1ユーザ分）。

なお，この表を参照できるのは，DBA権限所有者，及び監査人だけです。

SQL_USERS表の内容を次の表に示します。

表G‒8　SQL_USERS表の内容

項番

列　　名

データ型

内　　　容

1

USER_ID

VARCHAR(30)，又は

MVARCHAR(30)

権限を持つユーザの名称。

2

DBA_PRIVILEGE

CHAR(1)

DBA権限。

Y：DBA権限がある

N：DBA権限がない

初期値はNとなります。

3

SCHEMA_PRIVILEGE

CHAR(1)

スキーマ定義権限。

Y：スキーマ定義権限がある

S：スキーマを所有している

N：スキーマ定義権限がない

初期値はNとなります。

4

CREATE_TIME

CHAR(14)

スキーマ生成時の時刻。(YYYYMMDDHHMMSS)。

初期値，及びDROP SCHEMA

実行時はナル値となります。

5

AUDIT_PRIVILEGE

CHAR(1)

監査権限の有無。

Y：監査権限あり

ナル値：監査権限なし

監査人以外のユーザの場合はナル値となります。

6

AUTH_ERR_COUNT

SMALLINT

連続認証失敗回数。

連続認証失敗回数を指定していない場合，ユーザ認証の連続失敗が0回の場合，及び連続認証失敗回数をクリアした場合，ナル値となります。

7

CON_LOCK_TIME

TIMESTAMP(0)

連続認証失敗アカウントロック日時。

連続認証失敗回数を指定していない場合，及び連続認証失敗アカウントロック状態でない場合，ナル値となります。※

8

PWD_LOCK_TIME

TIMESTAMP(0)

パスワード無効アカウントロック日時。

パスワード文字列制限を指定していない場合，及びパスワード無効アカウントロック状態でない場合，ナル値となります。

9

PASSWORD_TEST

CHAR(1)

パスワード制限の違反種別コード。

L：最小許容バイト数

U：認可識別子の指定禁止

S：単一文字種の指定禁止

P：英大文字の指定必須

W：英小文字の指定必須

N：数字の指定必須

パスワード無効アカウントロック状態になるユーザを事前調査していない場合，及び事前調査後に違反がなかった場合，ナル値となります。

10

OS_AUTH

CHAR(1)

Y：簡易認証ユーザ

ナル値：非簡易認証ユーザ

11

PWD_INTERVAL_DAY

SMALLINT

パスワードの有効期限間隔の日数。

パスワードの有効期限定義が設定されていない場合，ナル値となります。

12

PWD_LAST_CHANGE

TIMESTAMP(0)

パスワードの最終更新日時，又はパスワードの有効期限定義を設定した日時。

パスワードの有効期限定義が設定されていない場合，ナル値となります。

13

DEPUTY_AUDITOR

CHAR(1)

Y：副監査人

ナル値：副監査人以外

14

SCHEMA_OPERATION_PRIVILEGE

VARCHAR(30)，又はMVARCHAR(30)

スキーマ操作権限対象のスキーマ名

注※

連続認証失敗アカウントロック状態になって，設定したアカウントロック期間経過後にCONNECTをしていない場合は，連続認証失敗アカウントロック状態でないときでもナル値にはなりません。

(7)　SQL_RDAREA_PRIVILEGES表の内容

この表では，RDエリア利用権限の付与状況を管理します（1行で1RDエリアの1ユーザ分）。

SQL_RDAREA_PRIVILEGES表の内容を次の表に示します。

表G‒9　SQL_RDAREA_PRIVILEGES表の内容

項番

列　　名

データ型

内　　　容

1

GRANTEE

VARCHAR(30)，又は

MVARCHAR(30)

RDエリア利用権限を持つユーザの名称，又は'PUBLIC'。

2

RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

RDエリア名。

3

GRANT_TIME

CHAR(14)

該当する権限を受け取った時刻

(YYYYMMDDHHMMSS) 。

(8)　SQL_TABLE_PRIVILEGES表の内容

この表では，表のアクセス権限の付与状況を管理します（1行で1ユーザ分）。

なお，SQL_TABLE_PRIVILEGES表の行は，GRANT アクセス権限で該当するユーザが表に対してアクセス権限を与えられたときに作成されます。また，REVOKE アクセス権限で該当するユーザが表に対してすべての権限を失効したときに行が削除されます。

SQL_TABLE_PRIVILEGES表の内容を次の表に示します。

表G‒10　SQL_TABLE_PRIVILEGES表の内容

項番

列　　名

データ型

内　　　容

1

GRANTOR

VARCHAR(30)，又は

MVARCHAR(30)

表のアクセス権限を許可するユーザの名称，又はパブリックビュー表の定義者。

2

GRANTEE

VARCHAR(30)，又は

MVARCHAR(30)

表のアクセス権限を受けるユーザの名称，又は'PUBLIC'。

3

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

アクセス権限を許可する表の所有者。パブリックビュー表の場合はPUBLIC。

4

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

アクセス権限を許可する表の名称。

5

SELECT_PRIVILEGE

CHAR(1)

SELECT権限の有無。

G：許可される(表の所有者の場合)※

Y：許可される

N：許可されない

初期値はNとなります。

6

INSERT_PRIVILEGE

CHAR(1)

INSERT権限の有無。

G：許可される(表の所有者の場合)※

Y：許可される

N：許可されない

初期値はNとなります。

7

DELETE_PRIVILEGE

CHAR(1)

DELETE権限の有無。

G：許可される(表の所有者の場合)※

Y：許可される

N：許可されない

初期値はNとなります。

8

UPDATE_PRIVILEGE

CHAR(1)

UPDATE権限の有無。

G：許可される(表の所有者の場合)※

Y：許可される

N：許可されない

初期値はNとなります。

9

GRANT_TIME

CHAR(14)

該当する権限を受け取った時刻(YYYYMMDDHHMMSS) 。

10

GRANTEE_TYPE

CHAR(1)

ナル値（固定）

注※

ビュー表の所有者とビュー表の基表の所有者が異なる場合や読み込み専用ビュー表の場合は，ビュー表の所有者であってもG以外が格納されます。各列に格納される値を次に示します。

ビュー表の所有者とビュー表の基表の所有者

ビュー表の種別

格納される値

SELECT_PRIVILEGE列

INSERT_PRIVILEGE列

DELETE_PRIVILEGE列

UPDATE_PRIVILEGE列

すべて一致している

ビュー表

G

G

G

G

読み込み専用ビュー表

G

N

N

N

不一致である（部分的不一致を含む）

ビュー表

Y

ビュー表の所有者がビュー表定義時に基表へのINSERT権限を持っている場合：Y

持っていない場合：N

ビュー表の所有者がビュー表定義時に基表へのDELETE権限を持っている場合：Y

持っていない場合：N

ビュー表の所有者がビュー表定義時に基表へのUPDATE権限を持っている場合：Y

持っていない場合：N

読み込み専用ビュー表

Y

N

N

N

(9)　SQL_VIEW_TABLE_USAGE表の内容

この表では，ビュー表の基になる実表の情報を管理します（1行で1ビュー表分）。

SQL_VIEW_TABLE_USAGE表の内容を次の表に示します。

表G‒11　SQL_VIEW_TABLE_USAGE表の内容

項番

列　　名

データ型

内　　　容

1

VIEW_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

ビュー表の所有者。パブリックビュー表の場合はPUBLIC。

2

VIEW_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ビュー表の名称。

3

BASE_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

基になる表，又は利用資源の所有者。パブリックビュー表，又はパブリックルーチンの場合はPUBLIC。

4

BASE_TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

基になる表，又は利用資源の名称。

5

BASE_TYPE

CHAR(1)

基になる表，又は利用資源の種別。

R：永続実表

V：ビュー表

P：ユーザ定義関数（プラグイン提供関数を除く）

G：一時表

6

BASE_ROUTINE_CREATOR

VARCHAR(30)，又は

MVARCHAR(30)

利用資源がパブリック関数の場合の，パブリック関数定義者。

利用資源がパブリック関数以外の場合はナル値となります。

(10)　SQL_VIEWS表の内容

この表では，ビュー表の定義情報を管理します（1行で1ビュー表分）。

SQL_VIEWS表の内容を次の表に示します。

表G‒12　SQL_VIEWS表の内容

項番

列　　名

データ型

内　　　容

1

VIEW_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

ビュー表の所有者。パブリックビュー表の場合はPUBLIC。

2

VIEW_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ビュー表の名称。

3

SOURCE_ORDER

INTEGER

複数行に分けて格納した場合の順序(1〜n) 。

4

IS_UPDATABLE

CHAR(3)

更新の可能性。

YES：可能性がある

NO：可能性がない

5

VIEW_DEFINITION

VARCHAR (32000)，又は

MVARCHAR(32000)

ビュー定義のソース文。

6

VIEW_ID

INTEGER

ビューID。

(11)　SQL_DIV_TABLE表の内容

この表では，データベース内の表の分割情報を管理します（n行で1表分）。

SQL_DIV_TABLE表の内容を次の表に示します。

表G‒13　SQL_DIV_TABLE表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

表の名称。

3

DIV_NO

INTEGER

分割条件指定順序。

該当する表内で1から始まるユニークな値で，分割条件の指定順に1を加えた値となります。

4

TABLE_ID

INTEGER

表ID。

5

DCOND

CHAR(2)

分割条件コード。

表の分割格納条件値を文字形式で格納(格納される値は，=，^=，<，<=，>， >=のどれか)します。ユーザが< >，及び!=を指定した場合，^=で格納します。

マトリクス分割表の場合は<=が格納されます。

分割格納条件指定なし，及びハッシュ分割の場合は空白となります。

6

DCVALUES

VARCHAR(256)，又は

MVARCHAR(256)

分割条件値。

分割キーに文字集合の指定がある場合でも，格納される値は変換されません。※1，※2

分割格納条件指定なし，又はハッシュ分割の場合はナル値となります。

7

RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

分割格納先RDエリア名。

8

DCVALUES2

VARCHAR(255)，又は

MVARCHAR(255)

第2次元キーの分割条件値（格納形式はDCVALUESと同じ）。

分割キーに文字集合の指定がある場合でも，格納される値は変換されません。※1，※2

マトリクス分割表以外の場合，及びマトリクス分割表で境界値指定がない場合はナル値となります。

9

DCVALUES_TYPE

CHAR(1)

分割条件値（DCVALUES列の値）の指定形式。

X：16進文字列定数

DCVALUES列の値がナル値の場合，及び分割条件に指定する定数が16進文字列定数以外の場合はナル値となります。

10

DCVALUES2_TYPE

CHAR(1)

第2次元キーの分割条件値（DCVALUES2列の値）の指定形式。

X：16進文字列定数

DCVALUES2列の値がナル値の場合，及び分割条件に指定する定数が16進文字列定数以外の場合はナル値となります。

注※1

分割条件値を16進文字列定数で指定した場合，指定した16進文字列定数の値がそのまま格納されます。

分割条件値に指定した16進文字列を確認する場合，スカラ関数HEXを使用して16進文字列表現に変換して確認してください。16進文字列表現に変換しないで参照すると，16進文字列のコードに対応する文字が存在しない場合，文字化けが発生することがあります。

注※2

分割キーのデータ型がCHAR又はMCHAR型で分割条件値を16進文字列定数で指定した場合，分割条件値長（16進文字数÷2）が分割キーの定義長に満たないとき，分割キーの定義長に満たない部分は半角スペースで埋めないで分割条件値長分格納されます。なお，16進文字列定数以外で指定した場合は，定義長に満たない部分は半角スペースで埋めて格納されます。

(12)　SQL_INDEX_COLINF表の内容

この表は，インデクスの構成列情報を管理します（n行で1インデクス分）。

SQL_INDEX_COLINF表の内容を次の表に示します。

表G‒14　SQL_INDEX_COLINF表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスを含む表の名称。

3

INDEX_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスの名称。

4

INDEX_ID

INTEGER

インデクスID。

5

INDEX_ORDER

INTEGER

インデクスを構成する列の順序(インデクスを構成する列名順を識別する番号で，1から始まる整数) 。

6

COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

列名(インデクス構成列名) 。

7

ASC_DESC

CHAR(1)

昇順，又は降順。

Ａ：昇順

Ｄ：降順

空白：昇降順なし（プラグインインデクスの場合）

単一列インデクスの降順指定時には，昇順として格納します。

(13)　SQL_DIV_INDEX表の内容

この表では，インデクスの分割情報（CREATE TABLE時に指定した分割条件，及び格納RDエリア名）を管理します（n行で1インデクス分）。

SQL_DIV_INDEX表の内容を次の表に示します。

表G‒15　SQL_DIV_INDEX表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスを含む表の名称。

3

INDEX_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスの名称。

4

DIV_NO

INTEGER

RDエリア定義順序。

該当するインデクス内で1から始まるユニークな値で，RDエリアの定義順序に1を加えた値※となります。

5

INDEX_ID

INTEGER

インデクスID。

6

RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

(分割)格納先RDエリア名。

注※　該当する列の値とSQL_DIV_TABLEのDIV_NOとは関連性はありません。

(14)　SQL_DIV_COLUMN表の内容

この表では，BLOB型列の分割情報（CREATE TABLE時に指定した格納RDエリア名）を管理します（n行で1列分）。

SQL_DIV_COLUMN表の内容を次の表に示します。

表G‒16　SQL_DIV_COLUMN表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

表の名称。

3

COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

列名。

4

DIV_NO

INTEGER

格納順序。

5

RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ユーザLOB用RDエリアの名称。

6

STORE_NO

INTEGER

常に1。

7

MASTER_RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

対応する表のユーザ用RDエリアの名称。

8

N_LEVEL

SMALLINT

レベル数。

BLOB型の列の場合はナル値となります。

9

COMPONENT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

コンポーネント名。

BLOB型の列の場合はナル値となります。

10

LOB_NO

SMALLINT

LOB属性番号。

BLOB型の列の場合はナル値となります。

(15)　SQL_ROUTINES表の内容

この表では，ルーチンの定義情報を管理します（1行で1ルーチン分）。

SQL_ROUTINES表の内容を次の表に示します。

表G‒17　SQL_ROUTINES表の内容

項番

列　　名

データ型

内　　　容

1

ROUTINE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

ルーチンの所有者。パブリックルーチンの場合はPUBLIC。

2

ROUTINE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ルーチン名称。※９

3

OBJECT_ID

INTEGER

オブジェクトID。

4

SPECIFIC_NAME

VARCHAR(30)，又は

MVARCHAR(30)

特定名称。※２

5

ROUTINE_TYPE

CHAR(1)

ルーチン種別。

P：手続き

F：関数

6

ROUTINE_VALID

CHAR(1)

有効フラグ。

Y：有効ルーチン

N：無効ルーチン

7

INDEX_VALID

CHAR(1)

インデクス状態変化フラグ。

Y：インデクス状態有効

N：インデクス状態無効※１

8

CREATE_TIME

CHAR(14)

ルーチン作成時の時刻(YYYYMMDDHHMMSS)。

SQL手続き文の場合はSQL解析時刻，外部ルーチンの場合はルーチン定義作成時刻となります。

9

ALTER_TIME

CHAR(14)

ルーチン再作成時刻(YYYYMMDDHHMMSS)。

初期値はナル値となります。

10

OBJECT_SIZE

INTEGER

オブジェクトサイズ(単位:バイト)。

外部ルーチンの場合は0となります。

11

SOURCE_SIZE

INTEGER

定義ソースサイズ(単位:バイト)。

外部ルーチン及びレジストリ操作用プロシジャの場合は0となります。

12

ISOLATION_LEVEL

SMALLINT

データ保証レベル(0〜2)。

手続きの場合に有効となります。

ルーチン中に指定するSQLでだけ有効となります。

13

OPTIMIZE_LEVEL

INTEGER

SQL最適化オプション（10進数に変換した形式）。

CREATE PROCEDURE，ALTER PROCEDURE，CREATE TYPE，及びALTER ROUTINEのOPTIMIZE LEVEL指定値を設定します。

14

SQL_LEVEL

SMALLINT

システムで使用する情報

15

N_PARAM

INTEGER

パラメタの数。

16

N_RESOURCE

INTEGER

オブジェクト内で使用するリソースの数。

17

PARAM_LOCATION

INTEGER

定義ソース文中の手続き文の開始位置。※７

18

ROUTINE_COMMENT

VARCHAR(255)，又は

MVARCHAR(255)

コメント。

初期値はナル値となります。

19

DEF_SOURCE

BLOB

定義ソース文(コンパイルオプション部分は除きます)。

システム定義関数，レジストリ操作用プロシジャ，及びトリガ動作手続きの場合はナル値になります。

20

ROUTINE_ADT_OWNER

VARCHAR(30)

ルーチンを定義した抽象データ型の所有者。

抽象データ型内で定義したルーチン以外の場合はナル値となります。

21

ROUTINE_ADT_NAME

VARCHAR(30)

ルーチンを定義した抽象データ型の名称。

抽象データ型内で定義したルーチン以外の場合はナル値となります。

22

ROUTINE_BODY

CHAR(1)

関数のルーチン本体種別。

S：SQL手続き

E：外部ルーチン

T：トリガ動作手続き

外部ルーチン以外のプロシジャ（トリガ動作手続きは除く）の場合はナル値となります。

23

FUNCTION_TYPE

CHAR(1)

関数種別。

C：システム定義関数のコンストラクタ

空白：ユーザ定義関数

手続きの場合はナル値となります。

24

EXTERNAL_NAME

VARCHAR(255)

外部ルーチン名(ライブラリ名!オペレーション名)。

Javaで定義した場合は，Javaメソッド名。

外部ストアドルーチン以外の場合はナル値となります。

25

EXTERNAL_LANGUAGE

CHAR(20)

外部記述言語種別。

C：C言語

Java：Java言語

外部ストアドルーチン以外の場合はナル値となります。

26

PARAMETER_STYLE

VARCHAR(20)

パラメタスタイル(外部ストアドルーチン種別) 。

PLUGIN：プラグイン

RDSQL：RDSQL

Java：Java

外部ストアドルーチン以外の場合はナル値となります。

27

ENCAPSULATION_LEVEL

VARCHAR(10)

隠蔽レベル(PUBLIC，PRIVATE，又はPROTECTED)。

抽象データ型で定義されたルーチン以外の場合はナル値となります。

28

RETURN_UDT_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

戻り値のデータ型の所有者。

戻り値がユーザ定義型の関数以外の場合はナル値となります。

29

RETURN_UDT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

戻り値のデータ型の名称。

戻り値がユーザ定義型の関数以外の場合はナル値となります。

30

RETURN_UDT_TYPE_ID

INTEGER

戻り値のデータ型のID。

戻り値がユーザ定義型の関数以外の場合はナル値となります。

31

RETURN_DATA_TYPE

CHAR(24)

戻り値のデータ型。

格納形式は，SQL_COLUMNS表のDATA_TYPE列を参照してください。

関数以外の場合はナル値となります。

32

RETURN_DATA_TYPE_CODE

SMALLINT

戻り値のデータ型コード。

関数以外の場合はナル値となります。

格納形式は，SQL_COLUMNS表のDATA_TYPE_CODE列を参照してください。

33

RETURN_DATA_LENGTH_CODE

SMALLINT

戻り値のデータ長コード。※３

手続きの場合はナル値となります。

34

RETURN_DATA_LENGTH

CHAR(7)

戻り値のデータ長。

右詰めで文字形式にして格納します(上位の0は空白にします)。

手続きの場合はナル値となります。

35

RETURN_LOB_LENGTH_CODE

CHAR(8)

戻り値のBLOBデータ長コード。※４※８

手続きの場合，又は戻り値がBLOB，BINARY以外の関数の場合はナル値となります。

36

RETURN_LOB_LENGTH

CHAR(20)

戻り値のBLOBデータ長指定値。

右詰めで文字形式にして格納します(上位の0は空白にします)。

手続きの場合，又は戻り値がBLOB，BINARY以外の関数の場合はナル値となります。

37

RETURN_LOB_LENGTH_TYPE

CHAR(1)

戻り値のBLOBデータ長種別。

K：K指定時

M：M指定時

G：G指定時

空白：省略時

手続きの場合，又は戻り値がBLOB以外の関数の場合はナル値となります。

38

ADDITIONAL_OPTIMIZE_LEVEL

INTEGER

SQL拡張最適化オプション（10進数に変換した形式）。

CREATE PROCEDURE，ALTER PROCEDURE，CREATE TYPE，及びALTER ROUTINEのADD OPTIMIZE LEVEL指定値を設定します。

バージョンが06-00より前のHiRDBで作成したルーチンの場合はナル値となります。

39

CLASS_NAME

VARCHAR(255)

パッケージ名．クラス名。※５

Javaで記述した外部ルーチン以外の場合はナル値となります。

40

JAR_NAME

VARCHAR(255)

Javaアーカイブファイル名。

Javaで記述した外部ルーチン以外の場合はナル値となります。

41

DYNAMIC_RESULT_SETS

SMALLINT

返却する結果集合の最大数。

結果集合の最大数を指定していない場合はナル値となります。

42

SQL_SPECIFICATION

CHAR(1)

システムが使用する情報。

43

RETURNS_JAVA_DATA_TYPE

VARCHAR(255)

戻り値のデータ型に対応するJavaの戻り値のデータ型。※６

Javaで記述した外部ルーチン以外の場合はナル値となります。

44

RETURNS_JAVA_DATA_TYPE_CODE

INTEGER

戻り値のデータ型に対応するJavaの戻り値のデータ型コード。※６

Javaで記述した外部ルーチン以外の場合はナル値となります。

45

RETURN_DATA_MAX_ELM

SMALLINT

戻り値のデータ型の最大要素数。

戻り値のデータ型にARRAYを指定していない場合はナル値となります。

46

N_JAVA_RESULT_SETS

INTEGER

Java.sql.ResultSet[]の指定数。

Java.sql.ResultSet[]を指定していない場合はナル値となります。

47

FOR_UPDATE_EXCLUSIVE_LOCK

CHAR(1)

FOR UPDATE EXCLUSIVEの指定有無

Y：次のどちらかの場合

FOR UPDATE EXCLUSIVE指定あり

推奨モードを適用し，FOR UPDATEを省略した場合

N：次のどちらかの場合

FOR UPDATE COMPATIBLE指定あり

0904互換モードを適用し，FOR UPDATEを省略した場合

ナル値：次のどれかの場合

バージョン07-00以前に作成したルーチンの場合

バージョン09-50より前に作成したISOLATION LEVELが2のルーチンの場合

バージョン09-50より前に作成したFOR UPDATE EXCLUSIVE未指定のルーチンの場合

ルーチン中に指定するSQLでだけ有効となります。

48

SUBSTR_LENGTH

SMALLINT

SQLコンパイルオプションのSUBSTR LENGTHの指定値。

バージョン08-00より前のHiRDBで作成したルーチンの場合，及び文字コード種別がUnicode（UTF-8），Unicode（IVS対応UTF-8）でない場合はナル値となります。

49

RETCSET_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

戻り値のデータ型の文字集合所有者（常に"MASTER"）。

戻り値のデータ型の文字集合を指定していない場合はナル値となります。

50

RETCSET_NAME

VARCHAR(30)，又は

MVARCHAR(30)

戻り値のデータ型の文字集合名。

EBCDIK：文字集合にEBCDIKを指定した場合

UTF16：文字集合にUTF16を指定した場合

戻り値のデータ型の文字集合を指定していない場合はナル値となります。

51

RETCSET_ID

INTEGER

戻り値のデータ型の文字集合ID。

戻り値のデータ型の文字集合を指定していない場合はナル値となります。

文字集合IDについては，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

52

ROUTINE_CREATOR

VARCHAR(30)，又は

MVARCHAR(30)

パブリックルーチンの定義者。

パブリックルーチン以外の場合はナル値となります。

注※1

ルーチン内のインデクス情報が無効になった状態(ルーチンは実行できません)。この場合，ALTER ROUTINE又はALTER PROCEDUREでSQLオブジェクトを再作成する必要があります。

注※2

手続きの場合は，ルーチン名称と同じになります。関数の場合は，システムが内部的にルーチン名称とオブジェクトIDから生成した，次のような名称を付けます。

　　'F' ルーチン名称(最大19バイト) オブジェクトID(10バイト)

注※3

DECIMAL型，INTERVAL YEAR TO DAY型，INTERVAL HOUR TO SECOND型の場合は，精度，位取りをそれぞれ1バイトに格納し，それ以外の場合は，2バイトの2進形式で長さ（NCHAR型，NVARCHAR型の場合は文字数）を格納します。ただし，BLOB型及び抽象データ型の場合は0になります。

注※4

列長の指定値を4バイトごとに区切られた8バイトに2進形式で格納します。

注※5

パッケージ名．クラス名の格納形式を次に示します。

パッケージ名の指定がある場合

パッケージ名．クラス名

パッケージ名の指定がない場合

クラス名

注※6

RETURNS_JAVA_DATA_TYPEには，次のJavaデータ型を文字列として格納します。RETURNS_JAVA_DATA_TYPE_CODEには，次のJavaデータ型の16進数の値が格納されます。

Javaデータ型

16進数の値

byte[]

1000

byte[][]

100A

short

1002

short[]

1003

int

1004

int[]

1005

float

1006

float[]

1007

double

1008

double[]

1009

java.match.BigDecimal

2000

java.match.BigDecimal[]

2001

java.lang.String

2002

java.lang.String[]

2003

java.sql.Date

2004

java.sql.Date[]

2005

java.sql.Time

2006

java.sql.Time[]

2007

java.lang.Double

2008

java.lang.Double[]

2009

java.lang.Float

200A

java.lang.Float[]

200B

java.lang.Integer

200C

java.lang.Integer[]

200D

java.lang.Short

200E

java.lang.Short[]

200F

java.sql.Timestamp

2010

java.sql.Timestamp[]

2011

void

0000

注※7

SQL文の先頭から手続き文開始位置までを，1から数えた値が設定されます。ただし，外部ルーチン（Javaストアドルーチン）の場合は，SQL文の先頭から外部ルーチン指定（EXTERNAL NAME句）の開始位置までの値となります。

なお，次の場合は0が設定されます。

外部ルーチン（Javaストアドルーチンを除く）

レジストリ操作用プロシジャ

トリガ動作手続き

注※8

エンディアンが異なる接続形態でも，SQLの結果はエンディアン変換されません。したがって，アクセスする場合は，アプリケーション側でエンディアンを考慮して変換する必要があります。

注※9

トリガ動作手続きの場合，次のルーチン名称（長さ22バイト）が格納されます。

　　'(TRIGyyyymmddhhmmssth)'

　　yyyymmddhhmmssth：トリガ定義時のタイムスタンプ（100分の1秒単位）

(16)　SQL_ROUTINE_RESOURCES表の内容

この表では，ルーチンで使用するリソース情報を管理します（n行で1ルーチン分）。

SQL_ROUTINE_RESOURCES表の内容を次の表に示します。

表G‒18　SQL_ROUTINE_RESOURCES表の内容

項番

列　　名

データ型

内　　　容

1

ROUTINE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

ルーチンの所有者。パブリックルーチンの場合はPUBLIC。

2

ROUTINE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ルーチン名称。

3

SPECIFIC_NAME

VARCHAR(30)，又は

MVARCHAR(30)

特定名称。※１

4

BASE_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

使用資源所有者。パブリックビュー表，又はパブリックルーチンの場合はPUBLIC。

5

BASE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

使用資源識別子。

6

BASE_TYPE

CHAR(1)

使用資源種別。

R：永続実表

V：更新できるビュー表

U：読み込み専用のビュー表

I：インデクス（一時インデクス含む）

D：データ型

P：ルーチン

T：トリガ

Q：順序数生成子

G：一時表

7

ROUTINE_TYPE_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型内のルーチンの場合，その抽象データ型の所有者。

抽象データ型内で定義したルーチン以外の場合はナル値となります。

8

ROUTINE_TYPE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型内のルーチンの場合，その抽象データ型の名称。

抽象データ型内で定義したルーチン以外の場合はナル値となります。

9

SELECT_OPERATION※２

CHAR(1)

検索対象の指定有無。

Y：指定しています。

ナル値：指定していません。

使用資源種別がR，V，及びG以外の場合はナル値となります。※３

10

INSERT_OPERATION※２

CHAR(1)

データの挿入対象の有無。

Y：指定しています。

ナル値：指定していません。

使用資源種別がR，V，及びG以外の場合はナル値となります。※３

11

UPDATE_OPERATION※２

CHAR(1)

データの更新対象の有無。

Y：指定しています。

ナル値：指定していません。

使用資源種別がR，V，及びG以外の場合はナル値となります。※３

12

DELETE_OPERATION※２

CHAR(1)

データの削除対象の有無。

Y：指定しています。

ナル値：指定していません。

使用資源種別がR，V，及びG以外の場合はナル値となります。※３

13

LOCK_OPERATION※２

CHAR(1)

データの挿入対象の有無。

Y：指定しています。

ナル値：指定していません。

使用資源種別がR，V，及びG以外の場合はナル値となります。※３

14

PURGE_OPERATION※２

CHAR(1)

PURGE TABLE文でのデータの削除対象の有無。

Y：指定しています。

ナル値：指定していません。

使用資源種別がR，V，及びG以外の場合はナル値となります。※３

15

BASE_ROUTINE_CREATOR

VARCHAR(30)，又は

MVARCHAR(30)

使用資源がパブリックルーチンの場合の，パブリックルーチン定義者。

使用資源がパブリックルーチン以外の場合はナル値となります。

16

ROUTINE_CREATOR

VARCHAR(30)，又は

MVARCHAR(30)

パブリックルーチンの定義者。

パブリックルーチン以外の場合はナル値となります。

注※1

手続きの場合は，ルーチン名称と同じになります。関数の場合は，システムが内部的にルーチン名称とオブジェクトIDから生成した，次のような名称を付けます。

　　'F' ルーチン名称(最大19バイト) オブジェクトID(10バイト)

注※2

SQLオブジェクトにビュー表を使用している場合，このビュー表の基表である実表（基表がビュー表の場合も最上位の基表である実表）には，使用しているすべてのビュー表の操作種別をマージした情報が設定されます。

注※3

使用資源種別がビュー表（V）の場合，実際にSQLオブジェクト中に含まれないビュー表についてはナル値が設定されます。

(17)　SQL_ROUTINE_PARAMS表の内容

この表では，ルーチンのパラメタ情報を管理します（n行で1ルーチン分）。

SQL_ROUTINE_PARAMS表の内容を次の表に示します。

表G‒19　SQL_ROUTINE_PARAMS表の内容

項番

列　　名

データ型

内　　　容

1

ROUTINE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

ルーチンの所有者。パブリックルーチンの場合はPUBLIC。

2

ROUTINE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ルーチン名称。

3

SPECIFIC_NAME

VARCHAR(30)，又は

MVARCHAR(30)

特定名称。

4

PARAMETER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

パラメタ名称。※４

5

PARAMETER_NO

INTEGER

パラメタ指定順序（該当するルーチン内で1から始まるユニークな番号）。

6

DATA_TYPE

CHAR(24)

データ型。

格納形式は，SQL_COLUMNS表のDATA_TYPE列を参照してください。

7

DATA_LENGTH

CHAR(7)

データ長。

右詰めで文字形式にして格納します(上位の0は空白にします)。

データ型がBLOB，BINARYの場合，又はユーザ定義型の場合はナル値となります。

8

LOB_LENGTH

CHAR(20)

列長の指定値。

右詰めで文字形式にして格納します(上位の0は空白にします)。

データ型がBLOB，BINARY以外の場合はナル値となります。

9

LOB_LENGTH_TYPE

CHAR(1)

列長の種別。

K：K指定時

M：M指定時

G：G指定時

空白：省略時

データ型がBLOB以外の場合はナル値となります。

10

PARAMETER_MODE

CHAR(5)

パラメタの入出力モード。

IN：入力モード

NOUT：出力モード

INOUT：入出力モード

NONE：上記のどれにも該当しない場合

11

DATA_TYPE_CODE

SMALLINT

データ型コード。

格納形式は，SQL_COLUMNS表のDATA_TYPE_CODE列を参照してください。

12

DATA_LENGTH_CODE

SMALLINT

データ長コード。※１

データ型がBLOB，BINARYの場合，又はユーザ定義型の場合はナル値となります。

13

LOB_LENGTH_CODE

CHAR(8)

列長の指定値。※２※３

データ型BLOB，BINARY以外の場合はナル値となります。

14

UDT_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

パラメタのデータ型の所有者。

パラメタがシステム定義型の場合はナル値となります。

15

UDT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

パラメタのデータ型の名称。

パラメタがシステム定義型の場合はナル値となります。

16

UDT_TYPE_ID

INTEGER

パラメタのデータ型のID。

パラメタがシステム定義型の場合はナル値となります。

17

JAVA_DATA_TYPE

VARCHAR(255)

対応するJavaパラメタのデータ型。

格納形式については，SQL_ROUTINES表のRETURNS_JAVA_DATA_TYPE列を参照してください。

Javaで記述した外部ルーチン以外の場合はナル値となります。

18

JAVA_DATA_TYPE_CODE

INTEGER

対応するJavaパラメタのデータ型コード。

格納形式については，SQL_ROUTINES表のRETURNS_JAVA_DATA_TYPE_CODE列を参照してください。

Javaで記述した外部ルーチン以外の場合はナル値となります。

19

MAX_ELM

SMALLINT

パラメタの最大要素数。

パラメタの要素数の指定がない場合はナル値となります。

20

TRIGGER_COLUMN

CHAR(1)

トリガ動作手続きの新旧値相関名で指定した列に対するパラメタ情報。

O：旧値相関名で参照された列

N：新値相関名で参照された列

ナル値：上記以外

トリガ動作手続き以外，新旧値相関名で指定した列に対応するパラメタ以外の場合はナル値となります。

21

TRIGGER_TABLE_ID

INTEGER

パラメタに置き換える前の列を定義している表ID。

トリガ動作手続き以外，新旧値相関名で指定した列に対応するパラメタ以外の場合はナル値となります。

22

TRIGGER_COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

パラメタに置き換える前の列名。

トリガ動作手続き以外，新旧値相関名で指定した列に対応するパラメタ以外の場合はナル値となります。

23

PARMCSET_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

データ型の文字集合所有者（常に"MASTER"）。

データ型の文字集合を指定していない場合はナル値となります。

24

PARMCSET_NAME

VARCHAR(30)，又は

MVARCHAR(30)

データ型の文字集合名。

EBCDIK：文字集合にEBCDIKを指定した場合

UTF16：文字集合にUTF16を指定した場合

データ型の文字集合を指定していない場合はナル値となります。

25

PARMCSET_ID

INTEGER

データ型の文字集合ID。

データ型の文字集合を指定していない場合はナル値となります。

文字集合IDについては，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

注※1

DECIMAL型，INTERVAL YEAR TO DAY型，INTERVAL HOUR TO SECOND型の場合は，精度，位取りをそれぞれ1バイトに格納し，それ以外の場合は，2バイトの2進形式で長さ（NCHAR型，NVARCHAR型の場合は文字数）を格納します。ただし，BLOB型及び抽象データ型の場合は0になります。

注※2

列長の指定値を4バイトごとに区切られた8バイトに2進形式で格納します。

注※3

エンディアンが異なる接続形態でも，SQLの結果はエンディアン変換されません。したがって，アクセスする場合は，アプリケーション側でエンディアンを考慮して変換する必要があります。

注※4

トリガ動作手続きの場合，パラメタ名（長さ27バイト）は次のようになります。

'(T#tbl_id#col_id#nnnnn)'

tbl_id：

表ID（16進数，8けた（8けたに満たない場合は前に0を格納））

col_id：

列ID（16進数，8けた（8けたに満たない場合は前に0を格納））

nnnnn：

00001：旧値相関名で修飾した列に対応するパラメタ

00002：新値相関名で修飾した列に対応するパラメタ

(18)　SQL_TABLE_STATISTICS表の内容

この表では，表の統計情報を管理します（1行で1表分）。

なお，統計情報がない場合（CREATE TABLE直後など），この表の内容は空となります。

SQL_TABLE_STATISTICS表の内容を次の表に示します。

表G‒20　SQL_TABLE_STATISTICS表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

表の名称。

3

N_PAGE

FLOAT

格納ページ数（統計情報）。

pdgetcstの-cオプションにlvl1を指定した場合は，ナル値となります。

4

N_ROW

FLOAT

全行数（統計情報）。

5

UPDATE_TIME

CHAR(14)

更新日時（YYYYMMDDHHMMSS）。

(19)　SQL_COLUMN_STATISTICS表の内容

この表では，列の統計情報を管理します（1行で1列分）。

なお，統計情報がない場合（CREATE TABLE直後など），この表の内容は空となります。

SQL_COLUMN_STATISTICS表の内容を次の表に示します。

表G‒21　SQL_COLUMN_STATISTICS表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

列を含む表の名称。

3

COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

列名。

4

N_UNIQUE

FLOAT

ユニーク値数（統計情報）。

5

N_MAX_DUP_KEY

FLOAT

最大重複キー値数（統計情報）。

6

N_MIN_DUP_KEY

FLOAT

最小重複キー値数（統計情報）。

7

N_NULL

FLOAT

ナル値の数。

8

UPDATE_TIME

CHAR(14)

更新日時（YYYYMMDDHHMMSS）。

9

RANGE_VALUES

VARCHAR(2872)

列値度数分布情報（統計情報）。※

注※

pdgetcstのパラメタファイルで設定した列値の最大値，最小値はRANGE_VALUES列の中に内部形式に変換して格納しています。このため，最大値，及び最小値を参照するには次に示すSQLを実行する必要があります。ただし，検索結果は16進表示となります。

・列値の最大値を検索するSQL

SELECT HEX(SUBSTR("RANGE_VALUES",33,a))
    FROM "MASTER".SQL_COLUMN_STATISTICS
    WITHOUT LOCK NOWAIT

aには列のデータ長をバイト単位で指定します。ただし，文字列型データの場合，16バイトで切り捨てているため，16以下の値を指定します。

・列値の最小値を検索するSQL

・列のデータ型がDECIMAL又はNUMERIC型で，かつ精度が32けた以上の場合

SELECT HEX(SUBSTR("RANGE_VALUES",33+a,a))
    FROM "MASTER".SQL_COLUMN_STATISTICS
    WITHOUT LOCK NOWAIT

・列のデータ型が上記以外の場合

SELECT HEX(SUBSTR("RANGE_VALUES"),49,a)
    FROM "MASTER".SQL_COLUMN_STATISTICS
    WITHOUT LOCK NOWAIT

aには列のデータ長をバイト単位で指定します。ただし，文字列型データの場合，16バイトで切り捨てているため，16以下の値を指定します。

＜例＞

INT型の列の列値の最大値を参照する場合

SELECT HEX(SUBSTR("RANGE_VALUES"),33,4)
    FROM "MASTER".SQL_COLUMN_STATISTICS
    WITHOUT LOCK NOWAIT

出力結果（列値の最大値が10の場合）

'0000000A'

(20)　SQL_INDEX_STATISTICS表の内容

この表では，インデクスの統計情報を管理します（1行で1インデクス分）。

なお，統計情報がない場合（CREATE TABLE直後など），この表の内容は空となります。

SQL_INDEX_STATISTICS表の内容を次の表に示します。

表G‒22　SQL_INDEX_STATISTICS表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスを含む表の名称。

3

INDEX_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスの名称。

4

N_ENTRY

FLOAT

キーエントリ数（統計情報）。

5

N_IXPG

FLOAT

リーフページ数（統計情報）。

6

N_LEVEL

SMALLINT

レベル数（統計情報）。

7

SEQ_RATIO

INTEGER

シーケンシャル度（統計情報）。

8

UPDATE_TIME

CHAR(14)

更新日時（YYYYMMDDHHMMSS）。

(21)　SQL_DATATYPES表の内容

この表では，ユーザ定義型の情報を管理します（1行で1ユーザ定義型分）。

SQL_DATATYPES表の内容を次の表に示します。

表G‒23　SQL_DATATYPES表の内容

項番

列　　名

データ型

内　　　容

1

TYPE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

ユーザ定義型の所有者。

2

TYPE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ユーザ定義型の名称。

3

META_TYPE

CHAR(1)

ユーザ定義型の種別。

A：抽象データ型

4

TYPE_ID

INTEGER

ユーザ定義型のID。

5

N_ATTR

SMALLINT

属性の数。

6

CREATE_TIME

CHAR(14)

作成時刻(YYYYMMDDHHMMSS) 。

7

N_SUBTYPE

INTEGER

サブタイプの数。

8

SOURCE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

スーパタイプの抽象データ型の所有者。

スーパタイプの抽象データ型がない場合はナル値となります。

9

SOURCE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

スーパタイプの抽象データ型の名称。

スーパタイプの抽象データ型がない場合はナル値となります。

10

SOURCE_TYPE_ID

INTEGER

スーパタイプの抽象データ型のID。

スーパタイプの抽象データ型がない場合はナル値となります。

11

ROOT_TYPE_ID

INTEGER

スーパタイプの抽象データ型が，更にスーパタイプを持っている場合，その最上位の抽象データ型のID。

12

LEVEL_NO

SMALLINT

スーパタイプの抽象データ型が，更にスーパタイプを持っている場合，その最上位の抽象データ型からの世代数。

13

TYPE_COMMENT

VARCHAR(255)

コメント。

初期値，及びコメントがない場合はナル値となります。

14

N_LOB_ATTR

SMALLINT

BLOB型の属性数。

15

N_ADT_ATTR

SMALLINT

抽象データ型の属性数。

16

N_LARGE_BINARY_ATTR

SMALLINT

32,001バイト以上のBINARY型の属性数。

(22)　SQL_DATATYPE_DESCRIPTORS表の内容

この表では，ユーザ定義型の構成属性の情報を管理します（1行で1属性分）。

SQL_DATATYPE_DESCRIPTORS表の内容を次の表に示します。

表G‒24　SQL_DATATYPE_DESCRIPTORS表の内容

項番

列　　名

データ型

内　　　容

1

TYPE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

ユーザ定義型の所有者。

2

TYPE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ユーザ定義型の名称。

3

OBJECT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

属性名。

4

TYPE_ID

INTEGER

ユーザ定義型のID。

5

META_TYPE

CHAR(1)

ユーザ定義型の種別。

S：システム定義型

A：抽象データ型

6

ORDINAL_POSITION

SMALLINT

順序位置。

7

ENCAPSULATION_LEVEL

VARCHAR(10)

隠蔽レベル(PUBLIC，PRIVATE，又はPROTECTED) 。

8

IS_NULLABLE

CHAR(3)

列のナル値情報。

YES：ナル値を許します。

NO：ナル値を許しません。

9

DATA_TYPE

CHAR(24)

データ型。

格納形式は，SQL_COLUMNS表のDATA_TYPE列を参照してください。

10

DATA_TYPE_CODE

SMALLINT

データ型コード。

格納形式は，SQL_COLUMNS表のDATA_TYPE_CODE列を参照してください。

11

DATA_LENGTH_CODE

SMALLINT

データ長コード。※１

12

DATA_LENGTH

CHAR(7)

データ長。

右詰めで文字形式にして格納します(上位の0は空白にします)。

13

LOB_LENGTH_CODE

CHAR(8)

BLOB属性長コード。※２※３

BLOB及びBINARY以外の場合はナル値となります。

14

LOB_LENGTH

CHAR(20)

BLOB属性長指定値。

右詰めで文字形式にして格納します(上位の0は空白にします)。

BLOB及びBINARY以外の場合はナル値となります。

15

LOB_LENGTH_TYPE

CHAR(1)

BLOB属性長の種別(単位)。

K：K指定時

M：M指定時

G：G指定時

空白：省略時

BLOB以外の場合はナル値となります。

16

UDT_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型の属性に更に抽象データ型がある場合，その属性の抽象データ型の所有者。

システム定義型の場合はナル値となります。

17

UDT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型の属性に更に抽象データ型がある場合，その属性の抽象データ型の名称。

システム定義型の場合はナル値となります。

18

DATA_COMMENT

VARCHAR(255)

コメント。

初期値，及びコメントがない場合はナル値となります。

19

NO_SPLIT

CHAR(1)

NO SPLITの指定有無。

Y：指定あり

ナル値：指定なし

注※1

DECIMAL型，INTERVAL YEAR TO DAY型，INTERVAL HOUR TO SECOND型の場合は，精度，位取りをそれぞれ1バイトに格納し，それ以外の場合は，2バイトの2進形式で長さ（NCHAR型，NVARCHAR型の場合は文字数）を格納します。ただし，BLOB型及び抽象データ型の場合は0になります。

注※2

列長の指定値を4バイトごとに区切られた8バイトに2進形式で格納します。

注※3

エンディアンが異なる接続形態でも，SQLの結果はエンディアン変換されません。したがって，アクセスする場合は，アプリケーション側でエンディアンを考慮して変換する必要があります。

(23)　SQL_TABLE_RESOURCES表の内容

この表では，表で使用するリソース情報を管理します（1行で1リソース分）。

SQL_TABLE_RESOURCES表の内容を次の表に示します。

表G‒25　SQL_TABLE_RESOURCES表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

表の名称。

3

BASE_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

使用している資源の所有者。

4

BASE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

使用している資源の識別子。

5

BASE_TYPE

CHAR(1)

使用している資源の種別。

A：抽象データ型

(24)　SQL_PLUGINS表の内容

この表では，プラグイン情報を管理します（1行で1プラグイン分）。

SQL_PLUGINS表の内容を次の表に示します。

表G‒26　SQL_PLUGINS表の内容

項番

列　　名

データ型

内　　　容

1

PLUGIN_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

プラグイン所有者。

2

PLUGIN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

プラグイン名称。

3

PLUGIN_TYPE

CHAR(1)

プラグイン種別。

D：データ型プラグイン

I：インデクス型プラグイン

4

TYPE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型，又はインデクス型の所有者。

5

TYPE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型，又はインデクス型の名称。

6

CREATE_TIME

CHAR(14)

プラグイン組み込み時刻。

7

PLUGIN_LIB_NAME

VARCHAR(255)

ライブラリパス名。

8

PLUGIN_COMMENT

VARCHAR(255)

コメント。

初期値，及びコメントがない場合はナル値となります。

9

PLUGIN_VERSION

VARCHAR(10)

プラグインのバージョン。

プラグインが初期バージョンの場合はナル値となります。

10

PLUGIN_EXT_FUNC

VARCHAR(255)

プラグイン拡張機能コード（システムが使用する情報）。

11

PLUGIN_HOLDABLE

CHAR(1)

ホールダブルカーソルの対応状況。

Y：対応済み

ナル値：未対応

(25)　SQL_PLUGIN_ROUTINES表の内容

この表では，プラグインのルーチン情報を管理します（1行で1プラグインルーチン分）。

SQL_PLUGIN_ROUTINES表の内容を次の表に示します。

表G‒27　SQL_PLUGIN_ROUTINES表の内容

項番

列　　名

データ型

内　　　容

1

ROUTINE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

ルーチンの所有者。

2

PLUGIN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

プラグイン名称。

3

OPERATION_NAME

VARCHAR(255)

オペレーション名。

4

SPECIFIC_NAME

VARCHAR(30)，又は

MVARCHAR(30)

特定名称。※

5

N_PARAM

INTEGER

パラメタ数。

6

TIMING_DESCRIPTOR

VARCHAR(30)

契機指示子。

7

OPERATION_DESCRIPTOR

VARCHAR(255)

オペレーション修飾情報。

注※　次の形式で名称を付けます。

'P' 関数名 登録日時

P：プラグイン実装の関数であることを示すコードです。

関数名：特定名称が30文字以下になるように前部の文字を切り捨てます(最大15文字)。

登録日時：年月日時分秒を14文字で表します。

(26)　SQL_PLUGIN_ROUTINE_PARAMS表の内容

この表では，プラグインのルーチンのパラメタ情報を管理します（1行で1パラメタ分）。

SQL_PLUGIN_ROUTINE_PARAMS表の内容を次の表に示します。

表G‒28　SQL_PLUGIN_ROUTINE_PARAMS表の内容

項番

列　　名

データ型

内　　　容

1

ROUTINE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

所有者。

2

PLUGIN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

プラグイン名称。

3

SPECIFIC_NAME

VARCHAR(30)，又は

MVARCHAR(30)

特定名称。

4

PARAMETER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

パラメタ名称。

5

PARAMETER_MODE

CHAR(7)

パラメタ入出力属性。

IN：入力属性

OUT：出力属性

INOUT：入出力属性

RETURNS：戻り値属性

PICKUP：行識別子（ROWID）出力属性

6

PARAMETER_DESCRIPTOR

VARCHAR(255)

パラメタ修飾情報。

プラグインIDLで記述されているパラメタ修飾情報を，そのまま文字列として保持します。パラメタ修飾情報の指定がない場合はナル値となります。

7

SPECIFIC_BIND_OPERATION_NAME

VARCHAR(30)，又は

MVARCHAR(30)

特化済みバインドオペレーション名。

バインドオペレーション指定がない場合はナル値となります。

8

PARAMETER_TYPE

CHAR(1)

パラメタモード。

空白：normal(SQLで扱えるデータ型)

I：indicator

N：new data

C：current data

D：dbifb

K：index key inf

P：pointer

R：rowid

U：utlifb

T：pointer*

normal以外はプラグイン固有のパラメタです。

9

PARAMETER_NO

INTEGER

抽象データ型関数のパラメタ指定順序位置。

10

DATA_TYPE

CHAR(24)

パラメタのデータ型。

格納形式は，SQL_COLUMNS表のDATA_TYPE列を参照してください。

パラメタモードがD，K，P，R，U，又はTの場合はナル値となります。

11

DATA_TYPE_CODE

SMALLINT

パラメタのデータ型コード。

パラメタモードがD，K，P，R，U，又はTの場合はナル値となります。

格納形式は，SQL_COLUMNS表のDATA_TYPE_CODE列を参照してください。

12

DATA_LENGTH_CODE

SMALLINT

パラメタのデータ型定議長コード。※１

パラメタモードがD，K，P，R，U，又はTの場合はナル値となります。

13

DATA_LENGTH

CHAR(7)

パラメタのデータ型定議長。

右詰めで文字形式にして格納します(上位の0は空白にします)。パラパラメタモードがD，K，P，R，U，又はTの場合はナル値となります。

14

LOB_LENGTH_CODE

CHAR(8)

LOB列長コード又はBINARY列長コード。※２※３

パラメタモードがnormalで，かつデータ型がBLOB及びBINARY以外の場合はナル値となります。

15

LOB_LENGTH

CHAR(20)

LOB列長指定値又はBINARY列長指定値。

右詰めで文字形式にして格納します(上位の0は空白にします)。パラメタモードがnormalで，かつデータ型がBLOB及びBINARY以外の場合はナル値となります。

16

LOB_LENGTH_TYPE

CHAR(1)

LOB列長の種別(単位)。

K：K指定時

M：M指定時

G：G指定時

空白：省略時

パラメタモードがnormalで，かつデータ型がBLOB以外の場合はナル値となります。

17

UDT_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

パラメタデータ型の所有者。

データ型がユーザ定義型以外の場合はナル値となります。

18

UDT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

パラメタデータ型の名称。

データ型がユーザ定義型以外の場合はナル値となります。

19

UDT_TYPE_ID

INTEGER

パラメタデータ型のID。

データ型がユーザ定義型以外の場合はナル値となります。

注※1

DECIMAL型，INTERVAL YEAR TO DAY型，INTERVAL HOUR TO SECOND型の場合は，精度，位取りをそれぞれ1バイトに格納し，それ以外の場合は，2バイトの2進形式で長さ（NCHAR型，NVARCHAR型の場合は文字数）を格納します。ただし，BLOB型及び抽象データ型の場合は0になります。

注※2

列長の指定値を4バイトごとに区切られた8バイトに2進形式で格納します。

注※3

エンディアンが異なる接続形態でも，SQLの結果はエンディアン変換されません。したがって，アクセスする場合は，アプリケーション側でエンディアンを考慮して変換する必要があります。

(27)　SQL_INDEX_TYPES表の内容

この表では，インデクス型情報を管理します（1行で1インデクス型分）。

SQL_INDEX_TYPES表の内容を次の表に示します。

表G‒29　SQL_INDEX_TYPES表の内容

項番

列　　名

データ型

内　　　容

1

INDEX_TYPE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

インデクス型の所有者。

2

INDEX_TYPE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクス型の名称。

3

INDEX_TYPE_ID

INTEGER

インデクス型のID。

4

CREATE_TIME

CHAR(14)

作成時刻。

5

ADT_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型の所有者。

6

ADT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型の名称。

7

N_FUNCTION

INTEGER

インデクス型で定義したインデクスで利用できる抽象データ型関数の数。

(28)　SQL_INDEX_RESOURCES表の内容

この表では，インデクスで使用するリソース情報を管理します（1行で1リソース分）。

SQL_INDEX_RESOURCES表の内容を次の表に示します。

表G‒30　SQL_INDEX_RESOURCES表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

インデクス定義表の所有者。

2

INDEX_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスの名称。

3

BASE_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

使用している資源の所有者。

4

BASE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

使用している資源の識別子。

5

BASE_TYPE

CHAR(1)

使用している資源の種別。

I：インデクス型

(29)　SQL_INDEX_DATATYPE表の内容

この表では，インデクスの対象項目情報を管理します（1行で1対象項目分（1段分））。

SQL_INDEX_DATATYPE表の内容を次の表に示します。

表G‒31　SQL_INDEX_DATATYPE表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスを含む表の名称。

3

INDEX_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスの名称。

4

INDEX_ID

INTEGER

インデクスID。

5

COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

列名(インデクス構成列名) 。

6

N_LEVEL

SMALLINT

レベル数(抽象データ型を構成する属性名の順序を識別する番号。1から始まる整数) 。

7

ADT_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型の所有者。

8

ADT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型の名称。

9

ADT_ATTR_NAME

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型の属性名。

10

ADT_ATTR_ID

SMALLINT

属性の位置。

(30)　SQL_INDEX_FUNCTION表の内容

この表では，インデクスで利用する抽象データ型関数の情報を管理します（1行で一つの抽象データ型関数分）。

SQL_INDEX_FUNCTION表の内容を次の表に示します。

表G‒32　SQL_INDEX_FUNCTION表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスを含む表の名称。

3

INDEX_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスの名称。

4

INDEX_ID

INTEGER

インデクスID。

5

COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

列名称(インデクス構成列名)。

6

ADT_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型関数の所有者名。

7

ADT_FUNCTION_NAME

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型関数の名称(ルーチン名称) 。

8

ADT_FUNCTION_OBJECT_ID

INTEGER

抽象データ型関数のオブジェクトID。

(31)　SQL_TYPE_RESOURCES表の内容

この表では，ユーザ定義型で使用するリソース情報を管理します（1行で1リソース分）。

SQL_TYPE_RESOURCES表の内容を次の表に示します。

表G‒33　SQL_TYPE_RESOURCES表の内容

項番

列　　名

データ型

内　　　容

1

TYPE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

ユーザ定義型の所有者。

2

TYPE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ユーザ定義型の名称。

3

BASE_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

使用している資源の所有者。

4

BASE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

使用している資源の識別子。

5

BASE_TYPE

CHAR(1)

使用している資源の識別子。

A：抽象データ型

(32)　SQL_INDEX_TYPE_FUNCTION表の内容

この表では，インデクス型を定義したインデクスで利用できる抽象データ型関数の情報を管理します（n行で1インデクス型分）。

SQL_INDEX_TYPE_FUNCTION表の内容を次の表に示します。

表G‒34　SQL_INDEX_TYPE_FUNCTION表の内容

項番

列　　名

データ型

内　　　容

1

INDEX_TYPE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

インデクス型の所有者。

2

INDEX_TYPE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクス型の名称。

3

ADT_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型関数の所有者。

4

ADT_FUNCTION_NAME

VARCHAR(30)，又は

MVARCHAR(30)

抽象データ型関数の識別子。※

5

ADT_FUNCTION_OBJECT_ID

INTEGER

抽象データ型関数のオブジェクトID。

注※ 特定名称ではありません。

(33)　SQL_EXCEPT表の内容

この表では，インデクスの除外キー値の情報を管理します（n行で1インデクスの除外キー群分）。また，1行では1インデクスの一つの除外値（複数列インデクスの場合は，除外値群）を管理します。

SQL_EXCEPT表の内容を次の表に示します。

表G‒35　SQL_EXCEPT表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

インデクスの所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスがある表の名称。

3

INDEX_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクスの名称。

4

INDEX_ID

INTEGER

インデクスID。

5

TABLE_ID

INTEGER

表ID。

6

EXCEPT_VALUE

VARCHAR(573)，又は

MVARCHAR(573)

除外キー値の内容。

構成列ごとの指定値を，文字形式でコンマで区切ります。

初期値はナル値となります。

(34)　SQL_IOS_GENERATIONS表の内容

この表では，インナレプリカ機能使用時のHiRDBファイルシステム領域の世代情報を管理します（1行で1HiRDBファイルシステム領域分）。

HiRDB Staticizer Optionを組み込んでいない場合，この表の内容は空となります。ただし，HiRDB Staticizer Optionを組み込んでデータベースを構築した後に，HiRDB Staticizer Optionを取り外した場合は，表の中のデータは残った状態となります。

Windows版の場合は，SQL_IOS_GENERATIONS表の内容は空となります。

SQL_IOS_GENERATIONS表の内容を次の表に示します。

表G‒36　SQL_IOS_GENERATIONS表の内容

項番

列　　名

データ型

内　　　容

1

FILE_SYSTEM_NAME

VARCHAR(165)

HiRDBファイルシステム領域名（絶対パス名）。

2

GENERATION_NUMBER

SMALLINT

世代番号。

3

SERVER_NAME

CHAR(8)

サーバ名（BES又はSDS）。※

4

ORIGINAL_FILE_SYSTEM_NAME

VARCHAR(165)

オリジナルHiRDBファイルシステム領域名（絶対パス名）。

注※

HiRDB/パラレルサーバのディクショナリ表を，そのままHiRDB/シングルサーバで使用する場合でも，サーバ名は変更されません。

左詰めで8文字に満たない場合，残りの部分には空白が入ります。

(35)　SQL_TRIGGERS表の内容

この表では，スキーマ内にあるトリガの情報を管理します（1行で1トリガ分）。

SQL_TRIGGERS表の内容を次の表に示します。

表G‒37　SQL_TRIGGERS表の内容

項番

列　　名

データ型

内　　　容

1

TRIGGER_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

トリガの所有者。

2

TRIGGER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

トリガ名称。

3

OBJECT_ID

INTEGER

オブジェクトID。

4

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

トリガを定義した表の所有者。

5

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

トリガを定義した表の名称。

6

TRIGGER_VALID

CHAR(1)

トリガ有効フラグ。

Y：有効

N：無効

トリガ動作手続きのSQL_ROUTINES表のROUTINE_VALID列と同じ値です。

7

INDEX_VALID

CHAR(1)

インデクス有効フラグ。

Y：有効

N：無効

トリガ動作手続きのSQL_ROUTINES表のINDEX_VALID列と同じ値です。

8

ACTION_TIME

CHAR(1)

トリガ動作時期。

A：AFTER

B：BEFORE

9

EVENT

CHAR(1)

トリガ契機種別。

I：INSERT

D：DELETE

U：UPDATE

10

ACTION_TYPE

CHAR(1)

トリガ動作単位。

R：ROW

S：STATEMENT

11

OLD_ROW_NAME

VARCHAR(30)，又は

MVARCHAR(30)

旧値相関名（OLD ROWに指定した相関名）。

OLD ROWを指定していない場合はナル値となります。

12

NEW_ROW_NAME

VARCHAR(30)，又は

MVARCHAR(30)

新値相関名（NEW ROWに指定した相関名）。

NEW ROWを指定していない場合はナル値となります。

13

CREATE_TIME

VARCHAR(16)

トリガ定義の作成時刻。

14

ALTER_TIME

CHAR(14)

トリガのSQLオブジェクトの再作成時刻。

トリガ動作手続きのSQL_ROUTINES表のALTER_TIME列と同じ値です。

トリガのSQLオブジェクトを再作成していない場合はナル値となります。

15

DEF_SOURCE_LEN

INTEGER

トリガ定義のソース長。

16

SPECIFIC_NAME

VARCHAR(30)，又は

MVARCHAR(30)

トリガ動作手続きの特定名。

17

N_UPDATE_COLUMNS

SMALLINT

トリガ契機列の数。

INSERTトリガ，DELETEトリガ，及びトリガ契機列を指定していないUPDATEトリガの場合は0となります。

18

REFERENCING_TABLE_ID

INTEGER

参照表の表ID。

参照制約動作で作成されたトリガ以外の場合はナル値となります。

19

REFERENCE_ACTION

CHAR(2)

参照制約動作種別。

DC：ON DELETE CASCADE

UC：ON UPDATE CASCADE

参照制約動作で作成されたトリガ以外の場合はナル値となります。

20

CONSTRAINT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

参照制約の制約名。

参照制約動作で作成されたトリガ以外の場合はナル値となります。

(36)　SQL_TRIGGER_COLUMNS表の内容

この表では，UPDATEトリガの契機列のリスト情報を管理します（1行で1契機列分）。

SQL_TRIGGER_COLUMNS表の内容を次の表に示します。

表G‒38　SQL_TRIGGER_COLUMNS表の内容

項番

列　　名

データ型

内　　　容

1

TRIGGER_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

トリガの所有者。

2

TRIGGER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

トリガの名称。

3

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

トリガを定義した表の所有者。

4

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

トリガを定義した表の名称。

5

COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

列リストに指定した列名。

6

TABLE_ID

INTEGER

トリガを定義した表のID。

(37)　SQL_TRIGGER_DEF_SOURCE表の内容

この表では，トリガ定義のソース情報を管理します（1行で1トリガ定義ソース分）。

SQL_TRIGGER_DEF_SOURCE表の内容を次の表に示します。

表G‒39　SQL_TRIGGER_DEF_SOURCE表の内容

項番

列　　名

データ型

内　　　容

1

TRIGGER_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

トリガの所有者。

2

TRIGGER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

トリガの名称。

3

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

トリガを定義した表の所有者。

4

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

トリガを定義した表の名称。

5

SOURCE_NO

INTEGER

定義ソース通し番号。

6

DEF_SOURCE

VARCHAR(32000)，

又は

MVARCHAR(32000)

定義ソース（SQLコンパイルオプション，WITH PROGRAMは含みません）。

(38)　SQL_TRIGGER_USAGE表の内容

この表では，トリガ動作条件中で参照している資源情報を管理します（1行でトリガ動作条件中で参照している1資源名称分）。

SQL_TRIGGER_USAGE表の内容を次の表に示します。

表G‒40　SQL_TRIGGER_USAGE表の内容

項番

列　　名

データ型

内　　　容

1

TRIGGER_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

トリガの所有者。

2

TRIGGER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

トリガの名称。

3

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

トリガを定義した表の所有者。

4

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

トリガを定義した表の名称。

5

BASE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

使用資源の所有者。パブリックルーチンの場合はPUBLIC。

6

BASE_TABLE

VARCHAR(30)，又は

MVARCHAR(30)

使用資源の表名。

使用資源種別がF（関数）の場合はナル値となります。

7

BASE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

使用資源名称（特定名又は列名）。

8

BASE_TYPE

CHAR(1)

使用資源種別。

F：関数

C：列名

9

TABLE_ID

INTEGER

表ID。

使用資源種別がF（関数）の場合はナル値となります。

10

BASE_ID

INTEGER

使用資源ID（オブジェクトID又は列ID）。

11

BASE_ROUTINE_CREATOR

VARCHAR(30)，又は

MVARCHAR(30)

使用資源がパブリック関数の場合の，パブリック関数定義者。

使用資源がパブリック関数以外の場合はナル値となります。

(39)　SQL_PARTKEY表の内容

この表では，マトリクス分割表の分割キーの情報を管理します（1行で1分割キー分）。

HiRDB Advanced High Availabilityを組み込んでいない場合，この表の内容は空となります。ただし，HiRDB Advanced High Availabilityを組み込んでデータベースを構築した後に，HiRDB Advanced High Availabilityを取り外した場合は，表の中のデータは残った状態となります。

SQL_PARTKEY表の内容を次の表に示します。

表G‒41　SQL_PARTKEY表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

表の名称。

3

KEY_NO

SMALLINT

分割キー番号（次元番号1又は2）。

4

KEY_NAME

VARCHAR(30)，又は

MVARCHAR(30)

分割キー列名。

5

COLUMN_ID

SMALLINT

分割キー列ID。

6

N_DIVISION

SMALLINT

キー内分割数。

7

HASH_KEY_NO

SMALLINT

ハッシュキー列内通番。

境界値分割の次元の場合，ナル値となります。

(40)　SQL_PARTKEY_DIVISION表の内容

この表では，マトリクス分割表の分割条件値の情報を管理します（1行で1分割条件値分）。

HiRDB Advanced High Availabilityを組み込んでいない場合，この表の内容は空となります。ただし，HiRDB Advanced High Availabilityを組み込んでデータベースを構築した後に，HiRDB Advanced High Availabilityを取り外した場合は，表の中のデータは残った状態となります。

SQL_PARTKEY_DIVISION表の内容を次の表に示します。

表G‒42　SQL_PARTKEY_DIVISION表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

表の名称。

3

KEY_NO

SMALLINT

分割キー番号（次元番号1又は2）。

4

IN_DIM_NO

SMALLINT

分割キー内通番。

5

DCVALUES

VARCHAR(255)，又は

MVARCHAR(255)

分割条件値（指定した分割条件値が文字形式で格納されます）。

分割キーに文字集合の指定がある場合でも，格納される値は変換されません。※1，※2

分割キー内の最後の境界値の場合，ハッシュ分割の次元の場合，ナル値となります。

6

DCVALUES_TYPE

CHAR(1)

分割条件値（DCVALUES列の値）の指定形式。

X：16進文字列定数

DCVALUES列の値がナル値の場合，及び分割条件に指定する定数が16進文字列定数以外の場合はナル値となります。

注※1

分割条件値を16進文字列定数で指定した場合，指定した16進文字列定数の値がそのまま格納されます。

分割条件値に指定した16進文字列を確認する場合，スカラ関数HEXを使用して16進文字列表現に変換して確認してください。16進文字列表現に変換しないで参照すると，16進文字列のコードに対応する文字が存在しない場合，文字化けが発生することがあります。

注※2

分割キーのデータ型がCHAR又はMCHAR型で分割条件値を16進文字列定数で指定した場合，分割条件値長（16進文字数÷2）が分割キーの定義長に満たないとき，分割キーの定義長に満たない部分は半角スペースで埋めないで分割条件値長分格納されます。なお，16進文字列定数以外で指定した場合は，定義長に満たない部分は半角スペースで埋めて格納されます。

(41)　SQL_AUDITS表の内容

この表では，監査対象の情報を管理します（1行で1オブジェクト又は1ユーザに対する1イベント分）。なお，この表は，監査人だけが参照できます。

SQL_AUDITS表の内容を次の表に示します。

表G‒43　SQL_AUDITS表の内容

項番

列　　名

データ型

内　　　容

1

EVENT_TYPE

VARCHAR(30)

CREATE AUDIT FOR 操作種別で指定したイベントタイプの名称※１又は'ANY'。

2

EVENT_SUBTYPE

VARCHAR(30)

イベントサブタイプの名称※２又は'ANY'。

CREATE AUDIT FOR ANYを指定した場合はナル値となります。

3

OBJECT_TYPE

VARCHAR(30)

CREATE AUDIT 選択オプションで指定したオブジェクトの種別。※３

オブジェクトを指定していない場合，及びHiRDBのバージョンが07-03より前の場合はナル値となります。

4

OBJECT_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

CREATE AUDIT 選択オプションで指定したオブジェクトの所有者。

オブジェクトを指定していない場合，及びHiRDBのバージョンが07-03より前の場合はナル値となります。

5

OBJECT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

CREATE AUDIT 選択オプションで指定したオブジェクトの名称。

オブジェクトを指定していない場合，及びHiRDBのバージョンが07-03より前の場合はナル値となります。

6

USER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

イベント実行者の認可識別子。イベント実行者を指定していない場合，及びHiRDBのバージョンが09-03-02以前の場合はナル値となります。

7

ANY_VALID

CHAR(1)

CREATE AUDIT WHENEVER ANYの指定有無。

Y：指定あり

N：指定なし

8

SUCCESSFUL_VALID

CHAR(1)

CREATE AUDIT WHENEVER SUCCESSFULの指定有無。

Y：指定あり

N：指定なし

9

UNSUCCESSFUL_ANY_VALID

CHAR(1)

CREATE AUDIT WHENEVER UNSUCCESSFULの指定有無。

Y：指定あり

N：指定なし

10

AUDIT_TYPE

CHAR(1)

取得情報種別。

E：CREATE AUDIT AUDITTYPE EVENT指定の場合

A：CREATE AUDIT AUDITTYPE ANY指定の場合

ただし，CREATE AUDIT AUDITTYPE PRIVILEGE指定の場合，及びAUDITTYPEを省略している場合，ナル値となります。

注※1

イベントタイプを次に示します。

SESSION，PRIVILEGE，DEFINITION，ACCESS，及びUTILITY

注※2

イベントサブタイプを次に示します。

CONNECT，AUTHORIZATION，DISCONNECT，GRANT，REVOKE，CREATE，DROP，ALTER，SELECT，INSERT，UPDATE，DELETE，PURGE，CALL，ASSIGN LIST，LOCK，NEXT VALUE，PDLOAD，PDRORG，PDEXP，及びPDCONSTCK

注※3

オブジェクトの種別を次に示します。

FUNCTION，INDEX，PROCEDURE，SCHEMA，SERVER，TABLE，TRIGGER，DATA TYPE，VIEW，LIST，COMMENT，及びSEQUENCE

(42)　SQL_REFERENTIAL_CONSTRAINTS表の内容

この表では，参照制約の対応状況を管理します（1行で1制約分）。

SQL_REFERENTIAL_CONSTRAINTS表の内容を次の表に示します。

表G‒44　SQL_REFERENTIAL_CONSTRAINTS表の内容

項番

列　　名

データ型

内　　　容

1

CONSTRAINT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約名。

2

CONSTRAINT_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

制約の所有者。

3

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の名称。

4

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の所有者。

5

COLUMN_COUNT

SMALLINT

外部キーの構成列数。

6

COLUMN_NAME

VARCHAR(2111)，又は

MVARCHAR(2111)

外部キーがある表の列名。

各列を引用符で囲んで，コンマで連結します。

7

COLUMN_NO

VARCHAR(128)

外部キーがある表の列ID（64個分）※。

8

R_OWNER

VARCHAR(30)，又は

MVARCHAR(30)

参照する表の所有者。

9

R_TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

参照する表の名称。

10

DELETE_RULE

CHAR(11)

削除規則（RESTRICT，又はCASCADE）。

11

UPDATE_RULE

CHAR(11)

更新規則（RESTRICT，又はCASCADE）。

12

CONSTRAINT_TIME

CHAR(14)

制約を定義した日時（YYYYMMDDHHMMSS）。

13

CHECK_PEND

CHAR(1)

検査保留状態の種別。

C：保留

ナル値：非保留

14

DELETE_TRIGGER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ON DELETE参照制約動作で作成されたトリガの名称（DRAYYYYMMDDHHMMSSth）。

ON DELETE参照制約動作でトリガが作成されていない場合はナル値となります。

15

UPDATE_TRIGGER_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ON UPDATE参照制約動作で作成されたトリガの名称（URAYYYYMMDDHHMMSSth）。

ON UPDATE参照制約動作でトリガが作成されていない場合はナル値となります。

16

R_COLUMN_NAME

VARCHAR(2111)，又は

MVARCHAR(2111)

主キー構成列の列名。

各列を引用符で囲んで，コンマで連結します。

17

R_COLUMN_NO

VARCHAR(128)

主キー構成列の列ID（64個分）※。

注※

エンディアンが異なる接続形態でも，SQLの結果はエンディアン変換されません。したがって，アクセスする場合は，アプリケーション側でエンディアンを考慮して変換する必要があります。

(43)　SQL_KEYCOLUMN_USAGE表の内容

この表では，外部キーを構成する列情報を管理します（1行で1列分）。

SQL_KEYCOLUMN_USAGE表の内容を次の表に示します。

表G‒45　SQL_KEYCOLUMN_USAGE表の内容

項番

列　　名

データ型

内　　　容

1

CONSTRAINT_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

制約の所有者。

2

CONSTRAINT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約名。

3

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の所有者。

4

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の名称。

5

COLUMN_NAME

VVARCHAR(30)，又は

MVARCHAR(30)

制約を定義した列名。

6

COLUMN_ORDER

SMALLINT

制約を定義した列の位置。

(44)　SQL_TABLE_CONSTRAINTS表の内容

この表では，スキーマ内にある整合性制約の情報を管理します（1行で1整合性制約分）。

SQL_TABLE_CONSTRAINTS表の内容を次の表に示します。

表G‒46　SQL_TABLE_CONSTRAINTS表の内容

項番

列　　名

データ型

内　　　容

1

CONSTRAINT_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

制約の所有者。

2

CONSTRAINT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約名。

3

CONSTRAINT_TYPE

VARCHAR(30)

制約の種類。

FOREIGN KEY：外部キー

CHECK：検査制約

4

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の所有者。

5

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の名称。

(45)　SQL_CHECKS表の内容

この表では，検査制約の情報を管理します（1行で1検査制約分）。

SQL_CHECKS表の内容を次の表に示します。

表G‒47　SQL_CHECKS表の内容

項番

列　　名

データ型

内　　　容

1

CONSTRAINT_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

検査制約の所有者。

2

CONSTRAINT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約名。

3

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の所有者。

4

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の名称。

5

CHK_SOURCE_LEN

INTEGER

検査制約の探索条件の長さ。

6

CHK_SOURCE

BINARY(2000000)

検査制約の探索条件。

7

CREATE_TIME

CHAR(14)

検査制約を定義した時刻（YYYYMMDDHHMMSS）。

8

CHECK_PEND2

CHAR(1)

検査保留状態の種別。

C：保留

ナル値：非保留

9

N_CHK_COLUMN

INTEGER

検査制約定義中に指定した制約の列数（重複排除した数）。

(46)　SQL_CHECK_COLUMNS表の内容

この表では，検査制約で使用している列の情報を管理します（1行で一つの検査制約で使用している1列分）。

SQL_CHECK_COLUMNS表の内容を次の表に示します。

表G‒48　SQL_CHECK_COLUMNS表の内容

項番

列　　名

データ型

内　　　容

1

CONSTRAINT_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

検査制約の所有者。

2

CONSTRAINT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約名。

3

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の所有者。

4

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約を定義した表の名称。

5

COLUMN_NAME

VARCHAR(30)，又は

MVARCHAR(30)

制約で使用している列名。

(47)　SQL_DIV_TYPE表の内容

この表では，キーレンジ分割とハッシュ分割を組み合わせたマトリクス分割表の分割キーの情報を管理します（1行で1分割キー数分）。

SQL_DIV_TYPE表の内容を次の表に示します。

表G‒49　SQL_DIV_TYPE表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

表の名称。

3

KEY_NO

SMALLINT

分割キー番号（次元番号）。

4

DIV_TYPE

CHAR(1)

次元内分割種別。

P：境界値分割

F：FIXハッシュ分割

H：フレキシブルハッシュ分割

5

HASH_NAME

VARCHAR(30)，又は

MVARCHAR(30)

ハッシュ関数名。

"HASH1"

"HASH2"

"HASH3"

"HASH4"

"HASH5"

"HASH6"

"HASH0"

"HASHZ"

ハッシュ分割以外の次元の場合，ナル値となります。

6

N_DIV_COLUMN

SMALLINT

次元内分割列数。

(48)　SQL_SYSPARAMS表の内容

この表では，連続認証失敗回数制限，及びパスワードの文字列制限の情報を管理します（1行で1設定項目数分，n行で一つの連続認証失敗回数制限の情報分，又は一つのパスワードの文字列制限の情報分）。なお，SQL_SYSPARAMS表は，DBA権限所有者，及び監査人だけが参照できます。

SQL_SYSPARAMS表の内容を次の表に示します。

表G‒50　SQL_SYSPARAMS表の内容

項番

列　　名

データ型

内　　　容

1

PARAM_KIND

VARCHAR(20)

パラメタ種別（CONNECTION_SECURITY）。

2

FUNCTION_KEY

VARCHAR(20)

機能名。

CONNECT：

連続認証失敗回数制限の場合

PASSWORD：

パスワードの文字列制限の場合

3

PARAM_KEY

VARCHAR(20)

指定項目。

機能名がCONNECTの場合は次のどれかです。

PERMISSION_COUNT：連続認証失敗許容回数

LOCK_MINUTE：アカウントロック期間（単位：分）

LOCK_MINUTE_CODE：アカウントロック期間コード

機能名がPASSWORDの場合は次のどれかです。

MIN_LENGTH：最小許容バイト数

USER_IDENTIFIER：認可識別子指定禁止

SIMILAR：単一文字種禁止

FORCE_CHARCTER：必須文字種

REUSE_MAX：再利用禁止の個数

4

INT_VALUE

INTEGER

INT型データ値※。

5

CHAR_VALUE

VARCHAR(30)

CHAR型データ値※。

注※

INT型データ値，及びCHAR型データ値に格納される値を次の表に示します。

PARAM_KEYの設定値

SQLでの指定値

INT_VALUE

CHAR_VALUE

PERMISSION_COUNT

定数

定数

定数

指定なし

2

2

LOCK_MINUTE

定数

定数

定数

UNLIMITED

ナル値

UNLIMITED

指定なし

1440

1440

LOCK_MINUTE_CODE

定数

定数

定数

UNLIMITED

ナル値

UNLIMITED

指定なし

1000000

1000000

MIN_LENGTH

定数

定数

定数

指定なし

8

8

USER_IDENTIFIER

RESTRICT

ナル値

RESTRICT

UNRESTRICT

ナル値

UNRESTRICT

指定なし

ナル値

RESTRICT

SIMILAR

RESTRICT

ナル値

RESTRICT

UNRESTRICT

ナル値

UNRESTRICT

指定なし

ナル値

RESTRICT

FORCE_CHARCTER

UPPER

ナル値

UPPER

LOWER

ナル値

LOWER

NUMERIC

ナル値

NUMERIC

ALL

ナル値

ALL

REUSE_MAX

定数

定数

定数

(49)　SQL_INDEX_XMLINF表の内容

この表では，部分構造インデクスの構成部分構造パス情報を管理します（1行で1インデクスの情報分）。

SQL_INDEX_XMLINF表の内容を次の表に示します。

表G‒51　SQL_INDEX_XMLINF表の内容

項番

列　　名

データ型

内　　　容

1

TABLE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

表の所有者。

2

TABLE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

表名。

3

INDEX_NAME

VARCHAR(30)，又は

MVARCHAR(30)

インデクス名。

4

PARTIAL_STRUCTURE_PATH_ORDER

SMALLINT

常に1。

5

PARTIAL_STRUCTURE_PATH

VARCHAR(32000)，又は

MVARCHAR(32000)

部分構造パス。

6

ASC_DESC

CHAR(1)

昇降順種別。

'A'：昇順

'D'：降順

7

DATA_TYPE

CHAR(24)

部分構造パスのデータ型。

格納形式は，SQL_COLUMNS表のDATA_TYPE列を参照してください。

8

DATA_TYPE_CODE

SMALLINT

部分構造パスのデータ型コード。

格納形式は，SQL_COLUMNS表のDATA_TYPE_CODE列を参照してください。

9

DATA_LENGTH

CHAR(7)

部分構造パスのデータ長（文字形式）。

格納形式は，SQL_COLUMNS表のDATA_LENGTH列を参照してください。

10

DATA_LENGTH_CODE

SMALLINT

部分構造パスのデータ長。

格納形式は，SQL_COLUMNS表のDATA_LENGTH_CODE列を参照してください。

(50)　SQL_SEQUENCES表の内容

この表では，順序数生成子の情報を管理します（1行で1順序数生成子分）。

SQL_SEQUENCES表の内容を次の表に示します。

表G‒52　SQL_SEQUENCES表の内容

項番

列　　名

データ型

内　　　容

1

SEQUENCE_SCHEMA

VARCHAR(30)，又は

MVARCHAR(30)

順序数生成子の所有者。

2

SEQUENCE_NAME

VARCHAR(30)，又は

MVARCHAR(30)

順序数生成子識別子。

3

SEQUENCE_ID

INT

順序数生成子ID。

4

SEQUENCE_TYPE

CHAR(1)

システムで使用する情報。

常にEとなります。

5

PUBLIC_USAGE

CHAR(1)

PUBLIC USAGE指定の有無。

Y：指定あり

指定しない場合，ナル値となります。

6

CREATE_TIME

CHAR(14)

順序数生成子作成時間。

7

ALTER_TIME

CHAR(14)

常にナル値となります。

8

DATA_TYPE

CHAR(24)

順序数生成子のデータ型。

INTEGER：省略時

格納形式は，SQL_COLUMNS表のDATA_TYPE列を参照してください。

9

DATA_TYPE_CODE

SMALLINT

順序数生成子のデータ型コード。

格納形式は，SQL_COLUMNS表のDATA_TYPE_CODE列を参照してください。

10

DATA_LENGTH

CHAR(7)

順序数生成子のデータ長（文字形式）。

格納形式は，SQL_COLUMNS表のDATA_LENGTH列を参照してください。

11

DATA_LENGTH_CODE

SMALLINT

順序数生成子のデータ長。

格納形式は，SQL_COLUMNS表のDATA_LENGTH_CODE列を参照してください。

12

START_VALUE

VARCHAR(255)

開始値。

省略時，ナル値となります。

13

MAXIMUM_VALUE

VARCHAR(255)

最大値。

NO MAXVALUE：NO MAXVALUE指定時

省略時，ナル値となります。

14

MINIMUM_VALUE

VARCHAR(255)

最小値。

NO MINVALUE：NO MINVALUE指定時

省略時，ナル値となります。

15

INCREMENT

VARCHAR(255)

増分値。

省略時，ナル値となります。

16

CYCLE_OPTION

CHAR(1)

循環オプション。

Y：CYCLE

N：NO CYCLE，又は省略時

17

LOGINTERVAL

INT

順序数生成子ログ出力間隔。

省略時は1を設定します。

初期値は1となります。

18

RDAREA_NAME

VARCHAR(30)，又は

MVARCHAR(30)

順序数生成子格納先RDエリア名称。

19

RDAREA_ID

INT

順序数生成子格納先RDエリアID。

(51)　SQL_ACCESS_SECURITY表の内容

この表では，IPアドレスによる接続制限の情報を管理します（1行で1接続制約分）。

なお，この表を参照できるのは，DBA権限所有者，及び監査人だけです。

SQL_ACCESS_SECURITY表の内容を次の表に示します。

表G‒53　SQL_ACCESS_SECURITY表の内容

項番

列　　名

データ型

内　　　容

1

CONSTRAINT_NAME

VARCHAR(30)，又は

MVARCHAR(30)

接続制約名

2

ALLOW_DENY

CHAR(1)

接続許可拒否指定

'A'：許可

'D'：拒否

3

IP_ADDR

VARCHAR(18)

IPアドレス

4

CREATE_TIME

CHAR(14)

接続制約の作成時間

（YYYYMMDDHHMMSS）

5

USER_ID

VARCHAR(30)，又は

MVARCHAR(30)

接続制約を適用するユーザの認可識別子。

NULLの場合は認可識別子指定なし。

付録H　HiRDBが提供する関数

ここでは，HiRDBが提供する次の関数について説明します。

表分割ハッシュ関数

空白変換関数

DECIMAL型符号正規化関数

文字コード種別設定関数

付録H.1　表分割ハッシュ関数

表分割ハッシュ関数とは，分割キーの値から，表分割に指定した分割条件指定順序を取得するものです。この表分割ハッシュ関数を使用したUAPを実行すると，ハッシュ分割した表であっても，表にデータを格納する前に格納先RDエリアが分かります。格納先RDエリアが分かるので，次のような場合に使用すると有効です。

ハッシュ分割するためのハッシュ関数，及び分割キーを決定するときに，格納するデータが均等に分割されるかどうかを評価する場合

ハッシュ分割した表に，データベース作成ユティリティでRDエリア単位に並列にデータロードする場合，RDエリアごとの入力データファイルを作成するとき

(1)　表分割ハッシュ関数を使用する場合の前提条件

表分割ハッシュ関数を使用する場合の前提条件を次に示します。

(a)　プログラム言語

表分割ハッシュ関数を使用してUAPを作成する場合，次の高級言語で記述できます。

C，又はC++言語

(b)　実行できる環境

HiRDBサーバ，又はHiRDBクライアントをインストールしたサーバマシンで実行できます。

ただし，HiRDBクライアントで実行する場合，HiRDBサーバとHiRDBクライアントのOSの組み合わせによって，正しい結果が得られない場合があります。

HiRDBクライアントでの実行可否を次の表に示します。

表H‒1　HiRDBクライアントでの実行可否

HiRDBサーバのOS

HiRDBクライアントのOS

HP-UX，AIX

Linux，Windows

HP-UX，AIX

○

×

Linux，Windows

×

○

（凡例）

○：実行できます。

×：バイトオーダが異なるため，分割条件指定順序又は分割キー内通番が不正となります。

(2)　表分割ハッシュ関数を使用したUAPの作成，実行

次の手順でUAPを作成し，実行します。

ソースプログラムの作成

コンパイル，リンケージ

ロードモジュールの実行

(a)　プログラムの作成

C，又はC++言語で記述したソースプログラム中に，表分割ハッシュ関数の関数呼出しを記述します。表分割ハッシュ関数は共用ライブラリの形で提供されるので，共用ライブラリをリンクすると使用できます。

表分割ハッシュ関数を使用するときには，提供されるヘッダファイルをソースプログラム作成時にインクルードする必要があります。表分割ハッシュ関数が必要とするすべてのヘッダファイルをインクルードします。表分割ハッシュ関数が必要とするヘッダファイルについては，「表分割ハッシュ関数の詳細」を参照してください。

(b)　コンパイル，リンケージ

HiRDBサーバがインストールされているサーバマシン，又はHiRDBクライアントがインストールされているクライアントマシンでコンパイル，リンケージします。

なお，ソースプログラム中にSQL文を埋め込む場合は，コンパイル，リンケージする前に，プリプロセスする必要があります。

コンパイル，リンケージ，及びプリプロセスについては，「UAP実行前の準備」を参照してください。

UNIX版のHiRDBサーバ側でのコンパイル，リンケージ

HiRDBサーバでコンパイル，リンケージする場合の指定例について説明します。

＜例＞（C言語の場合）

ソースファイルの名称がsample.cで，実行形式ファイルの名称を指定しない場合

＜32bitモードで動作するUAPを作成する場合＞

  cc -I $PDDIR/include sample.c -L$PDDIR/client/lib -l sqlauxf

＜64bitモードで動作するUAPを作成する場合＞

  cc +DD64 -I $PDDIR/include sample.c -L$PDDIR/client/lib -l sqlauxf64

＜例＞（C++言語の場合）

ソースファイルの名称がsample.Cで，実行形式ファイルの名称を指定しない場合

＜32bitモードで動作するUAPを作成する場合＞

  CC -I $PDDIR/include sample.C -L$PDDIR/client/lib -l sqlauxf

＜64bitモードで動作するUAPを作成する場合＞

  CC +DD64 -I $PDDIR/include sample.C -L$PDDIR/client/lib -l sqlauxf64

UNIX版のHiRDBクライアント側でのコンパイル，リンケージ

HiRDBクライアントでコンパイル，リンケージする場合の指定例について説明します。

＜例＞（C言語の場合）

ソースファイルの名称がsample.cで，実行形式ファイルの名称を指定しない場合

＜32bitモードで動作するUAPを作成する場合＞

  cc -I /HiRDB/include sample.c -L/HiRDB/client/lib -l sqlauxf

＜64bitモードで動作するUAPを作成する場合＞

  cc +DD64 -I /HiRDB/include sample.c -L/HiRDB/client/lib -l sqlauxf64

注

下線で示す部分は，HiRDBのインストールディレクトリを指定します。

＜例＞（C++言語の場合）

ソースファイルの名称がsample.Cで，実行形式ファイルの名称を指定しない場合

＜32bitモードで動作するUAPを作成する場合＞

  CC -I /HiRDB/include sample.C -L/HiRDB/client/lib -l sqlauxf

＜64bitモードで動作するUAPを作成する場合＞

  CC +DD64 -I /HiRDB/include sample.C -L/HiRDB/client/lib -l sqlauxf64

注

下線で示す部分は，HiRDBのインストールディレクトリを指定します。

Windows版のHiRDBサーバ側でのコンパイル，リンケージ

C言語のソースプログラムは，ANSI-Cに従ったコンパイラでコンパイルをします。また，C++言語のソースプログラムは，C++に従ったコンパイラでコンパイルをします。

Microsoft Visual C++ Version 1.0を使用してコンパイル，リンケージをする場合のオプションの設定は，オプションメニューから「プロジェクトの設定」を選択します。

Microsoft Visual C++ Version 2.0を使用してコンパイル，リンケージをする場合のオプションの設定は，プロジェクトメニューから「設定」を選択します。

「プロジェクトの設定」，又は「設定」で設定する項目（HiRDBサーバ側）を次の表に示します。

表H‒2　「プロジェクトの設定」，又は「設定」で設定する項目（HiRDBサーバ側）

項目

カテゴリ

カテゴリの設定

設定値

コンパイラ

コード生成

構造体メンバのアライメント

8バイト

使用するランタイムライブラリ

マルチスレッド

プリプロセサ

インクルードのファイルパス

¥HiRDB¥client¥include

リンカ

インプット

ライブラリ

¥HiRDB¥client¥lib

¥pdsqlauxf.lib

注　下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

Windows版のHiRDBクライアント側でのコンパイル，リンケージ

C言語のソースプログラムは，ANSI-Cに従ったコンパイラでコンパイルをします。また，C++言語のソースプログラムは，C++に従ったコンパイラでコンパイルをします。

Microsoft Visual C++ Version 1.0を使用してコンパイル，リンケージをする場合のオプションの設定は，オプションメニューから「プロジェクトの設定」を選択します。

Microsoft Visual C++ Version 2.0を使用してコンパイル，リンケージをする場合のオプションの設定は，プロジェクトメニューから「設定」を選択します。

「プロジェクトの設定」，又は「設定」で設定する項目（HiRDBクライアント側）を次の表に示します。

表H‒3　「プロジェクトの設定」，又は「設定」で設定する項目（HiRDBクライアント側）

項目

カテゴリ

カテゴリの設定

設定値

コンパイラ

コード生成

構造体メンバのアライメント

8バイト

使用するランタイムライブラリ

マルチスレッド

プリプロセサ

インクルードのファイルパス

¥HiRDB¥include

リンカ

インプット

ライブラリ

¥HiRDB¥lib

¥pdsqlauxf.lib

注　下線で示す部分は，HiRDBのインストールディレクトリを指定してください。

(3)　表分割ハッシュ関数の詳細

(a)　入力に必要な情報

表分割ハッシュ関数を呼び出すには，次の1〜8の情報を取得して，引数に設定する必要があります。

分割に指定したハッシュ関数名

分割キーに指定した列数

分割キーの指定順序とデータ型コード，データ長コード

表の分割数

分割キーに格納するデータ値

HiRDBサーバで使用する各国文字の全角空白文字

空白変換レベルの値

DECIMAL型の符号正規化機能の使用有無

この中の1〜4は，CREATE TABLEの次の部分に対応します。

なお，既に表を定義している場合，1〜4はディクショナリ表を検索すれば情報を取得できます。ディクショナリ表の検索例については，「ディクショナリ表からの検索（ハッシュ分割の場合）」を参照してください。

また，空白変換レベル（空白変換機能），及びDECIMAL型の符号正規化機能については，マニュアル「HiRDB システム運用ガイド」を参照してください。

(b)　記述構成

表分割ハッシュ関数の詳細を次のように説明します。

機能

概要について説明します。

ヘッダファイル

表分割ハッシュ関数を使用するために必要な，ヘッダについて説明します。

形式

実際に指定する形式について説明します。

引数

形式で記述している引数とその意味について説明します。

戻り値

表分割ハッシュ関数の戻り値の型（データ型として記述）について説明します。

(c)　表分割ハッシュ関数（p_rdb_dbhash）

機能

分割キーの値が格納される分割条件指定順序（1〜表の分割数），又は分割キー内通番を取得できます。ただし，正常終了しなかった場合，分割条件指定順序の値は不正になります。

分割条件指定順序を取得する行が複数ある場合には，行ごとに分割キーのデータを変更して，表分割ハッシュ関数を呼ぶ必要があります。この場合，分割キーのデータ値以外の引数は変更する必要はありません。

分割キー内通番から分割条件指定順序を求める方法については，「ディクショナリ表からの検索（マトリクス分割の場合）」を参照してください。

ヘッダファイル

#include<pddbhash.h>

表分割ハッシュ関数を使用する場合に必ず指定します。

#include<pdbsqlda.h>

分割キーのデータ型コードを設定する場合，マクロ（PDSQL_で始まるマクロ）を使用して設定するときに指定します。なお，ディクショナリ表からデータ型コードを検索して設定する場合には，指定する必要はありません。

形式1(分割キーに文字集合の指定がない場合)

  int p_rdb_dbhash(short           hashcode,
                   short           ncol,
                   p_rdb_collst_t  *collst,
                   p_rdb_dadlst_t  *dadlst,
                   unsigned int    ndiv,
                   unsigned char   ncspace[2],
                   int             flags,
                   int             *rdno);

形式2(分割キーに文字集合の指定がある場合)

  int p_rdb_dbhash_cs(short           hashcode,
                    short             ncol,
                    p_rdb_collst_t    *collst,
                    p_rdb_csidlst_t   *csidlst,
                    p_rdb_dadlst_t    *dadlst,
                    unsigned int      ndiv,
                    unsigned char     ncspace[2],
                    int               flags,
                    int               *rdno);

引数

hashcode（入力）

ハッシュ関数名に対応するハッシュ関数コードを指定します。ハッシュ関数コードについては，「ハッシュ関数コード」を参照してください。

ncol（入力）

表定義時に，分割キーとして指定した列数を指定します。

collst（入力）

分割キーリストへのポインタを指定します。分割キーリストは，分割キーのデータ型コード，データ長コードから成る構造体で，分割キー数分連続する領域です。分割キーリストについては，「分割キーリスト」を参照してください。

分割キーのデータ型コード，データ長コードについては，ディクショナリ表を検索すれば情報を取得できます。ディクショナリ表の検索例については，「ディクショナリ表からの検索（ハッシュ分割の場合）」を参照してください。

csidlst（入力）

形式2（分割キーに文字集合の指定がある場合）の場合にだけ指定します。分割キーの文字集合IDリストへのポインタを指定します。

文字集合IDリストは，文字集合IDから成る構造体が分割キー数分連続する領域です。文字集合IDリストについては，「文字集合IDリスト」を参照してください。

分割キーの文字集合IDは，ディクショナリ表を検索することで取得できます。ディクショナリ表の検索については，「ディクショナリ表からの検索（ハッシュ分割の場合）」を参照してください。

dadlst（入力）

データアドレスリストへのポインタを指定します。データアドレスリストは，分割キーのデータを格納する領域へのアドレスから成る構造体で，分割キー数分連続する領域です。詳細については，「データアドレスリスト」を参照してください。

ndiv（入力）

ハッシュ分割の分割数を指定します。

ncspace（入力）

HiRDBサーバで使用する各国文字コードの全角空白文字を，2バイトの領域で指定します。分割キーのデータ型がNVARCHARの場合，文字列に続く空白を取り除いてハッシングするために使用します。また，flagsに空白変換レベル1，又は3を指定した場合の分割キー値（NCHAR，NVARCHAR，MCHAR，又はMVARCHAR）の空白変換のときにも使用します。

次の場合に，ncspaceの領域が未設定のときはエラーとなります。

分割キーがNVARCHARの場合

flagsに空白変換レベル1，又は3を指定していて，かつ分割キーがNCHAR，NVARCHAR，MCHAR，又はMVARCHARの場合

ncspaceに指定する全角空白文字を次の表に示します。

表H‒4　ncspaceに指定する全角空白文字

pdsetupで指定した文字コード種別※２

ncspace

ncspace[0]

ncspace[1]

sjis（シフトJIS漢字コード）

0x81

0x40

chinese（EUC中国語漢字コード）

0xA1

0xA1

ujis（EUC日本語漢字コード）

0xA1

0xA1

lang-c（単一バイト文字コード）※１

0x00

0x00

utf-8（Unicode（UTF-8））※３

0x00

0x00

utf-8_ivs（Unicode（IVS対応UTF-8））※３

0x00

0x00

chinese-gb18030（中国語漢字コードGB18030）※３

0xA1

0xA1

省略時（HP-UXの場合はsjis）

0x81

0x40

省略時（AIXの場合はsjis）

0x81

0x40

省略時（Linuxの場合はujis）

0xA1

0xA1

省略時（Windowsの場合はsjis）

0x81

0x40

注※1

lang-cの場合，列のデータ型にNCHAR，NVARCHAR，MCHAR，及びMVARCHARは使用できません。

注※2

Windows環境の場合は，pdntenvコマンドで指定した文字コード種別の空白文字コードを指定してください。

注※3

列のデータ型には，NCHAR及びNVARCHARは使用できません。

flags（入力）

空白変換レベル，及びDECIMAL型の符号正規化機能の指定に従って指定します（これらの機能を使用しない場合でも指定する必要があります）。空白変換レベル，及びDECIMAL型の符号正規化機能については，マニュアル「HiRDB システム運用ガイド」を参照してください。

flagsに指定する値を次に示します。

HiRDBの動作環境

flags指定値

空白変換レベル※

省略

p_rdb_FLG_SPLVL_0

0

1

p_rdb_FLG_SPLVL_1

3

p_rdb_FLG_SPLVL_3

DECIMAL型の符号正規化機能

省略

p_rdb_FLG_DECNRM_N

N

Y

p_rdb_FLG_DECNRM_Y

注※

HiRDBサーバの文字コードがUnicode（UTF-8）の場合，あらかじめ空白変換をしてからこの関数を実行する必要があるため，flagsの指定値にはp_rdb_FLG_SPLVL_0以外は指定しないでください。

rdno（出力）

分割条件指定順序（1〜表の分割数），又は分割キー内通番が設定されます。

戻り値

データ型：int

p_rdb_RC_RTRN(0)

正常終了

p_rdb_RC_ERRHASH(-1)

ハッシュ関数コード不正（p_rdb_HASH1〜p_rdb_HASH6，p_rdb_HASHZ，p_rdb_HASH0，p_rdb_HASHA〜p_rdb_HASHF）

p_rdb_RC_ERRNCOL(-2)

分割キー数不正（１〜p_rdb_MXDCL）

p_rdb_RC_ERRCLST(-3)

分割キーのデータ型，データ長の領域不正

p_rdb_RC_ERRCTYP(-31)

分割キーのデータ型が不正

p_rdb_RC_ERRCLEN(-32)

分割キーのデータ長が不正

p_rdb_RC_ERRCSID(-33)

分割キーの文字集合IDが不正

p_rdb_RC_ERRDLST(-4)

データアドレスの領域不正

p_rdb_RC_ERRDADR(-41)

データアドレスが未設定

p_rdb_RC_ERRDLEN(-42)

ハッシュ関数がHASH3，HASHC，HASH4，HASHD，HASH5，又はHASHEの場合：データの実長が指定されたハッシュ関数でハッシング可能な最小長より短い

ハッシュ関数がHASH0又はHASHZで，分割キーのデータ型がCHAR型の場合：日付データの文字列表現形式が不正

p_rdb_RC_ERRNDIV(-5)

表の分割数不正（１〜p_rdb_MNCND）

p_rdb_RC_ERRRADR(-6)

分割条件指定順序，又は分割キー内通番の格納領域が未設定

p_rdb_RC_ERRNCSC(-7)

全角空白文字の領域が未設定

注意事項

注意事項を次に示します。

分割キーがNCHAR，NVARCHAR，MCHAR，又はMVARCHARの場合，flagsに空白変換レベルに対応した値を指定しないと，rdnoの値が不正になることがあります。

分割キーがNCHAR，NVARCHAR，MCHAR，又はMVARCHARで，かつ空白変換レベルに1，又は3を指定した場合，次に示すどちらかのことをしてください。

・setlocale関数でLC_CTYPEカテゴリ，又はLC_ALLカテゴリに適切なロケールを設定する

・p_rdb_set_lang関数を呼び出す

キー値の文字コード種別とsetlocale関数又はp_rdb_set_lang関数で指定したロケールが矛盾する場合，動作は保証されません。WindowsのUAP，文字コード種別がSJISのLinuxのUAP，又は文字コード種別がCHINESEのUAPからこの関数が呼び出される場合は，setlocale関数ではなくp_rdb_set_lang関数を使用します。p_rdb_set_lang関数については，「文字コード種別設定関数」を参照してください。

分割キー値がDECIMAL，INTERVAL YEAR TO DAY，又はINTERVAL HOUR TO SECONDの場合，flagsにDECIMAL型の符号正規化機能に対応した値を指定しないと，rdnoの値が不正になることがあります。

バージョン05-05より前のHiRDBクライアントで表分割ハッシュ関数を使用する場合，flagsの空白変換レベル，及びDECIMAL型の符号正規化機能は使用できません。したがって，flagsの指定は無効となり，空白変換レベル，及びDECIMAL型の符号正規化機能が省略時の場合と同じ動作になります。flagsの指定を有効にしたい場合，HiRDBサーバ側で実行するか，又はバージョン05-05以降のHiRDBクライアントで実行してください。

HiRDBサーバの文字コードがUnicode（UTF-8）の場合，この関数では空白変換をしません。dadlstに指定する分割キーの値は，事前に空白変換関数p_rdb_conv_space_utf8を使用して変換しておく必要があります。

文字集合にUTF16の指定がある場合，分割キーのデータはビッグエンディアン形式にする必要があります。ビッグエンディアンにしないと，rdnoの値が不正になるおそれがあります。

(4)　データ型とマクロ

(a)　ハッシュ関数コード

CREATE TABLE，又はALTER TABLEで指定するハッシュ関数に対応するハッシュ関数コードを次の表に示します。

表H‒5　ハッシュ関数に対応するハッシュ関数コード

ハッシュ関数名

ハッシュ関数コード（値）

HASH1（ハッシュ関数名省略時）

p_rdb_HASH1 (1)

HASH2

p_rdb_HASH2 (2)

HASH3

p_rdb_HASH3 (3)

HASH4

p_rdb_HASH4 (4)

HASH5

p_rdb_HASH5 (5)

HASH6

p_rdb_HASH6 (6)

HASHZ

p_rdb_HASHZ (99)

HASH0

p_rdb_HASH0 (100)

HASHA

p_rdb_HASHA(101)

HASHB

p_rdb_HASHB(102)

HASHC

p_rdb_HASHC(103)

HASHD

p_rdb_HASHD(104)

HASHE

p_rdb_HASHE(105)

HASHF

p_rdb_HASHF(106)

(b)　分割キーリスト

分割キーリストは，分割キーのデータ型コード，データ長コードから成る構造体で，分割キー数分連続する領域です。分割キーを設定する領域を次の表に示します。分割キーが複数ある場合，分割キーとして指定した列数分の配列にする必要があります。

表H‒6　分割キーを設定する領域

データ型

データ型の詳細

説明

p_rdb_collst_t

struct p_rdb_TG_collst {

unsigned short datatype ;

short datalen ;

} p_rdb_collst_t ;

データ型コード

データ長コード

データ型コード，データ長コードを次の表に示します。

表H‒7　データ型コード，データ長コード

データ型

データ型コード

データ長コード

INTERVAL YEAR TO DAY

PDSQL_YEARTODAY

8×256

INTERVAL HOUR TO SECOND

PDSQL_HOURTOSEC

6×256

DATE

PDSQL_DATE

4

TIME

PDSQL_TIME

3

TIMESTAMP[(p)]

PDSQL_TIMESTAMP

7＋↑p/2↑（pを省略した場合は0を仮定）

MVARCHAR(n)

PDSQL_MVARCHAR

n

MCHAR[(n)]

PDSQL_MCHAR

n(nを省略した場合は1を仮定)

NVARCHAR(n)

PDSQL_NVARCHAR

n

NCHAR[(n)]

PDSQL_NCHAR

n(nを省略した場合は１を仮定)

VARCHAR(n)

PDSQL_VARCHAR

n

CHAR[(n)]

PDSQL_CHAR

n(nを省略した場合は1を仮定)

FLOAT

PDSQL_FLOAT

8

SMALLFLT

PDSQL_SMALLFLT

4

DECIMAL[(p[,q])]

PDSQL_DECIMAL

p×256+q(pを省略した場合は15を仮定，qを省略した場合は0を仮定)

INTEGER

PDSQL_INTEGER

4

SMALLINT

PDSQL_SMALLINT

2

(c)　文字集合IDリスト

分割キーに文字集合の指定がある場合にだけ指定します。文字集合IDを設定する領域を次の表に示します。分割キーが複数ある場合，分割キーとして指定した列数分の配列にする必要があります。

表H‒8　文字集合IDを設定する領域

データ型

データ型の詳細

説明

p_rdb_csidlst_t

struct p_rdb_TG_csidlst {

int charset_id ;

} p_rdb_csidlst_t ;

文字集合IDコード

文字集合IDコードを次の表に示します。

表H‒9　文字集合IDコード

文字集合

文字集合IDコード（値）

文字集合の指定なし

p_rdb_CSDEF

(0x00000000)

EBCDIK

p_rdb_CSEBK

(0x01000004)

UTF16

p_rdb_CSU16

(0x11030004)

(d)　データアドレスリスト

データアドレスリストは，分割キーのデータを格納する領域へのアドレスから成る構造体で，分割キー数分連続する領域です。分割キーのデータアドレスを設定する領域を次の表に示します。分割キーが複数ある場合，分割キーとして指定した列数分の配列にする必要があります。

データ領域は，バイナリ形式で記述してください。バイナリ形式については，マニュアル「HiRDB コマンドリファレンス」を参照してください。

表H‒10　分割キーのデータアドレスを設定する領域

データ型

データ型の詳細

説明

p_rdb_dadlst_t

struct p_rdb_TG_dadlst {

unsigned char * dataaddr ;

} p_rdb_dadlst_t ;

データ領域へのアドレス

注意事項

すべてのデータ型共通の注意事項

データアドレスリストの実データは，列で定義したデータ型の形式に変換してください。

データアドレスリストの実データ領域は，特に境界調整をする必要はありません。

DECIMAL，INTERVAL YEAR TO DAY，又はINTERVAL HOUR TO SECONDの場合の注意事項

正の値の場合，データアドレスリストの実データの符号部は'C'，又は'F'を使用してください。なお，DECIMAL型の符号正規化機能にYを指定している場合は，'A'，及び'E'も使用できます。

負の値の場合，データアドレスリストの実データの符号部は'D'を使用してください。なお，DECIMAL型の符号正規化機能にYを指定している場合は，'B'も使用できます。

CHAR，NCHAR，又はMCHARの場合の注意事項

CHAR，MCHARの場合，データアドレスリストのデータ領域には，定義長まで1バイトの空白を埋めてください。

NCHARの場合，データアドレスリストのデータ領域には，定義長まで2バイトの空白を埋めてください。2バイトの空白は，HiRDBサーバのセットアップ時に指定した文字コードの空白を指定する必要があります。

データアドレスリストのデータ領域は，HiRDBサーバで使用する文字コードで指定する必要があります。

VARCHAR，NVARCHAR，又はMVARCHARの場合の注意事項

データアドレスリストのデータ領域の実長部分は，文字列長ではなくバイトで表してください。

データアドレスリストのデータ領域の実長が，分割キーリストの定義長に満たない場合，後続する文字列に空白を埋めないでください。

データアドレスリストのデータ領域は，HiRDBサーバで使用する文字コードで指定してください。

(e)　最大値に関するマクロ

最大値に関するマクロを次の表に示します。

表H‒11　最大値に関するマクロ

マクロ名

意味（値）

p_rdb_MXDCL

分割キーの列数の最大値（16）

p_rdb_MNCND

表の分割数の最大値（4096）

p_rdb_MNCND_0902

表の分割数の最大値（1024）

（バージョン07-02から09-02のHiRDBを使用する場合）

p_rdb_MNCND_0701

表の分割数の最大値（512）

（バージョン07-01までのHiRDBを使用する場合）

(5)　コーディング例

ハッシュ分割の場合の，C言語で記述した部分的なコーディング例を次に示します。このコーディング例を，ユーザの用途に合うようにカスタマイズして使用してください。ただし，SQL文実行時のエラー処理については記述していないので，必要に応じて記述するようにしてください。エラー処理については，「SQLのエラーの判定と処置」を参照してください。

(a)　宣言部

/*********************************************************************/
/* ALL RIGHTS RESERVED, COPYRIGHT (C) 1999,2000, HITACHI, LTD.       */
/* LICENSED MATERIAL OF HITACHI,LTD.                                 */
/* 表分割ハッシュ関数を使用したサンプルプログラム                    */
/*********************************************************************/
#include <stdio.h>
#include <string.h>
#include <pdbsqlda.h>
#include <pddbhash.h>

union data_area {                             /* データ格納領域      */
    short data_smallint ;
    int data_int ;
    unsigned char data_dec[15] ;
    float data_smallflt ;
    double data_float ;
    unsigned char data_char[255] ;
    struct {
        short length ;
        unsigned char data[255] ;
    } data_varchar ;
    unsigned char data_date[4] ;
    unsigned char data_time[3] ;
    unsigned char data_timestamp[10] ;
    unsigned char data_iytd[5] ;
    unsigned char data_ihts[4] ;
} ;

void print_data(short , p_rdb_collst_t * , union data_area *) ;

/*********************************************************************/
/* メイン関数                                                        */
/*********************************************************************/
int main(int argc , char *argv[])
{

  short           hashcode ;              /* ハッシュ関数コード   */
  short           ncol ;                  /* 分割キーの列数       */
  p_rdb_collst_t  collst[p_rdb_MXDCL] ;   /* 分割キーリスト       */
  p_rdb_csidlst_t csidlst[p_rdb_MXDCL] ;  /* 文字集合IDリスト※   */
  p_rdb_dadlst_t  dadlst[p_rdb_MXDCL] ;   /* データアドレスリスト */
  union data_area data[p_rdb_MXDCL] ;     /* データ格納領域       */
  unsigned int    ndiv ;                  /* 格納先RDエリア数    */
  unsigned char   ncspace[2] ;            /*各国文字スペースコード*/
  int             flags ;                 /* エンハンス用フラグ   */
  int             rdno ;                  /* 分割条件指定順序     */
  int             rc ;                    /* リターン値           */
  short           i, j, k ;               /* カウンタ用変数       */

  struct rdarea {                         /* RDエリアリスト       */
  int             rdareaid ;
  char            rdareaname[31] ;
  } rdarealst [p_rdb_MNCND] ;

  EXEC SQL BEGIN DECLARE SECTION ;
    struct {                       /* ハッシュ関数名の埋込み変数    */
      short length ;
      char data[9] ;
    } xhashname ;
    short xncol ;                 /* 分割キーの列数の埋込み変数     */
    short xndiv ;                 /* 表の分割数の埋込み変数         */
    short xdatatype ;             /* データ型コードの埋込み変数     */
    short xdatalen ;              /* データ長コードの埋込み変数     */
    int   xcharset_id ;           /* 文字集合IDコードの埋込み変数※  */
    struct {                      /* 格納先RDエリア名の埋込み変数  */
      short length ;
      char data[31] ;
    } xrdname ;
  EXEC SQL END DECLARE SECTION ;

  EXEC SQL CONNECT ;

注※　分割キーに文字集合の指定がある場合にだけ指定します。

(b)　データ格納領域，各国文字コードのスペースの設定

  for  (k = 0 ; k < p_rdb_MXDCL ; k ++) {
  dadlst[k].dataaddr = (unsigned char *)&data[k] ;
  }
  ncspace[0] = 0x81 ;                     /* スペースコード          */
  ncspace[1] = 0x40 ;                     /* シフトJIS漢字コードの例*/
  flags = 0 ;

(c)　flagsの設定

  /*******************************************************************/
  /* (a) 明示的に指定する場合                                        */
  /*     空白変換レベル１・DECIMAL型の符号正規化機能Ｙの場合        */
  /*******************************************************************/
  flags=p_rdb_FLG_SPLVL_1+p_rdb_FLG_DECNRM_Y;

(d)　ハッシュ関数名，分割キーの列数，格納先RDエリア数の設定

  /*******************************************************************/
  /* (a) コードで設定する場合                                        */
  /*******************************************************************/
  hashcode = p_rdb_HASH6 ;            /* HASH6を指定する場合       */
  ncol = 4 ;                          /* ４列で分割する場合         */
  ndiv = 6 ;                          /* ６分割する場合             */

  /*******************************************************************/
  /* (b) ディクショナリ表から検索する場合                            */
  /*******************************************************************/
  EXEC SQL
      select  HASH_NAME,
            value(N_DIV_COLUMN,1) ,
            N_RDAREA
          into  :xhashname , :xncol, :xndiv
          from MASTER.SQL_TABLES
          where TABLE_SCHEMA=USER
            and TABLE_NAME='TABLE1' ;

  xhashname.data[xhashname.length] = '¥0' ;
  if (strcmp(xhashname.data,"HASH1") == 0) {
      hashcode=p_rdb_HASH1 ;                         /* HASH1設定  */
  } else if (strcmp(xhashname.data,"HASH2") == 0) {
      hashcode=p_rdb_HASH2 ;                         /* HASH2設定  */
  } else if (strcmp(xhashname.data,"HASH3") == 0) {
      hashcode=p_rdb_HASH3 ;                         /* HASH3設定  */
  } else if (strcmp(xhashname.data,"HASH4") == 0) {
      hashcode=p_rdb_HASH4 ;                         /* HASH4設定  */
  } else if (strcmp(xhashname.data,"HASH5") == 0) {
      hashcode=p_rdb_HASH5 ;                         /* HASH5設定  */
  } else if (strcmp(xhashname.data,"HASH6") == 0) {
      hashcode=p_rdb_HASH6 ;                         /* HASH6設定  */
  } else if (strcmp(xhashname.data,"HASHZ") == 0) {
      hashcode=p_rdb_HASHZ ;                         /* HASHZ設定  */
  } else if (strcmp(xhashname.data,"HASH0") == 0) {
      hashcode=p_rdb_HASH0 ;                         /* HASH0設定  */
  } else if (strcmp(xhashname.data,"HASHA") == 0) {
      hashcode=p_rdb_HASHA ;                         /* HASHA設定  */
  } else if (strcmp(xhashname.data,"HASHB") == 0) {
      hashcode=p_rdb_HASHB ;                         /* HASHB設定  */
  } else if (strcmp(xhashname.data,"HASHC") == 0) {
      hashcode=p_rdb_HASHC ;                         /* HASHC設定  */
  } else if (strcmp(xhashname.data,"HASHD") == 0) {
      hashcode=p_rdb_HASHD ;                         /* HASHD設定  */
  } else if (strcmp(xhashname.data,"HASHE") == 0) {
      hashcode=p_rdb_HASHE ;                         /* HASHE設定  */
  } else if (strcmp(xhashname.data,"HASHF") == 0) {
      hashcode=p_rdb_HASHF ;                         /* HASHF設定  */
  } else {
      /* 将来，ハッシュ関数が追加になった時に追加する。             */
  }
  ncol = xncol ;
  ndiv = xndiv ;

  /* =========================================================== */
  /* 表定義情報表示                                              */
  /* =========================================================== */
  printf("ハッシュ関数コード：%d¥n",hashcode) ;
  printf("分割キーの列数    ：%d¥n",ncol) ;
  printf("表の分割数        ：%d¥n",ndiv) ;
  printf("¥n") ;

(e)　分割キーの指定順序，データ型コード，データ長コードの設定（分割キーに文字集合の指定がない場合）

  /******************************************************************/
  /* (a) コードで設定する場合                                       */
  /******************************************************************/
  collst[0].datatype=PDSQL_CHAR ;             /* CHAR(10)        */
  collst[0].datalen=10 ;
  collst[1].datatype=PDSQL_DECIMAL ;          /* DEC(5,2)        */
  collst[1].datalen=5*256+2 ;
  collst[2].datatype=PDSQL_SMALLINT ;         /* SMALLINT        */
  collst[2].datalen=2 ;
  collst[3].datatype=PDSQL_NVARCHAR ;         /* NVARCHAR(4)     */
  collst[3].datalen=4 ;

  /*******************************************************************/
  /* (b) ディクショナリ表から検索する場合                            */
  /*******************************************************************/
  EXEC SQL
      declare cr1 cursor for
          select  value(DIVCOL_ORDER,1) ,
                  DATA_TYPE_CODE,
                  DATA_LENGTH_CODE
          from MASTER.SQL_COLUMNS
          where TABLE_SCHEMA=USER
            and TABLE_NAME='TABLE1'
            and DIVIDED_KEY='Y'
          order by 1 asc ;

  EXEC SQL open cr1 ;
  EXEC SQL whenever not found goto fetch_end1 ;

  for  (i = 0 ; ; i++) {
      EXEC SQL fetch cr1 into :xncol , : xdatatype , : xdatalen ;
      collst[i].datatype = xdatatype ;
      collst[i].datalen = xdatalen ;
  }

  fetch_end1 :
  EXEC SQL close cr1 ;

(f)　分割キーの指定順序，データ型コード，データ長コード，文字集合IDの設定（分割キーに文字集合の指定がある場合）

  /*******************************************************************/
  /* (a) コードで設定する場合                                        */
  /*******************************************************************/
  collst[0].datatype=PDSQL_CHAR ;         /* CHAR(10)              */
  collst[0].datalen=10 ;
  csidlst[0].charset_id=p_rdb_CSEBK ;     /* CHARACTER SET EBCDIK  */
  collst[1].datatype=PDSQL_DECIMAL ;      /* DEC(5,2)              */
  collst[1].datalen=5*256+2 ;
  csidlst[1].charset_id=p_rdb_CSDEF ;
  collst[2].datatype=PDSQL_SMALLINT ;     /* SMALLINT              */
  collst[2].datalen=2 ;
  csidlst[2].charset_id=p_rdb_CSDEF ;
  collst[3].datatype=PDSQL_NVARCHAR ;     /* NVARCHAR(4)           */
  collst[3].datalen=4 ;
  csidlst[3].charset_id=p_rdb_CSDEF ;

  /*******************************************************************/
  /* (b) ディクショナリ表から検索する場合                            */
  /*******************************************************************/
  EXEC SQL
      declare cr1_cs cursor for
          select  value(DIVCOL_ORDER,1),
                  DATA_TYPE_CODE,
                  DATA_LENGTH_CODE,
                  value(CHARSET_ID,0)
             from MASTER.SQL_COLUMNS
            where TABLE_SCHEMA=USER
              and TABLE_NAME='TABLE1'
              and DIVIDED_KEY='Y'
            order by 1 asc ;

  EXEC SQL open cr1_cs ;
  EXEC SQL whenever not found goto fetch_end1_cs ;

  for  (i = 0 ; ; i++) {
       EXEC SQL fetch cr1_cs into :xncol , : xdatatype , : xdatalen, :xcharset_id ;
       collst[i].datatype = xdatatype ;
       collst[i].datalen = xdatalen ;
       csidlst[i].charset_id = xcharset_id ;
  }

  fetch_end1_cs :
  EXEC SQL close cr1_cs ;

(g)　格納先RDエリア名の設定

  /*******************************************************************/
  /* ディクショナリ表から検索する場合                                */
  /*******************************************************************/
  EXEC SQL
      declare cr2 cursor for
          select RDAREA_NAME
              from MASTER.SQL_DIV_TABLE
              where TABLE_SCHEMA=USER
                and TABLE_NAME='TABLE1'
              order by DIV_NO asc ;

  EXEC SQL open cr2 ;
  EXEC SQL whenever not found goto fetch_end2 ;

  for (j = 0 ; ; j++) {
      EXEC SQL fetch cr2 into :xrdname ;
      strncpy(rdarealst[j].rdareaname,
              xrdname.data,
              xrdname.length) ;
      rdarealst[j].rdareaname[xrdname.length] = '¥0' ;
  }

  fetch_end2 :
  EXEC SQL close cr2 ;

  EXEC SQL DISCONNECT ;

  /* =========================================================== */
  /* ＲＤエリア情報表示                                          */
  /* =========================================================== */
  printf("ＲＤエリア名：[")  ;
  for (j = 0 ; j<ndiv ; j++) {
      printf("%s",rdarealst[j].rdareaname) ;
      if (j != ndiv-1) {
               printf(",") ;
      } else ;
  }
  printf("]¥n") ;
  printf("¥n") ;

(h)　分割キーに格納するデータ設定

  /*******************************************************************/
  /* バイナリ形式で代入する。                                        */
  /*  行ごとにデータを設定してハッシュ関数を呼ぶ                     */
  /*******************************************************************/
  memcpy((char *)data[0].data_char,"abcdefg   ",10); /* "abcdefg   " */

  data[1].data_dec[0] = 0x04 ;
  data[1].data_dec[1] = 0x32 ;
  data[1].data_dec[2] = 0x1D ;                   /* -43.21       */

  data[2].data_smallint = 12345 ;                /* 12345        */

  /* NCHAR,NVARCHARは，HiRDBサーバの文字コードで指定する。   */
  data[3].data_varchar.length = 6 ;
  data[3].data_varchar.data[0] = 0x82 ;    /* あ                      */
  data[3].data_varchar.data[1] = 0xa0 ;    /* シフトJIS漢字コードの例*/
  data[3].data_varchar.data[2] = 0x82 ;    /* い                      */
  data[3].data_varchar.data[3] = 0xa2 ;    /* シフトJIS漢字コードの例*/
  data[3].data_varchar.data[4] = 0x82 ;    /* う                      */
  data[3].data_varchar.data[5] = 0xa4 ;    /* シフトJIS漢字コードの例*/

  /* =========================================================== */
  /* データ型コード，データ長コード，データ領域表示              */
  /* =========================================================== */
  print_data(ncol , collst , data) ;

  /* =========================================================== */
  /* ハッシュ関数コール                                          */
  /* =========================================================== */
  rc = p_rdb_dbhash(hashcode,ncol,collst,dadlst,ndiv,ncspace,flags,&rdno);

  switch (rc) {
  case p_rdb_RC_RTRN :
    /*****************************************************************/
    /* 正常処理                                                      */
    /*****************************************************************/
    printf("分割条件指定順序 ： %d -> %s¥n",
           rdno,rdarealst[rdno-1].rdareaname) ;
    break ;
  default :
    /*****************************************************************/
    /* エラー処理を追加する                                          */
    /*****************************************************************/
    printf("RETURN CODE=%d¥n",rc) ;
    break ;
  }

  return ;
}

/*********************************************************************/
/* データ型コード，データ長コード，データ領域表示関数                */
/*********************************************************************/
void print_data( short           ncol ,
                 p_rdb_collst_t  *pcollst ,
                 union data_area *pdata )
{
  int i , j ;                                   /*  カウンタ用変数  */
  int len;
  p_rdb_collst_t   *ccollst ;
  union data_area  *cdata ;

  printf("分割キー指定順序 データ型コード データ長コード バイナリ形式のデータ値¥n") ;
  for  (i = 0 , ccollst = pcollst , cdata = pdata ;
        i<ncol ;
        i++ , ccollst++ , cdata++) {
      printf("             %2d         %#.4x         %#.4x  ",
              i+1,ccollst->datatype, ccollst->datalen) ;

    switch (ccollst->datatype) {
      case PDSQL_CHAR :
      case PDSQL_MCHAR :
      case PDSQL_INTEGER :
      case PDSQL_SMALLFLT :
      case PDSQL_FLOAT :
      case PDSQL_SMALLINT :
      case PDSQL_DATE :
      case PDSQL_TIME :
      case PDSQL_TIMESTAMP :
          len=ccollst->datalen ;
          break ;
      case PDSQL_VARCHAR :
      case PDSQL_MVARCHAR :
      case PDSQL_NVARCHAR :
          len=cdata->data_varchar.length+2 ;
          break ;
      case PDSQL_NCHAR :
          len=ccollst->datalen*2 ;
          break ;
      case PDSQL_DECIMAL :
      case PDSQL_YEARTODAY :
      case PDSQL_HOURTOSEC :
          len=ccollst->datalen/256/2+1 ;
          break ;
      default :
          break ;
      }
      for (j=0 ; j<len ;j++){
          printf("%.2X",cdata->data_char[j]) ;
      }
      printf("¥n") ;
  }
  printf("¥n") ;
return ;
}

(i)　HP-UX，シフトJIS漢字コードの場合の実行結果

ハッシュ関数コード：6
分割キーの列数    ：4
表の分割数        ：6

ＲＤエリア名：[RU01,RU02,RU03,RU04,RU05,RU06]

分割キー指定順序 データ型コード データ長コード バイナリ形式のデータ値
              1         0x00c4         0x000a  61626364656667202020
              2         0x00e4         0x0502  04321D
              3         0x00f4         0x0002  3039
              4         0x00b0         0x0004  000682A082A282A4

分割条件指定順序 ： 1 -> RU01

(6)　ディクショナリ表からの検索（ハッシュ分割の場合）

ハッシュ分割の場合の，ディクショナリ表からの検索例を次に示します。

(a)　ハッシュ分割表のハッシュ関数名，分割キーの列数，表の分割数の取得

SELECT HASH_NAME,                        /*ハッシュ関数名   */
       VALUE(N_DIV_COLUMN,1),            /*分割キーの列数   */
       N_RDAREA                          /*表の分割数       */
    FROM MASTER.SQL_TABLES
      WHERE TABLE_SCHEMA=認可識別子      /*認可識別子が一致するもの */
        AND TABLE_NAME=表識別子          /*表識別子が一致するもの   */

(b)　分割キー指定順序とデータ型コード，データ長コードの取得（分割キーに文字集合の指定がない場合）

SELECT VALUE(DIVCOL_ORDER,1),           /*分割キー指定順序  */
       DATA_TYPE_CODE,                  /*データ型コード    */
       DATA_LENGTH_CODE                 /*データ長コード    */
    FROM MASTER.SQL_COLUMNS
      WHERE TABLE_SCHEMA=認可識別子     /*認可識別子が一致するもの */
        AND TABLE_NAME=表識別子         /*表識別子が一致するもの   */
        AND DIVIDED_KEY='Y'             /*分割キーのもの           */
    ORDER BY 1 ASC

(c)　分割キー指定順序とデータ型コード，データ長コード，文字集合IDコードの取得（分割キーに文字集合の指定がある場合）

SELECT VALUE(DIVCOL_ORDER,1),            /*分割キー指定順序   */
     DATA_TYPE_CODE,                     /*データ型コード     */
     DATA_LENGTH_CODE,                   /*データ長コード     */
     VALUE(CHARSET_ID,0)                 /*文字集合IDコード  */
   FROM MASTER.SQL_COLUMNS
     WHERE TABLE_SCHEMA=認可識別子       /*認可識別子が一致するもの */
       AND TABLE_NAME=表識別子           /*表識別子が一致するもの   */
       AND DIVIDED_KEY='Y'               /*分割キーのもの           */
   ORDER BY 1 ASC

(d)　格納先RDエリア名の取得

SELECT  DIV_NO,                       /*分割条件指定順序    */
        RDAREA_NAME                   /*格納先RDエリア名   */
    FROM MASTER.SQL_DIV_TABLE
      WHERE TABLE_SCHEMA=認可識別子   /*認可識別子が一致するもの */
        AND TABLE_NAME=表識別子       /*表識別子が一致するもの   */
    ORDER BY 1 ASC

(7)　ディクショナリ表からの検索（マトリクス分割の場合）

マトリクス分割の場合の，ディクショナリ表からの検索例を次に示します。

(a)　ハッシュ分割表のハッシュ関数名，分割キーの列数，分割キー番号，表の分割数の取得

ハッシュ関数名と分割キーの列数の取得

select HASH_NAME,                    /*ハッシュ関数名          */
      value(N_DIV_COLUMN,1),         /*分割キーの列数          */
      KEY_NO                         /*分割キー番号            */
 from MASTER.SQL_DIV_TYPE
     where TABLE_SCHEMA=認可識別子   /*認可識別子が一致するもの*/
       and TABLE_NAME=表識別子       /*表識別子が一致するもの  */

キー内分割数の取得

select distinct N_DIVISION           /*キー内分割数            */
from MASTER.SQL_PARTKEY
     where TABLE_SCHEMA=認可識別子   /*認可識別子が一致するもの*/
       and TABLE_NAME=表識別子       /*表識別子が一致するもの  */
       and KEY_NO=分割キー番号       /*ハッシュ分割の          */
                                     /*分割キー番号を設定する  */

(b)　分割キー指定順序とデータ型コード，データ長コードの取得（分割キーに文字集合の指定がない場合）

select DIVCOL_ORDER,                      /*キー内分割数            */
       DATA_TYPE_CODE,                    /*データ型コード          */
       DATA_LENGTH_CODE                   /*データ長コード          */
 from MASTER.SQL_COLUMNS X,
      MASTER.SQL_PARTKEY Y
     where X.TABLE_SCHEMA=Y.TABLE_SCHEMA
       and X.TABLE_NAME=Y.TABLE_NAME
       and X.COLUMN_ID=Y.COLUMN_ID
       and Y.TABLE_SCHEMA=認可識別子      /*認可識別子が一致するもの*/
       and Y.TABLE_NAME=表識別子          /*表識別子が一致するもの  */
       and Y.KEY_NO=分割キー番号          /*ハッシュ分割の          */
                                          /*分割キー番号を設定する  */
  order by DIVCOL_ORDER asc

(c)　分割キー指定順序とデータ型コード，データ長コード，文字集合IDの取得（分割キーに文字集合の指定がある場合）

select DIVCOL_ORDER,                      /*キー内分割数            */
      DATA_TYPE_CODE,                     /*データ型コード          */
      DATA_LENGTH_CODE,                   /*データ長コード          */
      value(CHARSET_ID,0)                 /*文字集合IDコード       */
 from MASTER.SQL_COLUMNS X,
      MASTER.SQL_PARTKEY Y
     where X.TABLE_SCHEMA=Y.TABLE_SCHEMA
       and X.TABLE_NAME=Y.TABLE_NAME
       and X.COLUMN_ID=Y.COLUMN_ID
       and Y.TABLE_SCHEMA=認可識別子     /*認可識別子が一致するもの */
       and Y.TABLE_NAME=表識別子         /*表識別子が一致するもの   */
       and Y.KEY_NO=分割キー番号         /*ハッシュ分割の           */
                                         /*分割キー番号を設定する   */
  order by DIVCOL_ORDER asc

(d)　格納先RDエリア名の取得

select DIV_NO,                       /*分割条件指定順序        */
      RDAREA_NAME                    /*格納先RDエリア名       */
 from MASTER.SQL_DIV_TABLE
     where TABLE_SCHEMA=認可識別子   /*認可識別子が一致するもの*/
       and TABLE_NAME=表識別子       /*表識別子が一致するもの  */
       order by 1 asc

注

分割条件指定順序は，分割キー内通番から求められます。式を次に示します。

N×m−(N−n)
　N:第2次元の分割数
　m:第1分割キーの分割キー内通番
　n:第2分割キーの分割キー内通番

付録H.2　空白変換関数

空白変換関数とは，文字列中の半角空白を全角空白に，又は全角空白を半角空白に変換する関数です。文字列データをデータベースに格納しなくても（空白変換レベルを指定してデータベースに格納してなくても），変換結果が分かるので，次のような場合に使用すると有効です。

表をキーレンジ分割するための分割キーを決定するときに，格納するデータが均等に分割されるかどうかを評価する場合

データベース作成ユティリティで，キーレンジ分割した表へRDエリア単位に並列にデータロードする場合，RDエリアごとに入力データファイルを作成する場合

空白変換関数を使用する場合の前提条件

表分割ハッシュ関数と同じです。詳細については，「表分割ハッシュ関数を使用する場合の前提条件」を参照してください。

空白変換関数を使用したUAPの作成，実行

表分割ハッシュ関数と同じです。詳細については，「表分割ハッシュ関数を使用したUAPの作成，実行」を参照してください。

(1)　空白変換関数の詳細

(a)　記述構成

記述構成については，「記述構成」を参照してください。

(b)　空白変換関数（p_rdb_conv_space）

機能

指定した変換種別に従って，次のように空白変換をします。

半角空白→全角空白の場合：

文字列中の半角空白2バイトを全角空白1文字に変換します。

全角空白→半角空白の場合：

文字列中の全角空白1文字を半角空白2バイトに変換します。

srcpが示す文字列中の空白文字に対して変換処理をします。変換結果はdestpに格納されます。

引数stype，flagsの組み合わせと変換内容を次に示します。

stype（データ型）

flags（変換種別）

半角空白→全角空白

全角空白→半角空白

NCHAR

先頭から2バイトずつチェックをして，半角空白が二つ連続であった場合，全角空白※に変換します。

この場合，半角空白が1文字だけある場合は変換しません。

先頭から2バイトずつチェックをして，全角空白※があった場合に半角空白に変換します。

NVARCHAR

MCHAR

エラーになります。

先頭から文字コードを意識してチェックし，全角空白※があった場合に半角空白に変換します。

MVARCHAR

注※　引数ncspaceで指定した値を全角空白の文字コードとして扱います。

ヘッダファイル

#include<pdauxcnv.h>

空白変換機能を使用する場合に必ず指定します。

#include<pdbsqlda.h>

データ型コードを設定する場合，マクロ（PDSQL_で始まる名称のマクロ）を使用するときに指定します。ディクショナリ表からデータ型コードを検索して設定する場合には必要ありません。

形式

  int p_rdb_conv_space(char            *srcp,
                       unsigned char   stype,
                       unsigned int    srcl,
                       char            *destp,
                       unsigned char   ncspace[2],
                       int             flags);

引数

srcp（入力）

文字列格納領域の先頭アドレスを指定します。

stype（入力）

変換前のデータ型を指定します。指定できるデータ型を次に示します。

マクロ名

データ型

PDSQL_NCHAR

NCHAR

PDSQL_NVARCHAR

NVARCHAR

PDSQL_MCHAR

MCHAR

PDSQL_MVARCHAR

MVARCHAR

srcl（入力）

srcpで指定した文字列の長さを指定します。可変長文字列の場合は，実際にsrcpが示す領域に格納されている文字列の長さ（単位：バイト）を指定します。

destp（出力）

変換後の文字列格納領域の先頭アドレスが設定されます。destpが示す領域は空白変換関数の呼び出し側で確保してください。

ncspace（入力）

HiRDBサーバで使用する各国文字コードの全角空白文字を，2バイトの領域で指定します。ncspaceに指定する全角空白文字については，表「ncspaceに指定する全角空白文字」を参照してください。

flags（入力）

変換種別を指定します。変換種別を次に示します。

マクロ名

変換種別

p_rdb_HALF_TO_FULL_SPACE

半角空白→全角空白

p_rdb_FULL_TO_HALF_SPACE

全角空白→半角空白

戻り値

データ型：int

p_rdb_RC_RTRN(0)

正常終了

p_rdb_RC_ERRINVF(-8)

flags引数不正

p_rdb_RC_ERRTYPC(-9)

データ型不正

注意事項

注意事項を次に示します。

全角空白→半角空白の空白変換は，OSが提供する母国語サポート機能（NLS）を使用して実現しています。したがって，空白変換関数を呼び出す前に，setlocale関数でLC_CTYPEカテゴリ，又はLC_ALLカテゴリに適切なロケールを設定しておく必要があります。また，WindowsのUAP，文字コード種別がSJISのLinuxのUAP，又は文字コード種別がCHINESEのUAPの場合は，空白変換関数を呼び出す前に，p_rdb_set_lang関数を呼び出す必要があります。p_rdb_set_lang関数については，「文字コード種別設定関数」を参照してください。

引数srcpが示す文字列の文字コード種別と，setlocale関数又はp_rdb_set_lang関数で指定したロケールが矛盾する場合，動作の保証はされません。

データの入力領域と出力領域が同一の場合，又は出力領域が入力領域の前にあり，出力領域の後半部と入力領域の前半部が重複している場合は，動作は保証されます。

文字列の長さに関するエラーチェックはしないので，srclには妥当な値を設定しておく必要があります。

半角空白の文字コードは0x20，全角空白の文字コードは引数ncspaceに設定した文字コードを使用します。

入力に設定できるデータ型は，NCHAR，NVARCHAR，MCHAR，及びMVARCHARです。

可変長文字列の場合は，変換する文字列の長さとしてsrclを参照します。また，srclには実長部を除いた長さを指定してください。

可変長文字列の実長部は，空白変換後でも変わりません。

文字コード種別がUnicodeの場合，この関数の動作は保証されません。文字コード種別がUnicodeの場合はp_rdb_conv_space_utf8を使用してください。p_rdb_conv_space_utf8については，「空白変換関数（p_rdb_conv_space_utf8）」を参照してください。

(c)　空白変換関数（p_rdb_conv_space_utf8）

機能

文字コードがUnicode（UTF-8）の場合に，全角空白を半角空白に変換する関数です。文字列中の全角空白1文字を半角空白2文字に変換します。

srcpが示す文字列中の空白文字に対して変換処理をします。変換結果はdestpに格納され，変換後の文字列の長さがdestlに格納されます。

引数stype，flagsの組み合わせと変換内容を次に示します。

stype（データ型）

flags（変換種別）

半角空白→全角空白

全角空白→半角空白

MCHAR

エラーになります。

先頭から文字コードを意識してチェックし，全角空白※があった場合に半角空白に変換します。

MVARCHAR

注※　0xE38080を全角空白の文字コードとして扱います。

ヘッダファイル

#include <pdauxcnv.h>

空白変換関数を使用する場合に必ず指定する。

#include <pdbsqlda.h>

データ型コードを設定する場合，マクロ（PDSQL_で始まるマクロ）を使用して設定するときに指定します。ディクショナリ表からデータ型コードを検索して設定する場合には必要ありません。

形式

  int p_rdb_conv_space_utf8(char       *srcp,
                   unsigned char       stype,
                   unsigned int        srcl,
                   char                *destp,
                   unsigned int        *destl,
                   int                 flags) ;

引数

srcp（入力）

文字列格納領域の先頭アドレスを指定します。

stype（入力）

変換前のデータ型を指定します。指定できるデータ型を次に示します。

マクロ名

データ型

PDSQL_MCHAR

MCHAR

PDSQL_MVARCHAR

MVARCHAR

srcl（入力）

srcpで指定した文字列の長さを指定します。可変長文字列の場合は，実際にsrcpが示す領域に格納されている文字列の長さ（単位：バイト）を指定します。

destp（出力）

変換後の文字列格納領域の先頭アドレスが設定されます。destpが示す領域は空白変換関数の呼び出し側で確保してください。

destl（出力）

destpで指定した文字列の長さが設定されます。可変長文字列の場合は，実際にdestpが示す領域に格納されている文字列の長さ（単位：バイト）が設定されます。

flags（入力）

変換種別を指定します。変換種別を次に示します。

マクロ名

変換種別

p_rdb_FULL_TO_HALF_SPACE

全角空白→半角空白

戻り値

データ型：int

p_rdb_RC_RTRN(0)

正常終了

p_rdb_RC_ERRINVF(-8)

flags引数不正

p_rdb_RC_ERRTYPC(-9)

データ型不正

注意事項

この関数は，Unicode（UTF-8）専用の空白変換関数です。

この関数を呼び出す前に，必ず引数langにUTF8を設定してp_rdb_set_lang関数を呼び出してください。p_rdb_set_lang関数については，「文字コード種別設定関数」を参照してください。

データの入力領域と出力領域が同一の場合，又は出力領域が入力領域の前にあり，出力領域の後半部と入力領域の前半部が重複している場合は，動作が保証されます。

文字列の長さに関するエラーチェックはされないため，srclには妥当な値を入れておく必要があります。

半角空白コードは0x20，全角空白コードは0xE38080を使用します。

入力に設定できるデータ型は，MCHAR及びMVARCHARです。

可変長文字列の場合，変換する文字列の長さとしてsrclを参照します。また，srclには実長部を除いた長さを指定してください。

空白変換がされると，全角空白1文字（3バイト）が半角空白2文字（2バイト）に変換されるため，変換後の文字列の長さは変換前の文字列の長さより短くなります。

可変長文字列の場合，変換後の文字列格納領域の実長部には，変換後のデータの長さが設定されます。

変換後の文字列格納領域内のデータは，destlの長さ分だけ保証されます。

Unicode（UTF-8）以外の文字コードで，この関数を呼び出した場合の動作は保証されません。

付録H.3　DECIMAL型符号正規化関数

DECIMAL型符号正規化関数とは，DECIMAL型データの符号をX'C'，又はX'D'に統一（値が0の場合はX'C'に統一）する関数です。DECIMAL型データをデータベースに格納しなくても符号を正規化した結果が分かるので，次のような場合に使用すると有効です。

システム定義pd_dec_sign_normalize=Yの場合，表をキーレンジ分割するための分割キーを決定するときに，格納するデータが均等に分割されるかどうかを評価する場合

システム定義pd_dec_sign_normalize=Yの場合，データベース作成ユティリティで，キーレンジ分割した表へRDエリア単位に並列にデータロードする場合，RDエリアごとに入力データファイルを作成する場合

DECIMAL型符号正規化関数を使用する場合の前提条件

表分割ハッシュ関数と同じです。詳細については，「表分割ハッシュ関数を使用する場合の前提条件」を参照してください。

DECIMAL型符号正規化関数を使用したUAPの作成，実行

表分割ハッシュ関数と同じです。詳細については，「表分割ハッシュ関数を使用したUAPの作成，実行」を参照してください。

(1)　DECIMAL型符号正規化関数の詳細

(a)　記述構成

記述構成については，「記述構成」を参照してください。

(b)　DECIMAL型符号正規化関数（p_rdb_dec_sign_norm）

機能

DECIMAL型データの符号を正規化します。

srcpが示すDECIMAL型データの符号部を，次のように正規化します。

正規化前

正規化後

X'A'

X'C'

X'B'

X'D'※

X'C'

X'C'

X'D'

X'D'※

X'E'

X'C'

X'F'

X'C'

X'0'〜X'9'

エラー

注※　データの絶対値が0の場合，符号部はX'C'に統一されます。

ヘッダファイル

#include<pdauxcnv.h>

DECIMAL型符号正規化関数を使用する場合に必ず指定します。

形式

  int p_rdb_dec_sign_norm(unsigned char   *srcp,
                          short           srcl,
                          unsigned char   *destp);

引数

srcp（入力）

正規化するDECIMAL型データの先頭アドレスを指定します。

srcl（入力）

引数srcpが示すDECIMALデータのデータ長コードを指定します。指定できるデータ長コードを次に示します。

データ型

データ長コード

INTERVAL YEAR TO DAY

8×256

INTERVAL HOUR TO SECOND

6×256

DECIMAL[(p[,q])]

p×256＋q

（pを省略した場合は15を仮定，qを省略した場合は0を仮定）

destp（出力）

正規化後のDECIMAL型データが格納されます。destpが示す領域はDECIMAL型符号正規化関数の呼び出し側で確保してください。

戻り値

データ型：int

p_rdb_RC_RTRN(0)

正常終了

p_rdb_RC_ERRDFRM(-12)

データの符号部が不正

注意事項

DECIMAL型データの符号部以外はエラーチェックされません。したがって，不正なDECIMAL型データの場合，又は引数srclで設定したデータ長コードがDECIMAL型データと矛盾する場合は，動作は保証されません。

データの入力領域と出力領域が同一の場合，又は出力領域が入力領域の前にあり，出力領域の後半部と入力領域の前半部が重複している場合は，動作は保証されます。

付録H.4　文字コード種別設定関数

文字コード種別設定関数とは，表分割ハッシュ関数，及び空白変換関数に対して，UAPから文字コード種別を通知するために使用する関数です。

この関数で文字コードの種別を設定すると，表分割ハッシュ関数，及び空白変換関数など，文字コード種別に依存する処理が実行できます。

文字コード種別設定関数を使用する場合の前提条件

表分割ハッシュ関数と同じです。詳細については，「表分割ハッシュ関数を使用する場合の前提条件」を参照してください。

文字コード種別設定関数を使用したUAPの作成，実行

表分割ハッシュ関数と同じです。詳細については，「表分割ハッシュ関数を使用したUAPの作成，実行」を参照してください。

(1)　文字コード種別設定関数の詳細

(a)　記述構成

記述構成については，「記述構成」を参照してください。

(b)　文字コード種別設定関数p_rdb_set_lang

機能

表分割ハッシュ関数，及び空白変換関数が扱う文字コードの種別を設定します。

ヘッダファイル

#include<pdauxcnv.h>

文字コード種別設定関数を使用する場合に必ず指定します。

形式

  int p_rdb_set_lang(char *lang);

引数

lang（入力）

表分割ハッシュ関数，及び空白変換関数が扱う文字コードの種別を設定します。

この引数には，次の文字コードが指定できます。

文字コード種別

引数langの指定値

シフトJIS漢字コード※１

"SJIS"

EUC中国語漢字コード

"CHINESE"

単一バイト文字コード※２

"C"

Unicode（UTF-8）

"UTF8"

Unicode（IVS対応UTF-8）

"UTF8"

中国語漢字コード（GB18030）

"GB18030"

注※1　Linux，及びWindowsの場合に指定できます。

注※2　Windowsの場合に指定できます。

空の文字列を指定した場合（例：p_rdb_set_lang ("")），次のような動作となります。

UNIX環境の場合

この関数の前に実行したsetlocale関数で，LC_ALLカテゴリに設定したロケールに対応する文字コード種別が設定されます。setlocale関数を実行していない場合は，LC_ALLカテゴリのデフォルトのロケールに対応する文字コード種別が設定されます。

Windows環境の場合

OSのデフォルトとなる文字コード種別が設定されます。ただし，OSのデフォルトを上記の表以外の文字コード種別に設定している場合は，動作が保証されません。

戻り値

データ型：int

p_rdb_RC_RTRN(0)

正常終了

p_rdb_RC_ERRIVLG(-10)

文字コード種別不正

注意事項

p_rdb_set_langは，次のどれかに該当する場合，必ず実行してください。

・Windows環境のUAPで文字コード種別を設定するとき

・UNIX環境のUAPでp_rdb_conv_space_utf8を呼び出すとき※

・Linux環境のUAPで，文字コード種別をSJISに設定するとき

・UNIX環境のUAPで，文字コード種別をCHINESEに設定するとき

注※

p_rdb_conv_space_utf8を呼び出す前にp_rdb_set_langを実行してください。ただし，空白変換関数p_rdb_conv_spaceを呼び出す場合は，この関数ではなく，OS提供の関数setlocaleを使用してください。

UNIX環境の場合，この関数で文字コード種別を設定した後に，使用できない文字コード種別を使用して別の関数を使用するときは，p_rdb_set_lang("")を発行してから，setlocale関数を呼び出して適切な文字コード種別を設定し直す必要があります。

付録I　エスケープ句で指定できるスカラ関数

エスケープ句で指定できるスカラ関数を次の表に示します。

表I‒1　エスケープ句で指定できるスカラ関数

スカラ関数

スカラ関数の標準形式

形式変換※1

Type2

Type4

Type4（XDM/RD E2接続）

数学関数

ABS(number)

無

無

無

ACOS(float)

無

MASTER.ACOS(float)

無

ASIN(float)

無

MASTER.ASIN(float)

無

ATAN(float)

無

MASTER.ATAN(float)

無

ATAN2(float1, float2)

無

MASTER.ATAN2(float1, float2)

無

CEILING(number)※2

CEIL(number)

08-02

MASTER.CEIL(number)

無

COS(float)

無

MASTER.COS(float)

無

COT(float)※3，※4

無

無

無

DEGREES(number)

無

MASTER.DEGREES(number)

無

EXP(float)

無

MASTER.EXP(float)

無

FLOOR(number)

無

MASTER.FLOOR(number)

無

LOG(float)※2

LN(float)

08-02

MASTER.LN(float)

LN(float)

LOG10(float)

無

MASTER.LOG10(float)

無

MOD(integer1, integer2)

無

無

無

PI()

無

MASTER.PI()

無

POWER(number, power)

無

MASTER.POWER(number, power)

無

RADIANS(number)

無

MASTER.RADIANS(number)

無

RAND(integer)※3，※4

無

無

無

ROUND(number, places)

無

MASTER.ROUND(number, places)

無

SIGN(number)

無

MASTER.SIGN(number)

無

SIN(float)

無

MASTER.SIN(float)

無

SQRT(float)

無

MASTER.SQRT(float)

無

TAN(float)

無

MASTER.TAN(float)

無

TRUNCATE(number, places)※2

TRUNC(number, places)

08-02

MASTER.TRUNC(number, places)

無

文字列関数

ASCII(string)

無

MASTER.ASCII(string)

無

BIT_LENGTH(string)※3

無

無

無

CHAR(code)※2

CHR(code)

08-02

MASTER.CHR(code)

無

CHAR〔ACTER〕_LENGTH(string)※3

無

無

無

CONCAT(string1, string2)※3

無

無

無

DIFFERENCE(string1, string2)※3

無

無

無

INSERT(string1, start, length, string2)※2

INSERTSTR(string1, start, length, string2)

08-02

MASTER.INSERTSTR(string1, start, length, string2)

無

LCASE(string)※2

LOWER(string)

08-02

同左

同左

LEFT(string, count)※2

LEFTSTR(string, count)

08-02

MASTER.LEFTSTR(string, count)

無

LENGTH(string)

無

無

無

LOCATE(string1, string2〔, start〕)※2

POSITION(string1 IN string2 〔FROM start〕)

08-02

同左

同左

LTRIM(string)

無

MASTER.LTRIM(string)

TRIM(LEADING FROM string)

OCTET_LENGTH(string)※3

無

無

無

POSITION(character IN character)

無

無

無

REPEAT(string, count)※3

無

無

無

REPLACE(string1, string2, string3)

無

MASTER.REPLACE(string1, string2, string3)

無

RIGHT(string, count)※2

RIGHTSTR(string, count)

08-02

MASTER.RIGHTSTR(string, count)

無

RTRIM(string)

無

MASTER.RTRIM(string)

TRIM(TRAILING FROM string)

SOUNDEX(string)※3

無

無

無

SPACE(count)※3

無

無

無

SUBSTRING(string, start, length)※2

SUBSTR(string, start, length)

同左

同左

UCASE(string)※2

UPPER(string)

同左

同左

時刻と日付の関数

CURDATE()※2

CURRENT DATE

同左

同左

CURRENT_DATE()※2

CURRENT DATE

同左

同左

CURTIME()※2

CURRENT TIME

同左

同左

CURRENT_TIME

無

無

無

CURRENT_TIME(time-precision)※2，※5

引数time-precisionは，戻り値の小数秒の精度を指定する。

CURRENT TIME

08-02

同左

無

CURRENT_TIMESTAMP[(timestamp-precision)]

引数timestamp-precisionは，返されるタイムスタンプの小数秒の精度を指定する。

無

無

無

DAYNAME(date)

無

MASTER.DAYNAME(date)

無

DAYOFMONTH(date)※3

無

無

無

DAYOFWEEK(date)

無

MASTER.DAYOFWEEK(date)

無

DAYOFYEAR(date)

無

MASTER.DAYOFYEAR(date)

無

EXTRACT(extract-field FROM extract-source)※3

無

無

無

HOUR(time)

無

無

無

MINUTE(time)

無

無

無

MONTH(time)

無

無

無

MONTHNAME(date)

無

MASTER.MONTHNAME(date)

無

NOW()※2

CURRENT TIMESTAMP(6)

08-02

同左

同左

QUARTER(date)

無

MASTER.QUARTER(date)

無

SECOND(time)

無

無

無

TIMESTAMPADD(interval, count, timestamp)※3

無

無

無

TIMESTAMPDIFF(interval, timestamp1, timestamp2)※3

無

無

無

WEEK(date)

無

MASTER.WEEK(date)

無

YEAR(date)

無

無

無

システム関数

DATABASE()※3

無

無

無

IFNULL(expression, value)※3

無

無

無

USER()※4

USER

08-02

同左

同左

データ型変換関数

CONVERT(value, SQLtype)※2，※4

無

無

無

注※1

Statementオブジェクトのエスケープ構文解析での，スカラ関数変換後の形式を示します。関数変換しない場合は，「無」と示します。また，xx-xxは追加したバージョンを示します。

注※2

標準形式とHiRDB形式，又はXDM/RD E2形式が異なります。

注※3

HiRDB，又はXDM/RD E2では該当するスカラ関数がありません。

注※4

HiRDB，又はXDM/RD E2で未サポートの関数のため，スカラ関数（標準形式）をエスケープ構文に指定するとHiRDBサーバ，又はXDM/RD E2でエラーになります。また，xx-xxはType2 JDBCドライバに追加したバージョンを示します。

注※5

Type4 JDBCドライバでは，CURRENT TIMEに変換するため，小数秒の精度=0として扱います。引数で指定された秒の精度は無効になります。

付録J　文字集合を使用した場合の文字コード変換規則

文字集合を使用した場合の文字コード変換規則について説明します。

付録J.1　シフトJIS漢字コードをEBCDIKに変換する場合

シフトJIS漢字コードをEBCDIKに変換する場合について次に示します。

＜表の見方＞

1行目：変換する文字

2行目：変換前のコード

3行目：変換後のコード

全角文字（1バイト目が0x81〜0x9F，0xE0〜0xEF，0xF0〜0xFCで始まる2バイト文字）のコードは，半角文字2文字として扱います。

付録J.2　EBCDIKをシフトJIS漢字コードに変換する場合

EBCDIKをシフトJIS漢字コードに変換する場合について次に示します。

＜表の見方＞

1行目：変換する文字

2行目：変換前のコード

3行目：変換後のコード

付録K　HiRDB SQL Tuning Advisorの環境設定

HiRDB SQL Tuning Advisorでは，解析処理を行うために，HiRDBサーバに接続して情報を取得します。HiRDB SQL Tuning Advisorを使用するには，接続のための環境設定をしてください。HiRDB SQL Tuning Advisorの環境設定の手順を次に示します。

［スタート］−［プログラム］−［HiRDB SQL Tuning Advisor］−［HiRDB SQL Tuning Advisor］を選択し，HiRDB SQL Tuning Advisorを起動します。

［オプション］メニューから［環境設定］を選択します。

［環境設定］画面が表示されます。

［接続］タブを選択します。

接続情報名を登録するため［設定］ボタンをクリックします。

「接続情報設定」画面が表示されます。

接続情報は，表の所有者とDBA権限保持者の2種類を登録します。接続するHiRDBサーバのPDHOST，PDNAMEPORT，接続する認可識別子，パスワード（PDUSER），及び接続するHiRDBサーバの文字コード種別を設定します。

［追加］ボタンをクリックします。

次の画面は，表の所有者（USER1）の接続情報を追加した例です。

次の画面は，DBA権限保持者（"root"）の接続情報を追加した例です。

すべての情報の追加が完了したら，［OK］ボタンをクリックします。

［環境設定］画面で，各操作の接続情報を設定します。

［ディクショナリ表示］にDBA権限保持者の接続情報名を設定します。

［SQLオブジェクト情報表示］にDBA権限保持者の接続情報名を設定します。

上記以外には，表の所有者の接続情報名を設定します。

［OK］ボタンをクリックして終了します。

［オプション］メニューから［環境設定］を選択します。

［環境設定］画面が表示されます。

［環境設定］画面の［アクセスパス］タブを選択し，次の項目を設定します。

［接続情報名］に表の所有者の接続情報名を設定します。

［中間結果情報］の［データ件数の取得を行なう］をチェックします。

［OK］ボタンをクリックして終了します。

付録L　HiRDBの最大値・最小値

HiRDBの最大値・最小値を次の表に示します。

表L‒1　HiRDBの最大値・最小値

分類

項　　　目

最小値

最大値

単位

データベース操作

検索項目数

1

30,000

個

更新列数

1

30,000

ソート列数

1

255

グループ化列数

0又は1 ※１

255

重複排除列数

1

255

論理演算のネスト数

0

255

IN述語の右辺の行値構成子数

1

30,000

スカラ関数のネスト数

0

255

SQL中の文字列定数，混在文字列定数，16進文字列定数の長さ

0

32,000

バイト

SQL中の各国文字列定数の長さ

0

16,000

字

1SQL文の長さ

1

2,000

キロバイト

1SQL文中に指定できる表数※2

1

128

個

1SQL文中に指定できる相関名の数※3

0

129

LOCK文中の排他制御実表数

1

128

CALL文の引数の数

0

30,000

作業表の行長※4

6

32,720

バイト

UAP

1UAP中に指定するSQL文数

1

4,095

個

1UAP中のカーソル数

0

1,023

SQL文中の?パラメタ数

0

30,000

SQL文中の埋込み変数

0

30,000

注※1

GROUP BY句を指定する場合の最小値は１です。GROUP BY句を指定しないでHAVING句を指定する場合，又はSELECT句に集合関数を指定する場合の最小値は０です。

注※2

更新対象の表は数に含みません。

注※3

更新対象の表に対して指定する相関名は数に含みません。

注※4

SQL文によって，作業表用ファイルが必要となる場合があります。作業表用ファイルについては，マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

付録M　UAPのサンプル一覧

UAPのサンプルが掲載されている箇所を次の表に示します。

表M‒1　UAPのサンプル一覧

分類

内容

ストアドルーチンの作成

ストアドプロシジャを使用した採番の例

SQLストアドプロシジャの例（定義と呼び出し）

結果集合返却機能の使用例（SQLストアドプロシジャの定義と呼び出し）

SQLストアドファンクションの例（定義と呼び出し）

外部Javaストアドルーチンのプログラム例

結果集合返却機能の使用例（Javaストアドプロシジャの定義と呼び出し）

外部Cストアドルーチンのプログラム例

配列の使用

配列を使用したFETCH機能の使用例

配列を使用したINSERT機能の使用例

配列を使用したUPDATE機能の使用例

配列を使用したDELETE機能の使用例

複数接続機能の使用

複数接続機能のコーディング例

位置付け子機能の使用

位置付け子機能の使用例

C言語でのUAPの作成

基本的な操作の例

ユーザ定義のSQL記述領域を使用した例

LOBデータを操作する例

埋込みSQL宣言節の不要化の使用例

C言語の構造体の使用例

ハッシュ分割のコーディング例

COBOL言語でのUAPの作成

基本的な操作の例

行インタフェースを使用した例

TYPE句，TYPEDEF句，及びSAME AS句を使用した例

UAPからのコマンド実行

COMMAND EXECUTEからコマンドを実行するための準備（データロードを実行するUAPの例）

HiRDBデータプロバイダ for .NET Frameworkの使用

データベースへの接続

SQL文の実行

トランザクションの実行

検索文の実行

配列を使用したINSERT機能の実行

繰返し列の実行

SQL文のエラー判定とエラー情報の取得

DataSourceとJNDIの使用（Type2 JDBCドライバ）

JNDIへのDataSourceの登録

JNDIからのDataSourceの取得

DB接続

DataSourceとJNDIの使用（Type4 JDBCドライバ）

JNDIへのDataSourceの登録

JNDIからのDataSourceの取得

DB接続

JDBCドライバの使用

JDBCドライバを使用したUAP例

SQLJの使用

HiRDBサーバとの接続，切り離しの記述

カーソルによる検索の記述

動的結果セットの受け取り

JDBCとの相互運用

ネイティブインタフェースを使用したコーディング例

付録N　メインフレームからのマイグレーション

付録N.1　次の行取り出しで排他を解除する機能

VOSKシステムからマイグレーションするときに必要となる機能です。VOSKシステムからマイグレーションするときだけ，この機能を使用してください。通常はこの機能を使用しないでください。

(1)　概要

次の行取り出しで排他を解除する機能を適用すると，カーソルを使用した検索で，更新のない行の排他を解除します。これによって，更新のなかった行をほかのユーザが参照，更新できるため，トランザクションの同時実行性が向上します。

(2)　前提条件

次の行取り出しで排他を解除する機能は，HiRDB/シングルサーバ限定の機能です。HiRDB/パラレルサーバでは使用できません。

HiRDBサーバ以外でUAPを実行する場合，次のPPが必要です。

HiRDB/Run Time Version 6 06-01以降（Windowsの場合はHiRDB/Run Time Version 6 06-00-/B以降）

HiRDBサーバ以外でUAPを開発する場合，次のPPが必要です。

HiRDB/Developer's Kit Version 6 06-01以降（Windowsの場合はHiRDB/Developer's Kit Version 6 06-00-/B以降）

UAPについては，「注意事項」に記載のすべての注意事項について問題ないことを確認してください。

(3)　指定方法

UAP中のSQL文に適用する場合

クライアント環境変数PDISLLVLに12を指定します。

ストアドプロシジャ中のSQL文に適用する場合

CREATE PROCEDURE文，ALTER PROCEDURE文，又はALTER ROUTINE文のISOLATION指定で12を指定します。

(4)　機能

SQL文のデータ保証レベルを12に指定します。

データ保証レベルに12を指定すると，カーソルを使用する検索の場合，カーソルが位置づけられている間，排他を保持します。次の行を取り出すとき，又はカーソルを閉じるときに，更新が行われていない一つ前の行の排他を解除します。これによって，カーソルの現在位置の行は，ほかのユーザが更新することを許可しません。さらに，次の行の取り出し，又はカーソルクローズの後，検索済みの更新のない行を，ほかのユーザが更新できます。カーソルを使用しない検索の場合，検索が終了していれば，トランザクションが終了していなくてもほかのユーザからの参照および更新を許可します。

(5)　注意事項

データ保証レベルの指定よりも，SQL文中の排他オプションの指定が優先されます。データ保証レベルについては，「データ保証レベル」を参照してください。排他オプションについては，マニュアル「HiRDB SQLリファレンス」の「排他オプション」を参照してください。

次の条件に該当する場合は，データ保証レベル2相当の動作になります。

配列を使用したFETCH機能を利用する場合

ブロック転送機能は無効になります

この機能の実行中に，作業表を作成するSQL文を実行しても，行の排他が解放されません。そのため，更新のない行でもほかのユーザが更新できません。

なお，UAPがCOBOL85の「RDBファイル入出力機能」又はCOBOL2002の「HiRDBによる索引ファイル入出力機能」を利用する場合，次の条件をすべて満たしているときは作業表を作成しません。

インデクスキー値無排他機能を使用している

システム定義でインデクスキー値無排他機能の利用を指定するか，又はシステム定義でインデクスキー値無排他機能を省略すれば，デフォルト設定でインデクスキー値無排他機能が適用されます。

クライアント環境変数又はシステム定義で，SQL最適化オプションに「更新SQLの作業表作成抑止機能」を指定している

キー項目をクラスタキー定義している，又はインデクスを定義し，最適化情報収集ユティリティ（pdgetcst）によってインデクスシーケンシャル度（SEQ_RATIO）を100としてインデクスの最適化情報を登録している

クラスタキーを定義する場合は，表を横分割していないこと，インデクスを定義する場合は，インデクスを横分割していないことが前提条件となります。インデクスを横分割しないためには，表を横分割しないか，又は表を横分割する場合はキー項目を分割キーにしないようにする必要があります。

次のどれかの条件を満たしている場合，行の排他又はほかの排他資源が解放されず，ほかのユーザが更新できないことがあります。

SQL最適化オプションに「グループ分け高速化処理」を指定し，かつ「グループ分け高速化処理」対象のSQL文を実行する

「グループ分け高速化処理」対象のSQL文については，「グループ分け高速化機能」を参照してください。

選択式にCOUNT(*)，COUNT(列指定)，COUNT_FLOAT(*)，COUNT_FLOAT (列指定)，SUM(列指定)，及びAVG(列指定)だけを指定し，かつGROUP BY句を指定しないSQL文を実行する

最小排他資源単位がページ単位に定義されている表（表オプションにLOCK PAGEを指定して定義した表）を検索する

LOCK TABLEによって排他を取得した表を検索する

BLOB型又は定義長32,001バイト以上のBINARY型の列をユーザ定義関数（システム定義スカラ関数を含む）の引数に指定する

プラグイン提供関数を指定する

抽象データ型の列又は抽象データ型の列のコンポネント指定を指定する

クライアント環境変数PDDBLOGにNOを指定し，FOR UPDATE指定のあるSQLを実行する

プラグイン提供関数を使用したSQLを実行する

アクセスパスで，表の結合方式がキースキャンマージジョインになるSQLを実行する

上記4及び5に該当しない場合で，かつGROUP BY句を含むSQLを実行する場合，行取り出し時に次のグループに含まれる一行に対して排他が掛かります。この排他は次の行取り出し時に解除されます。

上記4及び5に該当しない場合で，かつGROUP BY句を含ままないで，集合関数又はHAVING句を含むSQLを実行する場合，検索結果の行を取り出した時点で行排他は掛かりません。

インデクスキー値排他を適用する場合，カーソルの現在位置の行のインデクスキー値に排他が掛かります。そのため，ほかのトランザクションで同じキー値を持つ行を更新できないことがあります。

索引

数字

1行SELECT文[1]

1行検索[1]

1個の表からの検索[1]

2個の表からの検索[1]

64ビットモードでのUAPの作成[1]

A

absolute(int row)〔ResultSetインタフェース〕[1]

acceptsURL(String url)〔Driverインタフェース〕[1]

addBatch()〔PreparedStatementインタフェース〕[1]

addBatch(String sql)〔Statementインタフェース〕[1]

addConnectionEventListener(ConnectionEventListener listener)〔PooledConnectionインタフェース〕[1]

addStatementEventListener（StatementEventListener listener）〔PooledConnectionインタフェース〕[1]

ADO.NET対応アプリケーションプログラムからのHiRDBアクセス[1]

afterLast()〔ResultSetインタフェース〕[1]

allProceduresAreCallable()〔DatabaseMetaDataインタフェース〕[1]

allTablesAreSelectable()〔DatabaseMetaDataインタフェース〕[1]

AND[1]

AND PLURAL INDEXES SCAN〔SQLの最適化〕[1]

ANDの複数インデクス利用〔SQLの最適化〕[1]

ANDの複数インデクス利用の抑止〔SQL最適化オプション〕[1]

Arrayインタフェース〔JDBC1.2 コアAPI〕[1]

Arrayクラス〔Type2 JDBCドライバ〕[1]、[2]

autoCommitFailureClosesAllResultSets()〔DatabaseMetaDataインタフェース〕[1]

AVG[1]

B

beforeFirst()〔ResultSetインタフェース〕[1]

BETWEEN述語[1]

BETWEEN述語を使用したデータの探索[1]

Blobインタフェース〔JDBC1.2 コアAPI〕[1]

BLOB型を使用する場合の注意事項〔Type2 JDBCドライバ〕[1]

Blobクラス〔Type2 JDBCドライバ〕[1]

BLOBデータ，BINARYデータの後方削除更新[1]

BLOBデータ，BINARYデータの追加更新[1]

BLOBデータ，BINARYデータの部分抽出[1]

BLOBデータ，BINARYデータの部分的な更新・検索[1]

BLOBデータのファイル出力機能[1]

C

C++言語によるUAPの作成[1]

CallableStatementインタフェース〔JDBC1.2 コアAPI〕[1]

CallableStatementクラス〔JDBC1.0機能〕[1]

CallableStatementクラス〔Type2 JDBCドライバ〕[1]

cancel()〔Statementインタフェース〕[1]

checkSession(int waittime)〔Connectionインタフェース〕[1]

Classファイルの作成[1]

clearBatch()〔Statementインタフェース〕[1]

clearParameters()〔PreparedStatementインタフェース〕[1]

clearWarnings()〔Connectionインタフェース〕[1]

clearWarnings()〔ResultSetインタフェース〕[1]

clearWarnings()〔Statementインタフェース〕[1]

close()〔Connectionインタフェース〕[1]

close()〔PooledConnectionインタフェース〕[1]

close()〔ResultSetインタフェース〕[1]

close()〔Statementインタフェース〕[1]

CNF変換での探索高速化条件の導出[1]

COBOL2002のUnicode機能を使用したUAPの実行[1]

COBOL言語で作成したUAPの実行手順[1]

COBOL言語でのSQLを記述できる部[1]

COBOLのビッグエンディアンオプションへの対応[1]

COMMIT_BEHAVIORについての注意事項[1]

commit()〔Connectionインタフェース〕[1]

connect(String url, Properties info)〔Driverインタフェース〕[1]

ConnectionPoolDataSourceインタフェース〔JDBC2.0 Optional Package〕[1]

Connectionインタフェース〔JDBC1.2 コアAPI〕[1]

Connectionクラス〔JDBC1.0機能〕[1]

Connectionクラス〔Type2 JDBCドライバ〕[1]

COUNT[1]

CREATE PUBLIC FUNCTION[1]

CREATE PUBLIC PROCEDURE[1]

createStatement()〔Connectionインタフェース〕[1]

createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)〔Connectionインタフェース〕[1]

createStatement(int resultSetType, int resultSetConcurrency)〔Connectionインタフェース〕[1]

CROSS JOIN〔SQLの最適化〕[1]

C言語で作成したUAPの実行手順[1]

C言語によるUAPの作成[1]

Cストアドファンクション[1]

Cストアドプロシジャ[1]

Cファイルの作成[1]

Cプログラム作成時の制限事項[1]

Cプログラムの記述[1]

Cライブラリファイルの作成[1]

Cライブラリファイルの作成例[1]

Cライブラリファイルの新規登録[1]

D

DatabaseMetaDataインタフェース〔JDBC1.2 コアAPI〕[1]

DatabaseMetaDataクラス〔JDBC1.0機能〕[1]

DatabaseMetaDataクラス〔Type2 JDBCドライバ〕[1]

dataDefinitionCausesTransactionCommit()〔DatabaseMetaDataインタフェース〕[1]

dataDefinitionIgnoredInTransactions()〔DatabaseMetaDataインタフェース〕[1]

DataSourceインタフェース〔JDBC2.0 Optional Package〕[1]

DataSourceとJNDIを使用したDB接続〔Type4 JDBCドライバ〕[1]

DbProviderFactoryを使用したプロバイダに依存しないコード[1]

DbTypeプロパティとHiRDBTypeプロパティ[1]

DECIMAL型符号正規化関数[1]

deletesAreDetected(int type)〔DatabaseMetaDataインタフェース〕[1]

DELETE文のWHERE句[1]

doesMaxRowSizeIncludeBlobs()〔DatabaseMetaDataインタフェース〕[1]

DriverManagerクラスによるDB接続〔Type4 JDBCドライバ〕[1]

Driverインタフェース〔JDBC1.2 コアAPI〕[1]

Driverクラス〔JDBC1.0機能〕[1]

E

Exceptionトレースログ〔Type4 JDBCドライバ〕[1]

Exceptionトレースログのファイルサイズ[1]

execute()〔PreparedStatementインタフェース〕[1]

execute(String sql)〔PreparedStatementインタフェース〕[1]

execute(String sql)〔Statementインタフェース〕[1]

executeBatch()〔Statementインタフェース〕[1]

EXECUTE IMMEDIATE文で前処理と実行が一度に実行できるSQL[1]

executeQuery()〔PreparedStatementインタフェース〕[1]

executeQuery(String sql)〔PreparedStatementインタフェース〕[1]

executeQuery(String sql)〔Statementインタフェース〕[1]

executeUpdate()〔PreparedStatementインタフェース〕[1]

executeUpdate(String sql)〔PreparedStatementインタフェース〕[1]

executeUpdate(String sql)〔Statementインタフェース〕[1]

EXISTS述語[1]

EXISTS述語を使用した副問合せ[1]

EXモード[1]

F

FALSE[1]

FETCH文[1]

findColumn(String columnName)〔ResultSetインタフェース〕[1]

first()〔ResultSetインタフェース〕[1]

FIX属性の表[1]

FIX属性の表の検索[1]

FIX属性の表の更新[1]

FIX属性の表への行の挿入[1]

FOR UPDATE句，及びFOR READ ONLY句を指定するとき考慮する内容[1]

FOR UPDATE句とFOR READ ONLY句の使い分け[1]

free()〔Blobインタフェース〕[1]

FROM句の導出表のマージ適用〔SQL拡張最適化オプション〕[1]

G

getArray()〔Arrayインタフェース〕[1]

getArray(int i)〔ResultSetインタフェース〕[1]

getArray(long index, int count)〔Arrayインタフェース〕[1]

getArray(String colName)〔ResultSetインタフェース〕[1]

getAsciiStream(int columnIndex)〔ResultSetインタフェース〕[1]

getAsciiStream(String columnName)〔ResultSetインタフェース〕[1]

getAttributes(String catalog,String schemaPattern,String typeNamePattern,String attributeNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getAutoCommit()〔Connectionインタフェース〕[1]

getBaseType()〔Arrayインタフェース〕[1]

getBaseTypeName()〔Arrayインタフェース〕[1]

getBatchExceptionBehavior〔Type4 JDBCドライバ〕[1]

getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable)〔DatabaseMetaDataインタフェース〕[1]

getBigDecimal(int columnIndex, int scale)〔ResultSetインタフェース〕[1]

getBigDecimal(int columnIndex)〔ResultSetインタフェース〕[1]

getBigDecimal(int parameterIndex, int scale)〔CallableStatementインタフェース〕[1]

getBigDecimal(int parameterIndex)〔CallableStatementインタフェース〕[1]

getBigDecimal(String columnName, int scale)〔ResultSetインタフェース〕[1]

getBigDecimal(String columnName)〔ResultSetインタフェース〕[1]

getBinaryStream()〔Blobインタフェース〕[1]

getBinaryStream(int columnIndex)〔ResultSetインタフェース〕[1]

getBinaryStream(String columnName)〔ResultSetインタフェース〕[1]

getBlob(int i)〔ResultSetインタフェース〕[1]

getBlob(int parameterIndex)〔CallableStatementインタフェース〕[1]

getBlob(String colName)〔ResultSetインタフェース〕[1]

getBlob(String parameterName)〔CallableStatementインタフェース〕[1]

getBlockUpdate〔Type2 JDBCドライバ〕[1]、[2]

getBoolean(int columnIndex)〔ResultSetインタフェース〕[1]

getBoolean(int parameterIndex)〔CallableStatementインタフェース〕[1]

getBoolean(String columnName)〔ResultSetインタフェース〕[1]

getBoolean(String parameterName)〔CallableStatementインタフェース〕[1]

getByte(int columnIndex)〔ResultSetインタフェース〕[1]

getByte(int parameterIndex)〔CallableStatementインタフェース〕[1]

getByte(String columnName)〔ResultSetインタフェース〕[1]

getByte(String parameterName)〔CallableStatementインタフェース〕[1]

getBytes(int columnIndex)〔ResultSetインタフェース〕[1]

getBytes(int parameterIndex)〔CallableStatementインタフェース〕[1]

getBytes(long pos, int length)〔Blobインタフェース〕[1]

getBytes(String columnName)〔ResultSetインタフェース〕[1]

getBytes(String parameterName)〔CallableStatementインタフェース〕[1]

getCatalog()〔Connectionインタフェース〕[1]

getCatalogName(int column)〔ResultSetMetaDataインタフェース〕[1]

getCatalogs()〔DatabaseMetaDataインタフェース〕[1]

getCatalogSeparator()〔DatabaseMetaDataインタフェース〕[1]

getCatalogTerm()〔DatabaseMetaDataインタフェース〕[1]

getCharacterStream(int columnIndex)〔ResultSetインタフェース〕[1]

getCharacterStream(String columnName)〔ResultSetインタフェース〕[1]

getClear_Env〔Type2 JDBCドライバ〕[1]

getClientInfoProperties()〔DatabaseMetaDataインタフェース〕[1]

getColumnClassName(int column)〔ResultSetMetaDataインタフェース〕[1]

getColumnCount()〔ResultSetMetaDataインタフェース〕[1]

getColumnDisplaySize(int column)〔ResultSetMetaDataインタフェース〕[1]

getColumnLabel(int column)〔ResultSetMetaDataインタフェース〕[1]

getColumnName(int column)〔ResultSetMetaDataインタフェース〕[1]

getColumnPrivileges (String catalog,String schema,String table,String columnNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getColumnType(int column)〔ResultSetMetaDataインタフェース〕[1]

getColumnTypeName(int column)〔ResultSetMetaDataインタフェース〕[1]

getCommit_Behavior〔Type2 JDBCドライバ〕[1]

getConcurrency()〔ResultSetインタフェース〕[1]

getConnection()〔DatabaseMetaDataインタフェース〕[1]

getConnection()〔DataSourceインタフェース〕[1]

getConnection()〔PooledConnectionインタフェース〕[1]

getConnection()〔Statementインタフェース〕[1]

getConnection(String username, String password)〔DataSourceインタフェース〕[1]

getCrossReference (String primaryCatalog,String primarySchema,String primaryTable,String foreignCatalog,String foreignSchema,String foreignTable)〔DatabaseMetaDataインタフェース〕[1]

getCursorName()〔ResultSetインタフェース〕[1]

getDatabaseMajorVersion()〔DatabaseMetaDataインタフェース〕[1]

getDatabaseMinorVersion()〔DatabaseMetaDataインタフェース〕[1]

getDatabaseProductName()〔DatabaseMetaDataインタフェース〕[1]

getDatabaseProductVersion()〔DatabaseMetaDataインタフェース〕[1]

getDate(int columnIndex, Calendar cal)〔ResultSetインタフェース〕[1]

getDate(int columnIndex)〔ResultSetインタフェース〕[1]

getDate(int parameterIndex, java.util.Calendar cal)〔CallableStatementインタフェース〕[1]

getDate(int parameterIndex)〔CallableStatementインタフェース〕[1]

getDate(String columnName, Calendar cal)〔ResultSetインタフェース〕[1]

getDate(String columnName)〔ResultSetインタフェース〕[1]

getDate(String parameterName, java.util.Calendar cal)〔CallableStatementインタフェース〕[1]

getDate(String parameterName)〔CallableStatementインタフェース〕[1]

getDBHostName〔Type2 JDBCドライバ〕[1]

getDBHostName〔Type4 JDBCドライバ〕[1]

getDefaultTransactionIsolation()〔DatabaseMetaDataインタフェース〕[1]

getDescription〔Type2 JDBCドライバ〕[1]

getDescription〔Type4 JDBCドライバ〕[1]

getDouble(int columnIndex)〔ResultSetインタフェース〕[1]

getDouble(int parameterIndex)〔CallableStatementインタフェース〕[1]

getDouble(String columnName)〔ResultSetインタフェース〕[1]

getDouble(String parameterName)〔CallableStatementインタフェース〕[1]

getDriverMajorVersion()〔DatabaseMetaDataインタフェース〕[1]

getDriverMinorVersion()〔DatabaseMetaDataインタフェース〕[1]

getDriverName()〔DatabaseMetaDataインタフェース〕[1]

getDriverVersion()〔DatabaseMetaDataインタフェース〕[1]

getEncodeLang〔Type2 JDBCドライバ〕[1]

getEncodeLang〔Type4 JDBCドライバ〕[1]

getEnvironmentVariables〔Type4 JDBCドライバ〕[1]

getExportedKeys (String catalog,String schema,String table)〔DatabaseMetaDataインタフェース〕[1]

getExtraNameCharacters()〔DatabaseMetaDataインタフェース〕[1]

getFetchDirection()〔ResultSetインタフェース〕[1]

getFetchDirection()〔Statementインタフェース〕[1]

getFetchSize()〔ResultSetインタフェース〕[1]

getFetchSize()〔Statementインタフェース〕[1]

getFloat(int columnIndex)〔ResultSetインタフェース〕[1]

getFloat(int parameterIndex)〔CallableStatementインタフェース〕[1]

getFloat(String columnName)〔ResultSetインタフェース〕[1]

getFloat(String parameterName)〔CallableStatementインタフェース〕[1]

getFunctionColumns(String catalog,String schemaPattern,String functionNamePattern,String columnNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getFunctions(String catalog, String schemaPattern, String functionNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getHiRDBCursorMode〔Type4 JDBCドライバ〕[1]

getHiRDBINI〔Type4 JDBCドライバ〕[1]

getHoldability()〔Connectionインタフェース〕[1]

getHoldability()〔ResultSetインタフェース〕[1]

getIdentifierQuoteString()〔DatabaseMetaDataインタフェース〕[1]

getImportedKeys (String catalog,String schema,String table)〔DatabaseMetaDataインタフェース〕[1]

getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)〔DatabaseMetaDataインタフェース〕[1]

getInt(int columnIndex)〔ResultSetインタフェース〕[1]

getInt(int parameterIndex)〔CallableStatementインタフェース〕[1]

getInt(String columnName)〔ResultSetインタフェース〕[1]

getInt(String parameterName)〔CallableStatementインタフェース〕[1]

getJDBC_IF_TRC〔Type4 JDBCドライバ〕[1]

getJDBCMajorVersion()〔DatabaseMetaDataインタフェース〕[1]

getJDBCMinorVersion()〔DatabaseMetaDataインタフェース〕[1]

getLoginTimeout()〔ConnectionPoolDataSourceインタフェース〕[1]

getLoginTimeout()〔DataSourceインタフェース〕[1]

getLogWriter()〔ConnectionPoolDataSourceインタフェース〕[1]

getLogWriter()〔DataSourceインタフェース〕[1]

getLong(int columnIndex)〔ResultSetインタフェース〕[1]

getLong(int parameterIndex)〔CallableStatementインタフェース〕[1]

getLong(String columnName)〔ResultSetインタフェース〕[1]

getLong(String parameterName)〔CallableStatementインタフェース〕[1]

getLONGVARBINARY_AccessSize〔Type4 JDBCドライバ〕[1]

getLONGVARBINARY_Access〔Type2 JDBCドライバ〕[1]

getLONGVARBINARY_Access〔Type4 JDBCドライバ〕[1]

getLONGVARBINARY_TruncError〔Type4 JDBCドライバ〕[1]

getMajorVersion()〔Driverインタフェース〕[1]

getMaxBinaryLiteralLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxBinarySize〔Type4 JDBCドライバ〕[1]

getMaxCatalogNameLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxCharLiteralLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxColumnNameLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxColumnsInGroupBy()〔DatabaseMetaDataインタフェース〕[1]

getMaxColumnsInIndex()〔DatabaseMetaDataインタフェース〕[1]

getMaxColumnsInOrderBy()〔DatabaseMetaDataインタフェース〕[1]

getMaxColumnsInSelect()〔DatabaseMetaDataインタフェース〕[1]

getMaxColumnsInTable()〔DatabaseMetaDataインタフェース〕[1]

getMaxConnections()〔DatabaseMetaDataインタフェース〕[1]

getMaxCursorNameLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxFieldSize()〔Statementインタフェース〕[1]

getMaxIndexLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxProcedureNameLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxRows()〔Statementインタフェース〕[1]

getMaxRowSize()〔DatabaseMetaDataインタフェース〕[1]

getMaxSchemaNameLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxStatementLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxStatements()〔DatabaseMetaDataインタフェース〕[1]

getMaxTableNameLength()〔DatabaseMetaDataインタフェース〕[1]

getMaxTablesInSelect()〔DatabaseMetaDataインタフェース〕[1]

getMaxUserNameLength()〔DatabaseMetaDataインタフェース〕[1]

getMetaData()〔Connectionインタフェース〕[1]

getMetaData()〔PreparedStatementインタフェース〕[1]

getMetaData()〔ResultSetインタフェース〕[1]

getMinorVersion()〔Driverインタフェース〕[1]

getMoreResults()〔Statementインタフェース〕[1]

getNotErrorOccurred〔Type4 JDBCドライバ〕[1]

getNumericFunctions()〔DatabaseMetaDataインタフェース〕[1]

getObject(int columnIndex)〔ResultSetインタフェース〕[1]

getObject(int parameterIndex)〔CallableStatementインタフェース〕[1]

getObject(String columnName)〔ResultSetインタフェース〕[1]

getObject(String parameterName)〔CallableStatementインタフェース〕[1]

getParameterClassName(int param)〔ParameterMetaDataインタフェース〕[1]

getParameterCount()〔ParameterMetaDataインタフェース〕[1]

getParameterMetaData()〔PreparedStatementインタフェース〕[1]

getParameterMode(int param)〔ParameterMetaDataインタフェース〕[1]

getParameterType(int param)〔ParameterMetaDataインタフェース〕[1]

getParameterTypeName(int param)〔ParameterMetaDataインタフェース〕[1]

getPassword〔Type2 JDBCドライバ〕[1]

getPassword〔Type4 JDBCドライバ〕[1]

getPooledConnection()〔ConnectionPoolDataSourceインタフェース〕[1]

getPooledConnection(String user, String password)〔ConnectionPoolDataSourceインタフェース〕[1]

getPrecision(int column)〔ResultSetMetaDataインタフェース〕[1]

getPrecision(int param)〔ParameterMetaDataインタフェース〕[1]

getPrimaryKeys(String catalog, String schema, String table)〔DatabaseMetaDataインタフェース〕[1]

getProcedureColumns(String catalog,String schemaPattern,String procedureNamePattern, String columnNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getProcedures(String catalog,String schemaPattern,String procedureNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getProcedureTerm()〔DatabaseMetaDataインタフェース〕[1]

getPropertyInfo(String url, Properties info)〔Driverインタフェース〕[1]

getQueryTimeout()〔Statementインタフェース〕[1]

getReceiveBufferSize〔Type4 JDBCドライバ〕[1]

getResultSet()〔Arrayインタフェース〕[1]

getResultSet()〔Statementインタフェース〕[1]

getResultSet(long index,int count)〔Arrayインタフェース〕[1]

getResultSetConcurrency()〔Statementインタフェース〕[1]

getResultSetHoldability()〔DatabaseMetaDataインタフェース〕[1]

getResultSetHoldability()〔Statementインタフェース〕[1]

getResultSetType()〔Statementインタフェース〕[1]

getRMID〔Type2 JDBCドライバ〕[1]

getRow()〔ResultSetインタフェース〕[1]

getRowIdLifetime()〔DatabaseMetaDataインタフェース〕[1]

getScale(int column)〔ResultSetMetaDataインタフェース〕[1]

getScale(int param)〔ParameterMetaDataインタフェース〕[1]

getSchemaName(int column)〔ResultSetMetaDataインタフェース〕[1]

getSchemas()〔DatabaseMetaDataインタフェース〕[1]

getSchemas(String catalog, String schemaPattern)〔DatabaseMetaDataインタフェース〕[1]

getSchemaTerm()〔DatabaseMetaDataインタフェース〕[1]

getSearchStringEscape()〔DatabaseMetaDataインタフェース〕[1]

getSendBufferSize〔Type4 JDBCドライバ〕[1]

getShort(int columnIndex)〔ResultSetインタフェース〕[1]

getShort(int parameterIndex)〔CallableStatementインタフェース〕[1]

getShort(String columnName)〔ResultSetインタフェース〕[1]

getShort(String parameterName)〔CallableStatementインタフェース〕[1]

getSQLInNum〔Type2 JDBCドライバ〕[1]

getSQLInNum〔Type4 JDBCドライバ〕[1]

getSQLKeywords()〔DatabaseMetaDataインタフェース〕[1]

getSQLOutNum〔Type2 JDBCドライバ〕[1]

getSQLOutNum〔Type4 JDBCドライバ〕[1]

getSQLStateType()〔DatabaseMetaDataインタフェース〕[1]

getSQLWarningIgnore[1]

getSQLWarningLevel〔Type2 JDBCドライバ〕[1]

getSQLWarningLevel〔Type4 JDBCドライバ〕[1]

getStatement()〔ResultSetインタフェース〕[1]

getStatementCommitBehavior〔Type4 JDBCドライバ〕[1]

getString(int columnIndex)〔ResultSetインタフェース〕[1]

getString(int parameterIndex)〔CallableStatementインタフェース〕[1]

getString(String columnName)〔ResultSetインタフェース〕[1]

getString(String parameterName)〔CallableStatementインタフェース〕[1]

getStringFunctions()〔DatabaseMetaDataインタフェース〕[1]

getSuperTables(String catalog,String schemaPattern,String tableNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getSuperTypes(String catalog,String schemaPattern,String typeNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getSystemFunctions()〔DatabaseMetaDataインタフェース〕[1]

getTableName(int column)〔ResultSetMetaDataインタフェース〕[1]

getTablePrivileges(String catalog,String schemaPattern,String tableNamePattern)〔DatabaseMetaDataインタフェース〕[1]

getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)〔DatabaseMetaDataインタフェース〕[1]

getTableTypes()〔DatabaseMetaDataインタフェース〕[1]

getTime(int columnIndex, Calendar cal)〔ResultSetインタフェース〕[1]

getTime(int columnIndex)〔ResultSetインタフェース〕[1]

getTime(int parameterIndex, java.util.Calendar cal)〔CallableStatementインタフェース〕[1]

getTime(int parameterIndex)〔CallableStatementインタフェース〕[1]

getTime(String columnName, Calendar cal)〔ResultSetインタフェース〕[1]

getTime(String columnName)〔ResultSetインタフェース〕[1]

getTime(String parameterName, java.util.Calendar cal)〔CallableStatementインタフェース〕[1]

getTime(String parameterName)〔CallableStatementインタフェース〕[1]

getTimeDateFunctions()〔DatabaseMetaDataインタフェース〕[1]

getTimestamp(int columnIndex, Calendar cal)〔ResultSetインタフェース〕[1]

getTimestamp(int columnIndex)〔ResultSetインタフェース〕[1]

getTimestamp(int parameterIndex, java.util.Calendar cal)〔CallableStatementインタフェース〕[1]

getTimestamp(int parameterIndex)〔CallableStatementインタフェース〕[1]

getTimestamp(String columnName, Calendar cal)〔ResultSetインタフェース〕[1]

getTimestamp(String columnName)〔ResultSetインタフェース〕[1]

getTimestamp(String parameterName, java.util.Calendar cal)〔CallableStatementインタフェース〕[1]

getTimestamp(String parameterName)〔CallableStatementインタフェース〕[1]

getTransactionIsolation()〔Connectionインタフェース〕[1]

getTRC_NO〔Type4 JDBCドライバ〕[1]

getType()〔ResultSetインタフェース〕[1]

getTypeInfo()〔DatabaseMetaDataインタフェース〕[1]

getTypeMap()〔Connectionインタフェース〕[1]

getUapName〔Type4 JDBCドライバ〕[1]

getUDTs(String catalog,String schemaPattern,String typeNamePattern,int[] types)〔DatabaseMetaDataインタフェース〕[1]

getUpdateCount()〔Statementインタフェース〕[1]

getUpdateCountBehavior〔Type4 JDBCドライバ〕[1]

getURL()〔DatabaseMetaDataインタフェース〕[1]

getUserName()〔DatabaseMetaDataインタフェース〕[1]

getUser〔Type2 JDBCドライバ〕[1]

getUser〔Type4 JDBCドライバ〕[1]

getVersionColumns(String catalog,String schema,String table)〔DatabaseMetaDataインタフェース〕[1]

getWarnings()〔Connectionインタフェース〕[1]

getWarnings()〔ResultSetインタフェース〕[1]

getWarnings()〔Statementインタフェース〕[1]

getXACloseString〔Type2 JDBCドライバ〕[1]

getXACloseString〔Type4 JDBCドライバ〕[1]

getXALocalCommitMode〔Type4 JDBCドライバ〕[1]

getXAOpenString〔Type2 JDBCドライバ〕[1]

getXAOpenString〔Type4 JDBCドライバ〕[1]

getXAThreadMode〔Type2 JDBCドライバ〕[1]

H

HASH JOIN〔SQLの最適化〕[1]

HASH SUBQ〔SQLの最適化〕[1]、[2]

HiRDB_ConnectionRecove[1]

HiRDB_ConnectionString[1]

HiRDB_LifeTime[1]

HiRDB_PDHOST[1]、[2]

HiRDB_PDNAMEPORT[1]、[2]

HiRDB_PDTMID[1]、[2]

HiRDB_PDXAMODE[1]、[2]

HiRDB_Pooling[1]

HiRDB/Developer's Kit[1]

HiRDB/Run Time[1]

HiRDBCommand[1]

HiRDBCommandBuilder[1]

HiRDBCommandBuilderのメンバ一覧[1]

HiRDBCommandのメンバ一覧[1]

HiRDBConnection[1]

HiRDBConnectionのメンバ一覧[1]

HiRDBDataAdapter[1]

HiRDBDataAdapterのメンバ一覧[1]

HiRDBDataReader[1]

HiRDBDataReaderのメンバ一覧[1]

HiRDBException[1]

HiRDBExceptionのメンバ一覧[1]

HiRDB JDBCドライバの提供機能[1]

HiRDB OLE DBプロバイダ[1]

HiRDBParameter[1]

HiRDBParameterCollection[1]

HiRDBParameterCollectionのメンバ一覧[1]

HiRDBParameterのメンバ一覧[1]

HiRDBProviderFactory[1]

HiRDBProviderFactoryのメンバ一覧[1]

HiRDBRowUpdatedEventArgs[1]

HiRDBRowUpdatedEventArgsのメンバ一覧[1]

HiRDBRowUpdatingEventArgs[1]

HiRDBRowUpdatingEventArgsのメンバ一覧[1]

HiRDB SQL Tuning Advisorの環境設定[1]

HiRDB SQL Tuning Advisor用アクセスパス情報ファイル[1]

HiRDBTransaction[1]

HiRDBTransactionメンバ一覧[1]

HiRDBが提供するODBC関数[1]

HiRDBが提供する関数[1]

HiRDBからの切り離し[1]

HiRDBクライアント[1]

HiRDBクライアント環境変数登録ツール[1]

HiRDBクライアントのディレクトリ及びファイル構成[1]

HiRDBシステムへの接続と切り離し[1]

HiRDBデータプロバイダ for .NET Framework[1]

HiRDBデータプロバイダ for .NET Frameworkと対応するADO.NETのバージョン[1]

HiRDBデータプロバイダ for .NET Frameworkのインストール[1]

HiRDBデータプロバイダ for .NET Frameworkのインタフェース[1]

HiRDBデータプロバイダ for .NET Frameworkの型変換[1]

HiRDBデータプロバイダ for .NET Frameworkのクラス一覧[1]

HiRDBデータプロバイダ for .NET Frameworkの前提プログラム[1]

HiRDBデータプロバイダ for .NET Frameworkのデータ型[1]

HiRDBデータプロバイダ for .NET Frameworkのトラブルシュート機能[1]

HiRDBデータプロバイダ for .NET Frameworkのメンバ一覧[1]

HiRDBデータプロバイダ for .NET Frameworkの留意事項[1]

HiRDBデータプロバイダ for .NET Frameworkを使用したUAP例[1]

HiRDBで使用できるSQL一覧[1]

HiRDBでの問合せ処理方式〔SQLの最適化〕[1]

HiRDBとの接続[1]

HiRDBの通信処理[1]

hostsファイル[1]

I

INDEX SCAN〔SQLの最適化〕[1]

insertsAreDetected(int type)〔DatabaseMetaDataインタフェース〕[1]

INSERT文[1]

INSERT文にROWを指定[1]

IN述語[1]

IN述語を使用したデータの探索[1]

isAfterLast()〔ResultSetインタフェース〕[1]

isAutoIncrement(int column)〔ResultSetMetaDataインタフェース〕[1]

isBeforeFirst()〔ResultSetインタフェース〕[1]

isCaseSensitive(int column)〔ResultSetMetaDataインタフェース〕[1]

isCatalogAtStart()〔DatabaseMetaDataインタフェース〕[1]

isClosed()〔Connectionインタフェース〕[1]

isClosed()〔ResultSetインタフェース〕[1]

isClosed()〔Statementインタフェース〕[1]

isCurrency(int column)〔ResultSetMetaDataインタフェース〕[1]

isDefinitelyWritable(int column)〔ResultSetMetaDataインタフェース〕[1]

isFirst()〔ResultSetインタフェース〕[1]

isLast()〔ResultSetインタフェース〕[1]

isNullable(int column)〔ResultSetMetaDataインタフェース〕[1]

isNullable(int param)〔ParameterMetaDataインタフェース〕[1]

isPoolable〔Statementインタフェース〕[1]

isReadOnly()〔Connectionインタフェース〕[1]

isReadOnly()〔DatabaseMetaDataインタフェース〕[1]

isReadOnly(int column)〔ResultSetMetaDataインタフェース〕[1]

isSearchable(int column)〔ResultSetMetaDataインタフェース〕[1]

isSigned(int column)〔ResultSetMetaDataインタフェース〕[1]

isSigned(int param)〔ParameterMetaDataインタフェース〕[1]

isValid(int timeout)〔Connectionインタフェース〕[1]

isWrapperFor(Class<?> iface)〔Wrapperインタフェース〕[1]

isWritable(int column)〔ResultSetMetaDataインタフェース〕[1]

J

JAR形式へのアーカイブ[1]

JARファイルアクセス機能〔JDBC2.0 Optional Package〕[1]

JARファイルの作成[1]

JARファイルの新規登録[1]

Javaストアドファンクション[1]

Javaストアドプロシジャ[1]

Javaファイルの作成[1]

Javaプログラムの記述[1]

JDBC1.0機能[1]

JDBC1.2 コアAPI[1]

JDBC2.0 Optional Package〔Type2 JDBCドライバ〕[1]

JDBC2.0 Optional Package〔Type4 JDBCドライバ〕[1]

JDBC2.0基本機能[1]

JDBC2.1 コアAPI[1]

JDBC3.0 API[1]

JDBC4.0 API[1]

jdbcCompliant()〔Driverインタフェース〕[1]

JDBCインタフェースメソッドトレース〔Type4 JDBCドライバ〕[1]

JDBCドライバを使用したUAP例[1]

K

KEY SCAN MERGE JOIN〔SQLの最適化〕[1]

KEY SCAN〔SQLの最適化〕[1]

L

last()〔ResultSetインタフェース〕[1]

length()〔Blobインタフェース〕[1]

LIKE述語[1]

LIKE述語を使用したデータの探索[1]

LIST SCAN MERGE JOIN〔SQLの最適化〕[1]

LIST SCAN〔SQLの最適化〕[1]

locatorsUpdateCopy()〔DatabaseMetaDataインタフェース〕[1]

L-KEY R-LIST MERGE JOIN〔SQLの最適化〕[1]

L-KEY R-SORT MERGE JOIN〔SQLの最適化〕[1]

L-LIST R-KEY MERGE JOIN〔SQLの最適化〕[1]

L-LIST R-SORT MERGE JOIN〔SQLの最適化〕[1]

L-SORT R-KEY MERGE JOIN〔SQLの最適化〕[1]

L-SORT R-LIST MERGE JOIN〔SQLの最適化〕[1]

M

MAX[1]

MIN[1]

MULTI COLUMNS INDEX SCAN〔SQLの最適化〕[1]

MULTI COLUMNS KEY SCAN〔SQLの最適化〕[1]

N

nativeSQL(String sql)〔Connectionインタフェース〕[1]

NESTED LOOPS JOIN〔SQLの最適化〕[1]

NESTED LOOPS ROW VALUE SUBQ〔SQLの最適化〕[1]

NESTED LOOPS WORK TABLE SUBQ〔SQLの最適化〕[1]

next()〔ResultSetインタフェース〕[1]

NOT[1]

nullPlusNonNullIsNull()〔DatabaseMetaDataインタフェース〕[1]

nullsAreSortedAtEnd()〔DatabaseMetaDataインタフェース〕[1]

nullsAreSortedAtStart()〔DatabaseMetaDataインタフェース〕[1]

nullsAreSortedHigh()〔DatabaseMetaDataインタフェース〕[1]

nullsAreSortedLow()〔DatabaseMetaDataインタフェース〕[1]

NULL述語[1]

NULL述語とNOTを組み合わせて使用したデータの探索[1]

O

ODBC2.0ドライバのインストール[1]

ODBC3.5ドライバが返却するSQLSTATE[1]

ODBC3.5ドライバのインストールと環境変数の設定[1]

ODBC関数で使用できる機能[1]

ODBC対応アプリケーションプログラムからのHiRDBアクセス[1]

OLE DB[1]

OLE DB対応アプリケーションプログラムからのHiRDBアクセス[1]

OOCOBOL言語によるUAPの作成[1]

OR[1]

OR PLURAL INDEXES SCAN〔SQLの最適化〕[1]

ORの複数インデクス利用〔SQLの最適化〕[1]

ORの複数インデクス利用の優先〔SQL最適化オプション〕[1]

othersDeletesAreVisible(int type)〔DatabaseMetaDataインタフェース〕[1]

othersInsertsAreVisible(int type)〔DatabaseMetaDataインタフェース〕[1]

othersUpdatesAreVisible(int type)〔DatabaseMetaDataインタフェース〕[1]

ownDeletesAreVisible(int type)〔DatabaseMetaDataインタフェース〕[1]

ownInsertsAreVisible(int type)〔DatabaseMetaDataインタフェース〕[1]

ownUpdatesAreVisible(int type)〔DatabaseMetaDataインタフェース〕[1]

P

p_rdb_conv_space[1]

p_rdb_conv_space_utf8[1]

p_rdb_dbhash[1]

p_rdb_dec_sign_norm[1]

p_rdb_set_lang[1]

ParameterMetaDataインタフェース〔JDBC3.0 API〕[1]

PATH[1]、[2]

PDADDITIONALOPTLVL[1]、[2]

PDAGGR[1]、[2]

PDASTHOST[1]、[2]

PDASTPORT[1]、[2]

PDASTUSER[1]、[2]

PDAUTHTYPE[1]、[2]

PDAUTOCONNECT[1]、[2]

PDAUTORECONNECT[1]、[2]

PDBESCONHOLD[1]、[2]

PDBESCONHTI[1]、[2]

PDBINARYBLKF[1]、[2]

PDBINDRETRYCOUNT[1]、[2]

PDBINDRETRYINTERVAL[1]、[2]

PDBLKBUFFSIZE[1]、[2]

PDBLKF[1]、[2]

PDCALCMDWAITTIME[1]、[2]

pdcbl[1]

PDCLTAPNAME[1]、[2]

PDCLTBINDLOOPBACKADDR[1]、[2]

PDCLTCNVBYTERATIO[1]、[2]

PDCLTCNVMODE[1]、[2]

PDCLTCNVUOCFUNC[1]、[2]

PDCLTCNVUOCLIB[1]、[2]

PDCLTGAIJIDLL[1]、[2]

PDCLTGAIJIFUNC[1]、[2]

PDCLTGRP[1]、[2]

PDCLTLANG[1]、[2]

PDCLTPATH[1]、[2]

PDCLTRCVADDR[1]、[2]

PDCLTRCVPORT[1]、[2]

PDCLTRDNODE[1]、[2]

PDCMDTRACE[1]、[2]

PDCMDWAITTIME[1]、[2]

PDCMMTBFDDL[1]、[2]

PDCNSTRNTNAME[1]、[2]

PDCONNECTWAITTIME[1]、[2]

PDCONREFRCOUNT[1]、[2]

PDCONREFRINTERVAL[1]、[2]

pdcpp[1]

PDCURSORLVL[1]、[2]

PDCWAITTIME[1]、[2]

PDCWAITTIMEWRNPNT[1]、[2]

PDDBACCS[1]、[2]

PDDBBUFLRU[1]、[2]

PDDBLOG[1]、[2]

PDDBORGUAP[1]、[2]

PDDDLDEAPRP[1]、[2]

PDDDLDEAPRPEXE[1]、[2]

PDDEFAULTOPTION[1]、[2]

PDDELRSVWDFILE[1]、[2]

PDDFLNVAL[1]、[2]

PDDLKPRIO[1]、[2]

PDDNDPCOMPATIBLE[1]、[2]

PDDNDPTRACE[1]、[2]

PDERRSKIPCODE[1]、[2]

PDEXTDECCHECK[1]、[2]

PDEXWARN[1]、[2]

PDFESGRP[1]、[2]

PDFESHOST[1]、[2]

PDFORUPDATEEXLOCK[1]、[2]

PDGDATAOPT[1]、[2]

PDHASHTBLSIZE[1]、[2]

PDHATRNQUEUING[1]、[2]

PDHOST[1]、[2]

PDHSICOPTIONS[1]、[2]

PDIPC[1]、[2]

PDIPCFILEDIR[1]

PDISLLVL[1]、[2]

PDJDBFILEDIR[1]、[2]

PDJDBFILEOUTNUM[1]、[2]

PDJDBFILESIZE[1]、[2]

PDJDBONMEMNUM[1]、[2]

PDJDBTRACELEVEL[1]、[2]

PDJETCOMPATIBLE[1]、[2]

PDKALVL[1]、[2]

PDKATIME[1]、[2]

PDLANG[1]、[2]

PDLCKWAITTIME[1]、[2]

PDLOCKLIMIT[1]、[2]

PDLOCKSKIP[1]、[2]

PDNAMEPORT[1]、[2]

PDNBLOCKWAITTIME[1]、[2]

pdocb[1]

pdocc[1]

PDODBCWRNSKIP[1]、[2]

PDODBESCAPE[1]、[2]

PDODBGINFOSUPPRESS[1]、[2]

PDODBLOCATOR[1]、[2]

PDODBSPLITSIZE[1]、[2]

PDODBSTANDARDARGSIZE[1]、[2]

PDODBSTANDARDDESCCOL[1]、[2]

PDODBSTANDARDGTYPEINFO[1]、[2]

PDODBSTANDARDSQLSTATE[1]、[2]

PDODBSTATCACHE[1]、[2]

PDPLGIXMK[1]、[2]

PDPLGPFSZ[1]、[2]

PDPLGPFSZEXP[1]、[2]

PDPLUGINNSUB[1]、[2]

PDPRMTRC[1]、[2]

PDPRMTRCSIZE[1]、[2]

PDPRPCRCLS[1]、[2]

PDRCCOUNT[1]、[2]

PDRCINTERVAL[1]、[2]

PDRCTIMING[1]、[2]

PDRCTRACE[1]、[2]

PDRDCLTCODE[1]、[2]

PDRECVMEMSIZE[1]、[2]

PDREPPATH[1]、[2]

PDSENDMEMSIZE[1]、[2]

PDSERVICEGRP[1]、[2]

PDSERVICEPORT[1]、[2]

PDSPACELVL[1]、[2]

PDSQLEXECTIME[1]、[2]

PDSQLOPTLVL[1]、[2]

PDSQLTEXTSIZE[1]、[2]

PDSQLTRACE[1]、[2]

PDSQLTRCFMT[1]、[2]

PDSQLTRCOPENMODE[1]、[2]

PDSRVTYPE[1]、[2]

PDSTANDARDSQLSTATE[1]、[2]

PDSTJTRNOUT[1]、[2]

PDSUBSTRLEN[1]、[2]

PDSWAITTIME[1]、[2]

PDSWATCHTIME[1]、[2]

PDSYSTEMID[1]、[2]

PDTAAPINFMODE[1]、[2]

PDTAAPINFPATH[1]、[2]

PDTAAPINFSIZE[1]、[2]

PDTIMEDOUTRETRY[1]、[2]

PDTMID[1]、[2]

PDTMPTBLRDAREA[1]、[2]

PDTP1SERVICE[1]、[2]

pdtrcmgr[1]

PDTRCMODE[1]、[2]

PDTRCPATH[1]、[2]

PDTXACANUM[1]、[2]

PDUAPENVFILE[1]、[2]

PDUAPERLOG[1]、[2]

PDUAPEXERLOGPRMSZ[1]、[2]

PDUAPEXERLOGUSE[1]、[2]

PDUAPREPLVL[1]、[2]

PDUSER[1]、[2]

PDVWOPTMODE[1]、[2]

PDWRTLNCOMSZ[1]、[2]

PDWRTLNFILSZ[1]、[2]

PDWRTLNPATH[1]、[2]

PDXAAUTORECONNECT[1]、[2]

PDXAMODE[1]、[2]

PDXARCVWTIME[1]、[2]

PDXATRCFILEMODE[1]、[2]

PLUGIN INDEX SCAN〔SQLの最適化〕[1]

PLUGIN KEY SCAN〔SQLの最適化〕[1]

PooledConnectionインタフェース〔JDBC2.0 Optional Package〕[1]

position(Blob pattern, long start)〔Blobインタフェース〕[1]

position(byte[] pattern, long start)〔Blobインタフェース〕[1]

prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)〔Connectionインタフェース〕[1]

prepareCall(String sql, int resultSetType, int resultSetConcurrency)〔Connectionインタフェース〕[1]

prepareCall(String sql)〔Connectionインタフェース〕[1]

PreparedStatementインタフェース〔JDBC1.2 コアAPI〕[1]

PreparedStatementクラス〔JDBC1.0機能〕[1]

PreparedStatementクラス〔Type2 JDBCドライバ〕[1]

prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)〔Connectionインタフェース〕[1]

prepareStatement(String sql, int resultSetType, int resultSetConcurrency)〔Connectionインタフェース〕[1]

prepareStatement(String sql)〔Connectionインタフェース〕[1]

PREPARE文で前処理できるSQL[1]

previous()〔ResultSetインタフェース〕[1]

PRモード[1]

PURGE TABLE文[1]

PUモード[1]

PythonアプリケーションからのHiRDBアクセス[1]

R

RDエリア名を指定した検索，更新，又は削除[1]

registerOutParameter(int parameterIndex, int sqlType, int scale)〔CallableStatementインタフェース〕[1]

registerOutParameter(int parameterIndex, int sqlType)〔CallableStatementインタフェース〕[1]

registerOutParameter(String parameterName, int sqlType, int scale)〔CallableStatementインタフェース〕[1]

registerOutParameter(String parameterName, int sqlType)〔CallableStatementインタフェース〕[1]

relative(int rows)〔ResultSetインタフェース〕[1]

removeConnectionEventListener(ConnectionEventListener listener)〔PooledConnectionインタフェース〕[1]

removeStatementEventListener(StatementEventListener listener)〔PooledConnectionインタフェース〕[1]

ResultSetMetaDataインタフェース〔JDBC1.2 コアAPI〕[1]

ResultSetMetaDataクラス〔JDBC1.0機能〕[1]

ResultSetMetaDataクラス〔Type2 JDBCドライバ〕[1]

ResultSetインタフェース〔JDBC1.2 コアAPI〕[1]

ResultSetクラス〔JDBC1.0機能〕[1]

ResultSetクラス〔Type2 JDBCドライバ〕[1]

rollback()〔Connectionインタフェース〕[1]

ROWID FETCH〔SQLの最適化〕[1]

ROW VALUE SUBQ〔SQLの最適化〕[1]

R-LIST NESTED LOOPS JOIN〔SQLの最適化〕[1]

S

SELECT文で検索[1]

SELECT文のFROM句[1]

SELECT文の選択句[1]

SELECT文のハッシュジョイン最大数[1]

SELECT-APSL〔SQLの最適化〕[1]、[2]、[3]、[4]

setArray(int i,Array x)〔PreparedStatementインタフェース〕[1]

setAsciiStream(int parameterIndex, java.io.InputStream x, int length)〔PreparedStatementインタフェース〕[1]

setAsciiStream(String parameterName, java.io.InputStream x, int length)〔CallableStatementインタフェース〕[1]

setAutoCommit(boolean autoCommit)〔Connectionインタフェース〕[1]

setBatchExceptionBehavior〔Type4 JDBCドライバ〕[1]

setBigDecimal(int parameterIndex, BigDecimal x)〔PreparedStatementインタフェース〕[1]

setBigDecimal(String parameterName, java.math.BigDecimal x)〔CallableStatementインタフェース〕[1]

setBinaryStream(int parameterIndex, java.io.InputStream x, int length)〔PreparedStatementインタフェース〕[1]

setBinaryStream(String parameterName, java.io.InputStream x, int length)〔CallableStatementインタフェース〕[1]

setBlob(int parameterIndex, Blob x)〔PreparedStatementインタフェース〕[1]

setBlockUpdate〔Type2 JDBCドライバ〕[1]、[2]

setBoolean(int parameterIndex, boolean x)〔PreparedStatementインタフェース〕[1]

setBoolean(String parameterName, boolean x)〔CallableStatementインタフェース〕[1]

setByte(int parameterIndex, byte x)〔PreparedStatementインタフェース〕[1]

setByte(String parameterName, byte x)〔CallableStatementインタフェース〕[1]

setBytes(int parameterIndex, byte x[])〔PreparedStatementインタフェース〕[1]

setBytes(String parameterName,byte[] x)〔CallableStatementインタフェース〕[1]

setCatalog(String catalog)〔Connectionインタフェース〕[1]

setCharacterStream(int parameterIndex, Reader reader, int length)〔PreparedStatementインタフェース〕[1]

setCharacterStream(String parameterName, Reader x, int length)〔CallableStatementインタフェース〕[1]

setClear_Env〔Type2 JDBCドライバ〕[1]

setCommit_Behavior〔Type2 JDBCドライバ〕[1]

setCursorName(String name)〔Statementインタフェース〕[1]

setDate(int parameterIndex, java.sql.Date x,Calendar cal)〔PreparedStatementインタフェース〕[1]

setDate(int parameterIndex, java.sql.Date x)〔PreparedStatementインタフェース〕[1]

setDate(String parameterName, java.sql.Date x,Calendar cal)〔CallableStatementインタフェース〕[1]

setDate(String parameterName, java.sql.Date x)〔CallableStatementインタフェース〕[1]

setDBHostName〔Type2 JDBCドライバ〕[1]

setDBHostName〔Type4 JDBCドライバ〕[1]

setDescription〔Type2 JDBCドライバ〕[1]

setDescription〔Type4 JDBCドライバ〕[1]

setDouble(int parameterIndex, double x)〔PreparedStatementインタフェース〕[1]

setDouble(String parameterName, double x)〔CallableStatementインタフェース〕[1]

setEncodeLang〔Type2 JDBCドライバ〕[1]

setEncodeLang〔Type4 JDBCドライバ〕[1]

setEnvironmentVariables〔Type4 JDBCドライバ〕[1]

setEscapeProcessing(boolean enable)〔Statementインタフェース〕[1]

setFetchDirection(int direction)〔ResultSetインタフェース〕[1]

setFetchDirection(int direction)〔Statementインタフェース〕[1]

setFetchSize(int rows)〔ResultSetインタフェース〕[1]

setFetchSize(int rows)〔Statementインタフェース〕[1]

setFloat(int parameterIndex, float x)〔PreparedStatementインタフェース〕[1]

setFloat(String parameterName, float x)〔CallableStatementインタフェース〕[1]

setHiRDB_Audit_Info(int pos，String userinf)〔Connectionインタフェース〕[1]

setHiRDBCursorMode〔Type4 JDBCドライバ〕[1]

setHiRDBINI〔Type4 JDBCドライバ〕[1]

setHoldability(int holdability)〔Connectionインタフェース〕[1]

setInt(int parameterIndex, int x)〔PreparedStatementインタフェース〕[1]

setInt(String parameterName, int x)〔CallableStatementインタフェース〕[1]

setJDBC_IF_TRC〔Type4 JDBCドライバ〕[1]

setLoginTimeout(int seconds)〔ConnectionPoolDataSourceインタフェース〕[1]

setLoginTimeout(int seconds)〔DataSourceインタフェース〕[1]

setLogWriter(PrintWriter out)〔ConnectionPoolDataSourceインタフェース〕[1]

setLogWriter(PrintWriter out)〔DataSourceインタフェース〕[1]

setLong(int parameterIndex, long x)〔PreparedStatementインタフェース〕[1]

setLong(String parameterName, long x)〔CallableStatementインタフェース〕[1]

setLONGVARBINARY_AccessSize〔Type4 JDBCドライバ〕[1]

setLONGVARBINARY_Access〔Type2 JDBCドライバ〕[1]

setLONGVARBINARY_Access〔Type4 JDBCドライバ〕[1]

setLONGVARBINARY_TruncError〔Type4 JDBCドライバ〕[1]

setMaxBinarySize〔Type4 JDBCドライバ〕[1]

setMaxFieldSize(int max)〔Statementインタフェース〕[1]

setMaxRows(int max)〔Statementインタフェース〕[1]

setNotErrorOccurred〔Type4 JDBCドライバ〕[1]

setNull(int parameterIndex,int sqlType)〔PreparedStatementインタフェース〕[1]

setNull(String parameterName,int sqlType)〔CallableStatementインタフェース〕[1]

setObject(int parameterIndex, Object x, int targetSqlType, int scale)〔PreparedStatementインタフェース〕[1]

setObject(int parameterIndex, Object x, int targetSqlType)〔PreparedStatementインタフェース〕[1]

setObject(int parameterIndex, Object x)〔PreparedStatementインタフェース〕[1]

setObject(String parameterName, Object x, int targetSqlType, int scale)〔CallableStatementインタフェース〕[1]

setObject(String parameterName, Object x, int targetSqlType)〔CallableStatementインタフェース〕[1]

setObject(String parameterName, Object x)〔CallableStatementインタフェース〕[1]

setPassword〔Type2 JDBCドライバ〕[1]

setPassword〔Type4 JDBCドライバ〕[1]

setQueryTimeout(int seconds)〔Statementインタフェース〕[1]

setReadOnly(boolean readOnly)〔Connectionインタフェース〕[1]

setReceiveBufferSize〔Type4 JDBCドライバ〕[1]

setRMID〔Type2 JDBCドライバ〕[1]

setSendBufferSize〔Type4 JDBCドライバ〕[1]

setShort(int parameterIndex, short x)〔PreparedStatementインタフェース〕[1]

setShort(String parameterName, short x)〔CallableStatementインタフェース〕[1]

setSQLInNum〔Type2 JDBCドライバ〕[1]

setSQLInNum〔Type4 JDBCドライバ〕[1]

setSQLOutNum〔Type2 JDBCドライバ〕[1]

setSQLOutNum〔Type4 JDBCドライバ〕[1]

setSQLWarningIgnore[1]

setSQLWarningLevel〔Type2 JDBCドライバ〕[1]

setSQLWarningLevel〔Type4 JDBCドライバ〕[1]

setStatementCommitBehavior〔Type4 JDBCドライバ〕[1]

setString(int parameterIndex, String x)〔PreparedStatementインタフェース〕[1]

setString(String parameterName, String x)〔CallableStatementインタフェース〕[1]

setTime(int parameterIndex, java.sql.Time x,Calendar cal)〔PreparedStatementインタフェース〕[1]

setTime(int parameterIndex, java.sql.Time x)〔PreparedStatementインタフェース〕[1]

setTime(String parameterName, java.sql.Time x,Calendar cal)〔CallableStatementインタフェース〕[1]

setTime(String parameterName, Time x)〔CallableStatementインタフェース〕[1]

setTimestamp(int parameterIndex, java.sql.Timestamp x,Calendar cal)〔PreparedStatementインタフェース〕[1]

setTimestamp(int parameterIndex, java.sql.Timestamp x)〔PreparedStatementインタフェース〕[1]

setTimestamp(String parameterName, java.sql.Timestamp x,Calendar cal)〔CallableStatementインタフェース〕[1]

setTimestamp(String parameterName, java.sql.Timestamp x)〔CallableStatementインタフェース〕[1]

setTransactionIsolation(int level)〔Connectionインタフェース〕[1]

setTRC_NO〔Type4 JDBCドライバ〕[1]

setUapName〔Type4 JDBCドライバ〕[1]

setUpdateCountBehavior〔Type4 JDBCドライバ〕[1]

setUser〔Type2 JDBCドライバ〕[1]

setUser〔Type4 JDBCドライバ〕[1]

setXACloseString〔Type2 JDBCドライバ〕[1]

setXACloseString〔Type4 JDBCドライバ〕[1]

setXALocalCommitMode〔Type4 JDBCドライバ〕[1]

setXAOpenString〔Type2 JDBCドライバ〕[1]

setXAOpenString〔Type4 JDBCドライバ〕[1]

setXAThreadMode〔Type2 JDBCドライバ〕[1]

SORT MERGE JOIN〔SQLの最適化〕[1]

SQL_ACCESS_SECURITY表の内容[1]

SQL_AUDITS表の内容[1]

SQL_CHECK_COLUMNS表の内容[1]

SQL_CHECKS表の内容[1]

SQL_COLUMN_STATISTICS表の内容[1]

SQL_COLUMNS表の内容[1]

SQL_DATATYPE_DESCRIPTORS表の内容[1]

SQL_DATATYPES表の内容[1]

SQL_DIV_COLUMN表の内容[1]

SQL_DIV_INDEX表の内容[1]

SQL_DIV_TABLE表の内容[1]

SQL_DIV_TYPE表の内容[1]

SQL_EXCEPT表の内容[1]

SQL_INDEX_COLINF表の内容[1]

SQL_INDEX_DATATYPE表の内容[1]

SQL_INDEX_FUNCTION表の内容[1]

SQL_INDEX_RESOURCES表の内容[1]

SQL_INDEX_STATISTICS表の内容[1]

SQL_INDEX_TYPE_FUNCTION表の内容[1]

SQL_INDEX_TYPES表の内容[1]

SQL_INDEX_XMLINF表の内容[1]

SQL_INDEXES表の内容[1]

SQL_IOS_GENERATIONS表の内容[1]

SQL_KEYCOLUMN_USAGE表の内容[1]

SQL_PARTKEY_DIVISION表の内容[1]

SQL_PARTKEY表の内容[1]

SQL_PHYSICAL_FILES表の内容[1]

SQL_PLUGIN_ROUTINE_PARAMS表の内容[1]

SQL_PLUGIN_ROUTINES表の内容[1]

SQL_PLUGINS表の内容[1]

SQL_RDAREA_PRIVILEGES表の内容[1]

SQL_RDAREAS表の内容[1]

SQL_REFERENTIAL_CONSTRAINTS表の内容[1]

SQL_ROUTINE_PARAMS表の内容[1]

SQL_ROUTINE_RESOURCES表の内容[1]

SQL_ROUTINES表の内容[1]

SQL_SEQUENCES表の内容[1]

SQL_SYSPARAMS表の内容[1]

SQL_TABLE_CONSTRAINTS表の内容[1]

SQL_TABLE_PRIVILEGES表の内容[1]

SQL_TABLE_RESOURCES表の内容[1]

SQL_TABLE_STATISTICS表の内容[1]

SQL_TABLES表の内容[1]

SQL_TRIGGER_COLUMNS表の内容[1]

SQL_TRIGGER_DEF_SOURCE表の内容[1]

SQL_TRIGGER_USAGE表の内容[1]

SQL_TRIGGERS表の内容[1]

SQL_TYPE_RESOURCES表の内容[1]

SQL_USERS表の内容[1]

SQL_VIEW_TABLE_USAGE表の内容[1]

SQL_VIEWS表の内容[1]

SQLClientInfoException[1]

SQLDataException[1]

SQLExceptionインタフェース〔JDBC1.2 コアAPI〕[1]

SQLFeatureNotSupportedException[1]

SQLIntegrityConstraintViolationException[1]

SQLInvalidAuthorizationException[1]

SQLJ[1]

SQLJトランスレータ[1]、[2]

SQLJランタイムライブラリ[1]

SQLNonTransientConnectionException[1]

SQLNonTransientException[1]

SQLRecoverableException[1]

SQLSyntaxErrorException[1]

SQLTimeoutException[1]

SQLTransactionRollbackException[1]

SQLTransientConnectionException[1]

SQLTransientException[1]

SQLWarningインタフェース〔JDBC1.2 コアAPI〕[1]

SQLWarningクラス〔JDBC1.0機能〕[1]

SQL拡張最適化オプション[1]、[2]

SQL記述領域[1]

SQL記述領域操作用マクロ[1]

SQL記述領域との関係[1]

SQL記述領域に設定するデータコードとデータの長さ[1]

SQL記述領域の構成[1]

SQL記述領域の使用例[1]

SQL記述領域の展開[1]

SQL記述領域の展開方法[1]

SQL記述領域の内容[1]

SQL最適化オプション[1]、[2]

SQL最適化指定[1]

SQL最適化モード[1]

SQL実行時の中間結果情報[1]

SQL実行時の中間結果情報容量[1]

SQLストアドファンクションの実行[1]

SQLストアドファンクションの定義[1]

SQLストアドプロシジャの実行[1]

SQLストアドプロシジャの定義[1]

SQL単位の情報[1]

SQLトレース機能[1]

SQLトレース情報の取得方法[1]

SQLトレース情報の見方[1]

SQLトレース動的取得機能[1]

SQLトレースの解析[1]

SQLトレースファイル[1]

SQLトレースファイルのバックアップの取得[1]

SQLのエラーの判定と処置[1]

SQLの記述[1]

SQLの記述規則〔C++言語によるUAPの作成〕[1]

SQLの記述規則〔COBOL言語によるUAPの作成〕[1]

SQLの記述規則〔C言語によるUAPの作成〕[1]

SQLの記述規則〔OOCOBOL言語によるUAPの作成〕[1]

SQLの機能体系[1]

SQLの最適化[1]

SQLの最適化の指定方法[1]

SQLの実行時に与えられる値[1]

SQLのデータ型とCOBOL言語のデータ記述[1]

SQLのデータ型とC言語のデータ記述[1]

SQLプリプロセサがサポートしているロケール名[1]

SQLプリプロセサの起動[1]、[2]、[3]、[4]

SQLプリプロセサの標準入出力（UNIX環境でのCOBOL言語の場合）[1]

SQLプリプロセサの標準入出力（UNIX環境でのC言語の場合）[1]

SQLプリプロセサの標準入出力（Windows環境でのCOBOL言語の場合）[1]

SQLプリプロセサの標準入出力（Windows環境でのC言語の場合）[1]

SQLプリプロセサのリターンコード（UNIX環境でのCOBOL言語の場合）[1]

SQLプリプロセサのリターンコード（UNIX環境でのC言語の場合）[1]

SQLプリプロセサのリターンコード（Windows環境でのCOBOL言語の場合）[1]

SQLプリプロセサのリターンコード（Windows環境でのC言語の場合）[1]

SQL文の実行状態と変数に設定される値の関係[1]

SQL文を記述できる箇所[1]

SQL連絡領域[1]、[2]

SQL連絡領域の構成[1]

SQL連絡領域の展開[1]

SQL連絡領域の内容[1]

SRモード[1]

StatementEventListener[1]

Statementインタフェース〔JDBC1.2 コアAPI〕[1]

Statementクラス〔JDBC1.0機能〕[1]

Statementクラス〔Type2 JDBCドライバ〕[1]

storesLowerCaseIdentifiers()〔DatabaseMetaDataインタフェース〕[1]

storesLowerCaseQuotedIdentifiers()〔DatabaseMetaDataインタフェース〕[1]

storesMixedCaseIdentifiers()〔DatabaseMetaDataインタフェース〕[1]

storesMixedCaseQuotedIdentifiers()〔DatabaseMetaDataインタフェース〕[1]

storesUpperCaseIdentifiers()〔DatabaseMetaDataインタフェース〕[1]

storesUpperCaseQuotedIdentifiers()〔DatabaseMetaDataインタフェース〕[1]

SUM[1]

supportsAlterTableWithAddColumn()〔DatabaseMetaDataインタフェース〕[1]

supportsAlterTableWithDropColumn()〔DatabaseMetaDataインタフェース〕[1]

supportsANSI92EntryLevelSQL()〔DatabaseMetaDataインタフェース〕[1]

supportsANSI92FullSQL()〔DatabaseMetaDataインタフェース〕[1]

supportsANSI92IntermediateSQL()〔DatabaseMetaDataインタフェース〕[1]

supportsBatchUpdates()〔DatabaseMetaDataインタフェース〕[1]

supportsCatalogsInDataManipulation()〔DatabaseMetaDataインタフェース〕[1]

supportsCatalogsInIndexDefinitions()〔DatabaseMetaDataインタフェース〕[1]

supportsCatalogsInPrivilegeDefinitions()〔DatabaseMetaDataインタフェース〕[1]

supportsCatalogsInProcedureCalls()〔DatabaseMetaDataインタフェース〕[1]

supportsCatalogsInTableDefinitions()〔DatabaseMetaDataインタフェース〕[1]

supportsColumnAliasing()〔DatabaseMetaDataインタフェース〕[1]

supportsConvert()〔DatabaseMetaDataインタフェース〕[1]

supportsConvert(int fromType, int toType)〔DatabaseMetaDataインタフェース〕[1]

supportsCoreSQLGrammar()〔DatabaseMetaDataインタフェース〕[1]

supportsCorrelatedSubqueries()〔DatabaseMetaDataインタフェース〕[1]

supportsDataDefinitionAndDataManipulationTransactions()〔DatabaseMetaDataインタフェース〕[1]

supportsDataManipulationTransactionsOnly()〔DatabaseMetaDataインタフェース〕[1]

supportsDifferentTableCorrelationNames()〔DatabaseMetaDataインタフェース〕[1]

supportsExpressionsInOrderBy()〔DatabaseMetaDataインタフェース〕[1]

supportsExtendedSQLGrammar()〔DatabaseMetaDataインタフェース〕[1]

supportsFullOuterJoins()〔DatabaseMetaDataインタフェース〕[1]

supportsGetGeneratedKeys()〔DatabaseMetaDataインタフェース〕[1]

supportsGroupBy()〔DatabaseMetaDataインタフェース〕[1]

supportsGroupByBeyondSelect()〔DatabaseMetaDataインタフェース〕[1]

supportsGroupByUnrelated()〔DatabaseMetaDataインタフェース〕[1]

supportsIntegrityEnhancementFacility()〔DatabaseMetaDataインタフェース〕[1]

supportsLikeEscapeClause()〔DatabaseMetaDataインタフェース〕[1]

supportsLimitedOuterJoins()〔DatabaseMetaDataインタフェース〕[1]

supportsMinimumSQLGrammar()〔DatabaseMetaDataインタフェース〕[1]

supportsMixedCaseIdentifiers()〔DatabaseMetaDataインタフェース〕[1]

supportsMixedCaseQuotedIdentifiers()〔DatabaseMetaDataインタフェース〕[1]

supportsMultipleOpenResults()〔DatabaseMetaDataインタフェース〕[1]

supportsMultipleResultSets()〔DatabaseMetaDataインタフェース〕[1]

supportsMultipleTransactions()〔DatabaseMetaDataインタフェース〕[1]

supportsNamedParameters()〔DatabaseMetaDataインタフェース〕[1]

supportsNonNullableColumns()〔DatabaseMetaDataインタフェース〕[1]

supportsOpenCursorsAcrossCommit()〔DatabaseMetaDataインタフェース〕[1]

supportsOpenCursorsAcrossRollback()〔DatabaseMetaDataインタフェース〕[1]

supportsOpenStatementsAcrossCommit()〔DatabaseMetaDataインタフェース〕[1]

supportsOpenStatementsAcrossRollback()〔DatabaseMetaDataインタフェース〕[1]

supportsOrderByUnrelated()〔DatabaseMetaDataインタフェース〕[1]

supportsOuterJoins()〔DatabaseMetaDataインタフェース〕[1]

supportsPositionedDelete()〔DatabaseMetaDataインタフェース〕[1]

supportsPositionedUpdate()〔DatabaseMetaDataインタフェース〕[1]

supportsResultSetConcurrency(int type, int concurrency)〔DatabaseMetaDataインタフェース〕[1]

supportsResultSetHoldability(int holdability)〔DatabaseMetaDataインタフェース〕[1]

supportsResultSetType(int type)〔DatabaseMetaDataインタフェース〕[1]

supportsSavepoints()〔DatabaseMetaDataインタフェース〕[1]

supportsSchemasInDataManipulation()〔DatabaseMetaDataインタフェース〕[1]

supportsSchemasInIndexDefinitions()〔DatabaseMetaDataインタフェース〕[1]

supportsSchemasInPrivilegeDefinitions()〔DatabaseMetaDataインタフェース〕[1]

supportsSchemasInProcedureCalls()〔DatabaseMetaDataインタフェース〕[1]

supportsSchemasInTableDefinitions()〔DatabaseMetaDataインタフェース〕[1]

supportsSelectForUpdate()〔DatabaseMetaDataインタフェース〕[1]

supportsStatementPooling()〔DatabaseMetaDataインタフェース〕[1]

supportsStoredFunctionsUsingCallSyntax()〔DatabaseMetaDataインタフェース〕[1]

supportsStoredProcedures()〔DatabaseMetaDataインタフェース〕[1]

supportsSubqueriesInComparisons()〔DatabaseMetaDataインタフェース〕[1]

supportsSubqueriesInExists()〔DatabaseMetaDataインタフェース〕[1]

supportsSubqueriesInIns()〔DatabaseMetaDataインタフェース〕[1]

supportsSubqueriesInQuantifieds()〔DatabaseMetaDataインタフェース〕[1]

supportsTableCorrelationNames()〔DatabaseMetaDataインタフェース〕[1]

supportsTransactionIsolationLevel(int level)〔DatabaseMetaDataインタフェース〕[1]

supportsTransactions()〔DatabaseMetaDataインタフェース〕[1]

supportsUnion()〔DatabaseMetaDataインタフェース〕[1]

supportsUnionAll()〔DatabaseMetaDataインタフェース〕[1]

SUモード[1]

T

TABLE SCAN〔SQLの最適化〕[1]

TRUE[1]

Type2 JDBCドライバ[1]

Type4 JDBCドライバ[1]

U

UAPからのコマンド実行[1]

UAP実行時の注意事項[1]

UAP実行前の準備[1]

UAP障害の回復[1]

UAP中でのSQLの基本構成[1]

UAPで使用するデータ型とアクセサ[1]

UAPでできる排他制御[1]

UAPとHiRDBとのインタフェース[1]

UAP統計レポート機能[1]

UAP統計レポートの取得方法[1]

UAP統計レポートの見方[1]

UAPの開発の流れ[1]

UAPの記述[1]

UAPの記述言語[1]

UAPの基本構成[1]

UAPの形式[1]

UAPの構成要素[1]

UAPの作成[1]

UAPの実行手順[1]

UAPの障害対策[1]

UAPの設計[1]

UAPの動作環境[1]

UAPの特長[1]

Unicode[1]

UNKNOWN[1]

unwrap(Class<T> iface)〔Wrapperインタフェース〕[1]

updatesAreDetected(int type)〔DatabaseMetaDataインタフェース〕[1]

UPDATE文のSET句[1]

UPDATE文のWHERE句[1]

usesLocalFilePerTable()〔DatabaseMetaDataインタフェース〕[1]

usesLocalFiles()〔DatabaseMetaDataインタフェース〕[1]

UTF-16[1]

UTF-8[1]

W

wasNull()〔CallableStatementインタフェース〕[1]

wasNull()〔ResultSetインタフェース〕[1]

WORK TABLE ATS SUBQ〔SQLの最適化〕[1]

WORK TABLE SUBQ〔SQLの最適化〕[1]

Wrapperインタフェース〔JDBC4.0 API〕[1]

X

X/Openに従ったAPI（TX_関数）を使用したUAPの実行[1]

XAConnectionインタフェース〔JDBC2.0 Optional Package〕[1]

XADataSourceインタフェース〔JDBC2.0 Optional Package〕[1]

XAExceptionインタフェース〔JDBC2.0 Optional Package〕[1]

XAResourceインタフェース〔JDBC2.0 Optional Package〕[1]

XDM/RDとUNIFY2000で作成したUAPの移行性[1]

XML型全文検索用インデクスを使用した検索[1]

あ

アウタジョイン[1]

アクセスパス情報[1]

アクセスパス情報の容量[1]

値式に対する結合条件適用機能〔SQL拡張最適化オプション〕[1]

アプリケーション構成ファイル[1]

アンインストール[1]

い

一意性制約[1]

一時表〔環境変数〕[1]

一時表行挿入情報[1]

位置付け子機能[1]

一括ハッシュジョイン〔ハッシュジョインの処理方式〕[1]

意図共用モード[1]

意図排他モード[1]

インストール[1]

インストール〔Type2 JDBCドライバ〕[1]

インストール〔Type4 JDBCドライバ〕[1]

インタフェース[1]

インタフェース領域の種類と使用目的[1]

インデクス型プラグイン専用関数[1]

インデクスキー値の排他資源の作成方法[1]

インデクスキー値無排他[1]、[2]、[3]

インデクス検索時の留意事項[1]

インデクススキャン〔SQLの最適化〕[1]

インデクスの提案[1]

インデクス利用の抑止〔SQL最適化オプション〕[1]

インナレプリカ機能を使用した場合の絞込み検索[1]

う

ウィンドウ関数[1]

埋込みSQL宣言節内で記述できる項目[1]

埋込みSQL宣言節の不要化[1]

埋込み型[1]、[2]

埋込み型UAPの概要[1]

埋込み変数及び標識変数の宣言[1]

え

エスケープ句[1]

エスケープ句で指定できるスカラ関数[1]

エラー検出時の対処[1]

エラー時の処置の指定[1]

エラーの自動判定[1]

エラーの判定[1]、[2]

お

オブジェクトファイルの作成[1]

オブジェクトリレーショナルデータベースの表[1]

オペレーションコード[1]

か

カーソル宣言[1]、[2]

カーソル宣言と排他の関係[1]

カーソルの効果[1]

カーソルの更新可能性とカーソルを使用しない操作との関連[1]

カーソルの使用例[1]

カーソルの定義[1]

カーソルの利用[1]

カーソルライブラリの設定[1]

カーソルを使用した検索[1]

カーソルを使用した検索行の更新[1]

カーソルを使用した更新[1]

カーソルを使用した削除[1]

カーソルを使用しない検索[1]

カーソルを閉じる[1]

カーソルを開く[1]

外結合内結合変換機能〔SQL拡張最適化オプション〕[1]

外部Cストアドルーチン[1]

外部Cストアドルーチンの作成[1]

外部Cストアドルーチンの実行[1]

外部Cストアドルーチンの定義[1]

外部Cストアドルーチンの特長[1]

外部Javaストアドルーチン[1]

外部Javaストアドルーチン実行前の準備[1]

外部Javaストアドルーチンの作成[1]

外部Javaストアドルーチンの実行[1]

外部Javaストアドルーチンの定義[1]

外部Javaストアドルーチンの特長[1]

拡張SQLエラー情報出力機能[1]

型名記述領域[1]

型名記述領域の構成[1]

型名記述領域の展開[1]

型名記述領域の内容[1]

環境設定〔Type2 JDBCドライバ〕[1]

環境設定〔Type4 JDBCドライバ〕[1]

環境変数〔HiRDB SQL Tuning Advisor用アクセスパス情報ファイル〕[1]

環境変数〔JDBCドライバ〕[1]

環境変数〔ODBC関数〕[1]

環境変数〔OLTP下のX/Openに従ったAPIを使用するクライアント〕[1]

環境変数〔SQL関連〕[1]

環境変数〔UAPからのコマンド実行〕[1]

環境変数〔UAPに関する統計情報の出力単位〕[1]

環境変数〔XDM/RD E2接続機能〕[1]

環境変数〔アクセスパス表示ユティリティ用アクセスパス情報ファイル〕[1]

環境変数〔インナレプリカ機能〕[1]

環境変数グループ[1]

環境変数〔更新可能なオンライン再編成〕[1]

環境変数〔参照制約及び検査制約〕[1]

環境変数〔システム監視〕[1]

環境変数〔システム構成〕[1]

環境変数〔データの空白変換〕[1]

環境変数〔トラブルシュート〕[1]

環境変数のグループ登録[1]

環境変数の指定方法〔OpenTP1下のUAPをクライアントとする場合〕[1]

環境変数の指定方法〔TP1/EE下のUAPをクライアントとする場合〕[1]

環境変数の指定方法〔TP1/LiNK下のUAPをクライアントとする場合〕[1]

環境変数の指定方法〔TPBroker for C++下のUAPをクライアントとする場合〕[1]

環境変数の指定方法〔TUXEDO下のUAPをクライアントとする場合〕[1]

環境変数の設定[1]

環境変数〔排他制御〕[1]

環境変数〔バックエンドサーバ接続保持機能〕[1]

環境変数〔プラグイン〕[1]

環境変数〔プロセス間メモリ通信機能〕[1]

環境変数〔ブロック転送機能〕[1]

環境変数〔ユーザ実行環境〕[1]

関数[1]

関数の作成方法[1]

き

キースキャン〔SQLの最適化〕[1]

記述規則[1]、[2]

行[1]

行識別子を使用した検索〔SQLの最適化〕[1]

行数[1]

行単位の行の挿入[1]

行単位の検索[1]

行単位の更新[1]

行値実行〔SQLの最適化〕[1]

行に掛かる排他制御の順序[1]

行の削除の処理手順[1]

行排他[1]、[2]

共用意図排他モード[1]

共用モード[1]

く

空集合[1]

空白変換関数[1]

クライアントエラーログ機能[1]

クライアントエラーログ情報の取得方法[1]

クライアントエラーログ情報の見方[1]

クライアントエラーログファイル[1]

クライアントエラーログファイルのバックアップの取得[1]

クライアント環境定義[1]

クライアント環境定義の一覧[1]

クライアント環境定義の設定内容[1]

クライアントの環境設定[1]

繰返し列がある表の更新[1]

繰返し列がある表への行の挿入[1]

繰返し列を?パラメタにしたときの値の指定方法[1]

繰返し列を使用した表[1]

グループの平均値[1]

グループ分け高速化機能[1]

グループ分け高速化処理〔SQL最適化オプション〕[1]

グループ分け高速化処理〔SQLの最適化〕[1]

グループ分け処理方式〔SQLの最適化〕[1]

グローバルデッドロック[1]

グローバルデッドロックの例[1]

け

結果集合返却機能（Javaストアドプロシジャ限定）[1]

結果集合返却機能（SQLストアドプロシジャ限定）[1]

結果セットの拡張〔JDBC2.0基本機能〕[1]

結果セットの拡張〔JDBC2.1 コアAPI〕[1]

結合処理情報[1]

結合方式〔SQLの最適化〕[1]

結合方式の種類〔SQLの最適化〕[1]

検索，更新のSQL（実行文）[1]

検索した内容を取り出してUAPの領域に格納[1]

検索方式〔SQLの最適化〕[1]

検査保留状態[1]、[2]

限定述語[1]

限定述語を使用した副問合せ[1]

こ

合計値[1]

更新SQLの作業表作成抑止〔SQL最適化オプション〕[1]

構成ファイル[1]、[2]

構造化繰返し述語を使用した検索[1]

構造体の参照[1]

高速接続機能[1]

コーディング例[1]、[2]、[3]、[4]、[5]

コストベース最適化モード1[1]

コストベース最適化モード2[1]

コストベース最適化モード2の適用〔SQL拡張最適化オプション〕[1]

コマンドトレース機能[1]

コマンドトレース情報の取得方法[1]

コマンドトレース情報の見方[1]

コマンドトレースファイルのバックアップの取得[1]

コミットしていない削除データの排他制御[1]

コンパイル[1]、[2]

コンパイル〔Javaファイル〕[1]

コンポネント指定[1]

さ

サーバ間で発生するデッドロック[1]

最小値[1]

最小排他資源単位の設定[1]

再接続トレース機能[1]

最大値[1]

最適化方法の種類[1]

採番業務で使用する表[1]

作業表ATS実行〔SQLの最適化〕[1]

作業表実行〔SQLの最適化〕[1]

作業表用バッファサイズの求め方[1]

サポートしていないインタフェース〔JDBC1.2 コアAPI〕[1]

サポートしていないインタフェース〔JDBC2.1 コアAPI〕[1]

し

時刻データの演算[1]

システムプロパティの設定〔Type2 JDBCドライバ〕[1]

実表[1]

実表検索処理情報[1]

指定できるクライアント環境定義〔Type4 JDBCドライバ〕[1]

自動再接続機能[1]

自動採番機能[1]

自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理〔SQL最適化オプション〕[1]

自バックエンドサーバでのグループ化，ORDER BY，DISTINCT集合関数処理〔SQLの最適化〕[1]

絞込み検索[1]

集合演算処理情報[1]

条件指定による更新[1]

条件指定による削除[1]

条件推移での探索高速化条件の導出[1]

す

数値データの四則演算[1]

スカラ演算を含むキー条件の適用〔SQL最適化オプション〕[1]

スカラ演算を含む条件に対するサーチ条件適用〔SQL拡張最適化オプション〕[1]

スカラ関数[1]

ストアドファンクション[1]

ストアドプロシジャ[1]

ストアドルーチン[1]

せ

整合性制約[1]

静的SQL[1]

静的SQLと動的SQLの実行時の特徴[1]

性能向上，操作性向上に関するUAPの設計[1]

接続情報の優先順位〔Type4 JDBCドライバ〕[1]

接続プーリング機能[1]

接続プール〔JDBC2.0 Optional Package〕[1]

先頭からn行の検索結果を取得する機能[1]

そ

総ヒット件数返却機能[1]

ソースプログラムの記述[1]

ソート[1]

外結合[1]

外への参照のある副問合せの実行方式〔SQLの最適化〕[1]

外への参照のない副問合せの実行方式〔SQLの最適化〕[1]

た

探索高速化条件の適用範囲[1]

探索高速化条件の導出[1]

探索高速化条件の導出〔SQL最適化オプション〕[1]

断続ハッシュジョイン〔ハッシュジョインの処理方式〕[1]

ち

抽象データ型がある表の行の削除[1]

抽象データ型がある表の検索[1]

抽象データ型がある表の更新[1]

抽象データ型がある表への行の挿入[1]

抽象データ型を含む表のデータ操作[1]

長時間SQLの時間監視[1]

重複したデータの排除[1]

つ

追加されたデータ型〔JDBC2.0基本機能〕[1]

追加されたデータ型〔JDBC2.1 コアAPI〕[1]

て

ディクショナリ表の検索方法[1]

ディクショナリ表の詳細[1]

データ型[1]

データ型〔Type2 JDBCドライバ〕[1]

データ型〔Type4 JDBCドライバ〕[1]

データ収集用サーバの分離機能〔SQL最適化オプション〕[1]

データ収集用サーバの分離機能〔SQLの最適化〕[1]

データディクショナリ一覧[1]

データディクショナリ表の検索[1]

データディクショナリ表を検索するSQL文の例[1]

データの演算[1]

データの加工[1]

データのグループ分け[1]

データの検索[1]

データの更新[1]

データの削除[1]

データの挿入[1]

データの取り出し[1]

データの並べ替え[1]

データベースの操作[1]

データ保証レベル[1]、[2]

データ保証レベル0[1]

データ保証レベル1[1]

データ保証レベル2[1]

テーブルスキャン〔SQLの最適化〕[1]

テスト〔外部Javaストアドルーチン〕[1]

手続きの作成方法[1]

デッドロック[1]

デッドロックが発生する処理と対策[1]

デッドロックの回避策[1]

デッドロックの検出[1]

デッドロックの対策[1]

デッドロックの発生要因[1]

デッドロックの例[1]

デッドロックプライオリティ値による排他制御[1]

デバッグ〔外部Javaストアドルーチン〕[1]

と

問合せ処理情報[1]

同期点の設定[1]、[2]、[3]

導出表の条件繰り込み機能〔SQL最適化オプション〕[1]

動的SELECT文[1]

動的SQL[1]

動的SQLの実行と留意点[1]

特定データの探索[1]

特定の文字パターンの探索[1]

トランザクション制御[1]

トランザクションの移行[1]

トランザクションの開始[1]、[2]

トランザクションの開始と終了[1]

トランザクションの無効化[1]

トランザクションの有効化[1]

トリガ[1]

トリガSQL文[1]

トリガ動作の探索条件[1]

トリガを引き起こすSQL[1]

トレース取得コマンド[1]

な

内部的に作成した作業表の検索〔SQLの最適化〕[1]

並べ替え[1]

ナル値でないデータの探索[1]

ね

ネイティブランタイム[1]

ネストループ行値実行〔SQLの最適化〕[1]

ネストループ作業表実行〔SQLの最適化〕[1]

ネストループジョイン〔SQLの最適化〕[1]

ネストループジョイン強制〔SQL最適化オプション〕[1]

ネストループジョイン優先〔SQL最適化オプション〕[1]

の

ノンブロックモード[1]

は

バージョン，リビジョンによるクライアント環境定義及びプリプロセスオプションの変更点[1]

バージョンアップした場合に必要な作業[1]

バージョンによるプリプロセスオプションの変更点[1]

排他資源とその包含関係[1]

排他時の参照[1]

排他制御[1]

排他制御の単位[1]

排他制御のモード[1]

排他制御のモードの組み合わせ〔インデクスキー値無排他〕[1]、[2]

排他制御のモードの組み合わせ〔行排他〕[1]、[2]

排他制御のモードの組み合わせ〔検査保留状態〕[1]、[2]

排他制御のモードの組み合わせ〔ページ排他〕[1]、[2]

排他制御のモードの遷移規則[1]

排他制御モードの違いによる2ユーザの同時実行性[1]

排他の開始と解放[1]

排他の期間[1]

排他モード[1]

配列を使用したDELETE機能[1]

配列を使用したFETCH機能[1]

配列を使用したINSERT機能[1]

配列を使用したUPDATE機能[1]

配列を使用した機能[1]

バケット分割ハッシュジョイン〔ハッシュジョインの処理方式〕[1]

ハッシュ実行〔SQLの最適化〕[1]、[2]

ハッシュジョイン，副問合せのハッシュ実行〔SQL拡張最適化オプション〕[1]

ハッシュジョイン，副問合せのハッシュ実行を適用する場合の準備[1]

ハッシュジョイン〔SQLの最適化〕[1]

ハッシュジョインの処理方式[1]

ハッシュ表サイズ[1]

ハッシュ表最大行長[1]

バッチ更新〔JDBC2.0基本機能〕[1]

バッチ更新〔JDBC2.1 コアAPI〕[1]

パブリックファンクション[1]

パブリックプロシジャ[1]

パブリックルーチン[1]

パラメタのデータ長及びデータタイプの仮定[1]

パラメタを含むXMLEXISTS述語への部分構造インデクスの有効化〔SQL拡張最適化オプション〕[1]

ひ

比較述語[1]

比較述語を使用したデータの探索[1]

比較条件[1]

日付データの演算[1]

非ナル値制約[1]

ビュー表[1]

ビュー表の操作[1]

ビュー表の定義[1]

ビュー表の定義と操作[1]

表に対する操作[1]

表の基本構成[1]

表の更新の処理手順[1]

表の全行削除[1]

表の外結合[1]

表分割ハッシュ関数[1]

ふ

複数インデクス利用の強制〔SQL最適化オプション〕[1]

複数接続機能[1]

複数接続機能を使用する場合のコンパイルとリンケージ[1]

複数トランザクションで検索と更新をする場合[1]

複数のSQLオブジェクト作成〔SQL最適化オプション〕[1]

複数の条件を満たすデータの探索[1]

複数の表からの検索[1]

副問合せ[1]

副問合せを使用した検索[1]

不正電文トレース[1]

部分構造インデクスを使用した検索[1]

プラグインインデクスでの他インデクス絞り込み結果の利用[1]

プラグインインデクスでの他インデクス絞り込み結果の利用の抑止〔SQL拡張最適化オプション〕[1]

プラグインが使用する論理ファイルのデッドロック回避策[1]

プラグイン提供関数[1]

プラグイン提供関数からの一括取得機能〔SQL最適化オプション〕[1]

プリプロセサ宣言文の有効化[1]

プリプロセス[1]

プリプロセス〔UNIX環境，COBOL言語の場合〕[1]

プリプロセス〔UNIX環境，C言語の場合〕[1]

プリプロセス〔Windows環境，COBOL言語の場合〕[1]

プリプロセス〔Windows環境，C言語の場合〕[1]

プリプロセスの概要[1]

フロータブルサーバ候補数の拡大〔SQL最適化オプション〕[1]

フロータブルサーバ候補数の拡大〔SQLの最適化〕[1]

フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）〔SQL最適化オプション〕[1]

フロータブルサーバ対象拡大（データ取り出しバックエンドサーバ）〔SQLの最適化〕[1]

フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）〔SQL最適化オプション〕[1]

フロータブルサーバ対象限定（データ取り出しバックエンドサーバ）〔SQLの最適化〕[1]

フロータブルサーバの割り当て候補数に関する最適化[1]

フロータブルサーバの割り当てに関する最適化[1]

フロータブルサーバの割り当て方法〔SQLの最適化〕[1]

フロータブルサーバを使用するSQL[1]

プログラム例〔外部Cストアドルーチン〕[1]

プログラム例〔外部Javaストアドルーチン〕[1]

プログラム例題[1]、[2]

プロシジャ[1]

プロセス間メモリ通信機能[1]

プロセス残存の回避[1]、[2]

ブロック転送機能[1]

ブロックモード[1]

プロバイダ名[1]

分散トランザクション〔JDBC2.0 Optional Package〕[1]

へ

ページ排他[1]、[2]

ほ

ポインタでの埋込み変数指定[1]

ポート番号[1]、[2]

ホールダブルカーソル[1]

ホールダブルカーソルを使用した例[1]

ま

マージジョイン〔SQLの最適化〕[1]

マシン構成ファイル[1]

マルチスレッドを使用したUAPのSQLの実行[1]

み

未使用インデクスの調査[1]

む

無応答状態〔HiRDBクライアント〕[1]

無排他条件判定[1]

め

名標の付け方〔C++言語によるUAPの作成〕[1]

名標の付け方〔COBOL言語によるUAPの作成〕[1]

名標の付け方〔OOCOBOL言語によるUAPの作成〕[1]

名標の付け方の規則〔C言語によるUAPの作成〕[1]

メモリ容量見積もり［クライアントライブラリ］[1]

も

モードの遷移〔排他制御〕[1]

文字コード種別[1]、[2]

文字コード種別設定関数[1]

文字コード変換機能〔Type2 JDBCドライバ〕[1]

文字コード変換機能〔Type4 JDBCドライバ〕[1]

文字集合名記述領域[1]

文字集合名記述領域操作用マクロ[1]

文字集合名記述領域のSQLCSNに設定できる文字集合情報[1]

文字集合名記述領域の構成[1]

文字集合名記述領域の展開[1]

文字集合名記述領域の内容[1]

文字集合を使用した場合の文字コード変換規則[1]

ゆ

優先順位〔SQLの最適化〕[1]

よ

呼び出す関数の決定規則[1]

り

リターンコードの参照[1]

リレーショナルデータベースの表[1]

リンケージ[1]、[2]

れ

列[1]

列単位の挿入[1]

列名[1]

列名記述領域[1]

列名記述領域の構成[1]

列名記述領域の展開[1]

列名記述領域の内容[1]

連続ハッシュジョイン〔ハッシュジョインの処理方式〕[1]

ろ

ロールバックの設定[1]、[2]、[3]

ログ取得モード[1]

ログレスモード[1]

論理述語を使用した検索[1]