Hitachi Advanced Data Binder AP開発ガイド

3000-6-502-L0

前書き

著作権

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

輸出時の注意

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

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

商標類

HITACHI，HAモニタ，HiRDB，JP1は，株式会社 日立製作所の商標または登録商標です。

Accessは，マイクロソフト 企業グループの商標です。

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

Excelは，マイクロソフト 企業グループの商標です。

Intelは，Intel Corporationまたはその子会社の商標です。

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

Microsoftは，マイクロソフト 企業グループの商標です。

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

Red Hat is a registered trademark of Red Hat, Inc. in the United States and other countries.

Red Hatは，米国およびその他の国におけるRed Hat, Inc.の登録商標です。

Red Hat Enterprise Linux is a registered trademark of Red Hat, Inc. in the United States and other countries.

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

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

Visual C++は，マイクロソフト 企業グループの商標です。

Visual Studioは，マイクロソフト 企業グループの商標です。

Windowsは，マイクロソフト 企業グループの商標です。

Windows Serverは，マイクロソフト 企業グループの商標です。

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

1. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)

2. This product includes cryptographic software written by Eric Young (eay@cryptsoft.com).

3. This product includes software written by Tim Hudson (tjh@cryptsoft.com).

4. 本製品には OpenSSL Toolkit ソフトウェアを OpenSSL License および Original SSLeay License に従い使用しています。OpenSSL License および Original SSLeay License は以下の通りです。

LICENSE ISSUES

==============

The OpenSSL toolkit stays under a double license, i.e. both the conditions of

the OpenSSL License and the original SSLeay license apply to the toolkit.

See below for the actual license texts. Actually both licenses are BSD-style

Open Source licenses. In case of any license issues related to OpenSSL

please contact openssl-core@openssl.org.

OpenSSL License

---------------

/* =========================================================

* Copyright (c) 1998-2018 The OpenSSL Project. All rights reserved.

*

* Redistribution and use in source and binary forms, with or without

* modification, are permitted provided that the following conditions

* are met:

*

* 1. Redistributions of source code must retain the above copyright

* notice, this list of conditions and the following disclaimer.

*

* 2. Redistributions in binary form must reproduce the above copyright

* notice, this list of conditions and the following disclaimer in

* the documentation and/or other materials provided with the

* distribution.

*

* 3. All advertising materials mentioning features or use of this

* software must display the following acknowledgment:

* "This product includes software developed by the OpenSSL Project

* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"

*

* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to

* endorse or promote products derived from this software without

* prior written permission. For written permission, please contact

* openssl-core@openssl.org.

*

* 5. Products derived from this software may not be called "OpenSSL"

* nor may "OpenSSL" appear in their names without prior written

* permission of the OpenSSL Project.

*

* 6. Redistributions of any form whatsoever must retain the following

* acknowledgment:

* "This product includes software developed by the OpenSSL Project

* for use in the OpenSSL Toolkit (http://www.openssl.org/)"

*

* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY

* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR

* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT

* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)

* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,

* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED

* OF THE POSSIBILITY OF SUCH DAMAGE.

* ==========================================================

*

* This product includes cryptographic software written by Eric Young

* (eay@cryptsoft.com). This product includes software written by Tim

* Hudson (tjh@cryptsoft.com).

*

*/

Original SSLeay License

-----------------------

/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)

* All rights reserved.

*

* This package is an SSL implementation written

* by Eric Young (eay@cryptsoft.com).

* The implementation was written so as to conform with Netscapes SSL.

*

* This library is free for commercial and non-commercial use as long as

* the following conditions are aheared to. The following conditions

* apply to all code found in this distribution, be it the RC4, RSA,

* lhash, DES, etc., code; not just the SSL code. The SSL documentation

* included with this distribution is covered by the same copyright terms

* except that the holder is Tim Hudson (tjh@cryptsoft.com).

*

* Copyright remains Eric Young's, and as such any Copyright notices in

* the code are not to be removed.

* If this package is used in a product, Eric Young should be given attribution

* as the author of the parts of the library used.

* This can be in the form of a textual message at program startup or

* in documentation (online or textual) provided with the package.

*

* Redistribution and use in source and binary forms, with or without

* modification, are permitted provided that the following conditions

* are met:

* 1. Redistributions of source code must retain the copyright

* notice, this list of conditions and the following disclaimer.

* 2. Redistributions in binary form must reproduce the above copyright

* notice, this list of conditions and the following disclaimer in the

* documentation and/or other materials provided with the distribution.

* 3. All advertising materials mentioning features or use of this software

* must display the following acknowledgement:

* "This product includes cryptographic software written by

* Eric Young (eay@cryptsoft.com)"

* The word 'cryptographic' can be left out if the rouines from the library

* being used are not cryptographic related :-).

* 4. If you include any Windows specific code (or a derivative thereof) from

* the apps directory (application code) you must include an acknowledgement:

* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"

*

* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND

* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE

* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL

* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS

* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)

* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT

* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY

* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF

* SUCH DAMAGE.

*

* The licence and distribution terms for any publically available version or

* derivative of this code cannot be changed. i.e. this code cannot simply be

* copied and put under another distribution licence

* [including the GNU Public Licence.]

*/

■Double precision SIMD-oriented Fast Mersenne Twister (dSFMT)

Copyright (c) 2007, 2008, 2009 Mutsuo Saito, Makoto Matsumoto

and Hiroshima University.

Copyright (c) 2011, 2002 Mutsuo Saito, Makoto Matsumoto, Hiroshima

University and The University of Tokyo.

All rights reserved.

Redistribution and use in source and binary forms, with or without

modification, are permitted provided that the following conditions are

met:

* Redistributions of source code must retain the above copyright

notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above

copyright notice, this list of conditions and the following

disclaimer in the documentation and/or other materials provided

with the distribution.

* Neither the name of the Hiroshima University nor the names of

its contributors may be used to endorse or promote products

derived from this software without specific prior written

permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

マイクロソフト製品のスクリーンショットの使用について

マイクロソフトの許可を得て使用しています。

マイクロソフト製品の表記について

このマニュアルでは，マイクロソフト製品の名称を次のように表記しています。

表記

製品名

Windows

Windows 7

Windows 7 x86

Windows(R) 7 Professional 日本語版(32ビット版)

Windows(R) 7 Enterprise 日本語版(32ビット版)

Windows(R) 7 Ultimate 日本語版(32ビット版)

Windows 7 x64

Windows(R) 7 Professional 日本語版(64ビット版)

Windows(R) 7 Enterprise 日本語版(64ビット版)

Windows(R) 7 Ultimate 日本語版(64ビット版)

Windows 8.1

Windows 8.1 x86

Windows(R) 8.1 Pro 日本語版(32ビット版)

Windows(R) 8.1 Enterprise 日本語版(32ビット版)

Windows 8.1 x64

Windows(R) 8.1 Pro 日本語版(64ビット版)

Windows(R) 8.1 Enterprise 日本語版(64ビット版)

Windows 10

Windows 10 x86

Windows(R) 10 Pro 日本語版(32ビット版)

Windows(R) 10 Enterprise 日本語版(32ビット版)

Windows 10 x64

Windows(R) 10 Pro 日本語版(64ビット版)

Windows(R) 10 Enterprise 日本語版(64ビット版)

Windows Server 2008 R2

Windows Server(R) 2008 R2 Standard 日本語版

Windows Server(R) 2008 R2 Enterprise 日本語版

Windows Server(R) 2008 R2 Datacenter 日本語版

Windows Server 2012

Windows Server(R) 2012 Standard 日本語版

Windows Server(R) 2012 Datacenter 日本語版

Windows Server 2012 R2

Windows Server(R) 2012 R2 Standard 日本語版

Windows Server(R) 2012 R2 Datacenter 日本語版

Windows Server 2016

Windows Server(R) 2016 Standard 日本語版

Windows Server(R) 2016 Datacenter 日本語版

Windows Server 2019

Windows Server(R) 2019 Standard 日本語版

Windows Server(R) 2019 Datacenter 日本語版

発行

2022年2月

変更内容

変更内容(3000-6-502-L0)　Hitachi Advanced Data Binder　05-05

追加・変更内容

変更個所

SQLパラレル実行機能のサポート

マルチノード機能の使用時，検索系SQL（SELECT文）を複数のノードで並列実行する機能（SQLパラレル実行機能）をサポートしました。

2.1，2.2.3，3.1.6，5.10.3(2)，5.16，6.1.4(6)，6.1.8，7.3.1(2)(a)，7.3.1(2)(d)，7.3.3，8.2.6(4)

ワーカーノードのサポート

マルチノード機能のノードの種類にワーカーノードを追加しました。ワーカーノードのHADBサーバでは，セカンダリノードのHADBサーバと同様に検索系SQL（SELECT文）の処理が実行されます。

2.2.4

Microsoft Visual C++ライブラリのランタイムコンポーネントのインストール

Microsoft Visual C++ライブラリのランタイムコンポーネントのインストール手順を追加しました。

4.2.1(1)，4.3.1，付録B.1

探索条件の等価変換に関する変更

OR条件に関する等価変換（集合演算UNION ALLを指定した導出表への等価変換）が行われる条件を変更しました。

＜変更前＞

OR条件中に指定されている列の表に，配列型の列が定義されている場合，等価変換は行われない。

＜変更後＞

OR条件中に指定されている列の表に，配列型の列が定義されている場合でも，等価変換は行われる。ただし，配列型の列の指定個所によっては等価変換されない。

5.11.3(2)

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

はじめに

このマニュアルは，Hitachi Advanced Data Binderで使用するAPを開発するための基礎技術，およびHADBクライアントの環境設定方法について説明しています。

なお，このマニュアル中，および製品が出力する情報中（メッセージ，コマンドの出力結果など）では，Hitachi Advanced Data BinderをHADBと表記することがあります。

対象製品

P-9W62-C411 Hitachi Advanced Data Binder 05-05　（適用OS：Red Hat Enterprise Linux Server 6（64-bit x86_64），Red Hat Enterprise Linux Server 7（64-bit x86_64），Red Hat Enterprise Linux Server 8（64-bit x86_64））

P-9W62-C311 Hitachi Advanced Data Binder Client 05-05　（適用OS：Red Hat Enterprise Linux Server 6（64-bit x86_64），Red Hat Enterprise Linux Server 7（64-bit x86_64），Red Hat Enterprise Linux Server 8（64-bit x86_64））

P-2462-C114 Hitachi Advanced Data Binder Client 05-05　（適用OS：Windows 7，Windows 8.1，Windows 10，Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Server 2016，Windows Server 2019）

対象読者

このマニュアルは，次に示す方々を対象にしています。

AP開発者

HADBクライアントの管理者

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

SQLの基本的な知識

Java言語のプログラミングの基本的な知識，およびJDBCの基本的な知識（Java言語のAPを作成する場合）

ODBCの基本的な知識（ODBC対応のAPを作成する場合）

C言語またはC++言語のプログラミングの基本的な知識（C言語またはC++言語のAPを作成する場合）

LinuxまたはWindowsのシステム管理の基本的な知識

マニュアルの構成

このマニュアルは，次に示す編，章と付録から構成されています。

第1編　環境設定編【共通】

第1章　AP開発の概要

AP開発の流れ，APを開発する前に知っておく必要がある前提条件，およびAPの実行形態について説明しています。

第2章　クライアント定義の設計

クライアント定義のオペランドの指定形式，内容，および文法規則について説明しています。

第3章　JDBCドライバの環境設定

JDBCドライバのインストールや環境変数の設定など，JDBCドライバの環境設定方法について説明しています。

第4章　HADBクライアントの環境設定（ODBCドライバおよびCLI関数を使用する場合）

HADBクライアントのインストールや環境変数の設定など，HADBクライアントの環境設定方法について説明しています。

第2編　AP作成編【共通】

第5章　APの性能向上に関する設計

APの性能向上に関する設計について説明しています。

第6章　APのチューニング

アクセスパスの見方について説明しています。

第3編　AP作成編【JDBC】

第7章　APの作成

JDBCドライバを使用したAPの作成方法について説明しています。

第8章　JDBC 1.2 API

JDBC 1.2 APIの各インタフェースとメソッドについて説明しています。

第9章　JDBC 2.1 コアAPI

JDBC 2.1 コアAPIで追加された機能のHADBでのサポート範囲について説明しています。

第10章　JDBC 2.0 Optional Package

JDBC 2.0 Optional Packageの各インタフェースとメソッドについて説明しています。

第11章　JDBC 3.0 API

JDBC 3.0 APIの各インタフェースとメソッドについて説明しています。

第12章　JDBC 4.0 API

JDBC 4.0 APIの各インタフェースとメソッドについて説明しています。

第13章　JDBC 4.1 API

JDBC 4.1 APIで追加された機能に対するHADBでのサポート範囲について説明しています。

第14章　JDBC 4.2 API

JDBC 4.2 APIで追加された機能に対するHADBでのサポート範囲について説明しています。

第4編　AP作成編【ODBC】

第15章　APの作成

HADB ODBCドライバの環境設定，およびODBC対応のAP作成時の留意事項について説明しています。

第16章　ODBC関数

HADBが提供しているODBC関数の機能と文法について説明しています。

第17章　トラブルシュート

ODBCインタフェース使用時のトラブルシュートについて説明しています。

第5編　AP作成編【CLI関数】

第18章　APの作成

C言語およびC++言語でAPを設計，作成するときに考慮する必要がある基本事項について説明しています。

第19章　CLI関数

HADBが提供しているCLI関数の機能と文法について説明しています。

付録A　サンプルAP

サンプルAPの概要，およびサンプルAPを実行するための準備と手順について説明しています。

付録B　HADBクライアントのディレクトリの構成

HADBクライアントのクライアントディレクトリ（インストール時），およびクライアントディレクトリ（運用時）の構成について説明しています。

付録C　HADBクライアントのメモリ所要量の見積もり

HADBクライアントが使用するメモリ所要量の見積もりについて説明しています。

関連マニュアル

このマニュアルの関連マニュアルを次に示します。必要に応じてお読みください。

Hitachi Advanced Data Binder システム構築・運用ガイド（3000-6-501）

Hitachi Advanced Data Binder コマンドリファレンス（3000-6-503）

Hitachi Advanced Data Binder SQLリファレンス（3000-6-504）

Hitachi Advanced Data Binder メッセージ（3000-6-505）

日立コード変換ユーザーズガイド（3000-7-415）

高信頼化システム監視機能 HAモニタ Linux(R)(x86)編（3000-9-201）

JP1 Version 11 JP1/Base 運用ガイド（3021-3-A01）

JP1 Version 11 JP1/Automatic Job Management System 3 設計ガイド（業務設計編）（3021-3-B14）

JP1 Version 11 JP1/Audit Management - Manager 構築・運用ガイド（3021-3-A17）

JP1 Version 12 JP1/Base 運用ガイド（3021-3-D65）

JP1 Version 12 JP1/Automatic Job Management System 3 設計ガイド（業務設計編）（3021-3-D23）

なお，Hitachi Advanced Data Binderのマニュアルを本文中で参照させる場合は，Hitachi Advanced Data BinderをHADBと表記します。

（例）　HADB　システム構築・運用ガイド

また，HAモニタのマニュアルを本文中で参照させる場合は，高信頼化システム監視機能 HAモニタ Linux(R)(x86)編をHAモニタ Linux(R)(x86)編と表記します。

（例）　HAモニタ Linux(R)(x86)編

JP1/Baseのマニュアルを本文中で参照させる場合は，JP1 Version 11 JP1/Base 運用ガイドまたはJP1 Version 12 JP1/Base 運用ガイドをJP1/Base　運用ガイドと表記します。

（例）　JP1/Base　運用ガイド

JP1/AJS3のマニュアルを本文中で参照させる場合は，JP1 Version 11 JP1/Automatic Job Management System 3 設計ガイド（業務設計編）またはJP1 Version 12 JP1/Automatic Job Management System 3 設計ガイド（業務設計編）をJP1/AJS3　設計ガイド（業務設計編）と表記します。

（例）　JP1/AJS3　設計ガイド（業務設計編）

JP1/Auditのマニュアルを本文中で参照させる場合は，JP1 Version 11 JP1/Audit Management - Manager 構築・運用ガイドをJP1/Audit　構築・運用ガイドと表記します。

（例）　JP1/Audit　構築・運用ガイド

このマニュアルで使用する製品名・機能名

このマニュアルでは，製品名を次のように表記しています。

表記

製品名

HADB

HADBサーバ

Hitachi Advanced Data Binder

HADBクライアント

Hitachi Advanced Data Binder Client

Linux

Linux

Linux

RHEL 6

Red Hat Enterprise Linux Server 6（64-bit x86_64）

RHEL 7

Red Hat Enterprise Linux Server 7（64-bit x86_64）

RHEL 8

Red Hat Enterprise Linux Server 8（64-bit x86_64）

HDLM

Hitachi Dynamic Link Manager Software

JP1/AJS3

JP1/Automatic Job Management System 3

JP1/Audit

JP1/Audit Management - Manager

このマニュアルで使用する英略語

このマニュアルで使用する英略語を次に示します。

英略語

英字での表記

AP

Application Program

APD

Application Parameter Descriptor

API

Application Programming Interface

ARD

Application Row Descriptor

BI

Business Intelligence

BLOB

Binary Large Object

BNF

Backus-Naur Form

BOM

Byte Order Mark

CLI

Call Level Interface

CLOB

Character Large Object

CPU

Central Processing Unit

CSV

Character-Separated Values

DB

Database

DBMS

Database Management System

DMMP

Device Mapper Multipath

DNS

Domain Name System

ELF

Executable and Linking Format

ER

Entity Relationship

HBA

Host Bus Adapter

ID

Identification number

IEF

Integrity Enhancement Facility

IP

Internet Protocol

IPD

Implementation Parameter Descriptor

IRD

Implementation Row Descriptor

JAR

Java Archive File

JDBC

Java Database Connectivity

JDK

Java Developer's Kit

JNDI

Java Naming and Directory Interface

JRE

Java Runtime Environment

JSON

JavaScript Object Notation

JTA

Java Transaction API

LOB

Large Object

LRU

Least Recently Used

LV

Logical Volume

LVM

Logical Volume Manager

LWP

Light Weight Process

MSDN

Microsoft Developer Network

NFS

Network File System

NIC

Network Interface Card

NTP

Network Time Protocol

ODBC

Open Database Connectivity

OS

Operating System

PP

Program Product

PV

Persistent Volume

PVC

Persistent Volume Claim

RAID

Redundant Array of Independent Disks

RDBMS

Relational Database Management System

SELinux

Security-Enhanced Linux

TLB

Translation Lookaside Buffer

URL

Uniform Resource Locator

VG

Volume Group

WWN

World Wide Name

このマニュアルで使用する記号

サーバ定義などのオペランド，およびコマンドの説明で使用している記号を次に示します。

なお，これらの記号は説明のために使用している記号のため，オペランドまたはコマンド中に記述しないでください。

記号

意味

例

〔　〕

この記号で囲まれている項目は省略できます。

adbsql 〔-V〕

この例の場合，adbsqlと指定してもよいし，adbsql -Vと指定してもよいことを意味しています。

｛　｝

この記号で囲まれている複数の項目のうちから，1つを選択できます。

adbcancel ｛--ALL｜-u コネクションID｝

この例の場合，--ALLまたは-u コネクションIDのどちらかを指定できることを意味しています。

…

この記号の直前の項目を繰り返し指定できます。

adbbuff -n DBエリア名〔，DBエリア名〕…

この例の場合，DBエリア名を繰り返し指定できることを意味しています。

｛｛　｝｝

この記号で囲まれた複数の項目を1つの単位として，繰り返し指定できます。

｛｛adbinitdbarea -n データ用DBエリア名｝｝

この例の場合，「adbinitdbarea -n データ用DBエリア名」を繰り返し指定できることを意味しています。

＿

（下線）

この記号で示す項目は，省略時の解釈値です。

adb_import_errmsg_lv = ｛0｜1｝

この例の場合，オペランドの指定を省略したとき，0が仮定されることを意味しています。

〜

この記号のあとに，指定値の属性を説明しています。

adb_sys_max_users = 最大同時接続数

　〜〈整数〉((1〜1,024))《10》

この例の場合，1〜1,024の整数が指定できます。オペランドの指定を省略した場合は，10が仮定されます。

〈　〉

指定値の種別を説明しています。

((　))

指定値の範囲を説明しています。

《　》

省略値を説明しています。

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

構文要素記号

意味

〈パス名〉

パス名には次に示す文字が使用できます。

OSがLinuxの場合

英字，数字，#，-，/，@，_

OSがWindowsの場合

英字，数字，#，-，/，@，_，¥，:

ただし，OSによって使用できる文字が異なります。

〈OSパス名〉

OSパス名には，OSでパス名として使用できるすべての文字が使用できます。使用できる文字の詳細については，OSのマニュアルを参照してください。

〈文字列〉

任意の文字列を指定できます。

〈単位付き整数〉

数字（0～9）の末尾に，MB（メガバイト），GB（ギガバイト），またはTB（テラバイト）のどれかの単位を付けた形式で指定します。数字と単位の間に空白を入れることはできません。

指定例

1024MB

512GB

32TB

エラーになる指定例

512 GB

注　すべて半角文字を使用してください。

このマニュアルで使用する計算式の記号

このマニュアルで使用する計算式の記号の意味を次に示します。

記号

内容

↑　↑

計算結果の値を小数点以下で切り上げることを意味しています。

（例）↑34÷3↑の計算結果は12になります。

↓　↓

計算結果の値を小数点以下で切り捨てることを意味しています。

（例）↓34÷3↓の計算結果は11になります。

MAX

計算結果のうち，最も大きい値が有効になることを意味しています。

（例）MAX（3×6，4＋7）の計算結果は18になります。

MIN

計算結果のうち，最も小さい値が有効になることを意味しています。

（例）MIN（3×6，4＋7）の計算結果は11になります。

パス名の表記について

サーバディレクトリ（インストール時）のパスは，$INSTDIRと表記します。

サーバディレクトリ（運用時）のパスは，$ADBDIRと表記します。

DBディレクトリのパスは，$DBDIRと表記します。

クライアントディレクトリのパスは，%ADBCLTDIR%（HADBクライアントがWindows版の場合）または$ADBCLTDIR（HADBクライアントがLinux版の場合）と表記します。

HADB ODBCドライバトレースファイルの格納フォルダのパスは，%ADBODBTRCPATH%と表記します。

¥の表記について

本文中で使用されている¥は，Linux版の場合は半角のバックスラッシュを意味しています。

メソッドの略記について

先頭に「get」が付くメソッドをまとめて表す場合，getXXXメソッドと表記しています。

先頭に「set」が付くメソッドをまとめて表す場合，setXXXメソッドと表記しています。

先頭に「execute」が付くメソッドをまとめて表す場合，executeXXXメソッドと表記しています。

関数の略記について

先頭に「SQL」が付く関数をまとめて表す場合，SQLxxx関数と表記しています。

先頭に「SQL」が付き，最後に「W」が付く関数をまとめて表す場合，SQLxxxW関数と表記しています。

このマニュアルで使用するKB（キロバイト）などの単位表記

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト），1PB（ペタバイト），1EB（エクサバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイト，1,024⁵バイト，1,024⁶バイトです。

第1編　環境設定編【共通】

1　AP開発の概要

この章では，AP開発の流れ，APを開発する前に知っておく必要がある前提条件，およびAPの実行形態について説明します。

1.1　AP開発の流れと前提条件

AP開発の流れを次の図に示します。

図1‒1　AP開発の流れ

APを開発する前に知っておく必要がある前提条件について説明します。

1.1.1　APの記述言語

APの記述言語は次に示すどれかになります。

Java言語

C言語

C++言語

Java言語の場合，JDBCのAPIを使用してデータベースにアクセスできます。

CまたはC++言語の場合，CLI関数（CまたはC++言語対応のHADBが提供しているAPI），またはODBC関数を使用してデータベースにアクセスできます。

また，ODBC対応のAPからも，ODBC関数を使用してデータベースにアクセスできます。

1.1.2　文字コード

HADBサーバおよびHADBクライアントでは，次に示す文字コードが使用できます。

UTF-8

Shift-JIS

1.1.3　APの開発環境

HADBサーバをインストールしたマシン，またはHADBクライアントをインストールしたマシンのどちらかでAPの開発を行います。

1.2　APの実行形態

APは，HADBクライアントまたはHADBサーバのどちらでも実行できます。

HADBクライアントでAPを実行する形態を図1-2に，HADBサーバでAPを実行する形態を図1-3に示します。

図1‒2　HADBクライアントでAPを実行する形態

注　HADBクライアントの適用OSは，LinuxまたはWindowsです。

図1‒3　HADBサーバでAPを実行する形態

2　クライアント定義の設計

この章では，クライアント定義のオペランドの指定形式，内容，および文法規則について説明します。

2.1　クライアント定義のオペランドの指定形式

クライアント定義には，HADBクライアントの実行環境を指定します。クライアント定義の各オペランドの指定形式を次に示します。

システム構成に関するオペランド
    set adb_clt_rpc_srv_host = HADBサーバのホスト名
  〔set adb_clt_rpc_srv_port = HADBサーバのポート番号〕
  〔set adb_clt_group_name = クライアントグループ名〕

APの状態監視に関するオペランド
  〔set adb_clt_rpc_con_wait_time = HADBサーバへの接続処理の完了待ち時間〕
  〔set adb_clt_rpc_sql_wait_time = HADBサーバからの応答待ち時間〕
  〔set adb_clt_ap_name = AP識別子〕

性能に関するオペランド
  〔set adb_clt_fetch_size = FETCH処理時の一括送信行数〕
  〔set adb_dbbuff_wrktbl_clt_blk_num = ローカル作業表用バッファのページ数〕
  〔set adb_sql_exe_max_rthd_num = 最大SQL処理リアルスレッド数〕
  〔set adb_sql_exe_hashgrp_area_size = ハッシュグループ化領域サイズ〕
  〔set adb_sql_exe_hashtbl_area_size = ハッシュテーブル領域サイズ〕
  〔set adb_sql_exe_hashflt_area_size = ハッシュフィルタ領域サイズ〕
  〔set adb_clt_sql_parallel_exec = ｛Y｜N｝〕

SQLに関するオペランド
  〔set adb_sql_prep_delrsvd_use_srvdef = ｛Y｜N｝〕
  〔set adb_clt_trn_iso_lv = ｛READ_COMMITTED｜REPEATABLE_READ｝〕
  〔set adb_clt_trn_access_mode = ｛READ_WRITE｜READ_ONLY｝〕
  〔set adb_clt_sql_text_out = ｛Y｜N｝〕
  〔set adb_clt_sql_order_mode = ｛BYTE｜ISO｝〕
  〔set adb_sql_prep_dec_div_rs_prior = ｛INTEGRAL_PART｜FRACTIONAL_PART｝〕

クライアント定義の各オペランドの説明については，「2.2　クライアント定義のオペランドの内容」を参照してください。

クライアント定義の作成方法および変更方法については，「4.4　クライアント定義の作成」を参照してください。

2.2　クライアント定義のオペランドの内容

ここでは，クライアント定義の各オペランドの内容について説明します。

重要

クライアント定義の各オペランドの指定は，ODBCドライバまたはCLI関数を使用する場合に適用されます。JDBCドライバを使用する場合は適用されません。

JDBCドライバを使用する場合は，システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティで，クライアント定義の各オペランドと同じ指定ができます。

システムプロパティについては，「3.1.6　システムプロパティの設定」を参照してください。

ユーザプロパティについては，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(d)　引数infoの指定内容（ユーザプロパティの指定）」を参照してください。

接続用のURLのプロパティについては，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(a)　引数urlの指定内容（接続用のURLの指定）」を参照してください。

adbsqlコマンドでSQL文を実行する場合は，クライアント定義の各オペランドの指定が適用されます。

2.2.1　システム構成に関するオペランド

●adb_clt_rpc_srv_host = HADBサーバのホスト名

〜〈文字列〉((1〜255バイト))

接続先のHADBサーバのホスト名を指定してください。ここで指定したホスト名は，HADBクライアントとHADBサーバ間の通信で使用します。

ホスト名は，ホスト名，ドメイン名，IPアドレスのどれかの形式で指定してください。

このオペランドは必ず指定してください。

クライアント定義の集中管理機能を使用している場合であっても，このオペランドは必ず指定してください。クライアント定義の集中管理機能で使用するクライアント定義ファイルに，このオペランドを指定しても無視されます。

コールドスタンバイ構成の場合は，HADBサーバとHADBクライアント間の通信で使用するエイリアスIPアドレスを指定してください。

［マルチノード機能］

マルチノード機能を使用している場合，HADBサーバとHADBクライアント間の通信で使用するエイリアスIPアドレスを指定してください。

●adb_clt_rpc_srv_port = HADBサーバのポート番号

〜〈整数〉((5,001〜65,535))《23,650》

HADBクライアントとHADBサーバ間の通信で使用する，HADBサーバのポート番号を指定してください。サーバ定義のadb_rpc_portオペランドで指定したポート番号を指定してください。

●adb_clt_group_name = クライアントグループ名

〜〈文字列〉((1〜30バイト))

このクライアント定義を使用するAPが属するクライアントグループ名を指定します。サーバ定義のadbcltgrpオペランドに指定したクライアントグループ名を指定してください。

このオペランドを省略した場合，このクライアント定義を使用するAPはクライアントグループに属しません。

また，adbcltgrpオペランドで指定していないクライアントグループ名を指定した場合，クライアントグループに属していないAPと見なされます。

クライアントグループについては，マニュアルHADB　システム構築・運用ガイドのクライアントグループ機能を参照してください。

2.2.2　APの状態監視に関するオペランド

●adb_clt_rpc_con_wait_time = HADBサーバへの接続処理の完了待ち時間

〜〈整数〉((1〜300))《300》（単位：秒）

HADBサーバへの接続処理の完了待ち時間を秒単位で指定します。ここで指定した待ち時間を超えてもHADBサーバへの接続処理が完了しない場合，HADBサーバへの接続処理を中止し，APにエラーリターンします。

通常は，このオペランドを指定する必要はありません。HADBサーバがビジー状態で接続に時間が掛かる場合に，タイムアウト時間を短くするときに指定してください。

■JDBCドライバのプロパティにadb_clt_rpc_con_wait_timeを指定している場合

JDBCドライバのプロパティのadb_clt_rpc_con_wait_timeには，0を指定することができます。0を指定した場合，デフォルト値が仮定されます。

●adb_clt_rpc_sql_wait_time = HADBサーバからの応答待ち時間

〜〈整数〉((0〜65,535))《0》（単位：秒）

HADBクライアントからHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間を秒単位で指定します。ここで指定した待ち時間を超えてもHADBサーバから応答がない場合，SQLCODEが-732（KFAA30732-E）のタイムアウトエラーがAPに返されます。このとき，SQL文の処理はキャンセルされ，トランザクションはロールバックされます。そのあと，HADBサーバからAPが切り離されます。

ただし，処理要求をキャンセルしたタイミングや，通信障害などの要因によっては，トランザクションがロールバックされないことがあります。そのため，HADBサーバのメッセージログに出力されるメッセージなどを参照して，結果を確認することを推奨します。

処理時間が長いSQLを監視する場合などに，このオペランドを指定してください。「4.5　APの無応答状態への対策」を参照して，このオペランドに指定する待ち時間を決めてください。

なお，このオペランドを省略した場合，または0を指定した場合，待ち時間は設定されません。

■JDBCドライバのプロパティにadb_clt_rpc_sql_wait_timeを指定している場合

JDBCドライバのプロパティにadb_clt_rpc_sql_wait_timeを指定している場合は，さらに次の待ち時間も監視対象になります。

同一コネクションで複数のSELECT文を同時実行した際に，処理リアルスレッド数不足が発生したときの処理リアルスレッドの確保処理の待ち時間

上記の待ち時間を超えた場合，SQLCODEが-1071570（KFAA71570-E）のタイムアウトエラーがAPに返されます。このとき，SQL文の処理はキャンセルされますが，トランザクションはロールバックされません。また，APはHADBサーバから切り離されません。

adb_clt_rpc_sql_wait_timeを指定する目的については，「7.4.1　データの検索方法」の「(4)　同一コネクションで複数のSELECT文を同時実行する際の注意事項」を参照してください。

●adb_clt_ap_name = AP識別子

〜〈文字列〉((1〜30バイト))《********》

HADBサーバに接続するAPの識別情報（AP識別子）を指定します。

ここで指定したAP識別子は，コネクションの状態を表示するコマンド（adbls -d cnct）の実行結果，メッセージ，およびSQLトレース情報などに表示されます。どのAPが実行されているかを確認するときに必要な情報になります。

AP識別子は環境変数ADBCLTLANGの指定に基づいて認識されるため，文字コードに依存しない半角英数字だけで構成される名称を指定することを推奨します。

2.2.3　性能に関するオペランド

●adb_clt_fetch_size = FETCH処理時の一括送信行数

〜〈整数〉((1〜65,535))《1,024》

1回のFETCH処理で，HADBサーバからHADBクライアントに送信する検索結果の行数を指定します。

このオペランドの指定値を大きくすると，1回のFETCH処理で送信する結果行数が多くなるため性能向上が見込めますが，その分メモリが必要になります。

●adb_dbbuff_wrktbl_clt_blk_num = ローカル作業表用バッファのページ数

〜〈整数〉((5〜100,000,000))《サーバ定義のadb_dbbuff_wrktbl_clt_blk_numの値》

ローカル作業表用バッファのページ数を指定します。

通常，このオペランドは指定不要です。ローカル作業表を作成するSQL文の実行時間を短縮したい場合に，このオペランドを指定してください。詳細については，マニュアルHADB　システム構築・運用ガイドのチューニングのバッファの見直しによるSQL文の実行時間の短縮に関するチューニングを参照してください。

このオペランドの指定値の見積もりについては，マニュアルHADB　システム構築・運用ガイドのローカル作業表用バッファのページ数の見積もりを参照してください。

留意事項を次に示します。

このオペランドと，サーバ定義adb_dbbuff_wrktbl_clt_blk_numオペランドを両方指定した場合は，このオペランドの指定値が優先されます。

このオペランドで指定したバッファは，SQL処理リアルスレッドごとに，ローカル作業表を作成するSQL文を実行したときだけ使用されます。ローカル作業表とは，リアルスレッドごとに作成される，リアルスレッド固有の作業表です。そのため，HADBサーバはリアルスレッドごとにこのオペランドで指定したページ数分のローカル作業表バッファを確保します。ローカル作業表を作成するSQL文については，「5.10.2　SQLを実行した場合に作成される作業表について」を参照してください。

このオペランドの指定を適用したコネクションについては，ローカル作業表用バッファのページ数をadbmodbuffコマンドで変更できません。

コネクションごとに適用されているローカル作業表用バッファのページ数は，adbls -d lbufコマンドで確認できます。

●adb_sql_exe_max_rthd_num = 最大SQL処理リアルスレッド数

〜〈整数〉((0〜4,096))《サーバ定義のadb_sql_exe_max_rthd_numの値，またはグループで使用できる処理リアルスレッドの最大数》

SQL文の実行時に使用する処理リアルスレッド数の最大値を指定します。

サーバ定義のadb_sql_exe_max_rthd_numオペランドで指定した，最大SQL処理リアルスレッド数を変更する場合にこのオペランドを指定します。

このオペランドを指定する場合は，マニュアルHADB　システム構築・運用ガイドのサーバ定義の設計のサーバ定義のオペランドの内容の性能に関するオペランド（set形式）にあるadb_sql_exe_max_rthd_numオペランドの説明を参照してください。

■クライアントグループ機能を使用していない場合

このオペランドを省略した場合，サーバ定義のadb_sql_exe_max_rthd_numオペランドの指定値が仮定されます。

サーバ定義のadb_sql_exe_max_rthd_numオペランドの指定値より大きい値をこのオペランドに指定した場合，このオペランドの指定は無視されます。このとき，サーバ定義のadb_sql_exe_max_rthd_numオペランドの指定値が仮定されます。

■クライアントグループ機能を使用している場合

このオペランドを省略した場合，グループで使用できる処理リアルスレッドの最大数が仮定されます。

グループで使用できる処理リアルスレッドの最大数より大きい値をこのオペランドに指定した場合，このオペランドの指定は無視されます。このとき，グループで使用できる処理リアルスレッドの最大数が仮定されます。

クライアントグループ機能については，マニュアルHADB　システム構築・運用ガイドのクライアントグループ機能を参照してください。

■JDBCドライバのsetHADBSQLMaxRthdNumメソッドとの関係

setHADBSQLMaxRthdNumメソッドで最大SQL処理リアルスレッド数を指定できます。

setHADBSQLMaxRthdNumメソッドの指定と，このオペランドに適用される値の関係について次の表に示します。

setHADBSQLMaxRthdNumメソッドについては，「8.3.37　setHADBSQLMaxRthdNum(int rthdNum)」を参照してください。

setHADBSQLMaxRthdNumメソッドの指定

SVとCGVの関係

V，SV，およびCGVの関係

このオペランドに適用される値

指定あり

CGV ＜ SV

SV ＜ V

CGV※1

CGV ＜ V ≦ SV

V ≦ CGV

V

SV ≦ CGV

V ≦ SV

V

SV ＜ V ≦ CGV

SV※1

CGV ＜ V

CGVなし※2

V ≦ SV

V

SV ＜ V

SV※1

指定なし

－

－

CNV

（凡例）

V：setHADBSQLMaxRthdNumメソッドの指定値

SV：サーバ定義の値※3

CGV：クライアントグループ機能を使用している場合で，グループで使用できる処理リアルスレッド数の最大値

CNV：HADBサーバへのコネクト時に決定される最大SQL処理リアルスレッド数※4

－：条件なし

注※1

setHADBSQLMaxRthdNumメソッドの指定値を無効にします。このとき，無効にしたことを知らせるKFAA41106-Wメッセージが出力されます。

注※2

クライアントグループ機能を使用していない場合を意味します。

注※3

HADBサーバの開始時に決定される最大SQL処理リアルスレッド数です。サーバ定義のadb_sql_exe_max_rthd_numオペランドの指定有無や，処理リアルスレッド数との大小関係などから決定される値です。詳細については，マニュアルHADB　システム構築・運用ガイドの性能に関するオペランド（set形式）のadb_sql_exe_max_rthd_numオペランドの説明を参照してください。

注※4

クライアント定義のadb_sql_exe_max_rthd_numオペランドの指定有無，サーバ定義のadb_sql_exe_max_rthd_numオペランドの指定値，クライアントグループ機能のグループで使用できる処理リアルスレッドの最大値などとの大小関係から決定される値です。

重要

HADBサーバは，SQL文の前処理時にこのオペランドの値を参照します。そのため，setHADBSQLMaxRthdNumメソッドで最大SQL処理リアルスレッド数を指定する場合は，SQL文を実行するStatementオブジェクトまたはPreparedStatementオブジェクトを生成する前にsetHADBSQLMaxRthdNumメソッドを実行してください。

●adb_sql_exe_hashgrp_area_size = ハッシュグループ化領域サイズ

〜〈整数〉((0，4〜1,000,000))《サーバ定義のadb_sql_exe_hashgrp_area_sizeの値》（単位：キロバイト）

ハッシュグループ化領域の大きさをキロバイト単位で指定します。

サーバ定義のadb_sql_exe_hashgrp_area_sizeオペランドで指定した，ハッシュグループ化領域サイズを変更する場合にこのオペランドを指定します。

このオペランドを指定する場合は，マニュアルHADB　システム構築・運用ガイドのサーバ定義の設計のサーバ定義のオペランドの内容の性能に関するオペランド（set形式）にあるadb_sql_exe_hashgrp_area_sizeオペランドの説明を参照してください。

●adb_sql_exe_hashtbl_area_size = ハッシュテーブル領域サイズ

〜〈整数〉((0〜4,194,304))《サーバ定義のadb_sql_exe_hashtbl_area_sizeの値》（単位：メガバイト）

ハッシュテーブル領域サイズをメガバイト単位で指定します。

サーバ定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定した，ハッシュテーブル領域サイズを変更する場合にこのオペランドを指定します。

このオペランドを指定する場合は，マニュアルHADB　システム構築・運用ガイドのサーバ定義の設計のサーバ定義のオペランドの内容の性能に関するオペランド（set形式）にあるadb_sql_exe_hashtbl_area_sizeオペランドの説明を参照してください。

なお，このオペランドの指定値がサーバ定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定値より大きい場合は，サーバ定義の指定値が仮定されます。また，このオペランドを省略した場合も，サーバ定義の指定値が仮定されます。

■JDBCドライバのsetHADBSQLHashTblSizeメソッドとの関係

setHADBSQLHashTblSizeメソッドでハッシュテーブル領域サイズを指定できます。

setHADBSQLHashTblSizeメソッドの指定と，このオペランドに適用される値の関係について次の表に示します。

setHADBSQLHashTblSizeメソッドについては，「8.3.36　setHADBSQLHashTblSize(int areaSize)」を参照してください。

setHADBSQLHashTblSizeメソッドの指定

VとSVの関係

このオペランドに適用される値（単位：メガバイト）

指定あり

SV ＜ V

SV※1

V ≦ SV

V

指定なし

－

CNV

（凡例）

V：setHADBSQLHashTblSizeメソッドの指定値

SV：サーバ定義の値※2

CNV：HADBサーバへのコネクト時に決定されるハッシュテーブル領域サイズ※3

－：条件なし

注※1

setHADBSQLHashTblSizeメソッドの指定値を無効にします。このとき，無効にしたことを知らせるKFAA41106-Wメッセージが出力されます。

注※2

HADBサーバの開始時に決定されるハッシュテーブル領域サイズです。サーバ定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定値です。サーバ定義のadb_sql_exe_hashtbl_area_sizeオペランドを省略した場合は，その省略値です。

注※3

クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定有無や，サーバ定義のadb_sql_exe_hashtbl_area_sizeオペランドとクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドとの大小関係から決定される値です。

重要

HADBサーバは，SQL文の前処理時にこのオペランドの値を参照します。そのため，setHADBSQLHashTblSizeメソッドでハッシュテーブル領域サイズを指定する場合は，SQL文を実行するStatementオブジェクトまたはPreparedStatementオブジェクトを生成する前にsetHADBSQLHashTblSizeメソッドを実行してください。

●adb_sql_exe_hashflt_area_size = ハッシュフィルタ領域サイズ

〜〈整数〉((0〜419,430))（単位：メガバイト）

ハッシュフィルタ領域サイズをメガバイト単位で指定します。

通常はこのオペランドを省略してください。ハッシュフィルタが適用されるSQL文の実行時間を短縮したい場合に，このオペランドを指定してください。

このオペランドを指定する場合は，マニュアルHADB　システム構築・運用ガイドのサーバ定義の設計のサーバ定義のオペランドの内容の性能に関するオペランド（set形式）にあるadb_sql_exe_hashflt_area_sizeオペランドの説明を参照してください。

このオペランドの指定値のチューニング方法については，マニュアルHADB　システム構築・運用ガイドのハッシュフィルタ領域サイズの見直しによるSQL文の実行時間の短縮に関するチューニングを参照してください。

このオペランドの規則を次に示します。

クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定有無によって，このオペランドを省略したときの仮定値が変わります。

adb_sql_exe_hashtbl_area_sizeオペランドを指定している場合

↑クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの値÷10↑

adb_sql_exe_hashtbl_area_sizeオペランドを指定していない場合

サーバ定義のadb_sql_exe_hashflt_area_sizeオペランドの値

なお，クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの値が，サーバ定義の同オペランドの値より大きい場合は，サーバ定義の値が仮定されるため，ご注意ください。

次の条件を満たす場合は，クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの値ではなく，サーバ定義の同オペランドの値が適用されます。

A ＜ BまたはC

A：サーバ定義のadb_sql_exe_hashflt_area_sizeオペランドの指定値

B：クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの指定値

C：クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドを省略したときの仮定値

■JDBCドライバのsetHADBSQLHashFltSizeメソッドとの関係

setHADBSQLHashFltSizeメソッドでハッシュフィルタ領域サイズを指定できます。setHADBSQLHashFltSizeメソッドの指定と，このオペランドに適用される値の関係について次の表に示します。

setHADBSQLHashFltSizeメソッドについては，「8.3.35　setHADBSQLHashFltSize(int areaSize)」を参照してください。

setHADBSQLHashFltSizeメソッドの指定

VとSVの関係

HTVとSVの関係

このオペランドに適用される値（単位：メガバイト）

指定あり

SV ＜ V

－

SV※1

V ≦ SV

－

V

指定なし

－

SV ＜ ↑HTV÷10↑

SV

↑HTV÷10↑ ≦ SV

↑HTV÷10↑

HTVの指定なし※2

CNV

（凡例）

V：setHADBSQLHashFltSizeメソッドの指定値

SV：サーバ定義の値※3

HTV：ハッシュテーブル領域サイズ※4

CNV：HADBサーバへのコネクト時に決定されるハッシュフィルタ領域サイズ※5

－：条件なし

注※1

setHADBSQLHashFltSizeメソッドの指定値を無効にします。このとき，無効にしたことを知らせるKFAA41106-Wメッセージが出力されます。

注※2

setHADBSQLHashTblSizeメソッドの指定がないことを意味しています。

注※3

HADBサーバの開始時に決定されるハッシュフィルタ領域サイズです。サーバ定義のadb_sql_exe_hashflt_area_sizeオペランドの指定有無や，処理リアルスレッド数との大小関係などから決定される値です。詳細については，マニュアルHADB　システム構築・運用ガイドの性能に関するオペランド（set形式）のadb_sql_exe_hashflt_area_sizeオペランドの説明を参照してください。

注※4

setHADBSQLHashTblSizeメソッドを指定した場合に，最終的に適用されたハッシュテーブル領域サイズです。

注※5

クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの指定有無や，サーバ定義のadb_sql_exe_hashflt_area_sizeオペランドとクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドとの大小関係などから決定される値です

重要

HADBサーバは，SQL文の前処理時にこのオペランドの値を参照します。そのため，setHADBSQLHashFltSizeメソッドでハッシュフィルタ領域サイズを指定する場合は，SQL文を実行するStatementオブジェクトまたはPreparedStatementオブジェクトを生成する前にsetHADBSQLHashFltSizeメソッドを実行してください。

●adb_clt_sql_parallel_exec = ｛Y｜N｝

当該HADBクライアントからのトランザクションで実行される検索系SQLにSQLパラレル実行機能を適用するかどうかを指定します。

Y：

SQLパラレル実行機能を適用して検索系SQLを実行します。

N：

SQLパラレル実行機能を適用しません。

このオペランドの指定を省略した場合，Nが仮定されます。

重要

SQLパラレル実行機能が適用されるのは，SQLパラレル実行機能が適用される条件が満たされた場合だけです。条件が満たされなかった場合，このオペランドにYを指定していてもSQLパラレル実行機能は適用されません。SQLパラレル実行機能が適用される条件については，「5.16　SQLパラレル実行機能が適用される条件」を参照してください。

SQL文にSQLパラレル実行指定を指定すると，このオペランドの指定値に関係なくSQLパラレル実行機能を適用して検索系SQLが実行できます。なお，この場合もSQLパラレル実行機能が適用されるのは，SQLパラレル実行機能が適用される条件が満たされたときだけです。

SQLパラレル実行指定とadb_clt_sql_parallel_execオペランドの指定値の関係を次の表に示します。

表2‒1　SQLパラレル実行指定とadb_clt_sql_parallel_execオペランドの指定値の関係

SQLパラレル実行指定

クライアント定義のadb_clt_sql_parallel_execオペランドの指定値

Y

N

検索系SQL文に指定している

○

○

検索系SQL文に指定していない

○

×

（凡例）

○：SQLパラレル実行機能を適用します。

×：SQLパラレル実行機能を適用しません。

SQLパラレル実行指定の指定規則については，マニュアルのHADB　SQLリファレンスのSELECT文の指定形式および規則を参照してください。

2.2.4　SQLに関するオペランド

●adb_sql_prep_delrsvd_use_srvdef = ｛Y｜N｝

サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定に従って予約語を削除するかどうかを指定します。

削除される予約語については，サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定を確認してください。

Y：

サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定を有効にします（サーバ定義のadb_sql_prep_delrsvd_wordsオペランドに指定した予約語を削除します）。

N：

サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定を無効にします（サーバ定義のadb_sql_prep_delrsvd_wordsオペランドに指定した予約語は削除されません）。

このオペランドの指定を省略した場合，Yが仮定されます。

●adb_clt_trn_iso_lv = ｛READ_COMMITTED｜REPEATABLE_READ｝

適用するトランザクション隔離性水準を指定します。トランザクション隔離性水準については，マニュアルHADB　システム構築・運用ガイドのHADBがサポートしているトランザクション隔離性水準を参照してください。

READ_COMMITTED：

トランザクション隔離性水準にREAD COMMITTEDを適用します。

REPEATABLE_READ：

トランザクション隔離性水準にREPEATABLE READを適用します。

このオペランドを省略した場合，サーバ定義のadb_sys_trn_iso_lvオペランドに指定したトランザクション隔離性水準が適用されます。

［マルチノード機能］

次に示すすべての条件を満たす場合に，セカンダリノードおよびワーカーノードに対してもトランザクションの実行処理が割り当てられます。

・トランザクションアクセスモードが読み取り専用モードである

・トランザクション隔離性水準がREAD COMMITTEDである

そのため，セカンダリノードおよびワーカーノードのリソースを活用したい場合は，このオペランドにREAD_COMMITTEDを指定することを推奨します。

読み書き可能モードのトランザクションや，一部のコマンドがプライマリノードで実行中の間は，すべてのトランザクションがプライマリノードで実行されます。セカンダリノードおよびワーカーノードではトランザクションが実行されません。詳細については，マニュアルHADB　システム構築・運用ガイドのトランザクションおよびコマンドが実行されるノードを参照してください。

また，ここでいう一部のコマンドについては，マニュアルHADB　システム構築・運用ガイドのトランザクションおよびコマンドが実行されるノードのトランザクションとコマンドの同時実行についての制限を参照してください。

●adb_clt_trn_access_mode = ｛READ_WRITE｜READ_ONLY｝

トランザクションアクセスモードを指定します。トランザクションアクセスモードについては，マニュアルHADB　システム構築・運用ガイドのトランザクションアクセスモードを参照してください。

READ_WRITE：

トランザクションアクセスモードを読み書き可能モードにします。この場合，トランザクションは読み書き可能トランザクションになり，すべてのSQL文を実行できます。

READ_ONLY：

トランザクションアクセスモードを読み取り専用モードにします。この場合，トランザクションは読み取り専用トランザクションになるため，更新系SQLおよび定義系SQLは実行できません。

なお，ここで設定したトランザクションアクセスモードを，次のコネクション属性の設定で変更することができます。

ODBC関数の場合：SQLSetConnectAttrまたはSQLSetConnectAttrW

CLI関数の場合：a_rdb_SQLSetConnectAttr()

このオペランドおよびコネクション属性の両方のトランザクションアクセスモードの指定を省略した場合，トランザクションアクセスモードは読み書き可能モードになります。

［マルチノード機能］

次に示すすべての条件を満たす場合に，セカンダリノードおよびワーカーノードに対してもトランザクションの実行処理が割り当てられます。

・トランザクションアクセスモードが読み取り専用モードである

・トランザクション隔離性水準がREAD COMMITTEDである

そのため，セカンダリノードおよびワーカーノードのリソースを活用したい場合は，このオペランドにREAD_ONLYを指定することを推奨します。

読み書き可能モードのトランザクションや，一部のコマンドがプライマリノードで実行中の間は，すべてのトランザクションがプライマリノードで実行されます。セカンダリノードおよびワーカーノードではトランザクションが実行されません。詳細については，マニュアルHADB　システム構築・運用ガイドのトランザクションおよびコマンドが実行されるノードを参照してください。

また，ここでいう一部のコマンドについては，マニュアルHADB　システム構築・運用ガイドのトランザクションおよびコマンドが実行されるノードのトランザクションとコマンドの同時実行についての制限を参照してください。

●adb_clt_sql_text_out =｛Y｜N｝

HADBクライアントが発行したSQL文を，クライアントメッセージログファイルおよびサーバメッセージログファイルに出力するかどうかを指定します。

なお，出力される各SQL文の長さの上限は2,048バイトです。

Y：

SQL文をクライアントメッセージログファイルおよびサーバメッセージログファイルに出力します。

N：

SQL文をクライアントメッセージログファイルおよびサーバメッセージログファイルに出力しません。

サーバ定義のadb_sql_text_outオペランドとの関係を次の表に示します。

表2‒2　サーバ定義のadb_sql_text_outオペランドとの関係

サーバ定義のadb_sql_text_outオペランドの指定

クライアント定義のadb_clt_sql_text_outオペランドの指定

Y

N

Y

◎

○

N

◎

×

（凡例）

◎：SQL文をサーバメッセージログファイルおよびクライアントメッセージログファイルの両方に出力します。

○：SQL文をサーバメッセージログファイルにだけ出力します。

×：SQL文をどちらのメッセージログファイルにも出力しません。

また，このオペランドを指定すると，トランザクションの正常終了を示すKFAA81002-Iメッセージがサーバメッセージログファイルに出力されるようになります。クライアントメッセージログファイルには出力されません。

このオペランドの指定を省略した場合，Nが仮定されます。

●adb_clt_sql_order_mode = ｛BYTE｜ISO｝

ORDER BY句を指定したSELECT文の文字データの並び替え順序を指定します。

BYTE：

文字データをバイトコード順に並び替えます。

ISO：

文字データをソートコード順（ISO/IEC14651:2011準拠）に並び替えます。

ただし，環境変数ADBCLTLANGにSJISを指定した場合は，このオペランドにISOは指定できません。

なお，文字データの並び替え順序は，サーバ定義adb_sql_order_modeオペランド，およびコネクション属性でも指定できます。それぞれ指定した場合は，次の表に示す優先順位に従って指定が決まります（優先順位の番号が小さいほど，優先順位が高くなります）。

表2‒3　文字データの並び替え順序の優先順位

優先順位

文字データの並び替え順序の指定個所

1

コネクション属性

2

クライアント定義adb_clt_sql_order_modeオペランド

3

サーバ定義adb_sql_order_modeオペランド

［説明］

例えば，クライアント定義adb_clt_sql_order_modeオペランドにBYTEを指定し，サーバ定義adb_sql_order_modeオペランドにISOを指定した場合，APから実行するSELECT文（ORDER BY句を指定）には，BYTEが適用されます。

なお，表中のすべての個所で指定を省略した場合は，BYTEが仮定されます。

●adb_sql_prep_dec_div_rs_prior = ｛INTEGRAL_PART｜FRACTIONAL_PART｝

SQL文中に指定した除算（四則演算）の結果のデータ型がDECIMAL型の場合，除算結果の位取りの最小値を指定します。

INTEGRAL_PART：

除算結果の位取りの最小値を0とします。INTEGRAL_PARTを指定した場合，整数部の桁数が優先されます。そのため，除算結果が大きな数値となる可能性があり，オーバフローエラーの発生を極力回避したい場合は，INTEGRAL_PARTを指定してください。

FRACTIONAL_PART：

除算の第1演算項（被除数）の位取りを，除算結果の位取りの最小値とします。FRACTIONAL_PARTを指定した場合，第1演算項の小数部の桁数が，除算結果の小数部の桁数の最小値になります。

第1演算項をDECIMAL(p1,s1)，第2演算項をDECIMAL(p2,s2)とした場合，除算結果はDECIMAL(38,s)となります。

INTEGRAL_PARTを指定した場合

s＝MAX｛0，38−（p1−s1＋s2）｝

FRACTIONAL_PARTを指定した場合

s＝MAX｛s1，38−（p1−s1＋s2）｝

このオペランドの指定値による除算結果の違いの例を次に示します。

（例）

次のSELECT文を実行したとします。

SELECT "C1"/"C2" AS "除算結果" FROM "T1"

INTEGRAL_PARTを指定した場合の除算結果

584.

FRACTIONAL_PARTを指定した場合の除算結果

584.4457

ビュー表を検索したときの除算結果の位取りの例については，マニュアルHADB　SQLリファレンスの除算結果のデータ型がDECIMAL型の場合の留意事項を参照してください。

このオペランドの指定を省略した場合，サーバ定義のadb_sql_prep_dec_div_rs_priorオペランドの指定値が適用されます。

2.3　オペランドの指定規則

クライアント定義のオペランドの指定規則は，サーバ定義のオペランドの指定規則と同じです。サーバ定義のオペランドの指定規則については，マニュアルHADB　システム構築・運用ガイドのサーバ定義の文法規則を参照してください。

2.4　クライアント定義の集中管理機能を使用する場合の留意事項

次に示すクライアント定義のオペランドは，クライアント定義の集中管理機能の適用対象外になります。そのため，次に示すオペランドは，各HADBクライアントのクライアント定義に指定してください。

adb_clt_rpc_srv_host

adb_clt_rpc_srv_port

adb_clt_rpc_con_wait_time

adb_clt_rpc_sql_wait_time

クライアント定義の集中管理機能については，マニュアルHADB　システム構築・運用ガイドのクライアント定義の集中管理機能を参照してください。

3　JDBCドライバの環境設定

この章では，JDBCドライバのインストールや，環境変数の設定など，JDBCドライバの環境設定方法について説明します。

3.1　JDBCドライバの環境設定手順

JDBCドライバの環境設定方法について説明します。「3.1.1　Java Runtime EnvironmentまたはJava Development Kitのインストール」以降の説明に従ってJDBCドライバの環境設定をしてください。

3.1.1　Java Runtime EnvironmentまたはJava Development Kitのインストール

APを実行または開発するマシンに，次のどちらかの製品をインストールしてください。

Java Runtime Environment（JRE）バージョン8以降

Java Development Kit（JDK）バージョン8以降

JREは，APの実行をする場合に必要となる製品です。JDKは，APの開発および実行をする場合に必要となる製品です。

メモ

HADBサーバでAPを実行する場合は，HADBサーバをインストールしたマシンにJREをインストールしてください。HADBサーバでAPを開発および実行する場合は，HADBサーバをインストールしたマシンにJDKをインストールしてください。

■HADBが提供しているJDBCドライバ

HADBが提供しているJDBCドライバを次の表に示します。

表3‒1　HADBが提供しているJDBCドライバ

JREまたはJDKのバージョン

HADBが提供しているJDBCドライバの種類

JARファイル名

対応するJDBC規格

JRE8以降またはJDK8以降

JRE8版のJDBCドライバ

adbjdbc8.jar

JDBC4.2

3.1.2　JDBCドライバのインストール

JDBCドライバのインストール手順を次に示します。

手順

HADBクライアントのインストールCD-ROMに格納されている圧縮ファイルを任意のフォルダにコピーする

次のファイルをコピーします。

64ビット版のWindowsの場合

hitachi_advanced_data_binder_client.zip

32ビット版のWindowsの場合

hitachi_advanced_data_binder_client32.zip

Linuxの場合

hitachi_advanced_data_binder_client-$VER.tar.gz

$VERは，HADBのバージョンおよびリリース番号になります。

コピーした圧縮ファイルを解凍する

圧縮ファイル解凍後のJARファイルの格納先を次の表に示します。

表3‒2　圧縮ファイル解凍後のJARファイルの格納先

解凍した圧縮ファイル

JARファイルの格納先

次のどちらかの圧縮ファイルを解凍した場合

hitachi_advanced_data_binder_client.zip

hitachi_advanced_data_binder_client32.zip

%INSTCLTDIR%¥HADBCL¥client¥lib¥adbjdbc8.jar

%INSTCLTDIR%は，圧縮ファイルの解凍先フォルダです。

hitachi_advanced_data_binder_client-$VER.tar.gzを解凍した場合

$INSTCLTDIR/hitachi_advanced_data_binder_client_$VER/client/lib/adbjdbc8.jar

$INSTCLTDIRは，圧縮ファイルの解凍先ディレクトリです。

JARファイルを任意のフォルダにコピーする

次のフォルダおよびファイルを削除する

手順の1.でコピーした圧縮ファイル

手順の2.で解凍したフォルダおよびファイル

3.1.3　環境変数CLASSPATHの指定

環境変数CLASSPATHにJARファイルの絶対パスを指定してください。

重要

OSがWindowsの場合，CLASSPATHはシステム環境変数に設定してください。

JARファイルの格納先を変更した場合は，CLASSPATHの指定も変更してください。

3.1.4　環境変数TZの指定値の確認

環境変数TZに正しいタイムゾーンが設定されていることを確認してください。

重要

うるう秒対応のタイムゾーンは設定しないでください。

OSがWindowsの場合，TZはシステム環境変数に設定してください。

3.1.5　トレースファイルの出力先ディレクトリに対する書き込み権限の付与

JDBCドライバのトラブルシュート機能であるJDBCインタフェースメソッドトレース，またはExceptionトレースログを使用する場合，トレースファイルの出力先フォルダ（ディレクトリ）への書き込み権限を，JDBCドライバを使用するユーザに与える必要があります。

これらのトラブルシュート機能の詳細については，「7.7　トラブルシュート」を参照してください。

3.1.6　システムプロパティの設定

APの実行環境をシステムプロパティで設定します。次の表に示すプロパティをシステムプロパティに指定できます。

重要

次の表の項番1～項番18までのプロパティで，クライアント定義のオペランドと同じ指定ができます。

項番19以降のプロパティには，Exceptionトレースログに関する設定を指定します。

表3‒3　システムプロパティに指定できるプロパティ

項番

プロパティ名

説明

1

adb_clt_rpc_srv_host

接続先のHADBサーバのホスト名を指定します。

このプロパティの機能は，クライアント定義のadb_clt_rpc_srv_hostオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_srv_hostオペランドを参照してください。

2

adb_clt_rpc_srv_port

HADBクライアントとHADBサーバ間の通信で使用する，HADBサーバのポート番号を指定します。

このプロパティの機能は，クライアント定義のadb_clt_rpc_srv_portオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_srv_portオペランドを参照してください。

3

adb_clt_rpc_con_wait_time

HADBサーバへの接続処理の完了待ち時間を指定します。

このプロパティの機能は，クライアント定義のadb_clt_rpc_con_wait_timeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_con_wait_timeオペランドを参照してください。

4

adb_clt_rpc_sql_wait_time

次に示す待ち時間を指定します。

HADBクライアントからHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間

同一コネクションで複数のSELECT文を同時実行した際に，処理リアルスレッド数不足が発生したときの処理リアルスレッドの確保処理の待ち時間

このプロパティを指定したときの待ち時間の監視の詳細については，「3.2　APの無応答状態への対策」を参照してください。

このプロパティの機能は，クライアント定義のadb_clt_rpc_sql_wait_timeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_sql_wait_timeオペランドを参照してください。

5

adb_clt_ap_name

HADBサーバに接続するAPの識別情報（AP識別子）を指定します。

このプロパティの機能は，クライアント定義のadb_clt_ap_nameオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_ap_nameオペランドを参照してください。

6

adb_clt_group_name

APが属するクライアントグループ名を指定します。

このプロパティの機能は，クライアント定義のadb_clt_group_nameオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_group_nameオペランドを参照してください。

7

adb_clt_fetch_size

1回のFETCH処理で，HADBサーバからHADBクライアントに送信する検索結果の行数を指定します。

このプロパティの機能は，クライアント定義のadb_clt_fetch_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_fetch_sizeオペランドを参照してください。

8

adb_dbbuff_wrktbl_clt_blk_num

ローカル作業表用バッファのページ数を指定します。

このプロパティの機能は，クライアント定義のadb_dbbuff_wrktbl_clt_blk_numオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_dbbuff_wrktbl_clt_blk_numオペランドを参照してください。

9

adb_sql_exe_max_rthd_num

SQL実行時に使用する処理リアルスレッド数の最大値を指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_max_rthd_numオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_max_rthd_numオペランドを参照してください。

10

adb_sql_exe_hashgrp_area_size

ハッシュグループ化領域の大きさをキロバイト単位で指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドを参照してください。

11

adb_sql_exe_hashtbl_area_size

ハッシュテーブル領域サイズをメガバイト単位で指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドを参照してください。

12

adb_sql_exe_hashflt_area_size

ハッシュフィルタ領域サイズをメガバイト単位で指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドを参照してください。

13

adb_clt_sql_parallel_exec

SQLパラレル実行機能を適用して検索系SQLを実行するかどうかを指定します。

このプロパティの機能は，クライアント定義のadb_clt_sql_parallel_execオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_sql_parallel_execオペランドを参照してください。

14

adb_sql_prep_delrsvd_use_srvdef

サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定に従って予約語を削除するかどうかを指定します。

このプロパティの機能は，クライアント定義のadb_sql_prep_delrsvd_use_srvdefオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_prep_delrsvd_use_srvdefオペランドを参照してください。

15

adb_clt_trn_iso_lv

トランザクション隔離性水準を指定します。

このプロパティの機能は，クライアント定義のadb_clt_trn_iso_lvオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_trn_iso_lvオペランドを参照してください。

16

adb_clt_trn_access_mode

トランザクションアクセスモードを指定します。

このプロパティの機能は，クライアント定義のadb_clt_trn_access_modeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_trn_access_modeオペランドを参照してください。

17

adb_clt_sql_text_out

HADBクライアントが発行したSQL文を，クライアントメッセージログファイルおよびサーバメッセージログファイルに出力するかどうかを指定します。

このプロパティの機能は，クライアント定義のadb_clt_sql_text_outオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_sql_text_outオペランドを参照してください。

18

adb_clt_sql_order_mode

ORDER BY句を指定したSELECT文の文字データの並び替え順序を指定します。

このプロパティの機能は，クライアント定義のadb_clt_sql_order_modeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_sql_order_modeオペランドを参照してください。

19

adb_sql_prep_dec_div_rs_prior

SQL文中に指定した除算（四則演算）の結果のデータ型がDECIMAL型の場合，除算結果の位取りの最小値を指定します。

このプロパティの機能は，クライアント定義のadb_sql_prep_dec_div_rs_priorオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_prep_dec_div_rs_priorオペランドを参照してください。

20

adb_jdbc_exc_trc_out_path

Exceptionトレースログを出力するディレクトリを，絶対パスで指定します。

これらのプロパティの機能詳細および指定できる値については，「7.7.2　Exceptionトレースログ」の「(1)　取得するメソッド，および取得するための設定」の「(b)　Exceptionトレースログを取得するための設定（プロパティの設定）」を参照してください。

21

adb_jdbc_info_max

1ファイルへ出力する情報数の上限を指定します。

22

adb_jdbc_cache_info_max

メモリ内で蓄積する情報数の上限を指定します。

23

adb_jdbc_trc_out_lv

トレース取得レベルを指定します。

重要

ユーザプロパティまたは接続用のURLのプロパティでも，上記の表に示すプロパティの値を指定できます。

ユーザプロパティについては，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(d)　引数infoの指定内容（ユーザプロパティの指定）」を参照してください。

接続用のURLのプロパティについては，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(a)　引数urlの指定内容（接続用のURLの指定）」を参照してください。

各指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

メモ

HADB 03-00で，システムプロパティの各プロパティ名を次のように変更しました。変更前のプロパティ名も使用できますが，HADB 03-00以降にバージョンアップした場合は，プロパティ名を変更することを推奨します。

項番

変更前のプロパティ名（HADB 03-00より前のプロパティ名）

変更後のプロパティ名（HADB 03-00以降のプロパティ名）

1

adb_jdbc_ap_name

adb_clt_ap_name

2

adb_jdbc_dbbuff_wrktbl_blk_num

adb_dbbuff_wrktbl_clt_blk_num

3

adb_jdbc_fetch_size

adb_clt_fetch_size

4

adb_jdbc_rpc_sql_wait_time

adb_clt_rpc_sql_wait_time

5

adb_jdbc_rpc_srv_host

adb_clt_rpc_srv_host

6

adb_jdbc_rpc_srv_port

adb_clt_rpc_srv_port

7

adb_jdbc_sql_delrsvd_use_srvdef

adb_sql_prep_delrsvd_use_srvdef

8

adb_jdbc_sql_hashgrp_area_size

adb_sql_exe_hashgrp_area_size

9

adb_jdbc_sql_hashtbl_area_size

adb_sql_exe_hashtbl_area_size

10

adb_jdbc_sql_max_rthd_num

adb_sql_exe_max_rthd_num

11

adb_jdbc_sql_order_mode

adb_clt_sql_order_mode

12

adb_jdbc_sql_text_out

adb_sql_text_out

13

adb_jdbc_trn_access_mode

adb_clt_trn_access_mode

14

adb_jdbc_trn_iso_lv

adb_clt_trn_iso_lv

3.1.7　ウイルス対策ソフトによるスキャン対象の見直し

JDBCドライバをインストールしたマシンに，ウイルス対策ソフトがインストールされている場合は，スキャン対象を見直してください。ウイルス対策ソフトのスキャン対象に，JDBCドライバが使用するディレクトリやファイルが含まれている場合，JDBCドライバが正常に動作しないおそれがあります。そのため，ウイルス対策ソフトのスキャン対象から，JDBCドライバが使用するディレクトリやファイルを除いてください。

3.2　APの無応答状態への対策

通信障害，瞬断を含む一時的な障害，またはディスク障害などによって，APが無応答状態になることがあります。無応答状態のAPが発生した場合，その影響によってほかのAPやコマンドの処理が停滞することがあります。

そこで，無応答状態のAPが発生したときに，その影響をなるべく小さくするために，システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティで次のプロパティを指定してください。

adb_clt_rpc_sql_wait_time

このプロパティ値には，クライアント（JDBCドライバをインストールしたマシン）からHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間を指定します。ここで指定した待ち時間を超えてもHADBサーバから応答がない場合，SQLCODEが-732（KFAA30732-E）のタイムアウトエラーがAPに返されます。このとき，SQL文の処理はキャンセルされ，トランザクションはロールバックされます。そのあと，HADBサーバからAPが切り離されます。

adb_clt_rpc_sql_wait_timeによる待ち時間の監視イメージを次の図に示します。

図3‒1　adb_clt_rpc_sql_wait_timeによる待ち時間の監視イメージ

［説明］

クライアントからHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間を監視しています。例えば，adb_clt_rpc_sql_wait_timeに600秒を指定した場合，各監視区間に対して600秒の待ち時間が設定されます。したがって，処理時間がいちばん長いSQL文を目安にして，待ち時間を指定します。待ち時間には，APが無応答状態になった可能性が高いと考えられる時間を指定してください。

なお，adb_clt_rpc_sql_wait_timeを指定したときは，さらに次の待ち時間も監視対象になります。

同一コネクションで複数のSELECT文を同時実行した際に，処理リアルスレッド数不足が発生したときの処理リアルスレッドの確保処理の待ち時間

上記の待ち時間を超えた場合，SQLCODEが-1071570（KFAA71570-E）のタイムアウトエラーがAPに返されます。このとき，SQL文の処理はキャンセルされますが，トランザクションはロールバックされません。また，APはHADBサーバから切り離されません。

adb_clt_rpc_sql_wait_timeを指定する目的については，「7.4.1　データの検索方法」の「(4)　同一コネクションで複数のSELECT文を同時実行する際の注意事項」を参照してください。

メモ

adb_clt_rpc_sql_wait_timeについては，「3.1.6　システムプロパティの設定」を参照してください。

3.3　JDBCドライバのバージョンアップ（JARファイルの差し替え）

JDBCドライバのバージョンアップ手順を次に示します。

手順

HADBクライアントのインストールCD-ROMに格納されている圧縮ファイルを任意のフォルダにコピーする

次のファイルをコピーします。

64ビット版のWindowsの場合

hitachi_advanced_data_binder_client.zip

32ビット版のWindowsの場合

hitachi_advanced_data_binder_client32.zip

Linuxの場合

hitachi_advanced_data_binder_client-$VER.tar.gz

$VERは，HADBのバージョンおよびリリース番号になります。

コピーした圧縮ファイルを解凍する

圧縮ファイル解凍後のJARファイルの格納フォルダについては，「表3‒2　圧縮ファイル解凍後のJARファイルの格納先」を参照してください。

JARファイルを既存のJARファイルと差し替える

HADBサーバへの接続確認をする

次のフォルダおよびファイルを削除する

手順の1.でコピーした圧縮ファイル

手順の2.で解凍したフォルダおよびファイル

重要

上記の1.～3.の作業を実行するOSユーザを途中で変更しないでください。変更した場合，バージョンアップが正しくできないことがあります。

■バージョンアップ後の確認事項

JDBCドライバをバージョンアップすると，プロパティ※のデフォルト値が変更されることがあります。各プロパティのデフォルト値が変更されているかどうかを確認してください。デフォルト値が変更されている場合は，必要に応じてプロパティを指定してください。各プロパティのデフォルト値は，クライアント環境定義の各オペランドのデフォルト値と同じになります。クライアント定義の各オペランドのデフォルト値については，「2.2　クライアント定義のオペランドの内容」を参照してください。

注※

「表3‒3　システムプロパティに指定できるプロパティ」のプロパティが該当します。

■JDBCドライバを旧バージョンに戻す場合

手順を次に示します。

手順

JARファイルを以前使用していたJARファイルに戻す

システムプロパティの指定値を戻す

JDBCドライバをバージョンアップした際，システムプロパティの値を変更している場合は，バージョンダウンするときに，旧バージョンの指定値に戻す必要があります。

HADBサーバへの接続確認をする

重要

上記の1.～2.の作業を実行するOSユーザを途中で変更しないでください。変更した場合，JDBCドライバが正しく動作しないことがあります。

3.4　修正版のJDBCドライバとの入れ替え

修正版のJDBCドライバとの入れ替え手順は，JDBCドライバのバージョンアップ手順と同じになります。手順については，「3.3　JDBCドライバのバージョンアップ（JARファイルの差し替え）」を参照してください。

3.5　JDBCドライバをインストールしたマシンのOSの時刻変更

JDBCドライバをインストールしたマシンのOSの時刻を変更する手順については，「4.9　クライアントマシンのOSの時刻変更」を参照してください。その際，クライアントマシンは，「JDBCドライバをインストールしたマシン」と読み替えてください。

3.6　JDBCドライバのアンインストール

JDBCドライバのアンインストール手順を次に示します。

手順

JARファイルを削除する

環境変数CLASSPATHの指定を削除する

4　HADBクライアントの環境設定（ODBCドライバおよびCLI関数を使用する場合）

この章では，HADBクライアントのインストールや環境変数の設定など，HADBクライアントの環境設定方法について説明します。

4.1　HADBクライアントの環境設定手順

HADBクライアントの環境設定手順について説明します。

4.1.1　Windows版のHADBクライアントの場合

HADBサーバ以外のマシンでAPを作成または実行する場合，そのマシンをHADBクライアントとして運用します。Windows版のHADBクライアントの環境設定手順を次に示します。

図4‒1　Windows版のHADBクライアントの環境設定手順

各手順の参照先

HADBクライアントのインストールについては，「4.2.1　Windows版のHADBクライアントの場合」を参照してください。

環境変数の設定については，「4.3.1　Windows版のHADBクライアントの場合」を参照してください。

クライアント定義の作成については，「4.4　クライアント定義の作成」を参照してください。

クライアント定義の各オペランドの説明については，「2.　クライアント定義の設計」を参照してください。

APの無応答状態への対策については，「4.5　APの無応答状態への対策」を参照してください。

なお，HADBクライアントをインストールする前に，HADBクライアントのメモリ所要量を計算してください。HADBクライアントのメモリ所要量の計算式については，「付録C　HADBクライアントのメモリ所要量の見積もり」を参照してください。

4.1.2　Linux版のHADBクライアントの場合

HADBサーバ以外のマシンでAPを作成または実行する場合，そのマシンをHADBクライアントとして運用します。Linux版のHADBクライアントの環境設定手順を次に示します。

図4‒2　Linux版のHADBクライアントの環境設定手順

各手順の参照先

HADBクライアントのインストールについては，「4.2.2　Linux版のHADBクライアントの場合」を参照してください。

環境変数の設定については，「4.3.2　Linux版のHADBクライアントの場合」を参照してください。

クライアント定義の作成については，「4.4　クライアント定義の作成」を参照してください。

クライアント定義の各オペランドの説明については，「2.　クライアント定義の設計」を参照してください。

APの無応答状態への対策については，「4.5　APの無応答状態への対策」を参照してください。

なお，HADBクライアントをインストールする前に，HADBクライアントのメモリ所要量を計算してください。HADBクライアントのメモリ所要量の計算式については，「付録C　HADBクライアントのメモリ所要量の見積もり」を参照してください。

4.2　HADBクライアントのインストールおよびアンインストール

HADBクライアントのインストール方法およびアンインストール方法について説明します。

4.2.1　Windows版のHADBクライアントの場合

ここでは，Windows版のHADBクライアントのインストールおよびアンインストールについて説明します。

HADBクライアントをインストールまたはアンインストールするには，管理者特権が必要です。

(1)　HADBクライアントのインストール

HADBクライアントのインストール手順を次に示します。

手順

HADBクライアントを管理するOSユーザでログインする

HADBクライアントのインストールデータをコピーする

HADBクライアントのインストールCD-ROMに格納されている次の圧縮ファイル（zip形式ファイル）を，クライアントマシンの任意のフォルダにコピーしてください。この手順の説明では，D:¥hadb_cltフォルダにコピーするものとします。

64ビット版のHADBクライアントを使用する場合：hitachi_advanced_data_binder_client.zip

32ビット版のHADBクライアントを使用する場合：hitachi_advanced_data_binder_client32.zip

コピー先のフォルダは，パス長が200バイト以内のフォルダにしてください。

コピー先のフォルダのパス名に使用できる文字については，はじめにの「■このマニュアルで使用する構文要素記号」の〈パス名〉を参照してください。

コピーしたファイルのハッシュ値を取得する

コマンドプロンプトを起動して，次のコマンドを実行してください。

64ビット版のHADBクライアントを使用する場合

cd /D D:¥hadb_clt
certutil -hashfile hitachi_advanced_data_binder_client.zip SHA256

32ビット版のHADBクライアントを使用する場合

cd /D D:¥hadb_clt
certutil -hashfile hitachi_advanced_data_binder_client32.zip SHA256

下線部分は，手順2.でインストールデータをコピーしたフォルダです。

ハッシュ値を比較する

手順3.で取得したハッシュ値と，インストールCD-ROMに格納されている次のファイルに記載されているハッシュ値を比較してください。

64ビット版のHADBクライアントを使用する場合：adbhashfile_winclt64_sha256.txt

32ビット版のHADBクライアントを使用する場合：adbhashfile_winclt32_sha256.txt

ハッシュ値が同じ場合は，問題ありません。次の手順に進んでください。

ハッシュ値が異なる場合は，ファイルのコピーが失敗しているおそれがあります。手順2.から作業をし直してください。

圧縮ファイルを解凍する

（例）hitachi_advanced_data_binder_client.zipを解凍した場合

D:¥hadb_clt¥hitachi_advanced_data_binder_client¥HADBCLフォルダ下に，HADBクライアントのフォルダおよびファイルが展開されます。

D:¥hadb_clt¥hitachi_advanced_data_binder_client¥HADBCLフォルダは，圧縮ファイルを解凍したときのデフォルトの解凍先です。

HADBクライアントのバージョン情報を確認する

解凍先フォルダ下に格納されているreadme.txtファイルを開いてください。

1行目に記載されているHADBクライアントのバージョン情報を見て，次のどちらかの情報が記載されていることを確認してください。

P-2462-C114 vv-rr

P-2462-C114 vv-rr-/s

vv-rrおよびvv-rr-/sは，HADBクライアントのバージョンを示しています。

重要

ODBCドライバを使用する場合，HADBクライアントとODBCドライバのバージョン情報が一致している必要があります。そのため，クライアントディレクトリ下のclient¥binフォルダ内に格納されているdllの一部差し替えはしないでください。

■インストール後の作業

インストール後，次の作業を実施してください。

環境変数の設定

設定する必要がある環境変数については，「4.3.1　Windows版のHADBクライアントの場合」を参照してください。

なお，環境変数ADBCLTDIRには，クライアントディレクトリの絶対パスを指定します。上記のインストールの手順で説明した例の場合，D:¥hadb_clt¥hitachi_advanced_data_binder_client¥HADBCLがクライアントディレクトリになります。

クライアントディレクトリとは，1つのクライアントプロセスに関するファイル群を格納したフォルダのことです。

レジストリキーの登録

環境変数の設定後，次のレジストリ登録コマンドを実行してレジストリキーを登録してください。

・64ビット版のHADBクライアントを使用する場合：%ADBCLTDIR%¥adbreg.reg

・32ビット版のHADBクライアントを使用する場合：%ADBCLTDIR%¥adbreg32.reg

Microsoft Visual C++ライブラリのランタイムコンポーネントのインストール

HADBクライアント（ODBCドライバを含む）を使用する可能性があるOSユーザは，次に示すMicrosoft Visual Studio 2019のMicrosoft Visual C++再頒布可能パッケージを実行して，Microsoft Visual C++ライブラリのランタイムコンポーネントをインストールしてください。

・64ビット版のHADBクライアントを使用する場合：%ADBCLTDIR%¥vclib¥VC_redist.x64.exe

・32ビット版のHADBクライアントを使用する場合：%ADBCLTDIR%¥vclib32¥VC_redist.x86.exe

フォルダへの書き込み権限の付与

HADBクライアント（ODBCドライバを含む）を使用する可能性があるOSユーザに対して，次に示すフォルダへの書き込み権限を与えてください。

・%ADBCLTDIR%¥spool

・%ADBODBTRCPATH%

このフォルダは，64ビット版のHADBクライアントと32ビット版のHADBクライアントで共通です。

ウイルス対策ソフトによるスキャン対象の見直し

HADBクライアントをインストールしたクライアントマシンに，ウイルス対策ソフトがインストールされている場合は，スキャン対象を見直してください。

ウイルス対策ソフトのスキャン対象に，HADBクライアントが使用するディレクトリやファイルを設定した場合，HADBクライアントが正常に動作しないおそれがあります。そのため，ウイルス対策ソフトのスキャン対象から，クライアントディレクトリを除いてください。

(2)　HADBクライアントのアンインストール

HADBクライアントをアンインストールする前に次のことをしてください。

HADBクライアントから実行しているコマンドまたはAPがないか確認してください。コマンドまたはAPの実行中にHADBクライアントのアンインストールを実行すると，アンインストールが失敗するおそれがあります。

クライアントディレクトリ下に必要なファイルがある場合は，バックアップを取得してください。

HADBクライアントのアンインストール手順を次に示します。

手順

レジストリキーを削除する

インストール時に登録したレジストリキーを，次のレジストリ削除コマンドを実行して削除してください。

64ビット版のHADBクライアントを使用している場合：%ADBCLTDIR%¥adbunreg.reg

32ビット版のHADBクライアントを使用している場合：%ADBCLTDIR%¥adbunreg32.reg

HADBクライアントのインストール時にコピーしたすべてのフォルダおよびファイルを削除する

インストール後に作成したフォルダおよびファイルも削除してください。

4.2.2　Linux版のHADBクライアントの場合

ここでは，Linux版のHADBクライアントのインストールおよびアンインストールについて説明します。

重要

HADBクライアントのインストールは，HADBクライアントを管理するOSユーザが実行します。

インストールを実行するOSユーザのユーザ名は32バイト以内にしてください。

なお，以降の説明で出てくるクライアントディレクトリとは，1つのクライアントプロセスに関するファイル群を格納したディレクトリのことです。

(1)　HADBクライアントをインストールする前の確認事項

HADBクライアントをインストールする前に，HADBクライアントが正しく動作するために必要なパッケージがOSにインストールされていることを確認してください。必要なパッケージを次の表に示します。

表4‒1　必要なパッケージ

項番

パッケージ名

Linuxのバージョン

RHEL 6

RHEL 7

RHEL 8

1

compat-openssl10

－

－

○

2

glibc

○

○

○

3

libaio

○

○

○

4

libuuid

○

○

○

5

openssl

○

－

－

6

openssl-libs

－

○

－

7

zlib

○

○

○

（凡例）

○：このLinuxのバージョンでは必要なパッケージです。

－：このLinuxのバージョンでは不要なパッケージです。

■インストール済みのパッケージを確認する方法

次のコマンドを実行すると，OSにインストール済みのパッケージの一覧が表示されます。

yum list installed

インストールされていないパッケージがある場合は，そのパッケージをOSにインストールしてください。パッケージのインストール方法については，OSのマニュアルを参照してください。

■特定のパッケージがインストール済みかどうかを確認する方法

（例）

パッケージlibaioがインストール済みかどうかを確認します。

yum list installed | grep libaio

実行結果にパッケージlibaioが表示された場合は，パッケージlibaioはインストール済みです。実行結果にパッケージlibaioが表示されなかった場合は，パッケージlibaioはインストールされていません。

(2)　HADBクライアントのインストール

HADBクライアントのインストール手順を次に示します。

手順

HADBクライアントを管理するOSユーザでログインする

インストールデータを格納するディレクトリを作成する

mkdir /home/osuser01/client

上記の例では，HADBクライアントのインストールデータを格納するディレクトリとして/home/osuser01/clientを作成しています。

インストールデータを格納するディレクトリに対して書き込み権限を付与する

chmod 755 /home/osuser01/client

インストールデータを格納するディレクトリに対して，HADBクライアントを管理するOSユーザが書き込みできるように，ディレクトリ（この例では/home/osuser01/client）に対して書き込み権限を付与してください。

CD-ROMファイルシステムをマウントする

HADBクライアントのインストールデータが格納されているCD-ROMファイルシステムを自動マウントしてください。

CD-ROMファイルシステムが自動マウントされない場合，次のコマンドを実行してCD-ROMファイルシステムをマウントしてください。

mount /dev/cdrom /media

下線部分は，CD-ROMファイルシステムのマウントディレクトリ名です。環境によって異なります。

重要

CD-ROMのディレクトリ名やファイル名は，ご使用のマシンによっては，ここの説明内容と表示が異なることがあります。OSのlsコマンドを実行して，表示されたディレクトリ名をそのまま入力してください。

インストールデータをコピーする

マウントしたCD-ROMファイルシステムに格納されている次のファイルを，手順2.で作成したインストールデータを格納するディレクトリにコピーしてください。

tar.gz形式のファイル

adbinstallコマンドの実行形式ファイル

cp /media/hitachi_advanced_data_binder_client-$VER.tar.gz /home/osuser01/client   ...a
cp /media/adbinstall /home/osuser01/client                                        ...b

［説明］

tar.gz形式のファイル（HADBクライアントのプログラムの圧縮ファイル）をコピーします。

adbinstallコマンドの実行形式ファイル（HADBクライアントのインストールコマンド）をコピーします。

下線部分は，CD-ROMファイルシステムのマウントディレクトリ名です。環境によって異なります。

$VERは，HADBクライアントのバージョンおよびリリース番号です。

重要

上記の2つのファイルは，必ず同じディレクトリにコピーしてください。異なるディレクトリにコピーすると，HADBクライアントがインストールできません。

コピーしたファイルに破損がないことを確認する

手順5.でコピーしたファイルに破損がないことを確認します。次のコマンドを実行してください。

cd /home/osuser01/client
sha256sum -c /media/adbhashfile_client_sha256.txt

下線部分は，CD-ROMファイルシステムのマウントディレクトリ名です。環境によって異なります。

ファイルが破損しているおそれがある（ファイルのハッシュ値が異なる）場合は，エラーを示すメッセージが出力されます。この場合，手順5.から作業をし直してください。

出力されるメッセージの詳細については，OSのマニュアルを参照してください。

権限を付与する

HADBクライアントを管理するOSユーザがadbinstallコマンド（HADBクライアントのインストールコマンド）を実行できるように，adbinstallコマンドに対する実行権限を付与してください。

また，tar.gz形式のファイルに対する読み取り権限も付与してください。

chmod 555 /home/osuser01/client/adbinstall
chmod 444 /home/osuser01/client/hitachi_advanced_data_binder_client-$VER.tar.gz

$VERは，HADBクライアントのバージョンおよびリリース番号です。

HADBクライアントをインストールする

adbinstallコマンドを実行して，HADBクライアントをインストールしてください。

/home/osuser01/client/adbinstall -c /home/osuser01/clientdir

下線部分には，手順2.で作成したインストールデータを格納するディレクトリを指定します。

-cオプションに指定したディレクトリ下（上記の場合，/home/osuser01/clientdirディレクトリ下）に，HADBクライアントがインストールされます。このディレクトリが，クライアントディレクトリになります。

メモ

-cオプションに指定したディレクトリが存在しないときは，adbinstallコマンドを実行すると，自動的にディレクトリが作成されます。

クライアントディレクトリに関する規則を次に示します。

クライアントディレクトリのパス長は，118バイト以内になるようにしてください。

クライアントディレクトリのパス名に使用できる文字については，はじめにの「■このマニュアルで使用する構文要素記号」の〈パス名〉を参照してください。

adbinstallコマンドの-cオプションで指定するディレクトリには，必ずHADBクライアントを管理するOSユーザが書き込みできるディレクトリを指定してください。

HADBクライアントが正常にインストールされたことを確認する

クライアントディレクトリ下のadbinstcl.logファイルを開いて内容を確認してください。HADBクライアントが正常にインストールされている場合は，次のどちらかの情報が記載されています。

Hitachi Advanced Data Binder Client vv-rr (yyyymmddhhmmss)

Hitachi Advanced Data Binder Client vv-rr-/s (yyyymmddhhmmss)

vv-rrおよびvv-rr-/sは，HADBクライアントのバージョンを示しています。

yyyymmddhhmmssは，HADBクライアントのインストールを実行した日付と時刻を示しています。

メモ

adbinstcl.logファイルがすでにある状態のときにadbinstallコマンドを実行すると，adbinstcl.logファイルの内容が更新されます。また，adbinstallコマンドを複数回実行した場合，最後に実行した日付と時刻が記載されます。

adbinstallコマンドのリターンコード（KFAA91552-Iメッセージに出力されるリターンコード）が0または4以外の場合，adbinstcl.logファイルの内容は更新されません。

adbinstallコマンドの実行時にKFAA91555-Iメッセージが出力された場合，adbinstcl.logファイルの内容は更新されません。

■KFAA91553-Eメッセージが出力された場合の対処方法

HADBクライアントを管理するOSユーザが書き込みできないディレクトリを，adbinstallコマンドの-cオプションに指定した場合，KFAA91553-Eメッセージが出力されます。

また，インストールデータを格納するディレクトリに，HADBクライアントを管理するOSユーザが書き込みできない場合も，KFAA91553-Eメッセージが出力されます。

KFAA91553-Eメッセージが出力された場合は，対象のディレクトリに書き込み権限を付与してください。

■KFAA91558-Wメッセージが出力された場合の対処方法

HADBクライアントを管理するOSユーザではなく，rootでadbinstallコマンドを実行した場合，KFAA91558-Wメッセージが出力されます。

通常は，HADBクライアントを管理するOSユーザで，adbinstallコマンドを実行します。そのため，KFAA91558-Wメッセージが出力された場合は，rootでadbinstallコマンドを実行しても問題がないかどうかを確認してください。

問題がある場合は，KFAA91558-Wメッセージが出力されたあとに出力されるKFAA91559-Qメッセージの入力要求に対して，nまたはNを入力してください。そのあとで，HADBクライアントを管理するOSユーザでadbinstallコマンドを実行してください。

メモ

root以外のスーパユーザでadbinstallコマンドを実行した場合は，KFAA91558-Wメッセージは出力されません。

rootは，OSのid -uコマンドを実行して表示される値が0のユーザを指します。また，OSのsuコマンドを使用して，ほかのOSユーザからrootに切り替えたあとで，OSのid -uコマンドを実行して表示される値が0のときも含みます。

■インストール後の作業

環境変数の設定

インストール後，環境変数を設定してください。設定する必要がある環境変数については，「4.3.2　Linux版のHADBクライアントの場合」を参照してください。

なお，環境変数ADBCLTDIRには，クライアントディレクトリの絶対パスを指定します。上記のインストールの手順で説明した例の場合，/home/osuser01/clientdirがクライアントディレクトリになります。

ウイルス対策ソフトによるスキャン対象の見直し

HADBクライアントをインストールしたクライアントマシンに，ウイルス対策ソフトがインストールされている場合は，スキャン対象を見直してください。

ウイルス対策ソフトのスキャン対象に，HADBクライアントが使用するディレクトリやファイルを設定した場合，HADBクライアントが正常に動作しないおそれがあります。そのため，ウイルス対策ソフトのスキャン対象から，クライアントディレクトリを除いてください。

メモ

adbinstallコマンドでHADBクライアントをインストールしたときのクライアントディレクトリの構成については，「付録B.2　Linux版のHADBクライアントの場合」の「(1)　クライアントディレクトリ（インストール時）の構成」を参照してください。

(3)　HADBクライアントのアンインストール

HADBクライアントのアンインストールは，インストールを実施したOSユーザが実行してください。

アンインストール前に次のことをしてください。

HADBクライアントから実行しているコマンドまたはAPがないか確認してください。コマンドまたはAPの実行中にHADBクライアントのアンインストールを実行すると，アンインストールが失敗するおそれがあります。

クライアントディレクトリ下に必要なファイルがある場合は，バックアップを取得してください。

HADBクライアントのアンインストール手順を次に示します。

手順

クライアントディレクトリを削除する

インストールを実施したOSユーザで，クライアントディレクトリを削除します。

rm -rf /home/osuser01/clientdir

インストールデータを格納するディレクトリを削除する

インストールを実施したOSユーザで，インストールデータを格納するディレクトリを削除します。

rm -rf /home/osuser01/client

インストール時に設定した環境変数の指定を削除する

4.3　環境変数の設定

HADBクライアントで設定する環境変数について説明します。

4.3.1　Windows版のHADBクライアントの場合

Windows版のHADBクライアントで次の表に示す環境変数を設定してください。

表4‒2　環境変数に設定する値

項番

環境変数

設定する値

1

PATH

この環境変数には，次に示すフォルダを追加してください。

64ビット版のHADBクライアントを使用する場合：

%ADBCLTDIR%¥client¥bin

32ビット版のHADBクライアントを使用する場合：

%ADBCLTDIR%¥client¥bin

この環境変数はシステム環境変数に設定してください。

2

TZ

この環境変数には，HADBクライアントをインストールするマシンのタイムゾーンを設定します。

この環境変数はシステム環境変数に設定してください。

なお，うるう秒対応のタイムゾーンは設定しないでください。

3

ADBCLTDIR

クライアントディレクトリの絶対パスを指定してください。レジストリ登録または削除コマンドを実施する前に，この環境変数を必ず設定しておいてください。

パスのうち，最初の3文字は次の規則に従って設定してください。

1文字目

ドライブを表す英字

2文字目

:（コロン）

3文字目

/（スラッシュ）または¥（バックスラッシュ）

4

ADBCLTLANG

この環境変数には，HADBクライアントで使用する文字コードを指定します。HADBサーバで使用する文字コードと同じ文字コードを指定してください。HADBサーバの環境変数ADBLANGで指定した文字コードと同じ文字コードを指定します。

HADBサーバでUnicode（UTF-8）を使用する場合

この環境変数にUTF8を指定してください。

HADBサーバでShift-JISを使用する場合

この環境変数にSJISを指定してください。

5

ADBMSGLOGSIZE

この環境変数には，1ファイル当たりのクライアントメッセージログファイルの最大容量をメガバイト単位で指定します。指定できる範囲は1〜2,000です。

HADBクライアントには，4つのクライアントメッセージログファイルが作成されます。この環境変数を省略した場合，1つ当たりのクライアントメッセージログファイルの最大容量は16メガバイトになります。

なお，1つのクライアントディレクトリから複数のクライアントプロセスを起動する場合，この環境変数の指定値は必ず同じ値を指定してください。異なる値で複数のクライアントプロセスを動作させた場合，クライアントメッセージログファイルが壊れるおそれがあります。

6

ADBODBTRC

HADB ODBCドライバトレース情報を出力するかどうかを指定します。この環境変数には，次のどちらかを指定してください。

YES：HADB ODBCドライバトレース情報を出力する場合に指定します。

NO：HADB ODBCドライバトレース情報を出力しない場合に指定します。

この環境変数を省略した場合，または不正な値を指定した場合は，NOが仮定されます。

この環境変数は，ODBCドライバを使用する場合に設定を検討してください。

7

ADBODBTRCSIZE

この環境変数には，HADB ODBCドライバトレースファイルの1ファイル当たりのサイズの上限値（単位：メガバイト）を指定します。32〜1,024の値を指定できます。

この環境変数を省略した場合，または不正な値を指定した場合は，256が仮定されます。

この環境変数は，ODBCドライバを使用する場合に設定を検討してください。

8

ADBODBTRCPATH

この環境変数には，HADB ODBCドライバトレースファイルを格納するフォルダを絶対パスで指定します。

210バイト以下のパス名を指定してください。

次に示す場合は，環境変数ADBODBTRCにYESを指定していても，HADB ODBCドライバトレース情報は出力されません。

この環境変数を省略した場合

不正なフォルダを指定した場合

211バイト以上のパス名を指定した場合

この環境変数は，ODBCドライバを使用する場合に設定を検討してください。

9

ADBODBTRCLV

HADB ODBCドライバトレース情報を出力する際のトレースレベルを指定します。この環境変数には，次のどちらかを指定してください。

1：トレースレベル1とする場合に指定します。

2：トレースレベル2とする場合に指定します。

トレースレベルについては，「17.4.1　トレースレベルとは」を参照してください。

この環境変数を省略した場合，または不正な値を指定した場合は，1が仮定されます。

この環境変数は，ODBCドライバを使用する場合に設定を検討してください。

10

ADBODBAPMODE

この環境変数には，HADB ODBCドライバのアプリケーションモードを指定します。通常，この環境変数を指定する必要はありません。

この環境変数の指定値によってHADB ODBCドライバの処理が変わります。

ACCESS：ODBC3.5の規格ではなく，Microsoft Access互換モードで動作します。

Microsoft Accessを使用してHADBサーバにアクセスする場合に指定します。この環境変数を指定すると，検索結果が#Deletedとなる，エラーが発生するなどの現象を回避できることがあります。

NORMAL：通常どおり動作します。

この環境変数を省略した場合，または不正な値を指定した場合は，NORMALが仮定されます。

この環境変数は，ODBCドライバを使用する場合に設定を検討してください。

4.3.2　Linux版のHADBクライアントの場合

Linux版のHADBクライアントで次の表に示す環境変数を設定してください。環境変数の設定はHADBクライアントを管理するOSユーザが実行します。

環境変数に設定した値がHADBクライアント使用時のシェルで有効になるようにしてください。設定方法については，シェルのマニュアルを参照してください。

表4‒3　環境変数に設定する値

項番

環境変数

設定する値

1

LANG

この環境変数には，OSの文字コードを指定します。HADBサーバの環境変数LANGの設定値と同じにしてください。

2

LD_LIBRARY_PATH

この環境変数には，次に示すディレクトリを追加してください。

$ADBCLTDIR/client/lib

この環境変数は，次のどちらかの条件を満たす場合に設定してください。

HADBクライアントでadbsqlコマンドを実行する場合

HADBクライアントでCLI関数を使用したAPを開発または実行する場合

3

PATH

この環境変数には，次に示すディレクトリを追加してください。

$ADBCLTDIR/client/bin

4

TZ

この環境変数には，HADBクライアントをインストールするマシンのタイムゾーンを設定します。

なお，うるう秒対応のタイムゾーンは設定しないでください。

5

ADBCLTDIR

この環境変数には，クライアントディレクトリの絶対パスを指定します。

パスの最初の1文字目は必ず/（スラッシュ）で始めてください。

6

ADBCLTLANG

この環境変数には，HADBクライアントで使用する文字コードを指定します。HADBサーバで使用する文字コードと同じ文字コードを指定してください。HADBサーバの環境変数ADBLANGで指定した文字コードと同じ文字コードを指定します。

HADBサーバでUnicode（UTF-8）を使用する場合

この環境変数にUTF8を指定してください。

HADBサーバでShift-JISを使用する場合

この環境変数にSJISを指定してください。

7

ADBMSGLOGSIZE

この環境変数には，1ファイル当たりのクライアントメッセージログファイルの最大容量をメガバイト単位で指定します。指定できる範囲は1〜2,000です。

HADBクライアントには，4つのクライアントメッセージログファイルが作成されます。この環境変数を省略した場合，1つ当たりのクライアントメッセージログファイルの最大容量は16メガバイトになります。

なお，1つのクライアントディレクトリから複数のクライアントプロセスを起動する場合，この環境変数の指定値は必ず同じ値を指定してください。異なる値で複数のクライアントプロセスを動作させた場合，クライアントメッセージログファイルが壊れるおそれがあります。

8

ADBSQLNULLCHAR

この環境変数には，adbsqlコマンドの検索結果にナル値がある場合に，ナル値を表示する文字列（ナル値表示文字列）を指定します。0〜32バイトの文字列を指定できます。0バイトの文字列を指定した場合は，ナル値の表示は空白になります。

この環境変数を省略した場合，ナル値は*（アスタリスク）で表示されます。

検索データ中に，アスタリスクがある場合や，ナル値を任意の文字で出力したい場合に，この環境変数を指定してください。

なお，マルチバイト文字を指定すると，検索結果の表示が乱れることがあります。

この環境変数は，HADBクライアントでadbsqlコマンドを実行する場合に設定を検討してください。

4.4　クライアント定義の作成

クライアント定義を指定してHADBクライアントの稼働環境を設定します。クライアント定義の作成はHADBクライアントを管理するOSユーザが実行します。

4.4.1　クライアント定義の作成方法

クライアント定義の作成手順を次に示します。

手順

%ADBCLTDIR%¥sample¥conf¥に格納されているクライアント定義のひな形ファイル（client.def※）を，%ADBCLTDIR%¥conf¥にコピーします。

注※　Linux版のHADBクライアントの場合は，$ADBCLTDIR/sample/conf/client.defになります。

コピーしたクライアント定義のファイル（%ADBCLTDIR%¥conf¥client.def※）をテキストエディタで開いてください。

注※　Linux版のHADBクライアントの場合は，$ADBCLTDIR/conf/client.defになります。

クライアント定義の各オペランドを指定してください。クライアント定義の各オペランドの説明については，「2.　クライアント定義の設計」を参照してください。

クライアント定義を作成後，ファイルを上書きしてください。ファイル名はclient.defのままにしてください。

クライアント定義ファイルのパーミッションは，HADBクライアントを管理するOSユーザに対してだけ，読み取り権限と書き込み権限を設定するようにしてください。

クライアント定義に指定したオペランドの指定値は，コネクションハンドル割り当て時にKFAA50027-Iメッセージとしてクライアントメッセージログファイルに出力されます。

4.4.2　クライアント定義変更時の注意事項

クライアント定義の指定を変更する場合は，該当するクライアント定義ファイルを使用しているAPをHADBサーバから切り離したあとに行ってください。

4.4.3　クライアント定義の選択

CLI関数のa_rdb_SQLAllocConnect()の引数ClientDefPathに，クライアント定義ファイルのパスを指定できます。クライアント定義を複数作成しておき，使用するクライアント定義ファイルをコネクションハンドルの割り当て時に選択できます。

なお，引数ClientDefPathの指定を省略した場合，%ADBCLTDIR%¥conf¥client.def※が指定されたと仮定されます。a_rdb_SQLAllocConnect()については，「19.2.1　a_rdb_SQLAllocConnect()（コネクションハンドルの割り当て）」を参照してください。

注※　Linux版のHADBクライアントの場合は，$ADBCLTDIR/conf/client.defになります。

4.5　APの無応答状態への対策

通信障害，瞬断を含む一時的な障害，またはディスク障害などによって，APが無応答状態になることがあります。無応答状態のAPが発生した場合，その影響によってほかのAPやコマンドの処理が停滞することがあります。

そこで，無応答状態のAPが発生したときに，その影響をなるべく小さくするために，クライアント定義で次に示すオペランドを指定してください。

adb_clt_rpc_sql_wait_timeオペランド

このオペランドには，HADBクライアントからHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間を指定します。ここで指定した待ち時間を超えてもHADBサーバから応答がない場合，SQLCODEが-732（KFAA30732-E）のタイムアウトエラーがAPに返されます。このとき，SQL文の処理はキャンセルされ，トランザクションはロールバックされます。そのあと，HADBサーバからAPが切り離されます。

adb_clt_rpc_sql_wait_timeオペランドによる待ち時間の監視イメージを次の図に示します。

図4‒3　adb_clt_rpc_sql_wait_timeオペランドによる待ち時間の監視イメージ

［説明］

HADBクライアントからHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間を監視しています。例えば，adb_clt_rpc_sql_wait_timeオペランドに600秒を指定した場合，各監視区間に対して600秒の待ち時間が設定されます。したがって，処理時間がいちばん長いSQLの処理時間を目安にして，待ち時間を指定します。待ち時間には，APが無応答状態になった可能性が高いと考えられる時間を指定してください。

adb_clt_rpc_sql_wait_timeオペランドについては，「2.2.2　APの状態監視に関するオペランド」にある，adb_clt_rpc_sql_wait_timeオペランドの説明を参照してください。

4.6　HADBクライアントのバージョンアップ

HADBクライアントのバージョンアップ方法について説明します。

なお，HADBクライアントのバージョンアップではなく，修正版HADBクライアントとの入れ替えの場合は，「4.8　修正版HADBクライアントとの入れ替え」を参照してください。修正版HADBクライアントについても，「4.8　修正版HADBクライアントとの入れ替え」で説明しています。

4.6.1　HADBクライアントのバージョンアップ前に実施すること

バージョンアップ前に，次の内容を必ず実行してください。

(1)　環境変数の確認

HADBクライアントをバージョンアップすると，環境変数の値が変更になることがあります。詳細は，「4.3　環境変数の設定」を参照してください。

(2)　クライアント定義の確認

HADBクライアントをバージョンアップすると，クライアント定義のデフォルト値が変更されることがあります。クライアント定義の各オペランドをデフォルト値で設定している場合は，「2.2　クライアント定義のオペランドの内容」を参照して，変更がないかどうかを確認してください。

また，バージョン03-00以降では，クライアント定義の次のオペランドは指定できません。次のオペランドを指定している場合は削除してください。

adb_clt_rpc_open_wait_time

(3)　クライアントディレクトリのバックアップ

HADBクライアントをバージョンアップする前に，クライアントディレクトリのバックアップを取得してください。

取得したバックアップは，新バージョンの動作確認後に削除してください。

4.6.2　バージョンアップ時の注意事項

HADBクライアントのバージョンアップ時の注意事項について説明します。

バージョンアップをしているときに，OSユーザを変更しないでください。正しくバージョンアップできないことがあります。

バージョンアップをしているときに，環境変数ADBCLTLANGに設定した値は変更しないでください。正しくバージョンアップできないことがあります。

HADBクライアントとODBCドライバのバージョンは必ず一致させてください。バージョンが一致していない場合，HADBサーバに接続する前にエラーとなります。

4.6.3　バージョンアップ手順

HADBクライアントをバージョンアップする手順を次に示します。

(1)　HADBクライアント（Windows版）のバージョンアップ

HADBクライアントのバージョンアップは，HADBクライアントを管理するOSユーザが実行します。

次の手順に従って，HADBクライアントをバージョンアップしてください。

手順

HADBクライアントを管理するOSユーザでログインする

HADBクライアントのインストールデータをコピーする

HADBクライアントのインストールCD-ROMに格納されている次の圧縮ファイル（zip形式ファイル）を，クライアントマシンの任意のフォルダにコピーしてください。この手順の説明では，D:¥hadbclt_installフォルダにコピーするものとします。

64ビット版のHADBクライアントを使用する場合：hitachi_advanced_data_binder_client.zip

32ビット版のHADBクライアントを使用する場合：hitachi_advanced_data_binder_client32.zip

コピー先のフォルダは，パス長が200バイト以内のフォルダにしてください。

コピー先のフォルダのパス名に使用できる文字については，はじめにの「■このマニュアルで使用する構文要素記号」の〈パス名〉を参照してください。

コピーしたファイルのハッシュ値を取得する

コマンドプロンプトを起動して，次のコマンドを実行してください。

64ビット版のHADBクライアントを使用する場合

cd /D D:¥hadbclt_install
certutil -hashfile hitachi_advanced_data_binder_client.zip SHA256

32ビット版のHADBクライアントを使用する場合

cd /D D:¥hadbclt_install
certutil -hashfile hitachi_advanced_data_binder_client32.zip SHA256

下線部分は，手順2.でインストールデータをコピーしたフォルダです。

ハッシュ値を比較する

手順3.で取得したハッシュ値と，インストールCD-ROMに格納されている次のファイルに記載されているハッシュ値を比較してください。

64ビット版のHADBクライアントを使用する場合：adbhashfile_winclt64_sha256.txt

32ビット版のHADBクライアントを使用する場合：adbhashfile_winclt32_sha256.txt

ハッシュ値が同じ場合は，問題ありません。次の手順に進んでください。

ハッシュ値が異なる場合は，ファイルのコピーが失敗しているおそれがあります。手順2.から作業をし直してください。

圧縮ファイルを解凍する

（例）hitachi_advanced_data_binder_client.zipを解凍した場合

D:¥hadbclt_install¥hitachi_advanced_data_binder_client¥HADBCLフォルダ下に，HADBクライアントのフォルダおよびファイルが展開されます。

D:¥hadbclt_install¥hitachi_advanced_data_binder_client¥HADBCLフォルダは，圧縮ファイルを解凍したときのデフォルトの解凍先です。

HADBクライアントのバージョン情報を確認する

解凍先フォルダ下に格納されているreadme.txtファイルを開いてください。

1行目に記載されているHADBクライアントのバージョン情報を見て，次のどちらかの情報が記載されていることを確認してください。

P-2462-C114 vv-rr

P-2462-C114 vv-rr-/s

vv-rrおよびvv-rr-/sは，HADBクライアントのバージョンを示しています。

クライアントディレクトリを上書きする

（例）

D:¥hadbclt_install¥hitachi_advanced_data_binder_client¥HADBCLフォルダを，環境変数ADBCLTDIRに指定しているクライアントディレクトリに上書きコピーしてください。

クライアントディレクトリをD:¥hadbclt_install¥hitachi_advanced_data_binder_client¥HADBCLフォルダに変更する場合は，環境変数ADBCLTDIRに指定しているクライアントディレクトリのパスを変更してください。

(2)　HADBクライアント（Linux版）のバージョンアップ

次の手順に従って，HADBクライアントをバージョンアップしてください。

手順

HADBクライアントを管理するOSユーザでログインする

インストールデータを格納するディレクトリを作成する

mkdir /home/osuser01/client

上記の例では，HADBクライアントのインストールデータを格納するディレクトリとして/home/osuser01/clientを作成しています。

インストールデータを格納するディレクトリに対して書き込み権限を付与する

chmod 755 /home/osuser01/client

インストールデータを格納するディレクトリに対して，HADBクライアントを管理するOSユーザが書き込みできるように，ディレクトリ（この例では/home/osuser01/client）に対して書き込み権限を付与してください。

CD-ROMファイルシステムをマウントする

HADBクライアントのインストールデータが格納されているCD-ROMファイルシステムを自動マウントしてください。

CD-ROMファイルシステムが自動マウントされない場合，次のコマンドを実行してCD-ROMファイルシステムをマウントしてください。

mount /dev/cdrom /media

下線部分は，CD-ROMファイルシステムのマウントディレクトリ名です。環境によって異なります。

重要

CD-ROMのディレクトリ名やファイル名は，ご使用のマシンによっては，ここの説明内容と表示が異なることがあります。OSのlsコマンドを実行して，表示されたディレクトリ名をそのまま入力してください。

インストールデータをコピーする

マウントしたCD-ROMファイルシステムに格納されている次のファイルを，手順2.で作成したインストールデータを格納するディレクトリにコピーしてください。

tar.gz形式のファイル

adbinstallコマンドの実行形式ファイル

cp /media/hitachi_advanced_data_binder_client-$VER.tar.gz /home/osuser01/client   ...a
cp /media/adbinstall /home/osuser01/client                                        ...b

［説明］

tar.gz形式のファイル（HADBクライアントのプログラムの圧縮ファイル）をコピーします。

adbinstallコマンドの実行形式ファイル（HADBクライアントのインストールコマンド）をコピーします。

下線部分は，CD-ROMファイルシステムのマウントディレクトリ名です。環境によって異なります。

$VERはHADBクライアントのバージョンおよびリリース番号です。

重要

上記の2つのファイルは，必ず同じディレクトリにコピーしてください。異なるディレクトリにコピーすると，HADBクライアントがインストールできません。

コピーしたファイルに破損がないことを確認する

手順5.でコピーしたファイルに破損がないことを確認します。次のコマンドを実行してください。

cd /home/osuser01/client
sha256sum -c /media/adbhashfile_client_sha256.txt

下線部分は，CD-ROMファイルシステムのマウントディレクトリ名です。環境によって異なります。

ファイルが破損しているおそれがある（ファイルのハッシュ値が異なる）場合は，エラーを示すメッセージが出力されます。この場合，手順5.から作業をし直してください。

出力されるメッセージの詳細については，OSのマニュアルを参照してください。

権限を付与する

HADBクライアントを管理するOSユーザがadbinstallコマンド（HADBクライアントのインストールコマンド）を実行できるように，adbinstallコマンドに対する実行権限を付与してください。

また，tar.gz形式のファイルに対する読み取り権限も付与してください。

chmod 555 /home/osuser01/client/adbinstall
chmod 444 /home/osuser01/client/hitachi_advanced_data_binder_client-$VER.tar.gz

$VERは，HADBクライアントのバージョンおよびリリース番号です。

HADBクライアントをインストールする

adbinstallコマンドを実行して，HADBクライアントをインストールしてください。

/home/osuser01/client/adbinstall -c /home/osuser01/clientdir

下線部分には，手順2.で作成したインストールデータを格納するディレクトリを指定します。

-cオプションには，クライアントディレクトリのパスを指定します。次のどちらかのパスを指定してください。

環境変数ADBCLTDIRに指定しているパス

任意のディレクトリのパス

任意のディレクトリのパスを指定した場合は，環境変数ADBCLTDIRにそのパスを指定してください。

-cオプションには，HADBクライアントを管理するOSユーザが書き込みできるディレクトリを指定してください。

メモ

adbinstallコマンドの実行方法および規則については，マニュアルHADB　コマンドリファレンスのadbinstall（HADBサーバおよびHADBクライアントのインストール）を参照してください。

HADBクライアントが正常にインストールされたことを確認する

クライアントディレクトリ下のadbinstcl.logファイルを開いて内容を確認してください。HADBクライアントが正常にインストールされている場合は，次のどちらかの情報が記載されています。

Hitachi Advanced Data Binder Client vv-rr (yyyymmddhhmmss)

Hitachi Advanced Data Binder Client vv-rr-/s (yyyymmddhhmmss)

vv-rrおよびvv-rr-/sは，HADBクライアントのバージョンを示しています。

yyyymmddhhmmssは，HADBクライアントのインストールを実行した日付と時刻を示しています。

メモ

adbinstcl.logファイルがすでにある状態のときにadbinstallコマンドを実行すると，adbinstcl.logファイルの内容が更新されます。また，adbinstallコマンドを複数回実行した場合，最後に実行した日付と時刻が記載されます。

adbinstallコマンドのリターンコード（KFAA91552-Iメッセージに出力されるリターンコード）が0または4以外の場合，adbinstcl.logファイルの内容は更新されません。

adbinstallコマンドの実行時にKFAA91555-Iメッセージが出力された場合，adbinstcl.logファイルの内容は更新されません。

■KFAA91553-Eメッセージが出力された場合の対処方法

対処方法については，「4.2.2　Linux版のHADBクライアントの場合」の「(2)　HADBクライアントのインストール」の「■KFAA91553-Eメッセージが出力された場合の対処方法」を参照してください。

■KFAA91558-Wメッセージが出力された場合の対処方法

対処方法については，「4.2.2　Linux版のHADBクライアントの場合」の「(2)　HADBクライアントのインストール」の「■KFAA91558-Wメッセージが出力された場合の対処方法」を参照してください。

4.6.4　バージョンアップ後に実施すること

HADBクライアントのバージョンアップが正しく実施できたか次の手順で確認してください。

(1)　HADBクライアント（Windows版）

次に示すファイルのプロパティで，ファイルバージョンが新しいバージョンになっていることを確認してください。

64ビット版のHADBクライアントを使用する場合：%ADBCLTDIR%client¥bin¥adbclt.dll

32ビット版のHADBクライアントを使用する場合：%ADBCLTDIR%client¥bin¥adbclt32.dll

なお，ODBCドライバを使用している場合は，adbodbcで始まるすべてのdllのバージョンについても確認してください。

(2)　HADBクライアント（Linux版）

次に示す手順で正しくバージョンアップが実施できたか確認してください。

手順

adbsqlコマンドを実行してHADBサーバに接続する

KFAA70003-Iメッセージを確認する

クライアントのメッセージログファイルに出力されるKFAA70003-Iメッセージに，新しいバージョンが出力されていることを確認してください。

4.7　HADBクライアントのバージョンダウン（旧バージョンに戻す方法）

ここでは，HADBクライアントをバージョンダウンする方法について説明します。

HADBサーバをバージョンダウンした場合は，HADBクライアントもバージョンダウンしてください（HADBサーバとHADBクライアントのバージョンを合わせてください）。

メモ

HADBサーバのバージョンダウンについては，マニュアルHADB　システム構築・運用ガイドのシステム構築のHADBサーバのバージョンダウン（旧バージョンに戻す方法）を参照してください。

4.7.1　バージョンダウン前に実施すること

HADBクライアントをバージョンダウンする前に，次に示す指定値を確認してください。

環境変数

クライアント定義

バージョンアップした際に各指定値を変更している場合は，バージョンダウンするときに，旧バージョンの指定値に戻す必要があります。

4.7.2　バージョンダウン時の注意事項

HADBクライアントをバージョンダウンするときの注意事項について説明します。

バージョンダウンをしているときに，OSユーザを変更しないでください。正しくバージョンダウンできないことがあります。

バージョンダウンをしているときに，環境変数ADBCLTLANGに設定した値は変更しないでください。正しくバージョンダウンできないことがあります。

HADBクライアントとODBCドライバのバージョンは必ず一致させてください。バージョンが一致していない場合，HADBサーバに接続する前にエラーとなります。

4.7.3　バージョンダウン手順

HADBクライアントをバージョンダウンする手順を次に示します。

HADBクライアントのバージョンダウンは，HADBクライアントを管理するOSユーザが実行します。

(1)　HADBクライアント（Windows版）のバージョンダウン

次の手順に従って，HADBクライアントをバージョンダウンしてください。

手順

HADBクライアントを管理するOSユーザでログインする

HADBクライアントのインストールデータをコピーする

HADBクライアントのインストールCD-ROMに格納されている次の圧縮ファイル（zip形式ファイル）を，クライアントマシンの任意のフォルダにコピーしてください。この手順の説明では，D:¥hadbclt_installフォルダにコピーするものとします。

64ビット版のHADBクライアントを使用する場合：hitachi_advanced_data_binder_client.zip

32ビット版のHADBクライアントを使用する場合：hitachi_advanced_data_binder_client32.zip

コピー先のフォルダは，パス長が200バイト以内のフォルダにしてください。

コピー先のフォルダのパス名に使用できる文字については，はじめにの「■このマニュアルで使用する構文要素記号」の〈パス名〉を参照してください。

コピーしたファイルのハッシュ値を取得する

重要

手順3.～手順4.の作業は，バージョン05-02以降のHADBクライアントにバージョンダウンする場合に限り実施してください。

コマンドプロンプトを起動して，次のコマンドを実行してください。

64ビット版のHADBクライアントを使用する場合

cd /D D:¥hadbclt_install
certutil -hashfile hitachi_advanced_data_binder_client.zip SHA256

32ビット版のHADBクライアントを使用する場合

cd /D D:¥hadbclt_install
certutil -hashfile hitachi_advanced_data_binder_client32.zip SHA256

下線部分は，手順2.でインストールデータをコピーしたフォルダです。

ハッシュ値を比較する

手順3.で取得したハッシュ値と，インストールCD-ROMに格納されている次のファイルに記載されているハッシュ値を比較してください。

64ビット版のHADBクライアントを使用する場合：adbhashfile_winclt64_sha256.txt

32ビット版のHADBクライアントを使用する場合：adbhashfile_winclt32_sha256.txt

ハッシュ値が同じ場合は，問題ありません。次の手順に進んでください。

ハッシュ値が異なる場合は，ファイルのコピーが失敗しているおそれがあります。手順2.から作業をし直してください。

圧縮ファイルを解凍する

（例）hitachi_advanced_data_binder_client.zipを解凍した場合

D:¥hadbclt_install¥hitachi_advanced_data_binder_client¥HADBCLフォルダ下に，HADBクライアントのフォルダおよびファイルが展開されます。

D:¥hadbclt_install¥hitachi_advanced_data_binder_client¥HADBCLフォルダは，圧縮ファイルを解凍したときのデフォルトの解凍先です。

HADBクライアントのバージョン情報を確認する

解凍先フォルダ下に格納されているreadme.txtファイルを開いてください。

1行目に記載されているHADBクライアントのバージョン情報を見て，次のどちらかの情報が記載されていることを確認してください。

P-2462-C114 vv-rr

P-2462-C114 vv-rr-/s

vv-rrおよびvv-rr-/sは，HADBクライアントのバージョンを示しています。

クライアントディレクトリを上書きする

（例）

D:¥hadbclt_install¥hitachi_advanced_data_binder_client¥HADBCLフォルダを，環境変数ADBCLTDIRに指定しているクライアントディレクトリに上書きコピーしてください。

クライアントディレクトリをD:¥hadbclt_install¥hitachi_advanced_data_binder_client¥HADBCLフォルダに変更する場合は，環境変数ADBCLTDIRに指定しているクライアントディレクトリのパスを変更してください。

(2)　HADBクライアント（Linux版）のバージョンダウン

次の手順に従って，HADBクライアントをバージョンダウンしてください。

手順

HADBクライアントを管理するOSユーザでログインする

インストールデータを格納するディレクトリを作成する

mkdir /home/osuser01/client

上記の例では，HADBクライアントのインストールデータを格納するディレクトリとして/home/osuser01/clientを作成しています。

インストールデータを格納するディレクトリに対して書き込み権限を付与する

chmod 755 /home/osuser01/client

インストールデータを格納するディレクトリに対して，HADBクライアントを管理するOSユーザが書き込みできるように，ディレクトリ（この例では/home/osuser01/client）に対して書き込み権限を付与してください。

CD-ROMファイルシステムをマウントする

HADBクライアントのインストールデータが格納されているCD-ROMファイルシステムを自動マウントしてください。

CD-ROMファイルシステムが自動マウントされない場合，次のコマンドを実行してCD-ROMファイルシステムをマウントしてください。

mount /dev/cdrom /media

下線部分は，CD-ROMファイルシステムのマウントディレクトリ名です。環境によって異なります。

重要

CD-ROMのディレクトリ名やファイル名は，ご使用のマシンによっては，ここの説明内容と表示が異なることがあります。OSのlsコマンドを実行して，表示されたディレクトリ名をそのまま入力してください。

インストールデータをコピーする

マウントしたCD-ROMファイルシステムに格納されている次のファイルを，手順2.で作成したインストールデータを格納するディレクトリにコピーしてください。

tar.gz形式のファイル

adbinstallコマンドの実行形式ファイル

cp /media/hitachi_advanced_data_binder_client-$VER.tar.gz /home/osuser01/client   ...a
cp /media/adbinstall /home/osuser01/client                                        ...b

［説明］

tar.gz形式のファイル（HADBクライアントのプログラムの圧縮ファイル）をコピーします。

adbinstallコマンドの実行形式ファイル（HADBクライアントのインストールコマンド）をコピーします。

下線部分は，CD-ROMファイルシステムのマウントディレクトリ名です。環境によって異なります。

$VERは，HADBクライアントのバージョンおよびリリース番号です。

重要

上記の2つのファイルは，必ず同じディレクトリにコピーしてください。異なるディレクトリにコピーすると，HADBクライアントがインストールできません。

コピーしたファイルに破損がないことを確認する

重要

手順6.の作業は，バージョン05-02以降のHADBクライアントにバージョンダウンする場合に限り実施してください。

手順5.でコピーしたファイルに破損がないことを確認します。次のコマンドを実行してください。

cd /home/osuser01/client
sha256sum -c /media/adbhashfile_client_sha256.txt

下線部分は，CD-ROMファイルシステムのマウントディレクトリ名です。環境によって異なります。

ファイルが破損しているおそれがある（ファイルのハッシュ値が異なる）場合は，エラーを示すメッセージが出力されます。この場合，手順5.から作業をし直してください。

出力されるメッセージの詳細については，OSのマニュアルを参照してください。

権限を付与する

HADBクライアントを管理するOSユーザがadbinstallコマンド（HADBクライアントのインストールコマンド）を実行できるように，adbinstallコマンドに対する実行権限を付与してください。

また，tar.gz形式のファイルに対する読み取り権限も付与してください。

chmod 555 /home/osuser01/client/adbinstall
chmod 444 /home/osuser01/client/hitachi_advanced_data_binder_client-$VER.tar.gz

$VERは，HADBクライアントのバージョンおよびリリース番号です。

HADBクライアントをインストールする

adbinstallコマンドを実行して，HADBクライアントをインストールしてください。

/home/osuser01/client/adbinstall -c /home/osuser01/clientdir

下線部分には，手順2.で作成したインストールデータを格納するディレクトリを指定します。

-cオプションには，クライアントディレクトリのパスを指定します。次のどちらかのパスを指定してください。

環境変数ADBCLTDIRに指定しているパス

任意のディレクトリのパス

任意のディレクトリのパスを指定した場合は，環境変数ADBCLTDIRにそのパスを指定してください。

-cオプションには，HADBクライアントを管理するOSユーザが書き込みできるディレクトリを指定してください。

メモ

adbinstallコマンドの実行方法および規則については，マニュアルHADB　コマンドリファレンスのadbinstall（HADBサーバおよびHADBクライアントのインストール）を参照してください。

HADBクライアントが正常にインストールされたことを確認する

重要

手順9.の作業は，バージョン05-02以降のHADBクライアントにバージョンダウンする場合に限り実施してください。

クライアントディレクトリ下のadbinstcl.logファイルを開いて内容を確認してください。HADBクライアントが正常にインストールされている場合は，次のどちらかの情報が記載されています。

Hitachi Advanced Data Binder Client vv-rr (yyyymmddhhmmss)

Hitachi Advanced Data Binder Client vv-rr-/s (yyyymmddhhmmss)

vv-rrおよびvv-rr-/sは，HADBクライアントのバージョンを示しています。

yyyymmddhhmmssは，HADBクライアントのインストールを実行した日付と時刻を示しています。

メモ

adbinstcl.logファイルがすでにある状態のときにadbinstallコマンドを実行すると，adbinstcl.logファイルの内容が更新されます。また，adbinstallコマンドを複数回実行した場合，最後に実行した日付と時刻が記載されます。

adbinstallコマンドのリターンコード（KFAA91552-Iメッセージに出力されるリターンコード）が0または4以外の場合，adbinstcl.logファイルの内容は更新されません。

adbinstallコマンドの実行時にKFAA91555-Iメッセージが出力された場合，adbinstcl.logファイルの内容は更新されません。

■KFAA91553-Eメッセージが出力された場合の対処方法

対処方法については，「4.2.2　Linux版のHADBクライアントの場合」の「(2)　HADBクライアントのインストール」の「■KFAA91553-Eメッセージが出力された場合の対処方法」を参照してください。

■KFAA91558-Wメッセージが出力された場合の対処方法

対処方法については，「4.2.2　Linux版のHADBクライアントの場合」の「(2)　HADBクライアントのインストール」の「■KFAA91558-Wメッセージが出力された場合の対処方法」を参照してください。

4.7.4　バージョンダウン後に実施すること

HADBクライアントのバージョンダウンが正しく実施できたかについて，次の手順で確認してください。

(1)　HADBクライアント（Windows版）

次に示すファイルのプロパティで，ファイルバージョンが旧バージョンになっていることを確認してください。

64ビット版のHADBクライアントを使用する場合：%ADBCLTDIR%client¥bin¥adbclt.dll

32ビット版のHADBクライアントを使用する場合：%ADBCLTDIR%client¥bin¥adbclt32.dll

なお，ODBCドライバを使用している場合は，adbodbcで始まるすべてのdllのバージョンについても確認してください。

(2)　HADBクライアント（Linux版）

次に示す手順で正しくバージョンダウンが実施できたか確認してください。

手順

adbsqlコマンドを実行してHADBサーバに接続する

KFAA70003-Iメッセージを確認する

クライアントメッセージログファイルに出力されるKFAA70003-Iメッセージに，旧バージョンが出力されていることを確認してください。

4.8　修正版HADBクライアントとの入れ替え

ここでは，修正版HADBクライアントとの入れ替え方法について説明します。

次に示す条件を満たす場合は，HADBクライアントのバージョンアップではなく，修正版HADBクライアントとの入れ替えとなります。

バージョン番号およびリビジョン番号が同じで，コードだけが異なるHADBクライアントを上書きインストールする場合

メモ

バージョン番号，リビジョン番号，コードについて説明します。

（例）HADBクライアントのバージョン情報が，03-02-/Aの場合

03の部分がバージョン番号になります。

02の部分がリビジョン番号になります。

下線部分の-/Aの部分が，コードになります。

修正版HADBクライアントとの入れ替えになる場合の例と，入れ替えにならない場合の例を次に示します。

■修正版HADBクライアントとの入れ替えになる場合

例えば，次に示すケースは，バージョン番号およびリビジョン番号が同じため，修正版HADBクライアントとの入れ替えになります。

03-02 → 03-02-/A

03-02-/B → 03-02-/D

■修正版HADBクライアントとの入れ替えにならない場合

例えば，次に示すケースは，バージョン番号またはリビジョン番号が異なるため，修正版HADBクライアントとの入れ替えになりません。

03-02 → 03-03-/A

03-02-/B → 03-03-/D

この場合，HADBクライアントのバージョンアップになります。HADBクライアントのバージョンアップ方法については，「4.6　HADBクライアントのバージョンアップ」を参照してください。

4.8.1　修正版HADBクライアントとの入れ替え手順

修正版HADBクライアントとの入れ替え手順を次に示します。

手順

入れ替え前に必要な作業を実施する

入れ替え前に必要な作業については，HADBクライアントのバージョンアップ前に必要な作業と同じになります。詳細については，「4.6.1　HADBクライアントのバージョンアップ前に実施すること」を参照してください。

入れ替え時の注意事項を確認する

入れ替え時の注意事項については，HADBクライアントのバージョンアップ時の注意事項と同じになります。詳細については，「4.6.2　バージョンアップ時の注意事項」を参照してください。

修正版HADBクライアントとの入れ替えを実施する

入れ替え手順については，HADBクライアントのバージョンアップ時の手順と同じになります。詳細については，「4.6.3　バージョンアップ手順」を参照してください。

入れ替えが完了したことを確認する

HADBクライアントのバージョン情報のコードが変わっていることを確認してください。確認方法については，「4.6.4　バージョンアップ後に実施すること」を参照してください。

4.9　クライアントマシンのOSの時刻変更

ここでは，HADBクライアントがインストールされているクライアントマシンのOSの時刻を変更する場合の手順について説明します。

クライアントマシンのOSの時刻を変更する場合，必ず「4.9.1　注意事項（OSの時刻変更）」を読んだあとで，次のどちらかに従ってOSの時刻を変更してください。

「4.9.2　クライアントマシンのOSの時刻を進める方法」

「4.9.3　クライアントマシンのOSの時刻を戻す方法」

4.9.1　注意事項（OSの時刻変更）

クライアントマシンのOSの時刻を変更する場合の注意事項を，次に示します。

クライアントマシンのOSの時刻を変更する場合，必ずHADBサーバに接続するすべてのAPが停止しているときに実施してください。HADBサーバに接続中のAPがある場合に，クライアントマシンのOSの時刻を変更してしまうと，HADBサーバおよびHADBクライアントが予期しない動作をするおそれがあります。

クライアントマシンのOSの時刻を変更した場合，次に示す時刻表示などは，変更後のOSの時刻になります。そのため，時刻を意識するAPがある場合は，影響を受けるおそれがあります。

コマンドを実行した時刻

クライアントメッセージログファイル内のメッセージログのタイムスタンプ

4.9.2　クライアントマシンのOSの時刻を進める方法

「4.9.1　注意事項（OSの時刻変更）」を読んだあとで，次に示す手順に従って，HADBクライアントがインストールされているクライアントマシンのOSの時刻を進めてください。

手順

HADBサーバに接続するAPを停止する

HADBクライアントから，HADBサーバに接続するすべてのAPを停止してください。

クライアントマシンのOSの時刻を進める

すべてのAPを停止したら，HADBクライアントがインストールされているクライアントマシンのOSの時刻を進めてください。

HADBサーバに接続するAPを開始する

クライアントマシンのOSの時刻を進めたら，停止したAPを開始してください。

これで，クライアントマシンのOSの時刻を進められます。

4.9.3　クライアントマシンのOSの時刻を戻す方法

「4.9.1　注意事項（OSの時刻変更）」を読んだあとで，次に示す手順に従って，HADBクライアントがインストールされているクライアントマシンのOSの時刻を戻してください。

手順

HADBサーバに接続するAPを停止する

HADBクライアントから，HADBサーバに接続するすべてのAPを停止してください。

クライアントマシンのOSの時刻を戻す

すべてのAPを停止したら，HADBクライアントがインストールされているクライアントマシンのOSの時刻を戻してください。

HADBサーバに接続するAPを開始する

クライアントマシンのOSの時刻を戻したら，停止したAPを開始してください。

これで，クライアントマシンのOSの時刻を戻せます。

第2編　AP作成編【共通】

5　APの性能向上に関する設計

この章では，APの性能向上に関する設計について説明します。

5.1　表の検索方式

表の検索方式には，次の3つがあります。

テーブルスキャン

インデクススキャン

キースキャン

表の検索方式は，HADBが自動的に決定します。SQL文を実行した結果，どの検索方式が適用されたかを，アクセスパスで確認することができます。アクセスパスについては，次に示す個所を参照してください。

アクセスパスの確認方法

「6.1.2　アクセスパスを確認するには」を参照してください。

アクセスパスに表示される内容

「6.1.4　ツリー表示に出力される情報」の「(21)　表の検索方式」を参照してください。

メモ

インデクス指定によって，表の検索に使用するインデクスを指定したり，またはインデクスの使用を抑止したりすることができます。インデクス指定については，マニュアルHADB　SQLリファレンスのインデクス指定の指定形式および規則を参照してください。

なお，ここでいう表とは，実表を意味しています。

5.1.1　テーブルスキャンとは

テーブルスキャンとは，B-treeインデクスおよびテキストインデクスを使用しないで表を検索する方式のことです。次の場合にテーブルスキャンが実行されます。

B-treeインデクスおよびテキストインデクスが表に定義されていない場合

B-treeインデクスおよびテキストインデクスを有効に利用できる探索条件が指定されていない場合

インデクス指定にWITHOUT INDEXが指定されている場合

テーブルスキャンの例を次の図に示します。

図5‒1　テーブルスキャンの例

［説明］

探索条件中に指定されているC3列はインデクス構成列ではないため，上記のSELECT文を実行した場合，B-treeインデクスIDX_C1C2は使用されません。そのため，テーブルスキャンが実行されて，データページ内のすべての行にアクセスします。

なお，表にレンジインデクスが定義されている場合，レンジインデクスが使用されることがあります。

メモ

インデクス指定に，B-treeインデクスまたはテキストインデクスを使用しない指定をした場合，テーブルスキャンが実行されます。

重要

テーブルスキャンが実行された場合は，表にレンジインデクスを定義することを推奨します。レンジインデクスが使用されることで性能が向上することがあります。レンジインデクスが使用される条件については，「5.3　SQL文の実行時に使用されるレンジインデクス」を参照してください。

5.1.2　インデクススキャンとは

インデクススキャンとは，B-treeインデクスまたはテキストインデクスを使用して探索条件の評価を行い，探索条件を満たす行をデータページから取り出す方式のことです。次の場合にインデクススキャンが実行されます。

B-treeインデクスまたはテキストインデクスが表に定義されていて，これらのインデクスを有効に利用できる探索条件が指定されている場合

検索に使用するB-treeインデクスまたはテキストインデクスが，インデクス指定で指定されている場合

インデクススキャンの例を次の図に示します。

図5‒2　インデクススキャンの例

［説明］

B-treeインデクスIDX_C1C2を使用して探索条件の評価を行い，C3列の値を取り出すためにデータページにアクセスします。

なお，表にレンジインデクスが定義されている場合，レンジインデクスも使用されることがあります。

5.1.3　キースキャンとは

キースキャンとは，B-treeインデクスを使用して探索条件の評価を行い，探索条件を満たす行の列値をインデクスページから取り出す方式のことです。B-treeインデクスのインデクス構成列（キー）から列値を直接取り出すため，参照するページ数を削減できます。

SQL文中に指定されているすべての列が，インデクス構成列であるB-treeインデクスが定義されていて，かつ次のどれかの条件を満たす場合に，キースキャンが実行されます。

B-treeインデクスが表に定義されていて，B-treeインデクスを有効に利用できる探索条件が指定されている場合

検索に使用するB-treeインデクスが，インデクス指定で指定されている場合

集合関数MINまたはMAXが指定されている場合※

SELECT DISTINCTが指定されている場合※

UNIONまたはUNION DISTINCTが指定されている場合※

EXCEPTまたはEXCEPT DISTINCTが指定されている場合※

INTERSECTまたはINTERSECT DISTINCTが指定されている場合※

=ANY指定の限定述語が指定されている場合※

表副問合せを指定したIN述語が指定されている場合※

注※

HADBがB-treeインデクスを有効に利用できると判断した場合に限り，B-treeインデクスが使用されます。

ただし，次のどれかの条件を満たす場合は，データページを参照することがあります。

行を追加，更新，または削除したことがある表を検索する場合

文字列の末尾が半角空白であるデータを含むVARCHAR型の列を検索する場合

バイナリデータの末尾がX'00'であるVARBINARY列のデータを参照する場合

キースキャンの例を次の図に示します。

図5‒3　キースキャンの例

［説明］

B-treeインデクスIDX_C1C2を使用して探索条件の評価を行います。C1列およびC2列の値をインデクスページから直接取り出すため，データページにはアクセスしません。

メモ

テキストインデクスの場合は，キースキャンが実行されることはありません。

5.2　SQL文の実行時に使用されるB-treeインデクスおよびテキストインデクス

B-treeインデクスおよびテキストインデクスは性能に大きな影響を及ぼすため，探索条件に合ったB-treeインデクスおよびテキストインデクスを定義する必要があります。

ここでは，SQL文の実行時に使用されるB-treeインデクスおよびテキストインデクスの決定方法と，SQL文の実行時に使用されるインデクスを確認する方法について説明します。

なお，この節では，インデクスと表記されている場合，B-treeインデクスおよびテキストインデクスの両方を意味しています。

留意事項

この節で説明しているインデクスの決定方法は，内部導出表の展開後の問合せ式，または探索条件の等価変換によって変換された探索条件に対して適用されます。内部導出表の展開については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。探索条件の等価変換機能については，「5.11　探索条件の等価変換」を参照してください。

探索条件中に指定した値式で，スカラ演算中に定数だけを指定している場合，そのスカラ演算を定数と見なすことがあります。定数と等価なスカラ演算については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。

インデクス指定がある場合，ここで説明するインデクスの優先順位や選択規則とは関係なく，インデクス指定に従って使用されるインデクスが決定されます。インデクス指定については，マニュアルHADB　SQLリファレンスのインデクス指定の指定形式および規則を参照してください。

表を結合する際，表の結合方式によっては結合条件の評価時にインデクスを使用しないことがあります。表の結合方式については，「5.5　表の結合方式」を参照してください。

カラムストア表にはテキストインデクスを定義できません。

重要

カラムストア表に定義したB-treeインデクスは，次の場合に使用されます。

インデクス指定を指定した場合

インデクス指定については，マニュアルHADB　SQLリファレンスのインデクス指定の指定形式および規則を参照してください。

集合関数MINまたはMAXを指定した場合※

SELECT DISTINCTを指定した場合※

UNIONまたはUNION DISTINCTを指定した場合※

EXCEPTまたはEXCEPT DISTINCTを指定した場合※

INTERSECTまたはINTERSECT DISTINCTを指定した場合※

=ANY指定の限定述語を指定した場合※

表副問合せを指定したIN述語を指定した場合※

UPDATE文の更新対象表にカラムストア表を指定した場合

DELETE文の削除対象表にカラムストア表を指定した場合

カラムストア表のコスト情報を収集している場合

注※

HADBサーバがB-treeインデクスを有効に利用できると判断した場合に限り，B-treeインデクスが使用されます。

使用されるB-treeインデクスを確認する方法については，「5.2.5　SQL文の実行時に使用されるインデクスを確認する方法」を参照してください。

5.2.1　インデクスの優先順位と選択規則

表に複数のインデクスが定義されている場合，WHERE句の探索条件や，結合表のON 探索条件に指定された条件に従って，使用されるインデクスが決定されます。

ここでは，SQL文の実行時に使用されるインデクスの優先順位と選択規則について説明します。

(1)　インデクスの優先順位

探索条件に指定した述語が次の表に示す形式で指定されている場合に，SQL文の実行時にインデクスが使用されます。また，SQL文の実行時に使用されるインデクスは1つだけです。そのため，表に複数のインデクスが定義されている場合，次の表に示す優先順位に従って，使用されるインデクスが決定されます。

表5‒1　表に複数のインデクスが定義されている場合のインデクスの優先順位

優先順位

インデクスの条件

この優先順位に該当する指定例（C1はインデクスが定義されている列）

1

= 条件中にすべてのインデクス構成列が指定されているユニークインデクス（B-treeインデクス）

"C1"=100

"C1"=100+?

"T1"."C1"=CAST("T2"."C1" AS INTEGER)

2

= 条件中にインデクス構成列が指定されているB-treeインデクス

"C1"=100

"C1"=100+?

"T1"."C1"=CAST("T2"."C1" AS INTEGER)

3

IS NULL条件中にインデクス構成列が指定されているB-treeインデクス

"C1" IS NULL

4

次のすべての条件を満たすLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

パターン文字列に定数を指定している

特殊文字%を指定した前方一致検索である

エスケープ文字を指定する場合は，エスケープ文字を定数で指定している必要があります。

"C1" LIKE 'ABC%'

"C1" LIKE 'AB¥%C%' ESCAPE '¥'

5

次のすべての条件を満たすLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

パターン文字列に定数を指定している

優先順位4の指定方法以外の前方一致検索である

エスケープ文字を指定する場合は，エスケープ文字を定数で指定している必要があります。

"C1" LIKE 'ABC__'

"C1" LIKE 'ABC%E'

"C1" LIKE 'AB¥_C%E' ESCAPE '¥'

パターン文字列に定数を指定した完全一致検索のLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

エスケープ文字を指定する場合は，エスケープ文字を定数で指定している必要があります。

"C1" LIKE 'ABCDE'

"C1" LIKE 'AB¥_CDE' ESCAPE '¥'

パターン文字列にユーザ情報取得関数を指定したLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

エスケープ文字を指定する場合は，エスケープ文字を定数で指定している必要があります。

"C1" LIKE CURRENT_USER

"C1" LIKE CURRENT_USER ESCAPE '¥'

パターン文字列に？パラメタを指定したLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

エスケープ文字を指定する場合は，エスケープ文字を定数で指定している必要があります。

"C1" LIKE ?

"C1" LIKE ? ESCAPE '¥'

エスケープ文字に？パラメタを指定したLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

パターン文字列は，定数，ユーザ情報取得関数，または？パラメタのどれかを指定している必要があります。

"C1" LIKE 'AB¥%C%' ESCAPE ?

"C1" LIKE CURRENT_USER ESCAPE ?

"C1" LIKE ? ESCAPE ?

6

ワード検索指定（表記ゆれ補正検索指定または同義語検索指定を指定していない場合に限る）を指定したスカラ関数CONTAINS中に，インデクス構成列が指定されているテキストインデクス※2，※8

CONTAINS("C1",'WORDCONTEXT("ABC")')>0

7

次のどちらかの条件を満たすスカラ関数CONTAINS中に，インデクス構成列が指定されているテキストインデクス※2，※4，※8

ワード検索指定と表記ゆれ補正検索指定を指定している

ワード検索指定と同義語検索指定を指定している

CONTAINS("C1",'WORDCONTEXT(IGNORECASE("ABC"))')>0

CONTAINS("C1",'WORDCONTEXT(SORTCODE("ABC"))')>0

CONTAINS("C1",'WORDCONTEXT(SYNONYM("DIC1","ABC"))')>0

8

LIKE述語中にインデクス構成列が指定されているテキストインデクス※1

"C1" LIKE 'ABC'

"C1" LIKE 'ABC%'

"C1" LIKE '%ABC%'

"C1" LIKE '%ABC'

"C1" LIKE ?

スカラ関数CONTAINS中（表記ゆれ補正検索指定，同義語検索指定，またはワード検索指定を指定していない場合に限る）に，インデクス構成列が指定されているテキストインデクス※2

CONTAINS("C1",'"ABC"')>0

9

次のすべての条件を満たすテキストインデクス※1，※3

LIKE述語を指定した条件が，論理演算子ORを使って複数指定されている

LIKE述語中の一致値にインデクス構成列が指定されている

"C1" LIKE 'ABC' OR "C1" LIKE 'DEF'

"C1" LIKE 'ABC%' OR "C1" LIKE 'DEF%'

"C1" LIKE '%ABC%' OR "C1" LIKE '%DEF%'

"C1" LIKE ? OR "C1" LIKE ?

次のどちらかの指定をしたスカラ関数CONTAINS中に，インデクス構成列が指定されているテキストインデクス※2，※4

表記ゆれ補正検索指定（ワード検索指定を指定していない場合に限る）

同義語検索指定（ワード検索指定を指定していない場合に限る）

CONTAINS("C1",'IGNORECASE("ABC")')>0

CONTAINS("C1",'SORTCODE("ABC")')>0

CONTAINS("C1",'SYNONYM("DIC1","ABC")')>0

次のすべての条件を満たすテキストインデクス※1，※2，※3，※4

LIKE述語を指定した条件，およびスカラ関数CONTAINSを指定した条件が，論理演算子ORを使って複数指定されている

LIKE述語中の一致値にインデクス構成列が指定されている

スカラ関数CONTAINS中にインデクス構成列が指定されている

"C1" LIKE '%ABC%'

OR

CONTAINS("C1",'"DEF"')>0

"C1" LIKE '%ABC%'

OR

CONTAINS("C1",'"DEF"')>0

OR

CONTAINS("C1",'IGNORECASE("GHI")')>0

次のすべての条件を満たすテキストインデクス※2，※3，※4

スカラ関数CONTAINSを指定した条件が，論理演算子ORを使って複数指定されている

スカラ関数CONTAINS中にインデクス構成列が指定されている

CONTAINS("C1",'"ABC"')>0

OR

CONTAINS("C1",'"DEF"')>0

CONTAINS("C1",'"ABC"')>0

OR

CONTAINS("C1",'IGNORECASE("ABC")')>0

OR

CONTAINS("C1",'SORTCODE("ABC")')>0

CONTAINS("C1",'"ABC"')>0

OR

CONTAINS("C1",'IGNORECASE("DEF")')>0

OR

CONTAINS("C1",'SORTCODE("GHI")')>0

OR

CONTAINS("C1",'SYNONYM("DIC1","JKL")')>0

CONTAINS("C1",'WORDCONTEXT("ABC")')>0

OR

CONTAINS("C1",'WORDCONTEXT("DEF")')>0

10

LIKE_REGEX述語中の一致値に，インデクス構成列が指定されているテキストインデクス※4，※5

"C1" LIKE_REGEX '^ABC'

"C1" LIKE_REGEX '^ABC' FLAG IGNORECASE

11

次のすべての条件を満たすテキストインデクス※3，※4，※5

LIKE_REGEX述語を指定した条件が，論理演算子ORを使って複数指定されている

LIKE_REGEX述語中の一致値にインデクス構成列が指定されている

"C1" LIKE_REGEX '^ABC'

OR

"C1" LIKE_REGEX '^DEF'

次のすべての条件を満たすテキストインデクス※1，※3，※4，※5

LIKE述語およびLIKE_REGEX述語を指定した条件が，論理演算子ORを使って複数指定されている

LIKE述語中の一致値にインデクス構成列が指定されている

LIKE_REGEX述語中の一致値にインデクス構成列が指定されている

"C1" LIKE '%ABC%'

OR

"C1" LIKE_REGEX '^DEF'

次のすべての条件を満たすテキストインデクス※2，※3，※4，※5

LIKE_REGEX述語を指定した条件，およびスカラ関数CONTAINSを指定した条件が，論理演算子ORを使って複数指定されている

LIKE_REGEX述語中の一致値にインデクス構成列が指定されている

スカラ関数CONTAINS中にインデクス構成列が指定されている

"C1" LIKE_REGEX '^ABC'

OR

CONTAINS("C1",'"XYZ"')>0

次のすべての条件を満たすテキストインデクス※1，※2，※3，※4，※5

LIKE述語を指定した条件，LIKE_REGEX述語を指定した条件，およびスカラ関数CONTAINSを指定した条件が，論理演算子ORを使って複数指定されている

LIKE述語中の一致値にインデクス構成列が指定されている

LIKE_REGEX述語中の一致値にインデクス構成列が指定されている

スカラ関数CONTAINS中にインデクス構成列が指定されている

"C1" LIKE_REGEX '^ABC'

OR

"C1" LIKE '%DEF%'

OR

CONTAINS("C1",'"XYZ"')>0

12

比較値に値指定だけを指定したIN述語中に，インデクス構成列が指定されているB-treeインデクス

"C1" IN (10,20,30)

比較値にスカラ演算を含む値指定だけを指定したIN述語中に，インデクス構成列が指定されているB-treeインデクス

"C1" IN (10,20,30+?)

"T1"."C1" IN (CASE WHEN 100=? THEN 10 ELSE 20 END,30,40)

13

BETWEEN述語中にインデクス構成列が指定されているB-treeインデクス

"C1" BETWEEN 20 AND 40

"C1" BETWEEN 20 AND 40+?

"T1"."C1" BETWEEN "T2"."C1"-6 MONTH AND "T2"."C1"

2つの比較述語を組み合わせた範囲条件に，インデクス構成列が指定されているB-treeインデクス

"C1">=20 AND "C1"<=40

14

次の条件を満たすIN述語中にインデクス構成列が指定されているB-treeインデクス

比較値に外への参照列を含まない副問合せを指定している

"C1" IN (SELECT "C1" FROM "T2")

外への参照列を含まない副問合せを指定した=ANY条件に，インデクス構成列が指定されているB-treeインデクス

"C1"=ANY(SELECT "C1" FROM "T2")

外への参照列を含まない副問合せを指定した=SOME条件に，インデクス構成列が指定されているB-treeインデクス

"C1"=SOME(SELECT "C1" FROM "T2")

15

>，>=，<，または<=の条件に，インデクス構成列が指定されているB-treeインデクス

"C1">50

"C1"<=200

"C1">=50+?

"T1"."C1" <"T2"."C1"||'X'

16

比較値に列指定を含むIN述語中に，インデクス構成列が指定されているB-treeインデクス

"T1"."C1" IN (10,"T2"."C1")

"T1"."C1" IN (10,"T2"."C1"+?,50)

17

論理演算子ORを指定した条件に，インデクス構成列が指定されているB-treeインデクス※6

"C1"<20 OR "C1">40

18

次のすべての条件を満たすLIKE述語中に，インデクス構成列が指定されているB-treeインデクス※7

パターン文字列に定数を指定している

前方一致以外の検索である

"C1" LIKE '%BCD%'

"C1" LIKE '%B¥_CD%' ESCAPE '¥'

次の条件を満たすLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

パターン文字列に列指定を含む値式を指定している

"T1"."C1" LIKE "T2"."C2" || '%'

次の条件を満たすLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

パターン文字列にスカラ演算を含む値式を指定している

"C1" LIKE CURRENT_USER || '%'

次の条件を満たすLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

エスケープ文字に列指定を含む値式を指定している

"T1"."C1" LIKE 'A¥%B@_C%'

ESCAPE "T2"."C1"

次の条件を満たすLIKE述語中に，インデクス構成列が指定されているB-treeインデクス

エスケープ文字にスカラ演算を含む値式を指定している

"C1" LIKE 'A¥%B@_C%' ESCAPE CASE WHEN 10=? THEN '¥' ELSE '@' END

注

複数列インデクスの場合，B-treeインデクスの第1構成列から順に，上記の表に示す優先順位が適用されます。

基本的には，上記の表に示す優先順位に従って，使用されるインデクスが決まります。ただし，探索条件の指定内容によっては，上記の表に示す優先順位では，有効な評価ができないことがあります。この場合，上記の表の優先順位に従わないインデクスが使用されることがあります。検索時に実際に使用されたインデクスを確認したい場合は，「5.2.5　SQL文の実行時に使用されるインデクスを確認する方法」を参照してください。

注※1

LIKE述語に，次に示す形式のパターン文字列を指定した場合，この条件は該当しません。

パターン文字列に特殊文字の%だけを指定している場合

（例）"C1" LIKE '%'

パターン文字列に空文字だけを指定している場合

（例）"C1" LIKE ''

パターン文字列に特殊文字以外の文字を2文字以上連続して指定していない場合

（例）"C1" LIKE '%A%'，"C1" LIKE '%A%B%'

一致値に指定した列と同じ表の列をパターン文字列に指定している場合

（例）"T1"."C1" LIKE "T1"."C2"

注※2

スカラ関数CONTAINS（同義語検索指定を指定していない場合，または同義語検索指定を指定しているが，検索文字列に対して同義語が存在しない場合が該当）に，次に示す形式の検索文字列を指定したときは，この条件は該当しません。

検索文字列に空文字だけを指定している場合

（例1）CONTAINS("C1",'""')>0

（例2）CONTAINS("C1",'IGNORECASE("")')>0

（例3）CONTAINS("C1",'SORTCODE("")')>0

（例4）CONTAINS("C1",'WORDCONTEXT("")')>0

（例5）CONTAINS("C1",'WORDCONTEXT_PREFIX("")')>0

検索文字列に1文字だけを指定している場合

（例1）CONTAINS("C1",'"A"')>0

（例2）CONTAINS("C1",'IGNORECASE("A")')>0

（例3）CONTAINS("C1",'SORTCODE("A")')>0

（例4）CONTAINS("C1",'WORDCONTEXT("A")')>0

（例5）CONTAINS("C1",'WORDCONTEXT_PREFIX("A")')>0

スカラ関数CONTAINSに同義語検索指定を指定し，検索文字列に対して同義語が存在する場合でも，「A」のような1文字の同義語が存在するときは，上記の条件には該当しません。

スカラ関数CONTAINSにワード検索指定が指定されていて，次の記号を取り除くと1文字以下になる検索文字列が指定されている場合

半角空白(0x20)，タブ(0x09)，改行(0x0A)，復帰(0x0D)，ピリオド，疑問符，感嘆符を含む1バイトの記号(0x21～0x2F，0x3A～0x40，0x5B～0x60，0x7B～0x7E)

（例1）CONTAINS("C1",'WORDCONTEXT("###A")')>0

（例2）CONTAINS("C1",'WORDCONTEXT_PREFIX("###A")')>0

注※3

論理演算子ORに含まれるすべての条件が，LIKE述語，LIKE_REGEX述語，またはスカラ関数CONTAINSを使用した条件である必要があります。また，論理演算子ORに含まれるすべての列は，選択対象となるテキストインデクスのインデクス構成列に含まれている必要があります。

注※4

次に示すどちらかの場合は，CREATE INDEX文でCORRECTIONRULE（テキストインデクス表記ゆれ補正指定）を指定して定義したテキストインデクスだけが対象になります。

FLAGにIGNORECASE（またはI）を指定したLIKE_REGEX述語を指定した場合

表記ゆれ補正検索指定を指定したスカラ関数CONTAINSを指定した場合

注※5

LIKE_REGEX述語の正規表現文字列に指定した文字が1文字以下の場合，この条件は該当しません。

注※6

論理演算子ORに含まれるすべての列は，選択対象となるB-treeインデクスのインデクス構成列に含まれている必要があります。また，論理演算子ORに指定される述語の数や条件の形式によっては，インデクスの優先順位が上下することがあります。

注※7

LIKE条件を指定するインデクス構成列のデータ型が可変長文字列型で，かつ次に示す形式のパターン文字列の場合はこの条件に該当しません。

末尾に特殊文字％（パーセント）が指定されていない場合

（例1）"C1" LIKE '%BCD'

（例2）"C1" LIKE '%BCD_'

末尾の特殊文字％（パーセント）の前に半角空白，または特殊文字_（下線）が指定されている場合

（例1）"C1" LIKE '%BCD△%'

（例2）"C1" LIKE '%BCD_%'

（凡例）△：半角空白

注※8

ワード検索用のテキストインデクスだけが，検索時に使用されるインデクスの選択対象になります。

(2)　インデクスの選択規則

SQL文の実行時に使用されるインデクスは，「(1)　インデクスの優先順位」で説明したインデクスの優先順位だけでは決まりません。ここで説明する条件なども加えて，使用されるインデクスが総合的に決定されます。

(a)　B-treeインデクスの選択規則

B-treeインデクスの選択規則を次の表に示します。

なお，選択規則は，1番目の規則で判定できなければ2番目の規則を適用するというように，1番目から順に判定されます。

表5‒2　B-treeインデクスの選択規則

選択規則

条件指定方法

1

ユニークインデクスのすべての列に=条件を指定している

2

サーチ条件の先頭から連続する=条件の中に，=結合条件が含まれている方を優先する

3

B-treeインデクスの第1構成列にサーチ条件が指定されているインデクス同士の場合は，そのサーチ条件の優先順位に従う

4

サーチ条件の数が多い方を優先する

5

キー条件の数が多い方を優先する

6

インデクス構成列数が少ない方を優先する（ただし，選択規則1に該当するインデクス同士の場合は，インデクス構成列数が多い方を優先する）

7

SQL文上で前に指定された条件をサーチ条件に使用している方を優先する

8

作業表を作らない方を優先する

9

ユニークインデクスを優先する（ただし，サーチ条件が指定されていないインデクス同士の場合は，非ユニークインデクスを優先する）

10

インデクスのキー長が短い方を優先する

11

「選択規則1から10」以外は内部処理に依存してB-treeインデクスが選択される

サーチ条件とキー条件については，「5.4.1　B-treeインデクスによる評価方式」を参照してください。

(b)　テキストインデクスの選択規則

テキストインデクスの選択規則を次の表に示します。

なお，選択規則は，1番目の規則で判定できなければ2番目の規則を適用するというように，1番目から順に判定されます。

表5‒3　テキストインデクスの選択規則

選択規則

条件指定方法

1

テキストインデクスで評価可能なLIKE述語を指定した条件の指定数が多い方を優先する

テキストインデクスで評価可能なLIKE_REGEX述語を指定した条件の指定数が多い方を優先する

テキストインデクスで評価可能なスカラ関数CONTAINSを指定した条件の指定数が多い方を優先する

2

LIKE述語のパターン文字列が長い方を優先する

LIKE_REGEX述語の正規表現文字列が長い方を優先する

スカラ関数CONTAINSの検索文字列が長い方を優先する

3

インデクス構成列の定義長が短い方を優先する

4

テキストインデクスで評価可能なOR条件に指定されているLIKE述語，LIKE_REGEX述語，およびスカラ関数CONTAINSのうち，指定数が少ない方を優先する

同義語検索指定を指定したスカラ関数CONTAINSが指定されている場合は，指定数に検索文字列に対する同義語数を加算して比較する

5

「選択規則1から4」以外は，内部処理に依存してインデクスが選択される

(c)　留意事項

取得したコスト情報などから，HADBがインデクスを有効に利用できないと判断したときは，ここで説明した選択規則とは異なる扱いをすることがあります。

WHERE句の探索条件や，結合表のON 探索条件に，否定の述語だけしか指定されていない場合など，HADBがインデクスを有効に利用できないと判断したときは，インデクスが使用されないことがあります。

5.2.2　表の検索時に使用されるインデクスの例

表の検索時に使用されるインデクスの例を説明します。

(1)　例1（B-treeインデクス（単一列インデクス）の場合）

B-treeインデクスの定義例：

 CREATE INDEX "IDX_C1"
        ON "T1" ("C1")
      IN "DBAREA01"
      EMPTY

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1"=100

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1">100 AND "C2"='U0100'

上記のSELECT文を実行した場合，B-treeインデクスIDX_C1が使用されます。

■B-treeインデクスが使用されないケース

次に示す場合は，B-treeインデクスは使用されません。

B-treeインデクスの定義例：

 CREATE INDEX "IDX_C1"
        ON "T1" ("C1")
      IN "DBAREA01"
      EMPTY

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1">100 OR "C2"='U0100'

OR条件の場合，C1列だけ（またはC2列だけ）にB-treeインデクスが定義されていても，そのB-treeインデクスは使用されません。そのため，上記のSELECT文を実行した場合，B-treeインデクスIDX_C1は使用されません。

また，C1列とC2列の両方にそれぞれB-treeインデクスが定義されていても，それらのB-treeインデクスは使用されません。

(2)　例2（B-treeインデクス（複数列インデクス）の場合）

B-treeインデクスの定義例：

 CREATE INDEX "IDX_C2C1"
       ON "T1" ("C2","C1")
     IN "DBAREA01"
     EMPTY

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1"=100

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C2"='U0100'

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1">100 AND "C2"='U0100'

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1">100 OR "C2"='U0100'

上記のSELECT文を実行した場合，B-treeインデクスIDX_C2C1が使用されます。

(3)　例3（テキストインデクスの場合）

テキストインデクスの定義例：

 CREATE INDEX "IDX_TXT_C1"
        ON "T1" ("C1")
      IN "DBAREA01"
      EMPTY
      INDEXTYPE TEXT

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1" LIKE '%XYZ%'

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1" LIKE '%XYZ%' AND "C2"='U0100'

上記のSELECT文を実行した場合，テキストインデクスIDX_TXT_C1が使用されます。

■テキストインデクスが使用されないケース

次に示す場合は，テキストインデクスは使用されません。

テキストインデクスの定義例：

 CREATE INDEX "IDX_TXT_C1"
        ON "T1" ("C1")
      IN "DBAREA01"
      EMPTY
      INDEXTYPE TEXT

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1" LIKE '%XYZ%' OR "C2"='U0100'

OR条件の場合，C1列だけ（またはC2列だけ）にテキストインデクスが定義されていても，そのテキストインデクスは使用されません。そのため，上記のSELECT文を実行した場合，テキストインデクスIDX_TXT_C1は使用されません。

なお，(1)〜(3)で説明しているインデクスが使用される例と使用されない例は代表的な例です。また，上記で説明しているインデクスが使用される例であっても，探索条件の書き方によってはインデクスが使用されないことがあります。検索時に実際に使用されるインデクスを確認したい場合は，「5.2.5　SQL文の実行時に使用されるインデクスを確認する方法」を参照してください。

5.2.3　表の検索時に使用されるインデクスの例（インデクスの優先順位の例）

表に複数のインデクスが定義されている場合，「表5‒1　表に複数のインデクスが定義されている場合のインデクスの優先順位」に示す優先順位に従って，使用されるインデクスが決定されます。

ここでは，表の検索時に使用されるインデクスの優先順位の例（代表的な例）を説明します。

検索時に実際に使用されるインデクスを確認したい場合は，「5.2.5　SQL文の実行時に使用されるインデクスを確認する方法」を参照してください。

(1)　例1（単一列インデクス同士の優先順位）

B-treeインデクス（単一列インデクス）同士の優先順位の例を説明します。

B-treeインデクスの定義例：

 CREATE INDEX "IDX_C1"
       ON "T1" ("C1")
     IN "DBAREA01"
     EMPTY

 CREATE INDEX "IDX_C2"
       ON "T1" ("C2")
     IN "DBAREA01"
     EMPTY

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1">100 AND "C2"='U0100'

この場合，B-treeインデクスIDX_C1の優先順位は15になり，B-treeインデクスIDX_C2の優先順位は2になります。したがって，B-treeインデクスIDX_C2が検索時に使用されます。

重要

上記のケースで，優先順位に従ってどちらかのB-treeインデクスだけが使用される場合，絞り込みがより効くB-treeインデクスが使用されるように，可能ならば探索条件を変更してください。絞り込みが効くB-treeインデクスを使用した方が性能向上が見込めます。

(2)　例2（単一列インデクス同士の優先順位）

B-treeインデクス（単一列インデクス）同士の優先順位の例を説明します。

B-treeインデクスの定義例：

 CREATE INDEX "IDX_C1"
       ON "T1" ("C1")
     IN "DBAREA01"
     EMPTY

 CREATE INDEX "IDX_C2"
       ON "T1" ("C2")
     IN "DBAREA01"
     EMPTY

実行するSELECT文の例：

 SELECT * FROM "T1"
     WHERE "C2"='U0100' AND "C1"=100

この場合，B-treeインデクスIDX_C1と，B-treeインデクスIDX_C2の優先順位はどちらも2になります。この場合，探索条件で先に書いた列のB-treeインデクスが優先されるため，B-treeインデクスIDX_C2が検索時に使用されます。

(3)　例3（複数列インデクス同士の優先順位）

B-treeインデクス（複数列インデクス）同士の優先順位の例を説明します。

B-treeインデクスの定義例：

 CREATE INDEX "IDX_C1C2"
       ON "T1" ("C1","C2")
     IN "DBAREA01"
     EMPTY

 CREATE INDEX "IDX_C2C3"
       ON "T1" ("C2","C3")
     IN "DBAREA01"
     EMPTY

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C2"='U0100'

この場合，B-treeインデクスIDX_C2C3が使用されます。

IDX_C1C2はC2列がインデクス第2構成列のため，C2列がインデクス第1構成列のIDX_C2C3が使用されます。

(4)　例4（単一列インデクスと複数列インデクスの優先順位）

B-treeインデクスの単一列インデクスと複数列インデクスの優先順位の例を説明します。

B-treeインデクスの定義例：

 CREATE INDEX "IDX_C1"
       ON "T1" ("C1")
     IN "DBAREA01"
     EMPTY

 CREATE INDEX "IDX_C3C2"
       ON "T1" ("C3","C2")
     IN "DBAREA01"
     EMPTY

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1">100 AND "C2"='U0100'

この場合，B-treeインデクスIDX_C1が使用されます。

IDX_C3C2はC2列がインデクス第2構成列のため，C1列をインデクス構成列とするIDX_C1が使用されます。

(5)　例5（単一列インデクスと複数列インデクスの優先順位）

B-treeインデクスの単一列インデクスと複数列インデクスの優先順位の例を説明します。

B-treeインデクスの定義例：

 CREATE INDEX "IDX_C1"
       ON "T1" ("C1")
     IN "DBAREA01"
     EMPTY

 CREATE INDEX "IDX_C2C3"
       ON "T1" ("C2","C3")
     IN "DBAREA01"
     EMPTY

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1">100 AND "C2"='U0100'

この場合，B-treeインデクスIDX_C1の優先順位は15になり，B-treeインデクスIDX_C2C3の優先順位は2になります。したがって，B-treeインデクスIDX_C2C3が使用されます。

C1列をインデクス構成列とするIDX_C1と，C2列をインデクス第1構成列とするIDX_C2C3は，「表5‒1　表に複数のインデクスが定義されている場合のインデクスの優先順位」に示す優先順位の比較対象になります。

(6)　例6（テキストインデクスとB-treeインデクスの優先順位）

テキストインデクスとB-treeインデクス（単一列インデクス）の優先順位の例を説明します。

インデクスの定義例：

 CREATE INDEX "IDX_TXT_C1"      ←テキストインデクスの定義
       ON "T1" ("C1")
     IN "DBAREA01"
     EMPTY
     INDEXTYPE TEXT

 CREATE INDEX "IDX_C2"          ←B-treeインデクスの定義
       ON "T1" ("C2")
     IN "DBAREA01"
     EMPTY

実行するSELECT文の例：

 SELECT "C1","C2","C3" FROM "T1"
     WHERE "C1" LIKE '%XYZ%' AND "C2" LIKE 'ABC%'

この場合，テキストインデクスIDX_TXT_C1の優先順位は8になり，B-treeインデクスIDX_C2の優先順位は4になります。したがって，B-treeインデクスIDX_C2が検索時に使用されます。

重要

上記のケースで，優先順位に従ってどちらかのインデクスだけが使用される場合，絞り込みがより効くインデクスが使用されるように，可能ならば探索条件を変更してください。絞り込みが効くインデクスを使用した方が性能向上が見込めます。

(7)　検索時に使用されるインデクスを変更したい場合

検索時に使用されるインデクスを変更する方法について説明します。

(a)　優先順位が同じ場合は，使用したいインデクス構成列を先に書く

「(2)　例2（単一列インデクス同士の優先順位）」で説明したとおり，優先順位が同じ場合，探索条件で先に書いた列のB-treeインデクスが優先されます。これを利用して，使用するB-treeインデクスを変更できます。例えば，次のように探索条件の指定を変更したとします。

＜変更前＞

SELECT * FROM "T1"
    WHERE "C3"='A001' AND "C2"='U0100'

＜変更後＞

SELECT * FROM "T1"
    WHERE "C2"='U0100' AND "C3"='A001'

変更前はC3列に定義したB-treeインデクスIDX_C3が使用されていましたが，変更後はC2列に定義したB-treeインデクスIDX_C2が使用されます。

(b)　現在使用されているインデクスの優先順位を下げる

現在使用されているインデクスの優先順位を下げて，もう一方のインデクスを使用するようにします。例えば，次のように探索条件の指定を変更したとします。

＜変更前＞

SELECT * FROM "T1"
    WHERE "C1"=100 AND "C2" LIKE 'ABC%'

＜変更後＞

SELECT * FROM "T1"
    WHERE "C1" BETWEEN 100 AND 100 AND "C2" LIKE 'ABC%'

変更前はIDX_C1の優先順位は2，IDX_C2の優先順位は4でしたが，変更後はIDX_C1の優先順位が13になります。そのため，変更前はB-treeインデクスIDX_C1が使用されていましたが，変更後はB-treeインデクスIDX_C2が使用されます。

(c)　インデクス指定を使用する

検索時に使用するインデクスをインデクス指定で指定できます。例を次に示します。

＜変更前＞

SELECT * FROM "T1"
    WHERE "C1"=100 AND "C2" LIKE 'ABC%'

C1列に定義したB-treeインデクスIDX_C1の優先順位は2，C2列に定義したB-treeインデクスIDX_C2の優先順位は4のため，IDX_C1が使用されます。

＜変更後＞

SELECT * FROM "T1" /*>> WITH INDEX (IDX_C2) <<*/
    WHERE "C1"=100 AND "C2" LIKE 'ABC%'

下線部分のインデクス指定で，検索時に使用するインデクスを指定できます。上記のSELECT文を実行した場合，IDX_C2が使用されます。

インデクス指定の詳細については，マニュアルHADB　SQLリファレンスのインデクス指定を参照してください。

5.2.4　インデクスが使用されないケース

探索条件に次の条件を指定している場合，インデクスが使用されません。なお，例に示すC1，C2は表の列名を意味しています。

否定の条件を指定している場合

次に示す例のように，否定の条件を探索条件に指定している場合，C1列をインデクス構成列とするインデクスが定義されていても，そのインデクスは使用されません。

（例）

WHERE "C1"<>100
WHERE "C1" IS NOT NULL
WHERE "C1" NOT LIKE 'ABC%'
WHERE "C1" NOT IN (10,20,30)
WHERE "C1" NOT BETWEEN 20 AND 40

論理演算子NOTを指定している場合

（例）

WHERE NOT ("C1"=100)

四則演算やCASE式などのスカラ演算を含む条件を指定している場合

次に示す例のように，四則演算やCASE式などのスカラ演算を含む条件を探索条件に指定している場合，C1列をインデクス構成列とするインデクスが定義されていても，そのインデクスは使用されません。

（例）

WHERE C1*10=200

ただし，スカラ演算の指定方法によっては，探索条件が自動的に等価変換され，インデクスが使用されることがあります。スカラ演算に関する等価変換については，「5.11.4　スカラ演算に関する等価変換」を参照してください。

なお，スカラ演算の中に定数だけを指定している場合，そのスカラ演算は定数として扱われることがあります。定数と等価なスカラ演算については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。

外への参照列を含む副問合せが指定されているIN副問合せを指定している場合

（例）

WHERE "T1"."C1" IN (SELECT "C1" FROM "T2" WHERE "C2"="T1"."C2")

外への参照列を含む副問合せが指定されている=ANYの限定述語を指定している場合

（例）

WHERE "T1"."C1"=ANY(SELECT "C1" FROM "T2" WHERE "C2"="T1"."C2")

外への参照列を含む副問合せが指定されている=SOMEの限定述語を指定している場合

（例）

WHERE "T1"."C1"=SOME(SELECT "C1" FROM "T2" WHERE "C2"="T1"."C2")

=ANYまたは=SOMEを除く限定述語を指定している場合

（例）

WHERE "C1"<>ANY(SELECT "C1" FROM "T2")
WHERE "C1"<>SOME(SELECT "C1" FROM "T2")
WHERE "C1"=ALL(SELECT "C1" FROM "T2")

EXISTS述語を指定している場合

（例）

WHERE EXISTS(SELECT * FROM "T2")

LIKE述語のパターン文字列に次の指定をしている場合

パターン文字列に特殊文字の%だけを指定している場合

（例）

WHERE "C1" LIKE '%'

パターン文字列に空文字だけを指定している場合

（例）

WHERE "C1" LIKE ''

パターン文字列に，特殊文字以外の文字を2文字以上連続して指定していない場合

（例）

WHERE "C1" LIKE '%A%'
WHERE "C1" LIKE '%A%B%'

一致値に指定した列と同じ表の列をパターン文字列に指定している場合

（例）

WHERE "T1"."C1" LIKE "T1"."C2"

上記の例のような指定をしている場合，C1列をインデクス構成列とするテキストインデクスが定義されていても，そのテキストインデクスは使用されません。

5.2.5　SQL文の実行時に使用されるインデクスを確認する方法

SQL文の実行時に使用されるインデクスは，アクセスパスで確認できます。アクセスパスについては，次に示す個所を参照してください。

アクセスパスの確認方法

「6.1.2　アクセスパスを確認するには」を参照してください。

アクセスパスに表示される内容

「6.1.5　詳細表示に出力される情報」の「(1)　表の検索方式，インデクス，および集まり導出表に関する情報」の「(b)　インデクスに関する情報」を参照してください。

アクセスパスを確認して，意図したとおりにインデクスが使用されているかどうかを確認してください。

検索対象表にインデクスが定義されている場合，指定した探索条件に基づいてインデクスを使用した検索が行われます。ただし，指定した探索条件によっては，インデクスが使用されなかったり，期待したインデクスとは異なるインデクスが使用されたりすることがあります。上記の方法で確認した結果，意図したとおりにインデクスが使用されていない場合，探索条件とインデクスの定義が合っていない可能性があります。この場合，インデクスの定義の変更を検討するか，または探索条件の変更を検討してみてください。

なお，インデクスの定義を変更する必要がある場合，AP開発者はHADBのシステム設計者またはシステム管理者に，インデクスの定義を変更するよう依頼をしてください。

5.2.6　テキストインデクスを使用して検索する際の留意事項

論理演算子ORを使用して，テキストインデクスの構成列を指定したLIKE述語，LIKE_REGEX述語，およびスカラ関数CONTAINSを複数指定した場合，すべての条件に指定した検索文字列を使用して検索処理が行われます。

（例）C1はテキストインデクスの構成列とします。

SELECT * FROM "T1" WHERE "C1" LIKE 'ABCDEFG%'
                      OR "C1" LIKE_REGEX 'XYZ[0-9]+'

上記のSELECT文を実行した場合，LIKE述語およびLIKE_REGEX述語の条件に指定した検索文字列（ABCDEFG%とXYZ[0-9]+）を使用して検索処理が行われます。

LIKE述語に指定したパターン文字列，LIKE_REGEX述語に指定した正規表現文字列，スカラ関数CONTAINSに指定した検索条件式指定の文字列の合計数が1,001文字以上になると，検索処理時間が急激に増加するおそれがあります。そのため，合計文字数が1,001文字以上の場合は，次に示すどちらかの対処をすることを検討してください。

UNIONを使用して，それぞれの検索結果を統合するなどSQL文を変更する

インデクス指定などを指定し，テキストインデクスを使用しない検索を行う

UNIONについては，マニュアルHADB　SQLリファレンスの問合せ式を参照してください。インデクス指定については，マニュアルHADB　SQLリファレンスのインデクス指定を参照してください。

5.3　SQL文の実行時に使用されるレンジインデクス

ここでは，SQL文の実行時にレンジインデクスが使用される条件と，SQL文の実行時に使用されたレンジインデクスを確認する方法について説明します。

5.3.1　SQL文の実行時にレンジインデクスが使用される条件

表にレンジインデクスが定義されている場合，WHERE句に指定された探索条件，結合表のON 探索条件，およびSQL文の実行時に使用されるB-treeインデクスまたはテキストインデクスによって，SQL文の実行時にレンジインデクスが使用されるかどうかが決まります。

ここでは，チャンクのスキップに使用するレンジインデクスの決定方法と，セグメントのスキップに使用するレンジインデクスの決定方法について説明します。

留意事項

ここで説明しているレンジインデクスが使用される条件は，内部導出表の展開後の問合せ式，または探索条件の等価変換によって変換された探索条件に対して適用されます。内部導出表の展開については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。探索条件の等価変換機能については，「5.11　探索条件の等価変換」を参照してください。

探索条件中に指定した値式で，スカラ演算中に定数だけを指定している場合，そのスカラ演算を定数と見なすことがあります。定数と等価なスカラ演算については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。

表を結合する際，表の結合方式によっては結合条件の評価時にレンジインデクスを使用しないことがあります。表の結合方式については，「5.5　表の結合方式」を参照してください。

副問合せを指定した場合，適用される副問合せの処理方式によってはレンジインデクスを使用しないことがあります。副問合せの処理方式については，「5.6　副問合せの処理方式」を参照してください。

(1)　チャンクのスキップに使用されるレンジインデクス

次の表に示す条件をすべて満たす場合，SQL文の実行時にレンジインデクスが使用されて，チャンクのスキップが行われます。

表5‒4　レンジインデクスが使用される条件

項番

レンジインデクスが使用される条件

対応する例

1

WHERE句に指定した探索条件，または結合表のON 探索条件で，次に示すどれかの述語に，レンジインデクスの構成列※1が指定されている必要があります。

−

比較述語

ただし，比較演算子の左側と右側に同じ表の列※2が指定されている場合は，レンジインデクスは使用されません。

（例1）

（例2）

（例3）

（例14）

（例15）

BETWEEN述語

ただし，値式1と同じ表の列※2が，値式2または値式3に指定されている場合は，レンジインデクスは使用されません。

（例4）

（例5）

IN述語（値式）

ただし，値式1と同じ表の列※2が，値式2以降の値式に指定されている場合は，レンジインデクスは使用されません。

（例6）

（例7）

IN述語（表副問合せ）

副問合せの処理方式にハッシュ実行が適用された場合に限り，レンジインデクスが使用されます。

（例17）

LIKE述語

LIKE指定の場合は，次に示すどれかの条件に該当している必要があります。なお，LIKE述語中にESCAPEを指定している場合は，エスケープ文字が，定数または？パラメタで指定されている必要があります。

・パターン文字列にユーザ情報取得関数だけが指定されている

・パターン文字列に？パラメタだけが指定されている

・パターン文字列に，'文字列%'（%は特殊文字）を先頭から含む定数だけが指定されている

・パターン文字列に，'文字列_'（_は特殊文字）を先頭から含む定数だけが指定されている

・パターン文字列に特殊文字（%，_ ）を含まない定数だけが指定されている（完全一致）

NOT LIKE指定の場合は，次に示すどれかの条件に該当している必要があります。

・パターン文字列に？パラメタだけが指定されている

・パターン文字列に，'文字列%'（%は特殊文字）を先頭から含む定数だけが指定されている

（例8）

（例9）

限定述語

副問合せの処理方式にハッシュ実行が適用された場合に限り，レンジインデクスが使用されます。

（例17）

2

項番1で説明している述語が，論理演算子ORまたはNOTを使用した条件中に指定されている場合は，レンジインデクスは使用されません。

（例10）

3

項番1で説明している述語中にスカラ演算がある場合は，レンジインデクスは使用されません。

（例11）

4

項番1で説明している述語中に，3つ以上の異なる表の列※2を指定している場合は，レンジインデクスは使用されません。

（例12）

5

外への参照列を含む副問合せ中に項番1で説明している述語が指定されていて，かつ副問合せの処理方式にネストループ実行が適用された場合

ただし，項番1で説明している述語中に，外への参照列がある場合は，外への参照列をインデクス構成列とするレンジインデクスは使用されません。

外への参照列を含む副問合せ中に項番1で説明している述語が指定されていて，かつ副問合せの処理方式にハッシュ実行が適用された場合

項番1で説明している述語中に，「外への参照列＝列指定」または「列指定＝外への参照列」のどちらかの形式で指定された外への参照列がある場合に限り，レンジインデクスが使用されます。

（例13）

（例16）

注※1

配列要素参照の配列値式に指定した列（次の例の下線部分の列）がレンジインデクスの構成列の場合，レンジインデクスが使用される条件に該当します。

（例）

"C1"[ANY]=10

"C1"[ANY(1)]=1

"C1"[2]=1

注※2

配列要素参照の配列値式に指定された列も該当します。

「表5‒4　レンジインデクスが使用される条件」に示す条件をすべて満たすレンジインデクスが表に複数定義されている場合，条件を満たすレンジインデクスがすべて（複数個）使用されます。

チャンクのスキップに使用できるレンジインデクスかどうかを確認する場合は，マニュアルHADB　システム構築・運用ガイドのレンジインデクスの確認（チャンクのスキップの可否）を参照してください。

(2)　セグメントのスキップに使用されるレンジインデクス

「表5‒4　レンジインデクスが使用される条件」に示す条件をすべて満たす場合，SQL文の実行時にレンジインデクスが使用されて，セグメントのスキップが行われます。「表5‒4　レンジインデクスが使用される条件」に示す条件をすべて満たすレンジインデクスが表に複数定義されている場合，条件を満たすレンジインデクスがすべて（複数個）使用されます。

ただし，SQL文の実行時にB-treeインデクスまたはテキストインデクスが使用された場合，レンジインデクスを使用したセグメントのスキップは行われません。

5.3.2　検索時に使用されるレンジインデクスの例

(1)　例1

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1">10

［説明］

この例の場合，条件に合致するデータを含まないチャンクおよびセグメントをスキップするために，レンジインデクスRIDX1が使用されます。

(2)　例2

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE
CREATE INDEX "RIDX2" ON "T1"("C2") IN "DBAREA01" EMPTY INDEXTYPE RANGE
CREATE INDEX "RIDX3" ON "T1"("C3") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1"=10 AND "C2">20 AND "C3">30

［説明］

この例の場合，条件に合致するデータを含まないチャンクおよびセグメントをスキップするために，レンジインデクスRIDX1，RIDX2およびRIDX3が使用されます。

(3)　例3（レンジインデクスが使用されない例）

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1">"C2"

［説明］

比較演算子の左側と右側に同じ表の列が指定されている場合は，レンジインデクスは使用されません（条件に合致するデータを含まないチャンクおよびセグメントはスキップされません）。この例の場合，C1，C2は表T1の列のため，レンジインデクスRIDX1は使用されません。

(4)　例4

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1" BETWEEN 10 AND 30

［説明］

この例の場合，条件に合致するデータを含まないチャンクおよびセグメントをスキップするために，レンジインデクスRIDX1が使用されます。

(5)　例5（レンジインデクスが使用されない例）

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1" BETWEEN "C2" AND "C3"

［説明］

値式1と同じ表の列が，値式2または値式3に指定されている場合は，レンジインデクスは使用されません（条件に合致するデータを含まないチャンクおよびセグメントはスキップされません）。この例の場合，C1，C2，C3は表T1の列のため，レンジインデクスRIDX1は使用されません。

(6)　例6

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1" IN (10,20,30)

［説明］

この例の場合，条件に合致するデータを含まないチャンクおよびセグメントをスキップするために，レンジインデクスRIDX1が使用されます。

(7)　例7（レンジインデクスが使用されない例）

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1" IN ("C2",20,30)

［説明］

値式1と同じ表の列が，値式2以降の値式に指定されている場合は，レンジインデクスは使用されません（条件に合致するデータを含まないチャンクおよびセグメントはスキップされません）。この例の場合，C1，C2は表T1の列のため，レンジインデクスRIDX1は使用されません。

(8)　例8

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1" LIKE CURRENT_USER
SELECT * FROM "T1" WHERE "C1" LIKE ?
SELECT * FROM "T1" WHERE "C1" LIKE 'ABC%'
SELECT * FROM "T1" WHERE "C1" LIKE 'ABC%E'
SELECT * FROM "T1" WHERE "C1" LIKE 'ABC%E%'
SELECT * FROM "T1" WHERE "C1" LIKE 'ABC%E%G'
SELECT * FROM "T1" WHERE "C1" LIKE 'ABC_'
SELECT * FROM "T1" WHERE "C1" LIKE 'ABC_E'
SELECT * FROM "T1" WHERE "C1" LIKE 'ABC_E_'
SELECT * FROM "T1" WHERE "C1" LIKE 'ABC_E_G'
SELECT * FROM "T1" WHERE "C1" LIKE 'ABC'
SELECT * FROM "T1" WHERE "C1" NOT LIKE ?
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'ABC%'
SELECT * FROM "T1" WHERE "C1" LIKE 'AB¥_C%' ESCAPE '¥'
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'AB¥_C%' ESCAPE '¥'

［説明］

上記の例の場合，どのSELECT文を実行しても，条件に合致するデータを含まないチャンクおよびセグメントをスキップするために，レンジインデクスRIDX1が使用されます。

LIKE述語に？パラメタを指定した場合はレンジインデクスが使用されますが，次に示す条件に該当しないパターン文字列を指定した場合は，レンジインデクスの効果はありません。

LIKEの場合

・'文字列%'（%は特殊文字）を先頭から含むパターン文字列

・'文字列_'（_は特殊文字）を先頭から含むパターン文字列

・%または_の特殊文字を含まないパターン文字列（完全一致）

NOT LIKEの場合

・'文字列%'（%は特殊文字）のパターン文字列

(9)　例9（レンジインデクスが使用されない例）

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1" LIKE '%ABC%'
SELECT * FROM "T1" WHERE "C1" LIKE '%ABC'
SELECT * FROM "T1" WHERE "C1" LIKE '_ABC_'
SELECT * FROM "T1" WHERE "C1" LIKE '_ABC'
SELECT * FROM "T1" WHERE "C1" NOT LIKE CURRENT_USER
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'ABC%E'
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'ABC%E%'
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'ABC%E%G'
SELECT * FROM "T1" WHERE "C1" NOT LIKE '%ABC%'
SELECT * FROM "T1" WHERE "C1" NOT LIKE '%ABC'
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'ABC_'
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'ABC_E'
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'ABC_E_'
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'ABC_E_G'
SELECT * FROM "T1" WHERE "C1" NOT LIKE '_ABC_'
SELECT * FROM "T1" WHERE "C1" NOT LIKE '_ABC'
SELECT * FROM "T1" WHERE "C1" NOT LIKE 'ABC'
SELECT * FROM "T1" WHERE "C1" LIKE '%AB¥_C%' ESCAPE '¥'
SELECT * FROM "T1" WHERE "C1" LIKE 'A¥%B@_C%'
                     ESCAPE CASE WHEN 10=? THEN '¥' ELSE '@' END
SELECT * FROM "T1" WHERE "C1" NOT LIKE '%AB¥_C%' ESCAPE '¥'

［説明］

上記のすべてのSELECT文は，「表5‒4　レンジインデクスが使用される条件」の項番1のLIKE述語の条件を満たしません。したがって，レンジインデクスRIDX1は使用されません（条件に合致するデータを含まないチャンクおよびセグメントはスキップされません）。

(10)　例10（レンジインデクスが使用されない例）

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1"=10 OR "C2"=20
SELECT * FROM "T1" WHERE NOT("C1"=10)

［説明］

論理演算子ORまたはNOTを使用した条件中に指定されている場合は，レンジインデクスは使用されません（条件に合致するデータを含まないチャンクおよびセグメントはスキップされません）。

(11)　例11（レンジインデクスが使用されない例）

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "T1"."C1"+10=20

［説明］

レンジインデクスの構成列を含むスカラ演算を使用している場合は，レンジインデクスは使用されません（条件に合致するデータを含まないチャンクおよびセグメントはスキップされません）。

(12)　例12（レンジインデクスが使用されない例）

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1","T2","T3" WHERE "T1"."C1" BETWEEN "T2"."C2" AND "T3"."C3"
SELECT * FROM "T1","T2","T3" WHERE "T1"."C1" IN ("T2"."C2","T3"."C3")

［説明］

述語中に3つ以上の異なる表の列を指定している場合は，レンジインデクスは使用されません（条件に合致するデータを含まないチャンクおよびセグメントはスキップされません）。

(13)　例13

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1"("C2") IN "DBAREA01" EMPTY INDEXTYPE RANGE
CREATE INDEX "RIDX2" ON "T1"("C3") IN "DBAREA01" EMPTY INDEXTYPE RANGE
CREATE INDEX "RIDX3" ON "T2"("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" "X"
    WHERE "X"."C1"=ANY(SELECT "T2"."C1" FROM "T2"
                       WHERE "X"."C2"=10 AND "X"."C3"="T2"."C1")

［説明］

レンジインデクスRIDX1およびRIDX2のインデクス構成列（表T1のC2列，C3列）は，外への参照列のため，レンジインデクスRIDX1およびRIDX2は使用されません。

レンジインデクスRIDX3は，表T2のC1列（外への参照列ではない列）をインデクス構成列とし，条件に合致するデータを含まないチャンクおよびセグメントをスキップするために使用されます。

(14)　例14

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T2" ("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1","T2" WHERE "T1"."C1"<"T2"."C1"
SELECT * FROM "T1" INNER JOIN "T2" ON "T1"."C1"<"T2"."C1"

［説明］

表T1を外表，表T2を内表とするネストループジョインが適用される場合，チャンクおよびセグメントをスキップするために，レンジインデクスRIDX1が使用されます。ネストループジョインの詳細については，「5.5.1　ネストループジョインとは」を参照してください。

(15)　例15

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T2" ("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1","T2" WHERE "T1"."C1"="T2"."C1"
SELECT * FROM "T1" INNER JOIN "T2" ON "T1"."C1"="T2"."C1"

［説明］

表の結合方式に，表T1を外表，表T2を内表とするハッシュジョインが適用される場合，チャンクおよびセグメントをスキップするために，レンジインデクスRIDX1が使用されます。ハッシュジョインの詳細については，「5.5.2　ハッシュジョインとは」を参照してください。

(16)　例16

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1" ("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" "X"
    WHERE EXISTS(SELECT * FROM "T2" WHERE "X"."C1"="T2"."C1")

［説明］

外への参照列を含む副問合せの処理方式にハッシュ実行が適用される場合，チャンクおよびセグメントをスキップするために，レンジインデクスRIDX1が使用されます。外への参照列を含む副問合せの処理方式のハッシュ実行の詳細については，「5.6.3　外への参照列を含む副問合せの処理方式とは」の「(3)　ハッシュ実行」を参照してください。

(17)　例17

レンジインデクスの定義

CREATE INDEX "RIDX1" ON "T1" ("C1") IN "DBAREA01" EMPTY INDEXTYPE RANGE

SQL文の例

SELECT * FROM "T1" WHERE "C1" IN (SELECT "T2"."C1" FROM "T2")
SELECT * FROM "T1" WHERE "C1"=ANY(SELECT "T2"."C1" FROM "T2")

［説明］

外への参照列を含まない副問合せの処理方式にハッシュ実行が適用される場合，チャンクおよびセグメントをスキップするために，レンジインデクスRIDX1が使用されます。外への参照列を含まない副問合せの処理方式のハッシュ実行の詳細については，「5.6.1　外への参照列を含まない副問合せの処理方式とは」の「(4)　ハッシュ実行」を参照してください。

5.3.3　SQL文の実行時に使用されるレンジインデクスを確認する方法

SQL文の実行時に使用されるレンジインデクスは，アクセスパスで確認できます。アクセスパスについては，次に示す個所を参照してください。

アクセスパスの確認方法

「6.1.2　アクセスパスを確認するには」を参照してください。

アクセスパスに表示される内容

「6.1.5　詳細表示に出力される情報」の「(1)　表の検索方式，インデクス，および集まり導出表に関する情報」の「(b)　インデクスに関する情報」を参照してください。

5.4　インデクスを使用した探索条件の評価方式

インデクスを使用した探索条件の評価方式には，次の2つがあります。

B-treeインデクスによる評価方式

レンジインデクスによる評価方式

WHERE句またはON条件に指定された探索条件を，インデクスを使用して評価する際の評価方式について説明します。

5.4.1　B-treeインデクスによる評価方式

B-treeインデクスを使用して探索条件を評価する場合，サーチ条件とキー条件に従って評価されます。

(1)　サーチ条件とは

B-treeインデクスによる検索範囲を特定する条件をサーチ条件といいます。主に次の条件が該当します。

=，不等号，IS NULL，LIKE述語の前方一致指定（定数指定），LIKE述語の？パラメタ指定，IN述語※，BETWEEN述語，限定述語（=ANY，=SOME）

注※

ネストループジョインの内表に指定されたIN述語（表副問合せ指定ではない場合）は，サーチ条件にならないことがあります。

サーチ条件による評価方式の例を次の図に示します。

図5‒4　サーチ条件による評価方式の例

［説明］

この場合，サーチ条件は50≦C1≦100になります。サーチ条件に該当する行のデータページにアクセスします。

(2)　キー条件とは

B-treeインデクスのインデクス構成列だけで評価できる条件をキー条件といいます。サーチ条件のようにB-treeインデクスによる検索範囲を絞ることはできませんが，B-treeインデクスのインデクスページだけで条件を評価できるため，データページを参照する回数を減らすことができ，その分検索性能が向上します。

キー条件による評価方式の例を次の図に示します。

図5‒5　キー条件による評価方式の例

［説明］

この場合，各条件は次のようになります。

サーチ条件：40≦C1≦60

キー条件：C2 IN(1，2)

サーチ条件で検索範囲を絞り込み，キー条件に該当する行のデータページにだけアクセスします。

5.4.2　レンジインデクスによる評価方式

レンジインデクスを使用して探索条件を評価する場合，次の2つのレンジインデクス条件に従って評価されます。

チャンクのスキップにレンジインデクスを使用する条件

レンジインデクスを使用して，探索条件に該当するデータを含まないチャンクをスキップするための条件です。アクセスするチャンクが減ることで，参照するデータページの量を減らすことができ，その分検索性能が向上します。

この条件は，チャンクのスキップが使用できるレンジインデクスの場合だけ使用されます。

チャンクのスキップに使用できるレンジインデクスかどうかを確認する場合は，マニュアルHADB　システム構築・運用ガイドのディクショナリ表の検索のチャンクのスキップができるレンジインデクスかどうかを調べる場合を参照してください。

セグメントのスキップにレンジインデクスを使用する条件

レンジインデクスを使用して，探索条件に該当するデータを含まないセグメントをスキップするための条件です。アクセスするセグメントが減ることで，参照するデータページの量を減らすことができ，その分検索性能が向上します。

メモ

チャンクのスキップ，およびセグメントのスキップについては，マニュアルHADB　システム構築・運用ガイドのレンジインデクスを参照してください。

(1)　レンジインデクスを使用したチャンクのスキップ例

レンジインデクスを使用したチャンクのスキップ例を説明します。

［説明］

検索処理の流れを次に示します。

チャンクにアクセスする前に，チャンクのスキップに使用するレンジインデクス条件を評価します。

チャンクのスキップに使用するレンジインデクス条件：100≦C1≦300，C2 IN(1，2)，C3<300

検索対象となるチャンクのB-treeインデクスでサーチ条件とキー条件を評価します。

サーチ条件：100≦C1≦300

キー条件：C2 IN(1，2)

データページにアクセスして，残りの探索条件の評価を行います。

データページにアクセスしたあとに評価する探索条件：C3<300

なお，C1列，C2列，C3列に定義されているレンジインデクスは，セグメントのスキップには使用しません。

(2)　レンジインデクスを使用したセグメントのスキップ例

レンジインデクスを使用したセグメントのスキップ例を説明します。

［説明］

検索処理の流れを次に示します。

チャンクにアクセスする前に，チャンクのスキップに使用するレンジインデクス条件を評価します。

チャンクのスキップに使用するレンジインデクス条件：100≦C1≦110

検索対象となるチャンクのセグメントのスキップに使用するレンジインデクス条件を評価します。

セグメントのスキップに利用するレンジインデクス条件：100≦C1≦110

データページにアクセスして探索条件の評価を行います。

データページにアクセスしたあとに評価する探索条件：C2 IN(1,2)

5.5　表の結合方式

表の結合方式には次の2種類があります。

ネストループジョイン

ハッシュジョイン

この節では，各結合方式とその特徴について説明します。

表の結合方式は，HADBが自動的に決定します。SQL文を実行した結果，どの結合方式が適用されたかを，アクセスパスで確認することができます。アクセスパスについては，次に示す個所を参照してください。

アクセスパスの確認方法

「6.1.2　アクセスパスを確認するには」を参照してください。

アクセスパスに表示される内容

「6.1.4　ツリー表示に出力される情報」の「(29)　表の結合方式」を参照してください。

メモ

結合表の場合は，結合方式指定で表の結合方式を指定することができます。結合方式指定については，マニュアルHADB　SQLリファレンスの結合方式指定の指定形式および規則を参照してください。

5.5.1　ネストループジョインとは

外表の結合列の値を使用して，内表の結合列をサーチして突き合わせます。この処理を外表の行数分繰り返して表を結合します。この結合方式をネストループジョインといいます。

外表と内表を結合するための結合条件に指定した列に，インデクスが定義されている場合，結合条件の評価時にインデクスを使用して，内表の検索範囲を絞り込めることがあります。

次のSELECT文を実行した際にネストループジョインが適用された場合を例にして，ネストループジョインによる結合方式を説明します。

（例）

SELECT * FROM "T1","T2" WHERE "T1"."C2">10 AND "T1"."C1">"T2"."C1"

結合対象の表のうち，どちらを外表，内表にするかは，HADBが決定します。この例では，表T1を外表，表T2を内表として説明します。また，下線部分の結合条件に指定しているT1.C1列とT2.C1列が結合列となります。

図5‒6　ネストループジョインによる結合方式

［説明］

外表の結合列の値（B3）を取り出し，内表の結合列の値と突き合わせます。次に，外表の結合列の値（A1）を取り出し，内表の結合列の値と突き合わせます。この処理を外表の行数分繰り返します。

表T1を外表，表T2を内表とするネストループジョインの場合，結合条件に指定した列（"T1"."C1"および"T2"."C1"）にインデクスが定義されていると，結合条件（"T1"."C1">"T2"."C1"）の評価時にインデクスを使用して，内表の検索範囲を絞り込めることがあります。

メモ

結合表の場合は，結合方式指定によって外表を指定することができます。結合方式指定については，マニュアルHADB　SQLリファレンスの結合方式指定の指定形式および規則を参照してください。

5.5.2　ハッシュジョインとは

外表の結合列を基に作成したハッシュテーブルと，内表の結合列をハッシングした結果を突き合わせて表を結合します。この結合方式をハッシュジョインといいます。

外表と内表を結合するための結合条件に指定した列に，インデクスが定義されている場合でも，結合条件の評価時にインデクスは使用されません（ハッシュを使用して結合条件を評価します）。ただし，結合条件に指定した内表の列にレンジインデクスが定義されていて，かつレンジインデクスが使用される条件を満たしている場合は，そのレンジインデクスが使用されることがあります。

なお，コスト情報を取得している場合，ハッシュジョインをチャンク単位に分割実行することがあります。この分割実行では，マルチチャンク表に対してチャンクごとに外表のデータを分割し，分割したデータごとにハッシュジョインを繰り返し実行します。

(1)　ハッシュジョインによる結合方式

次のSELECT文を実行した際にハッシュジョインが適用された場合を例にして，ハッシュジョインによる結合方式を説明します。

（例）

SELECT * FROM "T1","T2" WHERE "T1"."C2">10 AND "T1"."C1"="T2"."C1"

結合対象の表のうち，どちらを外表，内表にするかは，HADBが決定します。この例では，表T1を外表，表T2を内表として説明します。また，下線部分の結合条件に指定しているT1.C1列とT2.C1列が結合列となります。

図5‒7　ハッシュジョインによる結合方式

［説明］

外表（表T1）の結合列の値を基に，ハッシュテーブルとハッシュフィルタを作成します。

内表（表T2）の結合列の値をハッシングした結果と，ハッシュテーブルを突き合わせて，表の結合を行います。内表の結合列をハッシュテーブルと突き合わせる前に，ハッシュフィルタを使用して事前にフィルタリングします。これによって，内表の結合列とハッシュテーブルの突き合わせ回数を削減できます。

表T1を外表，表T2を内表とするハッシュジョインの場合，結合条件に指定した列（"T1"."C1"および"T2"."C1"）にインデクスが定義されている場合でも，結合条件（"T1"."C1"="T2"."C1"）の評価時にインデクスは使用されません。

"T1"."C2"にインデクスが定義されている場合は，「"T1"."C2">10」の評価時にインデクスが使用されることがあります。

また，次の2つの条件を満たす場合，ハッシュジョインの処理の際にレンジインデクスが使用されることがあります。

ハッシュジョインの内表の結合列（上記の例の表T2のC1列）にレンジインデクスが定義されている

レンジインデクスが使用される条件を満たしている

レンジインデクスが使用される条件については，「5.3.1　SQL文の実行時にレンジインデクスが使用される条件」を参照してください。

上記の2つの条件を満たす場合，ハッシュジョインの処理で，外表の結合列からハッシュテーブルを作成するときに，外表の結合列の最大値と最小値を求めます。そして，内表を検索するときにレンジインデクスを使用して，先に求めた結合列の最大値と最小値の範囲外となる内表のチャンクまたはセグメントをスキップします。

ハッシュテーブルは，ハッシュテーブル領域に作成されます。ハッシュテーブル領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

ハッシュフィルタは，ハッシュフィルタ領域に作成されます。ハッシュフィルタ領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドで指定します。

(2)　ハッシュジョインが適用される例

（例1）

SELECT * FROM "T1","T2" WHERE "T1"."C1"="T2"."C1"

＝指定の結合条件の両側に単独の列指定を指定した場合，ハッシュジョインが適用されます。

（例2）

SELECT * FROM "T1","T2" WHERE "T1"."C1"="T2"."C1"+10

次の条件を満たす場合，ハッシュジョインが適用されます。

＝指定の結合条件の片側に単独の列指定を指定していて，もう片方には列指定を含むスカラ演算を指定している

（例3）

SELECT * FROM "T1" INNER JOIN "T2"
    ON "T1"."C1"=CAST("T2"."C1" AS INTEGER)

次の条件を満たす場合，ハッシュジョインが適用されます。

＝指定の結合条件の片側に単独の列指定を指定していて，もう片方には列指定を含むスカラ関数を指定している

（例4）

SELECT * FROM "T1" LEFT JOIN "T2"
    ON "T1"."C1"="T2"."C1"||"T2"."C2"

次の条件を満たす場合，ハッシュジョインが適用されます。

＝指定の結合条件の片側に単独の列指定を指定していて，もう片方には列指定を含む連結演算を指定している

(3)　ハッシュジョインを適用する場合の留意事項

＝指定の結合条件の左右に指定した値式のデータ型とデータ長は，できる限り同じにしてください。＝指定の結合条件の左右に指定した値式のデータ型とデータ長が異なる場合，データ型とデータ長が同じ形式に変換されたあとにハッシュテーブルが作成されてハッシングが行われます。そのため，変換の分だけオーバヘッドが掛かります。

変換後のデータ型については，マニュアルHADB　SQLリファレンスの変換，代入，比較できるデータ型を参照してください。

なお，変換後のデータ型がDECIMAL型の場合，精度と位取りは次の計算式を基に決定されます。

計算式

精度＝Pmax＋Smax
位取り＝Smax
Pmax＝MAX（p1−s1，p2−s2）
Smax＝MAX（s1，s2）

p1，s1：＝指定の結合条件の左側に指定した値式の精度と位取り

p2，s2：＝指定の結合条件の右側に指定した値式の精度と位取り

なお，変換前のデータ型がINTEGER型の場合は，DECIMAL(20,0)として計算されます。変換前のデータ型がSMALLINT型の場合は，DECIMAL(10,0)として計算されます。

（例）

変換後のデータ型がDECIMAL型の場合の精度と位取りの決定例を次に示します。

表の定義

CREATE TABLE "T1"("C1" INTEGER,"C2" CHAR(3),"C3" DATE) IN "DBAREA01"
CREATE TABLE "T2"("C1" DECIMAL(7,3),"C2" CHAR(3),"C3" DATE) IN "DBAREA01"

SQL文の例

SELECT * FROM "T1","T2" WHERE "T1"."C1"="T2"."C1"

下線部の＝指定の結合条件の左側に指定された列（"T1"."C1"）と，右側に指定された列（"T2"."C1"）は，データ型とデータ長が異なります。そのため，データ型とデータ長が変換されます。"T1"."C1"列はINTEGER型，"T2"."C1"列はDECIMAL型です。

この場合，＝指定の結合条件の左右に指定された列のデータ型はDECIMAL型に変換されます。"T1"."C1"列はDECIMAL(20,0)と仮定されます。変換後のDECIMAL型の精度と位取りは以下のように計算されます。

Pmax＝MAX（p1−s1，p2−s2）＝MAX（20−0，7−3）＝20
Smax＝MAX（s1，s2）＝MAX（0，3）＝3
精度＝Pmax＋Smax＝23
位取り＝Smax＝3

＝指定の結合条件の左右に指定された列のデータ型とデータ長をDECIMAL(23,3)に変換してハッシュテーブルが作成され，ハッシングが行われます。

(4)　ハッシュテーブル領域が不足した場合の対処方法

■ハッシュテーブル領域が不足した場合の処理の流れ

ハッシュテーブルの作成中に，ハッシュテーブル領域が不足した場合の処理の流れを説明します。

ハッシュテーブルの作成中にハッシュテーブル領域が不足した場合，外表のデータを複数の作業表に分割して格納します。また，内表のデータも，外表のデータと同様に複数の作業表に分割して格納します。

メモ

上記の例では，外表の作業表が3つ，内表の作業表が3つ作成されていますが，SQL文の指定内容などによっては作成される作業表の個数が変わります。

外表の作業表（作業表B1）からハッシュテーブルを作成し，そのハッシュテーブルと内表の作業表（作業表P1）の突き合わせ処理を実行します。

ハッシュテーブルと作業表P1の突き合わせ処理の完了後，作業表B2からハッシュテーブルを作成し，そのハッシュテーブルと作業表P2の突き合わせ処理を実行します。

ハッシュテーブルと作業表P2の突き合わせ処理の完了後，作業表B3からハッシュテーブルを作成し，そのハッシュテーブルと作業表P3の突き合わせ処理を実行します。

上記の2.の処理中にハッシュテーブル領域が不足した場合

上記の2.の処理中にハッシュテーブル領域が不足した場合，ハッシュテーブルに格納できなかったデータを別の作業表に格納します。この場合，内表の作業表とハッシュテーブルの突き合わせ処理のほかに，内表の作業表と新たに作成された作業表（作業表B4）との突き合わせ処理も発生します。

メモ

上記の2.の処理中にハッシュテーブル領域が不足して作業表（作業表B4）が新たに作成された場合，サーバメッセージログファイルにKFAA51130-Wメッセージが出力されます。

■ハッシュテーブル領域が不足した場合の対処方法

ハッシュテーブル領域が不足した場合，作業表を作成する時間や，突き合わせ処理に掛かる時間によって，SQL文の処理時間が長くなることがあります。ハッシュテーブル領域の不足を解消するには，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定値（ハッシュテーブル領域サイズの指定値）を大きくしてください。

(5)　ハッシュジョインが適用されない条件

次に示すどれかの条件に該当する場合は，結合方式にハッシュジョインが適用されることはありません。

サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドに0が指定されている場合

サーバ定義のadb_sys_uthd_numオペランドに0が指定されている場合

サーバ定義またはクライアント定義のadb_sql_exe_max_rthd_numオペランドに0が指定されている場合

更新系SQLに指定された問合せの場合

結合する表の間に，＝指定の結合条件がない場合

結合する表の間に，＝指定の結合条件があるが，次のどれかの条件に該当する場合

＝指定の結合条件の左右に列指定を含んだスカラ演算が指定されている

＝指定の結合条件の片側に列指定を含んだスカラ演算が指定され，もう片方には単独の列指定が指定され，かつ次のどれかの条件に該当する場合

・列指定を含んだスカラ演算中に，外への参照列を含む副問合せが指定されている

・列指定を含んだスカラ演算中に，＝指定の結合条件のもう片方に指定された単独の列指定と同じ表の列が指定されている

＝指定の結合条件の左右に指定された値式の変換後のデータ型がDECIMAL型であり，精度が38より大きい

次のすべての条件を満たしている場合

・＝指定の結合条件の左右のどちらかに指定された値式のデータ型がVARCHAR型であり，データ長が32,000バイトを超えている

・＝指定の結合条件の左右に指定された値式のデータ型またはデータ長が異なる

＝指定の結合条件の左右のどちらかに配列要素参照が指定されている

外への参照列を含む副問合せに指定されている

結合する表の間に，＝指定の結合条件が指定されているが，どちらかの表が表値構成子によって導出された導出表の場合

選択式にROWを指定した問合せの場合

結合方式指定で，結合方式にネストループジョインを指定している場合

メモ

結合表の場合は，結合方式指定によって外表を指定することができます。結合方式指定については，マニュアルHADB　SQLリファレンスの結合方式指定の指定形式および規則を参照してください。

(6)　ハッシュフィルタが適用される条件

次の条件をすべて満たす場合に，ハッシュジョインの際にハッシュフィルタが適用されます。

サーバ定義またはクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドに0が指定されていない

コンマ結合またはINNER JOINの指定で表が結合されている

サーバ定義またはクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドに指定したハッシュフィルタ領域サイズが小さい場合，ハッシュ検索ごとに割り当てられるハッシュフィルタ領域が不足することがあります。その結果，ハッシュフィルタのサイズが不足したハッシュ検索がある場合，そのハッシュ検索にハッシュフィルタは適用されません。すべてのハッシュ検索に対してハッシュフィルタを適用したい場合は，次の条件式を満たすようにadb_sql_exe_hashflt_area_sizeオペランドの指定値を変更してください。

adb_sql_exe_hashflt_area_sizeの指定値＞↑A×B×SQL文の処理リアルスレッド数÷1024↑

A：

ハッシュフィルタが適用されなかったハッシュ検索で使用するハッシュフィルタ数

ハッシュフィルタが適用されなかったハッシュ検索が2つ以上ある場合は，ハッシュ検索ごとに数を求め，その中の最大値を代入してください。1つのハッシュ検索で使用するハッシュフィルタの数を次に示します。

ハッシュジョインの場合：ハッシュジョインの＝結合条件数

ハッシュ実行が適用される副問合せのうち，外への参照を含まない副問合せの場合：1

ハッシュ実行が適用される副問合せのうち，外への参照を含む副問合せの場合：外への参照列を含む＝条件の数

B：

SQL文中に指定した次の数の合計値

ハッシュフィルタが適用されるハッシュジョインの数

ハッシュフィルタを使用したハッシュ実行が適用される副問合せの数

5.5.3　各結合方式の特徴

各結合方式の特徴を次の表に示します。

表5‒5　表の結合方式の特徴

結合方式

初回のデータの取り出し速度

長所

短所

ネストループジョイン

速い

内表の結合列をB-treeインデクスまたはテキストインデクスで絞り込める場合は，高速に検索できます。

外表のヒット行数が多い場合は，処理性能が低下します。

ハッシュジョイン

遅い

外表のヒット行数が少なく，内表のヒット行数が多い場合は，高速に検索できます。

外表のヒット行数が多い場合は，使用するハッシュテーブル領域サイズが大きくなります。

ハッシュテーブル領域が不足した場合，いったん作業表に退避するため，処理性能が低下します。

ただし，外表がマルチチャンク表であり，かつチャンク単位のハッシュジョインの分割実行をHADBが適用可能と判断した場合は，作業表への退避処理が発生する可能性が低くなります（処理性能の低下する可能性が低くなります）。

5.6　副問合せの処理方式

副問合せの処理方式には次の2種類があります。

外への参照列を含まない副問合せの処理方式

外への参照列を含む副問合せの処理方式

この節では，各副問合せの処理方式とその特徴について説明します。

なお，SQL文を実行した結果，どの処理方式が適用されたかを，アクセスパスで確認することができます。アクセスパスについては，次に示す個所を参照してください。

アクセスパスの確認方法

「6.1.2　アクセスパスを確認するには」を参照してください。

アクセスパスに表示される内容

「6.1.4　ツリー表示に出力される情報」の「(2)　副問合せの処理方式」を参照してください。

外への参照列については，マニュアルHADB　SQLリファレンスの副問合せの指定形式および規則を参照してください。

5.6.1　外への参照列を含まない副問合せの処理方式とは

外への参照列を含まない副問合せの処理方式には，次の4種類があります。

作業表実行

行値実行

作業表行値実行

ハッシュ実行

各処理方式について説明します。

(1)　作業表実行

次に示す場合，作業表実行が適用されて副問合せの処理が実行されることがあります。

限定述語を指定した場合

IN述語中に表副問合せを指定した場合

作業表実行の適用例を次に示します。

■実行するSELECT文

SELECT "T1"."C1" FROM "T1"
    WHERE ABS("T1"."C2")=ANY(SELECT "T2"."C2" FROM "T2")

表T1のC2列には，B-treeインデクスおよびテキストインデクスが定義されていないものとします。

図5‒8　作業表実行の処理方式

［説明］

副問合せの結果を作業表に格納します。

この例の場合，副問合せ中に指定した表T2を検索して，表T2のC2列の値を作業表に格納します。

副問合せの外側の問合せが実行されます。このとき，副問合せの外側の問合せを1行検索するごとに副問合せの結果（作業表）と突き合わせて探索条件を評価します。

この例の場合，表T1から1行ずつ取り出し，表T1のC2列の絶対値と，作業表に格納された表T2のC2列の値を突き合わせて探索条件を評価します。

(2)　行値実行

次に示す場合，行値実行が適用されて副問合せの処理が実行されることがあります。

スカラ副問合せを指定した場合

EXISTS述語を指定した場合

行値実行の適用例を次に示します。

■実行するSELECT文

SELECT "T1"."C1" FROM "T1"
    WHERE "T1"."C2"< (SELECT MAX("T2"."C2") FROM "T2")

図5‒9　行値実行の処理方式

［説明］

副問合せの結果を求めます。

この例の場合，副問合せ中に指定した表T2を検索して，MAX("T2"."C2")を求めます。

副問合せの結果を使用して，副問合せの外側の問合せの副問合せを含む条件を評価します。比較述語の場合は，副問合せの外側の問合せを実行する際に，B-treeインデクスまたはテキストインデクスを使用することがあります。

この例の場合，1.で求めたMAX("T2"."C2")を条件値として，表T1を検索します。条件によっては，B-treeインデクスまたはテキストインデクスを使用して検索します。

(3)　作業表行値実行

次に示す場合，作業表行値実行が適用されて副問合せの処理が実行されることがあります。

限定述語を指定した場合

IN述語中に表副問合せを指定した場合

作業表行値実行の適用例を次に示します。

■実行するSELECT文

SELECT "T1"."C1" FROM "T1"
    WHERE "T1"."C2"=ANY(SELECT "T2"."C2" FROM "T2")

表T1のC2列には，B-treeインデクスが定義されているものとします。

図5‒10　作業表行値実行の処理方式

［説明］

副問合せの結果を作業表に格納します。

この例の場合，副問合せ中に指定した表T2を検索して，表T2のC2列の値を作業表に格納します。

作業表から行値を1行ずつ取り出して副問合せの外側の問合せを実行し，探索条件を評価します。このとき，B-treeインデクスを使用します。テキストインデクスが定義されている場合は，テキストインデクスを使用します。

この例の場合，作業表から表T2のC2列の値を1行ずつ取り出して，表T1のC2列に定義したB-treeインデクスを使用して表T1を検索します。

(4)　ハッシュ実行

ハッシュテーブルを使用した副問合せの処理方式をハッシュ実行といいます。次の場合に，ハッシュ実行が適用されることがあります。

限定述語を指定した場合

IN述語中に表副問合せを指定した場合

副問合せの処理方式にハッシュ実行が適用された場合，最初に，副問合せの結果を基にハッシュテーブルを作成します。次に，副問合せの外側の問合せを実行し，限定述語の左側に指定した列（またはIN述語の左側に指定した列）の値からハッシュ値を生成します。最後に，ハッシュ値とハッシュテーブルの突き合わせ処理を行います。

また，ハッシュテーブルを作成する際，同時にハッシュフィルタを作成します。ハッシュ値とハッシュテーブルの突き合わせ処理をする前に，ハッシュフィルタを使用してハッシュ値のフィルタリングを行います。これによって，ハッシュ値とハッシュテーブルの突き合わせ回数を削減することができます。

ハッシュ実行の適用例を次に示します。

■実行するSELECT文

SELECT "T1"."C1" FROM "T1"
    WHERE "T1"."C2"=ANY(SELECT "T2"."C2" FROM "T2")

図5‒11　ハッシュ実行の処理方式

［説明］

副問合せ（上記のSQL文の例の下線部分）の結果を基に，ハッシュテーブルとハッシュフィルタを作成します。上記の例の場合，副問合せ中に指定した表T2を検索し，表T2のC2列の値からハッシュテーブルとハッシュフィルタを作成します。

副問合せの外側の問合せを実行し，限定述語の左側に指定した列（上記のSQL文の例の場合は表T1のC2列）の値からハッシュ値を生成します。そのハッシュ値をハッシュフィルタでチェックします。上記の例の場合，表T1から1行ずつ取り出して，表T1のC2列の値からハッシュ値を生成し，ハッシュフィルタでそのハッシュ値をチェックします。

ハッシュフィルタを通過したハッシュ値と，ハッシュテーブルの突き合わせ処理を行います。

なお，次の2つの条件を満たす場合，ハッシュ実行の処理の際にレンジインデクスが使用されることがあります。

副問合せの外側の問合せに指定された表（上記の例の表T1）に対して，限定述語またはIN述語の左側に指定した列（上記の例の列T1.C2）にレンジインデクスが定義されている

レンジインデクスが使用される条件を満たしている

レンジインデクスが使用される条件については，「5.3.1　SQL文の実行時にレンジインデクスが使用される条件」を参照してください。

上記の2つの条件を満たす場合，ハッシュ実行の処理の際に，副問合せの結果を基にハッシュテーブルを作成するときに，その副問合せの結果の最大値と最小値を求めます。そして，副問合せの外側の問合せに指定された表を検索するときにレンジインデクスを使用して，先に求めた副問合せの結果の最大値と最小値の範囲外となる当該表（上記の例の表T1）のチャンクまたはセグメントをスキップします。

ハッシュテーブルはハッシュテーブル領域に作成されます。ハッシュテーブル領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。なお，adb_sql_exe_hashtbl_area_sizeオペランドに0を指定した場合，ハッシュ実行は適用されません。

ハッシュフィルタは，ハッシュフィルタ領域に作成されます。ハッシュフィルタ領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドで指定します。なお，adb_sql_exe_hashflt_area_sizeオペランドに0を指定した場合，ハッシュ実行の際にハッシュフィルタは適用されません。

■ハッシュテーブル領域が不足した場合の処理の流れ

ハッシュテーブルの作成中に，ハッシュテーブル領域が不足した場合の処理の流れを説明します。

なお，説明文中の表T1，T2は，「図5‒11　ハッシュ実行の処理方式」の表T1，T2と対応しています。

ハッシュテーブルの作成中にハッシュテーブル領域が不足した場合，表T2のデータを複数の作業表に分割して格納します。また，表T1のデータも，表T2のデータと同様に複数の作業表に分割して格納します。

メモ

上記の例では，表T2の作業表が3つ，表T1の作業表が3つ作成されていますが，SQL文の指定内容などによっては作成される作業表の個数が変わります。

表T2の作業表（作業表T2-1）からハッシュテーブルを作成し，そのハッシュテーブルと表T1の作業表（作業表T1-1）の突き合わせ処理を実行します。

ハッシュテーブルと作業表T1-1の突き合わせ処理の完了後，作業表T2-2からハッシュテーブルを作成し，そのハッシュテーブルと作業表T1-2の突き合わせ処理を実行します。

ハッシュテーブルと作業表T1-2の突き合わせ処理の完了後，作業表T2-3からハッシュテーブルを作成し，そのハッシュテーブルと作業表T1-3の突き合わせ処理を実行します。

上記の2.の処理中にハッシュテーブル領域が不足した場合

上記の2.の処理中にハッシュテーブル領域が不足した場合，ハッシュテーブルに格納できなかったデータを別の作業表に格納します。この場合，表T1の作業表とハッシュテーブルの突き合わせ処理のほかに，表T1の作業表と新たに作成された作業表（作業表T2-4）との突き合わせ処理も発生します。

メモ

上記の2.の処理中にハッシュテーブル領域が不足して作業表（作業表T2-4）が新たに作成された場合，サーバメッセージログファイルにKFAA51130-Wメッセージが出力されます。

■ハッシュテーブル領域が不足した場合の対処方法

ハッシュテーブル領域が不足した場合，作業表を作成する時間や，突き合わせ処理に掛かる時間によって，SQL文の処理時間が長くなることがあります。ハッシュテーブル領域の不足を解消するには，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定値（ハッシュテーブル領域サイズの指定値）を大きくしてください。

■ハッシュフィルタ領域が不足した場合の対処方法

サーバ定義またはクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドに指定したハッシュフィルタ領域サイズが小さい場合，ハッシュ検索ごとに割り当てられるハッシュフィルタ領域が不足することがあります。その結果，ハッシュフィルタのサイズが不足したハッシュ検索がある場合，そのハッシュ検索にハッシュフィルタは適用されません。すべてのハッシュ検索に対してハッシュフィルタを適用したい場合は，adb_sql_exe_hashflt_area_sizeオペランドの指定値を大きくしてください。指定値の見積もり式については，「5.5.2　ハッシュジョインとは」の「(6)　ハッシュフィルタが適用される条件」を参照してください。

5.6.2　外への参照列を含まない副問合せの各処理方式の特徴

外への参照列を含まない副問合せの，各処理方式の特徴を次の表に示します。

表5‒6　外への参照列を含まない副問合せの各処理方式

項番

処理方式

長所

短所

1

作業表実行

作業表を必要とするすべての副問合せの条件に対して適用できます。

副問合せの外側の問合せの件数が多い場合は，処理性能が低下します。

2

行値実行

副問合せの外側の問合せに対して，B-treeインデクスまたはテキストインデクスを使用できます。したがって，副問合せの外側の問合せの件数が多い場合，B-treeインデクスまたはテキストインデクスを使用して検索範囲を絞り込めるときは高速に検索できます。

副問合せの外側の問合せの件数が多く，B-treeインデクスまたはテキストインデクスを使用して副問合せを含む述語を絞り込めない場合は，処理性能が低下します。

3

作業表行値実行

副問合せの外側の問合せに対して，B-treeインデクスまたはテキストインデクスを使用できます。したがって，副問合せのヒット件数が少なく，かつ副問合せの外側の問合せの件数が多い場合に，B-treeインデクスまたはテキストインデクスを使用して検索範囲を絞り込めるときは高速に検索できます。

副問合せの結果の行数分，副問合せの外側の問合せに対して，B-treeインデクスまたはテキストインデクスを使用して検索するため，副問合せのヒット件数が多い場合は処理性能が低下します。

4

ハッシュ実行

処理を実行するために必要なすべてのデータがハッシュテーブル領域に格納できる場合は，高速に検索できます。

ハッシュテーブルに格納するデータが多い場合は，使用するハッシュテーブル領域サイズが大きくなります。ハッシュテーブル領域が不足した場合は，いったん作業表にすべてのデータを退避するため，処理性能が低下します。

5.6.3　外への参照列を含む副問合せの処理方式とは

外への参照列を含む副問合せの処理方式には，次の3種類があります。

ネストループ作業表実行

ネストループ行値実行

ハッシュ実行

ネストループ行値実行の場合，副問合せの実行回数を減らすために，副問合せの結果を格納するキャッシュを作成することがあります。

各処理方式について説明します。

(1)　ネストループ作業表実行

次に示す場合，ネストループ作業表実行が適用されて副問合せの処理が実行されることがあります。

限定述語を指定した場合

IN述語中に表副問合せを指定した場合

ネストループ作業表実行の適用例を次に示します。

■実行するSELECT文

SELECT "T1"."C1" FROM "T1"
    WHERE "T1"."C1"=ANY(SELECT "T2"."C1" FROM "T2"
                            WHERE "T2"."C2"="T1"."C2")

図5‒12　ネストループ作業表実行の処理方式

［説明］

副問合せの外側の問合せを実行します。

この例の場合，表T1を検索します。

副問合せの外側の問合せを1行取り出すごとに，外への参照列の値を使用して副問合せを実行します。

この例の場合，表T1の検索結果1行ごとに，外への参照列（"T1"."C2"）の値を条件値に使用して表T2を検索します。

実行した副問合せの結果を基に作業表を作成します。

この例の場合，表T2を検索して"T2"."C1"の値を作業表に格納します。

作成した作業表を使用して，副問合せの外側の副問合せを含む条件を評価します。

この例の場合，表T1の検索結果1行ごとに，対応する作業表の"T2"."C1"の値と突き合わせて副問合せを含む条件を評価します。

(2)　ネストループ行値実行

次に示す場合，ネストループ行値実行が適用されて副問合せの処理が実行されることがあります。

スカラ副問合せを指定した場合

EXISTS述語を指定した場合

ネストループ行値実行の適用例を次に示します。

■実行するSELECT文

SELECT "T1"."C1" FROM "T1"
    WHERE "T1"."C1"=(SELECT MAX("T2"."C1") FROM "T2"
                         WHERE "T2"."C2"="T1"."C2")

図5‒13　ネストループ行値実行の処理方式

［説明］

副問合せの外側の問合せを実行します。

この例の場合，表T1を検索します。

副問合せの外側の問合せを1行取り出すごとに，外への参照列の値を使用して副問合せを実行します。

この例の場合，表T1の検索結果1行ごとに外への参照列（"T1"."C2"）の値を使用して，副問合せの結果MAX("T2"."C1")を求めます。

実行した副問合せの結果を求めます（作業表は作成しません）。副問合せの結果を使用して，副問合せの外側の副問合せを含む条件を評価します。

この例の場合，表T1の検索結果1行ごとに，対応するMAX("T2"."C1")の値を使用して条件を評価します。

(3)　ハッシュ実行

ハッシュテーブルを使用した副問合せの処理方式をハッシュ実行といいます。次の場合に，ハッシュ実行が適用されることがあります。

EXISTS述語を指定した場合

スカラ副問合せを指定した場合

副問合せの処理方式にハッシュ実行が適用された場合，最初に，外への参照列を含む条件を除外して副問合せを実行し，その結果からハッシュテーブルを作成します。次に，副問合せの外側の問合せを実行し，外への参照列の値からハッシュ値を生成します。最後に，ハッシュ値とハッシュテーブルの突き合わせ処理を行います。

また，ハッシュテーブルを作成する際，同時にハッシュフィルタを作成します。ハッシュ値とハッシュテーブルの突き合わせ処理をする前に，ハッシュフィルタを使用してハッシュ値のフィルタリングを行います。これによって，ハッシュ値とハッシュテーブルの突き合わせ回数を削減することができます。

ハッシュ実行の適用例を次に示します。

■実行するSELECT文

SELECT "T1"."C1" FROM "T1"
   WHERE "T1"."C3"<(SELECT "T2"."C3" FROM "T2"
                        WHERE "T2"."C1"='A' AND "T2"."C2"="T1"."C2")

図5‒14　ハッシュ実行の処理方式

［説明］

外への参照列を含む条件（上記のSQL文の例の下線部分）を除外して副問合せを実行し，その結果を基にハッシュテーブルとハッシュフィルタを作成します。

副問合せの外側の問合せを実行し，外への参照列（"T1"."C2"）の値からハッシュ値を生成します。そのハッシュ値をハッシュフィルタでチェックします。上記の例の場合，表T1を検索し，外への参照列（"T1"."C2"）からハッシュ値を生成し，ハッシュフィルタでそのハッシュ値をチェックします。

ハッシュフィルタを通過したハッシュ値と，ハッシュテーブルの突き合わせ処理を行います。

なお，次の2つの条件を満たす場合，ハッシュ実行の処理の際にレンジインデクスが使用されることがあります。

副問合せの外側の問合せに指定された表（上記の例の表T1）に対して，外への参照列（上記の例の列T1.C2）にレンジインデクスが定義されている

レンジインデクスが使用される条件を満たしている

レンジインデクスが使用される条件については，「5.3.1　SQL文の実行時にレンジインデクスが使用される条件」を参照してください。

上記の2つの条件を満たす場合，ハッシュ実行の処理の際に，外への参照列を含む条件を除外して副問合せを実行した結果からハッシュテーブルを作成するときに，外への参照列と比較する列の最大値と最小値を求めます。そして，副問合せの外側の問合せに指定された表を検索するときにレンジインデクスを使用して，先に求めた外への参照列と比較する列の最大値と最小値の範囲外となる当該表（上記の例の表T1）のチャンクまたはセグメントをスキップします。

ハッシュテーブルはハッシュテーブル領域に作成されます。ハッシュテーブル領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。なお，adb_sql_exe_hashtbl_area_sizeオペランドに0を指定した場合，ハッシュ実行は適用されません。

ハッシュフィルタは，ハッシュフィルタ領域に作成されます。ハッシュフィルタ領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドで指定します。なお，adb_sql_exe_hashflt_area_sizeオペランドに0を指定した場合，ハッシュ実行の際にハッシュフィルタは適用されません。

■ハッシュテーブル領域が不足した場合の処理の流れ

ハッシュテーブルの作成中に，ハッシュテーブル領域が不足した場合の処理の流れを説明します。

なお，説明文中の表T1，T2は，「図5‒14　ハッシュ実行の処理方式」の表T1，T2と対応しています。

ハッシュテーブルの作成中にハッシュテーブル領域が不足した場合，表T2のデータを複数の作業表に分割して格納します。また，表T1のデータも，表T2のデータと同様に複数の作業表に分割して格納します。

メモ

上記の例では，表T2の作業表が3つ，表T1の作業表が3つ作成されていますが，SQL文の指定内容などによっては作成される作業表の個数が変わります。

表T2の作業表（作業表T2-1）からハッシュテーブルを作成し，そのハッシュテーブルと表T1の作業表（作業表T1-1）の突き合わせ処理を実行します。

ハッシュテーブルと作業表T1-1の突き合わせ処理の完了後，作業表T2-2からハッシュテーブルを作成し，そのハッシュテーブルと作業表T1-2の突き合わせ処理を実行します。

ハッシュテーブルと作業表T1-2の突き合わせ処理の完了後，作業表T2-3からハッシュテーブルを作成し，そのハッシュテーブルと作業表T1-3の突き合わせ処理を実行します。

上記の2.の処理中にハッシュテーブル領域が不足した場合

上記の2.の処理中にハッシュテーブル領域が不足した場合，ハッシュテーブルに格納できなかったデータを別の作業表に格納します。この場合，表T1の作業表とハッシュテーブルの突き合わせ処理のほかに，表T1の作業表と新たに作成された作業表（作業表T2-4）との突き合わせ処理も発生します。

メモ

上記の2.の処理中にハッシュテーブル領域が不足して作業表（作業表T2-4）が新たに作成された場合，サーバメッセージログファイルにKFAA51130-Wメッセージが出力されます。

■ハッシュテーブル領域が不足した場合の対処方法

ハッシュテーブル領域が不足した場合，作業表を作成する時間や，突き合わせ処理に掛かる時間によって，SQL文の処理時間が長くなることがあります。ハッシュテーブル領域の不足を解消するには，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定値（ハッシュテーブル領域サイズの指定値）を大きくしてください。

■ハッシュフィルタ領域が不足した場合の対処方法

サーバ定義またはクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドに指定したハッシュフィルタ領域サイズが小さい場合，ハッシュ検索ごとに割り当てられるハッシュフィルタ領域が不足することがあります。その結果，ハッシュフィルタのサイズが不足したハッシュ検索がある場合，そのハッシュ検索にハッシュフィルタは適用されません。すべてのハッシュ検索に対してハッシュフィルタを適用したい場合は，adb_sql_exe_hashflt_area_sizeオペランドの指定値を大きくしてください。指定値の見積もり式については，「5.5.2　ハッシュジョインとは」の「(6)　ハッシュフィルタが適用される条件」を参照してください。

5.6.4　外への参照列を含む副問合せの各処理方式の特徴

外への参照列を含む副問合せの，各処理方式の特徴を次の表に示します。

表5‒7　外への参照列を含む副問合せの各処理方式の特徴

項番

処理方式

長所

短所

1

ネストループ作業表実行

副問合せの探索条件のうち，外への参照列を含む条件に対して，B-treeインデクスまたはテキストインデクスを使用できます。したがって，副問合せの探索条件が，B-treeインデクスまたはテキストインデクスを使用して検索範囲を絞り込める場合は，高速に検索できます。

副問合せの外側の問合せのヒット件数が多い場合は，処理性能が低下します。

2

ネストループ行値実行

3

ハッシュ実行

処理を実行するために必要なすべてのデータがハッシュテーブル領域に格納できる場合は，高速に検索できます。

ハッシュテーブルに格納するデータが多い場合は，使用するハッシュテーブル領域サイズが大きくなります。ハッシュテーブル領域が不足した場合は，いったん作業表にすべてのデータを退避するため，処理性能が低下します。

5.7　グループ化の処理方式

グループ化の処理方式には次の2種類があります。

ハッシュグループ化

ソートグループ化

GROUP BY句またはDISTINCT集合関数を指定した場合，グループ化の処理が実行されます。ここでは，各処理方式について説明します。

グループ化の処理方式は，HADBが自動的に決定します。SQL文を実行した結果，どの処理方式が適用されたかを，アクセスパスで確認することができます。アクセスパスについては，次に示す個所を参照してください。

アクセスパスの確認方法

「6.1.2　アクセスパスを確認するには」を参照してください。

アクセスパスに表示される内容

「6.1.4　ツリー表示に出力される情報」の「(14)　グループ化の処理方式」を参照してください。

メモ

グループ化方式指定を指定することによって，グローバルハッシュグループ化の適用を抑止することができます。グループ化方式指定については，マニュアルHADB　SQLリファレンスのGROUP BY句の指定形式および規則を参照してください。

5.7.1　ハッシュグループ化とは

ハッシュグループ化とは，グループ化列の値をハッシングしてハッシュテーブルを作成しながらグループ化する処理方式のことです。ハッシュグループ化の処理方式を次の図に示します。

図5‒15　ハッシュグループ化の処理方式

ハッシュグループ化には次の2種類があります。

(1)　ローカルハッシュグループ化

最初にSQL処理リアルスレッドごとにハッシュテーブルを作成し，グループ化します。次に，各SQL処理リアルスレッドでグループ化した結果を集めて，全体をグループ化します。この処理方式をローカルハッシュグループ化といいます。

ハッシュテーブルは，SQL処理リアルスレッドごとにハッシュグループ化領域に作成されます。ハッシュテーブル1つ当たりのハッシュグループ化領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドで指定します。

(2)　グローバルハッシュグループ化

SQL処理リアルスレッド間で共有するハッシュテーブルを作成し，グループ化します。この処理方式をグローバルハッシュグループ化といいます。

ハッシュテーブルは，ハッシュテーブル領域に作成されます。ハッシュテーブル領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。なお，adb_sql_exe_hashtbl_area_sizeオペランドに0を指定した場合，グローバルハッシュグループ化は適用されません。

DISTINCT集合関数を含むSQL文を実行した場合に，検索結果の重複を排除するためにグローバルハッシュグループ化が適用されることがあります。

■ハッシュテーブル領域が不足した場合の対処方法

ハッシュテーブル領域が不足した場合，ハッシュテーブルに格納されるデータが複数の作業表に分割されて格納されます。そのため，SQL文の処理時間が長くなることがあります。ハッシュテーブル領域の不足を解消するには，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定値（ハッシュテーブル領域サイズの指定値）を大きくしてください。

ハッシュテーブル領域が不足して作業表が作成された場合，サーバメッセージログファイルにKFAA51130-Wメッセージが出力されます。

■ハッシュテーブル領域が不足した場合の処理の流れ

ハッシュテーブルの作成中に，ハッシュテーブル領域が不足した場合の処理の流れを説明します。

ハッシュテーブルの作成中にハッシュテーブル領域が不足した場合，複数の作業表が作成されます。ハッシュテーブルに格納されるデータが，各作業表に分割されて格納されます。

作業表1に対するハッシュテーブルを作成しながらグループ化処理が行われます。

上記のグループ化処理が完了したあとに，作業表2に対するハッシュテーブルを作成しながらグループ化処理が行われます。そのあとに，作業表3についても同様の処理が行われます。

なお，作業表に対するハッシュテーブルが作成される際に，ハッシュテーブル領域不足が発生した場合，新たな作業表が作成されます。ハッシュテーブル領域に格納できなかったデータが，その作業表に格納されます。この場合，新たに作成された作業表を使用したグループ化処理が追加で発生します。

5.7.2　ソートグループ化とは

ソートグループ化とは，ソートしたあとにグループ化する処理方式のことです。

最初にSQL処理リアルスレッドごとに作業表を作成します。次に，作業表のデータをグループ化列の値でソートし，最後に各SQL処理リアルスレッドのソートされたデータを集めて，グループ化します。

DISTINCT集合関数を含むSQL文を実行した場合に，検索結果の重複を排除するためにソートグループ化が適用されることがあります。

ソートグループ化の処理方式を次の図に示します。

図5‒16　ソートグループ化の処理方式

5.7.3　各グループ化の特徴

各グループ化の特徴を次の表に示します。

表5‒8　各グループ化の特徴

項番

グループ化の種類

長所

短所

1

ハッシュグループ化

ローカルハッシュグループ化

グループの数が少ない場合など，グループ化に必要なデータがSQL処理リアルスレッドごとのハッシュグループ化領域に収まるときは，高速にグループ化されます。

グループの数が多い場合は，処理性能が低下します。

2

グローバルハッシュグループ化

グループ化に必要なデータがハッシュテーブル領域に収まる場合に，高速にグループ化されます。

グループ化に必要なデータ量が多く，ハッシュテーブル領域が不足した場合は，いったんデータを作業表に格納するため，処理性能が低下します。

3

ソートグループ化

ハッシュグループ化領域，およびハッシュテーブル領域を確保しない場合でも，グループ化できます。

検索結果の件数が多い場合は，作業表に格納されるデータ量が多くなります。作業表に格納したデータをソートしたあとにグループ化するため，処理性能が低下します。

5.8　集合演算の処理方式

集合演算（UNION ALLを除く）を指定した場合，次のどちらかの処理方式で集合演算が実行されます。

ハッシュ実行

作業表実行

上記のうち，どちらの処理方式を適用するかはHADBが自動的に決定します。適用される処理方式については，アクセスパスで確認することができます。アクセスパスについては，次に示す個所を参照してください。

アクセスパスの確認方法

「6.1.2　アクセスパスを確認するには」を参照してください。

アクセスパスに表示される内容

「6.1.4　ツリー表示に出力される情報」の「(13)　重複排除の処理方式」を参照してください。

メモ

集合演算方式指定を指定することによって，ハッシュ実行の適用を抑止することができます。集合演算方式指定については，マニュアルHADB　SQLリファレンスの問合せ式の指定形式および規則を参照してください。

UNION ALLを指定した場合，集合演算項に指定した問合せ式本体のデータがそのまま返却されます。

5.8.1　ハッシュ実行

集合演算の処理方式にハッシュ実行が適用された場合，検索結果をハッシングしてハッシュテーブルを作成しながら重複排除を行います。

ハッシュ実行の適用例を次に示します。

■実行するSELECT文

SELECT "T1"."C1" FROM "T1"
UNION
SELECT "T2"."C1" FROM "T2"

図5‒17　ハッシュ実行の処理方式

［説明］

表T1を検索して，表T1のC1列の値を取り出します。

表T2を検索して，表T2のC1列の値を取り出します。

1.と2.の結果をハッシングしてハッシュテーブルを作成しながら重複排除を行います。

ハッシュテーブルはハッシュテーブル領域に作成されます。ハッシュテーブル領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。なお，adb_sql_exe_hashtbl_area_sizeオペランドに0を指定した場合，ハッシュ実行は適用されません。

■ハッシュテーブル領域が不足した場合の対処方法

ハッシュテーブル領域が不足した場合，ハッシュテーブルに格納されるデータが複数の作業表に分割されて格納されます。そのため，SQL文の処理時間が長くなることがあります。ハッシュテーブル領域の不足を解消するには，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定値（ハッシュテーブル領域サイズの指定値）を大きくしてください。

ハッシュテーブル領域が不足して作業表が作成された場合，サーバメッセージログファイルにKFAA51130-Wメッセージが出力されます。

■ハッシュテーブル領域が不足した場合の処理の流れ

ハッシュテーブルの作成中に，ハッシュテーブル領域が不足した場合の処理の流れを説明します。

ハッシュテーブルの作成中にハッシュテーブル領域が不足した場合，複数の作業表を作成します。ハッシュテーブルに格納するデータを，各作業表に分割して格納します。

作業表ごとにハッシュテーブルを作成します。

作業表に対するハッシュテーブルを作成する際に，ハッシュテーブル領域不足が発生した場合，新たな作業表をさらに作成します。ハッシュテーブル領域に格納できなかったデータをその作業表に格納して重複排除を行います。

5.8.2　作業表実行

集合演算の処理方式に作業表実行が適用された場合，問合せ指定ごとに作業表を作成してデータをソートします。集合演算にALL指定がない場合は，作業表内のデータの重複排除を行います。そのあと，各作業表のデータを突き合わせて集合演算を評価します。集合演算にALL指定がない場合は，集合演算の評価結果の重複排除を行います。

作業表実行の適用例を次に示します。

■実行するSELECT文

SELECT "T1"."C1" FROM "T1"
UNION
SELECT "T2"."C1" FROM "T2"

図5‒18　作業表実行の処理方式

［説明］

問合せ指定「SELECT "T1"."C1" FROM "T1"」の結果の値を格納する作業表1を作成します（表T1を検索して，表T1のC1列の値を作業表1に格納します）。

1.で作成した作業表1のデータの重複排除とソート処理を行います。

問合せ指定「SELECT "T2"."C1" FROM "T2"」の結果の値を格納する作業表2を作成します（表T2を検索して，表T2のC1列の値を作業表2に格納します）。

3.で作成した作業表2のデータの重複排除とソート処理を行います。

各作業表から1行ずつデータを取り出し，値の突き合せと重複排除を行います。

5.8.3　集合演算の各処理方式の特徴

集合演算の各処理方式の特徴を次の表に示します。

表5‒9　集合演算の各処理方式の特徴

集合演算の処理方式

長所

短所

ハッシュ実行

集合演算に必要なデータがハッシュテーブル領域に格納できる場合は，高速に結果を求めることができます。

集合演算に必要なデータ量が多く，ハッシュテーブル領域が不足した場合は，いったんデータを作業表に格納するため，処理性能が低下します。

作業表実行

すべての集合演算に対して適用できます。

検索結果の件数が多い場合，作業表に格納するデータ量が多くなります。このとき，作業表に格納したデータをソートしたあとに重複排除をするため，処理性能が低下します。

5.9　SELECT DISTINCTの処理方式

SELECT文にDISTINCTを指定した場合，次のどちらかの処理方式で重複排除処理が実行されます。

ハッシュ実行

作業表実行

上記のうち，どちらの処理方式を適用するかはHADBが自動的に決定します。適用される処理方式については，アクセスパスで確認することができます。アクセスパスについては，次に示す個所を参照してください。

アクセスパスの確認方法

「6.1.2　アクセスパスを確認するには」を参照してください。

アクセスパスに表示される内容

「6.1.4　ツリー表示に出力される情報」の「(13)　重複排除の処理方式」を参照してください。

メモ

SELECT重複排除方式指定を指定することによって，ハッシュ実行の適用を抑止することができます。SELECT重複排除方式指定については，マニュアルHADB　SQLリファレンスの問合せ指定の指定形式および規則を参照してください。

HADBがSELECT DISTINCTの重複排除処理を不要と判断した場合，重複排除処理は行われません。

SELECT DISTINCTの処理方式は，内部導出表の展開によって書き換えられた問合せ式と，探索条件の等価変換によって書き換えられた探索条件を基にして決定されます。内部導出表の展開については，「5.13　内部導出表の展開」を参照してください。探索条件の等価変換については，「5.11　探索条件の等価変換」を参照してください。

スカラ演算の中に定数だけを指定している場合，そのスカラ演算は定数として扱われることがあります。定数と等価なスカラ演算については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。

5.9.1　ハッシュ実行

SELECT DISTINCTの処理方式にハッシュ実行が適用された場合，検索結果をハッシングしてハッシュテーブルを作成しながら重複排除を行います。

ハッシュ実行の適用例を次に示します。

■実行するSELECT文

SELECT DISTINCT "C1" FROM "T1"

図5‒19　ハッシュ実行の処理方式

［説明］

表T1を検索して，表T1のC1列の値を取り出します。

1.の結果をハッシングしてハッシュテーブルを作成しながら重複排除を行います。

ハッシュテーブルはハッシュテーブル領域に作成されます。ハッシュテーブル領域サイズは，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。なお，adb_sql_exe_hashtbl_area_sizeオペランドに0を指定した場合，ハッシュ実行は適用されません。

■ハッシュテーブル領域が不足した場合の対処方法

ハッシュテーブル領域が不足した場合，ハッシュテーブルに格納されるデータが複数の作業表に分割されて格納されます。そのため，SQL文の処理時間が長くなることがあります。ハッシュテーブル領域の不足を解消するには，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドの指定値（ハッシュテーブル領域サイズの指定値）を大きくしてください。

ハッシュテーブル領域が不足して作業表が作成された場合，サーバメッセージログファイルにKFAA51130-Wメッセージが出力されます。

■ハッシュテーブル領域が不足した場合の処理の流れ

ハッシュテーブルの作成中に，ハッシュテーブル領域が不足した場合の処理の流れを説明します。

ハッシュテーブルの作成中にハッシュテーブル領域が不足した場合，複数の作業表を作成します。ハッシュテーブルに格納するデータを，各作業表に分割して格納します。

作業表ごとにハッシュテーブルを作成します。

作業表に対するハッシュテーブルを作成する際に，ハッシュテーブル領域不足が発生した場合，新たな作業表をさらに作成します。ハッシュテーブル領域に格納できなかったデータをその作業表に格納して重複排除を行います。

5.9.2　作業表実行

SELECT DISTINCTの処理方式に作業表実行が適用された場合，検索結果を格納した作業表を作成します。そのあと，作業表内のデータをソートし，重複排除を行います。

作業表実行の適用例を次に示します。

■実行するSELECT文

SELECT DISTINCT "C1" FROM "T1"

図5‒20　作業表実行の処理方式

［説明］

表T1を検索して，表T1のC1列の値を作業表に格納します。

1.で作成した作業表のデータのソート処理と重複排除を行います。

5.9.3　SELECT DISTINCTの各処理方式の特徴

SELECT DISTINCTの各処理方式の特徴を次の表に示します。

表5‒10　SELECT DISTINCTの各処理方式の特徴

SELECT DISTINCTの処理方式

長所

短所

ハッシュ実行

SELECT DISTINCTの実行に必要なデータがハッシュテーブル領域に格納できる場合は，高速に結果を求めることができます。

SELECT DISTINCTの実行に必要なデータ量が多く，ハッシュテーブル領域が不足した場合は，いったんデータを作業表に格納するため，処理性能が低下します。

作業表実行

すべてのSELECT DISTINCTに対して適用できます。

検索結果の件数が多い場合，作業表に格納するデータ量が多くなります。このとき，作業表に格納したデータをソートしたあとに重複排除をするため，処理性能が低下します。

5.10　作業表が作成されるSQLを実行する際の考慮点

SQL文の実行時にデータのソート処理や重複排除処理などが実行される場合，作業表用DBエリアに作業表が作成されることがあります。作業表には，ソートまたは重複排除したデータなどが一時的に格納されます。このため，大量のデータをソートまたは重複排除すると，作業表を作成する処理による負荷によって，十分な性能が得られないことがあります。

重要

性能低下を抑えるためには，作業表用DBエリアの容量見積もりを正しく行う必要があります。作業表が作成されるSQLが当初の見積もり時より多く実行される場合，AP開発者はHADBのシステム設計者またはシステム管理者に，作業表用DBエリアの容量を見積もり直すよう依頼をしてください。

5.10.1　作業表の種類

作業表には，グローバル作業表とローカル作業表があります。

(1)　グローバル作業表

グローバル作業表は，1つのSQLを複数のリアルスレッドで処理するときに，作業表のデータを複数のリアルスレッド間で共有するための作業表です。表を結合するための作業表や副問合せのための作業表などに利用されます。

また，グローバル作業表が使用するグローバルバッファのページ数を，サーバ定義のadb_dbbuff_wrktbl_glb_blk_numオペランドで指定します。adb_dbbuff_wrktbl_glb_blk_numオペランドについては，マニュアルHADB　システム構築・運用ガイドのサーバ定義の設計のサーバ定義のオペランドの内容の性能に関するオペランド（set形式）を参照してください。

(2)　ローカル作業表

ローカル作業表は，SQLを処理するリアルスレッドごとに作成される作業表です。ORDER BY句を指定した場合に作成される作業表や，グループ化の処理方式としてローカルハッシュグループ化が選択されたときのグループ分けの作業表などに利用されます。

また，ローカル作業表が使用するローカル作業表用バッファのページ数は，サーバ定義のadb_dbbuff_wrktbl_clt_blk_numオペランド，クライアント定義のadb_dbbuff_wrktbl_clt_blk_numオペランド，またはエクスポートオプションadb_export_wrktbl_blk_num（adbexportコマンド実行時）で指定します。なお，対象のオペランドおよびオプションについては，次を参照してください。

サーバ定義のadb_dbbuff_wrktbl_clt_blk_numオペランドの場合：マニュアルHADB　システム構築・運用ガイドのサーバ定義の設計のサーバ定義のオペランドの内容の性能に関するオペランド（set形式）

クライアント定義のadb_dbbuff_wrktbl_clt_blk_numオペランドの場合：「2.2.3　性能に関するオペランド」にある，adb_dbbuff_wrktbl_clt_blk_numオペランドの説明

エクスポートオプションadb_export_wrktbl_blk_numの場合：マニュアルHADB　コマンドリファレンスのadbexport（データのエクスポート）のadbexportコマンドの指定形式

5.10.2　SQLを実行した場合に作成される作業表について

次の表に示すSQLを実行した場合に作業表が作成されます。

重要

作業表の行長が最大行長を超えた場合，SQL文がエラーになります。作業表の最大行長については，マニュアルHADB　システム構築・運用ガイドのデータベースに関する最大値と最小値を参照してください。作業表の行長の求め方については，マニュアルHADB　システム構築・運用ガイドの作業表を格納するために必要な基本行用ページ数の求め方の変数ROWSZを参照してください。

表5‒11　作業表が作成されるSQL

項番

作業表が作成されるSQL

作業表の用途

作業表の構成列

作業表の種類

1

ORDER BY句を指定した場合

集合演算の結果をソートキーとする場合

検索結果のソート処理に使われます。

問合せ式から導出される結果の列の値を格納するための列

ローカル作業表

問合せ指定の結果をソートキーとする場合

ORDER BY句のソートキーに指定した値式の結果を格納するための列

実表の検索結果行に対する行IDを格納するための列（FROM句に実表を指定した場合）※1

検索対象列の値を格納するための列（表の検索方式にキースキャンが適用される実表を，FROM句に指定した場合）

カラムストア表の検索対象列※11の値を格納するための列（FROM句にカラムストア表を指定した場合）

導出表の問合せ式本体から導出された結果の列の値を格納するための列（FROM句に導出表を指定した場合）※6

ビュー定義の問合せ式から導出される結果の列の値を格納するための列（FROM句にビュー表を指定した場合）※6

WITH句の問合せ式本体から導出される結果の列の値を格納するための列（FROM句に問合せ名を指定した場合）※6

表関数導出表に指定したシステム定義関数によって導出される結果の列の値を格納するための列（FROM句に表関数導出表を指定した場合）

集まり導出表の結果の列の値を格納するための列（FROM句に集まり導出表を指定した場合）

スカラ関数RANDOMROWの結果の値を格納するための列（選択式にスカラ関数RANDOMROWを指定した場合）

2

GROUP BY句を指定した場合

グループ化の処理方式がグローバルハッシュグループ化の場合※2

グループ分けの結果を保持するために使われます。なお，この作業表は，ハッシュテーブル領域が不足した場合に使われます。

ハッシュテーブル領域は，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

GROUP BY句のグループ化列に指定した値式の結果の値を格納するための列

集合関数の結果を格納するための列

HADBサーバがハッシュ処理で使用する情報を格納するための列※9※10

ローカル作業表※7

グローバル作業表※8

グループ化の処理方式がローカルハッシュグループ化の場合※2

グループ分けのソート処理に使います。なお，この作業表は，ハッシュグループ化領域が不足した場合に使われます。ハッシュグループ化領域は，サーバ定義またはクライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドで指定します。

GROUP BY句のグループ化列に指定した値式の結果の値を格納するための列

集合関数の引数に指定した列を格納するための列

集合関数の結果を格納するための列

ローカル作業表

グループ化の処理方式がソートグループ化の場合※2

グループ分けのソート処理に使われます。

3

SELECT DISTINCTを指定した場合

SELECT DISTINCTの処理方式がハッシュ実行の場合※12

検索結果を保持するための処理に使われます。なお，この作業表は，ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

選択式の結果の列の値を格納するための列

HADBがハッシュ処理で使用する情報を格納するための列※9※10

ローカル作業表※7

グローバル作業表※8

SELECT DISTINCTの処理方式が作業表実行の場合※12

検索結果をソート，重複排除するための処理に使われます。

選択式の結果の列の値を格納するための列

ローカル作業表

4

次のどれかの関数を指定した場合

DISTINCT集合関数

逆分布関数

ORDER BY句を指定したARRAY_AGG集合関数

LISTAGG集合関数

グループ化の処理方式がグローバルハッシュグループ化の場合※2

重複排除された集合関数の入力値を保持するために使われます。なお，この作業表は，ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

GROUP BY句のグループ化列に指定した値式の結果の値を格納するための列

ALL集合関数の引数に指定した列の値を格納するための列

DISTINCT集合関数の引数に指定した値式の結果を格納するための列

逆分布関数のWITHINグループ指定のソートキーに指定した値式の結果を格納するための列

逆分布関数MEDIANの引数に指定した値式の結果を格納するための列

LISTAGG集合関数の引数に指定した値式の結果を格納するための列

LISTAGG集合関数のWITHINグループ指定のソートキーに指定した値式の結果を格納するための列

ARRAY_AGG集合関数の引数に指定した値式の結果を格納するための列（ARRAY_AGG集合関数にORDER BY句を指定した場合）

ARRAY_AGG集合関数のORDER BY句のソートキーに指定した値式の結果を格納するための列

HADBサーバがハッシュ処理で使用する情報を格納するための列※9※10

ローカル作業表※7

グローバル作業表※8

グループ化の処理方式がグローバルハッシュグループ化以外の場合※2

集合関数の入力値を重複排除するための処理，または集合関数の入力値をソートするための処理に使われます。

5

ウィンドウ関数を指定した場合

ウィンドウ関数の結果を求めるためのソート処理に使われます。

FROM句に指定した表の列の値を格納するための列

選択式に指定したウィンドウ関数の結果の値を格納するための列

ローカル作業表

6

FROM句に複数の表参照を指定した場合

表の結合方式がハッシュジョインの場合※3

表の結合処理で，結合対象となる表参照の結果を保持するために使われます。なお，この作業表は，ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

FROM句に指定した表の列の値を格納するための列

HADBサーバがハッシュ処理で使用する情報を格納するための列※9※10

ローカル作業表※7

グローバル作業表※8

表の結合方式がネストループジョインの場合※3

表の結合処理で，結合対象となる表参照の結果を保持するために使われます。

グローバル作業表

7

導出表を指定した場合

導出表に対応する問合せ式本体の結果を保持するために使われます。

導出表の問合せ式本体から導出される結果の列の値を格納するための列※6

グローバル作業表

8

ビュー表を指定した場合

ビュー表に対応する問合せ式の結果を保持するために使われます。

ビュー定義の問合せ式から導出される結果の列の値を格納するための列※6

グローバル作業表

9

WITH句を指定した場合

問合せ名に対応する問合せ式本体の結果を保持するために使われます。

WITH句中の問合せ式本体から導出される結果の列の値を格納するための列※6

グローバル作業表

10

表関数導出表を指定した場合

表関数導出表を導出するシステム定義関数の結果を保持するために使われます。

システム定義関数の結果の列の値を格納するための列

グローバル作業表

11

結合表を指定した場合

結合表の結果を保持するために使われます。

なお，結合表の結果を求めるための作業表については，項番6のFROM句に複数の表参照を指定した場合を参照してください。

結合表の列の値を格納するための列

グローバル作業表

12

副問合せを指定した場合

副問合せの処理方式がハッシュ実行の場合※4

副問合せの結果を保持するために使われます。なお，この作業表は，ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

副問合せの選択式の結果の列の値を格納するための列

副問合せに含まれる外への参照列の値を格納するための列※5

副問合せに含まれる集合関数の結果を格納するための列

HADBサーバがハッシュ処理で使用する情報を格納するための列※9※10

ローカル作業表※7

グローバル作業表※8

副問合せの処理方式がハッシュ実行以外の場合※4

副問合せの結果を保持するために使われます。

副問合せの選択式の結果の列の値を格納するための列

グローバル作業表

13

集合演算を指定した場合

集合演算の処理方式がハッシュ実行の場合※13

重複排除の結果を保持するために使われます。なお，この作業表は，ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は，サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

問合せ指定に指定した選択式の結果の列の値を格納するための列

HADBがハッシュ処理で使用する情報を格納するための列※9※10

ローカル作業表※7

グローバル作業表※8

集合演算の処理方式が作業表実行の場合※13

検索結果をソート，重複排除するための処理に使われます。

問合せ指定に指定した選択式の結果の列の値を格納するための列

ローカル作業表

14

再帰的問合せの指定がある場合

アンカーメンバの結果，および再帰的メンバの結果を保持するために使われます。

再帰的問合せの結果の列の値を格納するための列

グローバル作業表

注※1

行IDとは，行の格納位置を示す値のことをいいます。行IDのデータ型はCHAR(16)です。

注※2

グループ化の処理方式については，「5.7　グループ化の処理方式」を参照してください。

注※3

表の結合方式については，「5.5　表の結合方式」を参照してください。

注※4

副問合せの処理方式については，「5.6　副問合せの処理方式」を参照してください。

注※5

外への参照列については，マニュアルHADB　SQLリファレンスの副問合せの指定形式および規則を参照してください。

注※6

内部導出表の展開によって実表として扱われることがあります。内部導出表の展開については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。

注※7

ハッシュテーブル領域が不足した場合に，ハッシュテーブル領域に格納するデータを分割して格納する際に使用する作業表です。

注※8

ハッシュテーブル領域に格納するデータを作業表に格納したあと，さらにハッシュテーブル領域が不足した場合に，処理できなかったデータを格納する際に使用する作業表です。

注※9

HADBサーバがハッシュ処理で使用する情報を格納するための列のデータ型はINTEGER型になります。

注※10

ハッシュテーブル領域に格納するデータを作業表に格納したあと，さらにハッシュテーブル領域が不足した場合に，処理できなかったデータを格納する際に使用する作業表で作成される列です。

注※11

定義長が128バイト以上の列は，対象外になります。定義長が128バイト以上の列とは，次の列のことです。

定義長が128バイト以上のCHARACTER型の列

定義長が128バイト以上のVARCHAR型の列

定義長が128バイト以上のBINARY型の列

定義長が128バイト以上のVARBINARY型の列

注※12

SELECT DISTINCTの処理方式については，「5.9　SELECT DISTINCTの処理方式」を参照してください。

注※13

集合演算の処理方式については，「5.8　集合演算の処理方式」を参照してください。

SQLを実行した結果，作業表が作成されたかどうかを，アクセスパスで確認することができます。アクセスパスについては，次に示す個所を参照してください。

アクセスパスの確認方法

「6.1.2　アクセスパスを確認するには」を参照してください。

アクセスパスに表示される内容

「6.1.4　ツリー表示に出力される情報」の「(8)　作業表の作成情報」を参照してください。

5.10.3　作成される作業表の個数

SQL文の実行時に作成される作業表の個数を例を使って説明します。なお，ここで説明する作業表の数は，SQL文から想定される値です。実際にSQL文実行時に作成される作業表の数は，サーバ定義またはクライアント定義の最大SQL処理リアルスレッド数（adb_sql_exe_max_rthd_numオペランド），操作対象のデータ件数などに影響されます。

(1)　例1（ORDER BY句を指定している場合）

SQL文の例

SELECT "C1","C2","C3" FROM "T1" ORDER BY "C1" ASC

［説明］

ORDER BY句のソート処理で使う作業表が1つ作成されます。

(2)　例2（GROUP BY句を指定している場合）

SQL文の例

SELECT "C1","C2" FROM "T1" GROUP BY "C1","C2"

［説明］

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって，作成される作業表の個数が異なります。

グローバルハッシュグループ化が適用される場合

SQLパラレル実行機能が適用されない場合

GROUP BY句の処理に使用する作業表が2つ作成されます。

SQLパラレル実行機能が適用される場合

GROUP BY句の処理に使用する作業表が4つ作成されます。

グローバルハッシュグループ化が適用されない場合

GROUP BY句の処理に使用する作業表が1つ作成されます。

グループ化の処理方式については，「5.7　グループ化の処理方式」を参照してください。

(3)　例3（SELECT DISTINCTを指定している場合）

SQL文の例

SELECT DISTINCT "C1","C2","C3" FROM "T1"

［説明］

適用されるSELECT DISTINCTの処理方式によって，作成される作業表の個数が異なります。

ハッシュ実行が適用される場合

SELECT DISTINCTの処理に使用する作業表が2つ作成されます。

作業表実行が適用される場合

SELECT DISTINCTの処理に使用する作業表が1つ作成されます。

SELECT DISTINCTの処理方式については，「5.9　SELECT DISTINCTの処理方式」を参照してください。

(4)　例4（DISTINCT集合関数を指定している場合）

SQL文の例

SELECT COUNT(DISTINCT "C1") FROM "T1"

［説明］

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって，作成される作業表の個数が異なります。

グローバルハッシュグループ化が適用される場合

集合関数の処理に使用する作業表が2つ作成されます。

グローバルハッシュグループ化が適用されない場合

集合関数の処理に使用する作業表が1つ作成されます。

グループ化の処理方式については，「5.7　グループ化の処理方式」を参照してください。

(5)　例5（ウィンドウ関数（RANK）を指定している場合）

SQL文の例

SELECT "C1",RANK() OVER (PARTITION BY "C2" ORDER BY "C3" ASC) FROM "T1"

［説明］

ウィンドウ関数（RANK）の処理で使う作業表が1つ作成されます。

(6)　例6（GROUP BY句とORDER BY句を指定している場合）

SQL文の例

SELECT "C1","C2" FROM "T1" GROUP BY "C1","C2" ORDER BY "C1" ASC

［説明］

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって，作成される作業表の個数が異なります。

グローバルハッシュグループ化が適用される場合

GROUP BY句の処理に使用する作業表が2つ，ORDER BY句の処理に使用する作業表が1つ，合計3つの作業表が作成されます。

グローバルハッシュグループ化が適用されない場合

GROUP BY句の処理に使用する作業表が1つ作成されます。この例の場合，GROUP BY句とORDER BY句で必要なソート処理が1回で済むため，作成される作業表は1つになります。

グループ化の処理方式については，「5.7　グループ化の処理方式」を参照してください。

(7)　例7（GROUP BY句とORDER BY句を指定している場合）

SQL文の例

SELECT "C1","C2",COUNT(*) "DC1" FROM "T1"
     GROUP BY "C1","C2" ORDER BY "DC1" ASC

［説明］

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって，作成される作業表の個数が異なります。

グローバルハッシュグループ化が適用される場合

GROUP BY句の処理に使用する作業表が2つ，ORDER BY句の処理に使用する作業表が1つ，合計3つの作業表が作成されます。

グローバルハッシュグループ化が適用されない場合

GROUP BY句の処理に使用する作業表が1つ，ORDER BY句の処理に使用する作業表が1つ，合計2つの作業表が作成されます。

グループ化の処理方式については，「5.7　グループ化の処理方式」を参照してください。

(8)　例8（SELECT DISTINCTとORDER BY句を指定している場合）

SQL文の例

SELECT DISTINCT "C1","C2","C3" FROM "T1" ORDER BY "C1" ASC

［説明］

SELECT DISTINCTのソート処理で使う作業表が1つ作成されます。

この例の場合，SELECT DISTINCTとORDER BY句に必要なソート処理が1回で済むため，作成される作業表は1つになります。

(9)　例9（GROUP BY句とDISTINCT集合関数を指定している場合）

SQL文の例

SELECT "C1",COUNT(DISTINCT "C2") FROM "T1" GROUP BY "C1"

［説明］

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって，作成される作業表の個数が異なります。

グローバルハッシュグループ化が適用される場合

GROUP BY句の処理に使用する作業表が2つ，集合関数の処理に使用する作業表が1つ，合計3つの作業表が作成されます。

グローバルハッシュグループ化が適用されない場合

GROUP BY句の処理に使用する作業表が1つ作成されます。この例の場合，GROUP BY句と集合関数で必要なソート処理が1回で済むため，作成される作業表は1つになります。

グループ化の処理方式については，「5.7　グループ化の処理方式」を参照してください。

(10)　例10（表を結合している場合）

SQL文の例

SELECT "T1"."C1","T1"."C2","T2"."C1","T2"."C2" FROM "T1","T2"
    WHERE "T1"."C1"="T2"."C1"

［説明］

結合処理で使用する作業表が3つ作成されます。

(11)　例11（FROM句に複数の表参照を指定している場合）

SQL文の例

SELECT "DT1"."C1","DT2"."C1"
  FROM (SELECT COUNT("T1"."C1") FROM "T1") AS "DT1"("C1"),
       (SELECT COUNT("T2"."C1") FROM "T2") AS "DT2"("C1")
  WHERE "DT1"."C1">"DT2"."C1"

［説明］

表の結合処理で使う作業表が1つ作成されます。

(12)　例12（副問合せを指定している場合）

SQL文の例

SELECT "T1"."C1","T1"."C2","T1"."C3" FROM "T1"
    WHERE "T1"."C1"=(SELECT "T2"."C1" FROM "T2"
                        WHERE "T2"."C2"="T1"."C2")

［説明］

副問合せの処理方式にハッシュ実行が適用されるかどうかによって，作成される作業表の個数が異なります。

ハッシュ実行が適用される場合

外への参照列を含む副問合せの処理で使う作業表が3つ作成されます。

ハッシュ実行が適用されない場合

外への参照列を含む副問合せの処理で使う作業表は作成されません。

副問合せの処理方式については，「5.6　副問合せの処理方式」を参照してください。

(13)　例13（IN 副問合せを指定している場合）

SQL文の例

SELECT "C1","C2","C3" FROM "T1" WHERE "C1" IN (SELECT "C1" FROM "T2")

［説明］

副問合せの処理方式にハッシュ実行が適用されるかどうかによって，作成される作業表の個数が異なります。

ハッシュ実行が適用される場合

IN述語に指定した副問合せの処理で使う作業表が3つ作成されます。

ハッシュ実行が適用されない場合

IN述語に指定した副問合せの処理で使う作業表が1つ作成されます。

副問合せの処理方式については，「5.6　副問合せの処理方式」を参照してください。

(14)　例14（限定述語を指定している場合）

SQL文の例

SELECT "C1","C2","C3" FROM "T1" WHERE "C1"=ANY(SELECT "C1" FROM "T2")

［説明］

副問合せの処理方式にハッシュ実行が適用されるかどうかによって，作成される作業表の個数が異なります。

ハッシュ実行が適用される場合

限定述語に指定した副問合せの処理で使う作業表が3つ作成されます。

ハッシュ実行が適用されない場合

限定述語に指定した副問合せの処理で使う作業表が1つ作成されます。

副問合せの処理方式については，「5.6　副問合せの処理方式」を参照してください。

(15)　例15（EXISTS 述語を指定している場合）

SQL文の例

SELECT "T1"."C1","T1"."C2","T1"."C3" FROM "T1"
    WHERE EXISTS(SELECT * FROM "T2" WHERE "T2"."C2"="T1"."C2")

［説明］

副問合せの処理方式にハッシュ実行が適用されるかどうかによって，作成される作業表の個数が異なります。

ハッシュ実行が適用される場合

EXISTS述語に指定した副問合せの処理で使う作業表が3つ作成されます。

ハッシュ実行が適用されない場合

EXISTS述語に指定した副問合せの処理で使う作業表は作成されません。

副問合せの処理方式については，「5.6　副問合せの処理方式」を参照してください。

(16)　例16（表関数導出表を指定している場合）

SQL文の例

SELECT "C1","C2","C3"
    FROM TABLE(ADB_CSVREAD(MULTISET (SELECT "FNAME" FROM "TFILE"),
                          'COMPRESSION_FORMAT=GZIP;
                           FIELD_NUM=1,2,3;'))
           AS "T1"("C1" INTEGER,"C2" CHAR(10),"C3" DATE)

［説明］

マルチ集合値式に指定した表副問合せの結果を保持するための作業表が1つ作成されます。マルチ集合値式については，マニュアルHADB　SQLリファレンスのマルチ集合値式の指定形式および規則を参照してください。

(17)　例17（ビュー表を指定している場合）

SQL文の例

CREATE VIEW "VT1"("C1","C2")
    AS SELECT "T1"."C1","T2"."C1" FROM "T1","T2"
          WHERE "T1"."C2"<="T2"."C2"
SELECT * FROM "VT1" AS "XT1","VT1" AS "XT2"
    WHERE "XT1"."C1">"XT2"."C1"

［説明］

ビュー表の処理で使う作業表が1つ作成されます。

(18)　例18（WITH句を指定している場合）

SQL文の例

WITH "QT1"("C1","C2") AS (SELECT "T1"."C1","T2"."C1" FROM "T1","T2"
                              WHERE "T1"."C2"<="T2"."C2")
SELECT * FROM "QT1" WHERE "C1"=(SELECT MAX("C1") FROM "QT1")

［説明］

WITH句の処理で使う作業表が1つ作成されます。

(19)　例19（集合演算を指定している場合）

SQL文の例

SELECT "C1","C2" FROM "T1" UNION SELECT "C1","C2" FROM "T2"

［説明］

集合演算の処理で使う作業表が2つ作成されます。

(20)　例20（再帰的問合せを指定している場合）

SQL文の例

WITH "QT1"("C1","C2")
  AS (SELECT "C1","C2" FROM "T1" WHERE "C2" BETWEEN 'AA' AND 'EE'
      UNION ALL
      SELECT "C1"+1,"C2" FROM "QT1" WHERE "C1"<=10)
SELECT * FROM "QT1"

［説明］

再帰的問合せでは，アンカーメンバの結果と再帰的メンバの結果を保持するため，再帰的問合せの処理で使う作業表が2つ作成されます。再帰的問合せについては，マニュアルHADB　SQLリファレンスの問合せ式を参照してください。

(21)　例21（DISTINCT集合関数とGROUP BY句を指定している場合）

SQL文の例

SELECT "C1",COUNT(DISTINCT "C2"),SUM("C3") FROM "T1"
    GROUP BY "C1"

［説明］

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって，作成される作業表の個数が異なります。

グローバルハッシュグループ化が適用される場合

GROUP BY句の処理に使用する作業表が2つ，集合関数の処理に使用する作業表が2つ，合計4つの作業表が作成されます。

グローバルハッシュグループ化が適用されない場合

GROUP BY句の処理に使用する作業表が1つ作成されます。この例の場合，GROUP BY句のソート処理と集合関数のソート処理が同時に実行されるため，集合関数の処理に使用する作業表は作成されません。

グループ化の処理方式については，「5.7　グループ化の処理方式」を参照してください。

(22)　例22（複数のDISTINCT集合関数を指定している場合）

SQL文の例

SELECT COUNT(DISTINCT "C1"),COUNT(DISTINCT "C2") FROM "T1"

［説明］

グループ化の処理方式にグローバルハッシュグループ化が適用されるかどうかによって，作成される作業表の個数が異なります。

グローバルハッシュグループ化が適用される場合

集合関数の処理に使用する作業表が3つ作成されます。

グローバルハッシュグループ化が適用されない場合

集合関数の処理に使用する作業表が2つ作成されます。

グループ化の処理方式については，「5.7　グループ化の処理方式」を参照してください。

5.11　探索条件の等価変換

探索条件に指定された条件を効率的に評価するために，指定された探索条件をHADBが変換して評価することがあります。これを探索条件の等価変換といいます。探索条件が等価変換された場合，検索時に使用されるインデクスは等価変換後の探索条件を基に決定されます。検索時に使用されるインデクスの決定方法については，「5.2　SQL文の実行時に使用されるB-treeインデクスおよびテキストインデクス」および「5.3　SQL文の実行時に使用されるレンジインデクス」を参照してください。

HADBは，探索条件に指定された条件を次の順序で等価変換します。

OR条件に関する等価変換（OR条件の外側への抜き出し）※

OR条件中の条件を，OR条件の外側に抜き出す等価変換を行います。

OR条件に関する等価変換（IN条件への変換）※

OR条件中の = 条件から作成したIN条件を，OR条件の外側に追加する等価変換を行います。

OR条件に関する等価変換（集合演算UNION ALLを指定した導出表への等価変換）※

OR条件中の探索条件を，集合演算UNION ALLを指定した導出表に等価変換します。

スカラ演算に関する等価変換

スカラ演算を移項して等価変換します。

IN述語に関する等価変換

IN述語を = 条件または <> 条件に等価変換します。

HAVING句に関する等価変換（WHERE句への変換）

HAVING句の探索条件をWHERE句の探索条件に等価変換します。

導出問合せを指定したSQL文の探索条件に関する等価変換（導出問合せのWHERE句への移動）

導出問合せを指定したSQL文のWHERE句に指定された探索条件を，導出問合せのWHERE句に移動する等価変換を行います。

注※

WHERE句中の探索条件を対象とした等価変換を行います。

ここでは，上記の各等価変換について説明します。

5.11.1　OR条件に関する等価変換（OR条件の外側への抜き出し）

OR条件中に同じ条件が指定されている場合※，同じ条件をOR条件の外側に抜き出す等価変換が実行されます。同じ条件をOR条件の外側に抜き出すと，検索範囲を絞り込むための条件として有効に利用できることがあります。また，OR条件中の同じ条件が1つに集約されるため，条件評価の負荷が軽減されることがあります。

注※

ANYを指定した配列要素参照（識別番号は省略）が探索条件に指定されている場合は，探索条件が同じであっても等価変換は実行されません。具体例については，「(2)　等価変換されない例」の「(d)　例4」を参照してください。

重要

WHERE句の探索条件，結合表のON 探索条件，およびHAVING句の探索条件に指定したOR条件が等価変換の対象になります。

探索条件が等価変換された場合，検索時に使用されるインデクスは等価変換後の探索条件を基に決定されます。

等価変換の例を次に示します。例中のC1，C2，C3は列名を意味しています。

(1)　等価変換される例

(a)　例1

［説明］

OR条件の両側に「"C1" = 100」という同じ条件があるため，「"C1" = 100」がOR条件の外側に抜き出されます。

(b)　例2

［説明］

OR条件の両側に「"C1" < CURRENT_DATE」という同じ条件があるため，「"C1" < CURRENT_DATE」がOR条件の外側に抜き出されます。

(c)　例3

［説明］

OR条件の両側に「"T1"."C1" = "T2"."C1"」という同じ条件があるため，「"T1"."C1" = "T2"."C1"」がOR条件の外側に抜き出されます。

(d)　例4

［説明］

OR条件の両側に「"C1" IS NULL」という同じ条件があるため，「"C1" IS NULL」がOR条件の外側に抜き出されます。

(e)　例5

［説明］

OR条件の両側に「"C1" IN (100,200,300)」という同じ条件があるため，「"C1" IN (100,200,300)」がOR条件の外側に抜き出されます。

(f)　例6

［説明］

OR条件の両側に「"C1" BETWEEN 100 AND 300」という同じ条件があるため，「"C1" BETWEEN 100 AND 300」がOR条件の外側に抜き出されます。

(g)　例7

［説明］

OR条件中に指定した条件がすべて「"C1" = 100」のため，=条件に等価変換されます。

(h)　例8

［説明］

OR条件中に指定した条件がすべて「"C1" <> 100」のため，<>条件に等価変換されます。

(i)　例9

［説明］

OR条件の両側に「"C1_ARRAY"[ANY(1)] = 100」という同じ条件があるため，「"C1_ARRAY"[ANY(1)] = 100」がOR条件の外側に抜き出されます。

(2)　等価変換されない例

(a)　例1

［説明］

「"T1"."C1" = "T2"."C1"」と「"T2"."C1" = "T1"."C1"」は，異なる条件と見なされるため，等価変換されません。

(b)　例2

［説明］

OR条件の両側に「"C1" = 100」という同じ条件がありますが，NOT条件中に指定されたOR条件の場合は，等価変換されません。

(c)　例3

［説明］

OR条件の両側に「"C1" = 100 OR "C1" > 200」という同じ条件がありますが，AND条件に指定されたOR条件の場合は，等価変換されません。

(d)　例4

［説明］

OR条件の両側に「"C1_ARRAY"[ANY] = 100」という同じ条件がありますが，配列要素参照に識別番号が指定されていないため，HADBが各配列要素参照に異なる識別番号を割り振ります。そのため，指定された探索条件は同じではないと判定されて，等価変換されません。

(3)　等価変換の規則

比較述語で次に示す形式の場合は，OR条件中の条件をOR条件の外側に抜き出します。

｛列指定｜列指定[ANY〔(識別番号)〕]｝
    比較演算子 ｛定数｜日時情報取得関数｜ユーザ情報取得関数｝

｛定数｜日時情報取得関数｜ユーザ情報取得関数｝
    比較演算子 ｛列指定｜列指定[ANY〔(識別番号)〕]｝

｛列指定｜列指定[ANY〔(識別番号)〕]｝※
    比較演算子 ｛列指定｜列指定[ANY〔(識別番号)〕]｝※

注※

列指定，または配列値式が列指定のANYを指定した配列要素参照が左右逆に指定されている場合は，異なる条件と見なされて等価変換されません（「(2)　等価変換されない例」の「(a)　例1」を参照）。

NULL述語で次に示す形式の場合は，OR条件中の条件をOR条件の外側に抜き出します。

列指定※ IS 〔NOT〕 NULL

注※

列指定に配列型の列が指定されている場合は，OR条件の外側への抜き出しは行われません。

IN述語で次に示す形式の場合は，OR条件中の条件をOR条件の外側に抜き出します。

｛列指定｜列指定[ANY〔(識別番号)〕]｝
    〔NOT〕 IN (｛定数｜日時情報取得関数｜ユーザ情報取得関数｝
             〔,｛定数｜日時情報取得関数｜ユーザ情報取得関数｝〕…)

BETWEEN述語で次に示す形式の場合は，OR条件中の条件をOR条件の外側に抜き出します。

｛列指定｜列指定[ANY〔(識別番号)〕]｝
    〔NOT〕 BETWEEN ｛定数｜日時情報取得関数｜ユーザ情報取得関数｝
                AND ｛定数｜日時情報取得関数｜ユーザ情報取得関数｝

次に示す場合は等価変換されません。

NOT条件中に指定されたOR条件の場合（「(2)　等価変換されない例」の「(b)　例2」を参照）

AND条件に指定されたOR条件の場合（「(2)　等価変換されない例」の「(c)　例3」を参照）

5.11.2　OR条件に関する等価変換（IN条件への変換）

OR条件中に同じ列に対する=条件が指定されている場合※，次に示す等価変換が実行されます。

同じ列に対する=条件をIN条件に変換する

同じ列に対する=条件をIN条件に変換して，OR条件の外側に追加する

IN条件に変換してOR条件の外側に追加すると，検索範囲を絞り込むための条件として有効に利用できることがありますが，IN条件を追加すれば条件評価の負荷が増えることもあります。

注※

ANYを指定した配列要素参照（識別番号は省略）が探索条件に指定されている場合は，探索条件が同じであっても等価変換は実行されません。具体例については，「(2)　等価変換されない例」の「(c)　例3」を参照してください。

重要

WHERE句の探索条件，結合表のON 探索条件，およびHAVING句の探索条件に指定したOR条件が等価変換の対象になります。

探索条件が等価変換された場合，検索時に使用されるインデクスは等価変換後の探索条件を基に決定されます。

等価変換の例を次に示します。例中のC1，C2，C3は列名を意味しています。

(1)　等価変換される例

(a)　例1

［説明］

OR条件中に指定されているすべての条件が，C1列に対する=条件のため，IN条件に等価変換されます。

(b)　例2

［説明］

OR条件中に指定されているC1列に対する=条件を，IN条件に変換してOR条件の外側に追加します。

(c)　例3

［説明］

OR条件中に指定されている条件が，同じ配列要素参照に対する=条件（"C1_ARRAY"[ANY(1)] = XXX）のため，OR条件がIN条件に等価変換されます。

(2)　等価変換されない例

(a)　例1

［説明］

OR条件中に指定されているすべての条件が，C1列に対する=条件ですが，NOT条件中に指定されているため，等価変換されません。

(b)　例2

［説明］

OR条件の両側に「"C1" = 100」と「"C1" = 200」というIN条件に等価変換される条件がありますが，AND条件に指定されたOR条件の場合は等価変換されません。

(c)　例3

［説明］

OR条件に指定されている配列要素参照には識別番号が指定されていないため，HADBが各配列要素参照に異なる識別番号を割り振ります。そのため，指定された探索条件は同じではないと判定されて，等価変換されません。

(3)　等価変換の規則

比較述語で次に示す形式の場合は，OR条件の外側にIN条件を追加します。ただし，列指定に指定する列が外への参照列の場合は，等価変換されません。外への参照列については，マニュアルHADB　SQLリファレンスの副問合せの指定形式および規則を参照してください。

｛列指定｜列指定[ANY〔(識別番号)〕]｝
    = ｛定数｜日時情報取得関数｜ユーザ情報取得関数｜？パラメタ｝

｛定数｜日時情報取得関数｜ユーザ情報取得関数｜？パラメタ｝
    = ｛列指定｜列指定[ANY〔(識別番号)〕]｝

次に示す場合は等価変換されません。

NOT条件中に指定されたOR条件の場合（「(2)　等価変換されない例」の「(a)　例1」を参照）

AND条件に指定されたOR条件の場合（「(2)　等価変換されない例」の「(b)　例2」を参照）

5.11.3　OR条件に関する等価変換（集合演算UNION ALLを指定した導出表への等価変換）

指定したSQL文が次の2つの条件を満たす場合，SQL文が等価変換されることがあります。

FROM句にコンマ結合または結合表を指定している

WHERE句にOR条件を指定している

OR条件に指定した探索条件を，集合演算UNION ALLを指定した導出表に等価変換します。この等価変換の詳細を例を使って説明します。例中のT1，T2は表名を意味し，C1は列名を意味しています。

■等価変換前のSQL文（指定されたSQL文）

上記のSQL文では，FROM句にコンマ結合を指定し，かつWHERE句にOR条件を指定しているため（上記の例の下線部分），SQL文が等価変換されます。

■等価変換後のSQL文

上記のSQL文のように，集合演算UNION ALLを指定した導出表への等価変換が行われます。等価変換前のSQL文のOR条件に指定した探索条件（等価変換前のSQL文の1の個所）が，等価変換後の各集合演算項の問合せ指定の探索条件（等価変換後のSQL文の2と3の個所）にそれぞれ指定されます。

■等価変換のメリット

等価変換前のSQL文の場合，WHERE句にOR条件があるため，表の結合処理が行われたあとに探索条件の評価が行われます。

一方，等価変換後のSQL文の場合，各集合演算項のWHERE句にOR条件がないため，探索条件の評価が行われたあとに表の結合処理が行われます。これによって，表の結合処理を行う際に必要となる入力行数を削減できることがあります（検索性能が向上することがあります）。

また，"T1"."C1"列，"T2"."C1"列にインデクスが定義されている場合は，検索時にインデクスが使用されます。検索時に使用されるインデクスは，等価変換後の探索条件を基に決定されます。

ただし，等価変換によって問合せ指定や探索条件が増えるため，場合によっては検索時間が逆に長くなるケースもあります。

(1)　等価変換の例

等価変換の例を次に示します。例中のT1，T2，T3は表名を意味し，C1は列名を意味しています。

（例1）探索条件にOR条件を2つ指定している場合

［説明］

等価変換前のSQL文では，FROM句に結合表を指定し，かつWHERE句にOR条件を指定しているため（上記の例の下線部分），SQL文が等価変換されます。

等価変換前のSQL文のOR条件に指定した各探索条件が，等価変換後の各集合演算項の問合せ指定の探索条件にそれぞれ指定されます。等価変換前のSQL文のようにOR条件を2つ指定している場合は，等価変換後の集合演算項が3つになります。

（例2）探索条件にAND条件とOR条件を指定している場合

［説明］

等価変換前のSQL文では，FROM句にコンマ結合を指定し，かつWHERE句にOR条件を指定しているため（上記の例の下線部分），SQL文が等価変換されます。

等価変換前のSQL文のOR条件に指定した各探索条件が，等価変換後の各集合演算項の問合せ指定の探索条件にそれぞれ指定されます。等価変換前のSQL文のAND条件の左側に指定した探索条件は，等価変換後のすべての集合演算項の問合せ指定の探索条件に指定されます。

(2)　等価変換の適用条件

次の条件をすべて満たす場合に，等価変換が行われます。

■サーバ定義またはクライアント定義についての条件

次の条件をすべて満たす必要があります。

サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドに0を指定していないこと。

サーバ定義のadb_sys_uthd_numオペランドに0を指定していないこと。

サーバ定義またはクライアント定義のadb_sql_exe_max_rthd_numオペランドに0を指定していないこと。

■SQL文についての条件

次の条件をすべて満たす必要があります。

検索系SQLであること。

SQL文中に指定しているどれかの表に対して，バージョン04-03以降のHADBサーバでコスト情報を収集していること。

SQL文中に外への参照列を含む問合せ指定がないこと。

■問合せ指定についての条件

次の条件をすべて満たす必要があります。

選択式についての条件

選択式にROWが指定されていないこと。

FROM句に指定する表参照についての条件

選択式に指定した表数が16以下であること（ただし，集まり導出表は表数に含めない）。

FROM句にコンマ結合が指定されていること。

コンマ結合だけを指定している場合，またはコンマ結合と結合表の両方を混在して指定している場合に適用条件を満たします。

また，指定できる表の種別を次に示します。次の表の種別が混在して指定されていても適用条件を満たします。

・実表（ただし，アーカイブマルチチャンク表が指定されている場合は，等価変換されません）

・結合表（ただし，FULL OUTER JOINが指定されている場合は，等価変換されません）

・導出表（表副問合せ，問合せ名，およびビュー表が該当します）

・集まり導出表

■結合条件についての条件

次の条件をすべて満たす必要があります。

結合表の結合指定中にOR条件が指定されていないこと。

OR条件中に指定した列が属する表，またはその表に定義されている配列型の列を指定した集まり導出表の結合条件が，次の条件を満たしていること。

OR条件中に指定した列が属する表，またはその表に定義されている配列型の列を指定した集まり導出表の間に，「列指定＝列指定」の形式の結合条件が1つ以上存在すること。

集合演算UNION ALLを指定した導出表への等価変換を行う際，各集合演算項の問合せ指定の探索条件に，結合対象のすべての表に対する結合条件が存在すること。

■WHERE句に指定する探索条件についての条件

次の条件をすべて満たす必要があります。

論理演算子ANDに指定する条件に，OR条件を指定した条件が複数個指定されていないこと。

（例）

適用条件を満たす例

条件1 AND 条件2 AND (条件3 OR 条件4 OR 条件5)

OR条件を指定した条件が1つだけ指定されているため，適用条件を満たします。

適用条件を満たさない例

(条件1 OR 条件2) AND 条件3 AND (条件4 OR 条件5)

OR条件を指定した条件が2つ指定されているため，適用条件を満たしません。

OR条件がネストして複数個指定されている場合も適用条件を満たします。

OR条件以外の連続した探索条件中に指定する表の数は考慮しません（結合指定でなくてもよい）。

NOTが指定されたOR条件は適用条件を満たしません。

OR条件中に結合表の列が指定されていないこと。

ただし，結合表がコンマ結合に変換された場合は，適用条件を満たします。

OR条件中に指定されている列の表に配列型の列が定義されている場合，その配列型の列が次のどれかに指定されていないこと。

選択式の値式

ソート指定リストのソートキー

GROUP BY句のグループ化指定

HAVING句の探索条件

次のどれかを含む探索条件中

・OR条件中に指定された列の表以外の表の列を指定している探索条件

・スカラ関数RANDOMまたはRANDOM_NORMALを指定している探索条件

・副問合せを指定している探索条件

次のどれかの探索条件を含むNOTの中に指定された探索条件中

・OR条件中に指定された列の表以外の表の列を指定している探索条件

・スカラ関数RANDOMまたはRANDOM_NORMALを指定している探索条件

・副問合せを指定している探索条件

OR条件に副問合せが指定されていないこと。

OR条件にスカラ関数RANDOMまたはRANDOM_NORMALが指定されていないこと。

論理演算子ORの数が15以下であること。

OR条件に2表以上に対する探索条件が含まれていること。

等価変換後の集合演算項の各探索条件中に，次のどれかの形式の探索条件が1つ以上含まれていること。また，これらの条件に対して論理演算子ORやNOTが指定されていないこと。

比較述語

｛列指定｜列指定[ANY〔(識別番号)〕]※｝
    比較演算子 ｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝

｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
    比較演算子 ｛列指定｜列指定[ANY〔(識別番号)〕]※｝

BETWEEN述語

｛列指定｜列指定[ANY〔(識別番号)〕]※｝
    BETWEEN ｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
        AND ｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝

IN述語

｛列指定｜列指定[ANY〔(識別番号)〕]※｝
    IN (｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
     〔,｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝〕…)

LIKE述語

｛列指定｜列指定[ANY〔(識別番号)〕]※｝
    LIKE パターン文字列 〔ESCAPE エスケープ文字〕
    パターン文字列::＝｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
    エスケープ文字::＝｛定数｜？パラメタ｝

LIKE_REGEX述語

｛列指定｜列指定[ANY〔(識別番号)〕]※｝
    LIKE_REGEX 正規表現文字列 〔FLAG ｛I｜IGNORECASE｝〕
    正規表現文字列::＝定数

NULL述語

｛列指定｜列指定[ANY〔(識別番号)〕]※｝ IS NULL

注※

WHERE句中にこの配列要素参照と同じ識別番号を持つ配列要素参照が指定されている場合，そのSQL文は等価変換されません。

メモ

スカラ演算の中に定数だけを指定している場合，そのスカラ演算は定数として扱われることがあります。定数と等価なスカラ演算については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。

■等価変換が適用される問合せ指定の指定個所についての条件

問合せ指定が次の個所に指定された場合に，等価変換を適用するかどうかのチェックをHADBサーバが行います。

問合せ式中の問合せ式本体

スカラ副問合せ

表副問合せ

集合演算の各集合演算項

SQL文が等価変換されてUNION ALLを指定した導出表が作成された結果，集合演算の個数の上限を超えた場合でも，SQL文の等価変換が行われます。

WITHリスト要素

再帰的メンバの問合せ指定に対しては，等価変換を適用しません。

CREATE VIEW文中の問合せ式

5.11.4　スカラ演算に関する等価変換

探索条件の片方の項に，列指定※1を含むスカラ演算が指定されている場合，スカラ演算の部分が移項されます（片方の項が列指定※1だけになるように探索条件が等価変換されます）。次の条件をすべて満たす場合に，スカラ演算の移項が行われます。

演算項が次のどちらかの条件を満たしている

演算項が「列指定※1と定数」の四則演算（加減算だけ）である

演算項が「列指定※1とラベル付き間隔」の日時演算である

列指定の列のデータ型※2が，SMALLINT，INTEGER，TIME，DATE，またはTIMESTAMPのどれかである

スカラ演算が入れ子になっていない

注※1

列指定のほかに，配列値式が列指定でANYを指定した配列要素参照も該当します。配列要素参照の場合も列指定のときと同様に，スカラ演算の部分が移項されて，片方の項が配列要素参照だけになるように探索条件が等価変換されます。

注※2

配列要素参照の場合は，配列値式の結果のデータ型となります。

重要

探索条件が等価変換された場合，検索時に使用されるインデクスは等価変換後の探索条件を基に決定されます。

等価変換の例を次に示します。例中のC1は列名を意味しています。

なお，以降では，列指定のときの等価変換の例を記載しています。配列要素参照の場合は，列指定を配列要素参照に置き換えてください。

(1)　等価変換される例

(a)　例1

［説明］

列指定を含む項に「+10」というスカラ演算があります。このスカラ演算が右辺に移項され，列指定だけの条件に等価変換されます。等価変換後，「列指定 比較演算子 定数」の形式になるため，検索時にインデクスが使用されます。

(b)　例2

［説明］

列指定を含む項に「+1 DAY」というスカラ演算があります。このスカラ演算が右辺に移項され，列指定だけの条件に等価変換されます。等価変換後，「列指定 比較演算子 定数」の形式になるため，検索時にインデクスが使用されます。

(c)　例3

［説明］

列指定を含む項に「+10」というスカラ演算があります。このスカラ演算が右辺に移項され，列指定だけの条件に等価変換されます。等価変換後，「列指定 BETWEEN 定数」の形式になるため，検索時にインデクスが使用されます。

(d)　例4

［説明］

列指定を含む項に「+10」というスカラ演算があります。このスカラ演算が右辺に移項され，列指定だけの条件に等価変換されます。等価変換後，「列指定 IN 定数」の形式になるため，検索時にインデクスが使用されます。

(2)　等価変換されない例

(a)　例1

［説明］

列指定を含むスカラ演算が入れ子になっているため，等価変換されません。

(3)　等価変換の規則

比較述語で次に示す形式の場合は，スカラ演算の部分が移項され，列指定，または配列値式が列指定のANYを指定した配列要素参照だけの条件に等価変換されます。

｛列指定｜列指定[ANY〔(識別番号)〕]｝ ｛+｜-｝ 定数
    比較演算子 定数

定数
    比較演算子 ｛列指定｜列指定[ANY〔(識別番号)〕]｝ ｛+｜-｝ 定数

なお，次に示すすべての条件を満たす場合は，等価変換されません。

列指定，または配列値式が列指定のANYを指定した配列要素参照を含むスカラ演算に，ラベル付き間隔のYEARまたはMONTHが指定されている

比較述語の比較演算子に，<>，!=，^=のどれかが指定されている

BETWEEN述語で次に示すどちらかの形式の場合は，スカラ演算の部分が移項され，列指定，または配列値式が列指定のANYを指定した配列要素参照だけの条件に等価変換されます。

｛列指定｜列指定[ANY〔(識別番号)〕]｝ ｛+｜-｝ 定数
    〔NOT〕 BETWEEN 定数 AND 定数

なお，次に示すすべての条件を満たす場合は，等価変換されません。

列指定，または配列値式が列指定のANYを指定した配列要素参照を含むスカラ演算に，ラベル付き間隔のYEARまたはMONTHが指定されている

BETWEEN述語でNOT BETWEENが指定されている

IN述語で次に示すどちらかの形式の場合は，スカラ演算の部分が移項され，列指定，または配列値式が列指定のANYを指定した配列要素参照だけの条件に等価変換されます。

｛列指定｜列指定[ANY〔(識別番号)〕]｝ ｛+｜-｝ 定数
    〔NOT〕 IN (定数,…)

なお，列指定，または配列値式が列指定のANYを指定した配列要素参照を含むスカラ演算に，ラベル付き間隔のYEARまたはMONTHが指定されている場合は，等価変換されません。

5.11.5　IN述語に関する等価変換

IN条件の比較値の指定が1つだけの場合，指定した探索条件が等価変換されます。探索条件が等価変換された場合，検索時に使用されるインデクスは等価変換後の探索条件を基に決定されます。

等価変換の例を次に示します。例中のC1は列名を意味しています。

(1)　例1

［説明］

IN条件の比較値の指定が1つだけの場合，=条件に等価変換されます。

(2)　例2

［説明］

NOT IN条件の比較値の指定が1つだけの場合，<>条件に等価変換されます。

5.11.6　HAVING句に関する等価変換（WHERE句への変換）

HAVING句の探索条件が，WHERE句の探索条件に等価変換されることがあります。WHERE句の探索条件に等価変換されると，グループ化の処理でむだな入力行を削減できたり，表の検索にインデクスが利用できたりすることがあります。

WHERE句の探索条件に等価変換される条件の形式を，次に示します。探索条件が等価変換された場合，検索時に使用されるインデクスは等価変換後の探索条件を基に決定されます。

等価変換される条件の形式

比較述語

・列指定 比較演算子 ｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝

・｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝ 比較演算子 列指定

BETWEEN述語

列指定 〔NOT〕 BETWEEN ｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
                    AND ｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝

IN述語

列指定 〔NOT〕 IN (｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
                  〔,｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝〕…)

LIKE述語

列指定 〔NOT〕 LIKE パターン文字列 〔ESCAPE エスケープ文字〕
  パターン文字列::＝｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
  エスケープ文字 ::＝｛定数｜？パラメタ｝

LIKE_REGEX述語

列指定 〔NOT〕 LIKE_REGEX 正規表現文字列 〔FLAG ｛I｜IGNORECASE｝〕
  正規表現文字列::＝定数

NULL述語

列指定 IS 〔NOT〕 NULL

留意事項

論理演算のOR条件の中に指定された条件の場合は，この等価変換の対象になりません。

ただし，この論理演算のOR条件に対して，次に示す等価変換が適用される場合は，次に示す等価変換が適用されたあとに，HAVING句に関する等価変換が適用されます。

・OR条件の中の条件をOR条件の外側に抜き出す等価変換

・OR条件の中の=条件から作成したIN条件をORの外側に追加する等価変換

OR条件に関する等価変換については，「5.11.1　OR条件に関する等価変換（OR条件の外側への抜き出し）」および「5.11.2　OR条件に関する等価変換（IN条件への変換）」を参照してください。

論理演算のNOTの中に指定された条件，および副問合せを含む条件の場合は，この等価変換の対象になりません。

列指定の列が外への参照列の場合，この等価変換の対象になりません。外への参照列については，マニュアルHADB　SQLリファレンスの副問合せの指定形式および規則を参照してください。

スカラ演算の中に定数だけを指定している場合，そのスカラ演算は定数として扱われることがあります。定数と等価なスカラ演算については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。

5.11.7　導出問合せを指定したSQL文の探索条件に関する等価変換（導出問合せのWHERE句への移動）

導出問合せを指定したSQL文のWHERE句に指定された探索条件を，導出問合せのWHERE句に移動する等価変換を行います。導出問合せについては，マニュアルHADB　SQLリファレンスの導出問合せおよび導出問合せ名を参照してください。

等価変換の例を次に示します。例中のC1，C2，C3は列名を意味しています。

(1)　等価変換される例

(a)　例1（導出問合せが問合せ指定の場合）

［説明］

導出問合せを指定したSQL文のWHERE句に指定された条件左側の列指定は，導出問合せに指定された問合せ指定の選択式（"T1"."C1"）を基に導出された導出列（"D1"."C1"）です。この条件は，等価変換の適用条件を満たしているため，導出問合せを指定したSQL文の探索条件に関する等価変換が適用されます。

(b)　例2（導出問合せが問合せ式の場合）

［説明］

導出問合せを指定したSQL文のWHERE句に指定された条件左側の列指定は，導出問合せに指定された問合せ式の選択式（"T1"."C1"，"T2"."C1"）を基に導出された導出列（"D1"."C1"）です。この条件は，等価変換の適用条件を満たしているため，導出問合せを指定したSQL文の探索条件に関する等価変換が適用されます。

(c)　例3（導出問合せが問合せ指定の場合）

［説明］

導出問合せを指定したSQL文のWHERE句に指定された論理演算のOR条件に含まれる列指定は，導出問合せに指定された問合せ指定の選択式（"T1"."C1"，"T1"."C2"，"T1"."C3"）を基に導出された導出列（"D1"."C1"，"D1"."C2"，"D1"."C3"）です。この論理演算のOR条件は，等価変換の適用条件を満たしているため，導出問合せを指定したSQL文の探索条件に関する等価変換が適用されます。

(d)　例4（導出問合せが問合せ式の場合）

［説明］

導出問合せを指定したSQL文のWHERE句に指定された論理演算のOR条件に含まれる列指定は，導出問合せに指定された問合せ式の選択式（"T1"."C1"，"T1"."C2"，"T1"."C3"，"T2"."C1"，"T2"."C2"，"T2"."C3"）を基に導出された導出列（"D1"."C1"，"D1"."C2"，"D1"."C3"）です。この論理演算のOR条件は，等価変換の適用条件を満たしているため，導出問合せを指定したSQL文の探索条件に関する等価変換が適用されます。

(2)　等価変換される条件の形式

等価変換される条件の形式を次に示します。

比較述語の場合

・列指定 比較演算子 ｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
・｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝ 比較演算子 列指定
・CONTAINS(列指定,検索条件式文字列) > 0

BETWEEN述語の場合

列指定 〔NOT〕 BETWEEN ｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
                   AND ｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝

IN述語の場合

列指定 〔NOT〕 IN (｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
                〔,｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝〕…)

LIKE述語の場合

列指定 〔NOT〕 LIKE パターン文字列 〔ESCAPE エスケープ文字〕
  パターン文字列::＝｛定数｜？パラメタ｜日時情報取得関数｜ユーザ情報取得関数｝
  エスケープ文字::＝｛定数｜？パラメタ｝

LIKE_REGEX述語の場合

列指定 〔NOT〕 LIKE_REGEX 正規表現文字列 〔FLAG ｛I｜IGNORECASE｝〕
  正規表現文字列::＝定数

NULL述語の場合

列指定 IS 〔NOT〕 NULL

列指定に配列型の列が指定されている場合，等価変換は行われません。

(3)　留意事項

探索条件の列指定に指定された導出列の基となる導出問合せの選択式が，列指定の場合に等価変換が行われます。

導出問合せにウィンドウ関数が指定されている場合，等価変換は行われません。

導出問合せが導出問合せを指定したSQL文に展開された場合，等価変換は行われません。導出問合せの展開については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。

次のような導出問合せの場合，等価変換は行われません。

導出問合せとしてビュー表名を指定し，同じビュー表名をSQL文中に複数指定した場合

導出問合せとしてWITHリスト要素に指定した問合せ名を指定し，同じ問合せ名をSQL文中に複数指定した場合

WITHリスト要素が複数指定されていて，導出問合せとしてWITHリスト要素に指定した問合せ名を指定した場合

INNER JOINだけを指定した結合表以外の結合表中に，導出問合せを指定した場合

導出問合せとして表値構成子を指定した場合

導出問合せが再帰的問合せの場合

次に示すすべての条件を満たす場合に，導出問合せを指定したSQL文の探索条件に関する等価変換が適用されます。

論理演算のOR条件中に指定された条件が，導出問合せを指定したSQL文の探索条件に関する等価変換の対象となる探索条件の形式を満たしている

すべての列指定が同一の導出表の構成列である

論理演算のOR条件に対して，次に示す等価変換が適用される場合は，次に示す等価変換が適用されたあとに，導出問合せを指定したSQL文の探索条件に関する等価変換が適用されます。

OR条件の中の条件をOR条件の外側に抜き出す等価変換

OR条件の中の=条件から作成したIN条件をORの外側に追加する等価変換

上記の等価変換については，「5.11.1　OR条件に関する等価変換（OR条件の外側への抜き出し）」，および「5.11.2　OR条件に関する等価変換（IN条件への変換）」を参照してください。

論理演算のNOT条件中に指定された条件，および副問合せを含む条件は，等価変換の対象になりません。

列指定に指定する列が外への参照列の場合，等価変換は行われません。外への参照列については，マニュアルHADB　SQLリファレンスの副問合せの指定形式および規則を参照してください。

スカラ演算中に定数だけを指定している場合，そのスカラ演算は定数として扱われることがあります。定数と等価なスカラ演算については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則を参照してください。

5.12　アーカイブマルチチャンク表を検索する際の考慮点

アーカイブマルチチャンク表を検索する際の考慮点について説明します。

ここでの説明は，アーカイブレンジ列にDATE型の日時データが格納されている場合の例を使用しています。

メモ

ここの説明は，マニュアルHADB　システム構築・運用ガイドのチャンクアーカイブ機能（チャンク内のデータの圧縮）をお読みいただいていることを前提としています。

5.12.1　アーカイブマルチチャンク表を検索する際のポイント

アーカイブマルチチャンク表を検索する際のポイントを例を使って説明します。

例中で使用するアーカイブマルチチャンク表の定義と，データのアーカイブ状態は次のとおりとします。

■アーカイブマルチチャンク表の定義

■データのアーカイブ状態

データベースには，2015年4月〜2016年3月までのデータが格納されています。

2015年4月〜12月までのデータは，アーカイブされています。

2016年1月〜3月までのデータは，アーカイブされていません。

(1)　検索時の基本的な考え方

アーカイブマルチチャンク表を検索する際は，アーカイブレンジ列の日時情報を探索条件に指定して，検索範囲を絞り込むようにしてください。

また，検索対象のデータがアーカイブされているかどうかを意識するようにしてください。アーカイブされているデータを検索する場合，検索処理時間が長くなることがあります。

(2)　探索条件の指定

アーカイブマルチチャンク表を検索する際の，探索条件の指定に関するポイントを次に示します。

WHERE句の探索条件にアーカイブレンジ列を指定した条件を必ず指定し，検索範囲を絞り込むようにしてください。

（例）

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" BETWEEN DATE'2016/02/01' AND DATE'2016/02/29'

上記の下線部分の指定（アーカイブレンジ列の日時情報を使用した検索範囲の絞り込み）を必ずしてください。

なお，指定できる述語などに制限があります。詳細については，「5.12.2　アーカイブレンジ列の日時情報を使用した検索範囲の絞り込み」を参照してください。

AND条件を追加して，検索範囲をさらに絞り込むようにしてください。

（例）

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" BETWEEN DATE'2016/02/01' AND DATE'2016/02/29'
    AND "C1"='P001'
    AND "C2"=100

アーカイブレンジ列に対する比較条件は，定数を指定することを推奨します。

（例）推奨する指定例

WHERE "RECORD-DAY" BETWEEN DATE'2016/01/01' AND DATE'2016/03/31'
WHERE "RECORD-DAY" >= DATE'2016/02/01'

(3)　アーカイブされていないデータを検索する場合

アーカイブされていないデータを検索する場合（この例では2016年1月以降のデータを検索する場合），探索条件には，アーカイブされていないデータだけを検索範囲とする条件を指定します。

（例）

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" >= DATE'2016/01/01'
    AND "C1"='P001'
    AND "C2"=100

この例の場合，2016/01/01以降のデータだけを検索範囲とする探索条件を指定しています。

(4)　アーカイブされているデータを検索する場合

アーカイブされているデータを検索する場合（この例では2015年4月〜2015年12月のデータを検索する場合），探索条件に指定するアーカイブレンジ列の日時情報の範囲をできる限り狭くしてください。

（例）

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" BETWEEN DATE'2015/10/01' AND DATE'2015/10/05'
    AND "C1"='P001'
    AND "C2"=100

上記の下線部分の指定によって，検索範囲をできる限り絞り込み，読み込み対象のアーカイブファイルを減らします。読み込み対象のアーカイブファイルが増えると，それに比例して検索時間が長くなります。

5.12.2　アーカイブレンジ列の日時情報を使用した検索範囲の絞り込み

アーカイブマルチチャンク表を検索する場合は，アーカイブレンジ列の日時情報を使用して検索範囲の絞り込みが行われるように探索条件を指定する必要があります。

重要

ここで説明している規則に従っていない場合，アーカイブされている全データが検索対象になるため，検索処理時間が長くなることがあります。アーカイブされている全データが検索対象になった場合，KFAA51121-Wメッセージが出力されます。この場合，SQL文を修正して，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みをしてください。

(1)　探索条件の指定規則

アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われる条件を次に示します。

WHERE句の探索条件にアーカイブレンジ列を指定した条件を指定している

アーカイブレンジ列を指定した探索条件に，比較述語，IN述語，またはBETWEEN述語だけを指定している

比較述語，IN述語，またはBETWEEN述語の指定が，「(2)　比較述語の指定規則」以降で説明している条件を満たしている

アーカイブレンジ列を指定した探索条件にNOT条件を指定していない

アーカイブレンジ列を指定した探索条件にOR条件を指定していない（OR条件の両辺にアーカイブレンジ列を指定した探索条件を指定していない）

・絞り込みが行われない例

SELECT * FROM "ARCHIVE-T1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/01' AND DATE'2016/01/10'
     OR "RECORD-DAY" BETWEEN DATE'2016/02/01' AND DATE'2016/02/10'

・絞り込みが行われる例

SELECT * FROM "ARCHIVE-T1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/01' AND DATE'2016/01/10'
  AND ("C1"='P001' OR "C2"='S002')

重要

DELETE文またはUPDATE文中に指定する探索条件についても，ここで説明している探索条件の指定規則が適用されます。ここで説明している指定規則に従っていない場合，DELETE文またはUPDATE文がエラーになります。

アーカイブマルチチャンク表の行を削除する場合のDELETE文の規則については，マニュアルHADB　SQLリファレンスのDELETE文の指定形式および規則の規則を参照してください。

アーカイブマルチチャンク表の行を更新する場合のUPDATE文の規則については，マニュアルHADB　SQLリファレンスのUPDATE文の指定形式および規則の規則を参照してください。

(2)　比較述語の指定規則

ここで説明する指定規則に従って比較述語を指定した場合，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われます。

(a)　指定規則と推奨する指定例

比較述語の指定形式

比較述語：：＝比較演算項1 比較演算子 比較演算項2

指定規則

比較演算子には，=，<，<=，>=，>のどれかを指定していること

片方の比較演算項には，アーカイブレンジ列（単独の列指定）を指定していること

反対の比較演算項には，値指定を指定していること

メモ

値指定には定数を指定することを推奨します。

推奨する指定例

SELECT * FROM "ARCHIVE-T1" WHERE "RECORD-DAY" >= DATE'2016/01/01'

推奨しない指定例

SELECT * FROM "ARCHIVE-T1" WHERE "RECORD-DAY" = ?
SELECT * FROM "ARCHIVE-T1" WHERE "RECORD-DAY" >= CURRENT_DATE

上記の例の場合，検索範囲の絞り込みは行われますが，定数以外の指定は推奨しません。

重要

値指定に定数を指定した場合，定数以外を指定したときに比べて，検索範囲の絞り込みに掛かる時間を短くできます。

(b)　検索範囲の絞り込みが行われない指定例

例1

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" - 10 DAY > DATE'2016/02/10'

上記の例の場合，比較演算項にアーカイブレンジ列を使用した日時演算を指定しているため（単独の列指定ではないため），検索範囲の絞り込みは行われません。この場合，上記のSELECT文を次のように修正すると，検索範囲の絞り込みが行われます。

修正例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" > DATE'2016/02/10' + 10 DAY

上記の例のように，片方の比較演算項にアーカイブレンジ列を単独の列指定で指定し，反対の比較演算項には定数と等価な値式を指定します。

例2

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" > CURRENT_DATE - 1 YEAR

上記の例の場合，比較演算項に値指定を指定していないため，検索範囲の絞り込みは行われません。この場合，上記のSELECT文を次のように修正すると，検索範囲の絞り込みが行われます。

修正例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" > DATE'2016/02/10' - 1 YEAR

上記の例のように，CURRENT_DATEを明示的に定数で指定してください。これによって，右側の比較演算項が定数と等価な値式になるため，検索範囲の絞り込みが行われます。

定数と等価な値式については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。

(3)　IN述語の指定規則

ここで説明する指定規則に従ってIN述語を指定した場合，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われます。

(a)　指定規則と推奨する指定例

IN述語の指定形式

IN述語：：＝値式1 〔IS〕 〔NOT〕 IN ｛(値式2〔,値式3〕…)｜表副問合せ｝

指定規則

値式1には，アーカイブレンジ列（単独の列指定）を指定していること

値式2以降には，値指定を指定していること

IN述語中に表副問合せを指定していないこと

IN述語中にNOTを指定していないこと

メモ

値式2以降に指定する値指定には，定数を指定することを推奨します。

推奨する指定例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" IN (DATE'2016/01/01',DATE'2016/02/01')

推奨しない指定例

SELECT * FROM "ARCHIVE-T1" WHERE "RECORD-DAY" IN (?,?)

上記の例の場合，検索範囲の絞り込みは行われますが，定数以外の指定は推奨しません。

重要

値指定に定数を指定した場合，定数以外を指定したときに比べて，検索範囲の絞り込みに掛かる時間を短くできます。

(b)　検索範囲の絞り込みが行われない指定例

例1

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" IN (CURRENT_DATE,
                           CURRENT_DATE - 7 DAY,
                           CURRENT_DATE - 14 DAY)

上記の例の場合，IN述語中の値式2以降に値指定以外を指定しているため，検索範囲の絞り込みは行われません。この場合，上記のSELECT文を次のように修正すると，検索範囲の絞り込みが行われます。

修正例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" IN (DATE'2016/02/10',
                           DATE'2016/02/10' - 7 DAY,
                           DATE'2016/02/10' - 14 DAY)

上記の例のように，CURRENT_DATEを明示的に定数で指定してください。これによって，IN述語中の値式2以降が定数と等価な値式になるため，検索範囲の絞り込みが行われます。

定数と等価な値式については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。

例2

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" IN (SELECT "SALES_DATE" FROM "SALESLIST"
                             WHERE "USERID" = 'U001')

上記の例の場合，IN述語中に表副問合せを指定しているため，検索範囲の絞り込みは行われません。この場合，上記のSELECT文を次のように修正すると，検索範囲の絞り込みが行われます。

修正例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" IN (SELECT "SALES_DATE" FROM "SALESLIST"
                             WHERE "USERID" = 'U001')
      AND "RECORD-DAY" > DATE'2015/10/01'

上記の例のように，検索範囲の絞り込みが行われる探索条件を追加してください。

(4)　BETWEEN述語の指定規則

ここで説明する指定規則に従ってBETWEEN述語を指定した場合，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われます。

(a)　指定規則と推奨する指定例

BETWEEN述語の指定形式

BETWEEN述語：：＝値式1 〔NOT〕 BETWEEN 値式2 AND 値式3

指定規則

値式1には，アーカイブレンジ列（単独の列指定）を指定していること

値式2および値式3には，値指定を指定していること

BETWEEN述語中にNOTを指定していないこと

メモ

値式2および値式3に指定する値指定には，定数を指定することを推奨します。

推奨する指定例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" BETWEEN DATE'2016/01/01' AND DATE'2016/01/10'

推奨しない指定例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" BETWEEN ? AND ?

上記の例の場合，検索範囲の絞り込みは行われますが，定数以外の指定は推奨しません。

重要

値指定に定数を指定した場合，定数以外を指定したときに比べて，検索範囲の絞り込みに掛かる時間を短くできます。

(b)　検索範囲の絞り込みが行われない指定例

例1

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" BETWEEN CURRENT_DATE - 2 YEAR
                           AND CURRENT_DATE - 1 YEAR

上記の例の場合，BETWEEN述語中の値式2または値式3に，値指定以外を指定しているため，検索範囲の絞り込みは行われません。この場合，上記のSELECT文を次のように修正すると，検索範囲の絞り込みが行われます。

修正例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" BETWEEN DATE'2016/02/10' - 2 YEAR
                           AND DATE'2016/02/10' - 1 YEAR

上記の例のように，CURRENT_DATEを明示的に定数で指定してください。これによって，BETWEEN述語中の値式2または値式3が定数と等価な値式になるため，検索範囲の絞り込みが行われます。

定数と等価な値式については，マニュアルHADB　SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。

例2

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" NOT BETWEEN DATE'2016/01/01' AND DATE'2016/01/31'

上記の例の場合，BETWEEN述語中にNOTを指定しているため，検索範囲の絞り込みは行われません。この場合，上記のSELECT文を次のように修正すると，検索範囲の絞り込みが行われます。

修正例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" BETWEEN DATE'2015/12/01' AND DATE'2015/12/31'
      AND "RECORD-DAY" BETWEEN DATE'2016/02/01' AND DATE'2016/02/29'

上記の例のように，BETWEEN述語中にNOTを指定しないで，複数のBETWEEN述語をAND条件で指定してください。

5.12.3　JOIN（結合表）を指定した場合の留意事項

結合表を指定した場合，結合表の指定方法によっては，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。検索範囲の絞り込みが行われる結合表の指定方法について説明します。

例中のARCHIVE-T1はアーカイブマルチチャンク表を意味し，RECORD-DAYはアーカイブレンジ列を意味しています。

(1)　例1（LEFT OUTER JOINの場合）

LEFT OUTER JOINの右側の表参照にアーカイブマルチチャンク表を指定した場合，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。

■検索範囲の絞り込みが行われない例（変更前）

SELECT "T1"."C1" FROM "T1"
                 LEFT OUTER JOIN "ADBUSER01"."ARCHIVE-T1" AS "DT"
                 ON "T1"."C1" = "DT"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'

［説明］

下線部のように，LEFT OUTER JOINの右側の表参照にアーカイブマルチチャンク表を指定した場合，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。この場合，アーカイブされている全データに対しても検索処理が行われるため，検索処理時間が長くなることがあります。

この場合，次のようにSQL文を変更してください。

■検索範囲の絞り込みが行われる例（変更後）

SELECT "T1"."C1" FROM "T1"
                 LEFT OUTER JOIN (SELECT * FROM "ADBUSER01"."ARCHIVE-T1"
                                    WHERE "RECORD-DAY"
                                      BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
                                    AND "C1"='P001') AS "DT"
                 ON "T1"."C1" = "DT"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'

［説明］

下線部のように，アーカイブレンジ列を指定した探索条件を明示的に指定した導出表に書き換えます。上記のようにSQL文を変更すると，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われます。

メモ

LEFT OUTER JOINの左側の表参照にアーカイブマルチチャンク表を指定する場合は，特に考慮することはありません（SQL文を変更する必要はありません）。

(2)　例2（RIGHT OUTER JOINの場合）

RIGHT OUTER JOINの左側の表参照にアーカイブマルチチャンク表を指定した場合，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。

■検索範囲の絞り込みが行われない例（変更前）

SELECT "T1"."C1" FROM "ADBUSER01"."ARCHIVE-T1" AS "DT"
                 RIGHT OUTER JOIN "T1"
                 ON "DT"."C1" = "T1"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'

［説明］

下線部のようにRIGHT OUTER JOINの左側の表参照にアーカイブマルチチャンク表を指定した場合，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。この場合，アーカイブされている全データに対しても検索処理が行われるため，検索処理時間が長くなることがあります。

この場合，次のようにSQL文を変更してください。

■検索範囲の絞り込みが行われる例（変更後）

SELECT "T1"."C1" FROM (SELECT * FROM "ADBUSER01"."ARCHIVE-T1"
                         WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
                         AND "C1"='P001') AS "DT"
                 RIGHT OUTER JOIN "T1"
                 ON "DT"."C1" = "T1"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'

［説明］

下線部のように，アーカイブレンジ列を指定した探索条件を明示的に指定した導出表に書き換えます。上記のようにSQL文を変更すると，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われます。

メモ

RIGHT OUTER JOINの右側の表参照にアーカイブマルチチャンク表を指定する場合は，特に考慮することはありません（SQL文を変更する必要はありません）。

(3)　例3（FULL OUTER JOINの場合）

FULL OUTER JOINの左側または右側の表参照にアーカイブマルチチャンク表を指定した場合，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。

■検索範囲の絞り込みが行われない例（変更前）

SELECT "T1"."C1" FROM "ADBUSER01"."ARCHIVE-T1" AS "DT"
                 FULL OUTER JOIN "T1"
                 ON "DT"."C1" = "T1"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'

［説明］

下線部のようにFULL OUTER JOINの左側または右側の表参照にアーカイブマルチチャンク表を指定した場合，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われません。この場合，アーカイブされている全データに対しても検索処理が行われるため，検索処理時間が長くなることがあります。

この場合，次のようにSQL文を変更してください。

■検索範囲の絞り込みが行われる例（変更後）

SELECT "T1"."C1" FROM (SELECT * FROM "ADBUSER01"."ARCHIVE-T1"
                         WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
                         AND "C1"='P001') AS "DT"
                 FULL OUTER JOIN "T1"
                 ON "DT"."C1" = "T1"."C1"
  WHERE "RECORD-DAY" BETWEEN DATE'2016/01/15' AND DATE'2016/02/15'
  AND "C1"='P001'

［説明］

下線部のように，アーカイブレンジ列を指定した探索条件を明示的に指定した導出表に書き換えます。上記のようにSQL文を変更すると，アーカイブレンジ列の日時情報を使用した検索範囲の絞り込みが行われます。

5.12.4　アーカイブマルチチャンク表を検索するSQL文の等価変換

次に示す条件をすべて満たす場合，アーカイブマルチチャンク表を検索するSQL文はHADBサーバによって自動的に変換（等価変換）されます。

アーカイブされているデータを検索する場合

WHERE句の探索条件にアーカイブレンジ列を指定した条件を指定している場合

WHERE句に指定した探索条件が，「5.12.2　アーカイブレンジ列の日時情報を使用した検索範囲の絞り込み」で説明している規則を満たしている場合

メモ

等価変換後のSQL文が，アクセスパスの情報に出力されます。

等価変換後のSQL文に対してSQL文の規則が適用されます。

等価変換の例を次に示します。

指定したSELECT文の例

SELECT * FROM "ARCHIVE-T1"
    WHERE "RECORD-DAY" BETWEEN DATE'2015/11/01' AND DATE'2016/01/31'
    AND "C1"='P001'

SELECT文による検索範囲

等価変換されたSELECT文の例

SELECT * FROM
  (SELECT * FROM "ARCHIVE-T1"                             ...1
   UNION ALL                                              ...2
   SELECT * FROM                                          ...3
     TABLE (ADB_CSVREAD(MULTISET(                         ...4
       SELECT "ARCHIVE_FILE_NAME" FROM
                  "HADB"."LOCATION_TABLE_00020191" AS "LOC"
                 ,"HADB"."STATUS_CHUNKS" AS "SCK"
         WHERE "RANGE_MAX" >= DATE'2015/11/01'            ...5
           AND "RANGE_MIN" <= DATE'2016/01/31'            ...5
           AND "SCK"."TABLE_SCHEMA" = 'ADBUSER01'
           AND "SCK"."TABLE_NAME" = 'ARCHIVE-T1'
           AND "SCK"."CHUNK_ID" = "LOC"."CHUNK_ID"
           AND "SCK"."CHUNK_STATUS" IS NULL
       )
       ,'中略')
     ) AS "TBLFUNC_00020191" ("C1" VARCHAR(10), "C2" INT, "RECORD_DAY" DATE)   ...6
  )
    WHERE "RECORD_DAY" BETWEEN DATE'2015/11/01' AND DATE'2016/01/31'
    AND "C1"='P001'

［説明］

この例では，アーカイブされているデータと，アーカイブされていないデータを検索しています。この例では，アーカイブされているデータを検索する問合せと，アーカイブされていないデータを検索する問合せに書き換えられ，この2つの問合せの和集合（UNION ALL）を求めています。

アーカイブされていないデータを検索する問合せです。

1.と3.の問合せの和集合（UNION ALL）を求めています。

アーカイブされているデータを検索する問合せです。

ADB_CSVREAD関数に変換されて，アーカイブされているデータが格納されているアーカイブファイルを読み込んでいます。

WHERE句に指定した探索条件を基に，ロケーション表を検索する探索条件に書き換えています。※

TBLFUNC_00020191は，表関数導出表の相関名です。相関名は次の規則に従って決定されます。

TBLFUNC_nnnnnnnn

nnnnnnnn：アーカイブマルチチャンク表の表IDを16進数に変換した8桁の文字列（0〜9，A〜F）

注※

ロケーション表を検索する探索条件に書き換える例を次に示します。

（例1）

（例2）

RANGE_MAX

ロケーション表の列です。アーカイブファイルごとのアーカイブレンジ列の値の最大値が格納されています。

RANGE_MIN

ロケーション表の列です。アーカイブファイルごとのアーカイブレンジ列の値の最小値が格納されています。

メモ

アーカイブマルチチャンク表を検索するSQL文の等価変換によって生成された内部導出表は，展開の対象になりません。内部導出表の展開については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。

5.13　内部導出表の展開

HADBでは，内部導出表を含む問合せ式を自動的に変更し，内部導出表を効率的に評価しています。内部導出表を含む問合せ式の変更を，内部導出表の展開といいます。内部導出表の展開規則については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。

また，検索時に使用されるインデクスの優先順位と選択規則は，内部導出表の展開後の変更された問合せ式に対して適用されます。検索時に使用されるインデクスについては，「5.2　SQL文の実行時に使用されるB-treeインデクスおよびテキストインデクス」および「5.3　SQL文の実行時に使用されるレンジインデクス」を参照してください。

5.14　検索結果の一括転送

HADBサーバからHADBクライアントに検索結果を転送する際，複数の行を一括して転送できます。大量のデータを検索する場合に効果があります。

検索結果の一括転送の概要を次の図に示します。

図5‒21　検索結果の一括転送の概要

検索結果を一括転送する場合，次に示す設定をしてください。

JDBCドライバを使用している場合

次に示すどれかの方法で一括転送行数を指定してください。

システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_clt_fetch_size

StatementオブジェクトのsetFetchSizeメソッド

ResultSetオブジェクトのsetFetchSizeメソッド

ODBCドライバまたはCLI関数を使用している場合

クライアント定義のadb_clt_fetch_sizeオペランドに一括転送行数を指定してください。

上記の設定をすると，行の取り出しを実行した場合に検索結果が一括転送されます。

留意事項

一括転送の行数に比例して，HADBサーバおよびHADBクライアントが使用するメモリ所要量が増加します。そのため，一括転送を行う場合は，メモリ所要量の再見積もりをしてください。HADBサーバが使用するメモリ所要量については，マニュアルHADB　システム構築・運用ガイドの通常運用時のメモリ所要量の求め方を参照してください。HADBクライアントが使用するメモリ所要量については，「付録C　HADBクライアントのメモリ所要量の見積もり」を参照してください。

一括転送の実行中にエラーが発生した場合，HADBサーバでバッファリングされていた検索結果は破棄され，エラー情報だけがHADBクライアントに返されます。

カーソルを使用した検索中に更新系SQLを実行した場合，タイミングによっては更新操作の結果が検索結果に反映されることがありますが，一括転送を使用しているときは，更新操作の結果が検索結果に反映されることはありません。これは，HADBクライアントに検索結果が残っている間は，HADBサーバへのアクセスを行うことがないためです。

5.15　？パラメタの値の一括転送

HADBクライアントからHADBサーバに？パラメタの値を転送する際，複数の？パラメタの値を一括して転送できます。HADBクライアントからHADBサーバにアクセスし，？パラメタを使用してデータの追加，更新，または削除をする場合に効果があります。

？パラメタの値の一括転送の概要を次の図に示します。

図5‒22　？パラメタの値の一括転送の概要

［説明］

？パラメタの値を行の挿入値として，複数の行の挿入（INSERT文）を実行する場合，通常の？パラメタの値の転送処理では，？パラメタの値を1組（1つの行に挿入する？パラメタの値）ずつHADBサーバに転送します。

一方，？パラメタの値の一括転送処理では，2組以上の？パラメタの値をまとめて一括転送します。これによって，通信オーバヘッドが少なくなり，その分APの実行時間が短縮されます。

なお，この図では行の挿入（INSERT文）を例にしていますが，UPDATE文またはDELETE文についても，？パラメタの値を一括転送できます。

JDBCドライバを使用している場合は，PreparedStatementクラスのexecuteBatchメソッドまたはexecuteLargeBatchメソッドでSQL文を実行すると，？パラメタの値が一括転送されます。

CLI関数を使用している場合は，次に示す流れでSQL文を実行すると，？パラメタの値が一括転送されます。

INSERT文，UPDATE文，またはDELETE文を前処理する

a_rdb_SQLBindArrayParams()で，？パラメタの一括関連づけをする

1.で前処理した文ハンドルを使用して，a_rdb_SQLExecute()でSQL文を実行する

ODBCドライバを使用している場合は，？パラメタの値の一括転送は使用できません。

留意事項

SQL文の実行中にエラーが発生してロールバックが実行された場合，処理結果行数は破棄され，エラー情報だけがHADBクライアントに返却されます。

？パラメタの値を一括転送すると，HADBサーバおよびHADBクライアントが使用するメモリ所要量が増加するため，メモリ所要量の再見積もりをしてください。HADBサーバが使用するメモリ所要量については，マニュアルHADB　システム構築・運用ガイドの通常運用時のメモリ所要量の求め方を参照してください。HADBクライアントが使用するメモリ所要量については，「付録C　HADBクライアントのメモリ所要量の見積もり」を参照してください。

スカラ関数RANDOMCURSORを指定したSQL文に対して，？パラメタの値の一括転送を実行した場合，スカラ関数RANDOMCURSORは？パラメタの1組ごとに擬似乱数を生成します。

5.16　SQLパラレル実行機能が適用される条件

次の条件をすべて満たす場合に，検索系SQL（SELECT文）にSQLパラレル実行機能が適用されます。

SQLパラレル実行機能については，マニュアルHADB　システム構築・運用ガイドのSQLパラレル実行機能を参照してください。

■SQLパラレル実行機能を使用するための条件

次のどちらかの条件を満たす必要があります。

クライアント定義のadb_clt_sql_parallel_execオペランドにYを指定していること。

SQL文にSQLパラレル実行指定を指定していること。

■実行環境に関する条件

次の2つの条件を満たす必要があります。

サーバ定義に関する条件

次の条件をすべて満たす必要があります。

サーバ定義のadb_sys_uthd_numオペランドに0を指定していないこと。

サーバ定義，またはクライアント定義のadb_sql_exe_max_rthd_numオペランドに0を指定していないこと。

サーバ定義のadb_sys_max_parallel_exec_numオペランドに0を指定していないこと。

検索系SQLを実行するトランザクションに関する条件

次の条件をすべて満たす必要があります。

トランザクションアクセスモードが読み取り専用モードであること。

トランザクション隔離性水準がREAD COMMITTEDであること。

■検索対象表に関する条件

検索系SQLの検索対象表（検索系SQLのFROM句に指定する実表）が，次の条件をすべて満たす必要があります。

検索対象表がカラムストア表であること。

検索対象表がマルチチャンク表であること。

バージョン04-03以降のHADBサーバで，検索対象表のコスト情報を収集していること。

検索対象表を格納しているデータ用DBエリアが，2つ以上のDBエリアファイルで構成されていること。

■SQL文に関する条件

次の条件をすべて満たす必要があります。

SQL文がSELECT文であること。

SQL文に集合演算を指定していないこと。

SQL文に副問合せを指定していないこと。

■SQL文中の問合せ指定に関する条件

次の6つの条件を満たす必要があります。

SELECT DISTINCTが指定されていないこと。

ただし，SELECT DISTINCTが指定されている場合でも，HADBサーバがSELECT DISTINCTの実行は不要と判断したときは，SQLパラレル実行機能が適用されます。

FROM句には，実表が1つだけ指定されていること。または，実表1つと，実表に対する集まり導出表だけが指定されていること。

GROUP BY句の指定がある場合，次の条件をすべて満たすこと。

グループ化方式としてグローバルハッシュグループ化が適用されていること。

集合関数が指定されている場合，次のどれかだけが指定されていること。

・集合関数COUNT(*)

・集合関数MIN

・集合関数MAX

・ALL集合関数COUNT

・ALL集合関数SUM

・ALL集合関数AVG

GROUP BY句の指定がない場合，次の条件をすべて満たすこと。

次の集合関数のどれかが1つ以上指定されていること。

・集合関数COUNT(*)

・集合関数MIN

・集合関数MAX

・ALL集合関数COUNT

・ALL集合関数SUM

・ALL集合関数AVG

ORDER BY句が指定されていて，ソートキーに集合関数を含む値式が指定されている場合，その値式が選択式に指定されていること。

HAVING句の指定があり，HAVING句の探索条件中に集合関数が指定されている場合，次のどれかだけが指定されていること。

集合関数COUNT(*)

集合関数MIN

集合関数MAX

ALL集合関数COUNT

ALL集合関数SUM

ALL集合関数AVG

値式は，次の条件をすべて満たすこと。

？パラメタを指定していないこと。

日時情報取得関数を指定していないこと。

ユーザ情報取得関数を指定していないこと。

次のスカラ関数を指定していないこと。

・RANDOM

・RANDOM_NORMAL

・RANDOMCURSOR

・RANDOMROW

同義語検索指定を指定したスカラ関数CONTAINSを指定していないこと。

ウィンドウ関数を指定していないこと。

重要

上記の条件をすべて満たしても，SQLパラレル実行機能を有効に利用できないとHADBサーバが判断した場合，検索系SQLにSQLパラレル実行機能は適用されません。

adbexportコマンドのSQL記述ファイルに指定したSQL文については，SQLパラレル実行機能は適用されません。

6　APのチューニング

この章では，アクセスパスの見方について説明します。

6.1　アクセスパスの見方（SQL文の実行計画の見方）

ここでは，アクセスパス（SQL文の実行計画）に出力される情報と，その見方について説明します。

6.1.1　アクセスパスとは

アクセスパスとは，HADBがSQL文を実行する際の実行計画のことです。アクセスパスを確認することで，実行するSQL文がどのように処理されるかを確認できます。

(1)　アクセスパス情報の表示例

アクセスパス情報の表示例を次の図に示します。

図6‒1　アクセスパス情報の表示例

［説明］

アクセスパス情報には，ツリー表示，詳細表示，および特定情報表示が表示されます。

ツリー表示

表の検索方式，表の結合方式，作業表に関する情報などがツリー形式で表示されます。関連する項目がツリー状に表示されます。

問合せごとにアクセスパス情報が表示されます。各問合せには，問合せツリー番号が割り振られます。

ツリー表示のヘッダとして<<Tree View>>が表示されます。

詳細表示

ツリー表示で表示された項目の詳細情報が表示されます。ツリー表示に表示されているツリー行番号と，詳細情報に表示されているツリー行番号が対応しています。上記の例では，ツリー表示に表示されているツリー行番号7の詳細情報が，詳細表示に表示されています。

詳細表示のヘッダとして<<Detail >>が表示されます。

コスト情報表示

SQL文中で参照される実表のうち，コスト情報が取得されている実表に関する情報（表コスト情報）が表示されます。

コスト情報が取得されている実表の表名，コスト情報を取得したときのHADBサーバのバージョン，コスト情報を取得した日時が表示されます。

コスト情報表示のヘッダとして<<COST Info>>が表示されます。

特定情報表示

特定情報表示には，SQL文の特定情報が表示されます。SQL文の特定情報には，アクセスパスの統計情報を取得したSQL文を特定するための情報が表示されます。ここに表示された情報を基に，アクセスパス情報の出力結果とアクセスパスの統計情報の出力結果を対応付けることができます。

特定情報表示のヘッダとして<<SQL Info >>が表示されます。

アクセスパスの統計情報については，マニュアルHADB　システム構築・運用ガイドのアクセスパスの統計情報の出力例と出力項目を参照してください。

メモ

詳細表示およびコスト情報表示は，該当する情報がない場合は出力されません。

■問合せツリー，問合せツリー番号，ツリー行番号

［説明］

問合せツリー

アクセスパス情報は，問合せ（問合せ指定および表値構成子）ごとに問合せツリーの形式で出力されます。

問合せツリー番号

各問合せツリーを識別するために，問合せツリーごとに番号（問合せツリー番号）が割り振られます。

副問合せに対応する問合せツリーの場合は，問合せツリー番号が2以降になります。ただし，次のどちらかの条件を満たす場合は，副問合せに対応する問合せツリーであっても，問合せツリー番号が1以降になります。

INSERT文にVALUESを指定し，VALUES中に副問合せを指定した場合

PURGE CHUNK文中に副問合せを指定した場合

メモ

実行するSQL文によっては，問合せツリー番号は1，2，…の順に出力されないことがあります。

SQL文中の問合せに含まれない部分の問合せツリーの場合は，問合せツリー番号が0になります。

ツリー行番号

ツリーで表示される行ごとに割り振られた番号です。

(2)　アクセスパスの出力対象となるSQL文

アクセスパスの出力対象となるSQL文を次に示します。

SELECT文

UPDATE文

INSERT文

次に示す場合にアクセスパスが出力されます。

INSERT文中に問合せ式本体を指定している場合

INSERT文中にVALUESを指定していて，かつ副問合せを指定している場合

DELETE文

PURGE CHUNK文

PURGE CHUNK文中に副問合せを指定した場合にアクセスパスが出力されます。

上記のSQL文を実行するごとに，アクセスパスが出力されます。

6.1.2　アクセスパスを確認するには

アクセスパスを確認するには次に示す2つの方法があります。

adbsqlサブコマンドの#SET OPT REPORTを実行してアクセスパス情報を確認する

SQLトレース情報中に出力されたアクセスパス情報を確認する

(1)　#SET OPT REPORTを実行してアクセスパス情報を確認する方法

adbsqlコマンドの#SET OPT REPORTで，アクセスパス情報を表示できます。アクセスパス情報の表示手順を次に示します。

手順

adbsqlコマンドを実行する

adbsqlサブコマンドの#SET OPT REPORTを実行する

#SET OPT REPORT ON TYPE=PATH EXEC=PREPARE;

メモ

この例では，SQL文の実行はしないで，アクセスパス情報だけを表示するため，EXEC=PREPAREを指定しています。SQL文を実行して，かつアクセスパス情報を表示したい場合は，EXEC=PREPAREを指定しないでください。

SQL文を実行する

SELECT * FROM "T1" WHERE "C1" =1 AND "C2" > 0;

上記のSQL文を実行すると，アクセスパス情報が表示されます。

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-TABLE SCAN(ADBUSER01.T1) -USING COST

<<Detail   >>

QUERY : 1
     3 TABLE SCAN(ADBUSER01.T1)
       INDEX NAME        : RIDX
        INDEX TYPE       : RANGE
        SKIP COND        : CHUNK AND SEGMENT
        INDEX COLUMN     : C1

<<COST Info>>

TABLE : ADBUSER01.T1
       COLLECT VERSION   : 05-03
       COLLECT TIME      : 2020-05-25 13:36:46

<<SQL Info >>

Version           : 05-03 May 25 2020 12:51:53
Transaction ID    : 1
Connection Number : 1
SQL Serial Number : 1

なお，この例での表およびレンジインデクスの定義は，次のとおりとします。

CREATE TABLE "T1"("C1" INTEGER,"C2" INTEGER) IN "DBAREA01"
CREATE INDEX "RIDX" ON "T1"("C1") IN "DBAREA02" EMPTY INDEXTYPE RANGE

(2)　SQLトレース情報中に出力されたアクセスパス情報を確認する方法

SQLトレースファイルに出力されたSQLトレース情報を，テキストエディタを使用して参照してください。SQLトレースファイルのファイル名を次に示します。

$ADBDIR/spool/adbsqltrc01.log〜adbsqltrc08.log

SQLトレース情報に出力されるアクセスパス情報の例を次に示します。

（例）

[SQL]
SELECT * FROM "T1" WHERE "C1"=? AND "C2"=? AND "C3"=?

[access path]
<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-TABLE SCAN(T1)

SQLトレース情報については，マニュアルHADB　システム構築・運用ガイドのSQLトレース機能の運用を参照してください。

6.1.3　アクセスパスの見方の例

(1)　例1

表およびB-treeインデクスの定義

CREATE TABLE "T1"("C1" INT,"C2" DEC,"C3" CHAR(10)) IN "DBAREA01"
CREATE INDEX "IDX_C1" ON "T1"("C1") IN "DBAREA02" EMPTY
CREATE INDEX "IDX_C3" ON "T1"("C3") IN "DBAREA02" EMPTY
CREATE TABLE "T2"("C1" INT,"C2" DEC,"C3" CHAR(10)) IN "DBAREA01"

実行したSQL文

SELECT * FROM "T1","T2"
    WHERE "T1"."C1"="T2"."C2"

アクセスパスの表示例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT                                  ...1
     3   +-NESTED LOOP JOIN                                ...2
     4     |-TABLE SCAN(ADBUSER01.T2)                      ...3
     5     +-INDEX SCAN(ADBUSER01.T1) -ORDER -USING COST   ...4

<<Detail   >>

QUERY : 1
     5 INDEX SCAN(ADBUSER01.T1)                 ...5
       INDEX NAME        : IDX_C1               ...6
        INDEX TYPE       : B-TREE               ...7
        INDEX COLUMN     : C1 ASC (=)           ...8

<<COST Info>>

TABLE : ADBUSER01.T1
       COLLECT VERSION   : 05-03
       COLLECT TIME      : 2020-05-25 13:36:46

<<SQL Info >>

Version           : 05-03 May 25 2020 12:51:53
Transaction ID    : 6197
Connection Number : 3
SQL Serial Number : 2

［説明］

SELECT文が実行されることを示しています。

表の結合処理で，ネストループジョインが実行されることを示しています。

表T2の検索処理で，テーブルスキャンが実行されることを示しています。

表T1の検索処理で，インデクススキャンが実行されることを示しています。

「-ORDER」が表示されているため，非順序実行方式が適用されないで，順序実行方式が適用されることを示しています。

「-USING COST」が表示されているため，表T1に関するコスト情報が収集されていることを示しています。

表T1に対するインデクススキャンの詳細情報を示しています。

インデクススキャンの実行で，B-treeインデクスIDX_C1が使用されることを示しています。

インデクスの種別が表示されます。B-TREEは，B-treeインデクスであることを示しています。

B-treeインデクスIDX_C1の情報を示しています。

C1：B-treeインデクスIDX_C1のインデクス構成列

ASC：キー値の並び順

(=)：サーチ条件の指定

(2)　例2

表の定義

CREATE TABLE "T1"("C1" INT,"C2" DEC,"C3" CHAR(10)) IN "DBAREA01"
CREATE TABLE "T2"("C1" INT,"C2" DEC,"C3" CHAR(10)) IN "DBAREA01"

実行したSQL文

SELECT * FROM "T1"
     WHERE "C1"=ANY(SELECT "C2" FROM "T2" WHERE "C1"="T1"."C2")

アクセスパスの表示例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT                               ...1
     3   +-TABLE SCAN(ADBUSER01.T1) -USING COST         ...2
     4     +-SUBQUERY LOOP                              ...3
     5       |-CREATE LOCAL WORK TABLE(WORK TABLE 1)    ...4
     6       | +-QUERY SCAN(QUERY 2)                    ...5
     7       +-WORK TABLE SCAN(WORK TABLE 1)            ...6
     8
     9 QUERY : 2                                        ...7
    10   SUBQUERY LOOP                                  ...8
    11   +-TABLE SCAN(ADBUSER01.T2)                     ...9

<<COST Info>>

TABLE : ADBUSER01.T1
       COLLECT VERSION   : 05-03
       COLLECT TIME      : 2020-05-25 13:36:46

<<SQL Info >>

Version           : 05-03 May 25 2020 12:51:53
Transaction ID    : 6197
Connection Number : 3
SQL Serial Number : 3

［説明］

SELECT文が実行されることを示しています。

表T1の検索処理で，テーブルスキャンが実行されることを示しています。

「-USING COST」が表示されているため，表T1に関するコスト情報が収集されていることを示しています。

限定述語（ANY）に指定した副問合せの処理方式で，ネストループ作業表実行またはネストループ行値実行が適用されることを示しています。

副問合せの処理で，ローカル作業表が作成されることを示しています。

問合せ検索が実行されることを示しています。ツリー行番号9に表示されている「QUERY : 2」の問合せ検索を行うことを示しています。

副問合せの処理で，作業表の検索が実行されることを示しています。

副問合せの詳細情報を示しています。

副問合せの処理方式で，ネストループ作業表実行またはネストループ行値実行が適用されることを示しています。

表T2の検索処理で，テーブルスキャンが実行されることを示しています。

6.1.4　ツリー表示に出力される情報

ツリー表示には，表の検索方式，表の結合方式，副問合せの処理方式などが，問合せごとにツリー形式で表示されます。

(1)　実行したSQL文の種類

次のどれかの情報が出力されます。

SELECT STATEMENT

SELECT文が実行されることを示しています。

UPDATE STATEMENT

UPDATE文が実行されることを示しています。

INSERT STATEMENT

INSERT文が実行されることを示しています。

DELETE STATEMENT

DELETE文が実行されることを示しています。

PURGE CHUNK STATEMENT

PURGE CHUNK文が実行されることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-TABLE SCAN(ADBUSER01.T2)

［説明］

SELECT文が実行されることを示しています。

(2)　副問合せの処理方式

次のどれかの情報が出力されます。

SUBQUERY

ネストループ実行，ハッシュ実行以外の副問合せが適用されることを示しています。

SUBQUERY LOOP

副問合せの処理方式で，ネストループ作業表実行またはネストループ行値実行が適用されることを示しています。

SUBQUERY HASH

副問合せの処理方式で，ハッシュ実行が適用されることを示しています。

SUBQUERY HASHの後ろにFILTERが表示されている場合，ハッシュ実行の際にハッシュフィルタが適用されることを示しています。

副問合せの処理方式については，「5.6　副問合せの処理方式」を参照してください。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-SUBQUERY HASH -FILTER
     4     |-QUERY SCAN(QUERY 2)
     5     +-TABLE SCAN(ADBUSER01.T1)
     6
     7 QUERY : 2
     8   SUBQUERY HASH
     9   +-TABLE SCAN(ADBUSER01.T2)

［説明］

副問合せの処理方式で，ハッシュ実行が適用されることを示しています。

ツリー行番号3のSUBQUERY HASHの後ろにFILTERが表示されているため，ハッシュ実行の際にハッシュフィルタが適用されることを示しています。

(3)　導出表の指定

次の情報が出力されます。

DERIVED TABLE(相関名)

次に示すどれかが指定されていることを示しています。

導出表

ビュー表（相関名の指定がある場合）

問合せ名（相関名の指定がある場合）

DERIVED TABLE(問合せ名)

問合せ名（相関名の指定がない場合）が指定されていることを示しています。

DERIVED TABLE(表識別子)

ビュー表（相関名の指定がない場合）が指定されていることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-DERIVED TABLE(D1)
     4     +-QUERY SCAN(QUERY 2)
     5
     6 QUERY : 2
     7   DERIVED TABLE(D1)
     8   |-CREATE LOCAL WORK TABLE(WORK TABLE 1)
     9   | |-TABLE SCAN(ADBUSER01.T2)
    10   | |-SORTING BYTE
    11   | +-LIMIT 10
    12   |-WORK TABLE SCAN(WORK TABLE 1)
    13   +-LIMIT 10

［説明］

SELECT文中に導出表が指定されていることを示しています。（　）内には，相関名が表示されます。

(4)　集合演算の指定

次の情報が出力されます。

SET OPERATION

集合演算が指定されていることを示しています。

メモ

次に示す場合に，上記の情報が表示されることがあります。

結合表にFULL OUTER JOINを指定した場合

アーカイブマルチチャンク表を指定した場合

アーカイブマルチチャンク表を検索する際，SQL文の等価変換によって集合演算を指定したSQL文に自動的に書き換えられることがあります。詳細については，「5.12.4　アーカイブマルチチャンク表を検索するSQL文の等価変換」を参照してください。

OR条件に関する等価変換（集合演算UNION ALLを指定した導出表への等価変換）が適用された場合

FROM句にコンマ結合または結合表が指定されていて，かつWHERE句にOR条件が指定されている場合，集合演算UNION ALLを指定した導出表への等価変換によってSQL文が自動的に書き換えられることがあります。詳細については，「5.11.3　OR条件に関する等価変換（集合演算UNION ALLを指定した導出表への等価変換）」を参照してください。

出力例

<<Tree View>>

     1 QUERY : 0
     2   SELECT STATEMENT
     3   +-SET OPERATION
     4     |-QUERY SCAN(QUERY 1)
     5     +-QUERY SCAN(QUERY 2)
     6
     7 QUERY : 1
     8   QUERY
     9   +-TABLE SCAN(ADBUSER01.T1)
    10
    11 QUERY : 2
    12   QUERY
    13   +-TABLE SCAN(ADBUSER01.T2)

［説明］

SELECT文中に集合演算が指定されていることを示しています。

なお，SET OPERATIONの後ろに，次の情報が表示されることがあります。

RECURSIVE

再帰的問合せが実行されることを示しています。

出力例

<<Tree View>>

     1 QUERY : 3
     2   SELECT STATEMENT
     3   +-DERIVED TABLE(REC)
     4     +-SET OPERATION -RECURSIVE
     5       |-QUERY SCAN(QUERY 1)
     6       +-QUERY SCAN(QUERY 2)
     7
     8 QUERY : 1
     9   QUERY
    10   |-CREATE GLOBAL WORK TABLE(WORK TABLE 1)
    11   | +-TABLE SCAN(ADBUSER01.T1)
    12   +-WORK TABLE SCAN(WORK TABLE 1)
    13
    14 QUERY : 2
    15   QUERY
    16   |-CREATE GLOBAL WORK TABLE(WORK TABLE 2)
    17   | +-WORK TABLE SCAN(WORK TABLE 2)
    18   +-WORK TABLE SCAN(WORK TABLE 2)

［説明］

再帰的問合せが実行されることを示しています。

SET OPERATIONに続いて表示される最初の問合せ情報が，アンカーメンバの問合せ情報です。次の問合せ情報が，再帰的メンバの問合せ情報です。上記の出力例の場合，QUERY 1がアンカーメンバの問合せ情報で，QUERY 2が再帰的メンバの問合せ情報です。

(5)　集合演算方式指定

次の情報が出力されます。

SPECIFIC

集合演算方式指定が有効になることを示しています。

集合演算方式指定については，マニュアルHADB　SQLリファレンスの問合せ式の指定形式および規則を参照してください。

出力例

<<Tree View>>

     1 QUERY : 0
     2   SELECT STATEMENT
     3   +-SET OPERATION -SPECIFIC
     4     |-QUERY SCAN(QUERY 1)
     5     +-QUERY SCAN(QUERY 2)
     6
     7 QUERY : 1
     8   QUERY
     9   |-CREATE LOCAL WORK TABLE(WORK TABLE 1)
    10   | |-TABLE SCAN(ADBUSER01.T1)
    11   | +-SORTING BYTE -DISTINCT
    12   +-WORK TABLE SCAN(WORK TABLE 1)
    13
    14 QUERY : 2
    15   QUERY
    16   |-CREATE LOCAL WORK TABLE(WORK TABLE 2)
    17   | |-TABLE SCAN(ADBUSER01.T2)
    18   | +-SORTING BYTE -DISTINCT
    19   +-WORK TABLE SCAN(WORK TABLE 2)

［説明］

SELECT文に指定した集合演算方式指定が有効になることを示しています。

(6)　SQLパラレル実行機能の適用情報

次のどちらかの情報が出力されます。

PARALLEL

検索系SQLに対して，SQLパラレル実行機能が適用されることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT -PARALLEL
     3   |-TABLE SCAN(ADBUSER01.T1) -COLUMN STORE -USING COST -UNNEST
     4   +-GROUPING

［説明］

このSELECT文に対してSQLパラレル実行機能が適用されることを示しています。

PARALLEL DISABLED

検索系SQLに対して，SQLパラレル実行機能が適用されないことを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT -PARALLEL DISABLED
     3   |-TABLE SCAN(ADBUSER01.T1) -COLUMN STORE -USING COST
     4   +-GROUPING -COLUMN

［説明］

このSELECT文に対してはSQLパラレル実行機能が適用されないことを示しています。

なお，PARALLELまたはPARALLEL DISABLEDが出力されるのは，次のどちらかのSQLパラレル実行機能を使用する指定をしている場合だけです。

クライアント定義のadb_clt_sql_parallel_execオペランドにYを指定している

SQL文中にSQLパラレル実行指定を指定している

(7)　問合せの種類

次の情報が出力されます。

QUERY

副問合せおよび導出表以外の問合せ式本体が指定されていることを示しています。

メモ

UPDATE文の更新対象表，またはDELETE文の削除対象表にアーカイブマルチチャンク表を指定した場合，ロケーション表およびシステム表（STATUS_CHUNKS）を検索する問合せが表示されることがあります。

出力例

<<Tree View>>

     1 QUERY : 0
     2   INSERT STATEMENT
     3   +-QUERY SCAN(QUERY 1)
     4
     5 QUERY : 1
     6   QUERY
     7   +-TABLE SCAN(ADBUSER01.T2) -ORDER

［説明］

INSERT文中に問合せ式本体が指定されていることを示しています。

(8)　作業表の作成情報

次のどちらかの情報が出力されます。

CREATE GLOBAL WORK TABLE (WORK TABLE 作業表番号)

グローバル作業表が作成されることを示しています。

CREATE LOCAL WORK TABLE (WORK TABLE 作業表番号)

ローカル作業表が作成されることを示しています。

作業表番号とは，作業表を一意に識別するために割り当てられた番号のことです。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-SUBQUERY
     4   | +-CREATE GLOBAL WORK TABLE(WORK TABLE 1)
     5   |   |-QUERY SCAN(QUERY 2)
     6   |   +-SORTING BYTE
     7   +-INDEX SCAN(ADBUSER01.T1)
     8     +-SUBQUERY
     9       +-WORK TABLE SCAN(WORK TABLE 1)
    10
    11 QUERY : 2
    12   SUBQUERY
    13   +-TABLE SCAN(ADBUSER01.T2)

［説明］

副問合せの処理で，グローバル作業表が作成されることを示しています。

(9)　副問合せ処理方式指定

次の情報が出力されます。

SPECIFIC

副問合せ処理方式指定が有効になることを示しています。

副問合せ処理方式指定については，マニュアルHADB　SQLリファレンスの副問合せの指定形式および規則を参照してください。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-SUBQUERY -SPECIFIC
     4   | +-CREATE GLOBAL WORK TABLE(WORK TABLE 1)
     5   |   +-QUERY SCAN(QUERY 2)
     6   +-TABLE SCAN(ADBUSER01.T1(A))
     7     +-SUBQUERY
     8       +-WORK TABLE SCAN(WORK TABLE 1)
     9
    10 QUERY : 2
    11   SUBQUERY
    12   +-TABLE SCAN(ADBUSER01.T2)

［説明］

SELECT文に指定した副問合せ処理方式指定が有効になることを示しています。

(10)　副問合せ処理委譲指定

次の情報が出力されます。

DELEGATION

副問合せ処理委譲指定が有効になることを示しています。

副問合せ処理委譲指定については，マニュアルHADB　SQLリファレンスの副問合せの指定形式および規則を参照してください。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-TABLE SCAN(ADBUSER01.T1(A))
     4     +-SUBQUERY LOOP -DELEGATION -USING CACHE
     5       +-QUERY SCAN(QUERY 2)
     6
     7 QUERY : 2
     8   SUBQUERY LOOP
     9   |-SUBQUERY LOOP -SPECIFIC -DELEGATION
    10   | +-QUERY SCAN(QUERY 3)
    11   +-TABLE SCAN(ADBUSER01.T1(B))
    12
    13 QUERY : 3
    14   SUBQUERY LOOP
    15   +-TABLE SCAN(ADBUSER01.T1(C))

［説明］

SELECT文に指定した副問合せ処理委譲指定が有効になることを示しています。

(11)　副問合せのキャッシュ使用情報

次の情報が出力されます。

USING CACHE

副問合せの結果を格納するためのキャッシュが使用されることを示しています。副問合せの処理方式でネストループ行値実行が適用された場合に，キャッシュが使用されることがあります。

ネストループ行値実行については，「5.6.3　外への参照列を含む副問合せの処理方式とは」の「(2)　ネストループ行値実行」を参照してください。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-TABLE SCAN(ADBUSER01.T1)
     4     +-SUBQUERY LOOP -USING CACHE
     5       +-QUERY SCAN(QUERY 2)
     6
     7 QUERY : 2
     8   SUBQUERY LOOP
     9   +-TABLE SCAN(ADBUSER01.T2)

［説明］

副問合せの処理方式でネストループ行値実行が適用されて，副問合せの結果を格納するためのキャッシュが使用されることを示しています。

(12)　表関数導出表の指定

次の情報が出力されます。

TABLE FUNCTION DERIVED TABLE(相関名)

表関数導出表が指定されていることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-TABLE FUNCTION DERIVED TABLE(T4)
     4     +-TABLE SCAN(ADBUSER01.T4)

［説明］

SELECT文中に表関数導出表が指定されていることを示しています。（　）内には，相関名が表示されます。

(13)　重複排除の処理方式

次の情報が出力されます。

GLOBAL HASH UNIQUE

次のどれかの処理によって検索結果の重複を排除することを示しています。

集合演算の処理方式のハッシュ実行

集合演算の処理方式のハッシュ実行については，「5.8.1　ハッシュ実行」を参照してください。

SELECT DISTINCTの処理方式のハッシュ実行

SELECT DISTINCTの処理方式のハッシュ実行については，「5.9.1　ハッシュ実行」を参照してください。

グループ化の処理方式のグローバルハッシュグループ化

グループ化の処理方式のグローバルハッシュグループ化については，「5.7.1　ハッシュグループ化とは」の「(2)　グローバルハッシュグループ化」を参照してください。

また，ハッシュテーブル領域で処理できない行があるため，作業表が作成される可能性がある場合にもGLOBAL HASH UNIQUEが表示されます。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-KEY SCAN(ADBUSER01.T1)
     4   |-GLOBAL HASH UNIQUE
     5   +-GROUPING

［説明］

グループ化の処理方式のグローバルハッシュグループ化を適用して検索結果の重複を排除することを示しています。

(14)　グループ化の処理方式

次のどれかの情報が出力されます。

GROUPING

作業表を使用しないグループ化が実行されることを示しています。

SORT GROUPING

ソートグループ化が実行されることを示しています。

GLOBAL HASH GROUPING

グローバルハッシュグループ化が実行されることを示しています。また，ハッシュテーブル領域で処理できない行がある場合，作業表を作成することがあることも示しています。

LOCAL HASH GROUPING

ローカルハッシュグループ化が実行されることを示しています。また，ハッシュグループ化領域で処理できない行がある場合，作業表を作成することがあることも示しています。

グループ化の処理方式については，「5.7　グループ化の処理方式」を参照してください。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-TABLE SCAN(ADBUSER01.T1)
     4   +-GLOBAL HASH GROUPING

［説明］

グループ化の処理方式で，グローバルハッシュグループ化が実行されることを示しています。

なお，グループ化の処理方式の各情報の後ろに，次の情報が表示されることがあります。

SPECIFIC

GROUP BY句に指定したグループ化方式指定が有効になることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-CREATE LOCAL WORK TABLE(WORK TABLE 1)
     4   | |-TABLE SCAN(ADBUSER01.T1)
     5   | +-SORTING BYTE
     6   |-WORK TABLE SCAN(WORK TABLE 1)
     7   +-LOCAL HASH GROUPING -SPECIFIC

［説明］

GROUP BY句に指定したグループ化方式指定が有効になり，グループ化の処理方式にLOCAL HASH GROUPING（ローカルハッシュグループ化）が適用されることを示しています。グループ化方式指定については，マニュアルHADB　SQLリファレンスのGROUP BY句の指定形式および規則を参照してください。

INDEX

B-treeインデクスの特性を利用したグループ化の処理が実行されることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-KEY SCAN(ADBUSER01.T1)
     4   +-GROUPING -INDEX

［説明］

B-treeインデクスの特性を利用したグループ化の処理が，表T1に対して実行されることを示しています。

COLUMN

カラムストア表の特性を利用したグループ化の処理が実行されることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-TABLE SCAN(ADBUSER01.T1) -COLUMN STORE
     4   +-GROUPING -COLUMN

［説明］

カラムストア表の特性を利用したグループ化の処理が，表T1に対して実行されることを示しています。

GROUPING SET

グループ化処理が複数回実行されることを示しています。

出力例

<<Tree View>>
     1 QUERY : 1
     2 SELECT STATEMENT
     3 |-DERIVED TABLE(##DRVTBL_0000000001)
     4 | |-TABLE SCAN(ADBUSER01.T1)
     5 | +-GLOBAL HASH GROUPING -GROUPING SET
     6 +-GLOBAL HASH GROUPING

［説明］

グローバルハッシュグループ化で，グループ化処理が複数回実行されることを示しています。

メモ

引数が異なるDISTINCT集合関数を複数指定した場合に，GROUPING SET（グループ化集合情報）が出力されることがあります。

(15)　HAVING句の指定

次の情報が出力されます。

HAVING

HAVING句が指定されていることを示しています。また，HAVING句を指定していない場合でも，導出表の展開によって表示されることがあります。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-TABLE SCAN(ADBUSER01.T1)
     4   |-GLOBAL HASH GROUPING
     5   +-HAVING

［説明］

SELECT文中にHAVING句が指定されていることを示しています。

(16)　ソート処理の実行

次の情報が出力されます。

SORTING ｛BYTE｜ISO｝

BYTE：バイトコード順に並び替えます。

ISO：ソートコード順（ISO/IEC14651:2011準拠）に並び替えます。

ORDER BY句によるソート処理が実行されることを示しています。

ただし，ORDER BY句を指定した場合でも表示されないときがあります。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-CREATE LOCAL WORK TABLE(WORK TABLE 1)
     4   | |-TABLE SCAN(ADBUSER01.T1)
     5   | +-SORTING BYTE
     6   +-WORK TABLE SCAN(WORK TABLE 1)

［説明］

ORDER BY句の指定によって，ソート処理が実行されることを示しています。

(17)　重複排除の情報

次の情報が出力されます。

DISTINCT

重複排除処理が行われることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2 SELECT STATEMENT
     3 |-CREATE LOCAL WORK TABLE(WORK TABLE 1)
     4 | |-KEY SCAN(ADBUSER01.T1)
     5 | +-SORTING BYTE -DISTINCT
     6 +-WORK TABLE SCAN(WORK TABLE 1)

［説明］

ソート処理の中で，重複排除処理が実行されることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2 SELECT STATEMENT
     3 |-CREATE LOCAL WORK TABLE(WORK TABLE 1)
     4 | |-KEY SCAN(ADBUSER01.T1) -DISTINCT
     5 | +-SORTING BYTE -DISTINCT
     6 +-WORK TABLE SCAN(WORK TABLE 1)

［説明］

キースキャン処理およびソート処理の中で，重複排除処理が実行されることを示しています。

(18)　SELECT重複排除方式指定

次の情報が出力されます。

SPECIFIC

SELECT重複排除方式指定が有効になることを示しています。

SELECT重複排除方式指定については，マニュアルHADB　SQLリファレンスの問合せ指定の指定形式および規則を参照してください。

なお，「(17)　重複排除の情報」（DISTINCT）が出力されない場合は，SELECT重複排除方式指定を指定してもSPECIFICは出力されません。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-CREATE LOCAL WORK TABLE(WORK TABLE 1)
     4   | |-TABLE SCAN(ADBUSER01.T1)
     5   | +-SORTING BYTE -SPECIFIC -DISTINCT
     6   +-WORK TABLE SCAN(WORK TABLE 1)

［説明］

SELECT文に指定したSELECT重複排除方式指定が有効になることを示しています。

(19)　LIMIT句の指定

次の情報が出力されます。

LIMIT 〔｛オフセット行数｜? PARAMETER｝,〕｛リミット行数｜? PARAMETER｝

オフセット行数：

オフセット行数を指定したLIMIT句が指定されていることを示しています。

オフセット行数に定数で0を指定した場合，オフセット行数は表示されません。

リミット行数：

リミット行数を指定したLIMIT句が指定されていることを示しています。

? PARAMETER：

オフセット行数とリミット行数の両方，またはどちらか一方に？パラメタを指定したLIMIT句が指定されていることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-CREATE LOCAL WORK TABLE(WORK TABLE 1)
     4   | |-TABLE SCAN(ADBUSER01.T1)
     5   | |-SORTING BYTE
     6   | +-LIMIT ? PARAMETER,5
     7   |-WORK TABLE SCAN(WORK TABLE 1)
     8   +-LIMIT ? PARAMETER,5

［説明］

オフセット行数に？パラメタを指定し，リミット行数に5を指定したLIMIT句が指定されていることを示しています。

(20)　ウィンドウ関数の指定

次の情報が出力されます。

WINDOW

ウィンドウ関数が指定されていることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-CREATE LOCAL WORK TABLE(WORK TABLE 1)
     4   | |-TABLE SCAN(ADBUSER01.T1)
     5   | +-SORTING BYTE
     6   |-WORK TABLE SCAN(WORK TABLE 1)
     7   +-WINDOW

［説明］

ウィンドウ関数の指定によって，ウィンドウ関数が実行されることを示しています。

(21)　表の検索方式

次のどれかの情報が出力されます。

TABLE SCAN

表の検索処理で，テーブルスキャンが実行されることを示しています。

INDEX SCAN(スキーマ名.表識別子(問合せ名または相関名))

表の検索処理で，インデクススキャンが実行されることを示しています。問合せ名または相関名がある場合は，問合せ名または相関名が表示されます。

KEY SCAN

表の検索処理で，キースキャンが実行されることを示しています。

テーブルスキャン，インデクススキャン，およびキースキャンについては，「5.1　表の検索方式」を参照してください。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-INDEX SCAN(ADBUSER01.T1)

［説明］

表T1の検索処理で，インデクススキャンが実行されることを示しています。

(22)　表データの格納形式

次の情報が出力されます。

COLUMN STORE

表データの格納形式がカラムストア形式であることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-TABLE SCAN(ADBUSER01.T1) -COLUMN STORE

［説明］

表T1のデータの格納形式がカラムストア形式であることを示しています。

(23)　順序実行方式

次の情報が出力されます。

ORDER

非順序実行方式が適用されないで，順序実行方式が適用されることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-NESTED LOOP JOIN
     4     |-TABLE SCAN(ADBUSER01.T2)
     5     +-INDEX SCAN(ADBUSER01.T1) -ORDER

［説明］

表T1の検索処理で，インデクススキャンが順序実行方式で実行されることを示しています。

(24)　インデクス指定

次のどちらかの情報が出力されます。

SPECIFIC

インデクス指定が有効になることを示しています。

SPECIFIC DISABLED

インデクス指定が無効になることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-INDEX SCAN(ADBUSER01.T1) -SPECIFIC

［説明］

SELECT文に指定したインデクス指定が有効になり，表T1の検索処理で，インデクススキャンが実行されることを示しています。

(25)　コスト情報の収集

次の情報が出力されます。

USING COST

表またはインデクスに関するコスト情報が収集されていることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-TABLE SCAN(ADBUSER01.T3) -USING COST

［説明］

表T3に関するコスト情報が収集されていることを示しています。

(26)　集まり導出表の指定

次の情報が出力されます。

UNNEST

集まり導出表が指定されていることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-TABLE SCAN(ADBUSER01.T1) -COLUMN STORE -UNNEST

［説明］

SQL文中に集まり導出表が指定されていることを示しています。

(27)　作業表の検索実行

次の情報が出力されます。

WORK TABLE SCAN(WORK TABLE 作業表番号)

作業表の検索が実行されることを示しています。作業表番号とは，作業表を一意に識別するために割り当てられた番号のことです。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   |-SUBQUERY
     4   | +-CREATE GLOBAL WORK TABLE(WORK TABLE 1)
     5   |   |-QUERY SCAN(QUERY 2)
     6   |   +-SORTING BYTE
     7   +-INDEX SCAN(ADBUSER01.T1)
     8     +-SUBQUERY
     9       +-WORK TABLE SCAN(WORK TABLE 1)
    10
    11 QUERY : 2
    12   SUBQUERY
    13   +-TABLE SCAN(ADBUSER01.T2)

［説明］

副問合せの処理で，作業表の検索が実行されることを示しています。

なお，ORDER BY句を指定したSQL文の実行時に作成された作業表に，FROM句に指定した表の行IDが格納される場合，作業表の検索直後に行IDを使用してデータページからデータを取り出すための検索が実行されることがあります。作業表の用途と構成列については，「5.10　作業表が作成されるSQLを実行する際の考慮点」を参照してください。

(28)　問合せ検索の実行

次の情報が出力されます。

QUERY SCAN(QUERY 問合せツリー番号)

問合せ検索が実行されることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-SUBQUERY HASH
     4     |-QUERY SCAN(QUERY 2)
     5     +-TABLE SCAN(ADBUSER01.T1)
     6
     7 QUERY : 2
     8   SUBQUERY HASH
     9   +-TABLE SCAN(ADBUSER01.T2)

［説明］

問合せ検索が実行されることを示しています。

ツリー行番号7に表示されている「QUERY : 2」の問合せ検索を行うことを示しています。

実行したSELECT文の例

SELECT * FROM "T1" WHERE "C1"=(SELECT "C2" FROM "T2" WHERE "C1"="T1"."C1")

(29)　表の結合方式

次のどちらかの情報が出力されます。

NESTED LOOP JOIN

表の結合処理で，ネストループジョインが実行されることを示しています。

HASH JOIN

表の結合処理で，ハッシュジョインが実行されることを示しています。

HASH JOINの後ろにFILTERが表示されている場合，ハッシュジョインの際にハッシュフィルタが適用されることを示しています。

HASH JOINの後ろにDIVIDEが表示されている場合，ハッシュジョインが分割実行されることを示しています。

2つの表の列を比較する=条件がある場合，ハッシュジョインが実行されることがあります。また，ハッシュテーブル領域で処理できない行がある場合，作業表が作成されることがあります。

表の結合方式については，「5.5　表の結合方式」を参照してください。

出力例（NESTED LOOP JOINの場合）

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-NESTED LOOP JOIN
     4     |-TABLE SCAN(ADBUSER01.T2)
     5     +-INDEX SCAN(ADBUSER01.T1) -ORDER

［説明］

表T1と表T2の結合処理で，ネストループジョインが実行されることを示しています。

表の結合方式がネストループジョインの場合，NESTED LOOP JOINの下位に表示される情報は，外表から順に表示されます。上記の例の場合，ツリー行番号が4の情報が外表の情報で，ツリー行番号が5の情報が内表の情報です。

出力例（HASH JOINの場合）

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-HASH JOIN -FILTER -DIVIDE
     4     |-TABLE SCAN(ADBUSER01.T1)
     5     +-TABLE SCAN(ADBUSER01.T2)

［説明］

表T1と表T2の結合処理で，ハッシュジョインが実行されることを示しています。

表の結合方式がハッシュジョインの場合，HASH JOINの下位に表示される情報は，ハッシュジョインの外表，内表の順に表示されます。上記の例の場合，ツリー行番号が4の情報が外表の情報で，ツリー行番号が5の情報が内表の情報です。

ツリー行番号が3のHASH JOINの後ろにFILTERが表示されているため，ハッシュジョインの際にハッシュフィルタが適用されることを示しています。

ツリー行番号が3のHASH JOINの後ろにDIVIDEが表示されているため，ハッシュジョインが分割実行されることを示しています。

(30)　結合方式指定

次のどちらかの情報が出力されます。

SPECIFIC

結合方式指定が有効になることを示しています。

SPECIFIC DISABLED

結合方式指定が無効になることを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-HASH JOIN -SPECIFIC
     4     |-TABLE SCAN(ADBUSER01.T1(A))
     5     +-TABLE SCAN(ADBUSER01.T2(B))

［説明］

SELECT文に指定した結合方式指定が有効になり，表の結合処理でハッシュジョインが実行されることを示しています。

(31)　表値構成子の検索情報

次の情報が出力されます。

TABLE VALUE CONSTRUCTOR SCAN

表値構成子を検索することを示しています。

出力例

<<Tree View>>

     1 QUERY : 1
     2   SELECT STATEMENT
     3   +-NESTED LOOP JOIN
     4     |-TABLE SCAN(ADBUSER01.T1)
     5     +-DERIVED TABLE(DT)
     6     +-TABLE VALUE CONSTRUCTOR SCAN

［説明］

表値構成子を検索することを示しています。

6.1.5　詳細表示に出力される情報

詳細表示には，次の情報が出力されます。

表の検索方式，インデクス，および集まり導出表に関する情報

表の結合方式に関する情報

集合演算に関する情報

表関数導出表に関する情報

副問合せに関する情報

グループ化に関する情報

なお，詳細表示は，問合せツリーに出力されている問合せに詳細情報がある場合に限り出力されます。

(1)　表の検索方式，インデクス，および集まり導出表に関する情報

表の検索方式，インデクス，および集まり導出表に関する情報の出力形式の例を次に示します。

出力形式の例1

出力形式の例2

(a)　表の検索方式に関する情報

表の検索方式に関する情報には，次のどれかが出力されます。

TABLE SCAN

表の検索処理で，テーブルスキャンが実行されることを示しています。

INDEX SCAN(スキーマ名.表識別子(問合せ名または相関名))

表の検索処理で，インデクススキャンが実行されることを示しています。問合せ名または相関名がある場合は，問合せ名または相関名が表示されます。

KEY SCAN

表の検索処理で，キースキャンが実行されることを示しています。

テーブルスキャン，インデクススキャン，およびキースキャンについては，「5.1　表の検索方式」を参照してください。

出力例

<<Detail   >>

QUERY : 1
     3 INDEX SCAN(ADBUSER01.T1)
       INDEX NAME        : IDX_C1C2
        INDEX TYPE       : B-TREE
        INDEX COLUMN     : C1 ASC (IN)
        INDEX COLUMN     : C2 ASC (>)
       INDEX NAME        : RIDX_C2
        INDEX TYPE       : RANGE
        SKIP COND        : CHUNK (HASH)
        INDEX COLUMN     : C2

［説明］

表T1の検索処理で，インデクススキャンが実行されることを示しています。

(b)　インデクスに関する情報

インデクスに関する情報の出力形式を次に示します。

出力形式（B-treeインデクスの場合）

INDEX NAME        : B-treeインデクス名　（一意性制約情報）
 INDEX TYPE       : インデクスの種別
 INDEX COLUMN     : インデクス構成列名　キー値の並び順　(サーチ条件)

一意性制約情報

このB-treeインデクスがユニークインデクスの場合，一意性制約情報が出力されます。次のどちらかが出力されます。

UNIQUE：このユニークインデクスが，一意性制約に違反していない状態であることを示しています。

UNIQUE INVALID：このユニークインデクスが，一意性制約に違反している状態であることを示しています。

インデクスの種別

B-treeインデクスの場合，インデクスの種別にB-TREEが表示されます。

キー値の並び順

B-treeインデクスの定義時に指定したB-treeインデクスのキー値の並び順が出力されます。次のどちらかが出力されます。

ASC：昇順にキー値が並んでいます。

DESC：降順にキー値が並んでいます。

サーチ条件

サーチ条件が次のどれかの形式で出力されます。

=，<，<=，>，>=，=ANY，BETWEEN(｛<,<｜<,<=｜<=,<｜<=,<=｝)，IN，LIKE，IS NULL

サーチ条件の出力規則

インデクス構成列にサーチ条件が指定されていない場合は，noneが出力されます。

「IN 表副問合せ」や「限定述語の=SOME」をサーチ条件に指定した場合，=ANYが出力されます。

比較述語の左側に単独の列指定以外を指定した場合，探索条件がHADBサーバによって等価変換されます。サーチ条件には，等価変換後の比較述語の比較演算子が出力されます。

（例）

SELECT文のWHERE句に指定された探索条件

WHERE 10 < C1

HADBサーバによって等価変換された探索条件

WHERE C1 > 10

アクセスパス情報のサーチ条件に出力される情報

INDEX COLUMN: C1 ASC (>)

出力形式（テキストインデクスの場合）

INDEX NAME        : テキストインデクス名
 INDEX TYPE       : インデクスの種別
 INDEX COLUMN     : インデクス構成列名

インデクスの種別

テキストインデクスの場合，インデクスの種別にTEXTが表示されます。

出力形式（レンジインデクスの場合）

INDEX NAME        : レンジインデクス名
 INDEX TYPE       : インデクスの種別
 SKIP COND        : レンジインデクス条件の種別
 INDEX COLUMN     : インデクス構成列名

インデクスの種別

レンジインデクスの場合，インデクスの種別にRANGEが表示されます。

レンジインデクス条件の種別

使用されるレンジインデクス条件として，次のどれかが出力されます。

CHUNK：チャンクのスキップ条件を使用します。

SEGMENT：セグメントのスキップ条件を使用します。

CHUNK AND SEGMENT：チャンクのスキップ条件とセグメントのスキップ条件の両方を使用します。

また，ハッシュジョインまたは副問合せの処理方式のハッシュ実行の際に，ハッシュテーブルとの突き合わせを行う条件に指定された列に対して，レンジインデクスが使用される場合，(HASH)が出力されます。

出力例

SKIP COND        : CHUNK (HASH)

ハッシュジョインの詳細については，「5.5.2　ハッシュジョインとは」を参照してください。

副問合せの処理方式のハッシュ実行については，「5.6.1　外への参照列を含まない副問合せの処理方式とは」の「(4)　ハッシュ実行」，または「5.6.3　外への参照列を含む副問合せの処理方式とは」の「(3)　ハッシュ実行」を参照してください。

出力例

<<Detail   >>

QUERY : 1
     3 INDEX SCAN(ADBUSER01.T1)
       INDEX NAME        : IDX_C1C2        ...1
        INDEX TYPE       : B-TREE          ...2
        INDEX COLUMN     : C1 ASC (IN)     ...3
        INDEX COLUMN     : C2 ASC (>)      ...3
       INDEX NAME        : RIDX_C2         ...4
        INDEX TYPE       : RANGE           ...5
        SKIP COND        : CHUNK (HASH)    ...6
        INDEX COLUMN     : C2              ...7

［説明］

使用されるインデクスの名称です。

1.のINDEX NAMEに表示されたインデクスの種別です。B-TREEが表示されているため，IDX_C1C2はB-treeインデクスです。

1.および2.の情報から，B-treeインデクスIDX_C1C2を使用して，インデクススキャンが実行されることを示しています。

B-treeインデクスIDX_C1C2についての情報です。

C1，C2：インデクス構成列

ASC：キー値の並び順

(IN)， (>)：サーチ条件の指定

使用されるインデクスの名称です。

4.のINDEX NAMEに表示されたインデクスの種別です。RANGEが表示されているため，RIDX_C2はレンジインデクスです。

使用されるレンジインデクス条件の種別です。

CHUNK：レンジインデクスRIDX_C2がチャンクのスキップ条件で使用されることを示しています。

(HASH)：ハッシュジョインまたは副問合せの処理方式のハッシュ実行の際に，ハッシュテーブルとの突き合わせを行う条件に指定された列に対して，レンジインデクスRIDX_C2が使用されることを示しています。

レンジインデクスRIDX_C2のインデクス構成列です。

メモ

B-treeインデクスの情報は，表の検索方式にインデクススキャンまたはキースキャンが実行される場合に表示されます。

また，インデクス構成列が複数ある場合は，インデクス構成列ごとに情報が出力されます。この場合，CREATE INDEX文で指定したインデクス構成列の定義順に情報が出力されます。

テキストインデクスのインデクス情報は，表の検索方式にインデクススキャンが実行される場合に表示されます。

レンジインデクスの情報は，レンジインデクス条件がある場合に表示されます。

(c)　集まり導出表に関する情報

SQL文中に集まり導出表が指定されている場合，次の集まり導出表に関する情報が出力されます。

UNNEST DERIVED TABLE SCAN(相関名)

SQL文中に集まり導出表が指定されていることを示しています。また，指定されている集まり導出表の相関名が表示されます。

複数の集まり導出表を指定している場合，集まり導出表の指定順にこの情報が表示されます。

集まり導出表については，マニュアルHADB　SQLリファレンスの表参照を参照してください。

出力例

<<Detail   >>

QUERY : 1
     3 TABLE SCAN(ADBUSER01.T1)
       INDEX NAME        : RNG
        INDEX TYPE       : RANGE
        SKIP COND        : CHUNK AND SEGMENT
        INDEX COLUMN     : C1
       UNNEST DERIVED TABLE SCAN(DT)

［説明］

SQL文中に集まり導出表が指定されていることを示しています。指定している集まり導出表の相関名はDTであることを示しています。

(2)　表の結合方式に関する情報

表の結合方式に関する情報の出力形式の例を次に示します。

出力形式の例

<<Detail   >>

QUERY : 1
     3 HASH JOIN                             ←表の結合方式
       JOIN TYPE         : INNER JOIN        ←結合種別
       BUILD COLUMN      : ADBUSER01.T1.C3             ←ハッシュ検索情報
       PROBE COLUMN      : ADBUSER01.T2.C3             ←ハッシュ検索情報

(a)　表の結合方式

表の結合方式には，次のどちらかが出力されます。

NESTED LOOP JOIN

表の結合処理で，ネストループジョインが実行されることを示しています。

HASH JOIN

表の結合処理で，ハッシュジョインが実行されることを示しています。

2つの表の列を比較する=条件がある場合，ハッシュジョインが実行されることがあります。また，ハッシュテーブル領域で処理できない行がある場合，作業表が作成されることがあります。

表の結合方式については，「5.5　表の結合方式」を参照してください。

出力例

<<Detail   >>

QUERY : 1
     3 HASH JOIN
       JOIN TYPE         : INNER JOIN
       BUILD COLUMN      : ADBUSER01.T1.C3
       PROBE COLUMN      : ADBUSER01.T2.C3

［説明］

表の結合方式で，ハッシュジョインが実行されることを示しています。

(b)　結合種別（JOIN TYPE）

JOIN TYPEには，次のどれかが出力されます。

CROSS JOIN

交差結合が指定されていることを示しています。

INNER JOIN

内結合が指定されていることを示しています。

LEFT OUTER JOIN

LEFT OUTER JOINによる外結合が指定されていることを示しています。

RIGHT OUTER JOIN

RIGHT OUTER JOINによる外結合が指定されていることを示しています。

FULL OUTER JOIN(LEFT)

FULL OUTER JOINによる外結合が指定されていることを示しています。

FULL OUTER JOIN(RIGHT)

FULL OUTER JOINによる外結合が指定されていることを示しています。

各結合の方式については，マニュアルHADB　SQLリファレンスの結合表の指定形式および規則を参照してください。

出力例

<<Detail   >>

QUERY : 1
     3 HASH JOIN
       JOIN TYPE         : INNER JOIN
       BUILD COLUMN      : ADBUSER01.T1.C3
       PROBE COLUMN      : ADBUSER01.T2.C3

［説明］

内結合が実行されることを示しています。

重要

INNER JOINまたはCROSS JOINは，HADBサーバによってコンマ結合に変換されてSQL文が実行されることがあります。この場合，結合種別（JOIN TYPE）は表示されません。コンマ結合については，マニュアルHADB　SQLリファレンスのFROM句の指定形式および規則の指定形式の説明を参照してください。

出力規則を次に示します。

内部導出表を作成するSQL文で内部導出表を展開する場合，ハッシュジョインの外表列および内表列の表名や相関名などに，内部導出表の展開結果が出力されます。内部導出表および内部導出表の展開規則については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。

(c)　ハッシュ検索情報（BUILD COLUMN，PROBE COLUMN）

ハッシュジョインが実行される場合，ハッシュ検索情報には，次の情報が出力されます。

BUILD COLUMN

外表の結合列の情報が出力されます。

PROBE COLUMN

内表の結合列の情報が出力されます。

出力例

<<Detail   >>

QUERY : 1
     3 HASH JOIN
       BUILD COLUMN      : ADBUSER01.T1.C1(CREATE FILTER 1)    ...1
       PROBE COLUMN      : ADBUSER01.T2.C1(USE FILTER 1)       ...2

［説明］

ハッシュジョインの際の，外表の結合列の列名（ADBUSER01.T1.C1）が出力されます。

ハッシュジョインの際の，内表の結合列の列名（ADBUSER01.T2.C1）が出力されます。

ハッシュジョインの際にハッシュフィルタが適用される場合，下線部分にハッシュフィルタの情報が出力されます。

出力規則を次に示します。

BUILD COLUMNまたはPROBE COLUMNには，次のどれかの形式で列名が出力されます。このうち，相関名の出力が優先されます。列名を表示できない場合は，***が出力されます。

表名.列名

問合せ名.列名

相関名.列名

ハッシュジョインの際にハッシュフィルタが適用される場合，BUILD COLUMNには，「（CREATE FILTER XXXXX）」が出力されます。「XXXXX」は，出力された列名の列値を基に作成したハッシュフィルタの番号です。

PROBE COLUMNには，「（USE FILTER XXXXX）」が出力されます。「XXXXX」は，使用するハッシュフィルタの番号です。

内部導出表を作成するSQL文で内部導出表を展開する場合，ハッシュジョインの外表列および内表列の表名や相関名などに，内部導出表の展開結果が出力されます。内部導出表および内部導出表の展開規則については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。

(3)　集合演算に関する情報

集合演算に関する情報には，実行される集合演算の種類が，次の形式で出力されます。

SET OPERATION TYPE:集合演算の種別

集合演算の種別には，次のどれかが出力されます。

UNION ALL

集合演算UNION ALLが指定されていることを示しています。

UNION DISTINCT

集合演算UNION DISTINCTが指定されていることを示しています。

EXCEPT ALL

集合演算EXCEPT ALLが指定されていることを示しています。

EXCEPT DISTINCT

集合演算EXCEPT DISTINCTが指定されていることを示しています。

INTERSECT ALL

集合演算INTERSECT ALLが指定されていることを示しています。

INTERSECT DISTINCT

集合演算INTERSECT DISTINCTが指定されていることを示しています。

集合演算に関する情報の出力形式の例を次に示します。

出力形式の例

<<Detail   >>

QUERY : 0
     3 SET OPERATION
       SET OPERATION TYPE : UNION ALL

［説明］

集合演算UNION ALLが指定されていることを示しています。

留意事項

SQL文中に連続して指定した集合演算中に，ALL指定とDISTINCT指定の集合演算がある場合，ALL指定の集合演算をDISTINCT指定の集合演算として扱うアクセスパス情報が表示されることがあります。このとき，「6.1.4　ツリー表示に出力される情報」の「(4)　集合演算の指定」の表示では，連続して指定された集合演算を1つにまとめて出力します。また，対応する集合演算に関する情報も1つにまとめて出力します。

次に示す2つの条件を満たす場合，UNION DISTINCT指定の集合演算を，UNION ALL指定の集合演算として扱うアクセスパス情報が表示されることがあります。

SQL文中に連続して指定した集合演算中に，UNION指定，UNION ALL指定，UNION DISTINCT指定の集合演算がある

集合演算の処理方式にハッシュ実行が適用される

このとき，「6.1.4　ツリー表示に出力される情報」の「(4)　集合演算の指定」の表示では，連続して指定した集合演算を1つにまとめて出力します。また，対応する集合演算に関する情報も1つにまとめて出力します。

(4)　表関数導出表に関する情報

表関数導出表に関する情報には，実行されるシステム定義関数名が，次の形式で出力されます。

FUNCTION NAME : スキーマ名.システム定義関数名

システム定義関数名には，次のどちらかが出力されます。

ADB_AUDITREAD

ADB_AUDITREAD関数が指定されていることを示しています。

ADB_CSVREAD

ADB_CSVREAD関数が指定されていることを示しています。

表関数導出表に関する情報の出力形式の例を次に示します。

出力形式の例

<<Detail   >>

QUERY : 1
     3 TABLE FUNCTION DERIVED TABLE(T5)
       FUNCTION NAME : MASTER.ADB_AUDITREAD

［説明］

ADB_AUDITREAD関数が指定されていることを示しています。

(5)　副問合せに関する情報

副問合せの処理方式にハッシュ実行が適用される場合，副問合せに関する情報にハッシュ検索情報が出力されます。ハッシュ検索情報には，次の情報が出力されます。

BUILD COLUMN

外への参照列を含まない副問合せの処理方式にハッシュ実行が適用される場合は，副問合せの結果の列の情報が出力されます。

外への参照列を含む副問合せの処理方式にハッシュ実行が適用される場合は，副問合せ中に指定された外への参照列と比較する列の情報が出力されます。

PROBE COLUMN

外への参照列を含まない副問合せの処理方式にハッシュ実行が適用される場合は，探索条件に指定された副問合せの結果と比較する列の情報が出力されます。

外への参照列を含む副問合せの処理方式にハッシュ実行が適用される場合は，副問合せ中に指定された外への参照列の情報が出力されます。

出力例

<<Detail   >>

QUERY : 1
     3 SUBQUERY HASH
       BUILD COLUMN      : ADBUSER01.T2.C1(CREATE FILTER 1)    ...1
       PROBE COLUMN      : ADBUSER01.T1.C1(USE FILTER 1)       ...2

［説明］

上記は，外への参照列を含まない副問合せの処理方式にハッシュ実行が適用される場合の例です。

副問合せの結果の列の列名（ADBUSER01.T2.C1）が出力されます。

探索条件に指定された副問合せの結果と比較する列の列名（ADBUSER01.T1.C1）が出力されます。

ハッシュ実行の際にハッシュフィルタが適用される場合，下線部分にハッシュフィルタの情報が出力されます。

出力規則を次に示します。

BUILD COLUMNまたはPROBE COLUMNには，次のどれかの形式で列名が出力されます。このうち，相関名の出力が優先されます。列名を表示できない場合は，***が出力されます。

表名.列名

問合せ名.列名

相関名.列名

ハッシュ実行の際にハッシュフィルタが適用される場合，BUILD COLUMNには，「（CREATE FILTER XXXXX）」が出力されます。「XXXXX」は，出力された列名の列値を基に作成したハッシュフィルタの番号です。

PROBE COLUMNには，「（USE FILTER XXXXX）」が出力されます。「XXXXX」は，使用するハッシュフィルタの番号です。

内部導出表を作成するSQL文で内部導出表を展開する場合，BUILD COLUMNとPROBE COLUMNに出力される表名や相関名などに，内部導出表の展開結果が出力されます。内部導出表および内部導出表の展開規則については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。

(6)　グループ化に関する情報

グループ化処理が複数回実行される場合に，グループ化に関する情報（グループ化集合情報）が次の形式で出力されます。

GROUPING SET : ｛表名｜問合せ名｜相関名｝.1番目のグループ化のグループ化列名1
               ｛表名｜問合せ名｜相関名｝.1番目のグループ化のグループ化列名2
                            :
GROUPING SET : ｛表名｜問合せ名｜相関名｝.2番目のグループ化のグループ化列名1
               ｛表名｜問合せ名｜相関名｝.2番目のグループ化のグループ化列名2
                            :
GROUPING SET : ｛表名｜問合せ名｜相関名｝.n番目のグループ化のグループ化列名1
               ｛表名｜問合せ名｜相関名｝.n番目のグループ化のグループ化列名2
                            :

グループ化に関する情報の出力形式の例を次に示します。

出力形式の例

<<Detail   >>
QUERY : 1
     5 GLOBAL HASH GROUPING
       GROUPING SET : ADBUSER01.T1.C1
                      ADBUSER01.T1.C2
                      ADBUSER01.T1.C3
       GROUPING SET : ADBUSER01.T2.C1
                      ADBUSER01.T2.C2
       GROUPING SET : ADBUSER01.T3.C1
                      ADBUSER01.T3.C3

［説明］

グループ化処理ごとにグループ化列名が出力されます。

グループ化列名を出力できない場合は，***が出力されます。

出力規則を次に示します。

内部導出表を作成するSQL文で内部導出表を展開する場合，グループ化に関する情報に出力される表名や相関名などに，内部導出表の展開結果が出力されます。内部導出表および内部導出表の展開規則については，マニュアルHADB　SQLリファレンスの内部導出表を参照してください。

6.1.6　コスト情報表示に出力される情報

SQL文中で参照される実表のうち，コスト情報が取得されている実表に関する情報（表コスト情報）が出力されます。

出力例を次に示します。

出力例

<<COST Info>>

TABLE : ADBUSER01.T1
       COLLECT VERSION   : 05-03
       COLLECT TIME      : 2020-05-25 13:36:46

［説明］

TABLE

SQL文中で参照される実表のうち，コスト情報が取得されている実表の表名が出力されます。

COLLECT VERSION

TABLEに表示されている実表のコスト情報を取得したときのHADBサーバのバージョンが出力されます。

COLLECT TIME

TABLEに表示されている実表のコスト情報を取得したときの日時が出力されます。

メモ

表名の順に上記の情報が出力されます。

SQL文中で同じ表が複数個所で参照される場合，重複排除して情報が出力されます。

6.1.7　特定情報表示（SQL文の特定情報）に出力される情報

特定情報表示には，アクセスパスの統計情報を取得したSQL文を特定するための情報（SQL文の特定情報）が出力されます。ここに出力された情報を基に，アクセスパス情報の出力結果とアクセスパスの統計情報の出力結果を対応付けることができます。

アクセスパスの統計情報については，マニュアルHADB　システム構築・運用ガイドのアクセスパスの統計情報の出力例と出力項目を参照してください。

出力例を次に示します。

出力例

<<SQL Info >>

Version           : 05-03 May 25 2020 12:51:53
Transaction ID    : 1
Connection Number : 1
SQL Serial Number : 1

［説明］

Version

アクセスパスの統計情報を取得したSQL文について，実行したHADBサーバのバージョンおよびバージョン付加情報が出力されます。

Transaction ID

アクセスパスの統計情報を取得したSQL文のトランザクションIDが出力されます。

Connection Number

アクセスパスの統計情報を取得したSQL文のコネクション通番が出力されます。

SQL Serial Number

アクセスパスの統計情報を取得したSQL文のSQL文通番が出力されます。

メモ

上記の情報は，アクセスパスの統計情報の前に出力されるSQL文の実行情報中の次の情報と対応しています。（　）内は，各情報のヘッダ名です。

トランザクションID（tran_id）

コネクション通番（con_num）

SQL文通番（sql_serial_num）

SQL文の実行情報については，マニュアルHADB　システム構築・運用ガイドのSQLトレース情報に出力される情報のSQL文の実行情報を参照してください。

6.1.8　アクセスパスに表示される情報（アルファベット順）

アクセスパスに表示される情報を，アルファベット順に次の表に示します。

表6‒1　アクセスパスに表示される情報（アルファベット順）

先頭の文字

出力情報

説明

分類

B

BUILD COLUMN

表の結合方式にハッシュジョインが適用される場合，外表の結合列の情報が出力されます。また，ハッシュフィルタが適用される場合は，ハッシュフィルタの情報も出力されます。

ハッシュ検索情報（BUILD COLUMN，PROBE COLUMN）

外への参照列を含まない副問合せの処理方式にハッシュ実行が適用される場合は，副問合せの結果の列の情報が出力されます。

外への参照列を含む副問合せの処理方式にハッシュ実行が適用される場合は，副問合せ中に指定された外への参照列と比較する列の情報が出力されます。

また，ハッシュフィルタが適用される場合は，ハッシュフィルタの情報も出力されます。

副問合せに関する情報

C

CHUNK

チャンクのスキップ条件が使用されることを示しています。

インデクスに関する情報

CHUNK AND SEGMENT

チャンクのスキップ条件とセグメントのスキップ条件の両方が使用されることを示しています。

COLUMN

カラムストア表の特性を利用したグループ化の処理が実行されることを示しています。

グループ化の処理方式

COLUMN STORE

表データの格納形式がカラムストア形式であることを示しています。

表データの格納形式

CREATE FILTER

BUILD COLUMNに出力された列名の列値を基に作成したハッシュフィルタの番号が出力されます。

ハッシュ検索情報（BUILD COLUMN，PROBE COLUMN）

副問合せに関する情報

CREATE GLOBAL WORK TABLE (WORK TABLE 作業表番号)

グローバル作業表が作成されることを示しています。

作業表の作成情報

CREATE LOCAL WORK TABLE (WORK TABLE 作業表番号)

ローカル作業表が作成されることを示しています。

作業表番号とは，作業表を一意に識別するために割り当てられた番号のことです。

CROSS JOIN

交差結合が指定されていることを示しています。

表の結合方式に関する情報

D

DELEGATION

副問合せ処理委譲指定が有効になることを示しています。

副問合せ処理委譲指定

DELETE STATEMENT

DELETE文が実行されることを示しています。

実行したSQL文の種類

DERIVED TABLE(相関名，問合せ名，または表識別子)

導出表，ビュー表，または問合せ名が指定されていることを示しています。

導出表の指定

DISTINCT

重複排除処理が行われることを示しています。

重複排除の情報

DIVIDE

ハッシュジョインが分割実行されることを示しています。

表の結合方式

F

FILTER

副問合せの処理方式のハッシュ実行の際に，ハッシュフィルタが適用されることを示しています。

副問合せの処理方式

表の結合方式のハッシュジョインの際に，ハッシュフィルタが適用されることを示しています。

表の結合方式

FULL OUTER JOIN(LEFT)

FULL OUTER JOIN(RIGHT)

FULL OUTER JOINによる外結合が指定されていることを示しています。

表の結合方式に関する情報

FUNCTION NAME

実行されるシステム定義関数の種類を示しています。

表関数導出表に関する情報

G

GLOBAL HASH GROUPING

グローバルハッシュグループ化が実行されることを示しています。また，ハッシュテーブル領域で処理できない行がある場合，作業表を作成することがあることも示しています。

グループ化の処理方式

GLOBAL HASH UNIQUE

次のどれかの処理によって検索結果の重複を排除していることを示しています。

集合演算の処理方式のハッシュ実行

SELECT DISTINCTの処理方式のハッシュ実行

グループ化の処理方式のグローバルハッシュグループ化

また，ハッシュテーブル領域で処理できない行がある場合に，作業表が作成されていることも示しています。

重複排除の処理方式

GROUPING

作業表を使用しないグループ化が実行されることを示しています。

グループ化の処理方式

GROUPING SET

グループ化処理が複数回実行されることを示しています。

グループ化の処理方式

グループ化に関する情報

H

(HASH)

ハッシュジョインまたは副問合せの処理方式のハッシュ実行の際に，ハッシュテーブルとの突き合わせを行う条件に指定された列に対して，レンジインデクスが使用されることを示しています。

インデクスに関する情報

HASH JOIN

表の結合処理で，ハッシュジョインが実行されることを示しています。

2つの表の列を比較する=条件がある場合，ハッシュジョインが実行されることがあります。また，ハッシュテーブル領域で処理できない行がある場合，作業表が作成されることがあります。

表の結合方式（ツリー表示）

表の結合方式（詳細表示）

HAVING

HAVING句が指定されていることを示しています。また，HAVING句を指定していない場合でも，導出表の展開によって表示されることがあります。

HAVING句の指定

I

INDEX

B-treeインデクスの特性を利用したグループ化の処理が実行されることを示しています。

グループ化の処理方式

INDEX COLUMN

インデクス構成列に関する情報を示しています。

B-treeインデクスの場合は，インデクス構成列名，キー値の並び順，およびサーチ条件が出力されます。

テキストインデクスまたはレンジインデクスの場合は，インデクス構成列名が出力されます。

インデクスに関する情報

INDEX NAME

インデクス名です。

INDEX SCAN(スキーマ名.表識別子(問合せ名または相関名))

表の検索処理で，インデクススキャンが実行されることを示しています。問合せ名または相関名がある場合は，問合せ名または相関名が表示されます。

表の検索方式（ツリー表示）

表の検索方式（詳細表示）

INDEX TYPE

インデクス種別（B-treeインデクス，テキストインデクス，またはレンジインデクス）を示しています。

インデクスに関する情報

INNER JOIN

内結合が指定されていることを示しています。

表の結合方式に関する情報

INSERT STATEMENT

INSERT文が実行されることを示しています。

実行したSQL文の種類

J

JOIN TYPE

結合種別を示しています。

表の結合方式に関する情報

K

KEY SCAN

表の検索処理で，キースキャンが実行されることを示しています。

表の検索方式（ツリー表示）

表の検索方式（詳細表示）

L

LIMIT オフセット行数,リミット行数

LIMIT句が指定されていることを示しています。オフセット行数の指定がない場合は，オフセット行数は表示されません。

オフセット行数とリミット行数の両方，またはどちらか一方に？パラメタが指定されている場合は，? PARAMETERと表示されます。

LIMIT句の指定

LEFT OUTER JOIN

LEFT OUTER JOINによる外結合が指定されていることを示しています。

表の結合方式に関する情報

LOCAL HASH GROUPING

ローカルハッシュグループ化が実行されることを示しています。また，ハッシュグループ化領域で処理できない行がある場合，作業表を作成することがあることも示しています。

グループ化の処理方式

N

NESTED LOOP JOIN

表の結合処理で，ネストループジョインが実行されることを示しています。

表の結合方式（ツリー表示）

表の結合方式（詳細表示）

O

ORDER

非順序実行方式が適用されないで，順序実行方式が適用されることを示しています。

順序実行方式

P

PARALLEL

検索系SQLに対して，SQLパラレル実行機能が適用されることを示しています。

SQLパラレル実行機能の適用情報

PARALLEL DISABLED

検索系SQLに対して，SQLパラレル実行機能が適用されないことを示しています。

PROBE COLUMN

表の結合方式にハッシュジョインが適用される場合，内表の結合列の情報が出力されます。また，ハッシュフィルタが適用される場合は，ハッシュフィルタの情報も出力されます。

ハッシュ検索情報（BUILD COLUMN，PROBE COLUMN）

外への参照列を含まない副問合せの処理方式にハッシュ実行が適用される場合は，探索条件に指定された副問合せの結果と比較する列の情報が出力されます。

外への参照列を含む副問合せの処理方式にハッシュ実行が適用される場合は，副問合せ中に指定された外への参照列の情報が出力されます。

また，ハッシュフィルタが適用される場合は，ハッシュフィルタの情報も出力されます。

副問合せに関する情報

PURGE CHUNK STATEMENT

PURGE CHUNK文が実行されることを示しています。

実行したSQL文の種類

Q

QUERY

副問合せおよび導出表以外の問合せが指定されていることを示しています。

問合せの種類

QUERY SCAN(QUERY 問合せツリー番号)

問合せ検索が実行されることを示しています。

問合せ検索の実行

R

RECURSIVE

再帰的問合せが実行されることを示しています。

集合演算の指定

RIGHT OUTER JOIN

RIGHT OUTER JOINによる外結合が指定されていることを示しています。

表の結合方式に関する情報

S

SEGMENT

セグメントのスキップ条件を使用します。

インデクスに関する情報

SELECT STATEMENT

SELECT文が実行されることを示しています。

実行したSQL文の種類

SET OPERATION

集合演算が指定されていることを示しています。

集合演算の指定

SET OPERATION TYPE

実行される集合演算の種類を示しています。

集合演算に関する情報

SKIP COND

レンジインデクス条件の種別です。

インデクスに関する情報

SORT GROUPING

ソートグループ化が実行されることを示しています。

グループ化の処理方式

SORTING ｛BYTE｜ISO｝

ORDER BY句によるソート処理が実行されることを示しています。ただし，ORDER BY句を指定した場合でも表示されないときがあります。

ソート処理の実行

SPECIFIC

集合演算方式指定が有効になることを示しています。

集合演算方式指定

副問合せ処理方式指定が有効になることを示しています。

副問合せ処理方式指定

GROUP BY句に指定したグループ化方式指定が有効になることを示しています。

グループ化の処理方式

SELECT重複排除方式指定が有効になることを示しています。

SELECT重複排除方式指定

インデクス指定が有効になることを示しています。

インデクス指定

結合方式指定が有効になることを示しています。

結合方式指定

SPECIFIC DISABLED

インデクス指定が無効になったことを示しています。

インデクス指定

結合方式指定が無効になったことを示しています。

結合方式指定

SUBQUERY

ネストループ実行，ハッシュ実行以外の副問合せが適用されることを示しています。

副問合せの処理方式

SUBQUERY HASH

副問合せの処理方式で，ハッシュ実行が適用されることを示しています。

SUBQUERY LOOP

副問合せの処理方式で，ネストループ実行が適用されることを示しています。

T

TABLE FUNCTION DERIVED TABLE(相関名)

表関数導出表が指定されていることを示しています。

表関数導出表の指定

TABLE SCAN

表の検索処理で，テーブルスキャンが実行されることを示しています。

表の検索方式（ツリー表示）

表の検索方式（詳細表示）

TABLE VALUE CONSTRUCTOR SCAN

表値構成子を検索することを示しています。

表値構成子の検索情報

U

UNIQUE

このユニークインデクスが，一意性制約に違反していない状態であることを示しています。

インデクスに関する情報

UNIQUE INVALID

このユニークインデクスが，一意性制約に違反している状態であることを示しています。

UNNEST

集まり導出表が指定されていることを示しています。

集まり導出表の指定

UNNEST DERIVED TABLE SCAN(相関名)

集まり導出表が指定されていることを示しています。また，指定されている集まり導出表の相関名が表示されます。

集まり導出表に関する情報

UPDATE STATEMENT

UPDATE文が実行されることを示しています。

実行したSQL文の種類

USE FILTER

使用するハッシュフィルタの番号が出力されます。

ハッシュ検索情報（BUILD COLUMN，PROBE COLUMN）

副問合せに関する情報

USING CACHE

副問合せの結果を格納するためのキャッシュが使用されることを示しています。

副問合せのキャッシュ使用情報

USING COST

表またはインデクスに関するコスト情報が収集されていることを示しています。

コスト情報の収集

W

WINDOW

ウィンドウ関数が指定されていることを示しています。

ウィンドウ関数の指定

WORK TABLE SCAN(WORK TABLE 作業表番号)

作業表の検索が実行されることを示しています。作業表番号とは，作業表を一意に識別するために割り当てられた番号のことです。

作業表の検索実行

第3編　AP作成編【JDBC】

7　APの作成

この章では，JDBCドライバを使用したAPの作成方法について説明します。なお，JDBCドライバの環境設定方法については，「3.　JDBCドライバの環境設定」を参照してください。

7.1　HADBが提供しているJDBCドライバ

ここでは，HADBが提供しているJDBCドライバのJDBC規格への準拠範囲，およびJARファイルのパッケージ名称とディレクトリ構成について説明します。

7.1.1　JDBC規格への準拠範囲

HADBはType4のJDBCドライバを実装しています。HADBのJDBCドライバのJDBC規格への準拠範囲を次の表に示します。

表7‒1　HADBのJDBCドライバのJDBC規格への準拠範囲

項番

JDBCの規格

機能

準拠範囲

1

The JDBCTM API Version 1.20（JDBC 1.2 API）

Driverインタフェース

○

2

Connectionインタフェース

○

3

Statementインタフェース

○

4

PreparedStatementインタフェース

○

5

CallableStatementインタフェース

×

6

ResultSetインタフェース

○

7

DatabaseMetaDataインタフェース

○

8

ResultSetMetaDataインタフェース

○

9

Blobインタフェース

×

10

Arrayインタフェース

○

11

SQLExceptionインタフェース

○

12

SQLWarningインタフェース

○

13

JDBCTM 2.1 API Version 1.1（JDBC 2.1 コアAPI）

結果セットの拡張

△※1

14

バッチ更新

○

15

Javaオブジェクトの持続化

×

16

JDBC SQLデータ型追加

×

17

データ型カスタムマッピング

×

18

JDBC 2.0 Standard Extension API Version 1.0（JDBC 2.0 オプションパッケージ API）

JNDI

○

19

接続プール

○

20

分散トランザクション（JTA対応）

×

21

Rowsets

×

22

JDBCTM 3.0 Specification（JDBC 3.0 API）

セーブポイント

×

23

接続プール機能強化

×

24

パラメタメタデータ

○

25

自動生成キー

×

26

結果セットの複数同時オープン

×

27

CallableStatementでのパラメタ名の使用

×

28

ホールダブルカーソル

○

29

BOOLEAN型

×

30

Blobクラス内でのデータ操作

×

31

参照型

×

32

DATALINK/URL型

×

33

JCA関連アーキテクチャ

×

34

データベースメタデータの追加API

○

35

JDBCTM 4.0 Specification（JDBC 4.0 API）

java.sql.Driver自動ローディング

○

36

ROWIDデータ型

×

37

各国文字データ型

×

38

BLOB/CLOB機能拡張

×

39

XMLサポート

×

40

ラッパーパターン

○

41

SQL例外拡張

○

42

接続管理

△※2

43

スカラ関数追加

△※3

44

データベースメタデータの追加API

○

45

JDBCTM 4.1 Specification（JDBC 4.1 API）

try-with-resources文

○

46

getObjectメソッドの変換先Java型指定

△※4

47

親ロガーの取得

×

48

スキーマ指定

×

49

物理接続の中止およびタイムアウト

×

50

依存オブジェクトクローズ時のStatementオブジェクトクローズ

○

51

データベースメタデータの追加API

○

52

JDBCTM 4.2 Specification（JDBC 4.2 API）

REF CURSOR

×

53

SQLTypeインタフェース

×

54

JDBCType列挙（Enum）

×

55

大きい更新カウント

○

56

データベースメタデータの追加API

○

（凡例）

○：サポート対象です。

△：一部の機能をサポート対象にしています。

×：サポート対象外です。

注※1

スクロール機能だけをサポートしています。

注※2

Connection#isValid()，およびStatement#isPoolable()だけをサポートしています。

注※3

CURRENT_DATE，CURRENT_TIME，CURRENT_TIMESTAMP，およびEXTRACTだけをサポートしています。

注※4

ResultSetインタフェースのgetObjectメソッドです。また，一部のJava型への変換だけをサポートしています。詳細については，「8.6.45　getObject(int columnIndex,Class<T> type)」を参照してください。

以降，Type4 JDBCドライバを「JDBCドライバ」と表記します。

7.1.2　JARファイルのパッケージ名称とディレクトリ構成

JARファイルのパッケージ名称とディレクトリ構成を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

ディレクトリ構成：com/hitachi/hadb/jdbc/

メモ

HADB，hadbは，Hitachi Advanced Data Binderの略称です。

7.2　APの処理の基本的な流れ

データベースを操作する際のAPの処理の基本的な流れを次の図に示します。

図7‒1　データベースを操作する際のAPの処理の基本的な流れ

［説明］

DriverManagerクラスまたはDataSourceクラスのgetConnectionメソッドを使用して，HADBサーバに接続します。HADBサーバへの接続方法の詳細については，「7.3　HADBサーバへの接続方法」を参照してください。

データを操作するSQL文を実行します。SELECT文を実行する場合は，「7.4　データを検索する場合（SELECT文を実行する場合）」を参照してください。

INSERT文，UPDATE文，またはDELETE文を実行する場合は，「7.5　データを追加，更新，または削除する場合（INSERT文，UPDATE文，またはDELETE文を実行する場合）」を参照してください。

Connectionオブジェクトのcloseメソッドを使用して，HADBサーバからAPを切り離します。

JDBCのAPIについては，「8.　JDBC 1.2 API」以降で説明しています。

■マルチスレッドのAPを作成する際の注意事項

次に示す条件をすべて満たす場合，シリアライズによる待ち状態が発生することがあります。

同じConnectionオブジェクトから生成された複数のStatementオブジェクトを，それぞれ異なるスレッドで使用するようにした場合

それらのStatementオブジェクトを使用してSQL文を同時に実行した場合

この待ち状態は，SQL文の実行前に発生するため，SQL文の実行処理のタイマ監視時間には含まれません。そのため，プロパティのadb_clt_rpc_sql_wait_time，またはsetQueryTimeoutメソッドで指定したSQL文の実行処理のタイマ監視時間を過ぎても，タイムアウトエラーが発生しないことがあります。

7.3　HADBサーバへの接続方法

HADBのデータベースにアクセスするには，HADBサーバに接続する必要があります。HADBサーバに接続するには，次に示す2つの方法があります。

DriverManagerクラスのgetConnectionメソッドを使用する方法

DataSourceクラスのgetConnectionメソッドを使用する方法

なお，getConnectionメソッドを実行するにはCONNECT権限が必要です。

各方法の詳細を以降で説明します。

7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法

DriverManagerクラスのgetConnectionメソッドを実行してHADBサーバに接続します。getConnectionメソッドを実行する前にJava仮想マシンにDriverクラスが自動で登録されます（なお，「(1)　Java仮想マシンへのDriverクラスの登録方法」を参照して登録作業をしても問題ありません）。そのあとに，getConnectionメソッドを実行してHADBサーバに接続します。

各手順の詳細を以降で説明します。

(1)　Java仮想マシンへのDriverクラスの登録方法

Java仮想マシンにDriverクラスを登録します。Java仮想マシンにDriverクラスを登録する際に必要なドライバ名称は，「パッケージ名称.クラス名称」です。JDBCドライバのパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：HADBDriver

メモ

HADB，hadbは，Hitachi Advanced Data Binderの略称です。

Driverクラスを登録するには次に示す3つの方法があります。

■登録方法1（ClassクラスのforNameメソッドを使用して登録する方法）

アプリケーション内で，次のようにClassクラスのforNameメソッドを実行します。

Class.forName("com.hitachi.hadb.jdbc.HADBDriver");

■登録方法2（システムプロパティを使用して登録する方法）

Java仮想マシンのシステムプロパティ（jdbc.drivers）に次の値を設定します。

System.setProperty("jdbc.drivers", "com.hitachi.hadb.jdbc.HADBDriver");

■登録方法3（Java仮想マシンの動作設定ファイルを使用して登録する方法）

この方法はJava Appletの場合に限ります。

[JAVA_HOME]¥.hotjava¥propertiesファイルに，次の内容を記述します（[JAVA_HOME]は，Java実行環境によって異なります）。複数のJDBCドライバを登録する場合には，コロン（:）で区切って記述してください。

jdbc.drivers="com.hitachi.hadb.jdbc.HADBDriver"

(2)　getConnectionメソッドによるHADBサーバへの接続

DriverManagerクラスのgetConnectionメソッドを実行してHADBサーバに接続します。正常にHADBサーバに接続した場合，JDBCドライバはこれらのメソッドを実行した結果として，Connectionクラスのインスタンスの参照を返却します。HADBサーバへの接続に失敗した場合（次に示す場合）は，SQLExceptionが投入されます。

必要な接続情報が引数に指定されていない場合

接続情報の指定内容が不正な場合

接続に失敗した場合（接続先のHADBサーバが開始していないときなど）

getConnectionメソッドには次に示す3つの形式があり，引数（url，user，password，およびinfo）にはHADBサーバへの接続情報を指定します。

public static Connection getConnection(String url)

public static Connection getConnection(String url, String user, String password)

public static Connection getConnection(String url, Properties info)

各引数の指定内容を以降で説明します。

(a)　引数urlの指定内容（接続用のURLの指定）

引数urlには接続用のURLを指定します。URLの指定形式を次に示します。

jdbc:hadb[://[host][:port]/[?property=value[&property=value]...]]

メモ

HADB，hadbは，Hitachi Advanced Data Binderの略称です。

URLの指定例

例1：プロパティを指定しない場合

jdbc:hadb://localhost:23650/

例2：プロパティを1つ指定する場合

jdbc:hadb://localhost:23650/?adb_clt_ap_name=AP001

例3：複数のプロパティを指定する場合

jdbc:hadb://localhost:23650/?methodtrace=ON&tracenum=600
&sqlwarningkeep=FALSE&user=ADBUSER01&password=password01&adb_clt_ap_name=AP001

URLの指定規則

URL内の各項目および項目間にはスペースを入れないでください。

各項目名称の大文字と小文字は区別されます。

［　］で囲まれている項目は省略できます。

最初のプロパティ（property）を指定する前に?を指定し，各プロパティの指定は&で区切ります。

同じプロパティを複数指定した場合，最初に指定された指定値が有効になります。

プロパティの指定値として，&は使用できません。パスワードに'&'を含む場合は，URLでpasswordプロパティを指定できないため，ほかの接続方法を利用してください。HADBのパスワードについては，マニュアルHADB　システム構築・運用ガイドのパスワードの指定規則を参照してください。

URL中に指定したプロパティに不正な値を指定しても，ユーザプロパティの同名のプロパティで正しい値を指定している場合は，SQLExceptionは投入されません。

URLの各項目の説明

●jdbc:hadb

プロトコル名称，およびサブプロトコル名称です。必ず指定してください。大文字，小文字の指定は区別されます。

●host

接続先のHADBサーバのホスト名を指定します。ここで指定したホスト名は，HADBクライアントとHADBサーバ間の通信で使用します。

なお，HADBサーバのホスト名はほかの方法でも指定できます。ほかの指定方法および指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

ホスト名がどこにも指定されていない状態でgetConnectionメソッドを実行すると，SQLExceptionが投入されます。

コールドスタンバイ構成の場合は，HADBサーバとHADBクライアント間の通信で使用するエイリアスIPアドレスを指定してください。

［マルチノード機能］

マルチノード機能を使用している場合は，HADBサーバとHADBクライアント間の通信で使用するエイリアスIPアドレスを指定してください。

●port

HADBクライアントとHADBサーバ間の通信で使用する，HADBサーバのポート番号を指定します。

なお，HADBサーバのポート番号はほかの方法でも指定できます。ほかの指定方法および指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

ポート番号がどこにも指定されていない状態でgetConnectionメソッドを実行すると，SQLExceptionが投入されます。

●property=value

各プロパティ（property）に値（value）を指定します。

引数urlに指定できるプロパティを次の表に示します。

表7‒2　引数urlに指定できるプロパティ

項番

プロパティ名

説明

1

user

HADBサーバに接続する認可識別子を指定します。

認可識別子の名称規則については，マニュアルHADB　SQLリファレンスの名前の指定を参照してください。

なお，HADBサーバに接続する認可識別子はほかの方法でも指定できます。指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

認可識別子がどこにも指定されていない状態でgetConnectionメソッドを実行すると，SQLExceptionが投入されます。

2

password

HADBサーバに接続する認可識別子のパスワードを指定します。

3

encodelang

StringクラスでHADBサーバとのデータ受け渡しをする場合に，文字コード変換処理で使用する変換文字セットを指定します。指定できる変換文字セットは，JavaTM Platform, Standard Edition JDKドキュメントの国際化サポートで示されるサポートされているエンコーディングの一覧から選択してください。

この指定を省略した場合，「表7‒15　HADBサーバの文字コードに対応する文字セット名称」の組み合わせに従った変換文字セットで文字コードが変換されます。ただし，次に示す値については，Java仮想マシンのデフォルトの変換文字セットで変換されます。

AP識別子（ユーザプロパティのadb_clt_ap_nameなどで設定）の指定値

認可識別子，またはパスワード（getConnectionメソッドなどで指定）

このプロパティは，「表7‒15　HADBサーバの文字コードに対応する文字セット名称」の組み合わせの変換文字セット以外の文字セットで文字コード変換したい場合だけ指定してください。「表7‒15　HADBサーバの文字コードに対応する文字セット名称」の組み合わせの変換文字セットで文字コード変換する場合は，このプロパティを指定する必要はありません。

4

methodtrace

JDBCインタフェースメソッドトレースを取得するかどうかを指定します。

ON：取得します。

OFF：取得しません。

JDBCインタフェースメソッドトレースについては，「7.7.1　JDBCインタフェースメソッドトレース」を参照してください。

上記以外の値を指定した場合は，SQLExceptionが投入されます。

この指定を省略した場合，OFFが仮定されます。

なお，setLogWriterメソッドで有効なログライターを設定していない場合，ONを指定してもJDBCインタフェースメソッドトレースは取得されません。

5

tracenum

JDBCインタフェースメソッドトレースのエントリ数を，10〜1,000の範囲で指定します。省略値は500になります。

このプロパティの指定値は，次に示すすべての条件を満たしている場合に有効になります。

setLogWriterメソッドで有効なログライターを設定している

methodtraceにONを指定している

プロパティの指定が有効な状態のときに10〜1,000以外の値を指定すると，SQLExceptionが投入されます。

6

sqlwarningkeep

HADBサーバから返される警告情報を保持するかどうかを指定します。

TRUE：警告情報を保持します。

FALSE：警告情報を保持しません。

この指定を省略した場合，TRUEが仮定されます。上記以外の値を指定した場合，SQLExceptionが投入されます。

Connectionオブジェクトの警告情報保持レベルの詳細については，「8.10.1　SQLWarningオブジェクトの生成」を参照してください。

7

adb_clt_rpc_con_wait_time

HADBサーバへの接続処理の完了待ち時間を指定します。

このプロパティの機能は，クライアント定義のadb_clt_rpc_con_wait_timeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_con_wait_timeオペランドを参照してください。

8

adb_clt_rpc_sql_wait_time

次に示す待ち時間を指定します。

HADBクライアントからHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間

同一コネクションで複数のSELECT文を同時実行した際に，処理リアルスレッド数不足が発生したときの処理リアルスレッドの確保処理の待ち時間

このプロパティの機能は，クライアント定義のadb_clt_rpc_sql_wait_timeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_sql_wait_timeオペランドを参照してください。

9

adb_clt_ap_name

HADBサーバに接続するAPの識別情報（AP識別子）を指定します。

AP識別子はJava仮想マシンのデフォルトの変換文字セットで変換されるため，変換文字セットに依存しない半角英数字だけで構成される名称を指定することを推奨します。

なお，AP識別子はほかの方法でも指定できます。指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

AP識別子をどこにも指定しないでHADBサーバに接続した場合，AP識別子には"********"が設定されます。

このプロパティの機能は，クライアント定義のadb_clt_ap_nameオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_ap_nameオペランドを参照してください。

10

adb_clt_group_name

APが属するクライアントグループ名を指定します。

このプロパティの機能は，クライアント定義のadb_clt_group_nameオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_group_nameオペランドを参照してください。

11

adb_clt_fetch_size

1回のFETCH処理で，HADBサーバからHADBクライアントに送信する検索結果の行数を指定します。

このプロパティの機能は，クライアント定義のadb_clt_fetch_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_fetch_sizeオペランドを参照してください。

12

adb_dbbuff_wrktbl_clt_blk_num

ローカル作業表用バッファのページ数を指定します。

このプロパティの機能は，クライアント定義のadb_dbbuff_wrktbl_clt_blk_numオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_dbbuff_wrktbl_clt_blk_numオペランドを参照してください。

13

adb_sql_exe_max_rthd_num

SQL実行時に使用する処理リアルスレッド数の最大値を指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_max_rthd_numオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_max_rthd_numオペランドを参照してください。

14

adb_sql_exe_hashgrp_area_size

ハッシュグループ化領域の大きさをキロバイト単位で指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドを参照してください。

15

adb_sql_exe_hashtbl_area_size

ハッシュテーブル領域サイズをメガバイト単位で指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドを参照してください。

16

adb_sql_exe_hashflt_area_size

ハッシュフィルタ領域サイズをメガバイト単位で指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドを参照してください。

17

adb_clt_sql_parallel_exec

SQLパラレル実行機能を適用して検索系SQLを実行するかどうかを指定します。

このプロパティの機能は，クライアント定義のadb_clt_sql_parallel_execオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_sql_parallel_execオペランドを参照してください。

18

adb_sql_prep_delrsvd_use_srvdef

サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定に従って予約語を削除するかどうかを指定します。

このプロパティの機能は，クライアント定義のadb_sql_prep_delrsvd_use_srvdefオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_prep_delrsvd_use_srvdefオペランドを参照してください。

19

adb_clt_trn_iso_lv

トランザクション隔離性水準を指定します。

このプロパティの機能は，クライアント定義のadb_clt_trn_iso_lvオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_trn_iso_lvオペランドを参照してください。

20

adb_clt_trn_access_mode

トランザクションアクセスモードを指定します。

このプロパティの機能は，クライアント定義のadb_clt_trn_access_modeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_trn_access_modeオペランドを参照してください。

21

adb_clt_sql_text_out

HADBクライアントが発行したSQL文を，クライアントメッセージログファイルおよびサーバメッセージログファイルに出力するかどうかを指定します。

このプロパティの機能は，クライアント定義のadb_clt_sql_text_outオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_sql_text_outオペランドを参照してください。

22

adb_clt_sql_order_mode

ORDER BY句を指定したSELECT文の文字データの並び替え順序を指定します。

このプロパティの機能は，クライアント定義のadb_clt_sql_order_modeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_sql_order_modeオペランドを参照してください。

23

adb_sql_prep_dec_div_rs_prior

SQL文中に指定した除算（四則演算）の結果のデータ型がDECIMAL型の場合，除算結果の位取りの最小値を指定します。

このプロパティの機能は，クライアント定義のadb_sql_prep_dec_div_rs_priorオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_prep_dec_div_rs_priorオペランドを参照してください。

24

adb_jdbc_exc_trc_out_path

Exceptionトレースログを出力するディレクトリを，絶対パスで指定します。

これらのプロパティの機能詳細および指定できる値については，「7.7.2　Exceptionトレースログ」の「(1)　取得するメソッド，および取得するための設定」の「(b)　Exceptionトレースログを取得するための設定（プロパティの設定）」を参照してください。

25

adb_jdbc_info_max

1ファイルへ出力する情報数の上限を指定します。

26

adb_jdbc_cache_info_max

メモリ内で蓄積する情報数の上限を指定します。

27

adb_jdbc_trc_out_lv

トレース取得レベルを指定します。

注

各プロパティは，ほかの方法でも指定できます。ほかの指定方法，および指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

メモ

HADB 03-00で，接続用のURLで指定する各プロパティ名を次のように変更しました。変更前のプロパティ名も使用できますが，HADB 03-00以降にバージョンアップした場合は，プロパティ名を変更することを推奨します。

項番

変更前のプロパティ名（HADB 03-00より前のプロパティ名）

変更後のプロパティ名（HADB 03-00以降のプロパティ名）

1

apname

adb_clt_ap_name

2

extrcoutpath

adb_jdbc_exc_trc_out_path

3

extrcinfomax

adb_jdbc_info_max

4

extrccacheinfomax

adb_jdbc_cache_info_max

5

extrcoutlv

adb_jdbc_trc_out_lv

(b)　引数userの指定内容（認可識別子の指定）

HADBサーバに接続する認可識別子を指定します。

認可識別子の名称規則については，マニュアルHADB　SQLリファレンスの名前の指定を参照してください。

なお，HADBサーバに接続する認可識別子はほかの方法でも指定できます。指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

認可識別子がどこにも指定されていない状態でgetConnectionメソッドを実行すると，SQLExceptionが投入されます。

nullを指定した場合，認可識別子の指定を省略したと見なされます。

また，長さ0の文字列を指定した場合は，SQLExceptionが投入されます。

(c)　引数passwordの指定内容（パスワードの指定）

HADBサーバに接続する認可識別子のパスワードを指定します。

nullを指定した場合，または長さ0の文字列を指定した場合，パスワードの指定を省略したと見なされます。

(d)　引数infoの指定内容（ユーザプロパティの指定）

引数infoに指定できる情報（ユーザプロパティに指定できる情報）を次の表に示します。

表7‒3　引数infoに指定できる情報（ユーザプロパティに指定できる情報）

項番

プロパティ名

説明

1

user

HADBサーバに接続する認可識別子を指定します。

認可識別子の名称規則については，マニュアルHADB　SQLリファレンスの名前の指定を参照してください。

HADBサーバに接続する認可識別子はほかの方法でも指定できます。指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

認可識別子がどこにも指定されていない状態でgetConnectionメソッドを実行すると，SQLExceptionが投入されます。

nullを指定した場合，認可識別子の指定がないと見なされます。

長さ0の文字列を指定した場合，SQLExceptionが投入されます。

2

password

HADBサーバに接続する認可識別子のパスワードを指定します。

nullを指定した場合，または長さ0の文字列を指定した場合，パスワードの指定がないと見なされます。

3

encodelang

StringクラスでHADBサーバとのデータ受け渡しをする場合に，文字コード変換処理で使用する変換文字セットを指定します。このプロパティの機能詳細および指定できる値については，「表7‒2　引数urlに指定できるプロパティ」を参照してください。

Java仮想マシンがサポートしていない変換文字セット名称を指定した場合は，HADBサーバとの接続時にSQLExceptionを投入します。

この指定を省略した場合，接続用のURLのencodelangの指定が適用されます。

4

methodtrace

JDBCインタフェースメソッドトレースを取得するかどうかを指定します。このプロパティの機能詳細および指定できる値については，「表7‒2　引数urlに指定できるプロパティ」を参照してください。

この指定を省略した場合，接続用のURLのmethodtraceの指定が適用されます。

5

tracenum

JDBCインタフェースメソッドトレースのエントリ数を指定します。このプロパティの機能詳細および指定できる値については，「表7‒2　引数urlに指定できるプロパティ」を参照してください。

この指定を省略した場合，接続用のURLのtracenumの指定が適用されます。

6

sqlwarningkeep

HADBサーバから返される警告情報を保持するかどうかを指定します。このプロパティの機能詳細および指定できる値については，「表7‒2　引数urlに指定できるプロパティ」を参照してください。

この指定を省略した場合，接続用のURLのsqlwarningkeepの指定が適用されます。

7

adb_clt_rpc_srv_host

接続先のHADBサーバのホスト名を指定します。

このプロパティの機能は，クライアント定義のadb_clt_rpc_srv_hostオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_srv_hostオペランドを参照してください。

8

adb_clt_rpc_srv_port

HADBクライアントとHADBサーバ間の通信で使用する，HADBサーバのポート番号を指定します。

このプロパティの機能は，クライアント定義のadb_clt_rpc_srv_portオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_srv_portオペランドを参照してください。

9

adb_clt_rpc_con_wait_time

HADBサーバへの接続処理の完了待ち時間を指定します。

このプロパティの機能は，クライアント定義のadb_clt_rpc_con_wait_timeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_con_wait_timeオペランドを参照してください。

10

adb_clt_rpc_sql_wait_time

次に示す待ち時間を指定します。

HADBクライアントからHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間

同一コネクションで複数のSELECT文を同時実行した際に，処理リアルスレッド数不足が発生したときの処理リアルスレッドの確保処理の待ち時間

このプロパティの機能は，クライアント定義のadb_clt_rpc_sql_wait_timeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_rpc_sql_wait_timeオペランドを参照してください。

11

adb_clt_ap_name

HADBサーバに接続するAPの識別情報（AP識別子）を指定します。

AP識別子はJava仮想マシンのデフォルトの変換文字セットで変換されるため，変換文字セットに依存しない半角英数字だけで構成される名称を指定することを推奨します。

なお，AP識別子はほかの方法でも指定できます。指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

AP識別子をどこにも指定しないでHADBサーバに接続した場合，AP識別子には"********"が設定されます。

このプロパティの機能は，クライアント定義のadb_clt_ap_nameオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_ap_nameオペランドを参照してください。

12

adb_clt_group_name

APが属するクライアントグループ名を指定します。

このプロパティの機能は，クライアント定義のadb_clt_group_nameオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_group_nameオペランドを参照してください。

13

adb_clt_fetch_size

1回のFETCH処理で，HADBサーバからHADBクライアントに送信する検索結果の行数を指定します。

このプロパティの機能は，クライアント定義のadb_clt_fetch_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_fetch_sizeオペランドを参照してください。

14

adb_dbbuff_wrktbl_clt_blk_num

ローカル作業表用バッファのページ数を指定します。

このプロパティの機能は，クライアント定義のadb_dbbuff_wrktbl_clt_blk_numオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_dbbuff_wrktbl_clt_blk_numオペランドを参照してください。

15

adb_sql_exe_max_rthd_num

SQL実行時に使用する処理リアルスレッド数の最大値を指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_max_rthd_numオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_max_rthd_numオペランドを参照してください。

16

adb_sql_exe_hashgrp_area_size

ハッシュグループ化領域の大きさをキロバイト単位で指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドを参照してください。

17

adb_sql_exe_hashtbl_area_size

ハッシュテーブル領域サイズをメガバイト単位で指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドを参照してください。

18

adb_sql_exe_hashflt_area_size

ハッシュフィルタ領域サイズをメガバイト単位で指定します。

このプロパティの機能は，クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドを参照してください。

19

adb_clt_sql_parallel_exec

SQLパラレル実行機能を適用して検索系SQLを実行するかどうかを指定します。

このプロパティの機能は，クライアント定義のadb_clt_sql_parallel_execオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_sql_parallel_execオペランドを参照してください。

20

adb_sql_prep_delrsvd_use_srvdef

サーバ定義のadb_sql_prep_delrsvd_wordsオペランドの指定に従って予約語を削除するかどうかを指定します。

このプロパティの機能は，クライアント定義のadb_sql_prep_delrsvd_use_srvdefオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_prep_delrsvd_use_srvdefオペランドを参照してください。

21

adb_clt_trn_iso_lv

トランザクション隔離性水準を指定します。

このプロパティの機能は，クライアント定義のadb_clt_trn_iso_lvオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_trn_iso_lvオペランドを参照してください。

22

adb_clt_trn_access_mode

トランザクションアクセスモードを指定します。

このプロパティの機能は，クライアント定義のadb_clt_trn_access_modeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_trn_access_modeオペランドを参照してください。

23

adb_clt_sql_text_out

HADBクライアントが発行したSQL文を，クライアントメッセージログファイルおよびサーバメッセージログファイルに出力するかどうかを指定します。

このプロパティの機能は，クライアント定義のadb_clt_sql_text_outオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_sql_text_outオペランドを参照してください。

24

adb_clt_sql_order_mode

ORDER BY句を指定したSELECT文の文字データの並び替え順序を指定します。

このプロパティの機能は，クライアント定義のadb_clt_sql_order_modeオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_clt_sql_order_modeオペランドを参照してください。

25

adb_sql_prep_dec_div_rs_prior

SQL文中に指定した除算（四則演算）の結果のデータ型がDECIMAL型の場合，除算結果の位取りの最小値を指定します。

このプロパティの機能は，クライアント定義のadb_sql_prep_dec_div_rs_priorオペランドと同じです。機能詳細および指定できる値については，クライアント定義のadb_sql_prep_dec_div_rs_priorオペランドを参照してください。

26

adb_jdbc_exc_trc_out_path

Exceptionトレースログを出力するディレクトリを，絶対パスで指定します。

これらのプロパティの機能詳細および指定できる値については，「7.7.2　Exceptionトレースログ」の「(1)　取得するメソッド，および取得するための設定」の「(b)　Exceptionトレースログを取得するための設定（プロパティの設定）」を参照してください。

27

adb_jdbc_info_max

1ファイルへ出力する情報数の上限を指定します。

28

adb_jdbc_cache_info_max

メモリ内で蓄積する情報数の上限を指定します。

29

adb_jdbc_trc_out_lv

トレース取得レベルを指定します。

注

各プロパティは，ほかの方法でも指定できます。ほかの指定方法，および指定の優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

各プロパティにnullを指定した場合，指定を省略したと見なされます。

メモ

HADB 03-00で，ユーザプロパティの各プロパティ名を次のように変更しました。変更前のプロパティ名も使用できますが，HADB 03-00以降にバージョンアップした場合は，プロパティ名を変更することを推奨します。

項番

変更前のプロパティ名（HADB 03-00より前のプロパティ名）

変更後のプロパティ名（HADB 03-00以降のプロパティ名）

1

apname

adb_clt_ap_name

2

host

adb_clt_rpc_srv_host

3

port

adb_clt_rpc_srv_port

7.3.2　DataSourceクラスのgetConnectionメソッドでHADBサーバに接続する方法

DataSourceとJNDIを使用したDB接続（HADBサーバへの接続）は，JDBC 2.0 Optional Packageで使用できるようになりました。

JNDIを必ず使用する必要はありませんが，JNDIを使用することで接続情報の設定が1回で済むというメリットがあります。DataSourceクラスのインタフェース定義，およびJNDIは，JDKに標準で含まれていないため，AP開発をする場合には，JavaSoftのWebサイトから入手する必要があります。

DataSourceとJNDIを使用したHADBサーバへの接続手順を次に示します。

手順

DataSourceオブジェクトの生成

接続情報の設定

JNDIへのDataSourceの登録

JNDIからのDataSourceの取得

HADBサーバへの接続

JNDIを使用しない場合は，3および4の操作をする必要はありません。

JNDIを使用する場合，1〜3の操作は1回だけ実行します。そのあと，4および5の操作をするだけで，HADBサーバに接続できます。また，4の操作のあと，必要に応じて接続情報を変更できます。

(1)　DataSourceオブジェクトの生成

JDBCドライバが提供する，DataSourceクラスのオブジェクトを生成します。

DataSourceクラスのオブジェクト生成で必要となる，JDBCドライバのDataSourceクラス名はAdbDataSourceとなります。

DataSourceクラスのオブジェクトの生成例を次に示します。

com.hitachi.hadb.jdbc.AdbDataSource  ds = null ;
ds = new com.hitachi.hadb.jdbc.AdbDataSource() ;

(2)　接続情報の設定

DataSourceオブジェクトに対して，接続情報設定用メソッドを呼び出し，接続情報の設定をします。接続情報取得用のメソッドも使用できるため，現在の接続情報の確認もできます。接続情報設定および取得メソッドについては，「10.5　接続情報設定および取得インタフェース」を参照してください。

(3)　JNDIへのDataSourceの登録

DataSourceオブジェクトをJNDIに登録します。

JNDIは，その実行環境によって幾つかのサービスプロバイダを選択できます。

DataSourceオブジェクトのJNDIへの登録例を次に示します（Windowsの場合の例です）。なお，登録例では，サービスプロバイダの一つである，File Systemサービスプロバイダを使用しています。ほかのサービスプロバイダについては，JNDIのドキュメントを参照してください。

 // JDBCドライバが提供するDataSourceクラスのオブジェクトを生成する
 com.hitachi.hadb.jdbc.AdbDataSource  ds;
 ds = new com.hitachi.hadb.jdbc.AdbDataSource();

 // 接続情報を設定する
         ：

 // システムプロパティを取得する
 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ドライバが提供するDataSourceクラスのオブジェクトを，
 // jdbc/TestDataSourceという論理名称でJNDIに登録する
 ctx.bind("jdbc" + "¥¥" + "TestDataSource", ds);
     ：

なお，JDBC 2.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)　HADBサーバへの接続

DataSourceオブジェクトに対して，getConnectionメソッドを呼び出します。getConnectionメソッドの呼び出し例を次に示します。

 DataSource ds

 // JNDIからDataSourceオブジェクトを取得する
                      ：

 // getConnectionメソッドを発行する
 Connection con = ds.getConnection();
   または
 Connection con = ds.getConnection("USERID", "PASSWORD");※

注※

メソッドの引数（認可識別子，パスワード）は，DataSourceオブジェクトに設定した接続情報よりも優先されます。次に示す場合はSQLExceptionが投入されます。

必要な接続情報がDataSourceオブジェクトに設定されていない場合

接続情報の内容が不正な場合

HADBサーバとの接続に失敗した場合

JNDIからDataSourceオブジェクトを取得後，必要に応じて接続情報を再度設定できます。この場合，DataSourceオブジェクトを，JDBCドライバが提供するDataSourceクラスの型にキャストしてから設定する必要があります。例を次に示します。

 DataSource ds
 com.hitachi.hadb.jdbc.AdbDataSource  adb_ds;

 // JNDIからDataSourceオブジェクトを取得する
                      ：

 // DataSourceオブジェクトを，JDBCドライバが提供する
 // DataSourceクラスの型にキャストする
 adb_ds = (com.hitachi.hadb.jdbc.AdbDataSource)ds;

 // 接続情報を再設定する
           ：

7.3.3　接続情報の優先順位

(1)　HADBサーバへの接続時に必要となる接続情報

HADBサーバへの接続時に必要となる接続情報を次に示します。

HADBサーバのホスト名

HADBサーバのポート番号

HADBサーバに接続する認可識別子とパスワード

AP識別子

各プロパティに指定できる上記以外の項目

これらの接続情報は，幾つかの方法で設定できます。例えば，HADBサーバのホスト名は，システムプロパティのadb_clt_rpc_srv_hostに指定する方法と，接続用のURLのhostに指定する方法があります。

このように接続情報が複数の方法で設定された場合の指定の優先順位を次の表に示します。

表7‒4　接続情報の指定の優先順位

接続情報

設定方法

優先順位

DM

DS

HADBサーバのホスト名

システムプロパティadb_clt_rpc_srv_hostの値

1

1

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したadb_clt_rpc_srv_hostプロパティの値

2

−

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したhostの値

3

−

接続情報設定および取得インタフェースのsetHostNameメソッドで設定したホスト名

−

2

HADBサーバのポート番号

システムプロパティadb_clt_rpc_srv_portの値

1

1

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したadb_clt_rpc_srv_portプロパティの値

2

−

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したportの値

3

−

接続情報設定および取得インタフェースのsetPortメソッドで設定したポート番号

−

2

接続時の認可識別子，パスワード

次に示すどちらかの値

DriverManagerクラスのgetConnectionメソッドの引数userおよびpasswordの値

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したuserおよびpasswordプロパティの値

1

−

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したuserおよびpasswordの値

2

−

次に示すどちらかの値

DataSourceインタフェースのgetConnectionメソッドの引数usernameおよびpasswordに指定した値

ConnectionPoolDataSourceインタフェースのgetPooledConnectionメソッドの引数userおよびpasswordに指定した値

−

1

接続情報設定および取得インタフェースのsetUserメソッドで設定した認可識別子

接続情報設定および取得インタフェースのsetPasswordメソッドで設定したパスワード

−

2

AP識別子

システムプロパティadb_clt_ap_nameの値

1

1

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したadb_clt_ap_nameプロパティの値

2

−

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したadb_clt_ap_nameの値

3

−

接続情報設定および取得インタフェースのsetApNameメソッドで設定したAP識別子

−

2

HADBサーバへの接続処理のタイムアウト時間

システムプロパティadb_clt_rpc_con_wait_timeの値

1

1

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したadb_clt_rpc_con_wait_timeの値

2

−

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したadb_clt_rpc_con_wait_timeの値

3

−

DriverManagerクラスのsetLoginTimeoutメソッドで指定した値

4

−

次に示すどちらかの値

DataSourceインタフェースのsetLoginTimeoutメソッドで指定した値

ConnectionPoolDataSourceインタフェースのsetLoginTimeoutメソッドで指定した値

−

2

各プロパティに指定できる上記以外の項目（次の項目が該当）

adb_clt_rpc_sql_wait_time

adb_clt_group_name

adb_clt_fetch_size

adb_clt_sql_text_out

adb_clt_trn_iso_lv

adb_clt_sql_order_mode

adb_sql_prep_dec_div_rs_prior

adb_clt_trn_access_mode

adb_dbbuff_wrktbl_clt_blk_num

adb_sql_prep_delrsvd_use_srvdef

adb_sql_exe_max_rthd_num

adb_sql_exe_hashgrp_area_size

adb_sql_exe_hashtbl_area_size

adb_sql_exe_hashflt_area_size

adb_clt_sql_parallel_exec

adb_jdbc_exc_trc_out_path

adb_jdbc_info_max

adb_jdbc_cache_info_max

adb_jdbc_trc_out_lv

システムプロパティに指定したプロパティの値

1

1

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したプロパティの値

2

−

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したプロパティの値

3

−

（凡例）

DM：DriverManagerクラスを使用して接続した場合

DS：DataSourceクラスを使用して接続した場合

−：接続情報を指定できません。

注

優先順位の番号が小さいほど優先順位が高くなります。1と2では1の指定が優先されます。

(2)　各プロパティで指定できる接続情報の一覧

HADBサーバへの接続時に必要となる接続情報は，システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティで指定できます。各プロパティで指定できる接続情報の一覧を次の表に示します。

表7‒5　各プロパティで指定できる接続情報の一覧

項番

分類

プロパティ名

各プロパティでの指定可否

システムプロパティ

ユーザプロパティ

接続用のURLのプロパティ

1

クライアント定義と同じ名称，同じ機能を持つプロパティ※1

adb_clt_rpc_srv_host

○

○

△※2

2

adb_clt_rpc_srv_port

○

○

△※3

3

adb_clt_rpc_con_wait_time

○

○

○

4

adb_clt_rpc_sql_wait_time

○

○

○

5

adb_clt_ap_name

○

○

○

6

adb_clt_group_name

○

○

○

7

adb_clt_fetch_size

○

○

○

8

adb_dbbuff_wrktbl_clt_blk_num

○

○

○

9

adb_sql_exe_max_rthd_num

○

○

○

10

adb_sql_exe_hashgrp_area_size

○

○

○

11

adb_sql_exe_hashtbl_area_size

○

○

○

12

adb_sql_exe_hashflt_area_size

○

○

○

13

adb_clt_sql_parallel_exec

○

○

○

14

adb_sql_prep_delrsvd_use_srvdef

○

○

○

15

adb_clt_trn_iso_lv

○

○

○

16

adb_clt_trn_access_mode

○

○

○

17

adb_clt_sql_text_out

○

○

○

18

adb_clt_sql_order_mode

○

○

○

19

adb_sql_prep_dec_div_rs_prior

○

○

○

20

Exceptionトレースログに関するプロパティ

adb_jdbc_exc_trc_out_path

○

○

○

21

adb_jdbc_info_max

○

○

○

22

adb_jdbc_cache_info_max

○

○

○

23

adb_jdbc_trc_out_lv

○

○

○

24

上記以外のプロパティ

user

×

○

○

25

password

×

○

○

26

encodelang

×

○

○

27

methodtrace

×

○

○

28

tracenum

×

○

○

29

sqlwarningkeep

×

○

○

（凡例）

○：指定できるプロパティ

△：指定できないプロパティではあるが，代替となる指定あり

×：指定できないプロパティ

注※1

これらのプロパティは，クライアント定義のオペランド名と同じプロパティ名であり，クライアント定義のオペランドと同じ機能を持っています。

注※2

接続用のURLのプロパティでは，接続先のHADBサーバのホスト名をadb_clt_rpc_srv_hostで指定できません。接続先のHADBサーバのホスト名は，接続用のURLのhostで指定します。

注※3

接続用のURLのプロパティでは，HADBサーバのポート番号をadb_clt_rpc_srv_portで指定できません。HADBサーバのポート番号は，接続用のURLのportで指定します。

重要

JDBCドライバを使用している場合，クライアント定義のオペランドの指定は適用されません。システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティの指定が適用されます。

システムプロパティについては，「3.1.6　システムプロパティの設定」を参照してください。

ユーザプロパティについては，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(d)　引数infoの指定内容（ユーザプロパティの指定）」を参照してください。

接続用のURLのプロパティについては，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(a)　引数urlの指定内容（接続用のURLの指定）」を参照してください。

7.4　データを検索する場合（SELECT文を実行する場合）

ここでは，JDBCドライバを使用したデータの検索方法について説明します。

7.4.1　データの検索方法

SELECT文を実行してデータを検索する場合，次に示す順序で処理を実行します。

Statementオブジェクトを生成する

SELECT文を実行する

検索結果を取得する

(1)　Statementオブジェクトの生成

Statementオブジェクトを生成して，SELECT文をHADBサーバに送ります。

なお，HADBサーバへの接続がすでに確立されている場合は，ConnectionオブジェクトのcreateStatementメソッドを使用してStatementオブジェクトを生成できます。

Statementオブジェクトの生成例を次に示します。

 // HADBサーバへ接続します
 Connection con = DriverManager.getConnection(url,info);

 // Statementオブジェクトを生成します
 Statement stmt = con.createStatement();

(2)　SELECT文の実行

executeQueryメソッドの引数にSELECT文を指定してSELECT文を実行します。SELECT文の実行例を次に示します。

 Statement stmt = con.createStatement();

 // SELECT文を実行して，ResultSetオブジェクトを取得します
 ResultSet rs = stmt.executeQuery("SELECT ¥"CODE¥", ¥"STATE¥" FROM ¥"SAMPLE¥"");

SELECT文を実行すると，ResultSetオブジェクトに検索結果が格納されます。

(3)　検索結果の取得

ResultSetオブジェクトには，列番号と検索結果に対応する値から構成される表の形式で検索結果が格納されます。ResultSetオブジェクトの形式の例を次の図に示します。

図7‒2　ResultSetオブジェクトの形式の例

ResultSetオブジェクトは，現在行を指し示すカーソルを保持しています。ResultSetオブジェクトから検索結果を取得するには，nextメソッドでカーソルを移動し，getXXXメソッドで現在行のデータを取得します。

ResultSetオブジェクトの作成時，先頭行の前にカーソルが位置づけられています。最初のnextメソッドの呼び出しによってカーソルは先頭行に移動します。nextメソッドが呼び出されるたびにカーソルが1行ずつ下に移動します。

検索結果データの取得例を次に示します。

 ResultSet rs = stmt.executeQuery("SELECT ¥"CODE¥", ¥"STATE¥" FROM ¥"SAMPLE¥"");

 // 結果行がなくなるまで繰り返します
 while(rs.next())
 {
   // 1列目のデータを取得します
   int i = rs.getInt(1);
   // 2列目のデータを取得します
   String s = rs.getString(2);
   // 結果データを出力します
   System.out.println("検索結果: " + i + ", " + s);
 }

(4)　同一コネクションで複数のSELECT文を同時実行する際の注意事項

同一コネクションで複数のSELECT文を同時に実行すると，SELECT文の実行に必要な処理リアルスレッド数が不足することがあります。この場合，必要な処理リアルスレッド数が確保されるまで，処理リアルスレッドの確保処理が繰り返されます。そのため，次に示すどれかの対策を実施して，処理リアルスレッドの確保処理が無限に繰り返されることを防いでください。まずは，対策の1.が実施できるかどうかを検討してください。

対策

APを修正する

APの修正ができる場合は，不要となったResultSetオブジェクトをクローズするようにAPを修正してください。APの修正ができない場合は，2.の対策の実施を検討してください。

サーバ定義を変更する

次の計算式を満たすようにサーバ定義を変更できる場合は，サーバ定義を変更してください。

A ≧ B×C×D

A：処理スレッド数（adb_sys_rthd_numオペランドの値）

B：最大SQL処理リアルスレッド数（adb_sql_exe_max_rthd_numオペランドの値）

C：1コネクション内で同時に実行する（カーソルオープン状態にする）SELECT文の数

D：同時にSQL文を実行するコネクション数

待ち時間を設定する

上記の1.または2.の対策を実施できない場合は，必要な処理リアルスレッド数を確保できるまでの待ち時間を，次のメソッドまたはプロパティで指定してください。

StatementインタフェースのsetQueryTimeoutメソッド

システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_clt_rpc_sql_wait_time

7.4.2　？パラメタの使用方法

？パラメタを使用してデータを検索する場合，次に示す順序で処理を実行します。

PreparedStatementオブジェクトを生成する

SELECT文を実行する

検索結果を取得する

(1)　PreparedStatementオブジェクトの生成

PreparedStatementオブジェクトを生成して，？パラメタを指定したSELECT文をHADBサーバに送ります。

なお，HADBサーバへの接続がすでに確立されている場合は，ConnectionオブジェクトのprepareStatementメソッドを使用してPreparedStatementオブジェクトを生成できます。

PreparedStatementオブジェクトの生成例を次に示します。

 // HADBサーバへ接続します
 Connection con = DriverManager.getConnection(url, info);

 // PreparedStatementオブジェクトを生成します
 PreparedStatement pstmt =
 con.prepareStatement("SELECT * FROM ¥"SAMPLE¥" WHERE ¥"CODE¥" = ? AND ¥"STATE¥" = ?");

prepareStatementメソッドの引数にSELECT文を指定すると，このSELECT文が前処理されてPreparedStatementオブジェクトが生成されます。

SQL文に？パラメタを指定している場合，SQL文の実行前に各？パラメタの値を設定する必要があります。？パラメタに値を設定するには，setXXXメソッドを使用します。

(2)　SELECT文の実行

引数指定なしのexecuteQueryメソッドを使用してSELECT文を実行します。？パラメタを使用したSELECT文の実行例を次に示します。

 PreparedStatement pstmt =
 con.prepareStatement("SELECT * FROM ¥"SAMPLE¥" WHERE ¥"CODE¥" = ? AND ¥"STATE¥" = ?");

 // 1番目の？パラメタに値を設定します
 pstmt.setInt(1, 12345);
 // 2番目の？パラメタに値を設定します
 pstmt.setString(2, "Boston");

 // 前処理済みのSQL文を実行して，ResultSetオブジェクトを取得します
 ResultSet rs = pstmt.executeQuery();

SELECT文を実行すると，ResultSetオブジェクトに検索結果が格納されます。

(3)　検索結果の取得

検索結果の取得方法については，「7.4.1　データの検索方法」の「(3)　検索結果の取得」を参照してください。

7.5　データを追加，更新，または削除する場合（INSERT文，UPDATE文，またはDELETE文を実行する場合）

INSERT文，UPDATE文，またはDELETE文などの操作系SQLによるデータの追加，更新，または削除をするには，Statementオブジェクト（？パラメタを使用する場合はPreparedStatementオブジェクト）のexecuteUpdateメソッドまたはexecuteLargeUpdateメソッドを使用します。

データの更新および削除の実行例を次に示します。

 Connection con = DriverManager.getConnection(url, info);
 Statement stmt = con.createStatement();

 // 条件に合致するデータを更新します
 stmt.executeUpdate("UPDATE ¥"SAMPLE¥" SET ¥"CODE¥"=98765 WHERE ¥"STATE¥" = 'Redmond'");

 // すべての行を削除します
 stmt.executeUpdate("DELETE FROM ¥"SAMPLE¥" ");

■更新操作によるカーソルを使用した検索への影響

カーソルを使用した検索中に更新操作を行うと，タイミングによっては更新操作の結果が，検索の結果に反映されることがあります。更新操作の結果を検索の結果に反映させないようにするには，次のように運用してください。

カーソルを閉じたあとに，行の追加または更新を行う

追加または更新する行が，検索結果と一致しないようにデータや探索条件などを工夫する

7.6　データ処理

この章では，JDBCドライバとHADBサーバ間のデータ処理方式について説明します。

7.6.1　データ型のマッピング

ここでは，HADBのデータ型とJDBCのSQLデータ型のマッピングについて説明します。

(1)　HADBのデータ型とJDBCのSQLデータ型の対応

HADBのデータ型とJDBCのSQLデータ型は，完全には一致していません。そのため，JDBCドライバが，HADBのデータ型とJDBCのSQLデータ型をマッピング（変換）します。マッピングできないデータ型を使用してアクセスしようとすると，SQLExceptionが投入されます。

データ型のマッピングは，ResultSetまたはPreparedStatementクラスのgetXXXメソッドおよびsetXXXメソッドで実行します。getXXXメソッドおよびsetXXXメソッドのマッピング規則については，JDBC1.0規格またはJDBC 2.0基本規格のドキュメントを参照してください。

HADBのデータ型とJDBCのSQLデータ型の対応を次の表に示します。

表7‒6　HADBのデータ型とJDBCのSQLデータ型の対応

HADBのデータ型

JDBCのSQLデータ型

INTEGER

BIGINT

SMALLINT

INTEGER，SMALLINT※1

DECIMAL，NUMERIC

DECIMAL（，NUMERIC）※2

DOUBLE PRECISION，FLOAT

DOUBLE（，FLOAT）※2

CHAR

CHAR

VARCHAR

VARCHAR（，LONGVARCHAR）※2

DATE

DATE

TIME

TIME

TIMESTAMP

TIMESTAMP

BINARY

BINARY（，VARBINARY，LONGVARBINARY）※2

VARBINARY

VARBINARY（，BINARY，LONGVARBINARY）※2

ROW

BINARY（，VARBINARY，LONGVARBINARY）※2

BOOLEAN※3

BOOLEAN

ARRAY

ARRAY

注※1

DatabaseMetaDataから生成したResultSetにだけ存在する列です。データ型がshortで規定されている列の場合，ResultSetMetaDataで取得できるメタデータにはSMALLINTに対応した値を返却します。ただし，メタデータ以外はINTEGERに対応した値を返却します。

注※2

（　）内のデータ型は，setNullメソッドまたはsetObjectメソッドの引数にJDBCのSQLデータ型を指定する場合にだけ対応します。HADBのデータ型からJDBCのSQLデータ型へマッピングする際には対応しません。

注※3

DatabaseMetaDataのgetTypeInfoメソッドなどで生成される，ResultSetオブジェクトが持つBOOLEAN型の列を指します。

(2)　検索データ取得時のマッピング

ResultSetクラスのgetXXXメソッドと，JDBCのSQLデータ型とのマッピングを次の表に示します。マッピングできないJDBCのSQLデータ型に対してgetXXXメソッドが呼び出された場合は，SQLExceptionが投入されます。

表7‒7　getXXXメソッドとJDBCのSQLデータ型とのマッピング

メソッド名

JDBCのSQLデータ型

BIGINT

INTEGER

DECIMAL

DOUBLE

CHAR

VARCHAR

DATE

TIME

TIMESTAMP

BINARY，

VARBINARY

ARRAY

getByte

○

○

○

○

○※

○※

×

×

×

×

×

getShort

○

○

○

○

○※

○※

×

×

×

×

×

getInt

○

◎

○

○

○※

○※

×

×

×

×

×

getLong

◎

○

○

○

○※

○※

×

×

×

×

×

getFloat

○

○

○

○

○※

○※

×

×

×

×

×

getDouble

○

○

○

◎

○※

○※

×

×

×

×

×

getBigDecimal

○

○

◎

○

○※

○※

×

×

×

×

×

getBoolean

○

○

○

○

○

○

×

×

×

×

×

getString

○

○

○

○

◎

◎

○

○

○

○

×

getBytes

×

×

×

×

×

×

×

×

×

◎

×

getDate

×

×

×

×

○※

○※

◎

○

○

×

×

getTime

×

×

×

×

○※

○※

×

◎

○

×

×

getTimestamp

×

×

×

×

○※

○※

○

○

◎

×

×

getAsciiStream

×

×

×

×

○

○

×

×

×

○

×

getObject

○

○

○

○

○

○

○

○

○

○

×

getCharacterStream

×

×

×

×

○

○

×

×

×

○

×

getBinaryStream

×

×

×

×

×

×

×

×

×

○

×

getArray

×

×

×

×

×

×

×

×

×

×

◎

（凡例）

◎：マッピングすることを推奨します。

○：マッピングできます。ただし，変換元のデータ形式によっては，データの欠落や変換エラーになることがあるため，注意してください。

×：マッピングできません。

注※

このメソッドでの変換の際に，データベースから取得した文字列データの前後に半角空白がある場合は，半角空白を取り除きます。また，半角空白を取り除いたあと，getXXXメソッドが返却するJavaのデータ型に変換します。

Javaのデータ型に変換する場合の注意事項を次に示します。

文字列データに小数点以下の表現がある場合，getByteメソッド，getIntメソッド，getShortメソッド，またはgetLongメソッドを実行すると，小数点以下を切り捨てて整数だけを変換し，返却します。

文字列データに全角文字が含まれている場合，変換はしないでSQLExceptionが投入されます。

文字列データをJavaのデータ型に変換した結果，オーバフローが発生した場合，SQLExceptionが投入されます。

(3)　？パラメタ設定時のマッピング

PreparedStatementクラスのsetXXXメソッドと，マッピングされるJDBCのSQLデータ型を次の表に示します。使用できないJDBCのSQLデータ型の場合，SQLExceptionが投入されます。

PreparedStatementクラスのsetXXXメソッドと各JDBCのSQLデータ型とのマッピングを次の表に示します。

表7‒8　setXXXメソッドとJDBCのSQLデータ型とのマッピング

メソッド名

JDBCのSQLデータ型

BIGINT

INTEGER

DECIMAL※1

DOUBLE

CHAR

VARCHAR

DATE

TIME

TIMESTAMP

BINARY，

VARBINARY

ARRAY

setByte

○

○

○

○

○

○

×

×

×

×

×

setShort

○

○

○

○

○

○

×

×

×

×

×

setInt

○

◎

○

○

○

○

×

×

×

×

×

setLong

◎

○

○

○

○

○

×

×

×

×

×

setFloat

○

○

○

○

○

○

×

×

×

×

×

setDouble

○

○

○

◎

○

○

×

×

×

×

×

setBigDecimal

○

○

◎

○

○

○

×

×

×

×

×

setBoolean

○

○

○

○

○

○

×

×

×

×

×

setString

○

○

○

○

◎

◎

○

○

○

○

×

setBytes

×

×

×

×

×

×

×

×

×

◎

×

setDate

×

×

×

×

○

○

◎

○

○

×

×

setTime

×

×

×

×

○

○

×

◎

○

×

×

setTimestamp※2

×

×

×

×

○

○

○

○

◎

×

×

setAsciiStream

×

×

×

×

○

○

×

×

×

○

×

setObject※3

○

○

○

○

○

○

○

○

○

○

×

setCharacterStream

×

×

×

×

○※4

○※4

×

×

×

○

×

setBinaryStream

×

×

×

×

×

×

×

×

×

○

×

（凡例）

◎：マッピングすることを推奨します。

○：マッピングできます。ただし，変換元データの形式によっては，データの欠落や変換エラーとなることがあるため，注意してください。

×：マッピングできません。

注※1

HADBのデータ型であるDECIMAL型またはNUMERIC型の？パラメタに対してsetXXXメソッドで値を指定する場合に，？パラメタの精度および位取りと，値の精度および位取りが一致していないときの動作を次に示します。

？パラメタの精度よりも大きいとき：SQLExceptionが投入されます。

？パラメタの精度よりも小さいとき：拡張します。

？パラメタの位取りよりも大きいとき：実際の位取りで切り捨てます。

？パラメタの位取りよりも小さいとき：0で補完して，拡張します。

注※2

HADBのデータ型であるTIME型またはTIMESTAMP型の？パラメタに対してsetXXXメソッドで値を指定する場合に，？パラメタの小数秒精度と値の小数秒精度が一致していないときの動作を次に示します。

？パラメタの小数秒精度よりも大きいとき：切り捨てます。

？パラメタの小数秒精度よりも小さいとき：拡張します。

注※3

setObjectメソッドにInputStreamクラスおよびReaderクラス（サブクラスを含む）のオブジェクトは指定できません。

注※4

java.io.Readerオブジェクトから取得できるデータの長さが，引数で指定した長さより短い場合，次に示すように引数で指定した長さまで0を補完します。

7.6.2　データの変換処理

ここでは，setXXXおよびgetXXXメソッド実行時のデータ変換処理について説明します。

(1)　setXXXメソッド実行時のデータ変換処理（DATE型，TIME型，またはTIMESTAMP型の場合）

setTime，setDate，setTimestamp，またはsetStringメソッドに，HADBのデータ型のDATE型，TIME型，またはTIMESTAMP型のデータを設定した場合の変換処理について説明します。

HADBのデータ型のDATE型，TIME型，またはTIMESTAMP型の列に対して，setTime，setDate，setTimestamp，またはsetStringメソッドを使用してデータを設定した場合，次の表に示す規則に従ってデータ変換が行われます。

表7‒9　setXXXメソッド実行時の変換処理

実行するメソッド

DATE型の変換処理

TIME型の変換処理

TIMESTAMP型の変換処理

setDate(Date Obj)※1

APの設定値どおりにデータベースに格納されます。

00:00:00がデータベースに格納されます。

APの設定値YYYY-MM-DDの後ろに「00:00:00」を付与したデータがデータベースに格納されます。

setTime(Time Obj)※2

SQLExceptionが投入されます。

APの設定値hh:mm:ss.fffのデータがデータベースに格納されます。

APの設定値hh:mm:ss.fffの前に「1970-01-01」を付与したデータがデータベースに格納されます。

setTimestamp(Timestamp Obj)※3

APの設定値から「YYYY-MM-DD」を抜き出したデータがデータベースに格納されます。

APの設定値から「hh:mm:ss.fffffffff」を抜き出したデータがデータベースに格納されます。

APの設定値YYYY-MM-DD△hh:mm:ss.fffffffffのデータがデータベースに格納されます。※4

setString(YYYY-MM-DD形式の文字列)

指定された日付がjava.sql.Date.valueOf()で変換されてデータベースに格納されます。※5

00:00:00がデータベースに格納されます。

SQLExceptionが投入されます。

setString(hh:mm:ss[.f...]形式の文字列)

SQLExceptionが投入されます。

APの設定値hh:mm:ss[.f...]のデータがデータベースに格納されます。

SQLExceptionが投入されます。

setString(YYYY-MM-DD△hh:mm:ss[.f...]形式の文字列)※4

SQLExceptionが投入されます。

APの設定値hh:mm:ss[.f...]のデータがデータベースに格納されます。

APの設定値YYYY-MM-DD△hh:mm:ss[.f...]のデータがデータベースに格納されます。※5

注

実際に存在しない日時を指定した場合は，Java仮想マシンが返す値となります。

注※1

「Date Obj」は，java.sql.Dateオブジェクト「年−月−日」の値を持つオブジェクトです。

注※2

「Time Obj」は，java.sql.Timeオブジェクト「時：分：秒.ミリ秒」の値を持つオブジェクトです。

注※3

「Timestamp Obj」は，java.sql.Timestampオブジェクト「年−月−日　時：分：秒．ナノ秒」の値を持つオブジェクトです。

注※4

△は半角空白を示します。

注※5

存在しない日時を指定した場合の結果はjava.sql.Date.valueOf()，java.sql.Time.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)　getXXXメソッド実行時のデータ変換処理（DATE型，TIME型，TIMESTAMP型，または文字列型の場合）

getTime，getDate，またはgetTimestampメソッドに，HADBのデータ型のDATE型，TIME型，TIMESTAMP型，または文字列型（CHAR型，VARCHAR型）のデータを設定した場合の変換処理について説明します。

HADBのデータ型のDATE型，TIME型，TIMESTAMP型，または文字列型の列に対して，getTime，getDate，またはgetTimestampメソッドを使用してデータを設定した場合，次の表に示す規則に従ってデータ変換が行われます。

表7‒10　getXXXメソッド実行時の変換処理

実行するメソッド

DATE型の変換処理

TIME型の変換処理

TIMESTAMP型の変換処理

文字列型の変換処理

getDate()※1

データベースに格納されている値どおりにjava.sql.Dateのオブジェクトとして取得されます。※2

1970-01-01のデータを持つjava.sql.Dateのオブジェクトとして取得されます。※2

データベースから取得したTIMESTAMP型のデータから，「年−月−日」のデータを抜き出したデータがjava.sql.Dateのオブジェクトとして取得されます。※2

文字列表現「YYYY-MM-DD」だけがjava.sql.Dateのオブジェクトとして取得されます。それ以外はSQLExceptionが投入されます。

getTime()※1

SQLExceptionが投入されます。

データベースから取得したTIME型のデータから，「時：分：秒.ミリ秒」のデータを抜き出したデータがjava.sql.Timeのオブジェクトとして取得されます。※2

データベースから取得したTIMESTAMP型のデータから，「時：分：秒.ミリ秒」のデータを抜き出したデータがjava.sql.Timeのオブジェクトとして取得されます。※2

文字列表現「hh:mm:ss[.f...]」だけがjava.sql.Timeのオブジェクトとして取得されます。それ以外はSQLExceptionが投入されます。

getTimestamp()※1

データベースから取得したDATE型のデータの後ろに「00:00:00.000000000」を付加したデータがjava.sql.Timestampのオブジェクトとして取得されます。

データベースから取得したTIME型のデータの前に「1970-01-01」を付加したデータがjava.sql.Timestampのオブジェクトとして取得されます。

データベースから取得したTIMESTAMP型のデータから「年−月−日時：分：秒.ナノ秒」のデータを抜き出したデータがjava.sql.Timestampのオブジェクトとして取得されます。

TIMESTAMP型の文字列表現「YYYY-MM-DD△hh:mm:ss[.f...]」（△は半角空白）だけがjava.sql.Timestampのオブジェクトとして取得されます。それ以外はSQLExceptionが投入されます。

注※1

データベースに格納されている日時と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となります（ユリウス暦とグレゴリオ暦が切り替わります）。

注※2

値の設定について記載していない日付項目（年−月−日）の設定値は「1970-01-01」，時間項目（時：分：秒）の設定値は「00：00：00」とします。

7.6.3　オーバフローが発生したときの処理

ここでは，setXXXおよびgetXXXメソッド実行時のオーバフローの可能性について説明します。

(1)　setXXXメソッド（setObjectメソッドを除く）実行時のオーバフローの可能性

setXXXメソッド実行時のオーバフローの可能性（setObjectメソッドを除く）を次の表に示します。

表7‒11　setXXXメソッド実行時のオーバフローの可能性（setObjectメソッドを除く）

実行するメソッド

HADBのデータ型

SMALLINT

INTEGER

DOUBLE PRECISION，FLOAT

DECIMAL，NUMERIC

CHAR，VARCHAR

DATE※

TIME※

TIMESTAMP※

ROW

BINARY，VARBINARY

setByte

○

○

○

×

○

−

−

−

−

−

setShort

○

○

○

×

○

−

−

−

−

−

setInt

○

○

○

×

○

−

−

−

−

−

setLong

×

○

○

×

○

−

−

−

−

−

setFloat

×

×

○

×

○

−

−

−

−

−

setDouble

×

×

○

×

○

−

−

−

−

−

setBigDecimal

×

×

○

×

○

−

−

−

−

−

setBoolean

○

○

○

○

○

−

−

−

−

−

setString

×

×

○

×

○

×

○

×

−

○

setBytes

−

−

−

−

−

−

−

−

○

○

setDate

−

−

−

−

○

×

○

×

−

−

setTime

−

−

−

−

○

−

○

×

−

−

setTimestamp

−

−

−

−

○

×

○

×

−

−

setAsciiStream

−

−

−

−

○

−

−

−

−

○

setBinaryStream

−

−

−

−

○

−

−

−

−

○

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はHADBの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メソッド実行時のオーバフローの可能性を次の表に示します。

表7‒12　setObjectメソッド実行時のオーバフローの可能性

setObjectメソッドで指定するオブジェクトのデータ型

HADBのデータ型

SMALLINT

INTEGER

DOUBLE PRECISION，FLOAT

DECIMAL，NUMERIC

CHAR，VARCHAR

DATE※

TIME※

TIMESTAMP※

ROW

BINARY，VARBINARY

Byte

○

○

○

×

○

−

−

−

−

−

Short

○

○

○

×

○

−

−

−

−

−

Integer

○

○

○

×

○

−

−

−

−

−

Long

×

○

○

×

○

−

−

−

−

−

Decimal

×

×

○

×

○

−

−

−

−

−

Float

×

×

○

×

○

−

−

−

−

−

Double

×

×

○

×

○

−

−

−

−

−

Boolean

○

○

○

○

○

−

−

−

−

−

String

×

×

○

×

○

×

○

×

−

−

Date

−

−

−

−

○

×

○

×

−

−

Time

−

−

−

−

○

−

○

−

−

−

Timestamp

−

−

−

−

○

×

○

×

−

−

byte[]

−

−

−

−

○

−

−

−

○

○

（凡例）

○：値に関係なく，オーバフローしません。

×：値によっては，オーバフローすることがあります。

−：この組み合わせでは使用できません。

注※

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はHADBの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メソッド実行時のオーバフローの可能性（getObjectメソッドを除く）を次の表に示します。

表7‒13　getXXXメソッド実行時のオーバフローの可能性（getObjectメソッドを除く）

実行するメソッド

HADBのデータ型

SMALLINT

INTEGER

DOUBLE PRECISION，FLOAT

DECIMAL，NUMERIC

CHAR，VARCHAR

DATE

TIME

TIMESTAMP

ROW

BINARY，VARBINARY

getByte

×

×

×

×

×

−

−

−

−

−

getShort

×

×

×

×

×

−

−

−

−

−

getInt

○

×

×

×

×

−

−

−

−

−

getLong

○

○

×

×

×

−

−

−

−

−

getFloat

○

○

○

○

○

−

−

−

−

−

getDouble

○

○

○

○

○

−

−

−

−

−

getBigDecimal

○

○

○

○

○

−

−

−

−

−

getBoolean

○

○

○

○

○

−

−

−

−

−

getString

○

○

○

○

○

○

○

○

−

○

getBytes

−

−

−

−

−

−

−

−

○

○

getDate

−

−

−

−

○

○

○

○

−

−

getTime

−

−

−

−

○

−

○

○

−

−

getTimestamp

−

−

−

−

○

○

○

○

−

−

getAsciiStream

−

−

−

−

○

−

−

−

−

○

getBinaryStream

−

−

−

−

○

−

−

−

−

○

getCharacterStream

−

−

−

−

○

−

−

−

−

○

getArray

−

−

−

−

○

−

−

−

−

○

（凡例）

○：値に関係なく，オーバフローしません。

×：値によっては，オーバフローすることがあります。

−：この組み合わせでは使用できません。

(4)　getObjectメソッド実行時のオーバフローの可能性

getObjectメソッド実行時のオーバフローの可能性を次の表に示します。

表7‒14　getObjectメソッド実行時のオーバフローの可能性

getObjectメソッドで取得するオブジェクトのデータ型

HADBのデータ型

SMALLINT

INTEGER

DOUBLE PRECISION，FLOAT

DECIMAL，NUMERIC

CHAR，VARCHAR

DATE

TIME

TIMESTAMP

ROW

BINARY，VARBINARY

Byte

×

×

×

×

×

−

−

−

−

−

Short

×

×

×

×

×

−

−

−

−

−

Int

○

×

×

×

×

−

−

−

−

−

Long

○

○

×

×

×

−

−

−

−

−

Float

○

○

×

×

×

−

−

−

−

−

Double

○

○

○

×

×

−

−

−

−

−

BigDecimal

○

○

○

×

×

−

−

−

−

−

Boolean

○

○

○

○

○

−

−

−

−

−

String

○

○

○

○

○

○

○

○

−

○

Bytes

−

−

−

−

−

−

−

−

○

○

Date

−

−

−

−

○

○

○

○

−

−

Time

−

−

−

−

○

−

○

○

−

−

Timestamp

−

−

−

−

○

○

○

○

−

−

AsciiStream

−

−

−

−

○

−

−

−

−

○

BinaryStream

−

−

−

−

○

−

−

−

−

○

Object

○

○

○

○

○

○

○

○

○

○

CharacterStream

−

−

−

−

○

−

−

−

−

○

（凡例）

○：値に関係なく，オーバフローしません。

×：値によっては，オーバフローすることがあります。

−：この組み合わせでは使用できません。

7.6.4　文字コードの変換

Javaプログラムでは，文字コードはUnicode（UTF-16）で扱うため，JDBCドライバがHADBの文字データとUnicode（UTF-16）との相互文字コード変換をします。この文字コード変換処理で，JDBCドライバはJava仮想マシンが提供するエンコーダを利用します。

HADBの文字データとUnicode（UTF-16）との相互文字コード変換の流れを次の図に示します。

図7‒3　HADBの文字データとUnicode（UTF-16）との相互文字コード変換の流れ

HADBとの文字データのやり取りの際，Java仮想マシンのエンコーダに対して，JDBCドライバが文字セット名称を指定します。このとき，HADBサーバの文字コードUnicode（UTF-8）を取得し，それに相当する文字セット名称にします。

HADBサーバの文字コードに対応する，Java仮想マシンのエンコーダに対して指定する文字セット名称を次の表に示します。

表7‒15　HADBサーバの文字コードに対応する文字セット名称

項番

HADBサーバの文字コード

（環境変数ADBLANGに指定した文字コード）

Java仮想マシンのエンコーダに指定する文字セット名称※

1

Unicode（UTF-8）（UTF8）

UTF-8

2

Shift-JIS（SJIS）

Windows-31j（MS932）

注※

Java仮想マシンのエンコーダに表中の文字セット名称が指定されるのは，HADBサーバとのコネクション確立後になります。

コネクション確立前は，Java仮想マシンのデフォルトの文字セットで文字コード変換します。

7.7　トラブルシュート

この章では，トラブルシュート機能であるJDBCインタフェースメソッドトレースとExceptionトレースログについて説明します。

7.7.1　JDBCインタフェースメソッドトレース

トラブルシュート情報として，JDBCインタフェースのメソッド呼び出し時に，JDBCインタフェースメソッドトレースを取得できます。

(1)　環境設定

(a)　DriverManagerクラスによる接続の場合

環境設定手順を次に示します。

手順

DriverManagerクラスのsetLogWriterメソッドを実行して，有効なログライターを指定します。

DriverManagerクラスのgetConnectionメソッドを実行してHADBサーバに接続します。その際，getConnectionメソッドの引数urlまたはinfoに，JDBCインタフェースメソッドトレースを取得する指定をします（methodtraceおよびtracenumを指定します）。

getConnectionメソッドの引数urlの指定については，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(a)　引数urlの指定内容（接続用のURLの指定）」を参照してください。

getConnectionメソッドの引数infoの指定については，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(d)　引数infoの指定内容（ユーザプロパティの指定）」を参照してください。

(b)　DataSourceクラスによる接続の場合

環境設定手順を次に示します。

手順

DataSourceまたはConnectionPoolDataSourceインタフェースのsetLogWriterメソッドを実行して，有効なログライターを指定します。

接続情報設定および取得インタフェースのsetInterfaceMethodTraceおよびsetTraceNumberメソッドを実行して，JDBCインタフェースメソッドトレースを取得する指定をします。

DataSourceインタフェースのsetLogWriterメソッドについては「10.2.7　setLogWriter(PrintWriter out)」を，ConnectionPoolDataSourceインタフェースのsetLogWriterメソッドについては「10.3.7　setLogWriter(PrintWriter out)」を参照してください。

setInterfaceMethodTraceメソッドについては「10.5.14　setInterfaceMethodTrace(boolean flag)」を，setTraceNumberメソッドについては「10.5.18　setTraceNumber(int num)」を参照してください。

(2)　JDBCインタフェースメソッドトレースの取得規則

JDBCインタフェースメソッドトレースの取得規則を次に示します。

JDBCインタフェースのメソッドの呼び出し時，およびメソッドからの戻り時に，トレース情報が取得されます。ただし，データベース接続前に実行できるメソッドついては，トレース情報が取得されません。トレース情報が取得されないメソッドを次に示します。

Driverインタフェース

acceptsURL(String url)

getMajorVersion()

getMinorVersion()

getPropertyInfo(String url, Properties info)

jdbcCompliant()

DataSourceインタフェースおよびConnectionPoolDataSourceインタフェース

getLoginTimeout()

getLogWriter()

setLoginTimeout(int seconds)

setLogWriter(PrintWriter out)

Wrapperインタフェース

isWrapperFor(Class<?> iface)

unwrap(Class<T> iface)

トレース情報はエントリ数分保持され，次に示すタイミングで指定したログライターに出力されます。

Connection.closeメソッドの呼び出し時（正常終了時）

SQLExceptionの投入時（エラー発生時）

BatchUpdateExceptionの投入時（エラー発生時）

SQLClientInfoExceptionの投入時（エラー発生時）

UnsupportedOperationExceptionの投入時（エラー発生時）

トレース情報の数がエントリ数を超えた場合，保持されていたトレース情報は古い順に破棄され，新しいトレース情報が保持されます。

JDBCインタフェースメソッドトレースは，EntryおよびReturnでそれぞれ1エントリのトレース領域を使用します。

(3)　出力例

JDBCインタフェースメソッドトレースの出力例を次に示します。図中の番号は，説明の項番と対応しています。

出力例

説明

[Hitachi Advanced Data Binder JDBC Driver]

JDBCドライバの名称

[JDBC Interface Entry ]，[JDBC Interface Return]

[JDBC Interface Entry ]：JDBCメソッドの呼び出し

[JDBC Interface Return]：JDBCメソッドからの戻り

[XXXXX.YYYYY]

XXXXXクラスのYYYYYメソッド

select * from pp

JDBCメソッドの引数（パスワードを示す引数については，"password=*"のように，"*"1個を出力）

com.hitachi.hadb.jdbc.Adb...

JDBCメソッドの戻り値

7.7.2　Exceptionトレースログ

トラブルシュート情報として，Exceptionトレースログを取得できます。Exceptionトレースログには，JDBCドライバ内で例外による障害が発生した際の障害要因が出力されます。

出力内容を次に示します。

例外発生時の情報（エラーメッセージなど）

例外が発生するまでの，JDBCのAPIメソッドの実行記録

この機能を使用すると，APから呼び出されるJDBCのAPIメソッドの情報がJDBCドライバのメモリ上に蓄積され，SQLException，BatchUpdateException，SQLClientInfoException，またはUnSupportedOperationExceptionの発生を契機として，例外を投入する前に，メモリ上に蓄積された情報がファイルに出力されます。

(1)　取得するメソッド，および取得するための設定

(a)　Exceptionトレースログの取得対象メソッド

Exceptionトレースログの取得対象は，Java Platform Standard Edition 6のAPI仕様にあるパッケージjava.sql，javax.sqlに記述されているメソッドの呼び出しと戻りです。

次の条件を満たすメソッドが取得されます。

「表7‒16　Exceptionトレースログの取得対象であるメソッドとトレース取得レベル」に記載されていて，かつ取得に必要なトレース取得レベルを指定している

なお，ResultSetオブジェクトのgetXXXメソッド，PreparedStatementオブジェクトのsetXXXメソッド，ConnectionオブジェクトのisClosedメソッドなど，オブジェクト内の情報を参照して返すだけのメソッドや，オブジェクト内に情報を格納するだけのメソッドは取得対象になりません。

Exceptionトレースログの取得対象であるメソッドと，そのメソッドのトレース取得レベルを次の表に示します。

表7‒16　Exceptionトレースログの取得対象であるメソッドとトレース取得レベル

クラス

メソッド

トレース取得レベル

1

2

3

4

5※1

Connection

void close()

○

○

○

○

○

void commit()

×

○

○

○

○

Statement createStatement()※2

○

○

○

○

○

Statement createStatement(int resultSetType, int resultSetConcurrency)※3

○

○

○

○

○

DatabaseMetaData getMetaData()

×

○

○

○

○

boolean isValid(int timeout)

×

○

○

○

○

PreparedStatement prepareStatement(String sql)※2

○

○

○

○

○

PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)※3

○

○

○

○

○

void rollback()※2

×

○

○

○

○

void setAutoCommit(boolean autoCommit)

×

○

○

○

○

DatabaseMetaData

boolean autoCommitFailureClosesAllResultSets()

×

○

○

○

○

ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern)

×

○

○

○

○

ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable)

×

○

○

○

○

ResultSet getCatalogs()

×

○

○

○

○

ResultSet getClientInfoProperties()

×

○

○

○

○

ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern)

×

○

○

○

○

ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)

×

○

○

○

○

Connection getConnection()

×

○

○

○

○

ResultSet getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable)

×

○

○

○

○

ResultSet getExportedKeys(String catalog, String schema, String table)

×

○

○

○

○

ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern)

×

○

○

○

○

ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern)

×

○

○

○

○

ResultSet getImportedKeys(String catalog, String schema, String table)

×

○

○

○

○

ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)

×

○

○

○

○

ResultSet getPrimaryKeys(String catalog, String schema, String table)

×

○

○

○

○

ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern)

×

○

○

○

○

ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern)

×

○

○

○

○

ResultSet getPseudoColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern)

×

○

○

○

○

RowIdLifetime getRowIdLifetime()

×

○

○

○

○

ResultSet getSchemas()

×

○

○

○

○

ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern)

×

○

○

○

○

ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern)

×

○

○

○

○

ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern)

×

○

○

○

○

ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

×

○

○

○

○

ResultSet getTableTypes()

×

○

○

○

○

ResultSet getTypeInfo()

×

○

○

○

○

ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types)

×

○

○

○

○

ResultSet getVersionColumns(String catalog, String schema, String table)

×

○

○

○

○

Driver

Connection connect(String url, Properties info)

○

○

○

○

○

PreparedStatement

boolean execute()※2

×

○

○

○

○

ResultSet executeQuery()※2

×

○

○

○

○

int executeUpdate()※2

×

○

○

○

○

long executeLargeUpdate()※2

×

○

○

○

○

ResultSetMetaData getMetaData()

×

○

○

○

○

boolean execute(String sql)※3，※4

×

○

○

○

○

int[] executeBatch()※4

×

○

○

○

○

long[] executeLargeBatch()※4

×

○

○

○

○

ResultSet executeQuery(String sql)※3，※4

○

○

○

○

○

int executeUpdate(String sql)※3，※4

○

○

○

○

○

long executeLargeUpdate(String sql)※3，※4

○

○

○

○

○

ParameterMetaData getParameterMetaData()

×

○

○

○

○

ResultSet

boolean absolute(int row)

×

○

○

○

○

void afterLast()

×

○

○

○

○

void beforeFirst()

×

○

○

○

○

void close()

×

○

○

○

○

boolean first()

×

○

○

○

○

ResultSetMetaData getMetaData()

×

○

○

○

○

int getHoldability()

×

○

○

○

○

Statement getStatement()

×

○

○

○

○

boolean isClosed()

×

○

○

○

○

boolean last()

×

○

○

○

○

boolean next()

×

○

○

○

○

boolean relative(int rows)

×

○

○

○

○

boolean isAfterLast()

×

○

○

○

○

boolean isBeforeFirst()

×

○

○

○

○

boolean isLast()

×

○

○

○

○

Statement

void cancel()

×

○

○

○

○

void close()

○

○

○

○

○

boolean execute(String sql)

○

○

○

○

○

int[] executeBatch()

×

○

○

○

○

long[] executeLargeBatch()

×

○

○

○

○

ResultSet executeQuery(String sql)

○

○

○

○

○

int executeUpdate(String sql)

○

○

○

○

○

long executeLargeUpdate(String sql)

○

○

○

○

○

ResultSet getResultSet()

×

○

○

○

○

DataSource

getConnection()※2

○

○

○

○

○

getConnection(String username, String password)※3

○

○

○

○

○

ConnectionPoolDataSource

getPooledConnection()※2

○

○

○

○

○

getPooledConnection(String username, String password)※3

○

○

○

○

○

PooledConnection

close()

○

○

○

○

○

getConnection()

○

○

○

○

○

（凡例）

○：Exceptionトレースログを取得します。

×：Exceptionトレースログを取得しません。

注※1

トレース取得レベルが5の場合，内部呼び出しも含めてExceptionトレースログを取得します。

注※2

メソッド名として，「メソッド名(1)」と出力されます。

注※3

メソッド名として，「メソッド名(2)」と出力されます。

注※4

Statementクラスのメソッドをオーバライドしたメソッドです。

(b)　Exceptionトレースログを取得するための設定（プロパティの設定）

Exceptionトレースログのファイル出力先，ファイルへの出力数，メモリ内取得情報数，およびトレース取得レベルをシステムプロパティ，ユーザプロパティ，または接続用のURLのプロパティで設定します。

プロパティに設定する項目を次の表に示します。

表7‒17　プロパティに設定する項目

項目

プロパティ

内容

デフォルト値※

ファイル出力先

adb_jdbc_exc_trc_out_path

Exceptionトレースログを出力するディレクトリを，絶対パスで指定します。Exceptionトレースログは，指定したディレクトリの直下に出力されます。

カレントディレクトリ

ファイルへの出力数

adb_jdbc_info_max

1ファイルへ出力する情報数の上限を指定します。指定できる範囲は1〜50です。

実際に1ファイルへ出力する情報数の上限は，「ファイルへの出力数」×「メモリ内取得情報数」個となります。

ファイルへの出力数は，「(2)　Exceptionトレースログの出力形式」に示す形式2〜形式4をそれぞれ1個と数えます。

なお，ファイルには，メモリに蓄積した順番に出力されます。

また，上限値を超えてファイルに出力する場合は，2ファイルでラップアラウンドします。ファイル名は次のとおりです。

adbjdbcexception01.trc

adbjdbcexception02.trc

ただし，「(2)　Exceptionトレースログの出力形式」に示す形式1と形式2の間で出力先のファイルが切り替わることはありません。

5

メモリ内取得情報数

adb_jdbc_cache_info_max

メモリ内で蓄積する情報数の上限を指定します。指定できる範囲は500〜10,000です。

なお，メモリ内取得情報は，「表7‒16　Exceptionトレースログの取得対象であるメソッドとトレース取得レベル」に示すメソッド1つを1個と数えます。

また，上限値を超えて情報を蓄積しようとすると，古い情報から順に，新しい情報に上書きされます。

1,000

トレース取得レベル

adb_jdbc_trc_out_lv

トレース取得レベルを指定します。指定できる範囲は0〜5です。

5を指定すると，内部呼び出しを含めたすべてのトレース取得対象メソッドを取得します。

0を指定すると，Exceptionトレースログを取得しません。

1

注※

次のような場合に取得するExceptionトレースログでは，プロパティに値が指定されなかったものと見なされます。その場合はデフォルト値が仮定されます。

プロパティに不正な値が指定され，データベース接続時にSQLExceptionが投入された場合

Java仮想マシンが，セキュリティマネジャによってJDBCドライバに対するプロパティの受け渡しを拒否した場合

Java仮想マシンの，最初の接続が確立する前

(2)　Exceptionトレースログの出力形式

Exceptionトレースログには，次の4種類の形式があります。

形式1：ヘッダ部分

[AA....AA] Hitachi Advanced Data Binder JDBC Driver BB-CC

形式2：メソッドの実行履歴（メソッドの実行開始）

AAAAAAAAAAAAAAAAAAAAAAA BB....BB:[C][DD....DD]
                        ConnectionID(EE....EE) : SID(FF....FF)
                        GG....GG

形式3：メソッドの実行履歴（メソッドの正常終了）

AAAAAAAAAAAAAAAAAAAAAAA BB....BB:[C][DD....DD]
                        ConnectionID(EE....EE) : SID(FF....FF)
                        HH....HH

形式4：発生した出力契機

AAAAAAAAAAAAAAAAAAAAAAA BB....BB:Exception:
II....II

形式2および形式3は，時系列順に，メソッドを実行した分だけ繰り返して出力されます。

(a)　形式1の変数の説明

AA....AA：

出力情報の通番です。

通番は1回の出力（出力エラーによる失敗も含む）ごとに1増加します。2,147,483,647を超えると，0に戻ります。

BB：

JDBCドライバのバージョンです。

CC：

JDBCドライバのリビジョンです。

(b)　形式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

aa....aa：

スレッド名，優先順位，スレッドグループ名を含む，スレッド情報です。形式はJava仮想マシンによって決まります。

bb....bb：

オブジェクトのハッシュコードです。形式はJava仮想マシンによって決まります。

C：

メソッドの呼び出し識別情報です。

E：

メソッドが開始したときの履歴であることを示します。

R：

メソッドが正常終了したときの履歴であることを示します。

DD....DD：

オブジェクト識別子およびメソッド名を，次の形式で出力します。

aa....aa.bb....bb

aa....aa：

オブジェクト識別子です（最大32文字）。形式はJava仮想マシンによって決まります。

bb....bb：

メソッド名です。

EE....EE：

接続IDを出力します（最大4文字）。

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)

また，Driverクラスのconnect(String url,Properties info)の，引数info中の次のプロパティについては，値を"*"1個に置き換えて出力します。

password

HH....HH：

メソッドの戻り値を次の形式で出力します。戻り値がないメソッドでは出力しません。戻り値が参照型値の場合，形式はJava仮想マシンによって決まります。

Return=aa....aa

aa....aa：

メソッドの戻り値です。

II....II：

トラブルシュート情報を，次の形式で出力します。

ExceptionClass: aa....aa
ConnectionInformation: bb....bb
Message: cc....cc
ErrorCode: dd....dd
SQLState: eeeee
UpdateCounts: ff....ff, ..<省略>.. ,ff....ff
gg....gg

aa....aa：

投入した例外オブジェクトの実行クラス名です。

bb....bb：

例外オブジェクトの接続情報を次の形式で出力します。出力しない場合は，"*"1個に置き換えて出力します。

yy....yy (zz....zz), ..<省略>.., yy....yy (zz....zz)

yy....yy：各接続情報の名称です。次に示す情報が出力されます。

host（HADBサーバのホスト名）

port（HADBサーバのポート番号）

user（認可識別子）

sqlwaittime（HADBクライアントの応答最大待ち時間（単位：秒））

zz....zz：上記の接続情報の内容です。なお，userのパスワード部分は出力しません。

cc....cc：

例外オブジェクトが持つメッセージです。

複数のメッセージを持つ場合は，SQLCODEに対応するメッセージのあとに，改行で区切って出力します。この場合，例外オブジェクトのgetMessageメソッドで返却するメッセージなども，同様に改行で区切られた文字列になります。

dd....dd：

SQLCODEのエラーコードです（最大11文字）。

投入した例外オブジェクトの実行クラスが次のクラスまたはサブクラスの場合に出力します。

SQLException

eeeee：

例外オブジェクトのSQLSTATEです。

ff....ff：

この例外が発生するまでに正常に実行されたバッチ更新の，各更新文の更新行数を出力します（最大11文字）。

例外オブジェクトの実行クラスがBatchUpdateExceptionの場合に出力します。

更新行数が取得できない場合，"*"を出力します。

gg....gg：

例外投入メソッドを基点としたスタックトレースを出力します。形式はJava仮想マシンによって決まります。

(3)　出力例と解析方法

(a)　出力例

[1] Hitachi Advanced Data Binder JDBC Driver VV-RR※
2011/07/06 23:07:09.129 Thread[main,5,main]@1259414:[E][AdbConnection@82c01f.createStatement(1)]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:09.160 Thread[main,5,main]@1259414:[R][AdbConnection@82c01f.createStatement(1)]
                        ConnectionID(1) : SID(0)
                        Return=com.hitachi.hadb.jdbc.AdbStatement@1e4cbc4
2011/07/06 23:07:09.160 Thread[main,5,main]@1259414:[E][AdbStatement@1e4cbc4.execute]
                        ConnectionID(1) : SID(0)
                        sql=DELETE FROM SEINO_TABLE
2011/07/06 23:07:14.285 Thread[main,5,main]@1259414:[E][AdbConnection@82c01f.commit]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:14.301 Thread[main,5,main]@1259414:[R][AdbConnection@82c01f.commit]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:14.301 Thread[main,5,main]@1259414:[R][AdbStatement@1e4cbc4.execute]
                        ConnectionID(1) : SID(1)
                        Return=false
2011/07/06 23:07:14.301 Thread[main,5,main]@1259414:[E][AdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(1) : SID(0)
                        sql=INSERT INTO SEINO_TABLE VALUES(?, ?)
2011/07/06 23:07:14.348 Thread[main,5,main]@1259414:[R][AdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(1) : SID(0)
                        Return=com.hitachi.hadb.jdbc.AdbPreparedStatement@15d56d5
2011/07/06 23:07:26.567 Thread[main,5,main]@1259414:[E][AdbConnection@82c01f.commit]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:26.567 Thread[main,5,main]@1259414:[R][AdbConnection@82c01f.commit]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:26.567 Thread[main,5,main]@1259414:[E][AdbStatement@1e4cbc4.executeQuery]
                        ConnectionID(1) : SID(0)
                        sql=SELECT * FROM SEINO_TABLE
2011/07/06 23:07:26.676 Thread[main,5,main]@1259414:[R][AdbStatement@1e4cbc4.executeQuery]
                        ConnectionID(1) : SID(1)
                        Return=com.hitachi.hadb.jdbc.AdbResultSet@3eca90
2011/07/06 23:07:28.332 Thread[main,5,main]@1259414:[E][AdbResultSet@3eca90.close]
                        ConnectionID(1) : SID(1)
2011/07/06 23:07:28.332 Thread[main,5,main]@1259414:[E][AdbConnection@82c01f.commit]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:28.332 Thread[main,5,main]@1259414:[R][AdbConnection@82c01f.commit]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:28.332 Thread[main,5,main]@1259414:[R][AdbResultSet@3eca90.close]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:28.332 Thread[Thread-0,5,main]@30090737:[E][AdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(1) : SID(0)
                        sql=SELECT * FROM SEINO_TABLE
2011/07/06 23:07:28.332 Thread[Thread-0,5,main]@30090737:[R][AdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(1) : SID(0)
                        Return=com.hitachi.hadb.jdbc.AdbPreparedStatement@2808b3
2011/07/06 23:07:28.348 Thread[Thread-1,5,main]@5462872:[E][AdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(1) : SID(0)
                        sql=DELETE FROM SEINO_TABLE WHERE I1=?
2011/07/06 23:07:28.358 Thread[Thread-1,5,main]@5462872:[E][AdbConnection@82c01f.commit]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:29.672 Thread[Thread-1,5,main]@5462872:[R][AdbConnection@82c01f.commit]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:30.098 Thread[Thread-1,5,main]@5462872:[R][AdbConnection@82c01f.prepareStatement(1)]
                        ConnectionID(1) : SID(0)
                        Return=com.hitachi.hadb.jdbc.AdbPreparedStatement@922804
2011/07/06 23:07:30.332 Thread[Thread-2,5,main]@25253977:[E][AdbConnection@82c01f.rollback(1)]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:42.098 Thread[Thread-2,5,main]@25253977:[R][AdbConnection@82c01f.rollback(1)]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:42.098 Thread[Thread-2,5,main]@25253977:[E][AdbConnection@82c01f.close]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:42.098 Thread[Thread-2,5,main]@25253977:[R][AdbConnection@82c01f.close]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:42.535 Thread[Thread-1,5,main]@5462872:Exception:
ExceptionClass: SQLNonTransientException
ConnectionInformation: *
Message: KFAA71206-E Processing cannot continue because the connection is already closed. [AdbPreparedStatement.setInt]
ErrorCode: -1071206
SQLState： R2416
java.sql.SQLNonTransientException: KFAA71206-E Processing cannot continue because the connection is already closed. [AdbPreparedStatement.setInt]
at com.hitachi.hadb.jdbc.JdbMakeException.generateSQLSubException(JdbMakeException.java:271)
at com.hitachi.hadb.jdbc.JdbMakeException.generateSQLException(JdbMakeException.java:37)
at com.hitachi.hadb.jdbc.AdbStatement.generateClosedSQLException(AdbStatement.java:3005)
at com.hitachi.hadb.jdbc.AdbPreparedStatement.setInt(AdbPreparedStatement.java:1170)
at Exception1.run(ExceptionTraceSample.java:57)
[2] Hitachi Advanced Data Binder JDBC Driver VV-RR※
2011/07/06 23:07:25.723 Thread[Thread-3,5,main]@13249998:[E][AdbConnection@119cca4.prepareStatement(1)]
                        ConnectionID(1) : SID(0)
                        sql=SELECT * FROM SEINO_TABLE
2011/07/06 23:07:25.770 Thread[Thread-4,5,main]@25839584:[E][AdbConnection@119cca4.rollback(1)]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:25.770 Thread[Thread-4,5,main]@25839584:[R][AdbConnection@119cca4.rollback(1)]
                        ConnectionID(1) : SID(0)
2011/07/06 23:07:25.770 Thread[Thread-5,5,main]@24431647:[E][AdbConnection@119cca4.prepareStatement(1)]
                        ConnectionID(1) : SID(0)
                        sql=SELECT ** FROM SEINO_TABLE
2011/07/06 23:07:25.863 Thread[Thread-5,5,main]@24431647:Exception:
ExceptionClass: SQLSyntaxErrorException
ConnectionInformation: user(ADBUSER01), sqlwaittime(0), host(dragon2), port(20249)
Message: KFAA30105-E Token "*"(non-reserved word), which is after token "*", is invalid.[AdbStatement.prepare]
ErrorCode: -105
SQLState： 42602
java.sql.SQLSyntaxErrorException: KFAA30105-E Token "*"(non-reserved word), which is after token "*", is invalid.[AdbStatement.prepare]
at com.hitachi.hadb.cli.CtlStatement.prepare(CtlStatement.java:451)
at com.hitachi.hadb.jdbc.JdbSection.prepare(JdbSection.java:1497)
at com.hitachi.hadb.jdbc.AdbStatement.prepare(AdbStatement.java:2834)
at com.hitachi.hadb.jdbc.AdbPreparedStatement.<init>(AdbPreparedStatement.java:109)
at com.hitachi.hadb.jdbc.AdbConnection.prepareStatement(AdbConnection.java:1041)
at Exception1.run(ExceptionTraceSample.java:64)

注※

VV-RRには，JDBCドライバのバージョンが出力されます。

(b)　解析方法

Exceptionトレースログの解析方法について説明します。Exceptionトレースログはテキストエディタなどで参照できます。

ここでは，「(a)　出力例」のExceptionトレースログを解析する例を示します。

解析例

調査対象の例外を含む通番の情報を抜き出します。

情報をThread識別情報で分類し，スレッドごとに分割します。

取得時刻によって，情報を時系列に並べます。

次の表に示すようになります。

表7‒18　Exceptionトレースログを時系列に並べた例

日時

スレッド1

スレッド2

スレッド3

スレッド4

Thread[main,5,main]@1259414

Thread[Thread-0,5,main]@30090737

Thread[Thread-1,5,main]@5462872

Thread[Thread-2,5,main]@25253977

2011/07/06

23:07:09.129

AdbConnection@82c01f.createStatement(1)

2011/07/06

23:07:09.160

AdbStatement@1e4cbc4.execute

2011/07/06

23:07:14.285

AdbConnection@82c01f.commit

2011/07/06

23:07:14.301

AdbConnection@82c01f.prepareStatement(1)

2011/07/06

23:07:26.567

AdbConnection@82c01f.commit

2011/07/06

23:07:26.567

AdbConnection@82c01f.commit

2011/07/06

23:07:26.567

AdbStatement@1e4cbc4.executeQuery

2011/07/06

23:07:28.332

AdbResultSet@3eca90.close

AdbConnection@82c01f.prepareStatement(1)

2011/07/06

23:07:28.332

AdbConnection@82c01f.commit

2011/07/06

23:07:28.348

AdbConnection@82c01f.prepareStatement(1)

2011/07/06

23:07:28.358

AdbConnection@82c01f.commit

2011/07/06

23:07:30.332

AdbConnection@82c01f.rollback(1)

2011/07/06

23:07:42.098

AdbConnection@82c01f.close

2011/07/06

23:07:42.535

SQLException発生

"KFAA71206-E Processing cannot continue because the connection is already closed."

Exceptionのエラーの内容を確認します。

2011/07/06 23:07:42.535のスレッド3でSQLExceptionが発生し，StatementオブジェクトまたはConnectionオブジェクトがすでにクローズされていることがわかります。

時系列でオブジェクトの操作を確認します。

次のスレッドのConnectionオブジェクトのオブジェクトIDが同じであることから，4つのスレッドが同一のコネクションで処理されていることがわかります。

2011/07/06 23:07:09.129のスレッド1

2011/07/06 23:07:28.332のスレッド2

2011/07/06 23:07:28.348のスレッド3

2011/07/06 23:07:30.332のスレッド4

エラーの原因である個所を探します。

4つのスレッドが同一のコネクションであることはわかったので，Statement.closeメソッドまたはConnection.closeメソッドを実行している個所を探すと，スレッド4が2011/07/06 23:07:42.098でConnection.closeメソッドを実行していることがわかります。このことから，2011/07/06 23:07:42.535のスレッド3で発生したSQLExceptionの原因は，スレッド4が2011/07/06 23:07:42.098でConnection.closeメソッドを実行したためであるとわかります。

(4)　必要となるメモリ所要量およびファイルサイズ

(a)　メモリ所要量

Exceptionトレースログを取得するためのメモリ所要量は，次に示す計算式で求められます。

計算式

↑360×n÷1024↑　　（単位：キロバイト）

変数の説明

n：メモリ内取得情報数（システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_jdbc_cache_info_maxの指定値）

(b)　必要となるファイルサイズ

Exceptionトレースログを取得するためのファイルサイズの概算は，次に示す計算式で求められます。

計算式

↑180×n×m÷1024↑＋2　　（単位：キロバイト）

変数の説明

n：メモリ内取得情報数（システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_jdbc_cache_info_maxの指定値）

m：ファイル出力情報数（システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_jdbc_info_maxの指定値）

(5)　注意事項

(a)　Java仮想マシン起動後の最初の出力

Java仮想マシン起動後，最初にファイルにExceptionトレースログを出力する場合は，更新日時が古い方のファイルに出力されます。同じ場合は，adbjdbcexception01.trcに出力されます。

(b)　ファイル出力先の指定

複数のプロセスからExceptionトレースログを取得する場合，同じファイル出力先を指定していると，同一ファイルに異なるプロセスのトレースが出力されます。プロセスごとにトレースを取得する場合は，プロセスごとに異なるファイル出力先を指定してください。

JDBCドライバは，Java仮想マシンの機能を通じてOSが提供するファイルシステム上にログファイルを作成します。そのため，次の点については，使用するJava仮想マシンおよびファイルシステムに依存します。

絶対パス名の接頭辞

パスの区切り文字

出力先ファイル（絶対パス）の最大文字数

1ファイル当たりのサイズ

(c)　エラー発生時の処理

ファイルの作成や出力に失敗しても，Exceptionトレースログには情報が出力されません。また，エラーメッセージがAPに返されたり，ファイル出力をリトライしたりすることもありません。

(d)　文字コード

Exceptionトレースログは，使用するJava仮想マシンのデフォルトの変換文字セットで出力されます。

7.8　エスケープ句で指定できるスカラ関数

エスケープ句で指定できるスカラ関数を次の表に示します。

表7‒19　エスケープ句で指定できるスカラ関数

スカラ関数

スカラ関数の標準形式

数学関数

ABS(number)

ACOS(float)

ASIN(float)

ATAN(float)

ATAN2(float1, float2)

CEILING(number)

COS(float)

DEGREES(number)

EXP(float)

FLOOR(number)

LOG(float)

LOG10(float)

MOD(integer1, integer2)

PI()

POWER(number, power)

RADIANS(number)

RAND([number, number])

ROUND(number, places)

SIGN(number)

SIN(float)

SQRT(float)

TAN(float)

TRUNCATE(number[, places])

文字列関数

ASCII(string)

CHAR(code)

CONCAT(string1,string2)

LCASE(string)

LEFT(string,count)

LENGTH(string)

LTRIM(string)

OCTET_LENGTH(string)

REPLACE(string1,string2[,string3])

RIGHT(string,count)

RTRIM(string)

SUBSTRING(string, start[, length])

UCASE(string)

時刻と日付の関数

CURDATE()

CURRENT_DATE()

CURRENT_TIME()

CURRENT_TIMESTAMP()

CURTIME()

DAYOFWEEK(date)

DAYOFYEAR(date)

EXTRACT(extract-field FROM extract-source)

NOW()

TIMESTAMPADD(interval,integer_exp,timestamp_exp)

TIMESTAMPDIFF(interval,timestamp_exp1,timestamp_exp2)

システム関数

USER()

データ型変換関数

CONVERT(value, SQLtype)

8　JDBC 1.2 API

この章では，JDBC 1.2 APIの各インタフェースとメソッドについて説明します。

8.1　Arrayインタフェース

ここでは，Arrayインタフェースで提供されているメソッドについて説明します。

8.1.1　Arrayインタフェースのメソッド一覧

(1)　Arrayインタフェースの主な機能

Arrayインタフェースでは，配列型の列へのアクセス手段として主に次の機能が提供されています。

SQL Array値（配列型の列の配列要素の値）の取得

SQL Array値（配列型の列の配列要素の値）を格納した結果セットの取得

(2)　HADBでサポートしているArrayインタフェースのメソッド

HADBでサポートしているArrayインタフェースのメソッドの一覧を次の表に示します。

表8‒1　Arrayインタフェースのメソッドの一覧

項番

Arrayインタフェースのメソッド

機能

1

getArray()

配列型の列の全配列要素をObject配列として取得します。

2

getArray(long index, int count)

配列型の列の一部の配列要素をObject配列として取得します。

3

getBaseType()

Arrayオブジェクトの配列要素の要素データ型をJDBCのSQLデータ型で取得します。

4

getBaseTypeName()

Arrayオブジェクトの配列要素の要素データ型をHADBのデータ型名で取得します。

5

getResultSet()

配列型の列の全配列要素を格納した結果セットを取得します。

6

getResultSet(long index, int count)

配列型の列の一部の配列要素を格納した結果セットを取得します。

重要

この表に記載されていないメソッドは，HADBではサポートしていません。サポートしていないメソッドを実行すると，SQLExceptionが投入されます。

(3)　必要なパッケージ名称とクラス名称

Arrayインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbArray

8.1.2　getArray()

(1)　機能

配列型の列の全配列要素をObject配列として取得します。

(2)　形式

public synchronized Object getArray() throws SQLException

(3)　引数

なし。

(4)　戻り値

Arrayオブジェクト内に保持している配列型のすべての配列要素が，Object配列として返却されます。

返却される配列要素のHADBでのデータ型を次の表に示します。

表8‒2　返却される配列要素のHADBでのデータ型

配列要素のHADBのデータ型（要素データ型）

返却される配列

INTEGER

java.lang.Long[]

SMALLINT

java.lang.Integer[]

DECIMALまたはNUMERIC

java.math.BigDecimal[]

DOUBLE PRECISIONまたはFLOAT

java.lang.Double[]

CHAR

java.lang.String[]

VARCHAR

java.lang.String[]

DATE

java.sql.Date[]

TIME

java.sql.Time[]

TIMESTAMP

java.sql.Timestamp[]

BINARY

java.io.InputStream[]

VARBINARY

java.io.InputStream[]

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このArrayオブジェクトを生成したResultSetオブジェクトがクローズされている場合

このArrayオブジェクトを生成したResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

上記のStatementオブジェクトを作成したConnectionオブジェクトがクローズされている場合

トランザクションの決着によって，ResultSetオブジェクトが無効になった場合

列の値がArray値として取得できない場合

JDBCドライバ内でエラーが発生した場合

8.1.3　getArray(long index, int count)

(1)　機能

配列型の列の一部の配列要素をObject配列として取得します。

(2)　形式

public synchronized Object getArray(long index,int count) throws SQLException

(3)　引数

long index：

最初に取り出す配列要素の順序番号を指定します。配列要素の先頭から取り出す場合は1を指定します。

int count：

連続して取得する配列要素の数を指定します。

(4)　戻り値

Arrayオブジェクト内に保持している配列要素のうち，引数indexに指定した順序番号から，最大で引数countに指定した数分の連続する配列要素が，Object配列として返却されます。

返却される配列要素のHADBでのデータ型については，「表8‒2　返却される配列要素のHADBでのデータ型」を参照してください。

引数indexと引数countに指定した値と返却される配列の関係を次の表に示します。

表8‒3　引数に指定した値と返却される配列

indexの指定値

countの指定値

indexの指定値＋countの指定値

返却される配列

1≦indexの指定値≦配列要素数

0≦countの指定値

（indexの指定値＋countの指定値）−1≦配列要素数

長さがcountの指定値分の配列

（indexの指定値＋countの指定値）−1＞配列要素数

配列要素数−（indexの指定値−1）分の長さを持つ配列

countの指定値＜0

−

SQLExceptionを投入

indexの指定値＞配列要素数

−

−

SQLExceptionを投入

indexの指定値＜1

−

−

SQLExceptionを投入

（凡例）

−：該当しません。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このArrayオブジェクトを生成したResultSetオブジェクトがクローズされている場合

このArrayオブジェクトを生成したResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

上記のStatementオブジェクトを作成したConnectionオブジェクトがクローズされている場合

トランザクションの決着によって，ResultSetオブジェクトが無効になった場合

列の値がArray値として取得できない場合

引数indexに指定した値が1より小さい場合，または配列要素数より大きい場合

引数countに指定した値が0より小さい場合

JDBCドライバ内でエラーが発生した場合

8.1.4　getBaseType()

(1)　機能

Arrayオブジェクトの配列要素の要素データ型をJDBCのSQLデータ型で取得します。

(2)　形式

public synchronized int getBaseType() throws SQLException

(3)　引数

なし。

(4)　戻り値

Arrayオブジェクトの配列要素の要素データ型が，JDBCのSQLデータ型（java.sql.Typesクラス）の定数で返却されます。

配列要素の要素データ型と返却値の対応については，「7.6.1　データ型のマッピング」の「(1)　HADBのデータ型とJDBCのSQLデータ型の対応」を参照してください。

(5)　発生する例外

なし。

8.1.5　getBaseTypeName()

(1)　機能

Arrayオブジェクトの配列要素の要素データ型をHADBのデータ型名で取得します。

(2)　形式

public synchronized String getBaseTypeName() throws SQLException

(3)　引数

なし。

(4)　戻り値

Arrayオブジェクトの配列要素の要素データ型が，HADBのデータ型名（Stringオブジェクト）で返却されます。

getBaseTypeNameメソッドの戻り値と要素データ型（HADBのデータ型）の対応を次の表に示します。

表8‒4　getBaseTypeNameメソッドの戻り値と要素データ型（HADBのデータ型）の対応

要素データ型（HADBのデータ型）

戻り値（返却される文字列）

INTEGER

"INTEGER"

SMALLINT

"SMALLINT"※1

DECIMALまたはNUMERIC

"DECIMAL"

DOUBLE PRECISIONまたはFLOAT

"DOUBLE PRECISION"

CHAR

"CHAR"

VARCHAR

"VARCHAR"

DATE

"DATE"

TIME

"TIME"

TIMESTAMP

"TIMESTAMP"

BINARY

"BINARY"

VARBINARY

"VARBINARY"

ROW

"ROW"

BOOLEAN

"BOOLEAN"※2

注※1

DatabaseMetaDataから生成したResultSetにだけ存在する列で，データ型がshortで規定されている列の場合はSMALLINTが返却されます。

注※2

DatabaseMetaDataから生成したResultSetにだけ存在する列で，データ型がBOOLEANで規定されている列の場合はBOOLEANが返却されます。

(5)　発生する例外

なし。

8.1.6　getResultSet()

(1)　機能

配列型の列の全配列要素を格納した結果セットを取得します。

(2)　形式

public synchronized ResultSet getResultSet() throws SQLException

(3)　引数

なし。

(4)　戻り値

配列データを格納したResultSetオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このArrayオブジェクトを生成したResultSetオブジェクトがクローズされている場合

このArrayオブジェクトを生成したResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

上記のStatementオブジェクトを作成したConnectionオブジェクトがクローズされている場合

トランザクションの決着によって，ResultSetオブジェクトが無効になった場合

JDBCドライバ内でエラーが発生した場合

8.1.7　getResultSet(long index, int count)

(1)　機能

配列型の列の一部の配列要素を格納した結果セットを取得します。

(2)　形式

public synchronized ResultSet getResultSet(long index,int count) throws SQLException

(3)　引数

long index：

最初に取り出す配列要素の順序番号を指定します。配列要素の先頭から取り出す場合は1を指定します。

int count：

連続して取得する配列要素の数を指定します。

(4)　戻り値

引数indexに指定した順序番号から，最大で引数countに指定した数分の連続する配列要素が，ResultSetオブジェクトとして返却されます。

引数indexと引数countに指定した値と返却されるResultSetオブジェクトの関係を次の表に示します。

表8‒5　引数に指定した値と返却されるResultSetオブジェクト

indexの指定値

countの指定値

indexの指定値＋countの指定値

返却されるResultSetオブジェクト

1≦indexの指定値≦配列要素数

0≦countの指定値

（indexの指定値＋countの指定値）−1≦配列要素数

長さがcount分の結果セット

（indexの指定値＋countの指定値）−1＞配列要素数

配列要素数−（indexの指定値−1）分の長さを持つ結果セット

countの指定値＜0

−

SQLExceptionを投入

indexの指定値＞配列要素数

−

−

SQLExceptionを投入

indexの指定値＜1

−

−

SQLExceptionを投入

（凡例）

−：該当しません。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このArrayオブジェクトを生成したResultSetオブジェクトがクローズされている場合

このArrayオブジェクトを生成したResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

上記のStatementオブジェクトを作成したConnectionオブジェクトがクローズされている場合

トランザクションの決着によって，ResultSetオブジェクトが無効になった場合

列の値がArray値として取得できない場合

引数indexに指定した値が1より小さい場合，または配列要素数より大きい場合

引数countに指定した値が0より小さい場合

JDBCドライバ内でエラーが発生した場合

8.2　Driverインタフェース

ここでは，Driverインタフェースで提供されているメソッドについて説明します。

8.2.1　Driverインタフェースのメソッド一覧

(1)　Driverインタフェースの主な機能

Driverインタフェースでは，主に次の機能が提供されています。

データベースへの接続

接続用のURLの妥当性チェック

DriverManager.getConnectionメソッドで指定する接続プロパティの情報取得

JDBCドライバのバージョンの返却

(2)　HADBでサポートしているDriverインタフェースのメソッド

HADBでサポートしているDriverインタフェースのメソッドの一覧を次の表に示します。

表8‒6　Driverインタフェースのメソッドの一覧

項番

Driverインタフェースのメソッド

機能

1

acceptsURL(String url)

接続用のURLの接続情報でHADBサーバに接続できるかどうかを確認します。

2

connect(String url, Properties info)

接続情報に従ってHADBサーバに接続します。

3

getMajorVersion()

JDBCドライバのメジャーバージョンを取得します。

4

getMinorVersion()

JDBCドライバのマイナーバージョンを取得します。

5

getPropertyInfo(String url, Properties info)

JDBCドライバの有効なプロパティについての情報を取得します。

6

jdbcCompliant()

JDBCドライバがJDBC CompliantTMであるかどうかを返します。

重要

この表に記載されていないメソッドは，HADBではサポートしていません。サポートしていないメソッドを実行すると，SQLExceptionが投入されます。

(3)　必要なパッケージ名称とクラス名称

Driverインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：HADBDriver

8.2.2　acceptsURL(String url)

(1)　機能

URLに指定されているデータベースに接続できるかどうかを確認します。

(2)　形式

public boolean acceptsURL(String url) throws SQLException

(3)　引数

String url：

接続用のURLを指定します。

接続用のURLの指定形式については，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(a)　引数urlの指定内容（接続用のURLの指定）」を参照してください。

(4)　戻り値

URLに指定したデータベースに接続できる場合はtrueが，接続できない場合はfalseが返却されます。

(5)　発生する例外

なし。

8.2.3　connect(String url, Properties info)

(1)　機能

接続情報に従ってHADBサーバに接続します。

なお，connectメソッドを実行するにはCONNECT権限が必要です。

(2)　形式

public Connection connect(String url, Properties info) throws SQLException

(3)　引数

String url：

接続用のURLを指定します。

接続用のURLの指定形式については，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(a)　引数urlの指定内容（接続用のURLの指定）」を参照してください。

Properties info：

接続引数としてのプロパティ名称と値のペアのリストを指定します。指定形式については，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(d)　引数infoの指定内容（ユーザプロパティの指定）」を参照してください。

(4)　戻り値

Connectionオブジェクトが返却されます。

指定されたURLが不正な場合（URLに指定したデータベースに接続できない場合），nullが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

データベースのアクセスエラーが発生した場合

指定した接続情報に誤りがある場合

(6)　留意事項

接続情報は，各プロパティやメソッドなど複数の個所で設定できます。適用される接続情報の優先順位については，「7.3.3　接続情報の優先順位」の「(1)　HADBサーバへの接続時に必要となる接続情報」を参照してください。

8.2.4　getMajorVersion()

(1)　機能

JDBCドライバのメジャーバージョンを取得します。

(2)　形式

public synchronized int getMajorVersion()

(3)　引数

なし。

(4)　戻り値

JDBCドライバのメジャーバージョン番号が返却されます。

(5)　発生する例外

なし。

8.2.5　getMinorVersion()

(1)　機能

JDBCドライバのマイナーバージョンを取得します。

(2)　形式

public synchronized int getMinorVersion()

(3)　引数

なし。

(4)　戻り値

JDBCドライバのマイナーバージョン番号が返却されます。

(5)　発生する例外

なし。

8.2.6　getPropertyInfo(String url, Properties info)

(1)　機能

JDBCドライバの有効なプロパティについての情報を取得します。

(2)　形式

public synchronized DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException

(3)　引数

String url：

接続用のURLを指定します。

接続用のURLの指定形式については，「7.3.1　DriverManagerクラスのgetConnectionメソッドでHADBサーバに接続する方法」の「(2)　getConnectionメソッドによるHADBサーバへの接続」の「(a)　引数urlの指定内容（接続用のURLの指定）」を参照してください。

Properties info：

接続引数としてのプロパティ名称，および値のペアのリストを指定します。

(4)　戻り値

有効なプロパティを記述するDriverPropertyInfoオブジェクトの配列が返却されます。プロパティが必要ない場合は，この配列は空になることもあります。

DriverPropertyInfoの各フィールドの設定値を次の表に示します。

表8‒7　DriverPropertyInfoの各フィールドの設定値

プロパティ名

DriverPropertyInfoフィールド

name

value

description

required

choices

adb_clt_rpc_srv_host

プロパティ名と同じ

null

"Host Name"

true

null

adb_clt_rpc_srv_port

null

"Port Number"

true

null

adb_clt_rpc_con_wait_time

"300"

"Connect Wait Time"

false

null

adb_clt_rpc_sql_wait_time

"0"

"Sql Wait Time"

false

null

adb_clt_ap_name

"********"

"Application Name"

false

null

adb_clt_group_name

null

"Client Group Name"

false

null

adb_clt_fetch_size

"1024"

"Fetch Size"

false

null

adb_clt_sql_text_out

"N"

"Text Out"

false

{"Y","N"}

adb_clt_trn_iso_lv

"READ_COMMITTED"

"Isolation Level"

false

{"READ_COMMITTED","REPEATABLE_READ"}

adb_clt_sql_order_mode

"BYTE"

"Order Mode"

false

{"BYTE","ISO"}

adb_clt_trn_access_mode

"READ_WRITE"

"Access Mode"

false

{"READ_WRITE","READ_ONLY"}

adb_clt_sql_parallel_exec

"N"

"Sql Parallel Execution"

false

{"Y","N"}

adb_dbbuff_wrktbl_clt_blk_num

"256"

"Work Table Block Number"

false

null

adb_sql_prep_delrsvd_use_srvdef

"Y"

"Delete Reserved Word Using Server Definition"

false

{"Y","N"}

adb_sql_prep_dec_div_rs_prior

"INTEGRAL_PART"

"Decimal Division Result Prior"

false

{"INTEGRAL_PART","FRACTIONAL_PART"}

adb_sql_exe_max_rthd_num

"4"

"Sql Execute Max Real Thread Number"

false

null

adb_sql_exe_hashgrp_area_size

"4800"

"Hash Group Area Size"

false

null

adb_sql_exe_hashtbl_area_size

"2000"

"Hash Table Area Size"

false

null

adb_sql_exe_hashflt_area_size

"200"

"Hash Filter Area Size"

false

null

adb_jdbc_exc_trc_out_path

null

"Exception Trace Out Path"

false

null

adb_jdbc_info_max

"5"

"Exception Trace Information Max Number"

false

null

adb_jdbc_cache_info_max

"1000"

"Exception Trace Cache Information Max Number"

false

null

adb_jdbc_trc_out_lv

"1"

"Exception Trace Out Level"

false

null

encodelang

null

"Encode Lang"

false

null

methodtrace

"OFF"

"JDBC Interface Trace"

false

{"ON","OFF"}

tracenum

"500"

"Trace Entry Number"

false

null

sqlwarningkeep

"TRUE"

"Keeping up the Warning Objects"

false

{"TRUE","FALSE"}

user

null

"UserID"

true

null

password

null

"Password"

true

null

url，infoに指定された情報を解析し，HADBサーバに接続するための情報が返却されます。

なお，acceptsURLメソッドの戻り値がfalseの場合，戻り値にはnullが返却されます。

(5)　発生する例外

なし。

8.2.7　jdbcCompliant()

(1)　機能

JDBCドライバがJDBC CompliantTMであるかどうかを返します。

(2)　形式

public synchronized boolean jdbcCompliant()

(3)　引数

なし。

(4)　戻り値

JDBCドライバがJDBC Compliantの場合はtrueが，そうでない場合はfalseが返却されます。

(5)　発生する例外

なし。

8.2.8　エスケープ句

SQL文中で｛ ｝で囲まれた部分をエスケープ句と呼びます。エスケープ句は1つのキーワードと複数のパラメタで構成されます。キーワードの大文字と小文字は区別しません。エスケープ句の一覧を次の表に示します。

表8‒8　エスケープ句の一覧

エスケープ句の種別

キーワード

日付

d

時刻

t

時刻印

ts

LIKEエスケープ文字

escape

外結合

oj

スカラ関数

fn

エスケープ句で指定できるスカラ関数については，「7.8　エスケープ句で指定できるスカラ関数」を参照してください。

エスケープ構文の解析

エスケープ構文の解析を有効にするかどうかは，StatementクラスのsetEscapeProcessingメソッドで指定します。指定がない場合は，有効となります。エスケープ構文の解析が有効な場合，SQL文内にエスケープ句がないか解析します。SQL文内にエスケープ句があった場合は，HADBが実行できるSQL文に変換します。

エスケープ構文を使用しない場合は，StatementオブジェクトのsetEscapeProcessingメソッドでエスケープ構文の解析を無効にすると，構文解析のオーバヘッドを削減できます。

8.3　Connectionインタフェース

ここでは，Connectionインタフェースで提供されているメソッドについて説明します。

8.3.1　Connectionインタフェースのメソッド一覧

(1)　Connectionインタフェースの主な機能

Connectionインタフェースでは，主に次の機能が提供されています。

StatementクラスおよびPreparedStatementクラスのオブジェクト生成

トランザクションの決着（コミットまたはロールバック）

自動コミットモードの設定

(2)　HADBでサポートしているConnectionインタフェースのメソッド

HADBでサポートしているConnectionインタフェースのメソッドの一覧を次の表に示します。

表8‒9　Connectionインタフェースのメソッドの一覧

項番

Connectionインタフェースのメソッド

機能

1

clearWarnings()

Connectionオブジェクトに通知されたすべての警告をクリアします。

2

close()

HADBサーバとの接続を切断します。

3

commit()

直前のコミットまたはロールバック以降に行われた変更をすべて有効とします。

4

createStatement()

SQL文をHADBサーバに送るためのStatementオブジェクトを生成します。

5

createStatement(int resultSetType, int resultSetConcurrency)

6

createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)

7

getAutoCommit()

このConnectionオブジェクトの現在の自動コミットモードを取得します。

8

getCatalog()

このConnectionオブジェクトの現在のカタログ名を取得します。

9

getHADBConnectionID()

このConnectionオブジェクトに割り当てられているコネクションIDを取得します。

10

getHADBConnectionSerialNum()

このConnectionオブジェクトに割り当てられているコネクション通番を取得します。

11

getHADBOrderMode()

このConnectionオブジェクトの，ORDER BY句を指定したSELECT文の文字データの並び替え順序を取得します。

12

getHADBSQLHashFltSize()

このConnectionオブジェクトに設定されているハッシュフィルタ領域サイズを取得します。

13

getHADBSQLHashTblSize()

このConnectionオブジェクトに設定されているハッシュテーブル領域サイズを取得します。

14

getHADBSQLMaxRthdNum()

このConnectionオブジェクトに設定されている最大SQL処理リアルスレッド数を取得します。

15

getHADBTransactionID()

実行中のトランザクションのトランザクションIDを取得します。

16

getHoldability()

このConnectionオブジェクトを使用して生成されるResultSetオブジェクトの現在の保持機能を取得します。

17

getMetaData()

DatabaseMetaDataオブジェクトを生成します。

18

getSchema()

このConnectionオブジェクトの現在のスキーマ名を取得します。

19

getTransactionIsolation()

このConnectionオブジェクトの現在のトランザクション隔離性水準を取得します。

20

getTypeMap()

このConnectionオブジェクトに関連したMapオブジェクトを取得します。

21

getWarnings()

このConnectionオブジェクトに関する呼び出しによって報告される警告を，SQLWarningオブジェクトに取得します。

22

isClosed()

Connectionオブジェクトがクローズされているかどうかを返します。

23

isReadOnly()

このConnectionオブジェクトが読み込み専用モードかどうかを取得します。

24

isValid(int timeout)

現在の接続状態を取得します。

25

nativeSQL(String sql)

指定したSQL文内のエスケープ句を，HADBが実行できる形式に変換します。

26

prepareStatement(String sql)

パラメタ付きのSQL文をHADBサーバに送るためのPreparedStatementオブジェクトを生成します。

27

prepareStatement(String sql, int resultSetType, int resultSetConcurrency)

28

prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)

29

rollback()

トランザクションによって実行された変更をすべて元に戻し，Connectionオブジェクトが保持するロックをすべて解除します。

30

setAutoCommit(boolean autoCommit)

この接続の自動コミットモードを設定します。

31

setCatalog(String catalog)

渡されたカタログ名を設定し，Connectionオブジェクトのデータベースの作業用サブスペースを選択します。

32

setHADBAuditInfo(int pos,String userinfo)

ユーザ任意の接続情報（ユーザ付加情報）を設定します。

33

setHADBOrderMode(int mode)

このConnectionオブジェクトの，ORDER BY句を指定したSELECT文の文字データの並び替え順序を設定します。

34

setHADBSQLHashFltSize(int areaSize)

このConnectionオブジェクトに対してハッシュフィルタ領域サイズを設定します。

35

setHADBSQLHashTblSize(int areaSize)

このConnectionオブジェクトに対してハッシュテーブル領域サイズを設定します。

36

setHADBSQLMaxRthdNum(int rthdNum)

このConnectionオブジェクトに対して最大SQL処理リアルスレッド数を設定します。

37

setHoldability(int holdability)

このConnectionオブジェクトを使用して生成されたResultSetオブジェクトの保持機能を設定します。

38

setReadOnly(boolean readOnly)

このConnectionオブジェクトを読み取り専用モードに設定します。トランザクションアクセスモードを設定します。

39

setSchema(String schema)

アクセスするスキーマ名を設定します。

40

setTransactionIsolation(int level)

このConnectionオブジェクトのトランザクション隔離性水準を設定します。

重要

この表に記載されていないメソッドは，HADBではサポートしていません。サポートしていないメソッドを実行すると，SQLExceptionが投入されることがあります。

(3)　必要なパッケージ名称とクラス名称

Connectionインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbConnection

8.3.2　clearWarnings()

(1)　機能

Connectionオブジェクトに通知されたすべての警告をクリアします。

このメソッドを実行した場合，このConnectionオブジェクトに対する新しい警告が報告されるまでは，getWarningsメソッドの戻り値はnullになります。

(2)　形式

public synchronized void clearWarnings() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.3　close()

(1)　機能

HADBサーバとの接続を切断します。

通常接続時は，HADBサーバとの接続を切断するとともに，該当するオブジェクトを無効にし，不要なリソースを解放します。

(2)　形式

public synchronized void close() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

なし。

(6)　留意事項

プーリング環境下でこのメソッドを実行した場合，HADBサーバとの物理的な接続は切断されません。この場合，PooledConnectionオブジェクトのcloseメソッドで物理的な接続の切断をします。

プーリング環境下でこのメソッドを実行した結果，致命的なエラーが発生してコネクションプーリングが使用できなくなった場合でも，ConnectionEventListener.connectionErrorOccurredは発生しません。

すでにクローズされたConnectionオブジェクトでこのメソッドを実行しても，このメソッドは何もしません。

行の取り出し処理でエラーが発生していた場合，決着していなかったトランザクションはコミットされないでロールバックされます。なお，HADBサーバからは正常に切断されて，リソースも解放されます。

8.3.4　commit()

(1)　機能

直前のコミットまたはロールバック以降に行われた変更をすべて有効とします。

自動コミットモードを有効にしている状態でこのメソッドを呼び出しても，例外を投入しないでコミット処理を行います。

(2)　形式

public synchronized void commit() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

データベースのアクセスエラーが発生した場合

行の取り出し処理で発生したエラーを，コミット処理の延長で検知した場合

(6)　留意事項

行の取り出し処理のエラーを検知した例外が発生した場合，トランザクションはコミットされないでロールバックされます。

コミット処理が失敗した場合，HADBサーバが異常終了します。

8.3.5　createStatement()

(1)　機能

SQL文をHADBサーバに送るためのStatementオブジェクトを生成します。

(2)　形式

public synchronized Statement createStatement() throws SQLException

(3)　引数

なし。

(4)　戻り値

Statementオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

Statementオブジェクトの生成でエラーが発生した場合

データベースのアクセスエラーが発生した場合

(6)　留意事項

このメソッドで生成したStatementオブジェクトから生成されるResultSetオブジェクトの保持機能は，常にResultSet.HOLD_CURSORS_OVER_COMMITになります。

8.3.6　createStatement(int resultSetType, int resultSetConcurrency)

(1)　機能

SQL文をHADBサーバに送るためのStatementオブジェクトを生成します。

(2)　形式

public synchronized Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException

(3)　引数

int resultSetType：

結果セットタイプを指定します。

int resultSetConcurrency：

並行処理モードを指定します。

(4)　戻り値

Statementオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

Statementオブジェクトの生成でエラーが発生した場合

結果セットタイプにResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

データベースのアクセスエラーが発生した場合

(6)　留意事項

このメソッドで生成したStatementオブジェクトから生成されるResultSetオブジェクトの保持機能は，常にResultSet.HOLD_CURSORS_OVER_COMMITになります。

結果セットタイプにResultSet.TYPE_SCROLL_SENSITIVEを指定した場合，ResultSet.TYPE_SCROLL_INSENSITIVEに切り替え，SQLWarningを設定します。

並行処理モードはResultSet.CONCUR_READ_ONLYだけサポートしています。ResultSet.CONCUR_UPDATABLEを指定した場合，ResultSet.CONCUR_READ_ONLYに切り替えてSQLWarningを設定します。

8.3.7　createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)

(1)　機能

SQL文をHADBサーバに送るためのStatementオブジェクトを生成します。

(2)　形式

public synchronized Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException

(3)　引数

int resultSetType：

結果セットタイプを指定します。

int resultSetConcurrency：

並行処理モードを指定します。

int resultSetHoldability：

ResultSetオブジェクトの保持機能を指定します。

(4)　戻り値

Statementオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

Statementオブジェクトの生成でエラーが発生した場合

結果セットタイプにResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

ResultSetオブジェクトの保持機能にResultSet定数以外を指定した場合

データベースのアクセスエラーが発生した場合

(6)　留意事項

結果セットタイプにResultSet.TYPE_SCROLL_SENSITIVEを指定した場合，ResultSet.TYPE_SCROLL_INSENSITIVEに切り替えて，SQLWarningを設定します。

並行処理モードはResultSet.CONCUR_READ_ONLYだけをサポートします。ResultSet.CONCUR_UPDATABLEを指定した場合，ResultSet.CONCUR_READ_ONLYに切り替えて，SQLWarningを設定します。

ResultSetオブジェクトの保持機能は，ResultSet.HOLD_CURSORS_OVER_COMMITだけをサポートしています。ResultSet.CLOSE_CURSORS_AT_COMMITを指定した場合は，ResultSet.HOLD_CURSORS_OVER_COMMITに切り替えて，SQLWarningを設定します。

8.3.8　getAutoCommit()

(1)　機能

このConnectionオブジェクトの現在の自動コミットモードを取得します。

(2)　形式

public synchronized boolean getAutoCommit() throws SQLException

(3)　引数

なし。

(4)　戻り値

Connectionオブジェクトでの現在の自動コミットモードの状態が返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.9　getCatalog()

(1)　機能

このConnectionオブジェクトの現在のカタログ名を取得します。

(2)　形式

public synchronized String getCatalog() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にnullが返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.10　getHADBConnectionID()

(1)　機能

このConnectionオブジェクトに割り当てられているコネクションIDを取得します。

(2)　形式

public int getHADBConnectionID() throws SQLException

(3)　引数

なし。

(4)　戻り値

このConnectionオブジェクトに割り当てられているコネクションIDが返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.3.11　getHADBConnectionSerialNum()

(1)　機能

このConnectionオブジェクトに割り当てられているコネクション通番を取得します。

(2)　形式

public int getHADBConnectionSerialNum() throws SQLException

(3)　引数

なし。

(4)　戻り値

このConnectionオブジェクトに割り当てられているコネクション通番が返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.3.12　getHADBOrderMode()

(1)　機能

このConnectionオブジェクトの，現在のORDER BY句を指定したSELECT文の文字データの並び替え順序を取得します。

(2)　形式

public int getHADBOrderMode() throws SQLException

(3)　引数

なし。

(4)　戻り値

現在のORDER BY句を指定したSELECT文の文字データの並び替え順序が返却されます。次に示すどちらかの値が返却されます。

AdbConnection.HADB_SQL_ORDER_MODE_BYTE

AdbConnection.HADB_SQL_ORDER_MODE_ISO

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.3.13　getHADBSQLHashFltSize()

(1)　機能

このConnectionオブジェクトに設定されているハッシュフィルタ領域サイズを取得します。

このメソッドの使い方（実行するSQL文ごとにハッシュフィルタ領域サイズを変更する方法）については，「8.3.37　setHADBSQLMaxRthdNum(int rthdNum)」の「(7)　使用例」を参照してください。

(2)　形式

public int getHADBSQLHashFltSize() throws SQLException

(3)　引数

なし。

(4)　戻り値

このConnectionオブジェクトに設定されているハッシュフィルタ領域サイズ（単位：メガバイト）が返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.3.14　getHADBSQLHashTblSize()

(1)　機能

このConnectionオブジェクトに設定されているハッシュテーブル領域サイズを取得します。

このメソッドの使い方（実行するSQL文ごとにハッシュテーブル領域サイズを変更する方法）については，「8.3.37　setHADBSQLMaxRthdNum(int rthdNum)」の「(7)　使用例」を参照してください。

(2)　形式

public int getHADBSQLHashTblSize() throws SQLException

(3)　引数

なし。

(4)　戻り値

このConnectionオブジェクトに設定されているハッシュテーブル領域サイズ（単位：メガバイト）が返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.3.15　getHADBSQLMaxRthdNum()

(1)　機能

このConnectionオブジェクトに設定されている最大SQL処理リアルスレッド数を取得します。

このメソッドの使い方（実行するSQL文ごとに最大SQL処理リアルスレッド数を変更する方法）については，「8.3.37　setHADBSQLMaxRthdNum(int rthdNum)」の「(7)　使用例」を参照してください。

(2)　形式

public int getHADBSQLMaxRthdNum() throws SQLException

(3)　引数

なし。

(4)　戻り値

このConnectionオブジェクトに設定されている最大SQL処理リアルスレッド数が返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.3.16　getHADBTransactionID()

(1)　機能

実行中のトランザクションのトランザクションIDを取得します。

(2)　形式

public long getHADBTransactionID() throws SQLException

(3)　引数

なし。

(4)　戻り値

getHADBTransactionIDメソッドを発行したときに実行中のトランザクションのトランザクションIDが返却されます。

なお，SQL文の実行前にgetHADBTransactionIDメソッドを発行した場合は，0が返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.3.17　getHoldability()

(1)　機能

このConnectionオブジェクトを使用して生成されるResultSetオブジェクトの現在の保持機能を取得します。

(2)　形式

public synchronized int getHoldability() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にResultSet.HOLD_CURSORS_OVER_COMMITが返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.18　getMetaData()

(1)　機能

DatabaseMetaDataオブジェクトを生成します。

(2)　形式

public synchronized DatabaseMetaData getMetaData() throws SQLException

(3)　引数

なし。

(4)　戻り値

DatabaseMetaDataオブジェクトが返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.19　getSchema()

(1)　機能

このConnectionオブジェクトの現在のスキーマ名を取得します。

(2)　形式

public synchronized String getSchema() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にnullが返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.20　getTransactionIsolation()

(1)　機能

このConnectionオブジェクトの現在のトランザクション隔離性水準を取得します。

(2)　形式

public synchronized int getTransactionIsolation() throws SQLException

(3)　引数

なし。

(4)　戻り値

現在のトランザクション隔離性水準が返却されます。次に示すどちらかの値が返却されます。

Connection.TRANSACTION_READ_COMMITTED

トランザクション隔離性水準にREAD COMMITTEDが適用されている場合に返却されます。

Connection.TRANSACTION_REPEATABLE_READ

トランザクション隔離性水準にREPEATABLE READが適用されている場合に返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.21　getTypeMap()

(1)　機能

このConnectionオブジェクトに関連したMapオブジェクトを取得します。

(2)　形式

public synchronized java.util.Map getTypeMap() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に情報を格納していない空のjava.util.Mapオブジェクトが返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.22　getWarnings()

(1)　機能

このConnectionオブジェクトに関する呼び出しによって報告される警告を，SQLWarningオブジェクトに取得します。

該当するConnectionオブジェクトが保持するSQLWarningオブジェクトを取得します。取得したSQLWarningオブジェクトのgetNextWarningメソッドを実行すれば，2つ目以降の警告を取得できます。

(2)　形式

public synchronized SQLWarning getWarnings() throws SQLException

(3)　引数

なし。

(4)　戻り値

最初のSQLWarningオブジェクトが返却されます。SQLWarningオブジェクトがない場合はnullが返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.23　isClosed()

(1)　機能

Connectionオブジェクトがクローズされているかどうかを返します。

HADBサーバへの接続は，closeメソッドが呼び出されるか，または特定の致命的なエラーが発生した場合に切断されます。closeメソッドを実行したあとに，このメソッドが実行された場合にだけ，trueを返すことを保証します。

なお，HADBサーバへの接続が，有効または無効かをこのメソッドで判定することはできません。

(2)　形式

public synchronized boolean isClosed() throws SQLException

(3)　引数

なし。

(4)　戻り値

Connectionオブジェクトがクローズされている場合はtrueが，クローズされていない場合はfalseが返却されます。

(5)　発生する例外

なし。

8.3.24　isReadOnly()

(1)　機能

このConnectionオブジェクトが読み込み専用モードかどうかを取得します。

(2)　形式

public synchronized boolean isReadOnly() throws SQLException

(3)　引数

なし。

(4)　戻り値

このConnectionオブジェクトが読み込み専用モードの場合はtrueが，読み込み専用モードではない状態の場合はfalseが返却されます。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.25　isValid(int timeout)

(1)　機能

現在の接続状態を取得します。

(2)　形式

public synchronized boolean isValid(int timeout) throws SQLException

(3)　引数

int timeout：

待ち時間（秒）を0〜65,535の範囲で指定します。

0を指定した場合は無制限となります。

65,536以上を指定した場合には，65,535が仮定されます。

(4)　戻り値

接続中であることを確認できた場合は，trueが返却されます。Connectionオブジェクトがクローズされている場合，または引数で指定された待ち時間を過ぎた場合はタイムアウトとなり，falseが返却されます。

(5)　発生する例外

引数に-1以下が指定された場合は，SQLExceptionが投入されます。

8.3.26　nativeSQL(String sql)

(1)　機能

指定したSQL文内のエスケープ句を，HADBが実行できる形式に変換します。

(2)　形式

public synchronized String nativeSQL(String sql) throws SQLException

(3)　引数

String sql：

SQL文を指定します。

(4)　戻り値

HADBが実行できるSQL文が返却されます。

sqlにnullを指定した場合，nullが返却されます。sqlに空文字を指定した場合，空文字が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

指定されたSQLのエスケープ句の形式が次のように不正である場合

"{"およびキーワードはあるが，"}"がない

指定されたSQL文の長さが，16,000,000文字を超えている場合

(6)　エスケープ句の構文規則

指定されたSQL文内のエスケープ句を，HADBが実行できる形式に変換して返します。エスケープ句の構文規則を次に示します。

エスケープ句 ::= 日付・時刻・時刻印のエスケープシーケンス
　　　　　　　｜ LIKE述語のエスケープ文字のエスケープシーケンス
　　　　　　　｜ 外結合のエスケープシーケンス
　　　　　　　｜ スカラ関数のエスケープシーケンス
日付・時刻・時刻印のエスケープシーケンス ::= 日付のエスケープシーケンス
　　　　　　　　　　　　　　　　　　　　　｜ 時刻のエスケープシーケンス
　　　　　　　　　　　　　　　　　　　　　｜ 時刻印のエスケープシーケンス
日付のエスケープシーケンス ::=
　　　　　エスケープ開始子 d 日付データの既定の文字列表現※1 エスケープ終了子
時刻のエスケープシーケンス ::=
　　　　　エスケープ開始子 t 時刻データの既定の文字列表現※2 エスケープ終了子
時刻印のエスケープシーケンス ::=
　　　　　エスケープ開始子 ts 時刻印データの既定の文字列表現※3 エスケープ終了子
LIKE述語のエスケープ文字のエスケープシーケンス ::=
　　　　　エスケープ開始子 escape エスケープ文字 エスケープ終了子
外結合のエスケープシーケンス ::= エスケープ開始子 oj 結合表 エスケープ終了子
スカラ関数のエスケープシーケンス ::= エスケープ開始子 fn スカラ関数 エスケープ終了子
スカラ関数 ::= 標準形式のスカラ関数※4
エスケープ開始子 ::= '{'
エスケープ終了子 ::= '}'

注※1

'YYYY-MM-DD'で表される文字列表現のことです。

注※2

'hh:mm:ss[.f...]'で表される文字列表現のことです。

注※3

'YYYY-MM-DD hh:mm:ss[.f...]'で表される文字列表現のことです。

注※4

標準形式のスカラ関数については，「7.8　エスケープ句で指定できるスカラ関数」を参照してください。

なお，下線部には，エスケープ句を指定できません。また，JDBCドライバでは構文解析をしないで，変換後もそのままとし，HADBサーバの構文解析に任せます。

エスケープシーケンスのキーワードを次に示します。キーワードについては，大文字と小文字を区別しません。

日付のエスケープシーケンス内の"d"

時刻のエスケープシーケンス内の"t"

時刻印のエスケープシーケンス内の"ts"

LIKE述語のエスケープ文字のエスケープシーケンス内の"escape"

外結合のエスケープシーケンス内の"oj"

スカラ関数のエスケープシーケンス内の"fn"

エスケープ句の入力規則を次に示します。

エスケープ句内の区切り文字には，半角空白が指定できます。

区切り文字は，エスケープ開始子の後ろ，キーワードの後ろ，およびエスケープ終了子の前に挿入できます。

1つのSQL文中に，複数のエスケープ句を指定できます。

JDBCドライバは指定されたSQL文内のエスケープ句を，HADBが実行できる形式に変換します。変換するのは，{ }で囲まれたエスケープ句内だけです。エスケープ句外は，何も変換しません。

エスケープ句の変換規則を次の表に示します。

表8‒10　エスケープ句の変換規則

対象エスケープ句

変換前

変換後

日付

エスケープ開始子 d 日付データの既定の文字列表現 エスケープ終了子

DATE日付データの既定の文字列表現

時刻

エスケープ開始子 t 時刻データの既定の文字列表現 エスケープ終了子

TIME時刻データの既定の文字列表現

時刻印

エスケープ開始子 ts 時刻印データの既定の文字列表現 エスケープ終了子

TIMESTAMP時刻印データの既定の文字列表現

LIKE

エスケープ開始子 escape エスケープ文字 エスケープ終了子

escape エスケープ文字

外結合

エスケープ開始子 oj 結合表 エスケープ終了子

結合表

スカラ関数

エスケープ開始子 fn スカラ関数 エスケープ終了子

HADB形式のスカラ関数※

注※

標準形式のスカラ関数を，HADB形式に変換します。

標準形式とHADB形式が異なるスカラ関数の変換内容を次の表に示します。

基本的に，スカラ関数の引数の個数チェックはしません。

表8‒11　標準形式とHADB形式が異なるスカラ関数の変換内容一覧

スカラ関数

変換前の形式

変換後の形式（HADB形式）

数学関数

CEILING(number)

CEIL(number)

LOG(float)

LN(float)

LOG10(float)

LOG(10,float)

RAND([number, number])

RANDOM([number, number])

TRUNCATE(number[, places])

TRUNC(number[, places])

文字列関数

CHAR(code)

CHR(code)

LCASE(string)

LOWER(string)

OCTET_LENGTH(string)

LENGTHB(string)

SUBSTRING(string, start[, length])

SUBSTR(string, start[, length])

UCASE(string)

UPPER(string)

時刻と日付の関数

CURDATE()

CURRENT_DATE

CURRENT_DATE()

CURRENT_DATE

CURRENT_TIME()

CURRENT_TIME

CURRENT_TIMESTAMP()

CURRENT_TIMESTAMP

CURTIME()

CURRENT_TIME

NOW()

CURRENT_TIMESTAMP

システム関数

USER()

CURRENT_USER

8.3.27　prepareStatement(String sql)

(1)　機能

パラメタ付きのSQL文をHADBサーバに送るためのPreparedStatementオブジェクトを生成します。

(2)　形式

public synchronized PreparedStatement prepareStatement(String sql) throws SQLException

(3)　引数

String sql：

実行するSQL文を指定します。

(4)　戻り値

PreparedStatementオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

PreparedStatementオブジェクトの生成でエラーが発生した場合

データベースのアクセスエラーが発生した場合

指定されたSQL文の長さが，16,000,000文字を超えている場合

(6)　留意事項

このメソッドで生成したPreparedStatementオブジェクトから生成されるResultSetオブジェクトの保持機能は，常にResultSet.HOLD_CURSORS_OVER_COMMITとなります。

8.3.28　prepareStatement(String sql, int resultSetType, int resultSetConcurrency)

(1)　機能

パラメタ付きのSQL文をHADBサーバに送るためのPreparedStatementオブジェクトを生成します。

(2)　形式

public synchronized PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException

(3)　引数

String sql：

実行するSQL文を指定します。

int resultSetType：

結果セットタイプを指定します。

int resultSetConcurrency：

並行処理モードを指定します。

(4)　戻り値

PreparedStatementオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

PreparedStatementオブジェクトの生成でエラーが発生した場合

結果セットタイプにResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

データベースのアクセスエラーが発生した場合

指定されたSQL文の長さが，16,000,000文字を超えている場合

(6)　留意事項

結果セットタイプにResultSet.TYPE_SCROLL_SENSITIVEを指定した場合，ResultSet.TYPE_SCROLL_INSENSITIVEに切り替えて，SQLWarningを設定します。

並行処理モードはResultSet.CONCUR_READ_ONLYだけをサポートしています。ResultSet.CONCUR_UPDATABLEを指定した場合，ResultSet.CONCUR_READ_ONLYに切り替えて，SQLWarningを設定します。

このメソッドで生成したPreparedStatementオブジェクトから生成されるResultSetオブジェクトの保持機能は，常にResultSet.HOLD_CURSORS_OVER_COMMITとなります。

8.3.29　prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)

(1)　機能

パラメタ付きのSQL文をHADBサーバに送るためのPreparedStatementオブジェクトを生成します。

(2)　形式

public synchronized PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException

(3)　引数

String sql：

実行するSQL文を指定します。

int resultSetType：

結果セットタイプを指定します。

int resultSetConcurrency：

並行処理モードを指定します。

int resultSetHoldability：

ResultSetオブジェクトの保持機能を指定します。

(4)　戻り値

PreparedStatementオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

PreparedStatementオブジェクトの生成でエラーが発生した場合

結果セットタイプにResultSet定数以外を指定した場合

並行処理モードにResultSet定数以外を指定した場合

ResultSetオブジェクトの保持機能にResultSet定数以外を指定した場合

データベースのアクセスエラーが発生した場合

指定されたSQL文の長さが，16,000,000文字を超えている場合

(6)　留意事項

結果セットタイプにResultSet.TYPE_SCROLL_SENSITIVEを指定した場合，ResultSet.TYPE_SCROLL_INSENSITIVEに切り替えて，SQLWarningを設定します。

並行処理モードはResultSet.CONCUR_READ_ONLYだけをサポートします。ResultSet.CONCUR_UPDATABLEを指定した場合，ResultSet.CONCUR_READ_ONLYに切り替えて，SQLWarningを設定します。

ResultSetオブジェクトの保持機能はResultSet.HOLD_CURSORS_OVER_COMMITだけをサポートしています。ResultSet.CLOSE_CURSORS_AT_COMMITを指定した場合は，ResultSet.HOLD_CURSORS_OVER_COMMITに切り替えて，SQLWarningを設定します。

8.3.30　rollback()

(1)　機能

トランザクションによって実行された変更をすべて元に戻し，Connectionオブジェクトが保持するロックをすべて解除します。

自動コミットモードを有効にしている状態で，このメソッドを呼び出しても例外を投入しないで，ロールバック処理を行います。

(2)　形式

public synchronized void rollback() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

データベースのアクセスエラーが発生した場合

(6)　留意事項

ロールバック処理が成功すると，ResultSetオブジェクトが無効になります。

ロールバック処理が失敗した場合，HADBサーバが異常終了します。

8.3.31　setAutoCommit(boolean autoCommit)

(1)　機能

この接続の自動コミットモードを設定します。

(2)　形式

public synchronized void setAutoCommit(boolean autoCommit) throws SQLException

(3)　引数

boolean autoCommit：

自動コミットモードを有効にする場合はtrueを，無効にする場合はfalseを指定します。

(4)　戻り値

なし。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

自動コミットモードが有効な場合，SQL文の処理が終わると自動的にコミットされます。そのため，1つのSQL文は1つのトランザクションとして扱われます。自動コミットモードが無効な場合は，commitメソッドまたはrollbackメソッドの実行によってSQL文が完了します。デフォルトでは，自動コミットモードは有効です。

SQL文の完了時に自動コミットが実行されます。SQL文がResultSetオブジェクトを返す場合，ResultSetオブジェクトがクローズされたときに，SQL文が完了します。

トランザクションの途中でこのメソッドが呼び出されても，そのトランザクションはコミットされません。

8.3.32　setCatalog(String catalog)

(1)　機能

渡されたカタログ名を設定し，Connectionオブジェクトのデータベースの作業用サブスペースを選択します。

(2)　形式

public synchronized void setCatalog(String catalog) throws SQLException

(3)　引数

String catalog：

この引数を指定しても無視されます。

(4)　戻り値

なし。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.33　setHADBAuditInfo(int pos,String userinfo)

(1)　機能

HADBサーバにアクセスするアプリケーションのアカウント情報などのユーザ付加情報を設定します。設定したユーザ付加情報は，解除するまで有効になります。

なお，ここで設定したユーザ付加情報は，次に示すタイミングで監査証跡として出力されます。

このConnectionオブジェクトを使用して生成したStatementオブジェクトを使用したSQL文の実行時

このConnectionオブジェクトを使用して生成したPreparedStatementオブジェクトを使用したSQL文の実行時

このConnectionオブジェクトのクローズ時

(2)　形式

public synchronized void setHADBAuditInfo(int pos,String userinfo) throws SQLException

(3)　引数

int pos：

userinfoで指定したユーザ付加情報を，監査証跡のどの列に出力するかを指定します。次のどれかの値を指定してください。

1：userinfoで指定したユーザ付加情報を，監査証跡のユーザ付加情報1に出力する場合に指定します。

2：userinfoで指定したユーザ付加情報を，監査証跡のユーザ付加情報2に出力する場合に指定します。

3：userinfoで指定したユーザ付加情報を，監査証跡のユーザ付加情報3に出力する場合に指定します。

String userinfo：

ユーザ付加情報を指定します。

ここで指定したユーザ付加情報は，HADBサーバが使用している文字コードに変換されます。文字コード変換後のバイト数が100バイト以内になるように，ユーザ付加情報を指定してください。

なお，NULL文字（0x00）は使用できません。

また，ユーザ付加情報の設定を解除する場合は，nullを指定してください。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

posに1～3以外の値を指定した場合

ユーザ付加情報の文字コード変換に失敗した場合

ユーザ付加情報の文字コード変換後の長さが100バイトを超えた場合

ユーザ付加情報中にNULL文字（0x00）を含んでいる場合

トランザクションがすでに開始している場合

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

setHADBAuditInfoメソッドで指定したユーザ付加情報は，Connectionオブジェクトをいったんプールして再度使用した場合，前回設定した付加情報を再利用しません。setHADBAuditInfoメソッドを実行していない状態と同じになります。

8.3.34　setHADBOrderMode(int mode)

(1)　機能

このConnectionオブジェクトの，ORDER BY句を指定したSELECT文の文字データの並び替え順序を設定します。

このメソッドで設定する内容は，クライアント定義のadb_clt_sql_order_modeオペランドに対応しています。

(2)　形式

public void setHADBOrderMode(int mode) throws SQLException

(3)　引数

int mode：

ORDER BY句を指定したSELECT文の文字データの並び替え順序を指定します。次のどちらかの値を指定してください。

AdbConnection.HADB_SQL_ORDER_MODE_BYTE

文字データをバイトコード順に並び替えます。

AdbConnection.HADB_SQL_ORDER_MODE_ISO

文字データをソートコード順（ISO/IEC14651:2011準拠）に並び替えます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

トランザクションがすでに開始している場合

並び替え順序に次の値以外を指定した場合

・AdbConnection.HADB_SQL_ORDER_MODE_BYTE

・AdbConnection.HADB_SQL_ORDER_MODE_ISO

(6)　留意事項

ORDER BY句を指定したSELECT文の文字データの並び替え順序は，次に示す優先順位に従って決定されます。番号が小さいほど優先順位が高くなります。1と2では1の指定が優先されます。

setHADBOrderModeメソッドで指定した並び替え順序

システムプロパティのadb_clt_sql_order_modeで指定した並び替え順序

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したadb_clt_sql_order_modeプロパティの値

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したadb_clt_sql_order_modeの値

サーバ定義のadb_sql_order_modeオペランドで指定した並び替え順序

setHADBOrderModeメソッドで指定した，ORDER BY句を指定したSELECT文の文字データの並び替え順序は，Connectionオブジェクトをいったんプールしたあとに再度使用した場合，前回の並び替え順序を引き継ぎません。setHADBOrderModeメソッドを実行していない状態と同じになります。

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.3.35　setHADBSQLHashFltSize(int areaSize)

(1)　機能

このConnectionオブジェクトに対してハッシュフィルタ領域サイズを設定します。

このメソッドで設定する内容は，クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドに対応しています。

重要

このメソッドを指定したConnectionオブジェクトから生成されたStatementオブジェクトまたはPreparedStatementオブジェクトは，Connectionオブジェクトがクローズされるまでは，このメソッドで指定したハッシュフィルタ領域サイズが適用されます。

このメソッドの使い方（実行するSQL文ごとにハッシュフィルタ領域サイズを変更する方法）については，「8.3.37　setHADBSQLMaxRthdNum(int rthdNum)」の「(7)　使用例」を参照してください。

(2)　形式

public void setHADBSQLHashFltSize(int areaSize) throws SQLException

(3)　引数

int areaSize：

設定するハッシュフィルタ領域サイズをメガバイト単位で指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

areaSizeに不正な値を指定した場合

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

setHADBSQLHashFltSizeメソッドで指定したハッシュフィルタ領域サイズは，Connectionオブジェクトをいったんプールしたあとに再度使用した場合，前回のハッシュフィルタ領域サイズを引き継ぎません。setHADBSQLHashFltSizeメソッドを実行していない状態と同じになります。

setHADBSQLHashFltSizeメソッドでハッシュフィルタ領域サイズを再設定しても，生成済みのStatementオブジェクトまたはPreparedStatementオブジェクトには，再設定後のハッシュフィルタ領域サイズは適用されません。

ハッシュフィルタ領域サイズの決定方法については，「2.2.3　性能に関するオペランド」のadb_sql_exe_hashflt_area_sizeオペランドの説明を参照してください。

8.3.36　setHADBSQLHashTblSize(int areaSize)

(1)　機能

このConnectionオブジェクトに対してハッシュテーブル領域サイズを設定します。

このメソッドで設定する内容は，クライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドに対応しています。

重要

このメソッドを指定したConnectionオブジェクトから生成されたStatementオブジェクトまたはPreparedStatementオブジェクトは，Connectionオブジェクトがクローズされるまでは，このメソッドで指定したハッシュテーブル領域サイズが適用されます。

このメソッドの使い方（実行するSQL文ごとにハッシュテーブル領域サイズを変更する方法）については，「8.3.37　setHADBSQLMaxRthdNum(int rthdNum)」の「(7)　使用例」を参照してください。

(2)　形式

public void setHADBSQLHashTblSize(int areaSize) throws SQLException

(3)　引数

int areaSize：

設定するハッシュテーブル領域サイズをメガバイト単位で指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

areaSizeに不正な値を指定した場合

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

setHADBSQLHashTblSizeメソッドで指定したハッシュテーブル領域サイズは，Connectionオブジェクトをいったんプールしたあとに再度使用した場合，前回のハッシュテーブル領域サイズを引き継ぎません。setHADBSQLHashTblSizeメソッドを実行していない状態と同じになります。

setHADBSQLHashTblSizeメソッドでハッシュテーブル領域サイズを再設定しても，生成済みのStatementオブジェクトまたはPreparedStatementオブジェクトには，再設定後のハッシュテーブル領域サイズは適用されません。

ハッシュテーブル領域サイズの決定方法については，「2.2.3　性能に関するオペランド」のadb_sql_exe_hashtbl_area_sizeオペランドの説明を参照してください。

8.3.37　setHADBSQLMaxRthdNum(int rthdNum)

(1)　機能

このConnectionオブジェクトに対して最大SQL処理リアルスレッド数を設定します。

このメソッドで設定する内容は，クライアント定義のadb_sql_exe_max_rthd_numオペランドに対応しています。

重要

このメソッドを指定したConnectionオブジェクトから生成されたStatementオブジェクトまたはPreparedStatementオブジェクトは，Connectionオブジェクトがクローズされるまでは，このメソッドで指定した最大SQL処理リアルスレッド数が適用されます。

(2)　形式

public void setHADBSQLMaxRthdNum(int rthdNum) throws SQLException

(3)　引数

int rthdNum：

設定する最大SQL処理リアルスレッド数を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

rthdNumに不正な値を指定した場合

(6)　留意事項

このメソッドは，AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

setHADBSQLMaxRthdNumメソッドで指定した最大SQL処理リアルスレッド数は，Connectionオブジェクトをいったんプールしたあとに再度使用した場合，前回の最大SQL処理リアルスレッド数を引き継ぎません。setHADBSQLMaxRthdNumメソッドを実行していない状態と同じになります。

setHADBSQLMaxRthdNumメソッドで最大SQL処理リアルスレッド数を再設定しても，生成済みのStatementオブジェクトまたはPreparedStatementオブジェクトには，再設定後の最大SQL処理リアルスレッド数は適用されません。

最大SQL処理リアルスレッド数の決定方法については，「2.2.3　性能に関するオペランド」のadb_sql_exe_max_rthd_numオペランドの説明を参照してください。

(7)　使用例

setHADBSQLMaxRthdNumおよびgetHADBSQLMaxRthdNumメソッドを使用して，実行するSQL文ごとに最大SQL処理リアルスレッド数を変更する例を次に示します。

（例1）

   :
   :
Connection cnct = ds.getConnection();
AdbConnection con = cnct.unwrap(com.hitachi.hadb.jdbc.AdbConnection.class);

// 最大SQL処理リアルスレッド数のデフォルト値を退避しておく
int default_sql_exe_rthd_num = con.getHADBSQLMaxRthdNum();

// 最大SQL処理リアルスレッド数を0に変更する
con.setHADBSQLMaxRthdNum(0);

// PreparedStatementオブジェクトを生成する
// このPreparedStatementオブジェクトで実行するすべてのSQL文は，
// 最大SQL処理リアルスレッド数が0で動作する
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM MASTER.SQL_USERS WHERE USER_NAME=?");

// 最大SQL処理リアルスレッド数をデフォルト値に戻す
con.setHADBSQLMaxRthdNum(default_sql_exe_rthd_num);
// この操作は上記のpstmtに影響を与えない

pstmt.setString(1, "HOGE");
ResultSet rs = pstmt.executeQuery(); // 最大SQL処理リアルスレッド数が0でSQL文を実行する
while (rs.next()) {
   :
   :
}
rs.close();
pstmt.close();
   :
   :

（例2）

ステートメントごとに異なる最大SQL処理リアルスレッド数で，SQL文を実行する例を次に示します。

   :
   :
Connection cnct = ds.getConnection();
AdbConnection con = cnct.unwrap(com.hitachi.hadb.jdbc.AdbConnection.class);

// 最大SQL処理リアルスレッド数のデフォルト値を退避しておく
int default_sql_exe_rthd_num = con.getHADBSQLMaxRthdNum();

// 最大SQL処理リアルスレッド数を0に変更する
con.setHADBSQLMaxRthdNum(0);

// PreparedStatementオブジェクトを生成する
// pstmt1で実行するすべてのSQL文は，最大SQL処理リアルスレッド数が0で動作する
PreparedStatement pstmt1 = con.prepareStatement("SELECT * FROM MASTER.SQL_USERS WHERE USER_NAME=?");

// 最大SQL処理リアルスレッド数を4に変更する
con.setHADBSQLMaxRthdNum(4); // この操作は上記の pstmt1 に影響を与えない

// PreparedStatementオブジェクトを生成する
// pstmt2で実行するすべてのSQL文は，最大SQL処理リアルスレッド数が4で動作する
PreparedStatement pstmt2 = con.prepareStatement("SELECT * FROM MASTER.SQL_TABLE_PRIVILEGES WHERE GRANTOR=?");

// 最大SQL処理リアルスレッド数をデフォルト値に戻す
con.setHADBSQLMaxRthdNum(default_sql_exe_rthd_num);
// この操作は上記のpstmt1およびpstmt2に影響を与えない

pstmt1.setString(1, "HOGE");
ResultSet rs1 = pstmt1.executeQuery(); // 最大SQL処理リアルスレッド数が0でSQL文を実行する
while (rs1.next()) {
   :
   :
}
rs1.close();
pstmt1.close();

pstmt2.setString(1, "FOO");
ResultSet rs2 = pstmt2.executeQuery(); // 最大SQL処理リアルスレッド数が4でSQL文を実行する
while (rs2.next()) {
   :
   :
}
rs2.close();
pstmt2.close();
   :
   :

メモ

上記の例では，例外処理などのエラー処理は省いています。

setHADBSQLHashTblSizeおよびgetHADBSQLHashTblSizeメソッドを使用して，実行するSQL文ごとにハッシュテーブル領域サイズを変更する場合も，上記の例を参考にしてください。

setHADBSQLHashFltSizeおよびgetHADBSQLHashFltSizeメソッドを使用して，実行するSQL文ごとにハッシュフィルタ領域サイズを変更する場合も，上記の例を参考にしてください。

8.3.38　setHoldability(int holdability)

(1)　機能

このConnectionオブジェクトを使用して生成されたResultSetオブジェクトの保持機能を設定します。

(2)　形式

public synchronized void setHoldability(int holdability) throws SQLException

(3)　引数

int holdability：

この引数を指定しても無視されます。常にResultSet.HOLD_CURSORS_OVER_COMMITが指定されたと見なします。

(4)　戻り値

なし。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.39　setReadOnly(boolean readOnly)

(1)　機能

このConnectionオブジェクトを読み取り専用モードに設定します。トランザクションアクセスモードを設定します。

(2)　形式

public synchronized void setReadOnly(boolean readOnly) throws SQLException

(3)　引数

boolean readOnly：

読み取り専用モードにする場合はtrueを，そうでない場合はfalseを指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

トランザクションがすでに開始している場合

当該Connectionオブジェクトで，保持機能にHOLD_CURSORS_OVER_COMMITを指定して作成したResultSetオブジェクトがクローズされていない場合

(6)　留意事項

トランザクションアクセスモードは，次に示す優先順位に従って決定されます。番号が小さいほど優先順位が高くなります。1と2では1の指定が優先されます。

setReadOnlyメソッドで指定したトランザクションアクセスモード

システムプロパティのadb_clt_trn_access_modeで指定したトランザクションアクセスモード

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したadb_clt_trn_access_modeプロパティの値

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したadb_clt_trn_access_modeの値

setReadOnlyメソッドで指定したトランザクションアクセスモードは，Connectionオブジェクトをいったんプールしたあとに再使用した場合，前回のトランザクションアクセスモードを引き継ぎません。setReadOnlyメソッドを実行しないときと同じ状態になります。

8.3.40　setSchema(String schema)

(1)　機能

アクセスするスキーマ名を設定します。ただし，このメソッドでは引数の指定値は無視され，スキーマ名の設定は行われません。

(2)　形式

public synchronized void setSchema(String schema) throws SQLException

(3)　引数

String schema：

スキーマ名を指定します。ただし，指定しても無視されます。

(4)　戻り値

なし。

(5)　発生する例外

Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.3.41　setTransactionIsolation(int level)

(1)　機能

このConnectionオブジェクトのトランザクション隔離性水準を設定します。

(2)　形式

public synchronized void setTransactionIsolation(int level) throws SQLException

(3)　引数

int level：

適用するトランザクション隔離性水準を指定します。次に示すどちらかの値を指定します。

Connection.TRANSACTION_READ_COMMITTED

トランザクション隔離性水準にREAD COMMITTEDを適用する場合に指定します。

Connection.TRANSACTION_REPEATABLE_READ

トランザクション隔離性水準にREPEATABLE READを適用する場合に指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Connectionオブジェクトがクローズされている場合

トランザクションがすでに開始している場合

このConnectionオブジェクトで，保持機能にHOLD_CURSORS_OVER_COMMITを指定して作成したResultSetオブジェクトがクローズされていない場合

トランザクション隔離性水準に次の値以外を指定した場合

Connection.TRANSACTION_READ_COMMITTED

Connection.TRANSACTION_REPEATABLE_READ

(6)　留意事項

トランザクション隔離性水準は，次に示す優先順位に従って決定されます。番号が小さいほど優先順位が高くなります。1と2では1の指定が優先されます。

setTransactionIsolationメソッドで指定したトランザクション隔離性水準

システムプロパティのadb_clt_trn_iso_lvで指定したトランザクション隔離性水準

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したadb_clt_trn_iso_lvプロパティの値

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したadb_clt_trn_iso_lvの値

サーバ定義のadb_sys_trn_iso_lvオペランドで指定したトランザクション隔離性水準

setTransactionIsolationメソッドで指定したトランザクション隔離性水準は，Connectionオブジェクトをいったんプールしたあとに再度使用した場合，前回のトランザクション隔離性水準を引き継ぎません。setTransactionIsolationメソッドを実行していない状態と同じになります。

8.4　Statementインタフェース

ここでは，Statementインタフェースで提供されているメソッドについて説明します。

8.4.1　Statementインタフェースのメソッド一覧

(1)　Statementインタフェースの主な機能

Statementインタフェースでは，主に次の機能が提供されています。

SQL文の実行

検索結果としての結果セット（ResultSetオブジェクト）の生成

更新結果としての更新行数の返却

最大検索行数の設定

検索制限時間の設定

(2)　HADBでサポートしているStatementインタフェースのメソッド

HADBでサポートしているStatementインタフェースのメソッドの一覧を次の表に示します。

表8‒12　Statementインタフェースのメソッド一覧

項番

Statementインタフェースのメソッド

機能

1

addBatch(String sql)

StatementオブジェクトのバッチにSQL文を登録します。

2

cancel()

該当するオブジェクト，および該当するオブジェクトと同一接続のオブジェクトが実行しているSQLの処理を取り消します。

3

clearBatch()

Statementオブジェクトのバッチに登録されているSQL文をすべてクリアします。

4

clearWarnings()

このStatementオブジェクトに関して報告されたすべての警告をクリアします。

5

close()

Statementオブジェクト，およびこのStatementオブジェクトから生成されたResultSetオブジェクトのクローズを行います。

6

closeOnCompletion()

このStatementオブジェクトに依存するすべての結果セットがクローズされたときに，このStatementオブジェクトをクローズします。

7

execute(String sql)

SQL文を実行します。

8

executeBatch()

バッチに登録されたSQL文を実行し，更新行数のint型の配列を返却します。

9

executeLargeBatch()

バッチに登録されたSQL文を実行し，更新行数のlong型の配列を返却します。

10

executeLargeUpdate(String sql)

SQL文（検索系SQL以外のSQL文）を実行し，更新行数をlong型で返却します。

11

executeQuery(String sql)

検索系SQLを実行し，検索結果を格納したResultSetオブジェクトを返却します。

12

executeUpdate(String sql)

SQL文（検索系SQL以外のSQL文）を実行し，更新行数をint型で返却します。

13

getConnection()

Statementオブジェクトを生成したConnectionオブジェクトを返却します。

14

getFetchDirection()

このStatementオブジェクトから生成される結果集合のデフォルトのフェッチ方向を取得します。

15

getFetchSize()

Statementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズ（HADBサーバからHADBクライアントに検索結果を一括転送する行数）を取得します。

16

getHADBSQLSerialNum()

このStatementオブジェクトに割り当てられているSQL文通番を取得します。

17

getHADBStatementHandle()

このStatementオブジェクトに割り当てられている文ハンドルを取得します。

18

getLargeMaxRows()

このStatementオブジェクトによって生成されるResultSetオブジェクトの最大格納行数をlong型で取得します。

19

getLargeUpdateCount()

更新行数をlong型で返します。

20

getMaxFieldSize()

このStatementオブジェクトによって生成されるResultSetオブジェクトの，CHARおよびVARCHARの列の最大バイト数を取得します。

21

getMaxRows()

このStatementオブジェクトによって生成されるResultSetオブジェクトの最大格納行数をint型で取得します。

22

getMoreResults()

次の結果集合に移動します。

23

getQueryTimeout()

setQueryTimeoutメソッドで設定したSQL処理のタイムアウト時間を取得します。

24

getResultSet()

ResultSetオブジェクトとして，検索結果を取得します。

25

getResultSetConcurrency()

このStatementオブジェクトから生成されるResultSetオブジェクトの並行処理モードを取得します。

26

getResultSetHoldability()

このStatementオブジェクトから生成されるResultSetオブジェクトの保持機能を取得します。

27

getResultSetType()

このStatementオブジェクトから生成されるResultSetオブジェクトの，結果セットタイプを取得します。

28

getUpdateCount()

更新行数をint型で返します。

29

getWarnings()

このStatementオブジェクトに関する呼び出しによって報告される，最初の警告を取得します。

30

isClosed()

このStatementオブジェクトがクローズされているかどうかを示す値を取得します。

31

isCloseOnCompletion()

このStatementオブジェクトに依存するすべての結果セットがクローズされたときに，このStatementオブジェクトがクローズされるかどうかを示す値を取得します。

32

isPoolable()

Statementオブジェクトがプールできるかどうかを示す値を取得します。

33

setCursorName(String name)

後続のStatementオブジェクトのexecuteメソッドによって使用されるSQLカーソル名を設定します。

34

setEscapeProcessing(boolean enable)

このStatementオブジェクトによるエスケープ構文の解析を有効にするかどうかを設定します。

35

setFetchDirection(int direction)

このStatementオブジェクトから生成される結果集合のフェッチ方向を設定します。

36

setFetchSize(int rows)

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズ（HADBサーバからHADBクライアントに検索結果を一括転送する行数）を設定します。

37

setLargeMaxRows(long max)

このStatementオブジェクトによって生成されるResultSetオブジェクトの最大格納行数をlong型で設定します。

38

setMaxFieldSize(int max)

このStatementオブジェクトによって生成されるResultSetオブジェクトの，CHARおよびVARCHARの列の最大バイト数を設定します。

39

setMaxRows(int max)

このStatementオブジェクトによって生成されるResultSetオブジェクトの最大格納行数をint型で設定します。

40

setQueryTimeout(int seconds)

SQL処理のタイムアウト時間を設定します。

重要

この表に記載されていないメソッドは，HADBではサポートしていません。サポートしていないメソッドを実行すると，SQLExceptionが投入されることがあります。

(3)　必要なパッケージ名称とクラス名称

Statementインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbStatement

8.4.2　addBatch(String sql)

(1)　機能

StatementオブジェクトのバッチにSQL文を登録します。最大2,147,483,647個のSQL文を登録できます。

(2)　形式

public synchronized void addBatch(String sql) throws SQLException

(3)　引数

String sql：

登録するSQL文を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

上限値の2,147,483,647個を超えるSQL文を登録しようとした場合

SQL文にnullまたは長さ0の文字列を指定している場合

指定されたSQL文の長さが，16,000,000文字を超えている場合

8.4.3　cancel()

(1)　機能

該当するオブジェクト，および該当するオブジェクトと同一接続のオブジェクトが実行しているSQLの処理を取り消します。

このメソッドを使用して，実行中のSQLに非同期キャンセルを実行できます。

(2)　形式

public void cancel() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

(6)　留意事項

このメソッドは，該当するStatementオブジェクトがSQLの実行中でなくても，同一接続オブジェクトに対して，ほかのオブジェクトがSQLを実行している場合は，非同期キャンセルを行います。

該当するStatementオブジェクトがSQLの実行中ではなく，かつ同一接続オブジェクトに対してほかのオブジェクトがSQLを実行していない場合，このメソッドはキャンセルを実行しません。

SQLの非同期キャンセルに成功した場合，トランザクションがロールバックされます。

8.4.4　clearBatch()

(1)　機能

Statementオブジェクトのバッチに登録されているSQL文をすべてクリアします。

(2)　形式

public synchronized void clearBatch() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.5　clearWarnings()

(1)　機能

このStatementオブジェクトに関して報告されたすべての警告をクリアします。

(2)　形式

public synchronized void clearWarnings() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

なし。

8.4.6　close()

(1)　機能

Statementオブジェクト，およびこのStatementオブジェクトから生成されたResultSetオブジェクトのクローズを行います。

(2)　形式

public synchronized void close() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

データベースのアクセスエラーが発生した場合，SQLExceptionが投入されます。

8.4.7　closeOnCompletion()

(1)　機能

このStatementオブジェクトに依存するすべての結果セットがクローズされたときに，このStatementオブジェクトをクローズします。Statementオブジェクトの実行によって結果セットが生成されない場合は，このメソッドは無効になります。

このメソッドを複数回呼び出しても，このStatementオブジェクトへの効果は切り替わりません。

このメソッドの呼び出しは，Statementオブジェクトのその後の実行と，現在開いていて依存されている結果セットがあるStatementオブジェクトの両方に影響します。

(2)　形式

public synchronized void closeOnCompletion() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.8　execute(String sql)

(1)　機能

SQL文を実行します。ResultSetオブジェクトや更新行数をgetResultSetメソッドおよびgetUpdateCountメソッド（またはgetLargeUpdateCountメソッド）で取得できます。

実行したSQL文の種類とgetResultSetメソッドおよびgetUpdateCountメソッド（またはgetLargeUpdateCountメソッド）の戻り値の関係を次の表に示します。

表8‒13　実行したSQL文の種類とgetResultSetメソッドおよびgetUpdateCountメソッド（またはgetLargeUpdateCountメソッド）の戻り値の関係

実行したSQL文の種類

getResultSetメソッドの戻り値

getUpdateCountメソッドまたはgetLargeUpdateCountメソッドの戻り値

検索系SQLの場合

実行結果のResultSetオブジェクト

-1

検索系SQL以外のSQLの場合

null

0以上の値※

SQLの実行がエラーになった場合

null

-1

注※

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，getUpdateCountメソッドではなく，getLargeUpdateCountメソッドを使用してください。getUpdateCountメソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

メモ

検索系SQLとはSELECT文のことです。また，検索系SQL以外のSQLとは，UPDATE文などの更新系SQLのほかに，CREATE TABLEなどの定義系SQLも含んでいます。

更新系SQLとは，INSERT文，UPDATE文，DELETE文，PURGE CHUNK文，およびTRUNCATE TABLE文のことです。

(2)　形式

public synchronized boolean execute(String sql) throws SQLException

(3)　引数

String sql：

実行するSQL文を指定します。

(4)　戻り値

実行したSQL文が検索系SQLの場合はtrueが，そうでない場合はfalseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

sqlにnullまたは長さ0の文字列を指定した場合

データベースのアクセスエラーが発生した場合

指定されたSQL文の長さが，16,000,000文字を超えている場合

8.4.9　executeBatch()

(1)　機能

バッチに登録されたSQL文を実行し，更新行数のint型の配列を返却します。

バッチに登録されているすべてのSQL文を実行したあと，バッチに登録されているSQL文をすべてクリアします。途中でエラーが発生した場合でも，バッチに登録されているSQL文はすべてクリアされます。

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，executeBatchメソッドではなく，executeLargeBatchメソッドを使用してください。executeBatchメソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized int[] executeBatch() throws SQLException

(3)　引数

なし。

(4)　戻り値

実行したSQL文ごとの更新行数をint型の配列にして返却します。配列は，バッチに登録されたSQL文の順序になります。バッチにSQL文が1つも登録されていない場合，またはバッチの1つ目のSQL文がエラーだった場合，要素数0の配列が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

次に示す場合は，例外BatchUpdateException（SQLExceptionのサブクラス）が投入されます。

検索系SQLがバッチで実行された場合

データベースのアクセスエラーが発生した場合

キャンセルを受け付けた場合

8.4.10　executeLargeBatch()

(1)　機能

バッチに登録されたSQL文を実行し，更新行数のlong型の配列を返却します。

バッチに登録されているすべてのSQL文を実行したあと，バッチに登録されているSQL文をすべてクリアします。途中でエラーが発生した場合でも，バッチに登録されているSQL文はすべてクリアされます。

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，executeBatchメソッドではなく，executeLargeBatchメソッドを使用してください。executeBatchメソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized long[] executeLargeBatch() throws SQLException

(3)　引数

なし。

(4)　戻り値

実行したSQL文ごとの更新行数をlong型の配列にして返却します。配列は，バッチに登録されたSQL文の順序になります。バッチにSQL文が1つも登録されていない場合，またはバッチの1つ目のSQL文がエラーだった場合，要素数0の配列が返却されます。

(5)　発生する例外

発生する例外については，「8.4.9　executeBatch()」の「(5)　発生する例外」を参照してください。

8.4.11　executeLargeUpdate(String sql)

(1)　機能

SQL文（検索系SQL以外のSQL文）を実行し，更新行数をlong型で返却します。

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，executeUpdate(String sql)メソッドではなく，executeLargeUpdate(String sql)メソッドを使用してください。executeUpdate(String sql)メソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized long executeLargeUpdate(String sql) throws SQLException

(3)　引数

String sql：

実行するSQL文（検索系SQL以外のSQL文）を指定します。

(4)　戻り値

INSERT文，UPDATE文，およびDELETE文を実行した場合は，更新行数がlong型で返却されます。これら以外のSQL文を実行した場合は，0が返却されます。

(5)　発生する例外

発生する例外については，「8.4.13　executeUpdate(String sql)」の「(5)　発生する例外」を参照してください。

8.4.12　executeQuery(String sql)

(1)　機能

検索系SQLを実行し，検索結果を格納したResultSetオブジェクトを返却します。

(2)　形式

public synchronized ResultSet executeQuery(String sql) throws SQLException

(3)　引数

String sql：

実行するSQL文（検索系SQL）を指定します。

(4)　戻り値

検索結果を格納したResultSetオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

検索系SQL以外のSQL文（INSERT文など）を実行した場合

sqlにnullまたは長さ0の文字列を指定した場合

データベースのアクセスエラーが発生した場合

指定されたSQL文の長さが，16,000,000文字を超えている場合

8.4.13　executeUpdate(String sql)

(1)　機能

SQL文（検索系SQL以外のSQL文）を実行し，更新行数をint型で返却します。更新行数がInteger.MAX_VALUEを超える可能性がある場合は，executeUpdate(String sql)メソッドではなく，executeLargeUpdate(String sql)メソッドを使用してください。executeUpdate(String sql)メソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized int executeUpdate(String sql) throws SQLException

(3)　引数

String sql：

実行するSQL文（検索系SQL以外のSQL文）を指定します。

(4)　戻り値

INSERT文，UPDATE文，およびDELETE文を実行した場合は，更新行数がint型で返却されます。これら以外のSQL文を実行した場合は，0が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

検索系SQL（SELECT文）を実行した場合

sqlにnullまたは長さ0の文字列を指定した場合

データベースのアクセスエラーが発生した場合

指定されたSQL文の長さが，16,000,000文字を超えている場合

8.4.14　getConnection()

(1)　機能

Statementオブジェクトを生成したConnectionオブジェクトを返却します。

(2)　形式

public synchronized Connection getConnection() throws SQLException

(3)　引数

なし。

(4)　戻り値

Connectionオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.15　getFetchDirection()

(1)　機能

このStatementオブジェクトから生成される結果集合のデフォルトのフェッチ方向を取得します。

(2)　形式

public synchronized int getFetchDirection() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にResultSet.FETCH_FORWARDが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.16　getFetchSize()

(1)　機能

Statementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズ（HADBサーバからHADBクライアントに検索結果を一括転送する行数）を取得します。

(2)　形式

public synchronized int getFetchSize() throws SQLException

(3)　引数

なし。

(4)　戻り値

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズ（HADBサーバからHADBクライアントに検索結果を一括転送する行数）が返却されます。

setFetchSizeメソッドで0を設定した場合，フェッチサイズにはシステムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_clt_fetch_sizeの値が適用されますが，戻り値には0が返却されます。フェッチサイズと戻り値の関係を次の表に示します。

表8‒14　フェッチサイズと戻り値の関係

setFetchSizeメソッドの設定値（m）

戻り値

0

0

1≦m≦65,535

m

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.17　getHADBSQLSerialNum()

(1)　機能

このStatementオブジェクトに割り当てられているSQL文通番を取得します。

(2)　形式

public long getHADBSQLSerialNum() throws SQLException

(3)　引数

なし。

(4)　戻り値

このStatementオブジェクトに割り当てられているSQL文通番が返却されます。

SQL文の実行前にこのメソッドを実行した場合，0が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

(6)　留意事項

このメソッドは，AdbStatementインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.4.18　getHADBStatementHandle()

(1)　機能

このStatementオブジェクトに割り当てられている文ハンドルを取得します。

(2)　形式

public int getHADBStatementHandle() throws SQLException

(3)　引数

なし。

(4)　戻り値

このStatementオブジェクトに割り当てられている文ハンドルが返却されます。

SQL文の実行前にこのメソッドを実行した場合，0が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

(6)　留意事項

このメソッドは，AdbStatementインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.4.19　getLargeMaxRows()

(1)　機能

このStatementオブジェクトによって生成されるResultSetオブジェクトの最大格納行数をlong型で取得します。最大格納行数を超えた場合，その行はResultSetオブジェクトに格納されません。また，格納されなかったことは通知されません。

setLargeMaxRowsメソッドでInteger.MAX_VALUEを超える値を指定した場合は，getMaxRowsメソッドではなく，getLargeMaxRowsメソッドを使用してください。getMaxRowsメソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized long getLargeMaxRows() throws SQLException

(3)　引数

なし。

(4)　戻り値

このStatementオブジェクトによって生成される，ResultSetオブジェクトの最大格納行数がlong型で返却されます。setMaxRowsメソッドまたはsetLargeMaxRowsメソッドで設定した値が返却されます。0が返却された場合，最大格納行数の設定がないことを意味します。

(5)　発生する例外

発生する例外については，「8.4.22　getMaxRows()」の「(5)　発生する例外」を参照してください。

8.4.20　getLargeUpdateCount()

(1)　機能

更新行数をlong型で返します。

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，getUpdateCountメソッドではなく，getLargeUpdateCountメソッドを使用してください。getUpdateCountメソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized long getLargeUpdateCount() throws SQLException

(3)　引数

なし。

(4)　戻り値

戻り値の詳細については，「8.4.29　getUpdateCount()」の「(4)　戻り値」を参照してください。

(5)　発生する例外

発生する例外については，「8.4.29　getUpdateCount()」の「(5)　発生する例外」を参照してください。

8.4.21　getMaxFieldSize()

(1)　機能

このStatementオブジェクトによって生成されるResultSetオブジェクトの，CHARおよびVARCHARの列の最大バイト数を取得します。最大バイト数を超えた分のデータは切り捨てられます。

(2)　形式

public synchronized int getMaxFieldSize() throws SQLException

(3)　引数

なし。

(4)　戻り値

CHARおよびVARCHARの列の最大バイト数が返却されます。setMaxFieldSizeメソッドで設定した値が返却されます。0が返却された場合，最大バイト数の設定がないことを意味します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.22　getMaxRows()

(1)　機能

このStatementオブジェクトによって生成されるResultSetオブジェクトの最大格納行数をint型で取得します。最大格納行数を超えた場合，その行はResultSetオブジェクトに格納されません。また，格納されなかったことは通知されません。

setLargeMaxRowsメソッドでInteger.MAX_VALUEを超える値を指定した場合は，getMaxRowsメソッドではなく，getLargeMaxRowsメソッドを使用してください。getMaxRowsメソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized int getMaxRows() throws SQLException

(3)　引数

なし。

(4)　戻り値

このStatementオブジェクトによって生成される，ResultSetオブジェクトの最大格納行数がint型で返却されます。setMaxRowsメソッドまたはsetLargeMaxRowsメソッドで設定した値が返却されます。0が返却された場合，最大格納行数の設定がないことを意味します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.23　getMoreResults()

(1)　機能

次の結果集合に移動します。

(2)　形式

public synchronized boolean getMoreResults() throws SQLException

(3)　引数

なし。

(4)　戻り値

次の結果集合が存在する場合はtrueが，そうでない場合はfalseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.24　getQueryTimeout()

(1)　機能

setQueryTimeoutメソッドで設定したSQL処理のタイムアウト時間を取得します。

(2)　形式

public synchronized int getQueryTimeout() throws SQLException

(3)　引数

なし。

(4)　戻り値

setQueryTimeoutメソッドで設定したSQL処理のタイムアウト時間（単位：秒）が返却されます。setQueryTimeoutメソッドを実行していない場合は，0が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.25　getResultSet()

(1)　機能

ResultSetオブジェクトとして，検索結果を取得します。

(2)　形式

public synchronized ResultSet getResultSet() throws SQLException

(3)　引数

なし。

(4)　戻り値

Statementオブジェクトが保持しているResultSetオブジェクトが返却されます。ResultSetオブジェクト内に検索結果がない場合は，nullが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.26　getResultSetConcurrency()

(1)　機能

このStatementオブジェクトから生成されるResultSetオブジェクトの並行処理モードを取得します。

(2)　形式

public synchronized int getResultSetConcurrency() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にResultSet.CONCUR_READ_ONLYが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.27　getResultSetHoldability()

(1)　機能

このStatementオブジェクトから生成されるResultSetオブジェクトの保持機能を取得します。

(2)　形式

public synchronized int getResultSetHoldability() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にResultSet.HOLD_CURSORS_OVER_COMMITが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.28　getResultSetType()

(1)　機能

このStatementオブジェクトから生成されるResultSetオブジェクトの，結果セットタイプを取得します。

(2)　形式

public synchronized int getResultSetType() throws SQLException

(3)　引数

なし。

(4)　戻り値

ResultSet.TYPE_FORWARD_ONLYまたはResultSet.TYPE_SCROLL_INSENSITIVEが返却されます。

ResultSet.TYPE_FORWARD_ONLY：

カーソルが順方向だけ移動できます。

ResultSet.TYPE_SCROLL_INSENSITIVE：

カーソルがスクロールできますが，値の変更は反映されません。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.29　getUpdateCount()

(1)　機能

更新行数をint型で返します。

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，getUpdateCountメソッドではなく，getLargeUpdateCountメソッドを使用してください。getUpdateCountメソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized int getUpdateCount() throws SQLException

(3)　引数

なし。

(4)　戻り値

戻り値の詳細を次の表に示します。

表8‒15　getUpdateCountメソッドまたはgetLargeUpdateCountメソッドの戻り値の詳細

Statementオブジェクトのメソッドの実行条件

getUpdateCountまたはgetLargeUpdateCountメソッドの戻り値

executeXXXメソッドを実行していない場合

-1

executeXXXメソッドを実行している場合

最後に実行したexecuteXXXメソッドのあとに，getMoreResultsメソッドを実行した場合

-1

最後に実行したexecuteXXXメソッドでエラーが発生した場合

-1

最後にexecuteBatchメソッドまたはexecuteLargeBatchメソッドを実行した場合

-1

最後にexecuteBatchメソッドまたはexecuteLargeBatchメソッド以外のexecuteXXXメソッドを実行した場合

最後に実行したSQL文が検索系SQLの場合

-1

最後に実行したSQLが検索系SQL以外のSQL文の場合

INSERT，UPDATE，DELETE

更新行数※

そのほか

0

注※

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，getUpdateCountメソッドではなく，getLargeUpdateCountメソッドを使用してください。getUpdateCountメソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.30　getWarnings()

(1)　機能

このStatementオブジェクトに関する呼び出しによって報告される，最初の警告を取得します。2つ以上の警告がある場合，後続の警告は，最初の警告にチェーンされ，直前に取得された警告のSQLWarningオブジェクトのgetNextWarningメソッドを呼び出すことによって取得できます。

(2)　形式

public synchronized SQLWarning getWarnings() throws SQLException

(3)　引数

なし。

(4)　戻り値

最初のSQLWarningオブジェクトが返却されます。SQLWarningオブジェクトがない場合は，nullが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.31　isClosed()

(1)　機能

このStatementオブジェクトがクローズされているかどうかを示す値を取得します。

(2)　形式

public synchronized boolean isClosed() throws SQLException

(3)　引数

なし。

(4)　戻り値

Statementオブジェクトがクローズされている場合はtrueが返却されます。Statementオブジェクトがクローズされていない場合はfalseが返却されます。

(5)　発生する例外

なし。

8.4.32　isCloseOnCompletion()

(1)　機能

このStatementオブジェクトに依存するすべての結果セットがクローズされたときに，このStatementオブジェクトがクローズされるかどうかを示す値を取得します。

(2)　形式

public synchronized boolean isCloseOnCompletion() throws SQLException

(3)　引数

なし。

(4)　戻り値

このStatementオブジェクトに依存するすべての結果セットがクローズされたときに，このStatementオブジェクトがクローズされる場合はtrueが返却されます。そうでない場合はfalseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.33　isPoolable()

(1)　機能

Statementオブジェクトがプールできるかどうかを示す値を取得します。

(2)　形式

public synchronized boolean isPoolable() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.34　setCursorName(String name)

(1)　機能

後続のStatementオブジェクトのexecuteメソッドによって使用されるSQLカーソル名を設定します。

(2)　形式

public synchronized void setCursorName(String name) throws SQLException

(3)　引数

String name：

SQLカーソル名を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.35　setEscapeProcessing(boolean enable)

(1)　機能

このStatementオブジェクトによるエスケープ構文の解析を有効にするかどうかを設定します。

(2)　形式

public synchronized void setEscapeProcessing(boolean enable) throws SQLException

(3)　引数

boolean enable：

エスケープ構文の解析を有効にする場合はtrueを，無効にする場合はfalseを指定します。

このメソッドを実行しない場合，trueが仮定されます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.4.36　setFetchDirection(int direction)

(1)　機能

このStatementオブジェクトから生成される結果集合のフェッチ方向を指定します。

(2)　形式

public synchronized void setFetchDirection(int direction) throws SQLException

(3)　引数

int direction：

フェッチ方向を指定します。ResultSet.FETCH_FORWARDだけ指定できます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

directionにResultSet.FETCH_FORWARD以外が指定された場合

8.4.37　setFetchSize(int rows)

(1)　機能

このStatementオブジェクトから生成されるResultSetオブジェクトの，デフォルトのフェッチサイズ（HADBサーバからHADBクライアントに検索結果を一括転送する行数）を設定します。

(2)　形式

public synchronized void setFetchSize(int rows) throws SQLException

(3)　引数

int rows：

一括転送する行数を0〜65,535の範囲で指定します。

1以上の値を指定した場合，指定値に従って複数の行データをHADBサーバからHADBクライアントに一括転送します。

0を指定した場合，またはこのメソッドを実行しない場合は，システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_clt_fetch_sizeの値が適用されます。

setFetchSizeメソッドの設定値とプロパティのadb_clt_fetch_sizeの設定値の関係を次の表に示します。

表8‒16　setFetchSizeメソッドの設定値とプロパティのadb_clt_fetch_sizeの設定値の関係

setFetchSizeメソッドの設定値（m）

プロパティのadb_clt_fetch_sizeの設定値（n）

一括転送される行数

0

1≦n≦65,535

n

指定なし

1

1≦m≦65,535

1≦n≦65,535

m

指定なし

m

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

rowsに0〜65,535以外の値を指定した場合

rowsに指定した値が，最大格納行数（setMaxRowsメソッドの設定値）よりも大きい場合

rowsに指定した値が，最大格納行数（setLargeMaxRowsメソッドの設定値）よりも大きい場合

(6)　留意事項

HADBサーバに対して一度の通信で要求する行数は，次の表に示す優先順位に従って決定されます。

表8‒17　HADBサーバに対して一度の通信で要求する行数の優先順位

優先順位

HADBサーバに対して一度の通信で要求する行数

1

ResultSetクラスのsetFetchSizeメソッドの引数で指定した値

2

StatementクラスのsetFetchSizeメソッドの引数で指定した値

3

システムプロパティadb_clt_fetch_sizeで設定した値

4

DriverManagerクラスのgetConnectionメソッドの引数infoに指定したadb_clt_fetch_sizeプロパティの値

5

DriverManagerクラスのgetConnectionメソッドの引数urlに指定したadb_clt_fetch_sizeの値

なお，検索結果の行数が上記の表に示す転送行数より多い場合，検索が終了するまで（またはAPからの検索要求がなくなるまで），HADBサーバに対して転送を要求します。

8.4.38　setLargeMaxRows(long max)

(1)　機能

このStatementオブジェクトによって生成されるResultSetオブジェクトの最大格納行数をlong型で設定します。最大格納行数を超えた場合，その行はResultSetオブジェクトに格納されません。また，格納されなかったことは通知されません。

生成済みのResultSetオブジェクトに対しては，このメソッドの設定値は適用されません。

(2)　形式

public synchronized void setLargeMaxRows(long max) throws SQLException

(3)　引数

long max：

最大格納行数を指定します。

0を指定した場合，最大格納行数を設定しません。ただし，結果セットタイプがResultSet.TYPE_SCROLL_INSENSITIVEの場合は，0を指定してもInteger.MAX_VALUEが最大格納行数となります。

このメソッドを実行しない場合，0（最大格納行数を設定しない）が仮定されます。

(4)　戻り値

なし。

(5)　発生する例外

発生する例外については，「8.4.40　setMaxRows(int max)」の「(5)　発生する例外」を参照してください。

8.4.39　setMaxFieldSize(int max)

(1)　機能

このStatementオブジェクトによって生成されるResultSetオブジェクトの，CHARおよびVARCHARの列の最大バイト数を設定します。最大バイト数を超えた分のデータは切り捨てられます。

生成済みのResultSetオブジェクトに対しては，このメソッドの設定値は適用されません。

(2)　形式

public synchronized void setMaxFieldSize(int max) throws SQLException

(3)　引数

int max：

CHARおよびVARCHARの列に適用する最大バイト数を指定します。

0を指定した場合，最大バイト数の設定をしません。

このメソッドを実行しない場合，0（最大バイト数を設定しない）が仮定されます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

maxに0未満の値を指定した場合

8.4.40　setMaxRows(int max)

(1)　機能

このStatementオブジェクトによって生成されるResultSetオブジェクトの最大格納行数をint型で設定します。最大格納行数を超えた場合，その行はResultSetオブジェクトに格納されません。また，格納されなかったことは通知されません。

生成済みのResultSetオブジェクトに対しては，このメソッドの設定値は適用されません。

(2)　形式

public synchronized void setMaxRows(int max) throws SQLException

(3)　引数

int max：

最大格納行数を指定します。

0を指定した場合，最大格納行数を設定しません。ただし，結果セットタイプがResultSet.TYPE_SCROLL_INSENSITIVEの場合は，0を指定してもInteger.MAX_VALUEが最大格納行数となります。

このメソッドを実行しない場合，0（最大格納行数を設定しない）が仮定されます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

maxに0未満の値を指定した場合

8.4.41　setQueryTimeout(int seconds)

(1)　機能

SQL処理のタイムアウト時間を設定します。

(2)　形式

public synchronized void setQueryTimeout(int seconds) throws SQLException

(3)　引数

int seconds：

SQL処理のタイムアウト時間（単位：秒）を0〜65,535の範囲で指定します。

0を指定した場合，またはこのメソッドを実行しない場合は，システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_clt_rpc_sql_wait_timeの設定値が有効になります。

このメソッドを実行すると，次に示す2つの待ち時間が監視対象になります。

HADBクライアントからHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間

上記の待ち時間を超えた場合，SQLCODEが-732（KFAA30732-E）のタイムアウトエラーがAPに返されます。このとき，SQL文の処理はキャンセルされ，トランザクションはロールバックされます。そのあと，HADBサーバからAPが切り離されます。

同一コネクションで複数のSELECT文を同時実行した際に，処理リアルスレッド数不足が発生したときの，処理リアルスレッドを確保できるまでの待ち時間

上記の待ち時間を超えた場合，SQLCODEが-1071570（KFAA71570-E）のタイムアウトエラーがAPに返されます。このとき，SQL文の処理はキャンセルされますが，トランザクションはロールバックされません。また，APはHADBサーバから切り離されません。

このメソッドによる待ち時間の監視の目的については，「7.4.1　データの検索方法」の「(4)　同一コネクションで複数のSELECT文を同時実行する際の注意事項」を参照してください。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

Statementオブジェクトがクローズされている場合

Statementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

secondsに0未満の値を指定した場合

(6)　留意事項

secondsに65,536（プロパティのadb_clt_rpc_sql_wait_timeの最大値）以上の値を指定した場合，このメソッドの指定値は無視されます。

8.4.42　Statementインタフェースに関する注意事項

(1)　executeXXXメソッド実行時の注意事項

該当するStatementオブジェクトが生成したResultSetオブジェクトがクローズされていない状態でexecuteXXXメソッドを実行すると，以前生成したResultSetオブジェクトをクローズします。このため，executeXXXメソッド実行後，以前に生成したResultSetオブジェクトを使用して検索結果を取得しようとすると，SQLExceptionが投入されます。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();

(2)　Statementオブジェクトのクローズ

Statementオブジェクトを使用したあとは，必ず明示的にcloseメソッドでStatementオブジェクトをクローズしてください。Statementオブジェクトを明示的にクローズすると，HADB内の対応する文ハンドルが解放されます。Statementオブジェクトをクローズしないと，文ハンドルが不足することがあります。

ただし，文ハンドルはCOMMITまたはROLLBACKでトランザクションを決着した場合も解放されます。したがって，トランザクションをある程度の間隔で決着させると，文ハンドルの不足を回避できます。

8.5　PreparedStatementインタフェース

ここでは，PreparedStatementインタフェースで提供されているメソッドについて説明します。

8.5.1　PreparedStatementインタフェースのメソッド一覧

(1)　PreparedStatementインタフェースの主な機能

PreparedStatementインタフェースでは，主に次の機能が提供されています。

？パラメタ指定のSQLの実行

？パラメタの設定

検索結果としてのResultSetオブジェクトの生成，返却

更新結果としての更新行数の返却

PreparedStatementインタフェースはStatementインタフェースのサブインタフェースであるため，Statementインタフェースの機能をすべて継承します。

(2)　HADBでサポートしているPreparedStatementインタフェースのメソッド

HADBでサポートしているPreparedStatementインタフェースのメソッドの一覧を次の表に示します。

表8‒18　PreparedStatementインタフェースのメソッド一覧

項番

PreparedStatementインタフェースのメソッド

機能

1

addBatch()

PreparedStatementオブジェクトのバッチに，現在のパラメタセットを追加します。

2

clearParameters()

現在設定されているパラメタセットの値をすべてクリアします。

3

execute()

前処理済みのSQL文を実行します。

4

executeLargeUpdate()

前処理済みのSQL文（検索系SQL以外のSQL文）を実行し，更新行数をlong型で返却します。

5

executeQuery()

前処理済みの検索系SQLを実行し，実行結果を格納したResultSetオブジェクトを返却します。

6

executeUpdate()

前処理済みのSQL文（検索系SQL以外のSQL文）を実行し，更新行数をint型で返却します。

7

getHADBSQLSerialNum()

このPreparedStatementオブジェクトに割り当てられているSQL文通番を取得します。

8

getHADBStatementHandle()

このPreparedStatementオブジェクトに割り当てられている文ハンドルを取得します。

9

getMetaData()

このPreparedStatementが実行されるときに返されるResultSetオブジェクトの列に関する情報を格納するResultSetMetaDataオブジェクトを返却します。

10

getParameterMetaData()

このPreparedStatementオブジェクト内のパラメタのメタ情報を表すParameterMetaDataオブジェクトを返却します。

11

setAsciiStream(int parameterIndex, InputStream x, int length)

指定したInputStreamオブジェクトの持つ値を，？パラメタ値に設定します。

12

setBigDecimal(int parameterIndex, BigDecimal x)

指定したBigDecimalオブジェクトを？パラメタ値に設定します。

13

setBinaryStream(int parameterIndex, InputStream x, int length)

指定したInputStreamオブジェクトが持つ値を？パラメタ値に設定します。

14

setBoolean(int parameterIndex, boolean x)

指定したboolean値を？パラメタ値に設定します。

15

setByte(int parameterIndex, byte x)

指定したbyte値を？パラメタ値に設定します。

16

setBytes(int parameterIndex, byte[] x)

指定したbyte配列を？パラメタ値に設定します。

17

setCharacterStream(int parameterIndex, Reader reader, int length)

指定したReaderオブジェクトを？パラメタ値に設定します。

18

setDate(int parameterIndex, Date x)

指定したjava.sql.Dateオブジェクトを？パラメタ値に設定します。

19

setDate(int parameterIndex, Date x, Calendar cal)

ローカルタイムで指定したjava.sql.Dateオブジェクトを，指定したカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

20

setDouble(int parameterIndex, double x)

指定したdouble値を？パラメタ値に設定します。

21

setFloat(int parameterIndex, float x)

指定したfloat値を？パラメタ値に設定します。

22

setInt(int parameterIndex, int x)

指定したint値を？パラメタ値に設定します。

23

setLong(int parameterIndex, long x)

指定したlong値を？パラメタ値に設定します。

24

setNull(int parameterIndex,int sqlType)

指定した？パラメタにナル値を設定します。

25

setObject(int parameterIndex, Object x)

指定したオブジェクトが持つ値を？パラメタ値に設定します。

26

setObject(int parameterIndex, Object x, int targetSqlType)

27

setObject(int parameterIndex, Object x, int targetSqlType, int scale)

28

setShort(int parameterIndex, short x)

指定したshort値を？パラメタ値に設定します。

29

setString(int parameterIndex, String x)

指定したStringオブジェクトを？パラメタ値に設定します。

30

setTime(int parameterIndex, Time x)

指定したjava.sql.Timeオブジェクトを？パラメタ値に設定します。

31

setTime(int parameterIndex, Time x, Calendar cal)

ローカルタイムで指定したjava.sql.Timeオブジェクトを，指定したカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

32

setTimestamp(int parameterIndex, Timestamp x)

指定したjava.sql.Timestampオブジェクトを？パラメタ値に設定します。

33

setTimestamp(int parameterIndex, Timestamp x, Calendar cal)

ローカルタイムで指定したjava.sql.Timestampオブジェクトを，指定したカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

重要

この表に記載されていないメソッドは，HADBではサポートしていません。サポートしていないメソッドを実行すると，SQLExceptionが投入されます。

(3)　必要なパッケージ名称とクラス名称

PreparedStatementインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbPreparedStatement

8.5.2　addBatch()

(1)　機能

PreparedStatementオブジェクトのバッチに，現在のパラメタセットを追加します。最大2,147,483,647個パラメタセットを登録できます。

(2)　形式

public synchronized void addBatch() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

すべての？パラメタに値がセットされていない場合

バッチの登録数が2,147,483,647個を超えた場合

8.5.3　clearParameters()

(1)　機能

現在設定されているパラメタセットの値をすべてクリアします。

(2)　形式

public synchronized void clearParameters() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.5.4　execute()

(1)　機能

前処理済みのSQL文を実行します。

実行結果のResultSetオブジェクトや更新行数を，PreparedStatementオブジェクトのgetResultSetメソッド，およびPreparedStatementオブジェクトのgetUpdateCountメソッド（またはgetLargeUpdateCountメソッド）で取得できます。

executeメソッド実行後のgetResultSetメソッドおよびgetUpdateCountメソッド（またはgetLargeUpdateCountメソッド）の戻り値については，「表8‒13　実行したSQL文の種類とgetResultSetメソッドおよびgetUpdateCountメソッド（またはgetLargeUpdateCountメソッド）の戻り値の関係」を参照してください。

(2)　形式

public synchronized boolean execute() throws SQLException

(3)　引数

なし。

(4)　戻り値

実行したSQLが検索系SQLの場合はtrueが，そうでない場合はfalseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

値を設定していない？パラメタがある場合

データベースのアクセスエラーが発生した場合

8.5.5　executeLargeUpdate()

(1)　機能

前処理済みのSQL文（検索系SQL以外のSQL文）を実行し，更新行数をlong型で返却します。

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，executeUpdate()メソッドではなく，executeLargeUpdate()メソッドを使用してください。executeUpdate()メソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized long executeLargeUpdate() throws SQLException

(3)　引数

なし。

(4)　戻り値

INSERT文，UPDATE文，およびDELETE文を実行した場合は，更新行数がlong型で返却されます。これら以外のSQL文を実行した場合は，0が返却されます。

(5)　発生する例外

発生する例外については，「8.5.7　executeUpdate()」の「(5)　発生する例外」を参照してください。

8.5.6　executeQuery()

(1)　機能

前処理済みの検索系SQLを実行し，実行結果を格納したResultSetオブジェクトを返却します。

(2)　形式

public synchronized ResultSet executeQuery() throws SQLException

(3)　引数

なし。

(4)　戻り値

実行結果を格納したResultSetオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

検索系SQL以外のSQL文（INSERT文など）を実行した場合

値を設定していない？パラメタがある場合

データベースのアクセスエラーが発生した場合

8.5.7　executeUpdate()

(1)　機能

前処理済みのSQL文（検索系SQL以外のSQL文）を実行し，更新行数をint型で返却します。

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，executeUpdate()メソッドではなく，executeLargeUpdate()メソッドを使用してください。executeUpdate()メソッドを使用した場合に，Integer.MAX_VALUEを超えると0が返却されます。

(2)　形式

public synchronized int executeUpdate() throws SQLException

(3)　引数

なし。

(4)　戻り値

INSERT文，UPDATE文，およびDELETE文を実行した場合は，更新行数がint型で返却されます。これら以外のSQL文を実行した場合は，0が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このオブジェクトを生成したConnectionオブジェクトがクローズされている場合

検索系SQLを実行した場合

値を設定していない？パラメタがある場合

データベースのアクセスエラーが発生した場合

8.5.8　getHADBSQLSerialNum()

(1)　機能

このPreparedStatementオブジェクトに割り当てられているSQL文通番を取得します。

(2)　形式

public long getHADBSQLSerialNum() throws SQLException

(3)　引数

なし。

(4)　戻り値

このPreparedStatementオブジェクトに割り当てられているSQL文通番が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

(6)　留意事項

このメソッドは，AdbPreparedStatementインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.5.9　getHADBStatementHandle()

(1)　機能

このPreparedStatementオブジェクトに割り当てられている文ハンドルを取得します。

(2)　形式

public int getHADBStatementHandle() throws SQLException

(3)　引数

なし。

(4)　戻り値

このPreparedStatementオブジェクトに割り当てられている文ハンドルが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

(6)　留意事項

このメソッドは，AdbPreparedStatementインタフェースで提供されるHADB独自のメソッドです。実行方法については，「12.2　Wrapperインタフェース」を参照してください。

8.5.10　getMetaData()

(1)　機能

このPreparedStatementが実行されるときに返されるResultSetオブジェクトの列に関する情報を格納するResultSetMetaDataオブジェクトを返却します。

(2)　形式

public synchronized ResultSetMetaData getMetaData() throws SQLException

(3)　引数

なし。

(4)　戻り値

このPreparedStatementオブジェクトのメタ情報が，ResultSetMetaDataオブジェクトに格納されて返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.5.11　getParameterMetaData()

(1)　機能

このPreparedStatementオブジェクト内のパラメタのメタ情報を表すParameterMetaDataオブジェクトを返却します。返却するParameterMetaDataは，Connection.prepareStatement()実行時点でサーバから取得したパラメタのメタ情報となります。

(2)　形式

public synchronized ParameterMetaData getParameterMetaData() throws SQLException

(3)　引数

なし。

(4)　戻り値

このPreparedStatementオブジェクトのメタ情報が，ParametertMetaDataオブジェクトに格納されて返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.5.12　setAsciiStream(int parameterIndex, InputStream x, int length)

(1)　機能

指定したInputStreamオブジェクトの持つ値を，？パラメタ値に設定します。

(2)　形式

public synchronized void setAsciiStream(int parameterIndex, InputStream x, int length) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

InputStream x：

？パラメタに設定する値を持つjava.io.InputStreamオブジェクトを指定します。

int length：

設定するバイト数を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

lengthに0未満の値を指定した場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

(6)　留意事項

setAsciiStreamメソッドの実行時，xからの入力が終わったあとでも，xに対してcloseメソッドは実行されません。

8.5.13　setBigDecimal(int parameterIndex, BigDecimal x)

(1)　機能

指定したBigDecimalオブジェクトを？パラメタ値に設定します。

(2)　形式

public synchronized void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

BigDecimal x：

？パラメタに設定するjava.math.BigDecimalオブジェクトを指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.14　setBinaryStream(int parameterIndex, InputStream x, int length)

(1)　機能

指定したInputStreamオブジェクトが持つ値を？パラメタ値に設定します。

(2)　形式

public synchronized void setBinaryStream(int parameterIndex, InputStream x, int length) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

InputStream x：

？パラメタに設定する値を持つjava.io.InputStreamオブジェクトを指定します。

int length：

設定するバイト数を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

lengthに0未満の値を指定した場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

(6)　留意事項

setBinaryStreamメソッドの実行時，xからの入力が終わったあとでも，xに対してcloseメソッドは実行されません。

8.5.15　setBoolean(int parameterIndex, boolean x)

(1)　機能

指定したboolean値を？パラメタ値に設定します。

(2)　形式

public synchronized void setBoolean(int parameterIndex, boolean x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

boolean x：

？パラメタに設定する値を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

8.5.16　setByte(int parameterIndex, byte x)

(1)　機能

指定したbyte値を？パラメタ値に設定します。

(2)　形式

public synchronized void setByte(int parameterIndex, byte x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

byte x：

？パラメタに設定する値を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

8.5.17　setBytes(int parameterIndex, byte[] x)

(1)　機能

指定したbyte配列を？パラメタ値に設定します。

(2)　形式

public synchronized void setBytes(int parameterIndex, byte[] x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

byte[] x：

？パラメタに設定する値を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.18　setCharacterStream(int parameterIndex, Reader reader, int length)

(1)　機能

指定したReaderオブジェクトを？パラメタ値に設定します。

(2)　形式

public synchronized void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Reader reader：

？パラメタに設定する値を持つjava.io.Readerオブジェクトを指定します。

int length：

文字数を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

lengthに0未満の値を指定した場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

エンコードに失敗した場合

8.5.19　setDate(int parameterIndex, Date x)

(1)　機能

指定したjava.sql.Dateオブジェクトを？パラメタ値に設定します。

(2)　形式

public synchronized void setDate(int parameterIndex, Date x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Date x：

？パラメタに設定する値を持つjava.sql.Dateオブジェクトを指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.20　setDate(int parameterIndex, Date x, Calendar cal)

(1)　機能

ローカルタイムで指定したjava.sql.Dateオブジェクトを，指定したカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

(2)　形式

public synchronized void setDate(int parameterIndex, Date x, Calendar cal) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Date x：

？パラメタに設定する値を持つjava.sql.Dateオブジェクトを指定します。

Calendar cal：

データベースに格納する値のタイムゾーンが設定されたカレンダーを指定します。nullを指定した場合，Java仮想マシンのデフォルトのタイムゾーンのカレンダーが適用されます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.21　setDouble(int parameterIndex, double x)

(1)　機能

指定したdouble値を？パラメタ値に設定します。

(2)　形式

public synchronized void setDouble(int parameterIndex, double x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

double x：

？パラメタに設定する値を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.22　setFloat(int parameterIndex, float x)

(1)　機能

指定したfloat値を？パラメタ値に設定します。

(2)　形式

public synchronized void setFloat(int parameterIndex, float x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

float x：

？パラメタに設定する値を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.23　setInt(int parameterIndex, int x)

(1)　機能

指定したint値を？パラメタ値に設定します。

(2)　形式

public synchronized void setInt(int parameterIndex, int x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

int x：

？パラメタに設定する値を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.24　setLong(int parameterIndex, long x)

(1)　機能

指定したlong値を？パラメタ値に設定します。

(2)　形式

public synchronized void setLong(int parameterIndex, long x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

long x：

？パラメタに設定する値を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.25　setNull(int parameterIndex,int sqlType)

(1)　機能

指定した？パラメタにナル値を設定します。

(2)　形式

public synchronized void setNull(int parameterIndex,int sqlType) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

int sqlType：

JDBCのSQLデータ型を指定します。

この引数を指定しても無視されます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

8.5.26　setObject(int parameterIndex, Object x)

(1)　機能

指定したオブジェクトが持つ値を？パラメタ値に設定します。

(2)　形式

public synchronized void setObject(int parameterIndex, Object x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Object x：

？パラメタに設定する値を持つオブジェクトを指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.27　setObject(int parameterIndex, Object x, int targetSqlType)

(1)　機能

指定したオブジェクトが持つ値を？パラメタ値に設定します。

(2)　形式

public synchronized void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Object x：

？パラメタに設定する値を持つオブジェクトを指定します。

int targetSqlType：

JDBCのSQLデータ型を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

targetSqlTypeが次のどれかの場合

Types.ARRAY，Types.BLOB，Types.CLOB，Types.JAVA_OBJECT，Types.REF，Types.STRUCT

8.5.28　setObject(int parameterIndex, Object x, int targetSqlType, int scale)

(1)　機能

指定したオブジェクトが持つ値を？パラメタ値に設定します。

(2)　形式

public synchronized void setObject(int parameterIndex, Object x, int targetSqlType, int scale) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Object x：

？パラメタに設定する値を持つオブジェクトを指定します。

int targetSqlType：

JDBCのSQLデータ型を指定します。

int scale：

位取りを指定します。ただし，指定値は無視されます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

targetSqlTypeが次のどれかの場合

Types.ARRAY，Types.BLOB，Types.CLOB，Types.JAVA_OBJECT，Types.REF，Types.STRUCT

8.5.29　setShort(int parameterIndex, short x)

(1)　機能

指定したshort値を？パラメタ値に設定します。

(2)　形式

public synchronized void setShort(int parameterIndex, short x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

short x：

？パラメタに設定する値を指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.30　setString(int parameterIndex, String x)

(1)　機能

指定したStringオブジェクトを？パラメタ値に設定します。

(2)　形式

public synchronized void setString(int parameterIndex, String x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

String x：

？パラメタに設定する値を持つStringオブジェクトを指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

エンコードに失敗した場合

8.5.31　setTime(int parameterIndex, Time x)

(1)　機能

指定したjava.sql.Timeオブジェクトを？パラメタ値に設定します。

(2)　形式

public synchronized void setTime(int parameterIndex, Time x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Time x：

？パラメタに設定する値を持つjava.sql.Timeオブジェクトを指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.32　setTime(int parameterIndex, Time x, Calendar cal)

(1)　機能

ローカルタイムで指定したjava.sql.Timeオブジェクトを，指定したカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

(2)　形式

public synchronized void setTime(int parameterIndex, Time x, Calendar cal) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Time x：

？パラメタに設定する値を持つjava.sql.Timeオブジェクトを指定します。

Calendar cal：

データベースに格納する値のタイムゾーンが設定されたカレンダーを指定します。nullを指定した場合，Java仮想マシンのデフォルトのタイムゾーンのカレンダーが適用されます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.33　setTimestamp(int parameterIndex, Timestamp x)

(1)　機能

指定したjava.sql.Timestampオブジェクトを？パラメタ値に設定します。

(2)　形式

public synchronized void setTimestamp(int parameterIndex, Timestamp x) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Timestamp x：

？パラメタに設定する値を持つjava.sql.Timestampオブジェクトを指定します。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.34　setTimestamp(int parameterIndex, Timestamp x, Calendar cal)

(1)　機能

ローカルタイムで指定したjava.sql.Timestampオブジェクトを，指定したカレンダーのタイムゾーンの時間に変換し，？パラメタ値に設定します。

(2)　形式

public synchronized void setTimestamp(int parameterIndex, Timestamp x, Calendar cal) throws SQLException

(3)　引数

int parameterIndex：

？パラメタの番号を指定します。

Timestamp x：

？パラメタに設定する値を持つjava.sql.Timestampオブジェクトを指定します。

Calendar cal：

データベースに格納する値のタイムゾーンが設定されたカレンダーを指定します。nullを指定した場合，Java仮想マシンのデフォルトのタイムゾーンのカレンダーが適用されます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

PreparedStatementオブジェクトがクローズされている場合

このPreparedStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

存在しない？パラメタの番号を指定した場合

？パラメタのHADBのデータ型がこのメソッドでは設定できないデータ型の場合

指定した値が列のデータ型の範囲外，または変換できない形式の場合

8.5.35　PreparedStatementインタフェースに関する注意事項

PreparedStatementインタフェースはStatementインタフェースのサブインタフェースであるため，Statementインタフェースの注意事項はすべて該当します。

ここでは，それ以外のPreparedStatementインタフェース固有の注意事項について説明します。

(1)　？パラメタの設定

setXXXメソッドによってマッピングできるかどうかについては，「7.6.1　データ型のマッピング」の「(3)　？パラメタ設定時のマッピング」を参照してください。

setXXXメソッドに指定した列番号が存在しない場合は，SQLExceptionが投入されます。

setXXXメソッドに指定した値が，対応する？パラメタのデータ型が表現できる値の範囲を超えた場合，オーバフローが発生してSQLExceptionが投入されます。オーバフローが発生するおそれのあるsetXXXメソッドとHADBのデータ型の組み合わせについては，「7.6.3　オーバフローが発生したときの処理」を参照してください。

setXXXメソッドで設定した値は，次に示すどれかの操作をするまで有効になります。

該当するPreparedStatementオブジェクトに対して，clearParametersメソッドを実行する

該当するPreparedStatementオブジェクトに対して，setXXXメソッドを実行し，かつ設定対象の？パラメタは同じである

該当するPreparedStatementオブジェクトに対して，closeメソッドを実行する

(2)　HADBのDECIMAL型またはNUMERIC型の？パラメタに対する値指定

HADBのDECIMAL型またはNUMERIC型の？パラメタに対してsetXXXメソッドで値を設定する場合，？パラメタの精度および位取りと，値の精度および位取りが一致していないときの処理を次に示します。

実際の精度よりも大きいとき：SQLExceptionが投入されます。

実際の精度よりも小さいとき：拡張します。

実際の位取りよりも大きいとき：実際の位取りで切り捨てます。

実際の位取りよりも小さいとき：0で補完し拡張します。

(3)　HADBのTIME型およびTIMESTAMP型の？パラメタに対する値指定

小数秒精度が低いデータ型に小数秒精度が高いデータ型を指定した場合，差分の小数秒精度が切り捨てられます。逆に，小数秒精度が高いデータ型に小数秒精度が低いデータ型を指定した場合，差分の小数秒精度に0を補い拡張されます。

(4)　HADBのCHARまたはVARCHAR型の？パラメタに対する値指定

HADBのCHAR型またはVARCHAR型の？パラメタに対してsetXXXメソッドで値を指定する場合，？パラメタの定義長よりも値を文字列表現にしたときの長さが大きいと，SQLExceptionが投入されます。

(5)　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.Boolean

java.sql.Date

java.sql.Time

java.sql.Timestamp

8.6　ResultSetインタフェース

ここでは，ResultSetインタフェースで提供されているメソッドについて説明します。

8.6.1　ResultSetインタフェースのメソッド一覧

(1)　ResultSetインタフェースの主な機能

ResultSetインタフェースでは，主に次の機能が提供されています。

行単位の結果セット内の移動

結果データの返却

検索結果データがナル値かどうかの通知

(2)　HADBでサポートしているResultSetインタフェースのメソッド

HADBでサポートしているResultSetインタフェースのメソッドの一覧を次の表に示します。

表8‒19　ResultSetインタフェースのメソッドの一覧

項番

ResultSetインタフェースのメソッド

機能

1

absolute(int row)

ResultSetオブジェクト内の指定された行にカーソルを移動します。

2

afterLast()

ResultSetオブジェクト内の最終行の後ろにカーソルを移動します。

3

beforeFirst()

ResultSetオブジェクト内の先頭行の前にカーソルを移動します。

4

clearWarnings()

このResultSetオブジェクトに関して報告された，すべての警告をクリアします。

5

close()

ResultSetオブジェクトでオープンしていたカーソルをクローズし，JDBCリソースを解放します。

6

findColumn(String columnName)

指定した列名の列番号を返します。

7

first()

ResultSetオブジェクト内の先頭行にカーソルを移動します。

8

getArray(int columnIndex)

ResultSetオブジェクトの現在行の列（配列型）の値をArrayオブジェクトに取得します。

9

getArray(String columnName)

10

getAsciiStream(int columnIndex)

ResultSetオブジェクトの現在行の列の値をjava.io.InputStreamオブジェクトに取得します。

11

getAsciiStream(String columnName)

12

getBigDecimal(int columnIndex)

ResultSetオブジェクトの現在行の列の値をjava.math.BigDecimalオブジェクトに取得します。

13

getBigDecimal(String columnName)

14

getBinaryStream(int columnIndex)

ResultSetオブジェクトの現在行の列の値をjava.io.InputStreamオブジェクトに取得します。

15

getBinaryStream(String columnName)

16

getBoolean(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のbooleanで取得します。

17

getBoolean(String columnName)

18

getByte(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のbyteで取得します。

19

getByte(String columnName)

20

getBytes(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のbyte配列で取得します。

21

getBytes(String columnName)

22

getCharacterStream(int columnIndex)

ResultSetオブジェクトの現在行の列の値をjava.io.Readerオブジェクトに取得します。

23

getCharacterStream(String columnName)

24

getConcurrency()

このResultSetオブジェクトの並行処理モードを取得します。

25

getCursorName()

このResultSetオブジェクトが使用するSQLカーソルの名前を取得します。

26

getDate(int columnIndex)

ResultSetオブジェクトの現在行の列の値をjava.sql.Dateオブジェクトに取得します。

27

getDate(int columnIndex, Calendar cal)

28

getDate(String columnName)

29

getDate(String columnName, Calendar cal)

30

getDouble(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のdoubleで取得します。

31

getDouble(String columnName)

32

getFetchDirection()

このResultSetオブジェクトのフェッチ方向を取得します。

33

getFetchSize()

ResultSetオブジェクトのフェッチサイズを取得します。

34

getFloat(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のfloatで取得します。

35

getFloat(String columnName)

36

getHoldability()

このResultSetオブジェクトの保持機能の状態を表す値を取得します。

37

getInt(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のintで取得します。

38

getInt(String columnName)

39

getLong(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のlongで取得します。

40

getLong(String columnName)

41

getMetaData()

このResultSetオブジェクトのメタ情報を取得します。

42

getObject(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のObjectで取得します。

43

getObject(String columnName)

44

getObject(int columnIndex,Class<T> type)

ResultSetオブジェクトの現在行の列の値を取得し，指定されたクラスのJavaデータ型に変換します。

45

getObject(String columnLabel,Class<T> type)

46

getRow()

現在の行の番号を取得します。

47

getShort(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のshortで取得します。

48

getShort(String columnName)

49

getStatement()

このResultSetオブジェクトを生成したStatementオブジェクトを取得します。

50

getString(int columnIndex)

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のStringで取得します。

51

getString(String columnName)

52

getTime(int columnIndex)

ResultSetオブジェクトの現在行の列の値をjava.sql.Timeオブジェクトに取得します。

53

getTime(int columnIndex, Calendar cal)

54

getTime(String columnName)

55

getTime(String columnName, Calendar cal)

56

getTimestamp(int columnIndex)

ResultSetオブジェクトの現在行の列の値をjava.sql.Timestampオブジェクトに取得します。

57

getTimestamp(int columnIndex, Calendar cal)

58

getTimestamp(String columnName)

59

getTimestamp(String columnName, Calendar cal)

60

getType()

ResultSetオブジェクトの型を返します。

61

getWarnings()

このResultSetオブジェクトに関する呼び出しによって報告される，最初の警告を取得します。

62

isAfterLast()

ResultSetオブジェクトの最終行の後ろに，カーソルがあるかどうかの情報を取得します。

63

isBeforeFirst()

ResultSetオブジェクトの先頭行の前に，カーソルがあるかどうかの情報を取得します。

64

isClosed()

このResultSetオブジェクトがクローズされているかどうかを示す値を取得します。

65

isFirst()

ResultSetオブジェクトの先頭行に，カーソルがあるかどうかの情報を取得します。

66

isLast()

ResultSetオブジェクトの最終行に，カーソルがあるかどうかの情報を取得します。

67

last()

ResultSetオブジェクトの最終行に，カーソルを移動します。

68

next()

カーソルを次の行に移動します。

69

previous()

カーソルを1つ前の行に移動します。

70

relative(int rows)

カーソルを移動します。

71

setFetchDirection(int direction)

ResultSetオブジェクトのフェッチ方向を設定します。

72

setFetchSize(int rows)

ResultSetオブジェクトを検索する際のフェッチサイズ（フェッチする行数）を設定します。

73

wasNull()

最後に取得した列の値がナル値かどうかの情報を返します。

重要

この表に記載されていないメソッドは，HADBではサポートしていません。サポートしていないメソッドを実行すると，SQLExceptionが投入されることがあります。

(3)　必要なパッケージ名称とクラス名称

ResultSetインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbResultSet

8.6.2　absolute(int row)

(1)　機能

ResultSetオブジェクト内の指定された行にカーソルを移動します。

(2)　形式

public synchronized boolean absolute(int row) throws SQLException

(3)　引数

int row：

カーソルの移動先の行番号を指定します。正の番号を指定した場合，行番号は結果セットの先頭からカウントされます。負の番号を指定した場合，行番号は結果セットの終端からカウントされます。

(4)　戻り値

absoluteメソッドを呼び出したあとのカーソル位置が，先頭行の前または最終行の後ろの場合はfalseが，そうでない場合はtrueが返却されます。

absoluteメソッド実行時のカーソルの移動先と戻り値を次の表に示します。

表8‒20　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の値になります。

setLargeMaxRowsの値より実際の行数の方が多い場合は，setLargeMaxRowsの値になります。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

このResultSetオブジェクトの型がResultSet.TYPE_FORWARD_ONLYの場合

rowに0を指定した場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.3　afterLast()

(1)　機能

ResultSetオブジェクト内の最終行の後ろにカーソルを移動します。このメソッド実行時のカーソルの移動先を次の表に示します。

表8‒21　afterLastメソッド実行時のカーソルの移動先

結果集合の行数※

現在のカーソルの位置

カーソルの移動先

0

先頭行の前

先頭行の前のまま

n

先頭行の前

最終行の後ろ

1≦現在の行≦n

最終行の後ろ

最終行の後ろ

最終行の後ろのまま

注※

setMaxRowsの値より実際の行数の方が多い場合は，setMaxRowsの値になります。

setLargeMaxRowsの値より実際の行数の方が多い場合は，setLargeMaxRowsの値になります。

(2)　形式

public synchronized void afterLast() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

このResultSetオブジェクトの型がResultSet.TYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.4　beforeFirst()

(1)　機能

ResultSetオブジェクト内の先頭行の前にカーソルを移動します。このメソッド実行時のカーソルの移動先を次の表に示します。

表8‒22　beforeFirstメソッド実行時のカーソルの移動先

結果集合の行数※

現在のカーソルの位置

カーソルの移動先

0

先頭行の前

先頭行の前のまま

n

先頭行の前

先頭行の前のまま

1≦現在の行≦n

先頭行の前

最終行の後ろ

先頭行の前

注※

setMaxRowsの値より実際の行数の方が多い場合は，setMaxRowsの値になります。

setLargeMaxRowsの値より実際の行数の方が多い場合は，setLargeMaxRowsの値になります。

(2)　形式

public synchronized void beforeFirst() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

このResultSetオブジェクトの型がResultSet.TYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.5　clearWarnings()

(1)　機能

このResultSetオブジェクトに関して報告された，すべての警告をクリアします。

(2)　形式

public synchronized void clearWarnings() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

トランザクションの決着によってResultSetオブジェクトが無効になった場合，SQLExceptionが投入されます。

8.6.6　close()

(1)　機能

ResultSetオブジェクトでオープンしていたカーソルをクローズし，JDBCリソースを解放します。

(2)　形式

public synchronized void close() throws SQLException

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

データベースのアクセスエラーが発生した場合，SQLExceptionが投入されます。

8.6.7　findColumn(String columnName)

(1)　機能

指定した列名の列番号を返します。

(2)　形式

public synchronized int findColumn(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。この列名に対応する列番号が返却されます。

列名指定時の注意事項を次に示します。

大文字と小文字を区別しません。

指定した文字列すべてを列名として扱うため，文字列に二重引用符（"）が含まれている場合，二重引用符（"）も列名の一部として扱われます。

指定した列名が複数ある場合，列番号が小さい列が優先されます。

(4)　戻り値

指定した列名に対応する列番号が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

指定した列がない場合

columnNameにnullを指定するか，または長さ0の文字列を指定した場合

8.6.8　first()

(1)　機能

ResultSetオブジェクト内の先頭行にカーソルを移動します。

(2)　形式

public synchronized boolean first() throws SQLException

(3)　引数

なし。

(4)　戻り値

結果集合の行数が0の場合はfalseが，そうでない場合はtrueが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

このResultSetオブジェクトの型がResultSet.TYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.9　getArray(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値をArrayオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized Array getArray(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

検索結果を格納したArrayオブジェクトが返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒23　検索結果と戻り値の関係（getArrayメソッドの場合）

HADBのデータ型

検索結果

戻り値

ARRAY

列値がナル値の場合

null

上記以外

検索結果を格納したArrayオブジェクト

そのほか

該当しません

SQLExceptionが投入される

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.10　getArray(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値をArrayオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized Array getArray(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

検索結果を格納したArrayオブジェクトが返却されます。検索結果と戻り値の関係については，「表8‒23　検索結果と戻り値の関係（getArrayメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.11　getAsciiStream(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.io.InputStreamオブジェクトに取得します。値を取得する列は，引数で指定します。

なお，ASCII文字への変換は行いません。

(2)　形式

public synchronized InputStream getAsciiStream(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

検索結果を格納したjava.io.InputStreamオブジェクトが返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒24　検索結果と戻り値の関係（getAsciiStreamメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

BINARY

VARBINARY

ナル値

null

上記以外

検索結果を格納したjava.io.InputStreamオブジェクト

そのほか

該当しません

SQLExceptionが投入される

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.12　getAsciiStream(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.io.InputStreamオブジェクトに取得します。値を取得する列は，引数で指定します。

なお，ASCII文字への変換は行いません。

(2)　形式

public synchronized InputStream getAsciiStream(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

検索結果を格納したjava.io.InputStreamオブジェクトが返却されます。検索結果と戻り値の関係については，「表8‒24　検索結果と戻り値の関係（getAsciiStreamメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.13　getBigDecimal(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.math.BigDecimalオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized BigDecimal getBigDecimal(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

指定された列番号に対応する列値が返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒25　検索結果と戻り値の関係（getBigDecimalメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

null

[半角空白]整数の文字列表現，10進数の文字列表現，または浮動小数点数の文字列表現[半角空白]

検索結果を持つjava.math.BigDecimalオブジェクト（文字列の前後の半角空白を取り除いた値をjava.math.BigDecimalオブジェクトにします）

上記以外

SQLExceptionが投入される

SMALLINT

ナル値

null

上記以外

検索結果を持つjava.math.BigDecimalオブジェクト

INTEGER

ナル値

null

上記以外

検索結果を持つjava.math.BigDecimalオブジェクト

DECIMAL

NUMERIC

ナル値

null

上記以外

検索結果を持つjava.math.BigDecimalオブジェクト

DOUBLE PRECISION

FLOAT

ナル値

null

上記以外

検索結果を持つjava.math.BigDecimalオブジェクト

BOOLEAN※

ナル値

null

true

BigDecimal(1)でjava.math.BigDecimalオブジェクトにしたもの

false

BigDecimal(0)でjava.math.BigDecimalオブジェクトにしたもの

そのほか

該当しません

SQLExceptionが投入される

注※

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がBigDecimalとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.14　getBigDecimal(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.math.BigDecimalオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized BigDecimal getBigDecimal(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

指定された列名に対応する列値が返却されます。

検索結果と戻り値の関係については，「表8‒25　検索結果と戻り値の関係（getBigDecimalメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がBigDecimalとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.15　getBinaryStream(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.io.InputStreamオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized InputStream getBinaryStream(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

検索結果を格納したjava.io.InputStreamオブジェクトが返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒26　検索結果と戻り値の関係（getBinaryStreamメソッドの場合）

HADBのデータ型

検索結果

戻り値

BINARY

VARBINARY

ナル値

null

上記以外

検索結果を格納したjava.io.InputStreamオブジェクト

そのほか

該当しません

SQLExceptionが投入される

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.16　getBinaryStream(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.io.InputStreamオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized InputStream getBinaryStream(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

検索結果を格納したjava.io.InputStreamオブジェクトが返却されます。検索結果と戻り値の関係については，「表8‒26　検索結果と戻り値の関係（getBinaryStreamメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.17　getBoolean(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のbooleanで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized boolean getBoolean(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

trueまたはfalseが返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒27　検索結果と戻り値の関係（getBooleanメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

false

[半角空白]1[半角空白]

true

上記以外

false

SMALLINT

ナル値

false

0

false

上記以外

true

INTEGER

ナル値

false

0

false

上記以外

true

DECIMAL

NUMERIC

ナル値

false

0[.00…0]

false

上記以外

true

DOUBLE PRECISION

FLOAT

ナル値

false

0.0または-0.0

false

上記以外

true

BOOLEAN※

ナル値

false

ナル値以外

検索結果

そのほか

該当しません

SQLExceptionが投入される

注※

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.18　getBoolean(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のbooleanで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized boolean getBoolean(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

trueまたはfalseが返却されます。検索結果と戻り値の関係については，「表8‒27　検索結果と戻り値の関係（getBooleanメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.19　getByte(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のbyteで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized byte getByte(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒28　検索結果と戻り値の関係（getByteメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

0

[半角空白]整数の文字列表現，10進数の文字列表現，または浮動小数点数の文字列表現[半角空白]であり，かつByte.MIN_VALUE以上で，Byte.MAX_VALUE以下

検索結果をbyte値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現，または浮動小数点数の文字列表現[半角空白]であり，かつByte.MAX_VALUEより大きいか，Byte.MIN_VALUEより小さい

SQLExceptionが投入される

[半角空白][+]Infinity[半角空白]

[半角空白]-Infinity[半角空白]

[半角空白][+|-]NaN[半角空白]

上記以外

SMALLINT

ナル値

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

検索結果をbyte値にしたもの

上記以外

SQLExceptionが投入される

INTEGER

ナル値

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

検索結果をbyte値にしたもの

上記以外

SQLExceptionが投入される

DECIMAL

NUMERIC

ナル値

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

検索結果の整数部分の値をbyte値にしたもの

上記以外

SQLExceptionが投入される

DOUBLE PRECISION

FLOAT

ナル値

0

Byte.MIN_VALUE以上かつByte.MAX_VALUE以下

検索結果の整数部分の値をbyte値にしたもの

上記以外

SQLExceptionが投入される

BOOLEAN※

ナル値

0

true

1

false

0

そのほか

該当しません

SQLExceptionが投入される

注※

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がbyteとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.20　getByte(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のbyteで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized byte getByte(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒28　検索結果と戻り値の関係（getByteメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がbyteとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.21　getBytes(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のbyte配列で取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized byte[] getBytes(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒29　検索結果と戻り値の関係（getBytesメソッドの場合）

HADBのデータ型

検索結果

戻り値

BINARY

VARBINARY

ナル値

null

上記以外

検索結果をByte配列にしたもの

ROW

検索結果がナル値になることはありません

検索結果をByte配列にしたもの

そのほか

該当しません

SQLExceptionが投入される

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.22　getBytes(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のbyte配列で取得します。値を取得する列は，引数で指定します。

バイトはJDBCドライバによって返された行の値を表します。

(2)　形式

public synchronized byte[] getBytes(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒29　検索結果と戻り値の関係（getBytesメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.23　getCharacterStream(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.io.Readerオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized Reader getCharacterStream(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値を格納したjava.io.Readerオブジェクトが返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒30　検索結果と戻り値の関係（getCharacterStreamメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

BINARY

VARBINARY

ナル値

null

上記以外

検索結果を格納したjava.io.Readerオブジェクト

そのほか

該当しません

SQLExceptionが投入される

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

エンコードに失敗した場合

JDBCドライバ内でエラーが発生した場合

8.6.24　getCharacterStream(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.io.Readerオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized Reader getCharacterStream(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値を格納したjava.io.Readerオブジェクトが返却されます。検索結果と戻り値の関係については，「表8‒30　検索結果と戻り値の関係（getCharacterStreamメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

エンコードに失敗した場合

JDBCドライバ内でエラーが発生した場合

8.6.25　getConcurrency()

(1)　機能

このResultSetオブジェクトの並行処理モードを取得します。

(2)　形式

public synchronized int getConcurrency() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にResultSet.CONCUR_READ_ONLYが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.26　getCursorName()

(1)　機能

このResultSetオブジェクトが使用するSQLカーソルの名前を取得します。

(2)　形式

public synchronized String getCursorName() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に空の文字列が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.27　getDate(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Dateオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized java.sql.Date getDate(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値を格納したjava.sql.Dateオブジェクトが返却されます。検索結果と戻り値の関係を次の表に示します。

DATE型，TIME型，TIMESTAMP型，または文字列型（CHAR，VARCHAR）の変換については，「7.6.2　データの変換処理」の「(2)　getXXXメソッド実行時のデータ変換処理（DATE型，TIME型，TIMESTAMP型，または文字列型の場合）」を参照してください。

表8‒31　検索結果と戻り値の関係（getDateメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

null

[半角空白]日付形式※[半角空白]

検索結果の前後の半角空白を取り除きjava.sql.Dateオブジェクトにしたもの

上記以外

SQLExceptionが投入される

DATE

ナル値

null

上記以外

検索結果をjava.sql.Dateオブジェクトにしたもの

TIME

ナル値

null

上記以外

検索結果をjava.sql.Dateオブジェクトにしたもの

TIMESTAMP

ナル値

null

上記以外

検索結果をjava.sql.Dateオブジェクトにしたもの

そのほか

該当しません

SQLExceptionが投入される

注※

日付形式とは，'YYYY-MM-DD'で表される文字列表現のことです。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Dateとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.28　getDate(int columnIndex, Calendar cal)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Dateオブジェクトに取得します。値を取得する列は，引数で指定します。

このメソッドは，指定されたカレンダーを使って日付に適切なミリ秒値を作成します。

(2)　形式

public synchronized java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダーを指定します。

(4)　戻り値

列値を格納したjava.sql.Dateオブジェクトが返却されます。検索結果と戻り値の関係については，「表8‒31　検索結果と戻り値の関係（getDateメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Dateとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.29　getDate(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Dateオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized java.sql.Date getDate(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値を格納したjava.sql.Dateオブジェクトが返却されます。検索結果と戻り値の関係については，「表8‒31　検索結果と戻り値の関係（getDateメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Dateとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.30　getDate(String columnName, Calendar cal)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Dateオブジェクトに取得します。値を取得する列は，引数で指定します。

このメソッドは，指定されたカレンダーを使って日付に適切なミリ秒値を作成します。

(2)　形式

public synchronized java.sql.Date getDate(String columnName, Calendar cal) throws SQLException

(3)　引数

String columnName：

列名を指定します。

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダーを指定します。

(4)　戻り値

列値を格納したjava.sql.Dateオブジェクトが返却されます。検索結果と戻り値の関係については，「表8‒31　検索結果と戻り値の関係（getDateメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Dateとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.31　getDouble(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のdoubleで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized double getDouble(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒32　検索結果と戻り値の関係（getDoubleメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

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

ナル値

0.0

上記以外

検索結果をdouble値にしたもの

INTEGER

ナル値

0.0

上記以外

検索結果をdouble値にしたもの

DECIMAL

NUMERIC

ナル値

0.0

上記以外

検索結果をdouble値にしたもの

DOUBLE PRECISION

FLOAT

ナル値

0.0

上記以外

検索結果をdouble値にしたもの

BOOLEAN※

ナル値

0.0

true

1.0

false

0.0

そのほか

該当しません

SQLExceptionが投入される

注※

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がdoubleとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.32　getDouble(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のdoubleで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized double getDouble(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。

検索結果と戻り値の関係については，「表8‒32　検索結果と戻り値の関係（getDoubleメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がdoubleとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.33　getFetchDirection()

(1)　機能

このResultSetオブジェクトのフェッチ方向を取得します。

(2)　形式

public synchronized int getFetchDirection() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にResultSet.FETCH_FORWARDが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.34　getFetchSize()

(1)　機能

ResultSetオブジェクトのフェッチサイズを取得します。

(2)　形式

public synchronized int getFetchSize() throws SQLException

(3)　引数

なし。

(4)　戻り値

このResultSetオブジェクトの現在のフェッチサイズが返却されます。setFetchSizeメソッドで設定した値が返却されます。setFetchSizeメソッドで値を設定していない場合は0が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.35　getFloat(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のfloatで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized float getFloat(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒33　検索結果と戻り値の関係（getFloatメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

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

ナル値

0.0

上記以外

検索結果をfloat値にしたもの

INTEGER

ナル値

0.0

上記以外

検索結果をfloat値にしたもの

DECIMAL

NUMERIC

ナル値

0.0

上記以外

検索結果をfloat値にしたもの

DOUBLE PRECISION

FLOAT

ナル値

0.0

次のどちらか

-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

BOOLEAN※

ナル値

0.0

true

1.0

false

0.0

そのほか

該当しません

SQLExceptionが投入される

注※

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がfloatとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.36　getFloat(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のfloatで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized float getFloat(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。

検索結果と戻り値の関係については，「表8‒33　検索結果と戻り値の関係（getFloatメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がfloatとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.37　getHoldability()

(1)　機能

このResultSetオブジェクトの保持機能の状態を表す値を取得します。

(2)　形式

public synchronized int getHoldability() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にResultSet.HOLD_CURSORS_OVER_COMMITが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトを生成したConnectionオブジェクトがクローズされている場合

8.6.38　getInt(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のintで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized int getInt(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒34　検索結果と戻り値の関係（getIntメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

0

[半角空白]整数の文字列表現，10進数の文字列表現，または浮動小数点数の文字列表現[半角空白]であり，かつInteger.MIN_VALUE以上，Integer.MAX_VALUE以下

検索結果の整数部分の値をint値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現，または浮動小数点数の文字列表現[半角空白]であり，かつInteger.MAX_VALUEより大きいかInteger.MIN_VALUEより小さい

SQLExceptionが投入される

[半角空白]-Infinity[半角空白]

[半角空白][+]Infinity[半角空白]

[半角空白][+|-]NaN[半角空白]

上記以外（double値にできない）

SMALLINT

ナル値

0

上記以外

検索結果をint値にしたもの

INTEGER

ナル値

0

Integer.MIN_VALUE以上かつInteger.MAX_VALUE以下

検索結果をint値にしたもの

上記以外

SQLExceptionが投入される

DECIMAL

NUMERIC

ナル値

0

Integer.MIN_VALUE以上かつInteger.MAX_VALUE以下

検索結果の整数部分の値をint値にしたもの

上記以外

SQLExceptionが投入される

DOUBLE PRECISION

FLOAT

ナル値

0

Integer.MIN_VALUE以上かつInteger.MAX_VALUE以下

検索結果の整数部分の値をint値にしたもの

上記以外

SQLExceptionが投入される

BOOLEAN※

ナル値

0

true

1

false

0

そのほか

該当しません

SQLExceptionが投入される

注※

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がintとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.39　getInt(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のintで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized int getInt(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。

検索結果と戻り値の関係については，「表8‒34　検索結果と戻り値の関係（getIntメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がintとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.40　getLong(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のlongで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized long getLong(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒35　検索結果と戻り値の関係（getLongメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

0

[半角空白]整数の文字列表現，10進数の文字列表現，または浮動小数点の文字列表現[半角空白]であり，かつLong.MIN_VALUE以上，Long.MAX_VALUE以下

検索結果の整数部分の値をlong値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現，または浮動小数点の文字列表現[半角空白]であり，かつLong.MAX_VALUEより大きいかLong.MIN_VALUEより小さい

SQLExceptionが投入される

[半角空白]-Infinity[半角空白]

[半角空白][+]Infinity[半角空白]

[半角空白][+|-]NaN[半角空白]

上記以外（double値，またはBigDecimalオブジェクトにできない）

SMALLINT

ナル値

0

上記以外

検索結果をlong値にしたもの

INTEGER

ナル値

0

上記以外

検索結果をlong値にしたもの

DECIMAL

NUMERIC

ナル値

0

Long.MIN_VALUE以上かつLong.MAX_VALUE以下

検索結果の整数部分の値をlong値にしたもの

DOUBLE PRECISION

FLOAT

ナル値

0

Long.MIN_VALUE以上かつLong.MAX_VALUE以下

検索結果の整数部分の値をlong値にしたもの

上記以外

SQLExceptionが投入される

BOOLEAN※

ナル値

0

true

1

false

0

そのほか

該当しません

SQLExceptionが投入される

注※

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がlongとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.41　getLong(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のlongで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized long getLong(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。

検索結果と戻り値の関係については，「表8‒35　検索結果と戻り値の関係（getLongメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がlongとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.42　getMetaData()

(1)　機能

このResultSetオブジェクトのメタ情報を取得します。

(2)　形式

public synchronized ResultSetMetaData getMetaData() throws SQLException

(3)　引数

なし。

(4)　戻り値

このResultSetオブジェクトのメタ情報が，ResultSetMetaDataオブジェクトに格納されて返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.43　getObject(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のObjectで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized Object getObject(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値がJavaオブジェクトとして返却されます。

Javaオブジェクトの型は，JDBC仕様で指定されている組み込み型のマッピングに従って，列のSQL型に対応するデフォルトのJavaオブジェクトの型になります。

検索結果と戻り値の関係を次の表に示します。

表8‒36　検索結果と戻り値の関係（getObjectメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

null

上記以外

検索結果

SMALLINT

ナル値

null

上記以外

検索結果で生成したIntegerオブジェクト

INTEGER

ナル値

null

上記以外

検索結果で生成したLongオブジェクト

DECIMAL

NUMERIC

ナル値

null

上記以外

検索結果

DOUBLE PRECISION

FLOAT

ナル値

null

上記以外

検索結果で生成したDoubleオブジェクト

DATE

ナル値

null

上記以外

検索結果で生成したjava.sql.Dateオブジェクト

TIME

ナル値

null

上記以外

検索結果で生成したjava.sql.Timeオブジェクト

TIMESTAMP

ナル値

null

上記以外

検索結果で生成したjava.sql.Timestampオブジェクト

BINARY

VARBINARY

ナル値

null

上記以外

検索結果

ROW

ナル値以外※1

検索結果

BOOLEAN※2

ナル値

null

ナル値以外

検索結果で生成したBooleanオブジェクト

注※1

検索結果がナル値になることはありません。

注※2

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

JDBCドライバ内でエラーが発生した場合

8.6.44　getObject(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のObjectで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized Object getObject(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値がJavaオブジェクトとして返却されます。検索結果と戻り値の関係については，「表8‒36　検索結果と戻り値の関係（getObjectメソッドの場合）」を参照してください。

Javaオブジェクトの型は，JDBC仕様で指定されている組み込み型のマッピングに従って，列のSQL型に対応するデフォルトのJavaオブジェクトの型になります。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

JDBCドライバ内でエラーが発生した場合

8.6.45　getObject(int columnIndex,Class<T> type)

(1)　機能

ResultSetオブジェクトの現在行の列の値を取得し，指定されたクラスのJavaデータ型に変換します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized <T> T getObject(int columnIndex,Class<T> type) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

Class<T> type：

変換後のJavaデータ型を表すクラスを指定します。columnIndexで指定した列の値が，指定されたクラスのJavaデータ型に変換されます。

変換の組み合わせを次の表に示します。次の表に示す組み合わせ以外を指定した場合は，エラーになります。

表8‒37　HADBのデータ型とJavaデータ型の組み合わせ

HADBのデータ型

Javaデータ型(<T>の指定値)

CHAR

String

VARCHAR

SMALLINT

Integer

INTEGER

Long

DECIMAL

java.math.BigDecimal

NUMERIC

DOUBLE PRECISION

Double

FLOAT

DATE

java.sql.Date

TIME

java.sql.Time

TIMESTAMP

java.sql.Timestamp

BINARY

byte[]

VARBINARY

ROW

BOOLEAN※

Boolean

注※

DatabaseMetadataから生成されたResultsetオブジェクトの場合は，BOOLEAN型データが存在します。

(4)　戻り値

列の値が，「指定されたクラスのオブジェクト」として返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒38　検索結果と戻り値の関係（getObjectメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

null

上記以外

検索結果で生成したStringオブジェクト

SMALLINT

ナル値

null

上記以外

検索結果で生成したIntegerオブジェクト

INTEGER

ナル値

null

上記以外

検索結果で生成したLongオブジェクト

DECIMAL

NUMERIC

ナル値

null

上記以外

検索結果で生成したjava.math.BigDecimalオブジェクト

DOUBLE PRECISION

FLOAT

ナル値

null

上記以外

検索結果で生成したDoubleオブジェクト

DATE

ナル値

null

上記以外

検索結果で生成したjava.sql.Dateオブジェクト

TIME

ナル値

null

上記以外

検索結果で生成したjava.sql.Timeオブジェクト

TIMESTAMP

ナル値

null

上記以外

検索結果で生成したjava.sql.Timestampオブジェクト

BINARY

VARBINARY

ナル値

null

上記以外

検索結果

ROW

ナル値以外※1

検索結果

BOOLEAN※2

ナル値

null

上記以外

検索結果で生成したBooleanオブジェクト

注※1

検索結果がナル値になることはありません。

注※2

DatabaseMetadataから生成されたResultsetオブジェクトの場合は，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

JDBCドライバ内でエラーが発生した場合

typeにnullを指定した場合

typeに指定できる組み合わせ以外の値を指定した場合

8.6.46　getObject(String columnLabel,Class<T> type)

(1)　機能

ResultSetオブジェクトの現在行の列の値を取得し，指定されたクラスのJavaデータ型に変換します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized <T> T getObject(String columnLabel,Class<T> type) throws SQLException

(3)　引数

String columnLabel：

列名を指定します。

Class<T> type：

変換後のJavaデータ型を表すクラスを指定します。columnLabelで指定した列の値が，指定されたクラスのJavaデータ型に変換されます。

変換の組み合わせを「表8‒37　HADBのデータ型とJavaデータ型の組み合わせ」に示します。「表8‒37　HADBのデータ型とJavaデータ型の組み合わせ」に示す組み合わせ以外を指定した場合は，エラーになります。

(4)　戻り値

列の値が，「指定されたクラスのオブジェクト」として返却されます。検索結果と戻り値の関係については，「表8‒38　検索結果と戻り値の関係（getObjectメソッドの場合）」を参照してください。

(5)　発生する例外

発生する例外については，「8.6.45　getObject(int columnIndex,Class<T> type)」の「(5)　発生する例外」を参照してください。

8.6.47　getRow()

(1)　機能

現在の行の番号を取得します。最初の行は1になり，2番目は2になります。先頭行の前または最終行の後ろの場合は0になります。

(2)　形式

public synchronized int getRow() throws SQLException

(3)　引数

なし。

(4)　戻り値

現在の行番号が返却されます。現在の行がInteger.MAX_VALUEより大きい場合は，Integer.MAX_VALUEが返却されます。

また，最大検索行数が2,147,483,647を超える場合は，2,147,483,647が返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.48　getShort(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のshortで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized short getShort(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒39　検索結果と戻り値の関係（getShortメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

0

[半角空白]整数の文字列表現，10進数の文字列表現，または浮動小数点数の文字列表現[半角空白]であり，かつShort.MIN_VALUE以上，Short.MAX_VALUE以下

検索結果の整数部分の値をshort値にしたもの

[半角空白]整数の文字列表現，10進数の文字列表現，または浮動小数点数の文字列表現[半角空白]であり，かつShort.MAX_VALUEより大きいかShort.MIN_VALUEより小さい

SQLExceptionが投入される

[半角空白]-Infinity[半角空白]

[半角空白][+]Infinity[半角空白]

[半角空白][+|-]NaN[半角空白]

上記以外（double値にできない）

SMALLINT

ナル値

0

Short.MIN_VALUE以上かつShort.MAX_VALUE以下

検索結果をshort値にしたもの

上記以外

SQLExceptionが投入される

INTEGER

ナル値

0

Short.MIN_VALUE以上かつShort.MAX_VALUE以下

検索結果をshort値にしたもの

上記以外

SQLExceptionが投入される

DECIMAL

NUMERIC

ナル値

0

Short.MIN_VALUE以上かつShort.MAX_VALUE以下

検索結果の整数部分の値をshort値にしたもの

上記以外

SQLExceptionが投入される

DOUBLE PRECISION

FLOAT

ナル値

0

Short.MIN_VALUE以上かつShort.MAX_VALUE以下

検索結果の整数部分の値をshort値にしたもの

上記以外

SQLExceptionが投入される

BOOLEAN※

ナル値

0

true

1

false

0

そのほか

該当しません

SQLExceptionが投入される

注※

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がshortとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.49　getShort(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のshortで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized short getShort(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒39　検索結果と戻り値の関係（getShortメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がshortとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.50　getStatement()

(1)　機能

このResultSetオブジェクトを生成したStatementオブジェクトを取得します。

(2)　形式

public synchronized Statement getStatement() throws SQLException

(3)　引数

なし。

(4)　戻り値

ResultSetオブジェクトを生成したStatementオブジェクトが返却されます。結果集合がDatabaseMetaDataインタフェースのメソッドで生成された場合は，nullが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.51　getString(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のStringで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized String getString(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

表8‒40　検索結果と戻り値の関係（getStringメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

null

上記以外

検索結果

SMALLINT

ナル値

null

上記以外

検索結果を文字列表現にしたStringオブジェクト

INTEGER

ナル値

null

上記以外

検索結果を文字列表現にしたStringオブジェクト

DECIMAL

NUMERIC

ナル値

null

上記以外

検索結果を文字列表現にしたStringオブジェクト

DOUBLE PRECISION

FLOAT

ナル値

null

上記以外

検索結果を文字列表現にしたStringオブジェクト

DATE

ナル値

null

上記以外

YYYY-MM-DD形式の文字列のStringオブジェクト

TIME

ナル値

null

上記以外

hh:mm:ss[.f...]形式の文字列のStringオブジェクト

TIMESTAMP

ナル値

null

上記以外

YYYY-MM-DD△hh:mm:ss[.f...]形式（△は半角空白）の文字列のStringオブジェクト

BINARY

VARBINARY

ナル値

null

上記以外

検索結果

BOOLEAN※

ナル値

null

true

文字列"true"のStringオブジェクト

false

文字列"false"のStringオブジェクト

注※

DatabaseMetadataから生成したResultsetオブジェクトの場合，BOOLEAN型データが存在します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

エンコードに失敗した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.52　getString(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値を，Javaプログラミング言語のStringで取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized String getString(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒40　検索結果と戻り値の関係（getStringメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

エンコードに失敗した場合

このメソッドでは取得できないデータ型の場合

JDBCドライバ内でエラーが発生した場合

8.6.53　getTime(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Timeオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized java.sql.Time getTime(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

DATE型，TIME型，TIMESTAMP型，または文字列型（CHAR，VARCHAR）の変換については，「7.6.2　データの変換処理」の「(2)　getXXXメソッド実行時のデータ変換処理（DATE型，TIME型，TIMESTAMP型，または文字列型の場合）」を参照してください。

表8‒41　検索結果と戻り値の関係（getTimeメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

null

[半角空白]時刻形式※[半角空白]

検索結果の前後の半角空白を取り除きjava.sql.Timeオブジェクトにしたもの

上記以外

SQLExceptionが投入される

TIME

ナル値

null

上記以外

検索結果をjava.sql.Timeオブジェクトにしたもの

TIMESTAMP

ナル値

null

上記以外

検索結果をjava.sql.Timeオブジェクトにしたもの

そのほか

該当しません

SQLExceptionが投入される

注※

時刻形式とは，'hh:mm:ss[.f...]'で表される文字列表現のことです。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timeとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.54　getTime(int columnIndex, Calendar cal)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Timeオブジェクトに取得します。値を取得する列は，引数で指定します。

このメソッドは，指定されたカレンダーを使って時刻に適切なミリ秒値を作成します。

(2)　形式

public synchronized java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダーを指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒41　検索結果と戻り値の関係（getTimeメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timeとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.55　getTime(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Timeオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized java.sql.Time getTime(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒41　検索結果と戻り値の関係（getTimeメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timeとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.56　getTime(String columnName, Calendar cal)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Timeオブジェクトに取得します。値を取得する列は，引数で指定します。

このメソッドは，指定されたカレンダーを使って時刻に適切なミリ秒値を作成します。

(2)　形式

public synchronized java.sql.Time getTime(String columnName, Calendar cal) throws SQLException

(3)　引数

String columnName：

列名を指定します。

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダーを指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒41　検索結果と戻り値の関係（getTimeメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timeとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.57　getTimestamp(int columnIndex)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Timestampオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係を次の表に示します。

DATE型，TIME型，TIMESTAMP型または文字列型（CHAR，VARCHAR）の変換については，「7.6.2　データの変換処理」の「(2)　getXXXメソッド実行時のデータ変換処理（DATE型，TIME型，TIMESTAMP型，または文字列型の場合）」を参照してください。

表8‒42　検索結果と戻り値の関係（getTimestampメソッドの場合）

HADBのデータ型

検索結果

戻り値

CHAR

VARCHAR

ナル値

null

[半角空白]時刻印形式※[半角空白]

検索結果の前後の半角空白を取り除きjava.sql.Timestampオブジェクトにしたもの

上記以外

SQLExceptionが投入される

DATE

ナル値

null

上記以外

検索結果をjava.sql.Timestampオブジェクトにしたもの

TIME

ナル値

null

上記以外

検索結果をjava.sql.Timestampオブジェクトにしたもの

TIMESTAMP

ナル値

null

上記以外

検索結果をjava.sql.Timestampオブジェクトにしたもの

そのほか

該当しません

SQLExceptionが投入される

注※

時刻印形式とは，'YYYY-MM-DD hh:mm:ss[.f...]'で表される文字列表現のことです。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timestampとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.58　getTimestamp(int columnIndex, Calendar cal)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Timestampオブジェクトに取得します。値を取得する列は，引数で指定します。

このメソッドは，指定されたカレンダーを使ってタイムスタンプに適切なミリ秒値を作成します。

(2)　形式

public synchronized java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException

(3)　引数

int columnIndex：

列番号を指定します。

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダーを指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒42　検索結果と戻り値の関係（getTimestampメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列番号を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timestampとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.59　getTimestamp(String columnName)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Timestampオブジェクトに取得します。値を取得する列は，引数で指定します。

(2)　形式

public synchronized java.sql.Timestamp getTimestamp(String columnName) throws SQLException

(3)　引数

String columnName：

列名を指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒42　検索結果と戻り値の関係（getTimestampメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timestampとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.60　getTimestamp(String columnName, Calendar cal)

(1)　機能

ResultSetオブジェクトの現在行の列の値をjava.sql.Timestampオブジェクトに取得します。値を取得する列は，引数で指定します。

このメソッドは，指定されたカレンダーを使ってタイムスタンプに適切なミリ秒値を作成します。

(2)　形式

public synchronized java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException

(3)　引数

String columnName：

列名を指定します。

Calendar cal：

データベースに格納されている値のタイムゾーンが設定されたカレンダーを指定します。

(4)　戻り値

列値が返却されます。検索結果と戻り値の関係については，「表8‒42　検索結果と戻り値の関係（getTimestampメソッドの場合）」を参照してください。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

存在しない列名を指定した場合

このメソッドでは取得できないデータ型の場合

列の値がjava.sql.Timestampとして取得できない場合

JDBCドライバ内でエラーが発生した場合

8.6.61　getType()

(1)　機能

ResultSetオブジェクトの型を返します。

(2)　形式

public synchronized int getType() throws SQLException

(3)　引数

なし。

(4)　戻り値

次に示すどちらかの値が返却されます。

ResultSet.TYPE_FORWARD_ONLY：

カーソルが順方向にだけ移動できます。

ResultSet.TYPE_SCROLL_INSENSITIVE：

カーソルがスクロールできますが，値の変更は反映されません。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.62　getWarnings()

(1)　機能

このResultSetオブジェクトに関する呼び出しによって報告される，最初の警告を取得します。2つ以上の警告がある場合，後続の警告は最初の警告にチェーンされ，直前に取得された警告のSQLWarningオブジェクトのgetNextWarningメソッドを呼び出すことによって取得されます。

(2)　形式

public synchronized SQLWarning getWarnings() throws SQLException

(3)　引数

なし。

(4)　戻り値

最初のSQLWarningオブジェクトが返却されます。SQLWarningオブジェクトがない場合はnullが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.63　isAfterLast()

(1)　機能

ResultSetオブジェクトの最終行の後ろに，カーソルがあるかどうかの情報を取得します。

(2)　形式

public synchronized boolean isAfterLast() throws SQLException

(3)　引数

なし。

(4)　戻り値

カーソルが最終行の後ろにある場合は，trueが返却されます。最終行の後ろにない場合，または結果集合の行数が0行の場合は，falseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.64　isBeforeFirst()

(1)　機能

ResultSetオブジェクトの先頭行の前に，カーソルがあるかどうかの情報を取得します。

(2)　形式

public synchronized boolean isBeforeFirst() throws SQLException

(3)　引数

なし。

(4)　戻り値

カーソルが先頭行の前にある場合は，trueが返却されます。先頭行の前にない場合，または結果集合の行数が0行の場合は，falseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.65　isClosed()

(1)　機能

このResultSetオブジェクトがクローズされているかどうかを示す値を取得します。

closeメソッドを実行したあとに，このメソッドが実行された場合にだけ，trueを返却することを保証します。

(2)　形式

public synchronized boolean isClosed() throws SQLException

(3)　引数

なし。

(4)　戻り値

このResultSetオブジェクトがクローズされている場合は，trueが返却されます。ResultSetオブジェクトがクローズされていない場合は，falseが返却されます。

(5)　発生する例外

なし。

8.6.66　isFirst()

(1)　機能

ResultSetオブジェクトの先頭行に，カーソルがあるかどうかの情報を取得します。

(2)　形式

public synchronized boolean isFirst() throws SQLException

(3)　引数

なし。

(4)　戻り値

カーソルが先頭行にある場合はtrueが，そうでない場合はfalseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.67　isLast()

(1)　機能

ResultSetオブジェクトの最終行に，カーソルがあるかどうかの情報を取得します。

(2)　形式

public synchronized boolean isLast() throws SQLException

(3)　引数

なし。

(4)　戻り値

カーソルが最終行にある場合はtrueが，そうでない場合はfalseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.68　last()

(1)　機能

ResultSetオブジェクトの最終行に，カーソルを移動します。

(2)　形式

public synchronized boolean last() throws SQLException

(3)　引数

なし。

(4)　戻り値

カーソルが最終行に移動した場合はtrueが，結果集合の行数が0の場合はfalseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

このResultSetオブジェクトの型がResultSet.TYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.69　next()

(1)　機能

カーソルを次の行に移動します。カーソルが先頭行の前にある場合は先頭行に，最終行にある場合は最終行の後ろに移動します。

(2)　形式

public synchronized boolean next() throws SQLException

(3)　引数

なし。

(4)　戻り値

このメソッドを実行したことによって，カーソルの位置が先頭行の前または最終行の後ろに移動した場合はfalseが，そうでない場合はtrueが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.70　previous()

(1)　機能

カーソルを1つ前の行に移動します。

(2)　形式

public synchronized boolean previous() throws SQLException

(3)　引数

なし。

(4)　戻り値

このメソッドを実行したことによって，カーソルの位置が先頭行の前に移動した場合はfalseが，そうでない場合はtrueが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

このResultSetオブジェクトの型がResultSet.TYPE_FORWARD_ONLYの場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.71　relative(int rows)

(1)　機能

カーソルを移動します。

(2)　形式

public synchronized boolean relative(int rows) throws SQLException

(3)　引数

int rows：

カーソルの移動行数（現在の行から移動する行数）を指定します。

正の値を指定した場合，カーソルは順方向に移動します。負の値を指定した場合は逆方向に移動します。

(4)　戻り値

このメソッドを実行したことによって，カーソルの位置が先頭行の前または最終行の後ろに移動した場合はfalseが，そうでない場合はtrueが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

このResultSetオブジェクトの型がResultSet.TYPE_FORWARD_ONLYの場合

現在の位置が取得できない場合

現在のカーソル位置が有効な行にない場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

データベースのアクセスエラーが発生した場合

8.6.72　setFetchDirection(int direction)

(1)　機能

ResultSetオブジェクトのフェッチ方向を設定します。

(2)　形式

public synchronized void setFetchDirection(int direction) throws SQLException

(3)　引数

int direction：

フェッチ方向を指定します。

ResultSet.FETCH_FORWARDだけを指定できます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

directionにResultSet.FETCH_FORWARD以外が指定された場合

8.6.73　setFetchSize(int rows)

(1)　機能

ResultSetオブジェクトを検索する際のフェッチサイズ（フェッチする行数）を設定します。

(2)　形式

public synchronized void setFetchSize(int rows) throws SQLException

(3)　引数

int rows：

フェッチする行数を0〜65,535の範囲で指定します。

0を指定した場合は，システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_clt_fetch_sizeの値を基に検索が実施されます。

このメソッドを実行しない場合，Statementオブジェクトに指定した行数値を基に検索が実施されます。Statementオブジェクトに行数値を指定していない，またはStatementオブジェクトから生成したResultSetオブジェクトではない場合は，プロパティのadb_clt_fetch_sizeの値を基に検索が実施されます。

(4)　戻り値

なし。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

rowsに0〜65,535以外の値を指定した場合

rowsに指定した値が，最大格納行数（このResultSetオブジェクトを生成したStatementオブジェクトのsetMaxRowsメソッドの設定値）よりも大きい場合

rowsに指定した値が，最大格納行数（このResultSetオブジェクトを生成したStatementオブジェクトのsetMaxLargeRowsメソッドの設定値）よりも大きい場合

(6)　留意事項

留意事項については，「8.4.37　setFetchSize(int rows)」の「(6)　留意事項」を参照してください。

8.6.74　wasNull()

(1)　機能

最後に取得した列の値がナル値かどうかの情報を返します。

(2)　形式

public synchronized boolean wasNull() throws SQLException

(3)　引数

なし。

(4)　戻り値

最後に取得した列の値がナル値の場合はtrueが，そうでない場合はfalseが返却されます。

getXXXメソッドによって列の値を取得する前は，falseが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このResultSetオブジェクトがクローズされている場合

このResultSetオブジェクトを生成したStatementオブジェクトがクローズされたことによって，ResultSetオブジェクトがクローズされた場合も含みます。

このResultSetオブジェクトを生成したStatementオブジェクトを作成したConnectionがクローズされている場合

トランザクションの決着によってResultSetオブジェクトが無効になった場合

8.6.75　ResultSetインタフェースでサポートしているフィールド

ResultSetインタフェースでサポートしているフィールドを次の表に示します。

表8‒43　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

この値が指定された場合，TYPE_SCROLL_INSENSITIVEが指定されたと仮定されます。

public static final int CONCUR_READ_ONLY

−

public static final int CONCUR_UPDATABLE

この値が指定された場合，CONCUR_READ_ONLYが指定されたと仮定されます。

public static final int HOLD_CURSORS_OVER_COMMIT

この値が指定された場合でも，トランザクションが決着すると，ResultSetオブジェクトが無効になることがあります。

public static final int CLOSE_CURSORS_AT_COMMIT

この値が指定された場合，HOLD_CURSORS_OVER_COMMITが指定されたと仮定されます。

（凡例）−：特にありません。

8.6.76　ResultSetインタフェースに関する注意事項

(1)　getXXXメソッドによる値の取得

getXXXメソッドによってマッピングできるかどうかについては，「7.6.1　データ型のマッピング」の「(2)　検索データ取得時のマッピング」を参照してください。

getXXXメソッドに指定した列番号または列名称が存在しない場合は，SQLExceptionが投入されます。

getXXXメソッドに指定する値が，実際の値を表現できない場合（例：INTEGER型の40,000という値をgetShortで取得する場合），オーバフローによってSQLExceptionが投入されます。オーバフローが発生するおそれがあるgetXXXメソッドとHADBのデータ型の組み合わせについては，「7.6.3　オーバフローが発生したときの処理」を参照してください。

(2)　データマッピング（変換）

検索データ取得時に使用するgetXXXメソッドによってマッピングできるかどうかについては，「7.6.1　データ型のマッピング」の「(2)　検索データ取得時のマッピング」を参照してください。マッピングできないJDBCのSQLデータ型に対してgetXXXメソッドが呼び出された場合，SQLExceptionが投入されます。

(3)　結果セットタイプが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ドライバは，検索結果中の値ごとにメモリオブジェクトを割り当てて蓄積します。値が可変長である場合，メモリオブジェクトは検索データの実サイズに合わせた大きさとなります。

(4)　next，absolute，relative，last，およびafterLastメソッド

nextメソッドを実行すると，JDBCドライバは次の表に示すようにデータベースからデータを取得，蓄積します。

表8‒44　nextメソッド実行時の，データベースからのデータの取得，蓄積

状態

結果セットタイプ

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE，

またはResultSet.TYPE_SCROLL_SENSITIVE

nextメソッドで移動した現在行のデータをJDBCドライバ内に読み込んでいない

遷移した現在行を接続先のデータベースから取得します。

遷移した現在行をデータベースから取得し，JDBCドライバのメモリに読み込み，蓄積します。

nextメソッドで移動した現在行のデータをJDBCドライバ内に読み込んでいる

データベースからデータを取得しません。

absolute，relative，last，およびafterLastメソッドを実行すると，JDBCドライバは次の表に示すようにデータベースからデータを取得，蓄積します。

表8‒45　absolute，relative，last，およびafterLastメソッド実行時の，データベースからのデータの取得，蓄積

状態

結果セットタイプが

ResultSet.TYPE_SCROLL_INSENSITIVE，

またはResultSet.TYPE_SCROLL_SENSITIVE

検索結果の先頭行から指定行※までに，JDBCドライバが読み込んでいないデータがある

読み込んでいない行をデータベースから取得し，JDBCドライバのメモリに蓄積します。

検索結果の先頭行から指定行※まで，JDBCドライバはデータを読み込んでいる

データベースからデータを取得しません。

注

結果セットタイプがResultSet.TYPE_FORWARD_ONLYの場合，SQLExceptionが投入されます。

注※

lastメソッドおよびafterLastメソッドの場合，先頭行から最終行になります。

(5)　getAsciiStreamおよびgetCharacterStreamメソッドに関する注意事項

getAsciiStreamおよびgetCharacterStreamメソッドによって返却されたオブジェクトは，JDBCドライバが暗黙的にクローズすることはありません。メソッドの呼び出し側でcloseメソッドを実行してください。

(6)　検索結果行数の上限

ResultSetオブジェクトがHADBサーバから取得できる検索結果の行数を次の表に示します。次の表に示す行以上の検索結果は，JDBCドライバが破棄します。

表8‒46　ResultSetオブジェクトがHADBサーバから取得できる検索結果の行数

ResultSetオブジェクト

結果セットタイプ

ResultSet.TYPE_SCROLL_INSENSITIVE

左記以外

次のメソッドを実行したStatementオブジェクトから生成したResultSetオブジェクト

setMaxRows

setLargeMaxRows

検索結果行数は，次のメソッドで指定した行数です。

setMaxRows

setLargeMaxRows

setLargeMaxRowsメソッドでInteger.MAX_VALUEを超える値を指定した場合でも，上限値はInteger.MAX_VALUEです。

検索結果行数は，次のメソッドで指定した行数です。

setMaxRows

setLargeMaxRows

上記以外のResultSetオブジェクト

上限値はInteger.MAX_VALUEです。

上限はありません。

8.7　DatabaseMetaDataインタフェース

ここでは，DatabaseMetaDataインタフェースで提供されているメソッドについて説明します。

8.7.1　DatabaseMetaDataインタフェースのメソッド一覧

(1)　DatabaseMetaDataインタフェースの主な機能

DatabaseMetaDataインタフェースでは，主に次の機能が提供されています。

接続先のデータベースに関する各種情報の返却

表一覧，列一覧などの一覧情報の返却（ResultSet（結果セット）に格納）

(2)　HADBでサポートしているDatabaseMetaDataインタフェースのメソッド

HADBでサポートしているDatabaseMetaDataインタフェースのメソッドの一覧を次の表に示します。

表8‒47　DatabaseMetaDataインタフェースのメソッドの一覧

項番

DatabaseMetaDataインタフェースのメソッド

機能

1

allProceduresAreCallable()

getProceduresメソッドによって返されるすべてのプロシジャが，現在のHADBユーザから呼び出せるかどうかを取得します。

2

allTablesAreSelectable()

getTablesメソッドによって返されるすべての表が，現在のHADBユーザによって使用できるかどうかを取得します。

3

autoCommitFailureClosesAllResultSets()

自動コミットモード有効時にSQLExceptionが発生した場合，すべてのオープンされたResultSetがクローズされるかどうかを返却します。

4

dataDefinitionCausesTransactionCommit()

トランザクションのデータ定義文が，トランザクションを強制的にコミットさせるかどうかを取得します。

5

dataDefinitionIgnoredInTransactions()

トランザクションでデータ定義文が無視されるかどうかを取得します。

6

deletesAreDetected(int type)

ResultSetクラスのrowDeletedメソッドを呼び出すことによって可視の行が削除されたことを検出できるかどうかを取得します。

7

doesMaxRowSizeIncludeBlobs()

getMaxRowSizeメソッドの戻り値がSQLデータの型のLONGVARCHARおよびLONGVARBINARYを含むかどうかを取得します。

8

generatedKeyAlwaysReturned()

自動生成キーの列として指定された列名またはインデクスが有効であり，かつ文が成功した場合に，生成されたキーが常に返されるかどうかを取得します。

9

getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern)

指定されたスキーマおよびカタログで使用可能なユーザ定義の型 (UDT)のための指定された型の指定された属性に関する記述を取得します。

10

getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable)

行を一意に識別する表の最適な列セットに関する記述を取得します。

11

getCatalogs()

カタログ名を取得します。

12

getCatalogSeparator()

カタログ名と表名のセパレータを取得します。

13

getCatalogTerm()

catalogに対する推奨用語を取得します。

14

getClientInfoProperties()

ドライバがサポートするクライアント情報プロパティのリストを返却します。

15

getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern)

表の列へのアクセス権に関する記述を取得します。

16

getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)

表の列情報を取得します。

17

getConnection()

このDatabaseMetaDataインスタンスを生成したConnectionインスタンスを取得します。

18

getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable)

指定された参照表と指定された被参照表とのクロスリファレンス情報を取得します。

19

getDatabaseMajorVersion()

データベース（HADBサーバ）のメジャーバージョンを取得します。

20

getDatabaseMinorVersion()

データベース（HADBサーバ）のマイナーバージョンを取得します。

21

getDatabaseProductName()

接続するデータベース（HADBサーバ）の製品名称を取得します。

22

getDatabaseProductVersion()

接続するデータベース（HADBサーバ）のバージョンを取得します。

23

getDefaultTransactionIsolation()

このデータベースのデフォルトのトランザクション隔離性水準を取得します。

24

getDriverMajorVersion()

JDBCドライバのメジャーバージョンを取得します。

25

getDriverMinorVersion()

JDBCドライバのマイナーバージョンを取得します。

26

getDriverName()

JDBCドライバの名前を取得します。

27

getDriverVersion()

JDBCドライバのバージョンを取得します。

28

getExportedKeys(String catalog, String schema, String table)

参照表の外部キーに関する情報を取得します。

29

getExtraNameCharacters()

二重引用符（"）で囲まれていない識別名に使用できるすべての特殊文字を取得します。

30

getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern)

関数のパラメタおよび返される型に関する情報を返却します。

31

getFunctions(String catalog, String schemaPattern, String functionNamePattern)

関数に関する情報を返却します。

32

getIdentifierQuoteString()

SQL識別子を引用するのに使用する文字列を取得します。

33

getImportedKeys(String catalog, String schema, String table)

被参照表の主キーに関する情報を取得します。

34

getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)

インデクスに関する情報を取得します。

35

getJDBCMajorVersion()

ドライバのJDBCメジャーバージョンを取得します。

36

getJDBCMinorVersion()

ドライバのJDBCマイナーバージョンを取得します。

37

getMaxBinaryLiteralLength()

バイナリリテラル中に入れることができる16進数の最大文字数を取得します。

38

getMaxCatalogNameLength()

カタログ名の最大文字数を取得します。

39

getMaxCharLiteralLength()

文字データとして指定できる最大文字数を取得します。

40

getMaxColumnNameLength()

列名に指定できる最大文字数を取得します。

41

getMaxColumnsInGroupBy()

GROUP BY句中に指定できるグループ化列の数の最大値を取得します。

42

getMaxColumnsInIndex()

インデクス構成列数の最大値を取得します。

43

getMaxColumnsInOrderBy()

ORDER BY句中に指定できる列数の最大値を取得します。

44

getMaxColumnsInSelect()

選択リストに指定できる選択式の最大数を取得します。

45

getMaxColumnsInTable()

表に定義できる列数の最大値を取得します。

46

getMaxConnections()

同時にHADBサーバに接続できるHADBクライアントの最大数を取得します。

47

getMaxCursorNameLength()

カーソル名の最大文字数を取得します。

48

getMaxIndexLength()

インデクスのキー長の最大値を取得します。

49

getMaxLogicalLobSize()

このデータベースで，LOBの論理サイズとして許容される最大バイト数を取得します。

50

getMaxProcedureNameLength()

プロシジャ名の最大文字数を取得します。

51

getMaxRowSize()

1行の最大バイト数を取得します。

52

getMaxSchemaNameLength()

スキーマ名の最大文字数を取得します。

53

getMaxStatementLength()

SQL文に指定できる文字列長の最大値を取得します。

54

getMaxStatements()

同時実行できるSQL文の最大数を取得します。

55

getMaxTableNameLength()

表名に指定できる最大文字数を取得します。

56

getMaxTablesInSelect()

SELECT文中に指定できる表数の最大値を取得します。

57

getMaxUserNameLength()

認可識別子の最大文字数を取得します。

58

getNumericFunctions()

使用できる数学関数をコンマで区切ったリストで取得します。

59

getPrimaryKeys(String catalog, String schema, String table)

指定された表の主キー列の記述を取得します。

60

getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern)

ストアドプロシジャパラメタに関する記述を取得します。

61

getProcedures(String catalog, String schemaPattern, String procedureNamePattern)

ストアドプロシジャに関する記述を取得します。

62

getProcedureTerm()

procedureに対する推奨用語を取得します。

63

getPseudoColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern)

指定されたカタログおよびスキーマ内の特定の表で使用できる擬似列または隠し列の説明を取得します。

64

getResultSetHoldability()

ResultSetオブジェクトのデフォルトの保持機能を取得します。

65

getRowIdLifetime()

RowId型をサポートしているかどうかを示します。また，サポートしている場合は，RowIdオブジェクトが有効である期間も示します。

66

getSchemas()

スキーマ名を取得します。

67

getSchemas(String catalog, String schemaPattern)

スキーマ名を取得します。

68

getSchemaTerm()

schemaに対する推奨用語を取得します。

69

getSearchStringEscape()

ワイルドカード文字をエスケープするために使用する文字列を取得します。

70

getSQLKeywords()

データベース固有のSQLキーワードであり，かつSQL:2003のキーワードではないすべてのキーワードを，コンマで区切ったリストで取得します。

71

getSQLStateType()

SQLExceptionクラスのgetSQLStateメソッドによって返されるSQLSTATEがX/Open（現在はOpen Group）のSQL CLIであるかSQL:2003であるかを取得します。

72

getStringFunctions()

使用できる文字列関数をコンマで区切ったリストで取得します。

73

getSuperTables(String catalog, String schemaPattern, String tableNamePattern)

特定のスキーマで定義されているテーブル階層の情報を取得します。

74

getSuperTypes(String catalog, String schemaPattern, String typeNamePattern)

特定のスキーマで定義されているユーザ定義型（UDT）階層の情報を取得します。

75

getSystemFunctions()

使用できるシステム関数をコンマで区切ったリストで取得します。

76

getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern)

表に対するアクセス権限に関する情報を取得します。

77

getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

表に関する情報を取得します。

78

getTableTypes()

表の種類を取得します。

79

getTimeDateFunctions()

使用できる時間関数と日付関数をコンマで区切ったリストで取得します。

80

getTypeInfo()

標準SQLの型に関する情報を取得します。

81

getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types)

ユーザ定義型（UDT）に関する情報を取得します。

82

getURL()

HADBサーバの接続先情報を指定したURLを取得します。

83

getUserName()

HADBサーバに接続した認可識別子を取得します。

84

getVersionColumns(String catalog, String schema, String table)

行の任意の値が変更された場合に，自動的に更新される表の列に関する記述を取得します。

85

insertsAreDetected(int type)

ResultSetクラスのrowInsertedメソッドを呼び出すことによって可視の行が挿入されたことを検出できるかどうかを取得します。

86

isCatalogAtStart()

完全修飾された表名の開始部分（または終了部分）にカタログが現れるかどうかを取得します。

87

isReadOnly()

読み取り専用モードかどうかを取得します。

88

locatorsUpdateCopy()

LOBへの変更が，コピーに対して行われたのか，LOBに直接行われたのかを示します。

89

nullPlusNonNullIsNull()

ナル値と非ナル値の連結をナル値とするかどうかを取得します。

90

nullsAreSortedAtEnd()

ナル値が，終了時にソート順に関係なくソートされるかどうかを取得します。

91

nullsAreSortedAtStart()

ナル値が，開始時にソート順に関係なくソートされるかどうかを取得します。

92

nullsAreSortedHigh()

ナル値が高位にソートされるかどうかを取得します。

93

nullsAreSortedLow()

ナル値が下位にソートされるかどうかを取得します。

94

othersDeletesAreVisible(int type)

ほかで行われた削除が可視かどうかを取得します。

95

othersInsertsAreVisible(int type)

ほかで行われた挿入が可視かどうかを取得します。

96

othersUpdatesAreVisible(int type)

ほかで行われた更新が可視かどうかを取得します。

97

ownDeletesAreVisible(int type)

結果セット自身の削除が可視かどうかを取得します。

98

ownInsertsAreVisible(int type)

結果セット自身の挿入が可視かどうかを取得します。

99

ownUpdatesAreVisible(int type)

結果セット自身の更新が可視かどうかを取得します。

100

storesLowerCaseIdentifiers()

大文字と小文字が混在する二重引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，小文字で格納するかどうかを取得します。

101

storesLowerCaseQuotedIdentifiers()

大文字と小文字が混在する二重引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，小文字で格納するかどうかを取得します。

102

storesMixedCaseIdentifiers()

大文字と小文字が混在する二重引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，大文字と小文字混在で格納するかどうかを取得します。

103

storesMixedCaseQuotedIdentifiers()

大文字と小文字が混在する二重引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，大文字と小文字混在で格納するかどうかを取得します。

104

storesUpperCaseIdentifiers()

大文字と小文字が混在する二重引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，大文字で格納するかどうかを取得します。

105

storesUpperCaseQuotedIdentifiers()

大文字と小文字が混在する二重引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，大文字で格納するかどうかを取得します。

106

supportsAlterTableWithAddColumn()

列追加のあるALTER TABLEがサポートされているかどうかを取得します。

107

supportsAlterTableWithDropColumn()

列削除のあるALTER TABLEがサポートされているかどうかを取得します。

108

supportsANSI92EntryLevelSQL()

ANSI92エントリレベルのSQL文法がサポートされているかどうかを取得します。

109

supportsANSI92FullSQL()

ANSI92完全レベルのSQL文法がサポートされているかどうかを取得します。

110

supportsANSI92IntermediateSQL()

ANSI92中間レベルのSQL文法がサポートされているかどうかを取得します。

111

supportsBatchUpdates()

バッチ更新がサポートされているかどうかを取得します。

112

supportsCatalogsInDataManipulation()

データ操作文でカタログ名を使用できるかどうかを取得します。

113

supportsCatalogsInIndexDefinitions()

インデクス定義文でカタログ名を使用できるかどうかを取得します。

114

supportsCatalogsInPrivilegeDefinitions()

権限付与の定義文（GRANT文），または権限取り消しの定義文（REVOKE文）で，カタログ名を使用できるかどうかを取得します。

115

supportsCatalogsInProcedureCalls()

プロシジャ呼び出し文でカタログ名を使用できるかどうかを取得します。

116

supportsCatalogsInTableDefinitions()

表定義文でカタログ名を使用できるかどうかを取得します。

117

supportsColumnAliasing()

列の別名がサポートされているかどうかを取得します。

118

supportsConvert()

SQLの型間のCONVERT関数がサポートされているかどうかを取得します。

119

supportsConvert(int fromType, int toType)

指定されたSQLの型間のCONVERT関数がサポートされているかどうかを取得します。

120

supportsCoreSQLGrammar()

ODBC Core SQL文法がサポートされているかどうかを取得します。

121

supportsCorrelatedSubqueries()

外への参照列を含む副問合せがサポートされているかどうかを取得します。

122

supportsDataDefinitionAndDataManipulationTransactions()

トランザクションで，データ定義文とデータ操作文の両方がサポートされているかどうかを取得します。

123

supportsDataManipulationTransactionsOnly()

トランザクションでデータ操作文だけがサポートされているかどうかを取得します。

124

supportsDifferentTableCorrelationNames()

表相関名がサポートされている場合，表名と異なる名前であるという制限を付けるかどうかを取得します。

125

supportsExpressionsInOrderBy()

ORDER BYリスト中で値式がサポートされているかどうかを取得します。

126

supportsExtendedSQLGrammar()

ODBC Extended SQL文法がサポートされているかどうかを取得します。

127

supportsFullOuterJoins()

完全な入れ子の外結合がサポートされているかどうかを取得します。

128

supportsGetGeneratedKeys()

文が実行されたあとに自動生成キーを取得できるかどうかを取得します。

129

supportsGroupBy()

GROUP BY句がサポートされているかどうかを取得します。

130

supportsGroupByBeyondSelect()

SELECT文中のすべての列がGROUP BY句に含まれるという条件で，このデータベースによって，GROUP BY句でSELECT文中にない列の使用がサポートされているかどうかを取得します。

131

supportsGroupByUnrelated()

GROUP BY句でSELECT文中にない列の使用がサポートされているかどうかを取得します。

132

supportsIntegrityEnhancementFacility()

SQL Integrity Enhancement Facilityがサポートされているかどうかを取得します。

133

supportsLikeEscapeClause()

LIKE述語のエスケープ句がサポートされているかどうかを取得します。

134

supportsLimitedOuterJoins()

外結合に関し，制限されたサポートが提供されるかどうかを取得します。

135

supportsMinimumSQLGrammar()

ODBC Minimum SQL文法がサポートされているかどうかを取得します。

136

supportsMixedCaseIdentifiers()

大文字と小文字が混在する二重引用符なしのSQL識別子を，大文字と小文字を区別して処理し，大文字と小文字混在で格納するかどうかを取得します。

137

supportsMixedCaseQuotedIdentifiers()

大文字と小文字が混在する二重引用符付きのSQL識別子を，大文字と小文字を区別して処理し，結果として大文字と小文字混在で格納するかどうかを取得します。

138

supportsMultipleOpenResults()

CallableStatementオブジェクトから同時に返された複数のResultSetオブジェクトを持つことが可能かどうかを取得します。

139

supportsMultipleResultSets()

executeメソッドの単一の呼び出しからの複数のResultSetオブジェクトの取得がサポートされているかどうかを取得します。

140

supportsMultipleTransactions()

一度に複数のトランザクションを（異なった接続で）オープンできるかどうかを取得します。

141

supportsNamedParameters()

CALL文への名前付きパラメタがサポートされているかどうかを取得します。

142

supportsNonNullableColumns()

列を非ナル値として定義できるかどうかを取得します。

143

supportsOpenCursorsAcrossCommit()

コミット間でカーソルがオープンされたままの状態がサポートされているかどうかを取得します。

144

supportsOpenCursorsAcrossRollback()

ロールバック間でカーソルがオープンされたままの状態がサポートされているかどうかを取得します。

145

supportsOpenStatementsAcrossCommit()

コミット間で文ハンドルがオープンされたままの状態がサポートされているかどうかを取得します。

146

supportsOpenStatementsAcrossRollback()

ロールバック間で文ハンドルがオープンされたままの状態がサポートされているかどうかを取得します。

147

supportsOrderByUnrelated()

ORDER BY句でSELECT文中にない列の使用がサポートされているかどうかを取得します。

148

supportsOuterJoins()

外結合が何らかの形式でサポートされているかどうかを取得します。

149

supportsPositionedDelete()

位置指定されたDELETE文がサポートされているかどうかを取得します。

150

supportsPositionedUpdate()

位置指定されたUPDATE文がサポートされているかどうかを取得します。

151

supportsRefCursors()

データベースがREF CURSORをサポートしているかどうかを取得します。

152

supportsResultSetConcurrency(int type, int concurrency)

指定した結果セットタイプと並行処理タイプの組み合わせをサポートしているかどうかを返します。

153

supportsResultSetHoldability(int holdability)

指定されたResultSetオブジェクトの保持機能がサポートされているかどうかを返します。

154

supportsResultSetType(int type)

指定した結果セットタイプがサポートされているかどうかを返します。

155

supportsSavepoints()

セーブポイントがサポートされているかどうかを取得します。

156

supportsSchemasInDataManipulation()

データ操作文でスキーマ名を使用できるかどうかを取得します。

157

supportsSchemasInIndexDefinitions()

インデクス定義文でスキーマ名を使用できるかどうかを取得します。

158

supportsSchemasInPrivilegeDefinitions()

権限付与の定義文（GRANT文），または権限取り消しの定義文（REVOKE文）で，スキーマ名を使用できるかどうかを取得します。

159

supportsSchemasInProcedureCalls()

プロシジャ呼び出し文でスキーマ名を使用できるかどうかを取得します。

160

supportsSchemasInTableDefinitions()

表定義文でスキーマ名を使用できるかどうかを取得します。

161

supportsSelectForUpdate()

SELECT FOR UPDATE文がサポートされているかどうかを取得します。

162

supportsStatementPooling()

文ハンドルのプールがサポートされているかどうかを取得します。

163

supportsStoredFunctionsUsingCallSyntax()

ストアドプロシジャエスケープ構文を使用したユーザ定義関数，またはベンダ関数の呼び出しをサポートするかどうかを取得します。

164

supportsStoredProcedures()

ストアドプロシジャエスケープ構文を使用するストアドプロシジャ呼び出しがサポートされているかどうかを判定します。

165

supportsSubqueriesInComparisons()

比較述語で副問合せがサポートされているかどうかを取得します。

166

supportsSubqueriesInExists()

EXISTS述語で副問合せがサポートされているかどうかを取得します。

167

supportsSubqueriesInIns()

IN述語で副問合せがサポートされているかどうかを取得します。

168

supportsSubqueriesInQuantifieds()

限定述語で副問合せがサポートされているかどうかを取得します。

169

supportsTableCorrelationNames()

表の相関名がサポートされているかどうかを取得します。

170

supportsTransactionIsolationLevel(int level)

指定したトランザクション隔離性水準がサポートされているかどうかを返します。

171

supportsTransactions()

トランザクションがサポートされているかどうかを取得します。

172

supportsUnion()

SQL UNIONがサポートされているかどうかを取得します。

173

supportsUnionAll()

SQL UNION ALLがサポートされているかどうかを取得します。

174

updatesAreDetected(int type)

ResultSetクラスのrowUpdatedメソッドを呼び出すことによって可視の行が更新されたことを検出できるかどうかを取得します。

175

usesLocalFilePerTable()

各表にファイルを使用するかどうかを取得します。

176

usesLocalFiles()

ローカルファイルに表を格納するかどうかを取得します。

重要

この表に記載されていないメソッドは，HADBではサポートしていません。サポートしていないメソッドを実行すると，SQLExceptionが投入されることがあります。

(3)　必要なパッケージ名称とクラス名称

DatabaseMetaDataインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbDatabaseMetaData

(4)　パターン文字列中に指定できる特殊文字

DatabaseMetaDataクラスのメソッドには，Stringのパターン文字列を指定する引数があります。パターン文字列中には，次の表に示す特殊文字を指定できます。

表8‒48　パターン文字列中に指定できる特殊文字

指定できる特殊文字

意味

_（下線）

任意の1文字です。

%

0文字以上の任意の長さの文字列です。

¥

エスケープ文字です。パターン文字列中に指定したエスケープ文字の直後の特殊文字を通常の文字として扱います。

¥は，Shift-JISの0x5c（UTF-16LEの0x5c00）で示される文字です。UTF-8の場合は，¥（バックスラッシュ）で表示される文字を指定してください。

8.7.2　allProceduresAreCallable()

(1)　機能

getProceduresメソッドによって返されるすべてのプロシジャが，現在のHADBユーザから呼び出せるかどうかを取得します。

(2)　形式

public synchronized boolean allProceduresAreCallable() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.3　allTablesAreSelectable()

(1)　機能

getTablesメソッドによって返されるすべての表が，現在のHADBユーザによって使用できるかどうかを取得します。

(2)　形式

public synchronized boolean allTablesAreSelectable() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.4　autoCommitFailureClosesAllResultSets()

(1)　機能

自動コミットモード有効時にSQLExceptionが発生した場合，すべてのオープンされたResultSetがクローズされるかどうかを返却します。

(2)　形式

public synchronized boolean autoCommitFailureClosesAllResultSets() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.5　dataDefinitionCausesTransactionCommit()

(1)　機能

トランザクションのデータ定義文が，トランザクションを強制的にコミットさせるかどうかを取得します。

(2)　形式

public synchronized boolean dataDefinitionCausesTransactionCommit() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtureが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.6　dataDefinitionIgnoredInTransactions()

(1)　機能

トランザクションでデータ定義文が無視されるかどうかを取得します。

(2)　形式

public synchronized boolean dataDefinitionIgnoredInTransactions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.7　deletesAreDetected(int type)

(1)　機能

ResultSetクラスのrowDeletedメソッドを呼び出すことによって可視の行が削除されたことを検出できるかどうかを取得します。

(2)　形式

public synchronized boolean deletesAreDetected(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.8　doesMaxRowSizeIncludeBlobs()

(1)　機能

getMaxRowSizeメソッドの戻り値がSQLデータの型のLONGVARCHARおよびLONGVARBINARYを含むかどうかを取得します。

(2)　形式

public synchronized boolean doesMaxRowSizeIncludeBlobs() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.9　generatedKeyAlwaysReturned()

(1)　機能

自動生成キーの列として指定された列名またはインデクスが有効であり，かつ文が成功した場合に，生成されたキーが常に返されるかどうかを取得します。

(2)　形式

public synchronized boolean generatedKeyAlwaysReturned() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.10　getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern)

(1)　機能

指定されたスキーマおよびカタログで使用可能なユーザ定義の型（UDT）のための指定された型の指定された属性に関する記述を取得します。

(2)　形式

public synchronized ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。ただし，指定しても無視されます。

String typeNamePattern：

型名パターンを指定します。ただし，指定しても無視されます。

String attributeNamePattern：

属性名パターンを指定します。ただし，指定しても無視されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒49　返却されるResultSetオブジェクトの形式（getAttributesメソッドの場合）

列番号

型

列名

列の意味

1

String

TYPE_CAT

カタログ名

2

String

TYPE_SCHEM

スキーマ名

3

String

TYPE_NAME

型名

4

String

ATTR_NAME

属性名

5

int

DATA_TYPE

SQLの型の属性の型

6

String

ATTR_TYPE_NAME

型名

7

int

ATTR_SIZE

列サイズ

8

int

DECIMAL_DIGITS

小数点以下の桁数

9

int

NUM_PREC_RADIX

基数

10

int

NULLABLE

この型にナル値を使用できるかどうか

11

String

REMARKS

コメント記述列

12

String

ATTR_DEF

デフォルト値

13

int

SQL_DATA_TYPE

未使用

14

int

SQL_DATETIME_SUB

未使用

15

int

CHAR_OCTET_LENGTH

CHAR型の列の最大バイト数

16

int

ORDINAL_POSITION

列番号

17

String

IS_NULLABLE

この型にナル値が使用できるかどうか

18

String

SCOPE_CATALOG

参照属性のスコープである表のカタログ名

19

String

SCOPE_SCHEMA

参照属性のスコープである表のスキーマ名

20

String

SCOPE_TABLE

参照属性のスコープである表の名称

21

short

SOURCE_DATA_TYPE

個別の型またはユーザ生成Ref型，java.sql.TypesのSQL型のソースの型

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.11　getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable)

(1)　機能

行を一意に識別する表の最適な列セットに関する記述を取得します。

(2)　形式

public synchronized ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schema：

スキーマ名を指定します。ただし，指定しても無視されます。

String table：

表名を指定します。ただし，指定しても無視されます。

int scope：

対象のスケールを指定します。ただし，指定しても無視されます。

boolean nullable：

ナル値を指定可能な列を含むかを指定します。ただし，指定しても無視されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒50　返却されるResultSetオブジェクトの形式（getBestRowIdentifierメソッドの場合）

列番号

型

列名

列の意味

1

short

SCOPE

結果の実際のスケール

2

String

COLUMN_NAME

列名

3

int

DATA_TYPE

SQLの型

4

String

TYPE_NAME

型名

5

int

COLUMN_SIZE

精度

6

int

BUFFER_LENGTH

未使用

7

short

DECIMAL_DIGITS

小数点以下の桁数

8

short

PSEUDO_COLUMN

擬似列かどうか

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.12　getCatalogs()

(1)　機能

カタログ名を取得します。

(2)　形式

public synchronized ResultSet getCatalogs() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒51　返却されるResultSetオブジェクトの形式（getCatalogsメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

カタログ名

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.13　getCatalogSeparator()

(1)　機能

カタログ名と表名のセパレータを取得します。

(2)　形式

public synchronized String getCatalogSeparator() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に空の文字列が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.14　getCatalogTerm()

(1)　機能

catalogに対する推奨用語を取得します。

(2)　形式

public synchronized String getCatalogTerm() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に空の文字列が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.15　getClientInfoProperties()

(1)　機能

ドライバがサポートするクライアント情報プロパティのリストを返却します。

(2)　形式

public synchronized ResultSet getClientInfoProperties() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒52　返却されるResultSetオブジェクトの形式

列番号

型

列名

列の意味

1

String

NAME

クライアント情報プロパティの名前

2

int

MAX_LEN

プロパティ値の最大長

3

String

DEFAULT_VALUE

プロパティのデフォルト値

4

String

DESCRIPTION

プロパティの記述

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.16　getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern)

(1)　機能

表の列へのアクセス権に関する記述を取得します。

(2)　形式

public synchronized ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schema：

スキーマ名を指定します。ただし，指定しても無視されます。

String table：

表名を指定します。ただし，指定しても無視されます。

String columnNamePattern：

列名パターンを指定します。ただし，指定しても無視されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒53　返却されるResultSetオブジェクトの形式（getColumnPrivilegesメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

カタログ名

2

String

TABLE_SCHEM

スキーマ名

3

String

TABLE_NAME

表名

4

String

COLUMN_NAME

列名

5

String

GRANTOR

アクセス権の付与者

6

String

GRANTEE

アクセス権の被付与者

7

String

PRIVILEGE

アクセス権限名

8

String

IS_GRANTABLE

アクセス権の被付与者が，別のHADBユーザにアクセス権を与えることができるかどうか

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.17　getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)

(1)　機能

表の列情報を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できる表の列情報が変わります。権限と取得できる表の列情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターン※を指定します。大文字と小文字を区別します。

String tableNamePattern：

表名パターン※を指定します。大文字と小文字を区別します。

String columnNamePattern：

列名パターン※を指定します。大文字と小文字を区別します。

注※

各パターンに指定できる特殊文字については，「8.7.1　DatabaseMetaDataインタフェースのメソッド一覧」の「(4)　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

ResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒54　返却されるResultSetオブジェクトの形式（getColumnsメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

常に空の文字列を返します。

2

String

TABLE_SCHEM

スキーマ名

3

String

TABLE_NAME

表名

4

String

COLUMN_NAME

列名

5

int

DATA_TYPE

SQLの型

6

String

TYPE_NAME

型名

7

int

COLUMN_SIZE

列サイズ

8

int

BUFFER_LENGTH

常にナル値を返します。

9

int

DECIMAL_DIGITS

小数点以下の桁数

10

int

NUM_PREC_RADIX

基数

概数値：2

真数値：10

数値以外：0

11

int

NULLABLE

この型にナル値を使用できるかどうかを返します。

columnNoNulls：ナル値を使用できない可能性があります。

columnNullable：ナル値を使用できます。

12

String

REMARKS

コメント記述列

常に空の文字列を返します。

13

String

COLUMN_DEF

列の既定値を返します。

返却された値がアポストロフィ( ' )で囲まれている場合は，列の既定値が文字列であることを意味しています。

列の既定値にNULLが指定された場合は，アポストロフィ( ' )で囲まれていないNULLという文字列を返します。

列の既定値が指定されていない場合は，ナル値を返します。

そのほかの返却値については，マニュアルHADB　システム構築・運用ガイドのSQL_COLUMNSの内容のDEFAULT_VALUE列を参照してください。

14

int

SQL_DATA_TYPE

常にナル値を返します。

15

int

SQL_DATETIME_SUB

常にナル値を返します。

16

int

CHAR_OCTET_LENGTH

CHAR型の列の最大バイト数

17

int

ORDINAL_POSITION

列番号

1から始まります。

18

String

IS_NULLABLE

この型にナル値が使用できるかどうかを返します。

"NO"：ナル値を使用できません。

"YES"：ナル値を使用できる可能性があります。

19

String

SCOPE_CATALOG

常に空の文字列を返します。

20

String

SCOPE_SCHEMA

常に空の文字列を返します。

21

String

SCOPE_TABLE

常に空の文字列を返します。

22

short

SOURCE_DATA_TYPE

常にナル値を返します。

23

String

IS_AUTOINCREMENT

列が自動インクリメントされるかどうかを示します。

"NO"：列が自動インクリメントされません。

常にNOを返します。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

次に示す2つのメソッドで取得した，ビュー表の列情報の値が異なることがあります。

このメソッドで取得したResultSetオブジェクトのDECIMAL_DIGITSの値

ResultSetMetaDataインタフェースのgetScaleメソッドで取得した値

上記の1.では，ビュー表を定義したときの位取りの値を取得します。一方，上記の2.では，ビュー表を検索したときの位取りの値を取得します。サーバ定義またはクライアント定義のadb_sql_prep_dec_div_rs_priorオペランドの指定値が，ビュー表を定義したときとビュー表を検索したときで異なる場合は，上記の2つの値が異なります。

8.7.18　getConnection()

(1)　機能

このDatabaseMetaDataインスタンスを生成したConnectionインスタンスを取得します。

(2)　形式

public synchronized Connection getConnection() throws SQLException

(3)　引数

なし。

(4)　戻り値

Connectionオブジェクトが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.19　getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable)

(1)　機能

指定された参照表と指定された被参照表とのクロスリファレンス情報を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できるクロスリファレンス情報が変わります。権限と取得できる情報の対応については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getCrossReference
       (String parentCatalog,String parentSchema, String parentTable,
        String foreignCatalog, String foreignSchema, String foreignTable)
       throws SQLException

(3)　引数

String parentCatalog：

被参照表のカタログ名を指定します。ただし，指定しても無視されます。

String parentSchema：

被参照表のスキーマ名パターン※を指定します。

String parentTable：

被参照表の表名パターン※を指定します。

String foreignCatalog：

参照表のカタログ名を指定します。ただし，指定しても無視されます。

String foreignSchema：

参照表のスキーマ名パターン※を指定します。

String foreignTable：

参照表の表名パターン※を指定します。

注※

各パターンに指定できる特殊文字については，「8.7.1　DatabaseMetaDataインタフェースのメソッド一覧」の「(4)　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒55　返却されるResultSetオブジェクトの形式（getCrossReferenceメソッドの場合）

列番号

型

列名

列の意味

1

String

PKTABLE_CAT

被参照表のカタログ名

常に空文字が返却されます。

2

String

PKTABLE_SCHEM

被参照表のスキーマ名

3

String

PKTABLE_NAME

被参照表の表名

4

String

PKCOLUMN_NAME

主キーの列名

5

String

FKTABLE_CAT

参照表のカタログ名

常に空文字が返却されます。

6

String

FKTABLE_SCHEM

参照表のスキーマ名

7

String

FKTABLE_NAME

参照表の表名

8

String

FKCOLUMN_NAME

外部キーの列名

9

short

KEY_SEQ

外部キーのシーケンス番号

10

short

UPDATE_RULE

主キー更新時の外部キーに適用される動作

importedKeyNoAction：主キーは更新できません。ただし，CREATE TABLE文の参照制約定義で参照制約チェック抑止指定（DISABLE）を指定した場合は，主キーを更新できます。

11

short

DELETE_RULE

主キー削除時の外部キーに適用される動作

importedKeyNoAction：主キーは削除できません。ただし，CREATE TABLE文の参照制約定義で参照制約チェック抑止指定（DISABLE）を指定した場合は，主キーを削除できます。

12

String

FK_NAME

参照制約の制約名

13

String

PK_NAME

主キーのインデクス名

14

short

DEFERRABILITY

外部キーに対する制約の評価を，コミットまで延期できるかどうか

importedKeyNotDeferrable：延期できません。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.20　getDatabaseMajorVersion()

(1)　機能

データベース（HADBサーバ）のメジャーバージョンを取得します。

(2)　形式

public synchronized int getDatabaseMajorVersion() throws SQLException

(3)　引数

なし。

(4)　戻り値

HADBサーバのメジャーバージョンが返却されます。

例えば，HADBサーバのバージョンが01-00の場合，int型の1が返却されます。

JDBCドライバが出力するSQLトレースのヘッダ部に表示されるサーバのメジャーバージョンと同じ値が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.21　getDatabaseMinorVersion()

(1)　機能

データベース（HADBサーバ）のマイナーバージョンを取得します。

(2)　形式

public synchronized int getDatabaseMinorVersion() throws SQLException

(3)　引数

なし。

(4)　戻り値

HADBサーバのマイナーバージョンが返却されます。

例えば，HADBサーバのバージョンが01-00の場合，int型の0が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.22　getDatabaseProductName()

(1)　機能

接続するデータベース（HADBサーバ）の製品名称を取得します。

(2)　形式

public synchronized String getDatabaseProductName() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

"Hitachi Advanced Data Binder"が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.23　getDatabaseProductVersion()

(1)　機能

接続するデータベース（HADBサーバ）のバージョンを取得します。

(2)　形式

public synchronized String getDatabaseProductVersion() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

"vv-rr"の形式（例："01-00"）でHADBサーバのバージョンが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.24　getDefaultTransactionIsolation()

(1)　機能

このデータベースのデフォルトのトランザクション隔離性水準を取得します。

(2)　形式

public synchronized int getDefaultTransactionIsolation() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にConnection.TRANSACTION_READ_COMMITTED（トランザクション隔離性水準のデフォルトがREAD COMMITTED）が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.25　getDriverMajorVersion()

(1)　機能

JDBCドライバのメジャーバージョンを取得します。

(2)　形式

public synchronized int getDriverMajorVersion()

(3)　引数

なし。

(4)　戻り値

JDBCドライバのメジャーバージョンが返却されます。

例えば，JDBCドライバのバージョンが01-00の場合，1が返却されます。

(5)　発生する例外

なし。

8.7.26　getDriverMinorVersion()

(1)　機能

JDBCドライバのマイナーバージョンを取得します。

(2)　形式

public synchronized int getDriverMinorVersion()

(3)　引数

なし。

(4)　戻り値

JDBCドライバのマイナーバージョンが返却されます。

例えば，JDBCドライバのバージョンが01-00の場合，0が返却されます。

(5)　発生する例外

なし。

8.7.27　getDriverName()

(1)　機能

JDBCドライバの名前を取得します。

(2)　形式

public synchronized String getDriverName() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

"Hitachi Advanced Data Binder JDBC Driver"が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.28　getDriverVersion()

(1)　機能

JDBCドライバのバージョンを取得します。

(2)　形式

public synchronized String getDriverVersion() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

"vv-rr"の形式（例："01-00"）でJDBCドライバのバージョンが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.29　getExportedKeys(String catalog, String schema, String table)

(1)　機能

参照表の外部キーに関する情報を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できる外部キーに関する情報が変わります。権限と取得できる情報の対応については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException

(3)　引数

String catalog：

被参照表のカタログ名を指定します。ただし，指定しても無視されます。

String schema：

被参照表のスキーマ名パターン※を指定します。

String table：

被参照表の表名パターン※を指定します。

注※

各パターンに指定できる特殊文字については，「8.7.1　DatabaseMetaDataインタフェースのメソッド一覧」の「(4)　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒56　返却されるResultSetオブジェクトの形式（getExportedKeysメソッドの場合）

列番号

型

列名

列の意味

1

String

PKTABLE_CAT

被参照表のカタログ名

常に空文字が返却されます。

2

String

PKTABLE_SCHEM

被参照表のスキーマ名

3

String

PKTABLE_NAME

被参照表の表名

4

String

PKCOLUMN_NAME

主キーの列名

5

String

FKTABLE_CAT

参照表のカタログ名

常に空文字が返却されます。

6

String

FKTABLE_SCHEM

参照表のスキーマ名

7

String

FKTABLE_NAME

参照表の表名

8

String

FKCOLUMN_NAME

外部キーの列名

9

short

KEY_SEQ

外部キーのシーケンス番号

10

short

UPDATE_RULE

主キー更新時の外部キーに適用される動作

importedKeyNoAction：主キーは更新できません。ただし，CREATE TABLE文の参照制約定義で参照制約チェック抑止指定（DISABLE）を指定した場合は，主キーを更新できます。

11

short

DELETE_RULE

主キー削除時の外部キーに適用される動作

importedKeyNoAction：主キーは削除できません。ただし，CREATE TABLE文の参照制約定義で参照制約チェック抑止指定（DISABLE）を指定した場合は，主キーを削除できます。

12

String

FK_NAME

参照制約の制約名

13

String

PK_NAME

主キーのインデクス名

14

short

DEFERRABILITY

外部キーに対する制約の評価を，コミットまで延期できるかどうか

importedKeyNotDeferrable：延期できません。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.30　getExtraNameCharacters()

(1)　機能

二重引用符（"）で囲まれていない識別名に使用できるすべての特殊文字を取得します。

(2)　形式

public synchronized String getExtraNameCharacters() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

"¥@#"が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.31　getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern)

(1)　機能

関数のパラメタと返される型に関する情報を返却します。

(2)　形式

public synchronized ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。大文字と小文字を区別します。

String functionNamePattern：

関数名パターンを指定します。大文字と小文字を区別します。

String columnNamePattern：

パラメタ名パターンを指定します。大文字と小文字を区別します。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒57　返却されるResultSetオブジェクトの形式

列番号

型

列名

列の意味

1

String

FUNCTION_CAT

カタログ名

2

String

FUNCTION_SCHEM

認可識別子名

3

String

FUNCTION_NAME

関数名

4

String

COLUMN_NAME

列/パラメタ名

5

short

COLUMN_TYPE

列の種類/パラメタ

6

int

DATA_TYPE

パラメタのSQL型

7

String

TYPE_NAME

パラメタのSQL型名

8

int

PRECISION

パラメタの精度

9

int

LENGTH

パラメタのサイズ

10

short

SCALE

パラメタの位取り（小数部分の桁数）

11

short

RADIX

パラメタの基数

12

short

NULLABLE

ナル値可否

13

String

REMARKS

パラメタに関するコメント

14

int

CHAR_OCTET_LENGTH

バイナリと文字ベースのパラメタまたは列の最大長

15

int

ORDINAL_POSITION

入力および出力パラメタの1から始まる順番

関数の戻り値の場合は0を返す

16

String

IS_NULLABLE

パラメタまたは列でナル値を許可するかどうか

17

String

SPECIFIC_NAME

この関数をスキーマ内で一意に識別する名前

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.32　getFunctions(String catalog, String schemaPattern, String functionNamePattern)

(1)　機能

関数に関する情報を返却します。

(2)　形式

public synchronized ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。大文字と小文字を区別します。

String functionNamePattern：

関数名パターンを指定します。大文字と小文字を区別します。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒58　返却されるResultSetオブジェクトの形式

列番号

型

列名

列の意味

1

String

FUNCTION_CAT

カタログ名

2

String

FUNCTION_SCHEM

認可識別子名

3

String

FUNCTION_NAME

関数名

4

String

REMARKS

関数に関する説明

5

short

FUNCTION_TYPE

関数の種類

6

String

SPECIFIC_NAME

この関数をそのスキーマ内で一意に識別する名前

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.33　getIdentifierQuoteString()

(1)　機能

SQL識別子を引用するのに使用する文字列を取得します。

(2)　形式

public synchronized String getIdentifierQuoteString() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

二重引用符（"）が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.34　getImportedKeys(String catalog, String schema, String table)

(1)　機能

被参照表の主キーに関する情報を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できる主キーに関する情報が変わります。権限と取得できる情報の対応については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException

(3)　引数

String catalog：

参照表のカタログ名を指定します。ただし，指定しても無視されます。

String schema：

参照表のスキーマ名パターン※を指定します。

String table：

参照表の表名パターン※を指定します。

注※

各パターンに指定できる特殊文字については，「8.7.1　DatabaseMetaDataインタフェースのメソッド一覧」の「(4)　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒59　返却されるResultSetオブジェクトの形式（getImportedKeysメソッドの場合）

列番号

型

列名

列の意味

1

String

PKTABLE_CAT

被参照表のカタログ名

常に空文字が返却されます。

2

String

PKTABLE_SCHEM

被参照表のスキーマ名

3

String

PKTABLE_NAME

被参照表の表名

4

String

PKCOLUMN_NAME

主キーの列名

5

String

FKTABLE_CAT

参照表のカタログ名

常に空文字が返却されます。

6

String

FKTABLE_SCHEM

参照表のスキーマ名

7

String

FKTABLE_NAME

参照表の表名

8

String

FKCOLUMN_NAME

外部キーの列名

9

short

KEY_SEQ

外部キーのシーケンス番号

10

short

UPDATE_RULE

主キー更新時の外部キーに適用される動作

importedKeyNoAction：主キーは更新できません。ただし，CREATE TABLE文の参照制約定義で参照制約チェック抑止指定（DISABLE）を指定した場合は，主キーを更新できます。

11

short

DELETE_RULE

主キー削除時の外部キーに適用される動作

importedKeyNoAction：主キーは削除できません。ただし，CREATE TABLE文の参照制約定義で参照制約チェック抑止指定（DISABLE）を指定した場合は，主キーを削除できます。

12

String

FK_NAME

参照制約の制約名

13

String

PK_NAME

主キーのインデクス名

14

short

DEFERRABILITY

外部キーに対する制約の評価を，コミットまで延期できるかどうか

importedKeyNotDeferrable：延期できません。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.35　getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)

(1)　機能

インデクスに関する情報を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できるインデクス情報が変わります。権限と取得できるインデクス情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schema：

スキーマ名パターン※を指定します。大文字と小文字を区別します。

String table：

表名パターン※を指定します。大文字と小文字を区別します。

boolean unique：

ユニーク属性を指定します。次に示すどちらかの値を指定してください。

true：ユニークインデクスの情報だけを取得します。

false：すべてのインデクスの情報を取得します。

boolean approximate：

指定する必要はありません。指定しても無視されます。

注※

各パターンに指定できる特殊文字については，「8.7.1　DatabaseMetaDataインタフェースのメソッド一覧」の「(4)　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

ResultSetオブジェクトが返却されます。

返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒60　返却されるResultSetオブジェクトの形式（getIndexInfoメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

カタログ名

常に空の文字列を返します。

2

String

TABLE_SCHEM

スキーマ名

3

String

TABLE_NAME

表名

4

boolean

NON_UNIQUE

インデクスを定義するキー値（インデクスとして定義する1つまたは複数の列全体の値）が，すべての行で異なっている場合にfalse，そうでない場合にtrueを返します。

5

String

INDEX_QUALIFIER

インデクスのカタログ名

常に空の文字列を返します。

6

String

INDEX_NAME

インデクス識別子

7

short

TYPE

インデクス種別を返します。

常にDatabaseMetaData.tableIndexOtherを返します。

8

short

ORDINAL_POSITION

インデクスを構成する列の順序（インデクスを構成する列名順を識別する番号で，1から始まる整数）を返します。

9

String

COLUMN_NAME

列名を返します。

10

String

ASC_OR_DESC

B-treeインデクスのキー値の並び順を返します。

'A'：ASC（昇順）

'D'：DESC（降順）

B-treeインデクス以外のインデクスの場合は，ナル値を返します。

11

int

CARDINALITY

インデクス内のユニークな値の数

常にナル値を返します。

12

int

PAGES

インデクスで使用しているページ数

常にナル値を返します。

13

String

FILTER_CONDITION

フィルタ条件

常に空の文字列を返します。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.36　getJDBCMajorVersion()

(1)　機能

ドライバのJDBCメジャーバージョンを取得します。

(2)　形式

public synchronized int getJDBCMajorVersion() throws SQLException

(3)　引数

なし。

(4)　戻り値

JDBCメジャーバージョンが返却されます。4が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.37　getJDBCMinorVersion()

(1)　機能

ドライバのJDBCマイナーバージョンを取得します。

(2)　形式

public synchronized int getJDBCMinorVersion() throws SQLException

(3)　引数

なし。

(4)　戻り値

JDBCマイナーバージョンが返却されます。

JRE8版の場合は2が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.38　getMaxBinaryLiteralLength()

(1)　機能

バイナリリテラル中に入れることができる16進数の最大文字数を取得します。

(2)　形式

public synchronized int getMaxBinaryLiteralLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に64,000が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.39　getMaxCatalogNameLength()

(1)　機能

カタログ名の最大文字数を取得します。

(2)　形式

public synchronized int getMaxCatalogNameLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に0が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.40　getMaxCharLiteralLength()

(1)　機能

文字データとして指定できる最大文字数を取得します。

(2)　形式

public synchronized int getMaxCharLiteralLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

文字データとして指定できる最大文字数が返却されます。常に32,000が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.41　getMaxColumnNameLength()

(1)　機能

列名に指定できる最大文字数を取得します。

(2)　形式

public synchronized int getMaxColumnNameLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

列名に指定できる最大文字数が返却されます。常に100が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.42　getMaxColumnsInGroupBy()

(1)　機能

GROUP BY句中に指定できるグループ化列の数の最大値を取得します。

(2)　形式

public synchronized int getMaxColumnsInGroupBy() throws SQLException

(3)　引数

なし。

(4)　戻り値

GROUP BY句中に指定できるグループ化列の数の最大値が返却されます。常に64が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.43　getMaxColumnsInIndex()

(1)　機能

インデクス構成列数の最大値を取得します。

(2)　形式

public synchronized int getMaxColumnsInIndex() throws SQLException

(3)　引数

なし。

(4)　戻り値

インデクス構成列数の最大値が返却されます。常に16が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.44　getMaxColumnsInOrderBy()

(1)　機能

ORDER BY句中に指定できる列数の最大値を取得します。

(2)　形式

public synchronized int getMaxColumnsInOrderBy() throws SQLException

(3)　引数

なし。

(4)　戻り値

ORDER BY句中に指定できる列数の最大値が返却されます。常に16が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.45　getMaxColumnsInSelect()

(1)　機能

選択リストに指定できる選択式の最大数を取得します。

(2)　形式

public synchronized int getMaxColumnsInSelect() throws SQLException

(3)　引数

なし。

(4)　戻り値

選択リストに指定できる選択式の最大数が返却されます。常に1,000が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.46　getMaxColumnsInTable()

(1)　機能

表に定義できる列数の最大値を取得します。

(2)　形式

public synchronized int getMaxColumnsInTable() throws SQLException

(3)　引数

なし。

(4)　戻り値

表に定義できる列数の最大値が返却されます。常に1,000が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.47　getMaxConnections()

(1)　機能

同時にHADBサーバに接続できるHADBクライアントの最大数を取得します。

(2)　形式

public synchronized int getMaxConnections() throws SQLException

(3)　引数

なし。

(4)　戻り値

同時に接続できるHADBユーザの最大数が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.48　getMaxCursorNameLength()

(1)　機能

カーソル名の最大文字数を取得します。

(2)　形式

public synchronized int getMaxCursorNameLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

カーソル名の最大文字数が返却されます。常に0が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.49　getMaxIndexLength()

(1)　機能

インデクスのキー長の最大値を取得します。

(2)　形式

public synchronized int getMaxIndexLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

インデクスのキー長の最大値が返却されます。常に4,036が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.50　getMaxLogicalLobSize()

(1)　機能

このデータベースで，LOBの論理サイズとして許容される最大バイト数を取得します。

(2)　形式

public synchronized long getMaxLogicalLobSize() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に0が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.51　getMaxProcedureNameLength()

(1)　機能

プロシジャ名の最大文字数を取得します。

(2)　形式

public synchronized int getMaxProcedureNameLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

プロシジャ名の最大文字数が返却されます。常に0が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.52　getMaxRowSize()

(1)　機能

1行の最大バイト数を取得します。

(2)　形式

public synchronized int getMaxRowSize() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に0が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.53　getMaxSchemaNameLength()

(1)　機能

スキーマ名の最大文字数を取得します。

(2)　形式

public synchronized int getMaxSchemaNameLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

スキーマ名の最大文字数が返却されます。常に100が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.54　getMaxStatementLength()

(1)　機能

SQL文に指定できる文字列長の最大値を取得します。

(2)　形式

public synchronized int getMaxStatementLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

SQL文に指定できる文字列長の最大値が返却されます。常に16,000,000（単位：文字）が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.55　getMaxStatements()

(1)　機能

同時実行できるSQL文の最大数を取得します。

1Connectionオブジェクトで作成できるStatement系オブジェクトの最大数を取得します。

(2)　形式

public synchronized int getMaxStatements() throws SQLException

(3)　引数

なし。

(4)　戻り値

同時実行できるSQL文の最大数が返却されます。常に4,095が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.56　getMaxTableNameLength()

(1)　機能

表名に指定できる最大文字数を取得します。

(2)　形式

public synchronized int getMaxTableNameLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

表名に指定できる最大文字数が返却されます。常に100が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.57　getMaxTablesInSelect()

(1)　機能

SELECT文中に指定できる表数の最大値を取得します。

(2)　形式

public synchronized int getMaxTablesInSelect() throws SQLException

(3)　引数

なし。

(4)　戻り値

SELECT文中に指定できる表数の最大値が返却されます。常に64が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.58　getMaxUserNameLength()

(1)　機能

認可識別子の最大文字数を取得します。

(2)　形式

public synchronized int getMaxUserNameLength() throws SQLException

(3)　引数

なし。

(4)　戻り値

認可識別子の最大文字数が返却されます。常に100が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.59　getNumericFunctions()

(1)　機能

使用できる数学関数をコンマで区切ったリストで取得します。

(2)　形式

public synchronized String getNumericFunctions() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.60　getPrimaryKeys(String catalog, String schema, String table)

(1)　機能

指定された表の主キー列の記述を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できる主キーの情報が変わります。権限と取得できる主キーの情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schema：

スキーマ名パターン※を指定します。

String table：

表名パターン※を指定します。

注※

各パターンに指定できる特殊文字については，「8.7.1　DatabaseMetaDataインタフェースのメソッド一覧」の「(4)　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

ResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒61　返却されるResultSetオブジェクトの形式（getPrimaryKeysメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

カタログ名

常に空の文字列を返します。

2

String

TABLE_SCHEM

スキーマ名

3

String

TABLE_NAME

表名

4

String

COLUMN_NAME

列名

5

short

KEY_SEQ

主キー内で付けられる列順の番号

6

String

PK_NAME

主キー名

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.61　getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern)

(1)　機能

ストアドプロシジャパラメタに関する記述を取得します。

(2)　形式

public synchronized ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。ただし，指定しても無視されます。

String procedureNamePattern：

プロシジャ名パターンを指定します。ただし，指定しても無視されます。

String columnNamePattern：

パラメタ名パターンを指定します。ただし，指定しても無視されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒62　返却されるResultSetオブジェクトの形式（getProcedureColumnsメソッドの場合）

列番号

型

列名

列の意味

1

String

PROCEDURE_CAT

カタログ名

2

String

PROCEDURE_SCHEM

スキーマ名

3

String

PROCEDURE_NAME

プロシジャ名

4

String

COLUMN_NAME

パラメタ名

5

short

COLUMN_TYPE

パラメタの種類

6

int

DATA_TYPE

パラメタのSQL型

7

String

TYPE_NAME

パラメタのSQL型名

8

int

PRECISION

パラメタの精度

9

int

LENGTH

パラメタのサイズ

10

short

SCALE

パラメタの位取り

11

short

RADIX

パラメタの基数

12

short

NULLABLE

ナル値を使用できるかどうかを返します。

13

String

REMARKS

パラメタに関するコメント

14

String

COLUMN_DEF

列のデフォルト値

15

int

SQL_DATA_TYPE

将来使用するための予約

16

int

SQL_DATETIME_SUB

将来使用するための予約

17

int

CHAR_OCTET_LENGTH

バイナリおよび文字ベースのパラメタ，または列の最大長

18

int

ORDINAL_POSITION

入力および出力パラメタの1から始まる順番

19

String

IS_NULLABLE

パラメタまたは列でナル値を許可するかどうか

20

String

SPECIFIC_NAME

このプロシジャを一意に識別する名前

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.62　getProcedures(String catalog, String schemaPattern, String procedureNamePattern)

(1)　機能

ストアドプロシジャに関する記述を取得します。

(2)　形式

public synchronized ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。ただし，指定しても無視されます。

String procedureNamePattern：

プロシジャ名パターンを指定します。ただし，指定しても無視されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒63　返却されるResultSetオブジェクトの形式（getProceduresメソッドの場合）

列番号

型

列名

列の意味

1

String

PROCEDURE_CAT

カタログ名

2

String

PROCEDURE_SCHEM

スキーマ名

3

String

PROCEDURE_NAME

プロシジャ名

4

String

RESERVE1

将来使用するための予約

5

String

RESERVE2

将来使用するための予約

6

String

RESERVE3

将来使用するための予約

7

String

REMARKS

プロシジャの説明文

8

short

PROCEDURE_TYPE

プロシジャの種類

9

String

SPECIFIC_NAME

このプロシジャを一意に識別する名前

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.63　getProcedureTerm()

(1)　機能

procedureに対する推奨用語を取得します。

(2)　形式

public synchronized String getProcedureTerm() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に空の文字列が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.64　getPseudoColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern)

(1)　機能

指定されたカタログおよびスキーマ内の特定の表で使用できる擬似列または隠し列の説明を取得します。ただし，このメソッドでは，引数の指定はすべて無視され，常に空の結果セットが返却されます。

(2)　形式

public synchronized ResultSet getPseudoColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。ただし，指定しても無視されます。

String tableNamePattern：

表名パターンを指定します。ただし，指定しても無視されます。

String columnNamePattern：

列名パターンを指定します。ただし，指定しても無視されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒64　返却されるResultSetオブジェクトの形式（getPseudoColumnsメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

カタログ名

2

String

TABLE_SCHEM

スキーマ名

3

String

TABLE_NAME

表名

4

String

COLUMN_NAME

列名

5

int

DATA_TYPE

java.sql.TypesからのSQL型

6

int

COLUMN_SIZE

列サイズ

7

int

DECIMAL_DIGITS

小数点以下の桁数

8

int

NUM_PREC_RADIX

基数

9

String

COLUMN_USAGE

列の許可された使用方法

10

String

REMARKS

コメント記述列

11

int

CHAR_OCTET_LENGTH

char型の列の最大バイト数

12

String

IS_NULLABLE

ナル値が使用できるかどうか

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.65　getResultSetHoldability()

(1)　機能

ResultSetオブジェクトのデフォルトの保持機能を取得します。

(2)　形式

public synchronized int getResultSetHoldability() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にResultSet.HOLD_CURSORS_OVER_COMMITが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.66　getRowIdLifetime()

(1)　機能

RowId型をサポートしているかどうかを示します。また，サポートしている場合はRowIdオブジェクトが有効である期間も示します。

(2)　形式

public synchronized RowIdLifetime getRowIdLifetime() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にRowIdLifetime. ROWID_UNSUPPORTEDを返却します。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.67　getSchemas()

(1)　機能

スキーマ名を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できるスキーマの情報が変わります。権限と取得できるスキーマの情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getSchemas() throws SQLException

(3)　引数

なし。

(4)　戻り値

ResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒65　返却されるResultSetオブジェクトの形式（getSchemasメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_SCHEM

スキーマ名

2

String

TABLE_CATALOG

常に空の文字列を返します。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.68　getSchemas(String catalog, String schemaPattern)

(1)　機能

スキーマ名を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できるスキーマの情報が変わります。権限と取得できるスキーマの情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。大文字と小文字は区別されます。

パターンに指定できる特殊文字については，「8.7.1　DatabaseMetaDataインタフェースのメソッド一覧」の「(4)　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

ResultSetオブジェクトが返却されます。

返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒66　返却されるResultSetオブジェクトの形式

列番号

型

列名

列の意味

1

String

TABLE_SCHEM

スキーマ名

2

String

TABLE_CATALOG

常に空の文字列を返します。

8.7.69　getSchemaTerm()

(1)　機能

schemaに対する推奨用語を取得します。

(2)　形式

public synchronized String getSchemaTerm() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

"schema"が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.70　getSearchStringEscape()

(1)　機能

ワイルドカード文字をエスケープするために使用する文字列を取得します。

このメソッドを実行すると，表一覧や，列一覧などの一覧情報を取得するDatabaseMetaDataインタフェースのメソッドで，パターン文字列を指定する引数に指定するワイルドカード文字をエスケープするために使用する文字列を取得できます。

(2)　形式

public synchronized String getSearchStringEscape() throws SQLException

(3)　引数

なし。

(4)　戻り値

常に"¥"が返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.71　getSQLKeywords()

(1)　機能

データベース固有のSQLキーワードであり，かつSQL:2003のキーワードではないすべてのキーワードを，コンマで区切ったリストで取得します。

(2)　形式

public synchronized String getSQLKeywords() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

予約語については，マニュアルHADB　SQLリファレンスの予約語を参照してください。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

(6)　留意事項

このメソッドで返却する予約語には，削除した予約語も含まれるため，注意してください。

8.7.72　getSQLStateType()

(1)　機能

SQLExceptionクラスのgetSQLStateメソッドによって返されるSQLSTATEがX/Open（現在はOpen Group）のSQL CLIであるかSQL:2003であるかを取得します。

(2)　形式

public synchronized int getSQLStateType() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にsqlStateSQLが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.73　getStringFunctions()

(1)　機能

使用できる文字列関数をコンマで区切ったリストで取得します。

(2)　形式

public synchronized String getStringFunctions() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.74　getSuperTables(String catalog, String schemaPattern, String tableNamePattern)

(1)　機能

特定のスキーマで定義されているテーブル階層の情報を取得します。

(2)　形式

public synchronized ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。ただし，指定しても無視されます。

String tableNamePattern：

表名パターンを指定します。ただし，指定しても無視されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒67　返却されるResultSetオブジェクトの形式（getSuperTablesメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

カタログ名

2

String

TABLE_SCHEM

スキーマ名

3

String

TABLE_NAME

型名

4

String

SUPERTABLE_NAME

スーパタイプ名

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.75　getSuperTypes(String catalog, String schemaPattern, String typeNamePattern)

(1)　機能

特定のスキーマで定義されているユーザ定義型（UDT）階層の情報を取得します。

(2)　形式

public synchronized ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。ただし，指定しても無視されます。

String typeNamePattern：

UDT名パターンを指定します。ただし，指定しても無視されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒68　返却されるResultSetオブジェクトの形式（getSuperTypesメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

UDTのカタログ名

2

String

TABLE_SCHEM

UDTのスキーマ名

3

String

TABLE_NAME

UDTの型名

4

String

SUPERTYPE_CAT

直接のスーパタイプのカタログ名

5

String

SUPERTYPE_SCHEM

直接のスーパタイプのスキーマ名

6

String

SUPERTYPE_NAME

直接のスーパタイプのスーパタイプ名

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.76　getSystemFunctions()

(1)　機能

使用できるシステム関数をコンマで区切ったリストで取得します。

(2)　形式

public synchronized String getSystemFunctions() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.77　getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern)

(1)　機能

表に対するアクセス権限に関する情報を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できるアクセス権限の情報が変わります。権限と取得できる表の情報の対応については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターン※を指定します。

String tableNamePattern：

表名パターン※を指定します。

注※

各パターンに指定できる特殊文字については，「8.7.1　DatabaseMetaDataインタフェースのメソッド一覧」の「(4)　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒69　返却されるResultSetオブジェクトの形式（getTablePrivilegesメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

カタログ名

常に空文字を返します。

2

String

TABLE_SCHEM

スキーマ名

3

String

TABLE_NAME

表名

4

String

GRANTOR

アクセス権限の付与者

5

String

GRANTEE

アクセス権限の被付与者

6

String

PRIVILEGE

許可されているアクセス権限名を返します。

"SELECT"：SELECT権限

"INSERT"：INSERT権限

"UPDATE"：UPDATE権限

"DELETE"：DELETE権限

"TRUNCATE"：TRUNCATE権限

"REFERENCES"：REFERENCES権限

"IMPORT TABLE"：IMPORT TABLE権限

"REBUILD INDEX"：REBUILD INDEX権限

"GET COSTINFO"：GET COSTINFO権限

"EXPORT TABLE"：EXPORT TABLE権限

"MERGE CHUNK"：MERGE CHUNK権限

"CHANGE CHUNK COMMENT"：CHANGE CHUNK COMMENT権限

"CHANGE CHUNK STATUS"：CHANGE CHUNK STATUS権限

"ARCHIVE CHUNK"：ARCHIVE CHUNK権限

"UNARCHIVE CHUNK"：UNARCHIVE CHUNK権限

7

String

IS_GRANTABLE

アクセス権限の被付与者が，ほかのHADBユーザにアクセス権限を与えることができるかどうかを返します。

"YES"：ほかのHADBユーザにアクセス権限を与えられます。

"NO"：ほかのHADBユーザにアクセス権限を与えられません。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.78　getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

(1)　機能

表に関する情報を取得します。

このメソッドを実行したHADBユーザが持っている権限によって，取得できる表の情報が変わります。権限と取得できる表の情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

(2)　形式

public synchronized ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターン※を指定します。大文字と小文字は区別されます。

String tableNamePattern：

表名パターン※を指定します。大文字と小文字は区別されます。

String[] types：

表の型のリストを指定します。getTableTypesメソッドによって返却される表の型を指定します。大文字と小文字は区別されます。

nullを指定した場合，すべての表の種類が指定されたと仮定されます。

注※

各パターンに指定できる特殊文字については，「8.7.1　DatabaseMetaDataインタフェースのメソッド一覧」の「(4)　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

ResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒70　返却されるResultSetオブジェクトの形式（getTablesメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_CAT

常に空の文字列を返します。

2

String

TABLE_SCHEM

スキーマ名

3

String

TABLE_NAME

表名

4

String

TABLE_TYPE

表の種類

TABLE：実表

VIEW：ビュー表

SYSTEM TABLE：ディクショナリ表，またはシステム表

5

String

REMARKS

常に空の文字列を返します。

6

String

TYPE_CAT

常に空の文字列を返します。

7

String

TYPE_SCHEM

常に空の文字列を返します。

8

String

TYPE_NAME

常に空の文字列を返します。

9

String

SELF_REFERENCING_COL_NAME

常に空の文字列を返します。

10

String

REF_GENERATION

常に空の文字列を返します。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合

引数String[] typesの1つ以上の要素がnullである場合

引数String[] typesの1つ以上の要素が，次のすべての文字列に該当しない場合

"TABLE"，"VIEW"，"SYSTEM TABLE"

8.7.79　getTableTypes()

(1)　機能

表の種類を取得します。

(2)　形式

public synchronized ResultSet getTableTypes() throws SQLException

(3)　引数

なし。

(4)　戻り値

ResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒71　返却されるResultSetオブジェクトの形式（getTableTypesメソッドの場合）

列番号

型

列名

列の意味

1

String

TABLE_TYPE

表の種類

TABLE：実表

VIEW：ビュー表

SYSTEM TABLE：ディクショナリ表，およびシステム表

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.80　getTimeDateFunctions()

(1)　機能

使用できる時間関数と日付関数をコンマで区切ったリストで取得します。

(2)　形式

public synchronized String getTimeDateFunctions() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.81　getTypeInfo()

(1)　機能

標準SQLの型に関する情報を取得します。

(2)　形式

public synchronized ResultSet getTypeInfo() throws SQLException

(3)　引数

なし。

(4)　戻り値

ResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒72　返却されるResultSetオブジェクトの形式（getTypeInfoメソッドの場合）

列番号

型

列名

列の意味

1

String

TYPE_NAME

型名

2

short

DATA_TYPE

java.sql.TypesのSQLデータ型

3

int

PRECISION

最大の精度

4

String

LITERAL_PREFIX

リテラルを引用するのに使用する接頭辞

5

String

LITERAL_SUFFIX

リテラルを引用するのに使用する接尾辞

6

String

CREATE_PARAMS

型の作成に使用するパラメタ

7

short

NULLABLE

この型にナル値を使用できるかどうかを返します。

常にtypeNullableUnknownを返します。

8

boolean

CASE_SENSITIVE

大文字と小文字を区別するかどうかを返します。

true：文字列系データ型

false：そのほかのデータ型

9

short

SEARCHABLE

この型に"WHERE"を使用できるかどうかを返します。

常にtypeSearchableを返します。

10

boolean

UNSIGNED_ATTRIBUTE

符号なし属性かどうかを返します。

数値データは符号ありのためfalse，そのほかのデータ型は符号の有無に関係ないためfalseを返します。

11

boolean

FIXED_PREC_SCALE

通貨の値になれるかどうかを返します。

常にfalseを返します。

12

boolean

AUTO_INCREMENT

自動インクリメントの値に使用できるかどうかを返します。

常にfalseを返します。

13

String

LOCAL_TYPE_NAME

型名の地域対応されたバージョン

型名と同じものを返します。

14

short

MINIMUM_SCALE

サポートされる最小スケール

15

short

MAXIMUM_SCALE

サポートされる最大スケール

16

int

SQL_DATA_TYPE

常にナル値を返します。

17

int

SQL_DATETIME_SUB

常にナル値を返します。

18

int

NUM_PREC_RADIX

数値データは10，それ以外は0

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.82　getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types)

(1)　機能

ユーザ定義型（UDT）に関する情報を取得します。

(2)　形式

public synchronized ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schemaPattern：

スキーマ名パターンを指定します。大文字と小文字は区別されます。

String tableNamePattern：

表名パターンを指定します。大文字と小文字は区別されます。

int[] types：

ユーザ定義型のリストを指定します。大文字と小文字は区別されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒73　返却されるResultSetオブジェクトの形式（getUDTsメソッドの場合）

列番号

型

列名

列の意味

1

String

TYPE_CAT

カタログ名

2

String

TYPE_SCHEM

スキーマ名

3

String

TYPE_NAME

型名

4

String

CLASS_NAME

Javaのクラス名

5

int

DATA_TYPE

java.sql.Typesで定義されている型値

6

String

REMARKS

型に関する説明

7

short

BASE_TYPE

DISTINCT型のソースの型の型コード，またはjava.sql.Typesで定義される構造型のSELF_REFERENCING_COLUMNのユーザ生成参照型を実装する型の型コード

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.83　getURL()

(1)　機能

HADBサーバの接続先情報を指定したURLを取得します。

(2)　形式

public synchronized String getURL() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

接続先情報を指定したURLがない場合は，nullが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.84　getUserName()

(1)　機能

HADBサーバに接続した認可識別子を取得します。

(2)　形式

public synchronized String getUserName() throws SQLException

(3)　引数

なし。

(4)　戻り値

Stringオブジェクトが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.85　getVersionColumns(String catalog, String schema, String table)

(1)　機能

行の任意の値が変更された場合に，自動的に更新される表の列に関する記述を取得します。

(2)　形式

public synchronized ResultSet getVersionColumns(String catalog, String schema, String table) throws SQLException

(3)　引数

String catalog：

カタログ名を指定します。ただし，指定しても無視されます。

String schema：

スキーマ名を指定します。大文字と小文字は区別されます。

String table：

表名を指定します。大文字と小文字は区別されます。

(4)　戻り値

常に検索結果行数0のResultSetオブジェクトが返却されます。返却されるResultSetオブジェクトの形式を次の表に示します。

表8‒74　返却されるResultSetオブジェクトの形式（getVersionColumnsメソッドの場合）

列番号

型

列名

列の意味

1

short

SCOPE

未使用

2

String

COLUMN_NAME

列名

3

int

DATA_TYPE

SQL型

4

String

TYPE_NAME

型名

5

int

COLUMN_SIZE

精度

6

int

BUFFER_LENGTH

列値のバイト数

7

short

DECIMAL_DIGITS

小数点以下の桁数

8

short

PSEUDO_COLUMN

擬似列かどうか

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.86　insertsAreDetected(int type)

(1)　機能

ResultSetクラスのrowInsertedメソッドを呼び出すことによって可視の行が挿入されたことを検出できるかどうかを取得します。

(2)　形式

public synchronized boolean insertsAreDetected(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.87　isCatalogAtStart()

(1)　機能

完全修飾された表名の開始部分（または終了部分）にカタログが現れるかどうかを取得します。

(2)　形式

public synchronized boolean isCatalogAtStart() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.88　isReadOnly()

(1)　機能

読み取り専用モードかどうかを取得します。

(2)　形式

public synchronized boolean isReadOnly() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.89　locatorsUpdateCopy()

(1)　機能

LOBへの変更が，コピーに対して行われたのか，LOBに直接行われたのかを示します。

(2)　形式

public synchronized boolean locatorsUpdateCopy() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.90　nullPlusNonNullIsNull()

(1)　機能

ナル値と非ナル値の連結をナル値とするかどうかを取得します。

(2)　形式

public synchronized boolean nullPlusNonNullIsNull() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.91　nullsAreSortedAtEnd()

(1)　機能

ナル値が，終了時にソート順に関係なくソートされるかどうかを取得します。

(2)　形式

public synchronized boolean nullsAreSortedAtEnd() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.92　nullsAreSortedAtStart()

(1)　機能

ナル値が，開始時にソート順に関係なくソートされるかどうかを取得します。

(2)　形式

public synchronized boolean nullsAreSortedAtStart() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.93　nullsAreSortedHigh()

(1)　機能

ナル値が高位にソートされるかどうかを取得します。

(2)　形式

public synchronized boolean nullsAreSortedHigh() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.94　nullsAreSortedLow()

(1)　機能

ナル値が下位にソートされるかどうかを取得します。

(2)　形式

public synchronized boolean nullsAreSortedLow() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.95　othersDeletesAreVisible(int type)

(1)　機能

ほかで行われた削除が可視かどうかを取得します。

(2)　形式

public synchronized boolean othersDeletesAreVisible(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.96　othersInsertsAreVisible(int type)

(1)　機能

ほかで行われた挿入が可視かどうかを取得します。

(2)　形式

public synchronized boolean othersInsertsAreVisible(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.97　othersUpdatesAreVisible(int type)

(1)　機能

ほかで行われた更新が可視かどうかを取得します。

(2)　形式

public synchronized boolean othersUpdatesAreVisible(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.98　ownDeletesAreVisible(int type)

(1)　機能

結果セット自身の削除が可視かどうかを取得します。

(2)　形式

public synchronized boolean ownDeletesAreVisible(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.99　ownInsertsAreVisible(int type)

(1)　機能

結果セット自身の挿入が可視かどうかを取得します。

(2)　形式

public synchronized boolean ownInsertsAreVisible(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.100　ownUpdatesAreVisible(int type)

(1)　機能

結果セット自身の更新が可視かどうかを取得します。

(2)　形式

public synchronized boolean ownUpdatesAreVisible(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.101　storesLowerCaseIdentifiers()

(1)　機能

大文字と小文字が混在する二重引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，小文字で格納するかどうかを取得します。

(2)　形式

public synchronized boolean storesLowerCaseIdentifiers() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.102　storesLowerCaseQuotedIdentifiers()

(1)　機能

大文字と小文字が混在する二重引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，小文字で格納するかどうかを取得します。

(2)　形式

public synchronized boolean storesLowerCaseQuotedIdentifiers() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.103　storesMixedCaseIdentifiers()

(1)　機能

大文字と小文字が混在する二重引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，大文字と小文字混在で格納するかどうかを取得します。

(2)　形式

public synchronized boolean storesMixedCaseIdentifiers() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.104　storesMixedCaseQuotedIdentifiers()

(1)　機能

大文字と小文字が混在する二重引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，大文字と小文字混在で格納するかどうかを取得します。

(2)　形式

public synchronized boolean storesMixedCaseQuotedIdentifiers() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.105　storesUpperCaseIdentifiers()

(1)　機能

大文字と小文字が混在する二重引用符なしのSQL識別子を，大文字と小文字を区別しないで処理し，大文字で格納するかどうかを取得します。

(2)　形式

public synchronized boolean storesUpperCaseIdentifiers() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.106　storesUpperCaseQuotedIdentifiers()

(1)　機能

大文字と小文字が混在する二重引用符付きのSQL識別子を，大文字と小文字を区別しないで処理し，大文字で格納するかどうかを取得します。

(2)　形式

public synchronized boolean storesUpperCaseQuotedIdentifiers() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.107　supportsAlterTableWithAddColumn()

(1)　機能

列追加のあるALTER TABLEがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsAlterTableWithAddColumn() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.108　supportsAlterTableWithDropColumn()

(1)　機能

列削除のあるALTER TABLEがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsAlterTableWithDropColumn() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.109　supportsANSI92EntryLevelSQL()

(1)　機能

ANSI92エントリレベルのSQL文法がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsANSI92EntryLevelSQL() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.110　supportsANSI92FullSQL()

(1)　機能

ANSI92完全レベルのSQL文法がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsANSI92FullSQL() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.111　supportsANSI92IntermediateSQL()

(1)　機能

ANSI92中間レベルのSQL文法がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsANSI92IntermediateSQL() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.112　supportsBatchUpdates()

(1)　機能

バッチ更新がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsBatchUpdates() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.113　supportsCatalogsInDataManipulation()

(1)　機能

データ操作文でカタログ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsCatalogsInDataManipulation() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.114　supportsCatalogsInIndexDefinitions()

(1)　機能

インデクス定義文でカタログ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsCatalogsInIndexDefinitions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.115　supportsCatalogsInPrivilegeDefinitions()

(1)　機能

権限付与の定義文（GRANT文），または権限取り消しの定義文（REVOKE文）で，カタログ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.116　supportsCatalogsInProcedureCalls()

(1)　機能

プロシジャ呼び出し文でカタログ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsCatalogsInProcedureCalls() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.117　supportsCatalogsInTableDefinitions()

(1)　機能

表定義文でカタログ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsCatalogsInTableDefinitions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.118　supportsColumnAliasing()

(1)　機能

列の別名がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsColumnAliasing() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.119　supportsConvert()

(1)　機能

SQLの型間のCONVERT関数がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsConvert() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.120　supportsConvert(int fromType, int toType)

(1)　機能

指定されたSQLの型間のCONVERT関数がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsConvert(int fromType, int toType) throws SQLException

(3)　引数

int fromType：

変換元のSQL型（java.sql.TypesのSQL型）

int toType：

変換先のSQL型（java.sql.TypesのSQL型）

(4)　戻り値

次に示すどちらかの値が返却されます。

true：サポートしています。

false：サポートしていません。

変換元の型と変換先の型の組み合わせによる戻り値を次の表に示します。

表8‒75　変換元の型と変換先の型の組み合わせによる戻り値

（凡例）

○：true(サポート)

△：true(通算日変換としてサポート)

−：false(未サポート)

注※1

HADBサーバに対応するデータ型がありません。

注※2

対応するHADBサーバのデータ型については，「7.6.1　データ型のマッピング」の「(1)　HADBのデータ型とJDBCのSQLデータ型の対応」を参照してください。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.121　supportsCoreSQLGrammar()

(1)　機能

ODBC Core SQL文法がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsCoreSQLGrammar() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.122　supportsCorrelatedSubqueries()

(1)　機能

外への参照列を含む副問合せがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsCorrelatedSubqueries() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.123　supportsDataDefinitionAndDataManipulationTransactions()

(1)　機能

トランザクションで，データ定義文とデータ操作文の両方がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.124　supportsDataManipulationTransactionsOnly()

(1)　機能

トランザクションでデータ操作文だけがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsDataManipulationTransactionsOnly() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.125　supportsDifferentTableCorrelationNames()

(1)　機能

表相関名がサポートされている場合，表名と異なる名前であるという制限を付けるかどうかを取得します。

(2)　形式

public synchronized boolean supportsDifferentTableCorrelationNames() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.126　supportsExpressionsInOrderBy()

(1)　機能

ORDER BYリスト中で値式がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsExpressionsInOrderBy() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.127　supportsExtendedSQLGrammar()

(1)　機能

ODBC Extended SQL文法がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsExtendedSQLGrammar() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.128　supportsFullOuterJoins()

(1)　機能

完全な入れ子の外結合がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsFullOuterJoins() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.129　supportsGetGeneratedKeys()

(1)　機能

文が実行されたあとに自動生成キーを取得できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsGetGeneratedKeys() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.130　supportsGroupBy()

(1)　機能

GROUP BY句がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsGroupBy() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.131　supportsGroupByBeyondSelect()

(1)　機能

SELECT文中のすべての列がGROUP BY句に含まれるという条件で，このデータベースによって，GROUP BY句でSELECT文中にない列の使用がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsGroupByBeyondSelect() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.132　supportsGroupByUnrelated()

(1)　機能

GROUP BY句でSELECT文中にない列の使用がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsGroupByUnrelated() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.133　supportsIntegrityEnhancementFacility()

(1)　機能

SQL Integrity Enhancement Facilityがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsIntegrityEnhancementFacility() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.134　supportsLikeEscapeClause()

(1)　機能

LIKE述語のエスケープ句がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsLikeEscapeClause() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.135　supportsLimitedOuterJoins()

(1)　機能

外結合に関し，制限されたサポートが提供されるかどうかを取得します。

(2)　形式

public synchronized boolean supportsLimitedOuterJoins() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.136　supportsMinimumSQLGrammar()

(1)　機能

ODBC Minimum SQL文法がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsMinimumSQLGrammar() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.137　supportsMixedCaseIdentifiers()

(1)　機能

大文字と小文字が混在する二重引用符なしのSQL識別子を，大文字と小文字を区別して処理し，大文字と小文字混在で格納するかどうかを取得します。

(2)　形式

public synchronized boolean supportsMixedCaseIdentifiers() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.138　supportsMixedCaseQuotedIdentifiers()

(1)　機能

大文字と小文字が混在する二重引用符付きのSQL識別子を，大文字と小文字を区別して処理し，結果として大文字と小文字混在で格納するかどうかを取得します。

(2)　形式

public synchronized boolean supportsMixedCaseQuotedIdentifiers() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.139　supportsMultipleOpenResults()

(1)　機能

CallableStatementオブジェクトから同時に返された複数のResultSetオブジェクトを持つことが可能かどうかを取得します。

(2)　形式

public synchronized boolean supportsMultipleOpenResults() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.140　supportsMultipleResultSets()

(1)　機能

executeメソッドの単一の呼び出しからの複数のResultSetオブジェクトの取得がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsMultipleResultSets() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.141　supportsMultipleTransactions()

(1)　機能

一度に複数のトランザクションを（異なった接続で）オープンできるかどうかを取得します。

(2)　形式

public synchronized boolean supportsMultipleTransactions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.142　supportsNamedParameters()

(1)　機能

CALL文への名前付きパラメタがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsNamedParameters() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.143　supportsNonNullableColumns()

(1)　機能

列を非ナル値として定義できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsNonNullableColumns() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.144　supportsOpenCursorsAcrossCommit()

(1)　機能

コミット間でカーソルがオープンされたままの状態がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsOpenCursorsAcrossCommit() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.145　supportsOpenCursorsAcrossRollback()

(1)　機能

ロールバック間でカーソルがオープンされたままの状態がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsOpenCursorsAcrossRollback() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.146　supportsOpenStatementsAcrossCommit()

(1)　機能

コミット間で文ハンドルがオープンされたままの状態がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsOpenStatementsAcrossCommit() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.147　supportsOpenStatementsAcrossRollback()

(1)　機能

ロールバック間で文ハンドルがオープンされたままの状態がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsOpenStatementsAcrossRollback() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.148　supportsOrderByUnrelated()

(1)　機能

ORDER BY句でSELECT文中にない列の使用がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsOrderByUnrelated() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.149　supportsOuterJoins()

(1)　機能

外結合が何らかの形式でサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsOuterJoins() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.150　supportsPositionedDelete()

(1)　機能

位置指定されたDELETE文がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsPositionedDelete() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.151　supportsPositionedUpdate()

(1)　機能

位置指定されたUPDATE文がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsPositionedUpdate() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.152　supportsRefCursors()

(1)　機能

データベースがREF CURSORをサポートしているかどうかを取得します。

(2)　形式

public synchronized boolean supportsRefCursors() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.153　supportsResultSetConcurrency(int type, int concurrency)

(1)　機能

指定した結果セットタイプと並行処理タイプの組み合わせをサポートしているかどうかを返します。

(2)　形式

public synchronized boolean supportsResultSetConcurrency(int type, int concurrency) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

int concurrency：

並行処理タイプを指定します。

(4)　戻り値

boolean型：

次に示すどちらかの値が返却されます。

true：サポートしています。

false：サポートしていません。

typeがResultSet.TYPE_FORWARD_ONLYまたはResultSet.TYPE_SCROLL_INSENSITIVE，かつconcurrencyがResultSet.CONCUR_READ_ONLYの場合，trueが返却されます。それ以外の場合はfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.154　supportsResultSetHoldability(int holdability)

(1)　機能

指定されたResultSetオブジェクトの保持機能がサポートされているかどうかを返します。

(2)　形式

public synchronized boolean supportsResultSetHoldability(int holdability) throws SQLException

(3)　引数

int holdability：

次に示すどちらかの値を指定します。

ResultSet.HOLD_CURSORS_OVER_COMMIT

Connection.commitメソッドが呼び出されたときにResultSetオブジェクトがクローズされません。

ResultSet.CLOSE_CURSORS_AT_COMMIT

Connection.commitメソッドが呼び出されたときにResultSetオブジェクトがクローズされます。

(4)　戻り値

boolean型：

true：サポートしています。

false：サポートしていません。

holdabilityにResultSet.HOLD_CURSORS_OVER_COMMITが指定された場合は，trueが返却されます。それ以外の場合は，falseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.155　supportsResultSetType(int type)

(1)　機能

指定した結果セットタイプがサポートされているかどうかを返します。

(2)　形式

public synchronized boolean supportsResultSetType(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

(4)　戻り値

boolean型：

次に示すどちらかの値が返却されます。

true：サポートしています。

false：サポートしていません。

typeにResultSet.TYPE_FORWARD_ONLYまたはResultSet.TYPE_SCROLL_INSENSITIVEを指定した場合は，trueが返却されます。それ以外の場合は，falseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.156　supportsSavepoints()

(1)　機能

セーブポイントがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsSavepoints() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.157　supportsSchemasInDataManipulation()

(1)　機能

データ操作文でスキーマ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsSchemasInDataManipulation() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.158　supportsSchemasInIndexDefinitions()

(1)　機能

インデクス定義文でスキーマ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsSchemasInIndexDefinitions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.159　supportsSchemasInPrivilegeDefinitions()

(1)　機能

権限付与の定義文（GRANT文），または権限取り消しの定義文（REVOKE文）で，スキーマ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsSchemasInPrivilegeDefinitions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.160　supportsSchemasInProcedureCalls()

(1)　機能

プロシジャ呼び出し文でスキーマ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsSchemasInProcedureCalls() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.161　supportsSchemasInTableDefinitions()

(1)　機能

表定義文でスキーマ名を使用できるかどうかを取得します。

(2)　形式

public synchronized boolean supportsSchemasInTableDefinitions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.162　supportsSelectForUpdate()

(1)　機能

SELECT FOR UPDATE文がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsSelectForUpdate() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.163　supportsStatementPooling()

(1)　機能

文ハンドルのプールがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsStatementPooling() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.164　supportsStoredFunctionsUsingCallSyntax()

(1)　機能

ストアドプロシジャエスケープ構文を使用したユーザ定義関数，またはベンダ関数の呼び出しをサポートするかどうかを取得します。

(2)　形式

public synchronized boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.165　supportsStoredProcedures()

(1)　機能

ストアドプロシジャエスケープ構文を使用するストアドプロシジャ呼び出しがサポートされているかどうかを判定します。

(2)　形式

public synchronized boolean supportsStoredProcedures() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.166　supportsSubqueriesInComparisons()

(1)　機能

比較述語で副問合せがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsSubqueriesInComparisons() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.167　supportsSubqueriesInExists()

(1)　機能

EXISTS述語で副問合せがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsSubqueriesInExists() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.168　supportsSubqueriesInIns()

(1)　機能

IN述語で副問合せがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsSubqueriesInIns() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.169　supportsSubqueriesInQuantifieds()

(1)　機能

限定述語で副問合せがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsSubqueriesInQuantifieds() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.170　supportsTableCorrelationNames()

(1)　機能

表の相関名がサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsTableCorrelationNames() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.171　supportsTransactionIsolationLevel(int level)

(1)　機能

指定したトランザクション隔離性水準がサポートされているかどうかを返します。

(2)　形式

public synchronized boolean supportsTransactionIsolationLevel(int level) throws SQLException

(3)　引数

int level：

トランザクション隔離性水準を指定します。

(4)　戻り値

boolean型：

true：サポートしています。

false：サポートしていません。

levelにConnection.TRANSACTION_READ_COMMITTEDまたはConnection.TRANSACTION_REPEATABLE_READを指定した場合は，trueが返却されます。それ以外の場合は，falseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.172　supportsTransactions()

(1)　機能

トランザクションがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsTransactions() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.173　supportsUnion()

(1)　機能

SQL UNIONがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsUnion() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.174　supportsUnionAll()

(1)　機能

SQL UNION ALLがサポートされているかどうかを取得します。

(2)　形式

public synchronized boolean supportsUnionAll() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にtrueが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.175　updatesAreDetected(int type)

(1)　機能

ResultSetクラスのrowUpdatedメソッドを呼び出すことによって可視の行が更新されたことを検出できるかどうかを取得します。

(2)　形式

public synchronized boolean updatesAreDetected(int type) throws SQLException

(3)　引数

int type：

結果セットタイプを指定します。

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.176　usesLocalFilePerTable()

(1)　機能

各表にファイルを使用するかどうかを取得します。

(2)　形式

public synchronized boolean usesLocalFilePerTable() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.7.177　usesLocalFiles()

(1)　機能

ローカルファイルに表を格納するかどうかを取得します。

(2)　形式

public synchronized boolean usesLocalFiles() throws SQLException

(3)　引数

なし。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

このメソッドを実行する前に，Connectionオブジェクトがクローズされている場合，SQLExceptionが投入されます。

8.8　ResultSetMetaDataインタフェース

ここでは，ResultSetMetaDataインタフェースで提供されているメソッドについて説明します。

8.8.1　ResultSetMetaDataインタフェースのメソッド一覧

(1)　ResultSetMetaDataインタフェースの主な機能

ResultSetMetaDataインタフェースでは，主に次の機能が提供されています。

ResultSet（結果セット）の各列に対する，データ型およびデータ長などのメタ情報の返却

(2)　HADBでサポートしているResultSetMetaDataインタフェースのメソッド

HADBでサポートしているResultSetMetaDataインタフェースのメソッドの一覧を次の表に示します。

表8‒76　ResultSetMetaDataインタフェースのメソッドの一覧

項番

ResultSetMetaDataインタフェースのメソッド

機能

1

getCatalogName(int column)

指定した列の表のカタログ名を取得します。

2

getColumnClassName(int column)

列のデータ型に対するJavaクラスの完全指定された名前を取得します。

3

getColumnCount()

ResultSetオブジェクトの列数を取得します。

4

getColumnDisplaySize(int column)

指定した列の通常の最大幅を文字数で返します。

5

getColumnLabel(int column)

印刷や表示に使用する列の推奨タイトルを取得します。

6

getColumnName(int column)

指定した列の名称を取得します。

7

getColumnType(int column)

指定した列のSQLデータ型を取得します。

8

getColumnTypeName(int column)

指定した列のデータ型を取得します。

9

getPrecision(int column)

指定した列の桁数を取得します。

10

getScale(int column)

指定した列の小数点以下の桁数を取得します。

11

getSchemaName(int column)

指定した列のスキーマ名を取得します。

12

getTableName(int column)

指定した列の表名を取得します。

13

isAutoIncrement(int column)

指定した列が自動的に番号付けされて読み取り専用として扱われるかどうかを返します。

14

isCaseSensitive(int column)

指定した列が大文字と小文字を区別するかどうかを返します。

15

isCurrency(int column)

指定した列が通貨の値かどうかを返します。

16

isDefinitelyWritable(int column)

指定した列への書き込みが必ず成功するかどうかを返します。

17

isNullable(int column)

指定した列にナル値をセットできるかどうかを返します。

18

isReadOnly(int column)

指定した列が読み取り専用でないかどうかを返します。

19

isSearchable(int column)

指定した列がwhere句に指定できるかどうかを返します。

20

isSigned(int column)

指定した列の値が，符号付き数値かどうかを返します。

21

isWritable(int column)

指定した列への書き込みを成功させることができるかどうかを返します。

重要

この表に記載されていないメソッドは，HADBではサポートしていません。サポートしていないメソッドを実行すると，SQLExceptionが投入されることがあります。

(3)　必要なパッケージ名称とクラス名称

ResultSetMetaDataインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbResultSetMetaData

8.8.2　getCatalogName(int column)

(1)　機能

指定した列の表のカタログ名を取得します。

(2)　形式

public synchronized String getCatalogName(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

Stringオブジェクトが返却されます。

常に空の文字列が返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.3　getColumnClassName(int column)

(1)　機能

列のデータ型に対するJavaクラスの完全指定された名前を取得します。

(2)　形式

public synchronized String getColumnClassName(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

Stringオブジェクトが返却されます。

列に対してResultSetオブジェクトのgetObjectメソッドを実行した結果，返却するJavaクラスの型をString型で返します。列のデータ型と返却値を次の表に示します。

表8‒77　getColumnClassNameメソッドを実行して返却される文字列

列のデータ型（HADBのデータ型）

返却される文字列

INTEGER

"java.lang.Long"

SMALLINT

"java.lang.Integer"

"java.lang.Short"※

DOUBLE PRECISION，FLOAT

"java.lang.Double"

DECIMAL，NUMERIC

"java.math.BigDecimal"

CHAR

"java.lang.String"

VARCHAR

"java.lang.String"

DATE

"java.sql.Date"

TIME

"java.sql.Time"

TIMESTAMP

"java.sql.Timestamp"

BINARY

"java.lang.Object"

VARBINARY

"java.lang.Object"

ROW

"java.lang.Object"

BOOLEAN（DatabaseMetaDataから生成したResultSetにだけ存在する列）

"java.lang.Boolean"

注※

DatabaseMetaDataから生成したResultSetにだけ存在する列で，データ型がshortで規定されている列の場合，この値が返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.4　getColumnCount()

(1)　機能

ResultSetオブジェクトの列数を取得します。

(2)　形式

public synchronized int getColumnCount() throws SQLException

(3)　引数

なし。

(4)　戻り値

ResultSetオブジェクトの列数が返却されます。

(5)　発生する例外

なし。

8.8.5　getColumnDisplaySize(int column)

(1)　機能

指定した列の通常の最大幅を文字数で返します。

(2)　形式

public synchronized int getColumnDisplaySize(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

最大文字数が返却されます。getColumnDisplaySizeメソッドの戻り値を次の表に示します。

表8‒78　getColumnDisplaySizeメソッドの戻り値

列のデータ型（HADBのデータ型）

戻り値（最大文字数）

INTEGER

20

SMALLINT

11

6※1

DOUBLE PRECISION

FLOAT

23

DECIMAL(m,n)

NUMERIC(m,n)

m＋2

CHAR(n)

VARCHAR(n)

n

DATE

10

TIME(p)

p＝0の場合：8

p＞0の場合：8＋（n＋1）

TIMESTAMP(p)

p＝0の場合：19

p＞0の場合：19＋（n＋1）

BINARY(n)

VARBINARY(n)

n×2

ROW

行長※2

BOOLEAN（DatabaseMetaDataから生成したResultSetにだけ存在する列）

5

注※1

DatabaseMetaDataから生成したResultSetにだけ存在する列で，データ型がshortで規定されている列の場合，この値が返却されます。

注※2

各列のデータ長の総和になります。各列のデータ長の求め方については，マニュアルHADB　SQLリファレンスのデータ型の種類を参照してください。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.6　getColumnLabel(int column)

(1)　機能

印刷や表示に使用する列の推奨タイトルを取得します。

(2)　形式

public synchronized String getColumnLabel(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

Stringオブジェクトが返却されます。

ResultSetMetaDataオブジェクトのgetColumnNameでの返却値と同じ値（列名）が返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.7　getColumnName(int column)

(1)　機能

指定した列の名称を取得します。

(2)　形式

public synchronized String getColumnName(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

Stringオブジェクトが返却されます。

HADBサーバから送られる列名情報から，検索結果列の名称を取得して返します。検索結果列の名称については，マニュアルHADB　SQLリファレンスのSELECT文の指定形式および規則の規則を参照してください。

Arrayオブジェクトから取得したResultSetクラスの1列目は，JDBCドライバが生成する列であり，列名として"JDBC_Array_Index"を返します。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.8　getColumnType(int column)

(1)　機能

指定した列のSQLデータ型を取得します。

(2)　形式

public synchronized int getColumnType(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

java.sql.TypesからのSQL型が返却されます。

列のデータ型と返却値の対応については，「7.6.1　データ型のマッピング」の「(1)　HADBのデータ型とJDBCのSQLデータ型の対応」を参照してください。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.9　getColumnTypeName(int column)

(1)　機能

指定した列のデータ型を取得します。

(2)　形式

public synchronized String getColumnTypeName(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

Stringオブジェクトが返却されます。getColumnTypeNameメソッドの戻り値を次の表に示します。

表8‒79　getColumnTypeNameメソッドの戻り値

列のデータ型（HADBのデータ型）

戻り値（返却される文字列）

INTEGER

"INTEGER"

SMALLINT

"SMALLINT"※

DECIMAL，NUMERIC

"DECIMAL"

CHAR

"CHAR"

DOUBLE PRECISION，FLOAT

"DOUBLE PRECISION"

VARCHAR

"VARCHAR"

DATE

"DATE"

TIME

"TIME"

TIMESTAMP

"TIMESTAMP"

BINARY

"BINARY"

VARBINARY

"VARBINARY"

ROW

"ROW"

BOOLEAN（DatabaseMetaDataから生成したResultSetにだけ存在する列）

"BOOLEAN"

注※

DatabaseMetaDataから生成したResultSetにだけ存在する列で，データ型がshortで規定されている列の場合，この値が返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.10　getPrecision(int column)

(1)　機能

指定した列の桁数を取得します。

(2)　形式

public synchronized int getPrecision(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

列の桁数が10進数で返却されます。指定した列が数データ型の場合は，桁数が返却されます。指定した列が数データ型でない場合は，列長がバイト単位で返却されます。getPrecisionメソッドの戻り値を次の表に示します。

表8‒80　getPrecisionメソッドの戻り値

列のデータ型（HADBのデータ型）

戻り値（列の桁数）

INTEGER

19

SMALLINT

10

5※1

DOUBLE PRECISION

FLOAT

17

DECIMAL(m,n)

NUMERIC(m,n)

m

CHAR(n)

VARCHAR(n)

n

DATE

10

TIME(p)

p＝0の場合：8

p＞0の場合：8＋（n＋1）

TIMESTAMP(p)

p＝0の場合：19

p＞0の場合：19＋（n＋1）

BINARY(n)

VARBINARY(n)

n

ROW

行長※2

BOOLEAN（DatabaseMetaDataから生成したResultSetにだけ存在する列）

1

注※1

DatabaseMetaDataから生成したResultSetにだけ存在する列で，データ型がshortで規定されている列の場合，この値が返却されます。

注※2

各列のデータ長の総和になります。各列のデータ長の求め方については，マニュアルHADB　SQLリファレンスのデータ型の種類を参照してください。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.11　getScale(int column)

(1)　機能

指定した列の小数点以下の桁数を取得します。

(2)　形式

public synchronized int getScale(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

小数点以下の桁数が10進数で返却されます。getScaleメソッドの戻り値を次の表に示します。

表8‒81　getScaleメソッドの戻り値

列のデータ型（HADBのデータ型）

戻り値（小数点以下の桁数）

DECIMAL(m,n)

NUMERIC(m,n)

n

TIME(p)

TIMESTAMP(p)

p

上記以外

0

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.12　getSchemaName(int column)

(1)　機能

指定した列のスキーマ名を取得します。

(2)　形式

public synchronized String getSchemaName(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

Stringオブジェクトが返却されます。

常に空の文字列が返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.13　getTableName(int column)

(1)　機能

指定した列の表名を取得します。

(2)　形式

public synchronized String getTableName(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

Stringオブジェクトが返却されます。

常に空の文字列が返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.14　isAutoIncrement(int column)

(1)　機能

指定した列が自動的に番号付けされて読み取り専用として扱われるかどうかを返します。

(2)　形式

public synchronized boolean isAutoIncrement(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.15　isCaseSensitive(int column)

(1)　機能

指定した列が大文字と小文字を区別するかどうかを返します。

(2)　形式

public synchronized boolean isCaseSensitive(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.16　isCurrency(int column)

(1)　機能

指定した列が通貨の値かどうかを返します。

(2)　形式

public synchronized boolean isCurrency(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.17　isDefinitelyWritable(int column)

(1)　機能

指定した列への書き込みが必ず成功するかどうかを返します。

(2)　形式

public synchronized boolean isDefinitelyWritable(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.18　isNullable(int column)

(1)　機能

指定した列にナル値をセットできるかどうかを返します。

(2)　形式

public synchronized int isNullable(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

次に示すどちらかの値が返却されます。

ResultSetMetaData.columnNoNulls：ナル値をセットできません。

ResultSetMetaData.columnNullable：ナル値をセットできます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.19　isReadOnly(int column)

(1)　機能

指定した列が読み取り専用でないかどうかを返します。

(2)　形式

public synchronized boolean isReadOnly(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.20　isSearchable(int column)

(1)　機能

指定した列がwhere句に指定できるかどうかを返します。

(2)　形式

public synchronized boolean isSearchable(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

次に示すどちらかの値が返却されます。

true：

where句に指定できます。

false：

where句に指定できません。

DatabaseMetaDataインタフェースで生成したResultSetオブジェクトの場合は，falseが返却されます。そうでない場合は，trueが返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.21　isSigned(int column)

(1)　機能

指定した列の値が，符号付き数値かどうかを返します。

(2)　形式

public synchronized boolean isSigned(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

次に示すどちらかの値が返却されます。

true：

符号付き数値です。

false：

符号付き数値ではありません。

パラメタのデータ型と戻り値の関係を次の表に示します。

表8‒82　パラメタのデータ型と戻り値の関係

パラメタのデータ型

戻り値

INTEGER，SMALLINT，DOUBLE PRECISION，FLOAT，DECIMAL，NUMERIC

true

上記以外

false

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.8.22　isWritable(int column)

(1)　機能

指定した列への書き込みを成功させることができるかどうかを返します。

(2)　形式

public synchronized boolean isWritable(int column) throws SQLException

(3)　引数

int column：

1から始まる列番号を指定します。

(4)　戻り値

常にfalseが返却されます。

(5)　発生する例外

columnに指定した値が0以下，または列数より大きい場合，SQLExceptionが投入されます。

8.9　SQLExceptionインタフェース

SQLExceptionは，java.sqlパッケージのSQLExceptionクラスを直接利用します。SQLExceptionインタフェースが提供する各メソッドの詳細，使用方法については，JavaSoftが提供するJDBC関連ドキュメントを参照してください。

8.10　SQLWarningインタフェース

SQLWarningインタフェースでは，データベースアクセスの警告に関する情報を提供します。

SQLWarningオブジェクトは，警告が報告される原因となったメソッドのオブジェクトに，例外での通知なしで蓄積されます。

8.10.1　SQLWarningオブジェクトの生成

SQLの実行で発生した警告を，JDBCドライバ内で保持するよう指定している場合，SQLWarningオブジェクトを生成し，警告情報を保持します。

警告保持指定は，URLまたはユーザプロパティのsqlwarningkeep，setSQLWarningKeepメソッドで指定できます。

8.10.2　SQLWarningオブジェクトの解放

SQLWarningオブジェクトは，警告が報告される原因となったメソッドのオブジェクト（Connection，Statement，PreparedStatement，およびResultSet）から，チェーンによって蓄積されます。

蓄積されたSQLWarningオブジェクトを明示的に解放するには，警告が報告される原因となったメソッドのオブジェクトに対してclearWarningsメソッドを実行してください。

8.11　サポートしていないインタフェース

HADBでは，次に示すインタフェースはサポートしていません。

Array

Blob

CallableStatement

Clob

Savepoint

SQLData

SQLInput

SQLOutput

9　JDBC 2.1 コアAPI

この章では，JDBC 2.1 コアAPIで追加された機能のHADBでのサポート範囲について説明します。

9.1　結果セットの拡張機能のサポート範囲

JDBC 2.1 コアAPIの結果セット（ResultSetクラス）の拡張機能に対するHADBでのサポート範囲を次の表に示します。

表9‒1　JDBC 2.1 コアAPIの結果セット（ResultSetクラス）の拡張機能に対するHADBでのサポート範囲

結果セット（ResultSetクラス）の拡張機能名

HADBでのサポート範囲

スクロールタイプ

順方向専用型

○

スクロール非反映型

○

スクロール反映型

×

並行処理タイプ

読み取り専用型

○

更新可能型

×

（凡例）

○：HADBでサポートしています。

×：HADBではサポートしていません。

重要

サポート対象外のスクロールタイプや並行処理タイプが指定されても，エラーにはなりません。指定されたスクロールタイプや並行処理タイプに最も近い結果セットを仮定して，Statementクラスまたはそのサブクラスのインスタンスを生成します。この場合，警告（SQLWarningオブジェクト）を生成して，Connectionクラスのインスタンスに関連づけます。

スクロール型結果セットでは，すべての検索データをJDBCドライバ内でキャッシングするため，データ量が多いとメモリ不足や性能低下が起こるおそれがあります。したがって，スクロール型結果セットを使用する場合は，SQL文に条件を付加するなどして，検索データ量を抑えるようにしてください。

9.2　バッチ更新機能のサポート範囲

StatementクラスおよびPreparedStatementクラスのバッチ更新機能のHADBでのサポート範囲について説明します。

9.2.1　バッチ更新機能を使用できるSQL文

バッチ更新機能を使用できるSQL文を次に示します。

定義系SQL

DELETE文

INSERT文

PURGE CHUNK文

TRUNCATE TABLE文

UPDATE文

なお，次のSQL文を指定した場合，executeBatchメソッドまたはexecuteLargeBatchメソッドの実行時にBatchUpdateExceptionが投入されます。

SELECT文

？パラメタを指定したPURGE CHUNK文

9.2.2　Statementクラスでのバッチ更新機能

Statementクラスでのバッチ更新の留意点を次に示します。

複数のSQL文を，addBatchメソッドで登録します。

登録したSQL文を，executeBatchメソッドまたはexecuteLargeBatchメソッドで一括して実行します。

一括実行の結果として，それぞれのSQL文で更新された行数の配列を返却します。

一括実行の途中でエラーが発生した場合，BatchUpdateExceptionが投入されます。

9.2.3　PreparedStatementクラスでのバッチ更新機能

PreparedStatementクラスでのバッチ更新の留意点を次に示します。

PreparedStatementインスタンス生成時に指定したSQL文に対する？パラメタを，通常の手順（setXXXメソッド）で設定します。

addBatchメソッドで？パラメタのセットを登録します。

登録した複数セットの？パラメタを，executeBatchメソッドまたはexecuteLargeBatchメソッドで一括して実行します。

一括実行の結果として，それぞれの？パラメタのセットで更新した行数の配列が返却されます。

一括実行の途中でエラーが発生した場合，BatchUpdateExceptionが投入されます。

9.2.4　注意事項

(1)　暗黙的コミットの実行

SQL文のバッチ更新機能を使用する際，次に示すSQL文をaddBatchすると，そのSQL文が実行されたときにHADBサーバが暗黙的にコミットを実行するため，注意が必要です。

定義系SQL

PURGE CHUNK文

TRUNCATE TABLE文

(2)　パラメタと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();

このAPを実行すると，パラメタとSQL文のaddBatchが混在しているため，各addBatch単位でのSQL実行となります。そのため，次のAPを実行した場合と同じ結果となります。

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クラスの自動コミットモードを無効にすることを推奨します。

メモ

パラメタとSQL文の混在時は逐次実行になりますが，自動コミットモードが有効の場合は，実行単位ごとにコミットが暗黙的に実行されます。そのため，バッチ更新の途中でエラーが発生すると，エラーが発生した直前までがコミットされた状態になり，どの時点までコミットされたかを認識できないので，自動コミットモードを無効にすることを推奨しています。

(3)　addBatchメソッドを使用して多数のパラメタを登録する場合

addBatchメソッドを使用して登録したすべてのパラメタは，executeBatchメソッドまたはexecuteLargeBatchメソッドが実行されるまでJDBCドライバ内に保存されます。そのため，多数のパラメタを登録する際は，メモリ使用量に注意してください。

(4)　例外BatchUpdateExceptionで通知する更新カウント

バッチ更新実行時に発生する例外BatchUpdateExceptionの，getUpdateCountsメソッドの戻り値で通知する更新カウントの内容を次に示します。

実行したSQL数と要素数が等しい配列

各配列要素には更新行数を設定

ただし，例外発生時に内部的にロールバックが行われた場合，要素数0の配列を返却します。

更新カウントの例を次に示します。

■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メソッドで返却する更新カウントの内容を次に示します。

要素数1の配列

要素0の値：更新行数

更新行数がInteger.MAX_VALUEを超える可能性がある場合は，executeBatchメソッドではなく，executeLargeBatchメソッドを使用してください。また，getUpdateCountsメソッドではなく，getLargeUpdateCountsメソッドを使用してください。

(5)　バッチ更新時のキャンセル

一括実行中にキャンセルを受け付けると，そのときまでに実行されたSQL文の結果は基本的にロールバックされます。ただし，次に示す範囲のSQL文はコミットされた状態になります。

自動コミットモードを有効にしている場合：最後に正常終了したSQL文まで

自動コミットモードを無効にしている場合：最後に正常終了した，暗黙的コミットを行うSQL文まで

9.3　追加されたデータ型

JDBC 2.1 コアAPIでは，幾つかの新たなJDBC SQLタイプが追加されました。次のJDBC SQLタイプが追加されましたが，JDBCドライバでは使用できません。

BLOB

CLOB

ARRAY

REF

DISTINCT

STRUCT

JAVA OBJECT

9.4　サポートしていないインタフェース

HADBでは，次に示すインタフェースはサポートしていません。

Array

Blob

Clob

Ref

SQLData

SQLInput

SQLOutput

Struct

10　JDBC 2.0 Optional Package

この章では，JDBC 2.0 Optional Packageの各インタフェースとメソッドについて説明します。

10.1　JDBC 2.0 Optional Packageの追加機能に対するHADBでのサポート範囲

JDBC 2.0 Optional Packageの追加機能に対するHADBでのサポート範囲を次の表に示します。

表10‒1　JDBC 2.0 Optional Packageの追加機能に対するHADBでのサポート範囲

JDBC 2.0 Optional Packageの追加機能

対応するインタフェース

HADBでのサポート範囲

JNDI対応

DataSource

○

接続プール

ConnectionPoolDataSource

○

PooledConnection

○

RowSets

RowSet

×

RowSetInternal

×

RowSetListner

×

RowSetMetaData

×

RowSetReader

×

（凡例）

○：HADBでサポートしています。

×：HADBではサポートしていません。

なお，上記の表に記載しているインタフェースのほかに，HADB独自の接続情報設定および取得に関するメソッドがあります。詳細については，「10.5　接続情報設定および取得インタフェース」を参照してください。

10.2　DataSourceインタフェース

ここでは，DataSourceインタフェースで提供されているメソッドについて説明します。

10.2.1　DataSourceインタフェースのメソッド一覧

HADBでサポートしているDataSourceインタフェースのメソッドの一覧を次の表に示します。

表10‒2　DataSourceインタフェースのメソッドの一覧

項番

DataSourceインタフェースのメソッド

機能

1

getConnection()

HADBサーバへの接続を行います。

2

getConnection(String username, String password)

3

getLoginTimeout()

setLoginTimeoutメソッドで設定した値（HADBサーバへの接続処理のタイムアウト時間）を取得します。

4

getLogWriter()

DataSourceオブジェクトのログライターを取得します。

5

setLoginTimeout(int seconds)

HADBサーバへの接続処理のタイムアウト時間（単位：秒）を設定します。

6

setLogWriter(PrintWriter out)

DataSourceオブジェクトのログライターを設定します。

DataSourceインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbDataSource

10.2.2　getConnection()

(1)　機能

HADBサーバへの接続を行います。

DataSourceオブジェクトに設定したHADBサーバへの接続情報に従って，HADBサーバへの接続を行い，Connectionオブジェクトを返却します。

HADBサーバへの接続情報の指定には優先順位があります。優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

なお，getConnectionメソッドを実行するにはCONNECT権限が必要です。

(2)　形式

public synchronized Connection getConnection() throws SQLException

(3)　引数

なし。

(4)　戻り値

Connectionオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

データベースのアクセスエラーが発生した場合

HADBサーバへの接続情報の指定内容が不正な場合

10.2.3　getConnection(String username, String password)

(1)　機能

HADBサーバへの接続を行います。

DataSourceオブジェクトに設定したHADBサーバへの接続情報と，引数に指定した接続情報に従って，HADBサーバへの接続を行い，Connectionオブジェクトを返却します。

HADBサーバへの接続情報の指定には優先順位があります。優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

なお，getConnectionメソッドを実行するにはCONNECT権限が必要です。

(2)　形式

public synchronized Connection getConnection(String username, String password) throws SQLException

(3)　引数

String username：

HADBサーバに接続する認可識別子を指定します。

String password：

HADBサーバに接続する認可識別子のパスワードを指定します。

usernameまたはpasswordにnullを指定した場合，認可識別子またはパスワードが指定されていないと見なされます。また，passwordに長さ0の文字列を指定した場合も，パスワードが指定されていないと見なされます。

(4)　戻り値

Connectionオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

データベースのアクセスエラーが発生した場合

HADBサーバへの接続情報の指定内容が不正な場合

usernameに指定した認可識別子が長さ0の文字列の場合

10.2.4　getLoginTimeout()

(1)　機能

setLoginTimeoutメソッドで設定した値（HADBサーバへの接続処理のタイムアウト時間）を取得します。

(2)　形式

public synchronized int getLoginTimeout()

(3)　引数

なし。

(4)　戻り値

setLoginTimeoutメソッドで設定した値（HADBサーバへの接続処理のタイムアウト時間）が返却されます。setLoginTimeoutメソッドでタイムアウト時間を設定していない場合は，0が返却されます。

(5)　発生する例外

なし。

10.2.5　getLogWriter()

(1)　機能

DataSourceオブジェクトのログライターを取得します。

(2)　形式

public synchronized PrintWriter getLogWriter() throws SQLException

(3)　引数

なし。

(4)　戻り値

DataSourceオブジェクトのログライターが返却されます。ログライターが設定されていない場合は，nullが返却されます。

(5)　発生する例外

なし。

10.2.6　setLoginTimeout(int seconds)

(1)　機能

HADBサーバへの接続処理のタイムアウト時間（単位：秒）を設定します。

getConnectionメソッドを実行してHADBサーバに接続する際に，ここで設定したタイムアウト時間が適用されます。

(2)　形式

public synchronized void setLoginTimeout(int seconds) throws SQLException

(3)　引数

int seconds：

HADBサーバへの接続処理のタイムアウト時間（単位：秒）を0〜300の範囲で指定します。

0を指定した場合，システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_clt_rpc_con_wait_timeの値が仮定されます。adb_clt_rpc_con_wait_timeを指定していない場合は，adb_clt_rpc_con_wait_timeのデフォルト値が仮定されます。

(4)　戻り値

なし。

(5)　発生する例外

secondsに不正な値（0未満または301以上の値）を指定した場合，SQLExceptionが投入されます。

(6)　留意事項

HADBサーバへの接続処理のタイムアウト時間は，各プロパティやメソッドなど複数の個所で設定できます。実際に適用されるHADBサーバへの接続処理のタイムアウト時間の優先順位については，「7.3.3　接続情報の優先順位」の「(1)　HADBサーバへの接続時に必要となる接続情報」を参照してください。

10.2.7　setLogWriter(PrintWriter out)

(1)　機能

DataSourceオブジェクトのログライターを設定します。

(2)　形式

public synchronized void setLogWriter(PrintWriter out) throws SQLException

(3)　引数

PrintWriter out：

ログライターを指定します。

(4)　戻り値

なし。

(5)　発生する例外

なし。

10.3　ConnectionPoolDataSourceインタフェース

ここでは，ConnectionPoolDataSourceインタフェースで提供されているメソッドについて説明します。

10.3.1　ConnectionPoolDataSourceインタフェースのメソッド一覧

HADBでサポートしているConnectionPoolDataSourceインタフェースのメソッドの一覧を次の表に示します。

表10‒3　ConnectionPoolDataSourceインタフェースのメソッドの一覧

項番

ConnectionPoolDataSourceインタフェースのメソッド

機能

1

getLoginTimeout()

setLoginTimeoutメソッドで設定した値（HADBサーバへの接続処理のタイムアウト時間）を取得します。

2

getLogWriter()

ConnectionPoolDataSourceオブジェクトのログライターを取得します。

3

getPooledConnection()

DataSourceオブジェクトに設定されている接続情報から，PooledConnectionオブジェクトを生成します。

4

getPooledConnection(String user, String password)

引数で指定した接続情報と，DataSourceオブジェクトに設定されている接続情報から，PooledConnectionオブジェクトを生成します。

5

setLoginTimeout(int seconds)

HADBサーバへの接続処理のタイムアウト時間（単位：秒）を設定します。

6

setLogWriter(PrintWriter out)

ConnectionPoolDataSourceオブジェクトのログライターを設定します。

ConnectionPoolDataSourceインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbConnectionPoolDataSource

10.3.2　getLoginTimeout()

(1)　機能

setLoginTimeoutメソッドで設定した値（HADBサーバへの接続処理のタイムアウト時間）を取得します。

(2)　形式

public synchronized int getLoginTimeout() throws SQLException

(3)　引数

なし。

(4)　戻り値

setLoginTimeoutメソッドで設定した値（HADBサーバへの接続処理のタイムアウト時間）が返却されます。setLoginTimeoutメソッドでタイムアウト時間を設定していない場合は，0が返却されます。

(5)　発生する例外

なし。

10.3.3　getLogWriter()

(1)　機能

ConnectionPoolDataSourceオブジェクトのログライターを取得します。

(2)　形式

public synchronized PrintWriter getLogWriter() throws SQLException

(3)　引数

なし。

(4)　戻り値

ConnectionPoolDataSourceオブジェクトのログライターが返却されます。ログライターが設定されていない場合は，nullが返却されます。

(5)　発生する例外

なし。

10.3.4　getPooledConnection()

(1)　機能

DataSourceオブジェクトに設定されている接続情報から，PooledConnectionオブジェクトを生成します。

認可識別子とパスワードについては，指定の優先順位があります。優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

なお，getPooledConnectionメソッドを実行するにはCONNECT権限が必要です。

(2)　形式

public synchronized PooledConnection getPooledConnection() throws SQLException

(3)　引数

なし。

(4)　戻り値

PooledConnectionオブジェクトが返却されます。

(5)　発生する例外

なし。

10.3.5　getPooledConnection(String user, String password)

(1)　機能

引数で指定した接続情報と，DataSourceオブジェクトに設定されている接続情報から，PooledConnectionオブジェクトを生成します。

認可識別子とパスワードについては，指定の優先順位があります。優先順位については，「7.3.3　接続情報の優先順位」を参照してください。

なお，getPooledConnectionメソッドを実行するにはCONNECT権限が必要です。

(2)　形式

public synchronized PooledConnection getPooledConnection(String user, String password) throws SQLException

(3)　引数

String user：

HADBサーバに接続する認可識別子を指定します。

String password：

HADBサーバに接続する認可識別子のパスワードを指定します。

userまたはpasswordにnullを指定した場合，認可識別子またはパスワードが指定されていないと仮定されます。また，passwordが長さ0の文字列の場合も，パスワードが指定されていないと仮定されます。

userに指定した認可識別子は，setUserメソッドで指定した認可識別子より優先されます。同様に，passwordに指定したパスワードも，setPasswordメソッドで指定したパスワードより優先されます。

(4)　戻り値

PooledConnectionオブジェクトが返却されます。

(5)　発生する例外

次に示す場合にSQLExceptionが投入されます。

userに指定した認可識別子が長さ0の文字列の場合

10.3.6　setLoginTimeout(int seconds)

(1)　機能

HADBサーバへの接続処理のタイムアウト時間（単位：秒）を設定します。

getConnectionメソッドを実行してHADBサーバに接続する際に，ここで設定したタイムアウト時間が適用されます。

(2)　形式

public synchronized void setLoginTimeout(int seconds) throws SQLException

(3)　引数

int seconds：

HADBサーバへの接続処理のタイムアウト時間（単位：秒）を0〜300の範囲で指定します。

0を指定した場合，システムプロパティ，ユーザプロパティ，または接続用のURLのプロパティのadb_clt_rpc_con_wait_timeの値が仮定されます。adb_clt_rpc_con_wait_timeを指定していない場合は，adb_clt_rpc_con_wait_timeのデフォルト値が仮定されます。

(4)　戻り値

なし。

(5)　発生する例外

secondsに不正な値（0未満または301以上の値）を指定した場合，SQLExceptionが投入されます。

(6)　留意事項

HADBサーバへの接続処理のタイムアウト時間は，各プロパティやメソッドなど複数の個所で設定できます。実際に適用されるHADBサーバへの接続処理のタイムアウト時間の優先順位については，「7.3.3　接続情報の優先順位」の「(1)　HADBサーバへの接続時に必要となる接続情報」を参照してください。

10.3.7　setLogWriter(PrintWriter out)

(1)　機能

ConnectionPoolDataSourceオブジェクトのログライターを設定します。

(2)　形式

public synchronized void setLogWriter(PrintWriter out)

(3)　引数

PrintWriter out：

ログライターを指定します。

(4)　戻り値

なし。

(5)　発生する例外

なし。

10.4　PooledConnectionインタフェース

ここでは，PooledConnectionインタフェースで提供されているメソッドについて説明します。

10.4.1　PooledConnectionインタフェースのメソッド一覧

HADBでサポートしているPooledConnectionインタフェースのメソッドの一覧を次の表に示します。

表10‒4　PooledConnectionインタフェースのメソッドの一覧

項番

PooledConnectionインタフェースのメソッド

機能

1

addConnectionEventListener(ConnectionEventListener listener)

イベントリスナを登録し，このPooledConnectionオブジェクトでイベントが発生したときに通知されるようにします。

2

close()

HADBサーバとの物理的な接続を切断します。接続プールにプールされているすべてのコネクションの物理的な切断を行います。

3

getConnection()

接続プールにプールされているコネクションを使用してHADBサーバに接続します。

4

removeConnectionEventListener(ConnectionEventListener listener)

指定したイベントリスナを，このPooledConnectionオブジェクトでイベントが発生したときに通知されるコンポーネントリストから削除します。

PooledConnectionインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbPooledConnection

10.4.2　addConnectionEventListener(ConnectionEventListener listener)

(1)　機能

イベントリスナを登録し，このPooledConnectionオブジェクトでイベントが発生したときに通知されるようにします。

このメソッドで登録したイベントリスナから，ほかのメソッドを呼び出すことはできません。呼び出した場合，デッドロックなどが発生して応答がなくなるおそれがあります。

(2)　形式

public synchronized void addConnectionEventListener(ConnectionEventListener listener)

(3)　引数

ConnectionEventListener listener：

ConnectionEventListenerインタフェースを実装し，接続が閉じたかエラーが発生したときに通知されるようにするコンポーネントです。通常は接続プール管理プログラムです。

nullを指定した場合，何も登録しません。

(4)　戻り値

なし。

(5)　発生する例外

なし。

10.4.3　close()

(1)　機能

HADBサーバとの物理的な接続を切断します。接続プールにプールされているすべてのコネクションの物理的な切断を行います。データベースにアクセス中のコネクションであっても切断します。

(2)　形式

public synchronized void close()

(3)　引数

なし。

(4)　戻り値

なし。

(5)　発生する例外

なし。

10.4.4　getConnection()

(1)　機能

接続プールにプールされているコネクションを使用してHADBサーバに接続します。接続プールにプールされているコネクションがすべて使用中の場合，HADBサーバとの物理的な接続を新規に確立し，HADBサーバに接続します。

なお，getConnectionメソッドを実行するにはCONNECT権限が必要です。

メモ

HADBサーバとの物理的な接続は，このクラスオブジェクトがクローズされるまで切断されません。Connectionオブジェクトに対してcloseメソッドを実行しても，HADBサーバとの物理的な接続は切断されません（このクラスオブジェクトによってコネクションが保持されます）。保持されたコネクションは，次にgetConnectionメソッドを実行する際に使用されます。

接続プールにプールされているコネクションを使用してHADBサーバに接続する場合，setLoginTimeoutメソッドで設定したHADBサーバへの接続処理のタイムアウト時間は適用されません。setLoginTimeoutメソッドで設定したタイムアウト時間は，HADBサーバへの物理接続を確立する際の通信処理に掛かる時間を監視しています。接続プールにプールされているコネクションを使用してHADBサーバに接続する場合は，物理接続が発生しないため（通信処理に掛かる時間が発生しないため），タイムアウト時間が適用されません。

(2)　形式

public synchronized Connection getConnection() throws SQLException

(3)　引数

なし。

(4)　戻り値

Connectionオブジェクトが返却されます。

(5)　発生する例外

データベースのアクセスエラーが発生した場合に，SQLExceptionが投入されます。

10.4.5　removeConnectionEventListener(ConnectionEventListener listener)

(1)　機能

指定したイベントリスナを，このPooledConnectionオブジェクトでイベントが発生したときに通知されるコンポーネントリストから削除します。

(2)　形式

public synchronized void removeConnectionEventListener(ConnectionEventListener listener)

(3)　引数

ConnectionEventListener listener：

ConnectionEventListenerインタフェースを実装し，イベントリスナとして登録されたコンポーネントです。通常は接続プール管理プログラムです。

(4)　戻り値

なし。

(5)　発生する例外

なし。

10.5　接続情報設定および取得インタフェース

ここでは，接続情報設定および取得インタフェースで提供されているメソッドについて説明します。

10.5.1　接続情報設定および取得インタフェースのメソッド一覧

DataSourceおよびConnectionPoolDataSourceのクラスでは，JDBC 2.0 Optional Package規格で定められたメソッドのほかに，次の表に示すHADB独自のメソッドを提供しています。

表10‒5　接続情報設定および取得インタフェースのメソッドの一覧

項番

メソッド

機能

1

getApName()

setApNameメソッドで設定したAP識別子を取得します。

2

getEncodeLang()

setEncodeLangメソッドで設定した変換文字セット名称を取得します。

3

getInterfaceMethodTrace()

setInterfaceMethodTraceメソッドで設定したJDBCインタフェースメソッドトレースの取得状況を取得します。

4

getNotErrorOccurred()

ConnectionEventListener.connectionErrorOccurredの発生を抑止するかどうかの設定情報を取得します。

5

getPassword()

setPasswordメソッドで設定したパスワードを取得します。

6

getSQLWarningKeep()

SQL実行時に発生した警告情報を保持するかどうかの設定情報を取得します。

7

getTraceNumber()

setTraceNumberメソッドで設定したJDBCインタフェースメソッドトレースのエントリ数を取得します。

8

getUser()

setUserメソッドで設定した認可識別子を取得します。

9

getHostName()

setHostNameメソッドで設定したHADBサーバのホスト名を取得します。

10

getPort()

setPortメソッドで設定したHADBサーバのポート番号を取得します。

11

setApName(String name)

HADBサーバに接続するAPの識別子を設定します。

12

setEncodeLang(String lang)

文字コード変換時の変換文字セット名称を設定します。

13

setInterfaceMethodTrace(boolean flag)

JDBCインタフェースメソッドトレースを取得するかどうかを設定します。

14

setNotErrorOccurred(boolean mode)

ConnectionEventListener.connectionErrorOccurredの発生を抑止するかどうかを設定します。

15

setPassword(String password)

HADBサーバに接続する認可識別子のパスワードを設定します。

16

setSQLWarningKeep(boolean mode)

SQL実行時に発生した警告情報を保持するかどうかを設定します。

17

setTraceNumber(int num)

JDBCインタフェースメソッドトレースのエントリ数を設定します。

18

setUser(String user)

HADBサーバに接続する認可識別子を設定します。

19

setHostName(String name)

接続先のHADBサーバのホスト名を設定します。

20

setPort(int port)

接続先のHADBサーバのポート番号を設定します。

10.5.2　getApName()

(1)　機能

setApNameメソッドで設定したAP識別子を取得します。

(2)　形式

public synchronized String getApName() throws SQLException

(3)　引数

なし。

(4)　戻り値

AP識別子が返却されます。setApNameメソッドを実行していない場合は，"********"が返却されます。

(5)　発生する例外

なし。

10.5.3　getEncodeLang()

(1)　機能

setEncodeLangメソッドで設定した変換文字セット名称を取得します。

(2)　形式

public synchronized String getEncodeLang() throws SQLException

(3)　引数

なし。

(4)　戻り値

変換文字セット名称が返却されます。setEncodeLangメソッドを実行していない場合は，nullが返却されます。

(5)　発生する例外

なし。

10.5.4　getInterfaceMethodTrace()

(1)　機能

setInterfaceMethodTraceメソッドで設定したJDBCインタフェースメソッドトレースの取得状況を取得します。JDBCインタフェースメソッドトレースについては，「7.7.1　JDBCインタフェースメソッドトレース」を参照してください。

(2)　形式

public boolean getInterfaceMethodTrace() throws SQLException

(3)　引数

なし。

(4)　戻り値

JDBCインタフェースメソッドトレースの取得状況が返却されます。

true：JDBCインタフェースメソッドトレースを取得しています。

false：JDBCインタフェースメソッドトレースを取得していません。

(5)　発生する例外

なし。

10.5.5　getNotErrorOccurred()

(1)　機能

ConnectionEventListener.connectionErrorOccurredの発生を抑止するかどうかの設定情報を取得します。setNotErrorOccurredメソッドで設定した情報を取得します。

(2)　形式

public boolean getNotErrorOccurred() throws SQLException

(3)　引数

なし。

(4)　戻り値

ConnectionEventListener.connectionErrorOccurredを発生させるかどうかの設定情報が返却されます。

true：connectionErrorOccurredは発生しません。

false：connectionErrorOccurredが発生します。

setNotErrorOccurredメソッドを実行していない場合は，デフォルト値のfalseが返却されます。

(5)　発生する例外

なし。

10.5.6　getPassword()

(1)　機能

setPasswordメソッドで設定したパスワードを取得します。

(2)　形式

public synchronized String getPassword() throws SQLException

(3)　引数

なし。

(4)　戻り値

setPasswordメソッドで設定したパスワードが返却されます。

(5)　発生する例外

なし。

10.5.7　getSQLWarningKeep()

(1)　機能

SQL実行時に発生した警告情報を保持するかどうかの設定情報を取得します。setSQLWarningKeepメソッドで設定した情報を取得します。

(2)　形式

public synchronized boolean getSQLWarningKeep() throws SQLException

(3)　引数

なし。

(4)　戻り値

発生した警告情報をConnectionクラスで保持するかどうかの設定情報が返却されます。

true：警告情報を保持します。

false：警告情報を保持しません。

setSQLWarningKeepメソッドを実行していない場合は，デフォルト値のtrueが返却されます。

(5)　発生する例外

なし。

10.5.8　getTraceNumber()

(1)　機能

setTraceNumberメソッドで設定したJDBCインタフェースメソッドトレースのエントリ数を取得します。

(2)　形式

public synchronized int getTraceNumber() throws SQLException

(3)　引数

なし。

(4)　戻り値

setTraceNumberメソッドで設定したJDBCインタフェースメソッドトレースのエントリ数が返却されます。setTraceNumberメソッドを実行していない場合は，デフォルト値の500が返却されます。

(5)　発生する例外

なし。

10.5.9　getUser()

(1)　機能

setUserメソッドで設定した認可識別子を取得します。

(2)　形式

public synchronized String getUser() throws SQLException

(3)　引数

なし。

(4)　戻り値

setUserメソッドで設定した認可識別子が返却されます。setUserメソッドを実行していない場合は，nullが返却されます。

(5)　発生する例外

なし。

10.5.10　getHostName()

(1)　機能

setHostNameメソッドで設定したHADBサーバのホスト名を取得します。

(2)　形式

public synchronized String getHostName() throws SQLException

(3)　引数

なし。

(4)　戻り値

setHostNameメソッドで設定したHADBサーバのホスト名が返却されます。setHostNameメソッドを実行していない場合は，nullが返却されます。

(5)　発生する例外

なし。

10.5.11　getPort()

(1)　機能

setPortメソッドで設定したHADBサーバのポート番号を取得します。

(2)　形式

public synchronized int getPort() throws SQLException

(3)　引数

なし。

(4)　戻り値

setPortメソッドで設定したHADBサーバのポート番号が返却されます。setPortメソッドを実行していない場合は，-1が返却されます。

(5)　発生する例外

なし。

10.5.12　setApName(String name)

(1)　機能

HADBサーバに接続するAP識別子を設定します。

(2)　形式

public synchronized void setApName(String name) throws SQLException

(3)　引数

String name：

AP識別子を1〜30バイトの文字列で指定します。空白，文字列の長さが0，nullを指定した場合は，このメソッドによるAP識別子の設定がないものと見なされます。

なお，AP識別子をどこにも指定しないでHADBサーバに接続した場合，AP識別子には"********"が設定されます。

(4)　戻り値

なし。

(5)　発生する例外

nameに不正な値（31バイト以上の文字列）を指定した場合，SQLExceptionが投入されます。

(6)　留意事項

このメソッドで指定したAP識別子は，Java仮想マシンのデフォルトの変換文字セットで変換されます。そのため，AP識別子には変換文字セットに依存しない半角英数字だけで構成される名称を指定することを推奨します。

10.5.13　setEncodeLang(String lang)

(1)　機能

文字コード変換時の変換文字セット名称を設定します。

(2)　形式

public synchronized void setEncodeLang(String lang) throws SQLException

(3)　引数

String lang：

変換文字セットを指定します。指定できる変換文字セットについては，JavaTM Platform, Standard Edition JDKドキュメントの国際化サポートで示されるサポートされているエンコーディングの一覧から選択してください。

(4)　戻り値

なし。

(5)　発生する例外

Java仮想マシンがサポートしない変換文字セットを指定した場合，SQLExceptionを投入します。

(6)　留意事項

このメソッドは，「表7‒15　HADBサーバの文字コードに対応する文字セット名称」の組み合わせの変換文字セット以外の文字セットで文字コード変換したい場合だけ使用してください。「表7‒15　HADBサーバの文字コードに対応する文字セット名称」の組み合わせの変換文字セットで文字コード変換する場合は，このメソッドを使用する必要はありません。

10.5.14　setInterfaceMethodTrace(boolean flag)

(1)　機能

JDBCインタフェースメソッドトレースを取得するかどうかを設定します。JDBCインタフェースメソッドトレースについては，「7.7.1　JDBCインタフェースメソッドトレース」を参照してください。

JDBCインタフェースメソッドトレースを取得する場合は，setLogWriterメソッドで出力先を設定する必要があります。

(2)　形式

public synchronized void setInterfaceMethodTrace(boolean flag) throws SQLException

(3)　引数

boolean flag：

JDBCインタフェースメソッドトレースを取得するかどうかを指定します。

true：取得します。

false：取得しません。

このメソッドを実行しない場合は，falseが仮定されます。

(4)　戻り値

なし。

(5)　発生する例外

なし。

(6)　留意事項

JDBCインタフェースメソッドトレースの取得有無は，インスタンス単位で設定できません。このメソッドで設定したJDBCインタフェースメソッドトレースの取得有無は，設定時点および設定以降に存在するすべてのDataSource，およびConnectionPoolDataSourceのインスタンスに影響します。

10.5.15　setNotErrorOccurred(boolean mode)

(1)　機能

ConnectionEventListener.connectionErrorOccurredの発生を抑止するかどうかを設定します。

(2)　形式

public synchronized void setNotErrorOccurred(boolean mode) throws SQLException

(3)　引数

boolean mode：

ConnectionEventListener.connectionErrorOccurredの発生を抑止するかどうかを指定します。

次に示すどちらかの値を指定します。

true：connectionErrorOccurredの発生を抑止します。

false：connectionErrorOccurredの発生を抑止しません。

このメソッドを実行しない場合は，falseが仮定されます。

ConnectionPoolDataSourceを使用している場合，致命的な接続エラーが発生したときに呼ばれるConnectionEventListener.connectionErrorOccurredの，呼び出しを抑止するための設定をします。通常は未設定にするか，またはfalseを設定します。

(4)　戻り値

なし。

(5)　発生する例外

なし。

10.5.16　setPassword(String password)

(1)　機能

HADBサーバに接続する認可識別子のパスワードを設定します。

次に示すメソッドを実行する際，setUserおよびsetPasswordメソッドで設定した認可識別子とパスワードを使ってHADBサーバに接続します。

DataSourceインタフェースのgetConnectionメソッド（引数なしの場合）

ConnectionPoolDataSourceインタフェースのgetPooledConnectionメソッド

なお，パスワードの指定には，優先順位があります。詳細については，「7.3.3　接続情報の優先順位」を参照してください。

(2)　形式

public synchronized void setPassword(String password) throws SQLException

(3)　引数

String password：

HADBサーバに接続する認可識別子のパスワードを指定します。nullを指定した場合は，このメソッドによるパスワードの設定がないものと見なされます。

(4)　戻り値

なし。

(5)　発生する例外

なし。

10.5.17　setSQLWarningKeep(boolean mode)

(1)　機能

SQL実行時に発生した警告情報を保持するかどうかを設定します。

(2)　形式

public synchronized void setSQLWarningKeep(boolean mode) throws SQLException

(3)　引数

boolean mode：

警告情報を保持するかどうかを指定します。次に示すどちらかの値を指定します。

true：警告情報を保持します。

false：警告情報を保持しません。

このメソッドを実行しない場合は，trueが仮定されます。

(4)　戻り値

なし。

(5)　発生する例外

なし。

10.5.18　setTraceNumber(int num)

(1)　機能

JDBCインタフェースメソッドトレースのエントリ数を設定します。

(2)　形式

public synchronized void setTraceNumber(int num) throws SQLException

(3)　引数

int num：

JDBCインタフェースメソッドトレースのエントリ数を10〜1,000の範囲で指定します。このメソッドを実行しない場合，JDBCインタフェースメソッドトレースのエントリ数は500になります。

(4)　戻り値

なし。

(5)　発生する例外

エントリ数に10〜1,000以外の値を設定した場合は，SQLExceptionが投入されます。

10.5.19　setUser(String user)

(1)　機能

HADBサーバに接続する認可識別子を設定します。

次に示すメソッドを実行する際，setUserおよびsetPasswordメソッドで設定した認可識別子とパスワードを使ってHADBサーバに接続します。

DataSourceインタフェースのgetConnectionメソッド（引数なしの場合）

ConnectionPoolDataSourceインタフェースのgetPooledConnectionメソッド

なお，認可識別子の指定には，優先順位があります。詳細については，「7.3.3　接続情報の優先順位」を参照してください。

(2)　形式

public synchronized void setUser(String user) throws SQLException

(3)　引数

String user：

HADBサーバに接続する認可識別子を指定します。nullを指定した場合は，このメソッドによる認可識別子の設定がないものと見なされます。

(4)　戻り値

なし。

(5)　発生する例外

userに指定した文字列の長さが0の場合は，SQLExceptionが投入されます。

10.5.20　setHostName(String name)

(1)　機能

接続先のHADBサーバのホスト名を設定します。

HADBサーバのホスト名の指定には，優先順位があります。詳細については，「7.3.3　接続情報の優先順位」を参照してください。

(2)　形式

public synchronized void setHostName(String name) throws SQLException

(3)　引数

String name：

接続先のHADBサーバのホスト名を指定します。nullを指定した場合は，このメソッドによるホスト名の設定がないものと見なされます。

(4)　戻り値

なし。

(5)　発生する例外

nameに不正な値（0バイト以下または256バイト以上の文字列）を指定した場合，SQLExceptionが投入されます。

10.5.21　setPort(int port)

(1)　機能

接続先のHADBサーバのポート番号を設定します。

HADBサーバのポート番号の指定には，優先順位があります。詳細については，「7.3.3　接続情報の優先順位」を参照してください。

(2)　形式

public synchronized void setPort(int port) throws SQLException

(3)　引数

int port：

接続先のHADBサーバのポート番号を5001〜65535の範囲で指定します。

(4)　戻り値

なし。

(5)　発生する例外

引数portの指定値が，5001〜65535以外の値を指定した場合は，SQLExceptionが投入されます。

11　JDBC 3.0 API

この章では，JDBC 3.0 APIの各インタフェースとメソッドについて説明します。

11.1　JDBC 3.0 APIの追加機能に対するHADBでのサポート範囲

JDBC 3.0 APIの追加機能に対するHADBでのサポート範囲を次の表に示します。

表11‒1　JDBC 3.0 APIの追加機能に対するHADBでのサポート範囲

追加機能

対応するインタフェース

HADBでのサポート範囲

セーブポイント

Connection

×

Savepoint

×

接続プール機能強化

PreparedStatement

×

パラメタメタデータ

ParameterMetaData

○

PreparedStatement

○

自動生成キー

Connection

×

DatabaseMetaData

×

Statement

×

ホールダブルカーソル

Connection

○

DatabaseMetaData

○

Statement

○

ResultSet

○

データベースメタデータ追加API

DatabaseMetaData

○

（凡例）

○：HADBでサポートしています。

×：HADBではサポートしていません。

11.2　ParameterMetaDataインタフェース

ここでは，ParameterMetaDataインタフェースで提供されているメソッドについて説明します。

11.2.1　ParameterMetaDataインタフェースのメソッド一覧

(1)　ParameterMetaDataインタフェースの主な機能

ParameterMetaDataインタフェースでは，主に次の機能が提供されています。

PreparedStatementオブジェクト内のパラメタのデータ型およびデータ長などのメタ情報の返却

(2)　HADBでサポートしているParameterMetaDataインタフェースのメソッド

HADBでサポートしているParameterMetaDataインタフェースのメソッドの一覧を次の表に示します。

表11‒2　ParameterMetaDataインタフェースのメソッドの一覧

項番

ParameterMetaDataインタフェースのメソッド

機能

1

getParameterClassName(int param)

パラメタのデータ型に対するJavaクラスの完全指定された名前を取得します。

2

getParameterCount()

PreparedStatementオブジェクトのパラメタ数を取得します。

3

getParameterMode(int param)

指定したパラメタのモードを取得します。

4

getParameterType(int param)

指定したパラメタのSQLデータ型を取得します。

5

getParameterTypeName(int param)

指定したパラメタのデータ型を取得します。

6

getPrecision(int param)

指定したパラメタの桁数を取得します。

7

getScale(int param)

指定したパラメタの小数点以下の桁数を取得します。

8

isNullable(int param)

指定したパラメタにナル値をセットできるかどうかを返します。

9

isSigned(int param)

指定したパラメタの値が，符号付き数値かどうかを返します。

重要

この表に記載されていないメソッドは，HADBではサポートしていません。サポートしていないメソッドを実行すると，SQLExceptionが投入されることがあります。

(3)　必要なパッケージ名称とクラス名称

ParameterMetaDataインタフェースを使用する場合に必要なパッケージ名称とクラス名称を次に示します。

パッケージ名称：com.hitachi.hadb.jdbc

クラス名称：AdbParameterMetaData

11.2.2　getParameterClassName(int param)

(1)　機能

パラメタのデータ型に対するJavaクラスの完全指定された名前を取得します。

(2)　形式

public synchronized String getParameterClassName(int param) throws SQLException

(3)　引数

int param：

1から始まるパラメタ番号を指定します。

(4)　戻り値

Stringオブジェクトが返却されます。

パラメタに対してPreparedStatementオブジェクトのsetObjectメソッドによって使用されるJavaクラスの型をString型で返します。パラメタのデータ型と返却値を次の表に示します。

表11‒3　getParameterClassNameメソッドを実行して返却される文字列

パラメタのデータ型（HADBのデータ型）

返却される文字列

INTEGER

"java.lang.Long"

SMALLINT

"java.lang.Integer"

DOUBLE PRECISION，FLOAT

"java.lang.Double"

DECIMAL，NUMERIC

"java.math.BigDecimal"

CHAR

"java.lang.String"

VARCHAR

"java.lang.String"

DATE

"java.sql.Date"

TIME

"java.sql.Time"

TIMESTAMP

"java.sql.Timestamp"

BINARY

"java.lang.Object"

VARBINARY

"java.lang.Object"

ROW

"java.sql.Object"

(5)　発生する例外

paramに指定した値が0以下，またはパラメタ数より大きい場合，SQLExceptionが投入されます。

11.2.3　getParameterCount()

(1)　機能

PreparedStatementオブジェクトのパラメタ数を取得します。

(2)　形式

public synchronized int getParameterCount() throws SQLException

(3)　引数

なし。

(4)　戻り値

PreparedStatementオブジェクトのパラメタ数が返却されます。

(5)　発生する例外

なし。

11.2.4　getParameterMode(int param)

(1)　機能

指定したパラメタのモードを取得します。

(2)　形式

public synchronized int getParameterMode(int param) throws SQLException

(3)　引数

int param：

1から始まるパラメタ番号を指定します。

(4)　戻り値

常にParameterMetaData.parameterModeInが返却されます。

(5)　発生する例外

paramに指定した値が0以下，またはパラメタ数より大きい場合，SQLExceptionが投入されます。

11.2.5　getParameterType(int param)

(1)　機能

指定したパラメタのSQLデータ型を取得します。

(2)　形式

public synchronized int getParameterType(int param) throws SQLException

(3)　引数

int param：

1から始まるパラメタ番号を指定します。

(4)　戻り値

java.sql.TypesからのSQL型が返却されます。

列のデータ型と返却値の対応については，「7.6.1　データ型のマッピング」の「(1)　HADBのデータ型とJDBCのSQLデータ型の対応」を参照してください。

(5)　発生する例外

paramに指定した値が0以下，またはパラメタ数より大きい場合，SQLExceptionが投入されます。

11.2.6　getParameterTypeName(int param)

(1)　機能

指定したパラメタのデータ型を取得します。

(2)　形式

public synchronized String getParameterTypeName(int param) throws SQLException

(3)　引数

int param：

1から始まるパラメタ番号を指定します。

(4)　戻り値

Stringオブジェクトが返却されます。getParameterTypeNameメソッドの戻り値を次の表に示します。

表11‒4　getParameterTypeNameメソッドの戻り値

パラメタのデータ型（HADBのデータ型）

戻り値（返却される文字列）

INTEGER

"INTEGER"

SMALLINT

"SMALLINT"

DECIMAL，NUMERIC

"DECIMAL"

DOUBLE PRECISION，FLOAT

"DOUBLE PRECISION"

CHAR

"CHAR"

VARCHAR

"VARCHAR"

DATE

"DATE"

TIME

"TIME"

TIMESTAMP

"TIMESTAMP"

BINARY

"BINARY"

VARBINARY

"VARBINARY"

ROW

"ROW"

(5)　発生する例外

paramに指定した値が0以下，またはパラメタ数より大きい場合，SQLExceptionが投入されます。

11.2.7　getPrecision(int param)

(1)　機能

パラメタの桁数を取得します。

(2)　形式

public synchronized int getPrecision(int param) throws SQLException

(3)　引数

int param：

1から始まるパラメタ番号を指定します。

(4)　戻り値

パラメタの桁数が10進数で返却されます。

指定したパラメタが数データ型の場合は，桁数が返却されます。指定したパラメタが数データ型でない場合は，パラメタ長がバイト単位で返却されます。getPrecisionメソッドの戻り値を次の表に示します。

表11‒5　getPrecisionメソッドの戻り値

パラメタのデータ型（HADBのデータ型）

戻り値（列の桁数）

INTEGER

19

SMALLINT

10

DOUBLE PRECISION

FLOAT

17

DECIMAL(m,n)

NUMERIC(m,n)

m

CHAR(n)

VARCHAR(n)

n

DATE

10

TIME(p)

p＝0の場合：8

p＞0の場合：8＋（p＋1）

TIMESTAMP(p)

p＝0の場合：19

p＞0の場合：19＋（p＋1）

BINARY(n)

VARBINARY(n)

n

ROW

行長※

注※

各列のデータ長の総和になります。各列のデータ長の求め方については，マニュアルHADB　SQLリファレンスのデータ型の種類のデータ格納長を参照してください。

(5)　発生する例外

paramに指定した値が0以下，またはパラメタ数より大きい場合，SQLExceptionが投入されます。

11.2.8　getScale(int param)

(1)　機能

パラメタの小数点以下の桁数を取得します。

(2)　形式

public synchronized int getScale(int param) throws SQLException

(3)　引数

int param：

1から始まるパラメタ番号を指定します。

(4)　戻り値

指定した列の小数点以下の桁数が10進数で返却されます。getScaleメソッドの戻り値を次の表に示します。

表11‒6　getScaleメソッドの戻り値

パラメタのデータ型（HADBのデータ型）

戻り値（小数点以下の桁数）

DECIMAL(m,n)

NUMERIC(m,n)

n

TIME(p)

TIMESTAMP(p)

p

上記以外

0

(5)　発生する例外

paramに指定した値が0以下，またはパラメタ数より大きい場合，SQLExceptionが投入されます。

11.2.9　isNullable(int param)

(1)　機能

指定したパラメタにナル値をセットできるかどうかを返します。

(2)　形式

public synchronized int isNullable(int param) throws SQLException

(3)　引数

int param：

1から始まるパラメタ番号を指定します。

(4)　戻り値

次に示すどちらかの値が返却されます。

ParameterMetaData.parameterNoNulls：ナル値をセットできません。

ParameterMetaData.parameterNullable：ナル値をセットできます。

(5)　発生する例外

paramに指定した値が0以下，またはパラメタ数より大きい場合，SQLExceptionが投入されます。

11.2.10　isSigned(int param)

(1)　機能

指定したパラメタの値が，符号付き数値かどうかを返します。

(2)　形式

public synchronized boolean isSigned(int param) throws SQLException

(3)　引数

int param：

1から始まるパラメタ番号を指定します。

(4)　戻り値

次に示すどちらかの値が返却されます。

true：符号付き数値です。

false：符号付き数値ではありません。

パラメタのデータ型と戻り値の関係を次の表に示します。

表11‒7　パラメタのデータ型と戻り値の関係

パラメタのデータ型

戻り値

INTEGER，SMALLINT，DOUBLE PRECISION，FLOAT，DECIMAL，NUMERIC

true

上記以外

false

(5)　発生する例外

paramに指定した値が0以下，またはパラメタ数より大きい場合，SQLExceptionが投入されます。

11.3　サポートしていないインタフェース

HADBでは，次に示すインタフェースはサポートしていません。

Savepoint

12　JDBC 4.0 API

この章では，JDBC 4.0 APIの各インタフェースとメソッドについて説明します。

12.1　JDBC 4.0 APIの追加機能に対するHADBでのサポート範囲

JDBC 4.0 APIの追加機能に対するHADBでのサポート範囲を次の表に示します。

表12‒1　JDBC 4.0 APIの追加機能に対するHADBでのサポート範囲

追加機能

対応するインタフェース

HADBでのサポート範囲

java.sql.Driver自動ローディング

−

○

ROWIDデータ型

CallableStatement

×

PreparedStatement

×

RowId

×

DatabaseMetaData

×

各国文字データ型

PreparedStatement

×

ResultSet

×

XMLサポート

SQLXML

×

ラッパーパターン

Connection

○

DatabaseMetaData

○

DataSource

○

ResultSet

○

ResultSetMetaData

○

Statement

○

PreparedStatement

○

ParameterMetaData

○

SQL例外拡張

すべてのインタフェース

○

接続管理

Connection

○

Statement

○

スカラ関数追加

Connection

○

DatabaseMetaData

○

（凡例）

−：対応するインタフェースはありません。

○：HADBでサポートしています。

×：HADBではサポートしていません。

12.1.1　java.sql.Driver自動ローディング

JDBC 4.0 APIでは，Driverクラスの登録は不要です。ただし，Driverクラスを明示的に登録する処理があっても問題ありません。

12.1.2　ラッパーパターン

JDBC 4.0 APIでは，次に示すインタフェースがWrapperインタフェースを継承します。

Connection

DatabaseMetaData

DataSource

ResultSet

ResultSetMetaData

Statement

PreparedStatement

ParameterMetaData

12.1.3　SQL例外拡張

SQLExceptionのサブクラスとして複数の例外クラスが追加されています。HADBでのサポート可否を次の表に示します。

表12‒2　追加された例外クラスとHADBでのサポート可否

項番

クラス名

HADBでのサポート可否

1

SQLNonTransientException

○

2

SQLFeatureNotSupportedException

○

3

SQLNonTransientConnectionException

○

4

SQLDataException

○

5

SQLIntegrityConstraintViolationException

○

6

SQLInvalidAuthorizationSpecException

○

7

SQLSyntaxErrorException

○

8

SQLTransientException

○

9

SQLTransientConnectionException

○

10

SQLTransactionRollbackException

○

11

SQLTimeoutException

○

12

SQLRecoverableException

○

13

SQLClientInfoException

○

（凡例）

○：HADBでサポートしています。

SQL例外拡張の詳細については，「12.3　SQL例外拡張機能」を参照してください。

12.1.4　接続管理

このドライバでは次に示すインタフェースのメソッドをサポートしています。

ConnectionインタフェースのisValidメソッド

StatementインタフェースのisPoolableメソッド

12.1.5　スカラ関数追加

JDBC 4.0 APIで追加されたスカラ関数と，HADBでのサポート範囲を次の表に示します。

表12‒3　HADBがサポートするスカラ関数

項番

スカラ関数

HADBでのサポート範囲

1

CHAR_LENGTH

×

2

CHARACTER_LENGTH

×

3

CURRENT_DATE

○

4

CURRENT_TIME

○

5

CURRENT_TIMESTAMP

○

6

EXTRACT

○

7

OCTET_LENGTH

×

8

POSITION

×

（凡例）

○：HADBでサポートしています。

×：HADBではサポートしていません。

12.2　Wrapperインタフェース

ここでは，Wrapperインタフェースで提供されているメソッドについて説明します。

12.2.1　Wrapperインタフェースのメソッド一覧

(1)　Wrapperインタフェースの主な機能

Wrapperインタフェースでは，JDBCで規定された以外のメソッドを呼び出すための標準化された仕組みを提供します。

(2)　HADBでサポートしているWrapperインタフェースのメソッド

HADBでサポートしているWrapperインタフェースのメソッドの一覧を次の表に示します。

表12‒4　Wrapperインタフェースのメソッド一覧

項番

Wrapperインタフェースのメソッド

機能

1

isWrapperFor(Class<?> iface)

指定されたクラスのオブジェクトをunwrapメソッドで返却できるかどうかを返します。

2

unwrap(Class<T> iface)

指定されたクラスのオブジェクトを返します。

(3)　指定できるクラスの一覧

Wrapperを継承したインタフェースに対し，unwrapで指定できるクラスの一覧を次の表に示します。

表12‒5　unwrapで指定できるクラス

項番

インタフェース

unwrapで指定できるクラス

1

java.sql.Connection

AdbConnection

2

java.sql.DatabaseMetaData

AdbDatabaseMetaData

3

javax.sql.DataSource

AdbDataSource

4

java.sql.ResultSet

AdbResultSet

5

java.sql.ResultSetMetaData

AdbResultSetMetaData

6

java.sql.Statement

AdbStatement

7

java.sql.PreparedStatement

AdbPreparedStatement

8

java.sql.ParameterMetaData

AdbParameterMetaData

(4)　コーディング例

Wrapperインタフェースのコーディング例を次に示します。

Connection con = DriverManager.getConnection(url,info);
Class<?> clazz = Class.forName("com.hitachi.hadb.jdbc.AdbConnection");
if(con.isWrapperFor(clazz)){
  AdbConnection acon = (AdbConnection)con.unwrap(clazz);
  acon.xxxx();
}

12.2.2　isWrapperFor(Class<?> iface)

(1)　機能

指定されたクラスのオブジェクトをunwrapメソッドで返却できるかどうかを返します。

(2)　形式

public synchronized boolean isWrapperFor(Class<?> iface) throws SQLException

(3)　引数

Class<?> iface：

チェック対象のクラス

(4)　戻り値

指定されたクラスのオブジェクトをunwrapで返却できる場合は，trueが返却されます。それ以外の場合は，falseが返却されます。

(5)　発生する例外

なし。

12.2.3　unwrap(Class<T> iface)

(1)　機能

指定されたクラスのオブジェクトを返却します。

(2)　形式

public synchronized <T> T unwrap(Class<T> iface) throws SQLException

(3)　引数

Class<T> iface：

チェック対象のクラス

(4)　戻り値

指定されたクラスのオブジェクトが返却されます。

(5)　発生する例外

指定されたクラスのオブジェクトを返却できない場合，SQLExceptionが投入されます。

12.3　SQL例外拡張機能

SQLExceptionのサブクラスとして複数の例外クラスが追加されています。JDBC 4.0 APIで返却される例外クラスの一覧と各クラスの説明を次の表に示します。

表12‒6　JDBC 4.0 APIで返却される例外クラスの一覧と各クラスの説明

項番

クラス名

説明

接続状態中にエラーが発生した場合の接続状態

1

SQLNonTransientException

一時的ではないエラーを示しています。失敗したSQL文を再実行しても，正常に実行できない場合に投入されます。

有効

2

SQLFeatureNotSupportedException

SQLSTATEのクラス値が0A（サポートされていない機能）の場合に投入されます。

有効

3

SQLNonTransientConnectionException

SQLSTATEのクラス値が08（コネクション違反）の場合に投入されます。

−

4

SQLDataException

SQLSTATEのクラス値が22（データ例外）の場合に投入されます。

有効

5

SQLIntegrityConstraintViolationException

SQLSTATEのクラス値が23（整合性制約違反）の場合に投入されます。

有効

6

SQLInvalidAuthorizationSpecException

SQLSTATEのクラス値が28（認可識別子の指定が正しくない）の場合に投入されます。

−

7

SQLSyntaxErrorException

SQLSTATEのクラス値が42（構文誤りまたはアクセス規則違反）の場合に投入されます。

有効

8

SQLTransientException

一時的なエラーを示しています。失敗したSQL文を再実行した場合，成功する可能性があるときに投入されます。

有効

9

SQLTransientConnectionException

SQLSTATEのクラス値が08（コネクション違反）の場合に投入されます。HADBサーバが開始または終了中であるときなどが該当します。

−

10

SQLTransactionRollbackException

SQLSTATEのクラス値が40（トランザクションがロールバックした）の場合に投入されます。

有効

11

SQLTimeoutException

タイムアウトが発生した場合に投入されます。

有効

12

SQLRecoverableException

接続を再確保したあとに，失敗したトランザクションを再実行した場合，成功する可能性があるときに投入されます。

無効

13

SQLClientInfoException

設定できないクライアントのプロパティが1つ以上ある場合に，Connection.setClientInfoメソッドによって投入されます。

−

（凡例）

−：該当しません。

注

SQLSTATEのクラス値については，マニュアルHADB　メッセージのSQLSTATEの出力形式を参照してください。

JDBC 4.0 APIで追加された例外クラスの継承関係を次に示します。

java.sql.SQLException
  [図データ]
  [図データ] java.sql.SQLNonTransientException
  [図データ]    [図データ] java.sql.SQLFeatureNotSupportedException
  [図データ]    [図データ] java.sql.SQLNonTransientConnectionException
  [図データ]    [図データ] java.sql.SQLDataException
  [図データ]    [図データ] java.sql.SQLIntegrityConstraintViolationException
  [図データ]    [図データ] java.sql.SQLInvalidAuthorizationSpecException
  [図データ]    [図データ] java.sql.SQLSyntaxErrorException
  [図データ]
  [図データ] java.sql.SQLTransientException
  [図データ]    [図データ] java.sql.SQLTransientConnectionException
  [図データ]    [図データ] java.sql.SQLTransactionRollbackException
  [図データ]    [図データ] java.sql.SQLTimeoutException
  [図データ]
  [図データ] java.sql.SQLRecoverableException
  [図データ] java.sql.SQLClientInfoException

各例外クラスは，java.sqlパッケージのクラスを直接利用します。例外クラスが提供する各メソッドの詳細，使用方法については，JDBC規格の関連ドキュメントを参照してください。

重要

executeQueryメソッドなどのSQL文を実行するメソッドで，setQueryTimeoutメソッドまたはadb_clt_rpc_sql_wait_timeに指定した時間を超えたためにタイムアウトが発生した場合，JDBC規格ではSQLTimeoutExceptionが投入されます。ただし，HADBクライアントからHADBサーバに処理要求をしてから，応答が戻ってくるまでの待ち時間でタイムアウトが発生した場合は，HADBサーバと必ず切断されるため，SQLRecoverableExceptionが投入されます。

12.4　サポートしていないインタフェース

HADBでは，次に示すインタフェースはサポートしていません。

NClob

RowId

SQLXML

13　JDBC 4.1 API

この章では，JDBC 4.1 APIで追加された機能に対するHADBでのサポート範囲について説明します。

13.1　JDBC 4.1 APIの追加機能に対するHADBでのサポート範囲

JDBC 4.1 APIの追加機能に対するHADBでのサポート範囲を次の表に示します。

表13‒1　JDBC 4.1 APIの追加機能に対するHADBでのサポート範囲

追加機能

対応するインタフェース

HADBでのサポート範囲

try-with-resources文

Connection

○

ResultSet

Statement

getObjectメソッドの変換先Java型指定

CallableStatement

○※

ResultSet

親ロガーの取得

Driver

×

DataSource

ConnectionPoolDataSource

スキーマ指定

Connection

×

物理接続の中止およびタイムアウト

Connection

×

依存オブジェクトクローズ時のStatementオブジェクトクローズ

Statement

○

データベースメタデータの追加API

DatabaseMetaData

○

（凡例）

○：HADBでサポートしています。

×：HADBではサポートしていません。

注※

ResultSetインタフェースのgetObjectメソッドです。また，一部のJava型への変換だけをサポートしています。詳細については，「8.6.45　getObject(int columnIndex,Class<T> type)」を参照してください。

13.1.1　try-with-resources文

リソースを記述するtry文です。try-with-resources文によって，文の終わりで確実に各リソースが閉じられるようにできます。

Connectionインタフェース，ResultSetインタフェース，およびStatementインタフェースでtry-with-resources文を使用できます。使用方法については，JDBC規格の関連ドキュメントを参照してください。

13.1.2　依存オブジェクトクローズ時のStatementオブジェクトクローズ

Statementインタフェースで，closeOnCompletionメソッドおよびisCloseOnCompletionメソッドをサポートしています。

14　JDBC 4.2 API

この章では，JDBC 4.2 APIで追加された機能に対するHADBでのサポート範囲について説明します。

14.1　JDBC 4.2 APIの追加機能に対するHADBでのサポート範囲

JDBC 4.2 APIの追加機能に対するHADBでのサポート範囲を次の表に示します。

表14‒1　JDBC 4.2 APIの追加機能に対するHADBでのサポート範囲

追加機能

対応するインタフェース

HADBでのサポート範囲

REF CURSOR

CallableStatement

×

SQLTypeインタフェース

SQLType

×

CallableStatement

PreparedStatement

ResultSet

SQLOutput

JDBCType Enum

SQLType

×

大きい更新カウント

PreparedStatement

○

Statement

データベースメタデータの追加API

DatabaseMetaData

○

（凡例）

○：HADBでサポートしています。

×：HADBではサポートしていません。

14.1.1　大きい更新カウント

更新系SQLの更新行数をlong型で扱える次のメソッドをサポートしています。

PreparedStatementインタフェース

executeLargeUpdate

Statementインタフェース

getLargeUpdateCount

setLargeMaxRows

getLargeMaxRows

executeLargeBatch

executeLargeUpdate

次のSQL文を実行する際に，返される行数がInteger.MAX_VALUEを超える可能性がある場合は，これらのメソッドを使用してください。

UPDATE文

INSERT文

DELETE文

第4編　AP作成編【ODBC】

15　APの作成

この章では，HADB ODBCドライバの環境設定，およびODBC対応のAP作成時の留意事項について説明します。

15.1　HADBが提供しているODBCドライバ

HADBが提供するODBCドライバ（以降，HADB ODBCドライバと表記）を使用してHADBのデータベースにアクセスできます。ここでは，HADB ODBCドライバの準拠範囲とシステム構成について説明します。

15.1.1　HADB ODBCが準拠しているODBCドライバのバージョン

HADB ODBCドライバはODBC3.5に準拠しています。ODBCインタフェースを使用してHADBのデータベースにアクセスでき，BIツールとの連携ができます。

15.1.2　システム構成

(1)　前提プログラム

HADB ODBCドライバの前提プログラムを次に示します。

■HADB ODBCドライバ（64ビットモード）の場合

前提となるオペレーティングシステム

Windows Server 2008 R2

Windows Server 2012

Windows Server 2012 R2

Windows Server 2016

Windows Server 2019

Windows 7(x64)

Windows 8.1(x64)

Windows 10(x64)

前提となるソフトウェア

Microsoft Data Access Components

HADBクライアント

■HADB ODBCドライバ（32ビットモード）の場合

前提となるオペレーティングシステム

Windows 7

Windows 7(x64)

Windows 8.1

Windows 8.1(x64)

Windows 10

Windows 10(x64)

前提となるソフトウェア

Microsoft Data Access Components

HADBクライアント

(2)　機器構成

HADB ODBCドライバを使用する際のシステム構成を次の図に示します。

図15‒1　HADB ODBCドライバを使用する際のシステム構成

15.1.3　文字コード変換について

(1)　文字コード変換処理

HADBが提供するODBCドライバは，MS-Unicodeインタフェースを含むODBC3.5をサポートします。

MS-UnicodeインタフェースであるSQLxxxW関数を使用した場合，ODBCドライバ内でMS-Unicodeの文字列データとHADBが対応している文字コードを変換する処理を行います。

次の図に，MS-Unicodeの文字列データとHADBが対応している文字コードを変換する処理を示します。

図15‒2　MS-Unicodeの文字列データとHADBが対応している文字コードを変換する処理

［説明］

APからHADBサーバへの処理で文字コード変換する場合，SQLxxxW関数でMS-Unicodeの文字列データをHADBが対応している文字コードに変換したあと，HADBサーバに処理を引き渡します。

HADBサーバからAPへの処理で文字コード変換する場合，SQLxxxW関数でHADBが対応している文字コードをMS-Unicodeの文字列データに変換したあと，APに出力します。

HADBでは，次に示す文字コードをサポートしています。

Unicode（UTF-8）

Shift-JIS

(2)　留意事項

ダイアクリティカルマーク（区分符号）付き文字について

ウムラウト（[図データ]）やトレマ（[図データ]）などのダイアクリティカルマーク付き文字を，比較，変数に代入，または検索する場合，ダイアクリティカルマークなし文字として扱われることがあります。

これは，SQLxxxW関数を使用して文字コード変換がされたとき，ダイアクリティカルマークが失われるためです。

サロゲートペアなど，文字コード変換できない文字について

ODBC3.5インタフェースのSQLxxxW関数を使用した場合，文字コード変換が行われます。その際，サロゲートペアの文字など，文字コード変換できない文字は，比較，格納代入時にはエラーになります。また，検索時には#に置き換えられることがあります。さらに，#が出現した位置以降の文字については，文字化けが発生することがあります。

15.1.4　ODBCカーソルライブラリの使用について

マイクロソフト社提供のODBCカーソルライブラリを使用すると，次に示す機能が利用できます。

(1)　スクロール可能なカーソル

SQL_ATTR_CURSOR_SCROLLABLE属性にSQL_SCROLLABLEを指定すると，次のことができます。

SQLFetchScrollによる行セットデータのフェッチ

SQLSetPosを使用した行セット内の任意の行へのカーソルの位置づけ

ただし，SQLSetPosを使用して，行セットデータを最新の状態に変更することはできません。また，結果セットのデータを更新または削除することもできません。

(2)　ブックマーク機能

カーソル行のブックマークは，次に示す手順で取得できます。

SQL_ATTR_USE_BOOKMARKS属性にSQL_UB_VARIABLEを指定する

SQLSetPosを使用して行セット内の任意の行にカーソルを位置づける

第0列のデータを取得する

また，SQL_ATTR_FETCH_BOOKMARK_PTR属性にブックマークを指定すると，SQLFetchScrollの実行時の開始行にブックマークを指定できます。

15.1.5　配列型の列を定義した表へのアクセスについて

ODBCドライバを使用して配列型の列にアクセスする場合，添え字に符号なし整数定数を指定した配列要素参照を指定する必要があります。例を次に示します。表T1のC1列が配列型の列とします。

（例）

実行できるSQL文の例

SELECT "C1"[1],"C1"[2] FROM "T1"

SELECT "C1"[1] FROM "T1" WHERE "C1"[2]=?

添え字に符号なし整数定数を指定した配列要素参照を指定しているため，上記のSQL文は実行できます。

実行できないSQL文の例

SELECT "C1" FROM "T1"

SELECT "C1[1]" FROM T1 WHERE "C1"=?

添え字に符号なし整数定数を指定した配列要素参照の形式で指定していないため，上記のSQL文は実行できません。

添え字および配列要素参照については，マニュアルHADB　SQLリファレンスの配列要素参照を参照してください。

15.2　HADB ODBCドライバの環境設定

ここでは，HADB ODBCドライバの環境設定について説明します。ここで説明する作業は，管理者特権を持つOSユーザが実施してください。

15.2.1　データソースの設定

データソースの設定手順を次に示します。

手順

［ODBCデータソースアドミニストレーター（odbcad32.exe）］を実行します。

実行するODBCデータソースアドミニストレーターは，HADBクライアントをインストールしたクライアントマシンのOS種別，およびBIツールの動作モードによって異なります。ODBCデータソースアドミニストレーターが格納されているフォルダを次の表に示します。

表15‒1　ODBCデータソースアドミニストレーターが格納されているフォルダ

項番

クライアントマシンのOS種別

BIツールの動作モード

HADB ODBCドライバの種別

ODBCデータソースアドミニストレーターが格納されているフォルダ

1

32bit

32bit

32bit

%windir%¥system32¥odbcad32.exe

2

64bit

64bit

64bit

3

32bit(WOW64)

32bit

%windir%¥SysWOW64¥odbcad32.exe

4

64bit

−

（凡例）

−：この組み合わせでは使用できません。

登録または修正するデータソースの種別をタブ項目から選択し，［追加］ボタンをクリックします。

［データソースの新規作成］ダイアログボックスが表示されます。［Hitachi Advanced Data Binder ODBC Driver］を選択してください。

［Hitachi Advanced Data Binder ODBC Driver Setup］ダイアログが表示されます。各項目を設定して，［OK］をクリックします。

データソース名は32バイト以内で入力してください。全角文字を入力する場合は，表示文字数＝バイト数ではありません。

クライアント定義ファイルのパス名は，255バイト以内で入力してください。

メモ

HADB ODBCドライバトレース情報を出力する場合に，［Options>>］ボタンをクリックします。設定方法については，「17.3.1　ODBCデータソースアドミニストレーターで設定する方法」を参照してください。

データソースの設定を中止する場合は，［CANCEL］をクリックします。

登録したデータソースが表示されます。登録内容を確認してください。

15.2.2　レジストリキーの登録

HADBクライアントの環境設定時に，レジストリ登録コマンドを使用してレジストリキーを登録したかどうかを確認してください。レジストリキーの登録操作については，「4.2.1　Windows版のHADBクライアントの場合」の「(1)　HADBクライアントのインストール」を参照してください。

15.2.3　データソースの削除

データソースの削除手順を次に示します。

手順

［ODBCデータソースアドミニストレーター（odbcad32.exe）］を実行します。

実行するODBCデータソースアドミニストレーターは，HADBクライアントをインストールしたクライアントマシンのOS種別，およびBIツールの動作モードによって異なります。ODBCデータソースアドミニストレーターが格納されているフォルダを次の表に示します。

表15‒2　ODBCデータソースアドミニストレーターが格納されているフォルダ

項番

クライアントマシンのOS種別

BIツールの動作モード

HADB ODBCドライバの種別

ODBCデータソースアドミニストレーターが格納されているフォルダ

1

32bit

32bit

32bit

%windir%¥system32¥odbcad32.exe

2

64bit

64bit

64bit

3

32bit(WOW64)

32bit

%windir%¥SysWOW64¥odbcad32.exe

4

64bit

−

（凡例）

−：この組み合わせでは使用できません。

削除するデータソースの種別をタブ項目から選択し，削除するデータソース名を選択します。

［削除］ボタンをクリックします。

15.3　データ型の対応

ここでは，データ型の対応関係について説明します。

15.3.1　ODBCのSQLデータ型とHADBのデータ型の対応

ODBCのSQLデータ型とHADBのデータ型の対応を次の表に示します。

表15‒3　ODBCのSQLデータ型とHADBのデータ型の対応

分類

ODBCのSQLデータ型

対応するHADBのデータ型

説明

使用可否

文字データ

SQL_CHAR

CHARACTER

固定長文字列

○

SQL_VARCHAR

VARCHAR

可変長文字列

○

SQL_LONGVARCHAR

−

可変長文字列

×

SQL_WCHAR

−

固定長文字列（Unicode用）

×

SQL_WVARCHAR

−

可変長文字列（Unicode用）

×

SQL_WLONGVARCHAR

−

可変長文字列（Unicode用）

×

数データ

SQL_DECIMAL

DECIMAL，NUMERIC

固定小数点数

○

SQL_NUMERIC

DECIMAL，NUMERIC

固定小数点数

○

SQL_TINYINT

−

1バイトの整数

×

SQL_SMALLINT

−

2バイトの整数

○※1

SQL_INTEGER

SMALLINT

4バイトの整数

○

SQL_BIGINT

INTEGER

8バイトの整数

○

SQL_REAL

−

単精度浮動小数点数

×

SQL_FLOAT

DOUBLE PRECISION，FLOAT

倍精度浮動小数点数

○

SQL_DOUBLE

DOUBLE PRECISION，FLOAT

倍精度浮動小数点数

○

SQL_BIT

−

ビット

×

SQL_BINARY

BINARY

固定長バイナリデータ

○

SQL_VARBINARY

VARBINARY

可変長バイナリデータ

○

SQL_LONGVARBINARY

−

可変長バイナリデータ

×

日付，時刻データ

SQL_TYPE_DATE（，SQL_DATE）※2

DATE

日付

○

SQL_TYPE_TIME（，SQL_TIME）※2

TIME

時刻

○

SQL_TYPE_TIMESTAMP（，SQL_TIMESTAMP）※2

TIMESTAMP

時刻印

○

SQL_INTERVAL_MONTH

−

月間隔

×

SQL_INTERVAL_YEAR

−

年間隔

×

SQL_INTERVAL_YEAR_TO_MONTH

−

−

×

SQL_INTERVAL_DAY

−

日間隔

×

SQL_INTERVAL_HOUR

−

時間隔

×

SQL_INTERVAL_MINUTE

−

分間隔

×

SQL_INTERVAL_SECOND

−

秒間隔

×

SQL_INTERVAL_DAY_TO_HOUR

−

−

×

SQL_INTERVAL_DAY_TO_MINUTE

−

−

×

SQL_INTERVAL_DAY_TO_SECOND

−

−

×

SQL_INTERVAL_HOUR_TO_MINUTE

−

−

×

SQL_INTERVAL_HOUR_TO_SECOND

−

−

×

SQL_INTERVAL_MINUTE_TO_SECOND

−

−

×

そのほか

SQL_GUID

−

−

×

（凡例）

−：対応するデータ型なし

○：使用できるデータ型

×：使用できないデータ型

注※1

SQL_SMALLINTに対応するHADBのデータ型はありません。そのため，SQL_SMALLINTを使用してHADBのデータベースにアクセスできません。SQL_SMALLINTは，HADB ODBCドライバが提供する一部のカタログ関数のインタフェースとしてだけ使用できます。例えば，SQLColumnsの結果セット列のSQL_DATA_TYPEの値などで使用できます。

注※2

SQL_TYPE_DATE，SQL_TYPE_TIME，SQL_TYPE_TIMESTAMPは，ODBC3.0の日付時刻データ型です。通常はこちらを使用してください。

（　）内はODBC2.0の日付時刻データ型です。ODBC3.0の日付時刻データ型と同等に扱われます。環境変数ADBODBAPMODEの指定によっては，メタデータの返却値として，（　）内の識別子が返却されることがあります。

15.3.2　ODBCのSQLデータ型とCデータ型の対応

ODBCのSQLデータ型とCデータ型の対応について，比較・格納代入できるデータ型の組み合わせ，および検索できるデータ型の組み合わせを次の表に示します。

表15‒4　比較・格納代入できるデータ型の組み合わせ（Cデータ型からODBCのSQLデータ型への変換）

（凡例）

●：デフォルトの変換，または推奨する組み合わせです。

○：変換できます。ただし，変換時にデータの切り捨てや精度が失われることがあります。

−：変換できません。

表15‒5　検索できるデータ型の組み合わせ（ODBCのSQLデータ型からCデータ型への変換）

（凡例）

●：デフォルトの変換，または推奨する組み合わせです。

○：変換できます。ただし，変換時にデータの切り捨てや精度が失われることがあります。

−：変換できません。

注※

環境変数ADBODBAPMODEにACCESSを指定している場合，SQL_C_CHARがデフォルトの変換になります。

15.3.3　データ型変換時の注意事項

(1)　BINARY型およびVARBINARY型に関する規則

■比較・格納代入時の規則

HADBのBINARY型またはVARBINARY型に対してデータ入力する際の規則を次に示します。

入力データがSQL_C_WCHARの場合，CHAR型への変換後に，SQL_C_CHARからバイナリ型への変換と同等の処理が行われます。

入力データが文字データ（SQL_C_WCHARの場合はSQL_C_CHARへの変換後のデータ）の場合，2バイトごとに1バイト（8ビット）のバイナリデータに変換されます。文字データは，2バイトで1つの16進数を表しています。例えば，01はバイナリの00000001に変換され，FFはバイナリの11111111に変換されます。したがって，「入力データのバイト長÷2」が「入力先のデータの定義長」を超える場合，エラーとなります。

SQL_C_BINARY型のデータを，HADBの各データ型に対してデータ入力する際の規則を次に示します。

入力先が文字列系データ（SQL_CHARなど）の場合，入力データの実長が入力先のデータの定義長を超えるとエラーになります。

■検索時の規則

HADBのBINARY型またはVARBINARY型から，データを出力する際の規則を次に示します。

文字列データで受け取る場合，変換元のデータの各バイト（8ビット）は，2文字のASCII文字として表示されます。この文字は，16進数をASCII表現したものです。例えば，バイナリの00000001は01に変換され，バイナリの11111111はFFに変換されます。BuffeLengthが，「変換元のデータのバイト長×2（SQL_C_WCHARの場合はさらに×2）」以下の場合，切り捨て（警告）が発生します。

(2)　DATE型，TIME型，およびTIMESTAMP型に関する規則

DATE型の日付データまたはCHAR型の日付データをTIMESTAMP型の時刻印データに変換する場合，時刻印データの時刻部分には0が設定されます。

TIME型の時刻データまたはCHAR型の日付データをTIMESTAMP型の時刻印データに変換する場合，時刻印データの日付部分には現在の日付が設定されます。

TIME型の時刻データまたはCHAR型の時刻データを，TIME型の時刻データまたはTIMESTAMP型の時刻印データに変換する際，変換前データの小数秒の桁数が，変換後データの小数秒の桁数を超える場合は，超える部分については切り捨てられます。また，このときの戻り値はSQL_SUCCESSになります。

TIMESTAMP型の時刻印データまたはCHAR型の時刻印データをDATE型の日付データに変換する場合，変換前の時刻印データの日付部分だけが変換されます。また，このときの戻り値はSQL_SUCCESSになります。

TIMESTAMP型の時刻印データまたはCHAR型の時刻印データをTIME型の時刻データに変換する場合，変換前の時刻印データの時刻部分だけが変換されます。また，このときの戻り値はSQL_SUCCESSになります。

TIMESTAMP型の時刻印データまたはCHAR型の時刻印データを，TIME型の時刻データまたはTIMESTAMP型の時刻印データに変換する際，変換前データの小数秒の桁数が，変換後データの小数秒の桁数を超える場合は，超える部分については切り捨てられます。また，このときの戻り値はSQL_SUCCESSになります。

VARCHAR型についての扱いは，CHAR型と同じになります。

(3)　SQL_DECIMAL型およびSQL_NUMERIC型に関する規則

HADBでは，SQL_DECIMAL型とSQL_NUMERIC型についての扱いは同じです。どちらでも使用できます。

「精度の値＝スケールの値」となる桁数で，かつ1未満の小数点を持つ値をSQL_DECIMAL型またはSQL_NUMERIC型に対してデータ型を変換する場合，小数点の前に0を入力するとエラーになります。これは0も1桁としてカウントするためです。0を付けないで，小数点から記述を始めると正常に変換できます。

（例）

テーブルに定義されたデータ型がDECIMAL(3,3)の値を検索，またはDECIMAL(3,3)の値に比較・代入する場合

0.123：エラーになります。

.123：正常に変換されます。

(4)　SQL_DOUBLE型およびSQL_FLOAT型に関する規則

HADBでは，SQL_DOUBLE型とSQL_FLOAT型についての扱いは同じです。どちらでも使用できます。

(5)　SQL_C_NUMERIC型に関する規則

HADBのSQL_C_NUMERIC型で使用できる最大精度は38になります。

SQL_DOUBLE型，SQL_FLOAT型からSQL_C_NUMERIC型にデータ型を変換する場合，またはSQL_CHAR型，SQL_VARCHAR型の数値文字列からSQL_C_NUMERIC型にデータ型を変換する場合，変換元のデータ形式が浮動小数点数の形式のときは，いったん固定小数点数の形式に変換し，そのあとにSQL_C_NUMERIC型に変換します。

浮動小数点数から固定小数点数への変換，または固定小数点数からSQL_C_NUMERIC型への変換規則を次に示します。

浮動小数点数の形式は，浮動小数点数定数の形式に準拠します。ただし，仮数部は38桁，指数部は3桁まで有効とします。浮動小数点数定数の形式については，マニュアルHADB　SQLリファレンスの定数の記述形式を参照してください。

指数として指定できる最大値は38，最小値は-38になります。

指数が正の値の場合，仮数部の整数の桁数と，指数の値の合計が38を超えると，固定小数点数の形式に変換する際に，整数の切り捨てが発生するため，SQL_ERRORを返します。

指数が負の値の場合，仮数部の小数の桁数と，指数の絶対値の合計が38を超えると，固定小数点数の形式に変換する際に，小数の桁あふれが発生します。桁があふれた部分に0以外の数字がある場合は，SQL_SUCCESS_WITH_INFOを返します。そうでない場合は，SQL_SUCCESSを返します。

15.4　エラー発生時に返却される情報

ここでは，HADB ODBCドライバまたはHADB（HADBサーバおよびHADBクライアント）でエラーが発生したときに返却される情報について説明します。

エラー情報の取得方法

エラーが発生したときに最後に使用したハンドルを，SQLGetDiagFieldおよびSQLGetDiagRec，またはSQLGetDiagFieldWおよびSQLGetDiagRecWに指定してエラー情報を取得します。

SQLGetDiagFieldおよびSQLGetDiagRec，またはSQLGetDiagFieldWおよびSQLGetDiagRecWで取得できるエラー情報の内容は，エラーが発生した場所によって異なります。

■HADB ODBCドライバでエラーが発生した場合

SQLSTATEはODBCの規約に従い，エラーごとに設定されます。SQLSTATEについては，MSDNライブラリのODBCプログラマーズリファレンス，およびマニュアルHADB　メッセージのSQLSTATEを参照してください。

NativeCodeには常に0が返却されます。

メッセージテキストには，次の文字列の後ろにKFAA72で始まるメッセージが設定されます。

[Hitachi Advanced Data Binder][ODBC Driver]

■HADBでエラーが発生した場合

SQLSTATEにはHADBで発生したエラーに対応するSQLSTATEが設定されます。SQLSTATEについては，マニュアルHADB　メッセージのSQLSTATEの一覧を参照してください。

NativeCodeにはSQLCODEが設定されます。

メッセージテキストには，HADBから返却されるメッセージが次の文字列の後ろに設定されます。

[Hitachi Advanced Data Binder][ODBC Driver]

HADBクライアントから詳細情報のメッセージが取得できない場合は，上記の文字列だけが設定されます。

15.5　制限事項

ODBCドライバを経由してHADBにアクセスする場合の制限事項について説明します。

15.5.1　ROWの指定

ROW指定の問合せは実行できません。また，ROWを指定したUPDATE文またはINSERT文は実行できません。

15.5.2　AUTOCOMMITの仕様

AUTOCOMMITがONの場合，SQLExecute，SQLExecDirect，SQLExecDirectW，またはSQLCloseCursorの実行後に自動的に発行されるコミットによって，実行済みの前処理情報（SQLPrepareを実行した内容）は削除されないで，コミットが実行されます。

（例）

ステートメントAでSQLPrepareを実行

ステートメントBでSQLPrepareを実行

ステートメントAでSQLExecuteを実行（コミットが自動的に発行される）

ステートメントBでSQLExecuteを実行（3.で前処理情報は削除されないで，コミットが実行される）

15.5.3　最大SQL処理リアルスレッド数に関する注意事項

同一の接続ハンドルで割り当てた複数のステートメントハンドルでSQL文を同時に実行した場合に，最大SQL処理リアルスレッド数分の処理リアルスレッドが使用できないときは，SQL文の実行要求がエラーとなります（待ち状態にはなりません）。

なお，最大SQL処理リアルスレッド数は，次のオペランドで指定しています。

サーバ定義のadb_sql_exe_max_rthd_num

クライアント定義のadb_sql_exe_max_rthd_num

15.6　注意事項

15.6.1　更新操作によるカーソルを使用した検索への影響

カーソルを使用した検索中に更新操作を行うと，タイミングによっては更新操作の結果が，検索の結果に反映されることがあります。更新操作の結果を検索の結果に反映させないようにするには，次のように運用してください。

カーソルを閉じたあとに，行の追加または更新を行う

追加または更新する行が，検索結果と一致しないようにデータや探索条件などを工夫する

15.6.2　HADB ODBCドライバをODBC2.xアプリケーションで使用する場合の注意事項

環境ハンドルのSQL_ATTR_ODBC_VERSION属性にSQL_OV_ODBC2を指定した場合，ここで説明する項目については，HADB ODBCドライバはODBC2.x規格に従って動作します。

(1)　SQLSTATEについて

オープングループおよびISOの規格に合わせて，ODBC3.xで幾つかのSQLSTATEが変更されています。HADB ODBCドライバは，次のマッピング表に従ってODBC2.xのSQLSTATEを返却します。SQLSTATEについては，マニュアルHADB　メッセージのSQLSTATEの一覧を参照してください。

表15‒6　SQLSTATEのマッピング表

項番

ODBC3.x

ODBC2.x

1

07005

24000

2

07009※

S1002

3

S1093

4

22007

22008

5

22018

22005

6

HY001

S1001

7

HY003

S1003

8

HY004

S1004

9

HY007

S1010

10

HY009

S1009

11

HY010

S1010

12

HY011

S1011

13

HY024

S1009

14

HY090

S1090

15

HY091

S1091

16

HY092

S1092

17

HY096

S1096

18

HY100

S1100

19

HY104

S1104

20

HY105

S1105

21

HYC00

S1C00

注※

SQLSTATEが07009の場合，1対1のマッピングになりません。マッピングは次の表に従ってください。

表15‒7　SQLSTATE 07009のマッピング

項番

SQLSTATE 07009を返却する関数

SQL_OV_ODBC2指定時のSQLSTATE 07009のマッピング先のSQLSTATE

1

SQLBindParameter

S1093

2

SQLColAttribute

S1002

3

SQLDescribeCol

07009

4

SQLDescribeParam

S1093

5

SQLFetch

S1002

6

SQLGetData

S1002

7

SQLGetDescField

07009

8

SQLGetDescRec

07009

9

SQLSetDescRec

07009

10

SQLSetDescField

07009

(2)　SQL_NO_DATAの戻り値について

次のどれかのODBC関数を呼び出して，DELETE文またはUPDATE文を実行した際に，対象となる行がないときは，SQL_SUCCESSが返却されます。SQL_NO_DATAは返却されません。

SQLExecDirect

SQLExecute

SQLParamData

(3)　SQLGetInfoの返却値について

環境ハンドルのSQL_ATTR_ODBC_VERSIONの指定値によって，SQL_ALTER_TABLEへの返却値が次のように異なります。

SQL_ATTR_ODBC_VERSIONにSQL_OV_ODBC3を指定した場合

SQL_ALTER_TABLEには，SQL_AT_ADD_COLUMN_SINGLEが返却されます。

SQL_ATTR_ODBC_VERSIONにSQL_OV_ODBC2を指定した場合

SQL_ALTER_TABLEには，SQL_AT_ADD_COLUMNが返却されます。

16　ODBC関数

この章では，HADBが提供するODBC関数について説明します。

16.1　ODBC関数の一覧

ODBC関数の一覧を次の表に示します。

表16‒1　ODBC関数の一覧

項番

分類

API名称

HADB ODBC3.0でのサポート有無

HADB ODBC3.5でのサポート有無

備考

1

データソースとの接続

SQLAllocHandle

○

○

−

2

SQLConnect

○

○

3

SQLConnectW※

×

○

4

SQLDriverConnect

○

○

5

SQLDriverConnectW※

×

○

6

SQLBrowseConnect

○

○

7

SQLBrowseConnectW※

×

○

8

ドライバおよびデータソースの情報取得

SQLDataSources

△

△

9

SQLDataSourcesW※

×

△

10

SQLDrivers

△

△

11

SQLDriversW※

×

△

12

SQLGetInfo

○

○

13

SQLGetInfoW※

×

○

14

SQLGetFunctions

○

○

15

SQLGetTypeInfo

○

○

16

SQLGetTypeInfoW※

×

○

17

ドライバオプションの設定および取得

SQLSetConnectAttr

○

○

18

SQLSetConnectAttrW※

×

○

19

SQLGetConnectAttr

○

○

20

SQLGetConnectAttrW※

×

○

21

SQLSetEnvAttr

○

○

22

SQLGetEnvAttr

○

○

23

SQLSetStmtAttr

○

○

24

SQLSetStmtAttrW※

×

○

25

SQLGetStmtAttr

○

○

26

SQLGetStmtAttrW※

×

○

27

ディスクリプタ値の設定

SQLGetDescField

○

○

28

SQLGetDescFieldW※

×

○

29

SQLGetDescRec

○

○

30

SQLGetDescRecW※

×

○

31

SQLSetDescField

○

○

32

SQLSetDescFieldW※

×

○

33

SQLSetDescRec

○

○

34

SQLCopyDesc

○

○

35

SQL要求の作成

SQLPrepare

○

○

36

SQLPrepareW※

×

○

37

SQLBindParameter

○

○

38

SQLGetCursorName

○

○

39

SQLGetCursorNameW※

×

○

40

SQLSetCursorName

○

○

41

SQLSetCursorNameW※

×

○

42

SQLDescribeParam

○

○

43

SQLNumParams

○

○

44

SQLの実行

SQLExecute

○

○

45

SQLExecDirect

○

○

46

SQLExecDirectW※

×

○

47

SQLNativeSql

○

○

48

SQLNativeSqlW※

×

○

49

SQLParamData

○

○

50

SQLPutData

○

○

51

実行結果および実行結果情報の取得

SQLRowCount

○

○

52

SQLNumResultCols

○

○

53

SQLDescribeCol

○

○

54

SQLDescribeColW※

×

○

55

SQLColAttribute

○

○

56

SQLColAttributeW※

×

○

57

SQLBindCol

○

○

58

SQLFetch

○

○

59

SQLFetchScroll

×

×

HADBには，逆方向のカーソルなどの機能がないため，無条件にエラーになります。ただし，マイクロソフト社提供のカーソルライブラリを使用すると，この関数を使用できます。

詳細については，「15.1.4　ODBCカーソルライブラリの使用について」を参照してください。

60

SQLGetData

○

○

−

61

SQLSetPos

×

×

無条件にエラーになります。ただし，マイクロソフト社提供のカーソルライブラリを使用すると，この関数を使用できます。

詳細については，「15.1.4　ODBCカーソルライブラリの使用について」を参照してください。

62

SQLBulkOperations

×

×

HADBはブックマークをサポートしていないため，無条件にエラーになります。

63

SQLMoreResults

○

○

常にSQL_NO_DATAが返却されます。

64

SQLGetDiagField

○

○

−

65

SQLGetDiagFieldW※

×

○

66

SQLGetDiagRec

○

○

67

SQLGetDiagRecW※

×

○

68

データソースのシステム情報の取得

SQLColumnPrivileges

○

○

検索結果セットの行数は，常に0行になります。

69

SQLColumnPrivilegesW※

×

○

70

SQLColumns

○

○

−

71

SQLColumnsW※

×

○

72

SQLForeignKeys

○

○

73

SQLForeignKeysW※

×

○

74

SQLPrimaryKeys

○

○

75

SQLPrimaryKeysW※

×

○

76

SQLProcedureColumns

○

○

検索結果セットの行数は，常に0行になります。

77

SQLProcedureColumnsW※

×

○

78

SQLProcedures

○

○

79

SQLProceduresW※

×

○

80

SQLSpecialColumns

○

○

81

SQLSpecialColumnsW※

×

○

82

SQLStatistics

○

○

−

83

SQLStatisticsW※

×

○

84

SQLTablePrivileges

○

○

85

SQLTablePrivilegesW※

×

○

86

SQLTables

○

○

87

SQLTablesW※

×

○

88

SQL実行の終了

SQLFreeStmt

○

○

89

SQLCloseCursor

○

○

90

SQLCancel

○

○

91

SQLEndTran

○

○

92

データソースとの切断

SQLDisconnect

○

○

93

SQLFreeHandle

○

○

（凡例）

○：サポート

×：未サポート

△：ドライバマネージャが提供

−：なし

注※

SQLxxxW関数では，MS-Unicodeの文字列データとHADBが対応している文字コードを変換する処理を行います。文字コード変換処理については，「15.1.3　文字コード変換について」を参照してください。

16.2　SQLxxx関数およびSQLxxxW関数の留意事項

この節では，この章で記載している次の関数の留意事項について説明します。

ODBC3.0で使用するSQLxxx関数

ODBC3.5で使用するSQLxxxW関数

ODBC3.0のSQLxxx関数でSQLCHAR型を定義している引数については，ODBC3.5のSQLxxxW関数ではSQLWCHAR型を定義しています。

また，長さを指定するパラメタについては，次のように指定します。

ODBC3.0のSQLxxx関数のパラメタ：バイト長

ODBC3.5のSQLxxxW関数

パラメタがSQLPOINTER型の場合：バイト長

パラメタがSQLWCHAR型の場合：文字数

なお，ODBC3.0とODBC3.5で使用する関数名が異なる場合は，ODBC3.0で使用するSQLxxx関数名，ODBC3.5で使用するSQLxxxW関数名の順に記載しています。

16.3　データソースとの接続

ここでは，データソースとの接続時に使用するODBC関数について説明します。

16.3.1　SQLAllocHandle

(1)　機能

環境，接続，ステートメント，およびディスクリプタのハンドルを割り当てます。

(2)　形式

 SQLRETURN SQLAllocHandle
 (
   SQLSMALLINT     HandleType,        /* In */
   SQLHANDLE       InputHandle,       /* In */
   SQLHANDLE     * OutputHandlePtr    /* In/Out */
 )

(3)　引数

HandleType：

次のどれかのハンドルの種類を指定します。

SQL_HANDLE_ENV：環境ハンドル

SQL_HANDLE_DBC：接続ハンドル

SQL_HANDLE_STMT：ステートメントハンドル

SQL_HANDLE_DESC：ディスクリプタハンドル

InputHandle：

HandleTypeパラメタの値に応じて次の入力ハンドルを指定します。

HandleType

InputHandleに指定する値

SQL_HANDLE_ENV

SQL_NULL_HANDLE

SQL_HANDLE_DBC

環境ハンドル

SQL_HANDLE_STMT

接続ハンドル

SQL_HANDLE_DESC

接続ハンドル

OutputHandlePtr：

新しく割り当てられたハンドルを返すバッファへのポインタを指定します。

戻り値がSQL_SUCCESSの場合は，ハンドルの値が設定されます。SQL_ERRORの場合は，次の値が設定されます。

HandleType

OutputHandlePtrに設定される値

SQL_HANDLE_ENV

NULL

SQL_HANDLE_DBC

SQL_NULL_HDBC

SQL_HANDLE_STMT

SQL_NULL_HSTMT

SQL_HANDLE_DESC

SQL_NULL_HDESC

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08003

接続が存在しない

接続が完了していません。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

○

HY009

NULLポインタの不正使用

○

HY010

関数シーケンスエラー

接続ハンドル取得前にODBCバージョンの設定が行われていません。

○

HY013

メモリ管理エラー

HandleTypeがSQL_HANDLE_DBC，SQL_HANDLE_STMT，またはSQL_HANDLE_DESCであるが，メモリオブジェクトにアクセスできません（メモリ不足）。

×

HY014

ハンドル数の上限を超過

−

×

HY092

無効な属性識別子，または無効なオプション識別子

HandleTypeに指定できない値が指定されました。

○

HYC00

オプション機能は実装されていない

−

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.3.2　SQLConnect，SQLConnectW

(1)　機能

HADB ODBCドライバとデータソース（HADBサーバ）の接続を確立します。

なお，SQLConnectまたはSQLConnectWを実行するにはCONNECT権限が必要です。

(2)　形式

SQLConnectの場合

SQLRETURN SQLConnect
(
  SQLHDBC           ConnectionHandle,  /* In */
  SQLCHAR         * ServerName,        /* In */
  SQLSMALLINT       NameLength1,       /* In */
  SQLCHAR         * UserName,          /* In */
  SQLSMALLINT       NameLength2,       /* In */
  SQLCHAR         * Authentication,    /* In */
  SQLSMALLINT       NameLength3        /* In */
)

SQLConnectWの場合

SQLRETURN SQLConnectW
(
  SQLHDBC           ConnectionHandle,  /* In */
  SQLWCHAR        * ServerName,        /* In */
  SQLSMALLINT       NameLength1,       /* In */
  SQLWCHAR        * UserName,          /* In */
  SQLSMALLINT       NameLength2,       /* In */
  SQLWCHAR        * Authentication,    /* In */
  SQLSMALLINT       NameLength3        /* In */
)

(3)　引数

ConnectionHandle：

コネクションハンドルを指定します。

ServerName：

データソース名を指定します。

NameLength1：

データソース名の長さ※を指定します。

データソース名がNULL終端文字で終わる場合は，SQL_NTSを指定する必要があります。

また，0や負の値を指定した場合は，エラーとなります。

UserName：

HADBサーバに接続するユーザID（認可識別子）を指定します。

NameLength2：

ユーザIDの長さ※を指定します。

ユーザIDがNULL終端文字で終わる場合は，SQL_NTSを指定する必要があります。

また，0や負の値を指定した場合は，エラーとなります。

Authentication：

HADBサーバに接続する認可識別子のパスワードを指定します。NULLを指定した場合は，エラーとなります。

ODBC実装規約によって，パスワードには，[，]，{，}，(，)，,，;，?，*，=，!，@の13種類の文字は含めないことを推奨します。HADBのパスワードについては，マニュアルHADB　システム構築・運用ガイドのパスワードの指定規則を参照してください。

NameLength3：

パスワードの長さ※を指定します。

パスワードがNULL終端文字で終わる場合は，SQL_NTSを指定する必要があります。

負の値または256以上の値を指定した場合は，エラーとなります。

また，Authenticationに256バイト以上の文字列を指定し，かつ，この引数にSQL_NTSを指定した場合は，エラーとなります。

注※

長さの単位は，SQLConnectの場合はバイト長，SQLConnectWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01S02

オプション値の変更

×

08001

クライアントが接続を確立できない

×

08002

接続名が使用中である

○

08004

サーバが接続を拒否した

×

08S01

通信リンク失敗

×

28000

無効な認証指定

○

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C052

バージョン不一致エラー

ODBCドライバとHADBクライアントのバージョンが異なります。

○

5D001

HADB固有のエラー

HADBでエラーが発生しましたが，固有のSQLSTATEまたはエラーメッセージが取得できません。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

○

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM002

データソースが見つからない

かつ

デフォルトのドライバが指定されていない

×

IM003

指定されたドライバがロードできない

×

IM004

ドライバがSQL_HANDLE_ENVに対するSQLAllocHandleに失敗した

×

IM005

ドライバがSQL_HANDLE_DBCに対するSQLAllocHandleに失敗した

×

IM006

ドライバがSQLSetConnectAttrまたはSQLSetConnectAttrWに失敗した

×

IM009

トランスレータDLLをロードできない

×

IM010

データソース名が長過ぎる

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.3.3　SQLDriverConnect，SQLDriverConnectW

(1)　機能

次の接続属性のどれかを使用して，データソース（HADBサーバ）との接続を確立します。

データソース名称，1つ以上の認可識別子，1つ以上のパスワード，およびデータソースとの接続に必要なほかの情報を含む接続文字列を使用して接続を確立します。

部分的な接続文字列および追加情報を使用しないで接続を確立します。この場合，ドライバマネージャとHADB ODBCドライバは，APに接続情報を要求します。

システム定義で定義されていないデータソースとの接続を確立します。アプリケーションが部分的な接続文字列を提供した場合，HADB ODBCドライバはユーザに接続情報を要求します。

.dsnファイルの情報から作成された接続文字列を使用して，データソースとの接続を確立します。

接続が確立すると，SQLDriverConnectまたはSQLDriverConnectWは完全な接続文字列を返します。

なお，SQLDriverConnectまたはSQLDriverConnectWを実行するにはCONNECT権限が必要です。

(2)　形式

SQLDriverConnectの場合

SQLRETURN SQLDriverConnect
(
  SQLHDBC         ConnectionHandle,        /* In */
  SQLHWND         WindowHandle,            /* In */
  SQLCHAR       * InConnectionString,      /* In */
  SQLSMALLINT     StringLength1,           /* In */
  SQLCHAR       * OutConnectionString,     /* Out */
  SQLSMALLINT     BufferLength,            /* In */
  SQLSMALLINT   * StringLength2Ptr,        /* Out */
  SQLUSMALLINT    DriverCompletion         /* In */
)

SQLDriverConnectWの場合

SQLRETURN SQLDriverConnectW
(
  SQLHDBC         ConnectionHandle,        /* In */
  SQLHWND         WindowHandle,            /* In */
  SQLWCHAR      * InConnectionString,      /* In */
  SQLSMALLINT     StringLength1,           /* In */
  SQLWCHAR      * OutConnectionString,     /* Out */
  SQLSMALLINT     BufferLength,            /* In */
  SQLSMALLINT   * StringLength2Ptr,        /* Out */
  SQLUSMALLINT    DriverCompletion         /* In */
)

(3)　引数

ConnectionHandle：

接続ハンドルを指定します。

WindowHandle：

親ウィンドウのハンドルを指定します。

ウィンドウを適用できない，またはダイアログボックスを表示しない場合は，NULLポインタを指定してください。

InConnectionString：

接続文字列を指定します。

接続文字列に指定できる接続属性は次のとおりです。

接続属性

説明

DSN

データソース名称

DRIVER

ODBCドライバ名称："Hitachi Advanced Data Binder ODBC Driver"

UID

認可識別子

PWD

パスワード

CLTPATH

クライアント定義ファイルの絶対パス

StringLength1：

InConnectionStringに指定した接続文字列の長さ※を指定します。

InConnectionStringに指定した接続文字列がNULL終端文字で終わる場合は，SQL_NTSを指定する必要があります。

また，0や負の値を指定した場合は，エラーとなります。

OutConnectionString：

完全な接続文字列を格納するバッファへのポインタを指定します。

HADBサーバへの接続に成功した場合の接続文字列を完全な接続文字列として返します。

BufferLength：

OutConnectionStringを格納するバッファの長さ※を指定します。

この長さにNULL終端文字は含まれます。SQL_NTSは指定できません。

StringLength2Ptr：

完全な接続文字列の有効な長さ※を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

重要

ここに格納された接続文字列の長さ※が，BufferLengthからNULL終端文字分を引いた長さ※より大きい場合，OutConnectionStringに格納される文字列はBufferLengthからNULL終端文字分を引いた長さ※に切り捨てられ，末尾にNULL終端文字が付加されます。

DriverCompletion：

ドライバマネージャまたはHADB ODBCドライバがさらに接続情報を必要とするかどうかをフラグで指定します。次のフラグが指定できます。

SQL_DRIVER_PROMPT

SQL_DRIVER_COMPLETE

SQL_DRIVER_COMPLETE_REQUIRED

SQL_DRIVER_NOPROMPT

注※

長さの単位は，SQLDriverConnectの場合はバイト長，SQLDriverConnectWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_NEED_DATA，SQL_NO_DATA，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

*OutConnectionStringバッファの大きさが不足しているため，完全な接続文字列を格納できませんでした（情報が切り捨てられました）。切り捨てられる前の完全な接続文字列の長さが，*StringLength2Ptrバッファに格納されます。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S00

無効な接続文字列属性

接続文字列（InConnectionString）に無効な属性キーワードが含まれています。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S02

オプション値の変更

HADB ODBCドライバはSQLSetConnectAttrまたはSQLSetConnectAttrWのValuePtrに指定された値をサポートしていないため，類似の値で置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

×

01S08

ファイルDSNの保存エラー

*InConnectionStringの接続文字列にFILEDSNキーワードが含まれていますが，.dsnファイルが保存されませんでした。このとき，SQL_SUCCESS_WITH_INFOを返します。

×

01S09

無効なキーワード

−

×

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

08001

クライアントが接続を確立できない

HADB ODBCドライバは，データソースに接続できません。

DriverCompletionにSQL_DRIVER_NOPROMPTが指定されていますが，接続に必要な属性文字列がInConnectionStringに指定されていません。

○

08002

接続名が使用中である

−

×

08004

サーバが接続を拒否した

データソースは実装時に定義された理由で接続の確立を拒否しました。

×

08S01

通信リンク失敗

−

×

28000

無効な認証指定

接続文字列で指定された認可識別子またはパスワードが，データソース定義の制限に違反しています。

○

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C052

バージョン不一致エラー

ODBCドライバとHADBクライアントのバージョンが異なります。

○

5D001

HADB固有のエラー

HADBでエラーが発生しましたが，固有のSQLSTATEまたはエラーメッセージが取得できません。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

×

HY013

メモリ管理エラー

メモリオブジェクトにアクセスできないため，関数の呼び出しを処理できません。

×

HY090

無効な文字列長または無効なバッファ長

InConnectionStringに指定された接続属性に対する属性値が無効な長さです。

BufferLengthに無効な値（SQL_NTS）が指定されました。

○

HY092

無効な属性識別子，または無効なオプション識別子

−

×

HY110

DriverCompletionが無効なオプション識別子

×

HYC00

オプション機能は実装されていない

HADB ODBCドライバはアプリケーションが要求したODBCの動作をサポートしていません。

×

HYT00

タイムアウト終了

データソースの接続が完了する前にログインタイムアウト時間が経過しました。ログインタイムアウト時間は，SQLSetConnectAttrまたはSQLSetConnectAttrWのSQL_ATTR_LOGIN_TIMEOUTで設定できます。

×

HYT01

接続タイムアウト終了

データソースが要求に応答する前に接続タイムアウト時間が経過しました。接続タイムアウト時間は，SQLSetConnectAttrまたはSQLSetConnectAttrWのSQL_ATTR_CONNECTION_TIMEOUTで設定できます。

×

IM001

ドライバはこの関数をサポートしていない

−

×

IM002

データソースが見つからない

かつ

デフォルトのドライバが指定されていない

×

IM003

指定されたドライバがロードできない

×

IM004

ドライバがSQL_HANDLE_ENVに対するSQLAllocHandleに失敗した

×

IM005

ドライバがSQL_HANDLE_DBCに対するSQLAllocHandleに失敗した

×

IM006

ドライバがSQLSetConnectAttrまたはSQLSetConnectAttrWに失敗した

×

IM007

データソースまたはドライバが指定されていない

かつ

ダイアログが禁止された

接続文字列にデータソース名称またはドライバ名称が指定されていませんが，DriverCompletionにSQL_DRIVER_NOPROMPTが指定されています。

×

IM008

ダイアログの失敗

ドライバはログインダイアログボックスを表示しようとしましたが失敗しました。

WindowHandleにNULLポインタが指定されていますが，DriverCompletionにSQL_DRIVER_NOPROMPTが指定されていません。

×

IM009

トランスレータDLLをロードできない

−

×

IM010

データソース名が長過ぎる

×

IM011

ドライバ名が長過ぎる

×

IM012

DRIVERキーワードの構文エラー

×

IM014

ファイルDSNの名前が無効である

×

IM015

ファイルデータソースが壊れている

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

接続文字列に指定する接続属性を次の表に示します。

表16‒2　接続文字列に指定する接続属性

項番

接続属性

接続属性値

指定要否

DSN接続

DRIVER接続

1

DSN

データソース名称を指定してください。

○

−

2

DRIVER

ODBCドライバ名称を指定してください。ODBCドライバの名称は"Hitachi Advanced Data Binder ODBC Driver"です。

−

○

3

UID

認可識別子を指定してください。

○

○

4

PWD

パスワードを指定します。

255バイト以下の文字列を指定してください。

○

○

5

CLTPATH

クライアント定義ファイルを絶対パスで指定してください。クライアント定義ファイルを絶対パスで指定する際，255バイト以下の文字列を指定してください。この指定を省略した場合は，環境定義ADBCLTDIRに指定したフォルダ下にあるファイルを使用します。

−

△

（凡例）

○：必ず指定する接続属性です。

△：任意で指定する接続属性です。

−：指定する必要がない接続属性です。

接続文字列の指定例を次に示します。

"DSN=XXXXX;UID=YYYYY;PWD=ZZZZZ"

"DRIVER=Hitachi Advanced Data Binder ODBC Driver;CLTPATH=XXXXX;UID=YYYYY;PWD=ZZZZZ"

DSN接続属性およびDRIVER接続属性を接続文字列中に両方指定した場合，先に指定した接続属性が有効になります。

同じ接続属性が接続文字列中に重複して指定されている場合，あとに指定した接続属性の接続属性値が有効になります。

接続文字列に指定する接続属性は順不同に指定できますが，最初の要求時に"DSN=XXXXX"または"DRIVER=Hitachi Advanced Data Binder ODBC Driver"の指定がない場合，ODBCドライバマネージャでエラーになります。ただし，FILEDSN指定の場合は該当しません。

接続属性は大文字，小文字を区別しません。

接続属性値は大文字，小文字を区別します。

;（セミコロン）は，区切り文字として扱います。このため，接続属性値のパスワード文字列中に;（セミコロン）を含めることはできません。また，ODBC実装規約によって，パスワードには，[，]，{，}，(，)，,，?，*，=，!，@の12種類の文字は含めないことを推奨します。HADBのパスワードについては，マニュアルHADB　システム構築・運用ガイドのパスワードの指定規則を参照してください。

16.3.4　SQLBrowseConnect，SQLBrowseConnectW

(1)　機能

データソース（HADBサーバ）との接続に必要な属性と属性値を1つずつ参照する方法をサポートします。SQLBrowseConnectまたはSQLBrowseConnectWを呼び出すたびに，連続するレベルの属性と属性値を返します。すべてのレベルの属性を指定すると，データソースへの接続が完了し，完全な接続文字列を返します。

なお，SQLBrowseConnectまたはSQLBrowseConnectWを実行するにはCONNECT権限が必要です。

(2)　形式

SQLBrowseConnectの場合

SQLRETURN SQLBrowseConnect
(
  SQLHDBC         ConnectionHandle,        /* In */
  SQLCHAR       * InConnectionString,      /* In */
  SQLSMALLINT     StringLength1,           /* In */
  SQLCHAR       * OutConnectionString,     /* Out */
  SQLSMALLINT     BufferLength,            /* In */
  SQLSMALLINT   * StringLength2Ptr         /* Out */
)

SQLBrowseConnectWの場合

SQLRETURN SQLBrowseConnectW
(
  SQLHDBC         ConnectionHandle,        /* In */
  SQLWCHAR      * InConnectionString,      /* In */
  SQLSMALLINT     StringLength1,           /* In */
  SQLWCHAR      * OutConnectionString,     /* Out */
  SQLSMALLINT     BufferLength,            /* In */
  SQLSMALLINT   * StringLength2Ptr         /* Out */
)

(3)　引数

ConnectionHandle：

接続ハンドルを指定します。

InConnectionString：

ブラウズ要求接続文字列を指定します。

ブラウズ要求接続文字列に指定できる接続属性は次のとおりです。

接続属性

説明

DSN

データソース名称

DRIVER

ODBCドライバ名称："Hitachi Advanced Data Binder ODBC Driver"

UID

認可識別子

PWD

パスワード

CLTPATH

クライアント定義ファイルの絶対パス

StringLength1：

InConnectionStringに指定したブラウズ要求接続文字列の長さ※を指定します。

InConnectionStringに指定したブラウズ要求接続文字列がNULL終端文字で終わる場合は，SQL_NTSを指定する必要があります。

また，0や負の値を指定した場合は，エラーとなります。

OutConnectionString：

ブラウズ結果接続文字列を格納するバッファへのポインタを指定します。

HADBサーバへの接続に成功した場合の接続文字列を完全な接続文字列として返します。

SQL_NEED_DATAを返す場合，HADBサーバとの接続時に不足した接続属性を返します。

BufferLength：

OutConnectionStringを格納するバッファの長さ※を指定します。

この長さにNULL終端文字は含まれます。SQL_NTSは指定できません。

StringLength2Ptr：

ブラウズ結果接続文字列の有効な長さ※を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

OutConnectionStringに返される文字列の有効な長さ※を返します。

重要

ここに格納された接続文字列の長さ※が，BufferLengthからNULL終端文字分を引いた長さ※より大きい場合，OutConnectionStringに格納される文字列はBufferLengthからNULL終端文字分を引いた長さ※に切り捨てられ，末尾にNULL終端文字が付加されます。

注※

長さの単位は，SQLBrowseConnectの場合はバイト長，SQLBrowseConnectWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_NEED_DATA，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

*OutConnectionStringバッファの大きさが不足しているため，ブラウズ結果接続文字列を格納できませんでした（情報が切り捨てられました）。切り捨てられる前のブラウズ結果接続文字列の長さが，*StringLength2Ptrバッファに格納されます。このとき，SQL_NEED_DATAを返します。

○

01S00

無効な接続文字列属性

ブラウズ要求接続文字列（InConnectionString）に無効な属性キーワードが含まれています。このとき，SQL_NEED_DATAを返します。

ブラウズ要求接続文字列（InConnectionString）に指定された属性キーワードは現在の接続レベルに適用できません。このとき，SQL_NEED_DATAを返します。

○

01S02

オプション値の変更

HADB ODBCドライバはSQLSetConnectAttrまたはSQLSetConnectAttrWのValuePtrに指定された値をサポートしていないため，類似の値で置き換えられました。このとき，SQL_SUCCESS_WITH_INFOを返します。

×

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

08001

クライアントが接続を確立できない

HADB ODBCドライバは，データソースに接続できません。

×

08002

接続名が使用中である

−

×

08S01

通信リンク失敗

×

28000

無効な認証指定

ブラウズ要求接続文字列で指定された認可識別子またはパスワードが，データソースの制限に違反しています。

○

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C052

バージョン不一致エラー

ODBCドライバとHADBクライアントのバージョンが異なります。

○

5D001

HADB固有のエラー

HADBでエラーが発生しましたが，固有のSQLSTATEまたはエラーメッセージが取得できません。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

×

HY013

メモリ管理エラー

メモリオブジェクトにアクセスできないため，関数の呼び出しを処理できません。

×

HY090

無効な文字列長または無効なバッファ長

InConnectionStringに指定された接続属性に対する属性値が無効な長さです。

BufferLengthに無効な値（SQL_NTS）が指定されました。

○

HYT00

タイムアウト終了

データソースの接続が完了する前にログインタイムアウト時間が経過しました。ログインタイムアウト時間は，SQLSetConnectAttrまたはSQLSetConnectAttrWのSQL_ATTR_LOGIN_TIMEOUTで設定できます。

×

HYT01

接続タイムアウト終了

データソースが要求に応答する前に接続タイムアウト時間が経過しました。接続タイムアウト時間は，SQLSetConnectAttrまたはSQLSetConnectAttrWのSQL_ATTR_CONNECTION_TIMEOUTで設定できます。

×

IM001

ドライバはこの関数をサポートしていない

−

×

IM002

データソースが見つからない

かつ

デフォルトのドライバが指定されていない

×

IM003

指定されたドライバがロードできない

×

IM004

ドライバがSQL_HANDLE_ENVに対するSQLAllocHandleに失敗した

×

IM005

ドライバがSQL_HANDLE_DBCに対するSQLAllocHandleに失敗した

×

IM006

ドライバがSQLSetConnectAttrまたはSQLSetConnectAttrWに失敗した

×

IM009

トランスレータDLLをロードできない

×

IM010

データソース名が長過ぎる

×

IM011

ドライバ名が長過ぎる

×

IM012

DRIVERキーワードの構文エラー

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

ブラウズ要求接続文字列に指定する接続属性を次の表に示します。

表16‒3　ブラウズ要求接続文字列に指定する接続属性

項番

接続属性

接続属性値

指定要否

DSN接続

DRIVER接続

1

DSN

データソース名称を指定してください。

○

−

2

DRIVER

ODBCドライバ名称を指定してください。ODBCドライバの名称は"Hitachi Advanced Data Binder ODBC Driver"です。

−

○

3

UID

認可識別子を指定してください。

○

○

4

PWD

パスワードを指定します。

255バイト以下の文字列を指定してください。

○

○

5

CLTPATH

クライアント定義ファイルを絶対パスで指定してください。クライアント定義ファイルを絶対パスで指定する際，255バイト以下の文字列を指定してください。この指定を省略した場合は，環境定義ADBCLTDIRに指定したフォルダ下にあるファイルを使用します。

−

△

（凡例）

○：必ず指定する接続属性です。

△：任意で指定する接続属性です。

−：指定する必要がない接続属性です。

ブラウズ要求接続文字列の指定例を次に示します。

"DSN=XXXXX;UID=YYYYY;PWD=ZZZZZ"

"DRIVER=Hitachi Advanced Data Binder ODBC Driver;CLTPATH=XXXXX;UID=YYYYY;PWD=ZZZZZ"

DSN接続属性およびDRIVER接続属性をブラウズ要求接続文字列中に両方指定した場合，あとに指定した接続属性が有効になります。

同じ接続属性がブラウズ要求接続文字列中に重複して指定されている場合，先に指定した接続属性の接続属性値が有効になります。

ブラウズ要求接続文字列に指定する接続属性は順不同に指定できますが，最初の要求時に"DSN=XXXXX"または"DRIVER=Hitachi Advanced Data Binder ODBC Driver"の指定がない場合，ODBCドライバマネージャでエラーになります。

接続属性は大文字，小文字を区別しません。

接続属性値は大文字，小文字を区別します。

;（セミコロン）は，区切り文字として扱います。このため，接続属性値のパスワード文字列中に;（セミコロン）を含めることはできません。また，ODBC実装規約によって，パスワードには，[，]，{，}，(，)，,，?，*，=，!，@の12種類の文字は含めないことを推奨します。HADBのパスワードについては，マニュアルHADB　システム構築・運用ガイドのパスワードの指定規則を参照してください。

この関数の引数に指定したパラメタの値不正によってSQL_NEED_DATAが返却された場合にこの関数を再実行し，パスワードの文字列などの不正によってSQL_ERRORが返却されたときは，そのままSQLFreeHandleを実行してもODBCドライバマネージャからSQL_ERROR（SQLSTATE：HY010）が返却されて，ハンドルが解放されないおそれがあります。この場合，正しいパラメタを設定して関数を再実行したあとに，SQLFreeHandleを実行してください。または，アプリケーションを強制終了してください。

16.4　ドライバおよびデータソースの情報取得

ここでは，ドライバおよびデータソースの情報取得時に使用するODBC関数について説明します。

16.4.1　SQLDataSources，SQLDataSourcesW

(1)　機能

次の情報を返します。

データソース名

データソースに関連づけられたドライバの記述

この関数は，ドライバマネージャで実行できます。HADB ODBCドライバでは，常にSQL_SUCCESSを返す関数としてSQLDataSourcesまたはSQLDataSourcesWを提供しています。

(2)　形式

SQLDataSourcesの場合

SQLRETURN SQLDataSources
(
  SQLHENV           EnvironmentHandle,  /* In */
  SQLUSMALLINT      Direction,          /* In */
  SQLCHAR         * ServerName,         /* Out */
  SQLSMALLINT       BufferLength1,      /* In */
  SQLSMALLINT     * NameLength1Ptr,     /* Out */
  SQLCHAR         * Description,        /* Out */
  SQLSMALLINT       BufferLength2,      /* In */
  SQLSMALLINT     * NameLength2Ptr      /* Out */
)

SQLDataSourcesWの場合

SQLRETURN SQLDataSourcesW
(
  SQLHENV           EnvironmentHandle,  /* In */
  SQLUSMALLINT      Direction,          /* In */
  SQLWCHAR        * ServerName,         /* Out */
  SQLSMALLINT       BufferLength1,      /* In */
  SQLSMALLINT     * NameLength1Ptr,     /* Out */
  SQLWCHAR        * Description,        /* Out */
  SQLSMALLINT       BufferLength2,      /* In */
  SQLSMALLINT     * NameLength2Ptr      /* Out */
)

(3)　引数

EnvironmentHandle：

環境ハンドルを指定します。

Direction：

ドライバマネージャがデータソースの情報を取得するときの読み込み方式を指定します。次の値を指定できます。

SQL_FETCH_FIRST：一覧の先頭からデータソース名（以降DSN）をフェッチします（ユーザDSN，システムDSNの両方）。

SQL_FETCH_FIRST_USER：最初のユーザDSNをフェッチします。

SQL_FETCH_FIRST_SYSTEM：最初のシステムDSNをフェッチします。

SQL_FETCH_NEXT：一覧の中の次のDSNをフェッチします。対象となるのはFIRSTでフェッチ対象としたDSNと同じ種類のものです（ユーザDSNとシステムDSNの両方，ユーザDSNだけ，またはシステムDSNだけ）。

ServerName：

データソース名を返すバッファへのポインタを指定します。

BufferLength1：

*ServerNameバッファの長さ※を指定します。指定が有効になる最大値はSQL_MAX_DSN_LENGTHにNULL終端文字分を足した値です。それより大きい値を指定しても前述の最大値が指定されます。この長さにNULL終端文字は含まれます。

NameLength1Ptr：

*ServerNameの有効な長さ※の合計を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

重要

ここに格納されたデータソース名の長さ※が，BufferLength1からNULL終端文字分を引いた長さ※より大きい場合，*ServerNameに格納される文字列はBufferLength1からNULL終端文字分を引いた長さ※に切り捨てられ，末尾にNULL終端文字が付加されます。

Description：

データソースに関連づけられたドライバの記述（HADBサーバなど）を返すバッファへのポインタを指定します。

BufferLength2：

* Descriptionバッファの長さ※を指定します。

この長さにNULL終端文字は含まれます。

NameLength2Ptr：

*Descriptionに返す有効な長さ※の合計を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

重要

ここに格納されたドライバの記述の長さ※が，BufferLength2からNULL終端文字分を引いた長さ※より大きい場合，* Descriptionに格納される文字列はBufferLength2からNULL終端文字分を引いた長さ※に切り捨てられ，末尾にNULL終端文字が付加されます。

注※

長さの単位は，SQLDataSourcesの場合はバイト長，SQLDataSourcesWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESSが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

×

HY103

無効な取得コード

×

（凡例）

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.4.2　SQLDrivers，SQLDriversW

(1)　機能

ドライバ記述とドライバ属性キーワードの一覧を返します。

この関数は，ドライバマネージャで実行できます。HADB ODBCドライバでは，常にSQL_SUCCESSを返す関数としてSQLDriversまたはSQLDriversWを提供しています。

(2)　形式

SQLDriversの場合

SQLRETURN SQLDrivers
(
  SQLHENV            EnvironmentHandle,     /* In */
  SQLUSMALLINT       Direction,             /* In */
  SQLCHAR          * DriverDescription,     /* Out */
  SQLSMALLINT        BufferLength1,         /* In */
  SQLSMALLINT      * DescriptionLengthPtr,  /* Out */
  SQLCHAR          * DriverAttributes,      /* Out */
  SQLSMALLINT        BufferLength2,         /* In */
  SQLSMALLINT      * AttributesLengthPtr    /* Out */
)

SQLDriversWの場合

SQLRETURN SQLDriversW
(
  SQLHENV            EnvironmentHandle,     /* In */
  SQLUSMALLINT       Direction,             /* In */
  SQLWCHAR         * DriverDescription,     /* Out */
  SQLSMALLINT        BufferLength1,         /* In */
  SQLSMALLINT      * DescriptionLengthPtr,  /* Out */
  SQLWCHAR         * DriverAttributes,      /* Out */
  SQLSMALLINT        BufferLength2,         /* In */
  SQLSMALLINT      * AttributesLengthPtr    /* Out */
)

(3)　引数

EnvironmentHandle：

環境ハンドルを指定します。

Direction：

ドライバマネージャがデータソースの情報を取得するときの読み込み方式を指定します。次の値を指定できます。

SQL_FETCH_FIRST：一覧の先頭からドライバ記述をフェッチします（ユーザDSN，システムDSNの両方）。

SQL_FETCH_NEXT：一覧の中の次のドライバ記述をフェッチします。

DriverDescription：

ドライバ記述を返すバッファのポインタを指定します。

BufferLength1：

ドライバ記述を返すバッファの長さ※を指定します。

DescriptionLengthPtr：

*DriverDescriptionの有効な長さ※の合計を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

DriverAttributes：

ドライバの属性値を格納したバッファのポインタを指定します。

BufferLength2：

ドライバの属性値を返すバッファの長さ※を指定します。

AttributesLengthPtr：

*AttributesLengthPtrの有効な長さ※の合計を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

注※

長さの単位は，SQLDriversの場合はバイト長，SQLDriversWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESSが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

×

HY103

無効な取得コード

×

（凡例）

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.4.3　SQLGetInfo，SQLGetInfoW

(1)　機能

接続に関連づけられているドライバとデータソースの一般的な情報を返します。

(2)　形式

SQLGetInfoの場合

SQLRETURN SQLGetInfo
(
  SQLHDBC          ConnectionHandle,   /* In */
  SQLUSMALLINT     InfoType,           /* In */
  SQLPOINTER       InfoValuePtr,       /* In/Out */
  SQLSMALLINT      BufferLength,       /* In */
  SQLSMALLINT    * StringLengthPtr     /* Out */
)

SQLGetInfoWの場合

SQLRETURN SQLGetInfoW
(
  SQLHDBC          ConnectionHandle,   /* In */
  SQLUSMALLINT     InfoType,           /* In */
  SQLPOINTER       InfoValuePtr,       /* In/Out */
  SQLSMALLINT      BufferLength,       /* In */
  SQLSMALLINT    * StringLengthPtr     /* Out */
)

(3)　引数

ConnectionHandle：

接続ハンドルを指定します。

InfoType：

情報型を指定します。

指定できる情報型については，「16.13　SQLGetInfoおよびSQLGetInfoWのInfoTypeに指定できる情報型」を参照してください。

InfoValuePtr：

情報を返すバッファのポインタを指定します。要求されたInfoTypeに応じた情報が返されます。指定できる情報型をInfoTypeに指定した場合でも，その情報型が未サポートのときは，空の文字列や，0が返されることがあります。

BufferLength：

*InfoValuePtrバッファの長さ（単位：バイト長）を指定します。この長さにNULL終端文字は含まれます。SQL_NTSは指定できません。

*InfoValuePtrの値が文字列以外，またはInfoValuePtrがNULLポインタの場合，この引数の指定は無視されます。

InfoValuPtrの値が文字列以外の場合，HADB ODBCドライバはInfoTypeに基づき，*InfoValuePtrのサイズをSQLUSMALLINTまたはSQLUINTEGERと見なします。バッファサイズが不足している場合の動作は保証しません。

StringLengthPtr：

*InfoValuePtrに返す，有効な長さ（単位：バイト長）の合計を返すバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

重要

文字データの場合，この長さ（単位：バイト長）がBufferLengthからNULL終端文字分を引いた長さより大きい場合，*InfoValuePtrに格納される文字列はBufferLengthからNULL終端文字分を引いた長さ（単位：バイト長）に切り捨てられ，末尾にNULL終端文字が付加されます。そのほかのデータ型の場合，BufferLengthの値は無視され，ドライバはInfoTypeに基づき，*InfoValuePtrのサイズをSQLUSMALLINTまたはSQLUINTEGERと見なします。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

*InfoValuePtrバッファの大きさが不足しているため，要求されたすべての情報を格納できませんでした（情報が切り捨てられました）。切り捨てられる前の要求情報の長さが，*StringLengthPtrに格納されます。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

08003

接続が存在しない

−

×

08S01

通信リンク失敗

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY009

NULLポインタの不正使用

×

HY013

メモリ管理エラー

×

HY024

無効な属性値

×

HY090

無効な文字列長または無効なバッファ長

BufferLengthに無効な値（SQL_NTS）が指定されました。

○

HY096

情報型が範囲外である

InfoTypeに指定された値はサポートしていません。

○

HY117

接続がサスペンド中

−

×

HYC00

オプション機能は実装されていない

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

InfoTypeにSQL_DRIVER_ODBC_VER情報型以外を指定する場合，接続が確立している必要があります。

16.4.4　SQLGetFunctions

(1)　機能

指定したODBC関数がサポートされているかどうかの情報，または各ODBC関数のサポート情報の一覧を返します。

(2)　形式

SQLRETURN SQLGetFunctions
(
  SQLHDBC           ConnectionHandle,   /* In */
  SQLUSMALLINT      FunctionId,         /* In */
  SQLUSMALLINT    * SupportedPtr        /* Out */
)

(3)　引数

ConnectionHandle：

接続ハンドルを指定します。

FunctionId：

全関数のサポート情報リストを取得したい場合は，SQL_API_ODBC3_ALL_FUNCTIONSを指定します。

関数単体のサポート情報を取得したい場合は，調査対象のODBC関数の#define値を指定します。

SupportedPtr：

取得したい関数のサポート情報を返すバッファのポインタを指定します。

FunctionIdにODBC関数の#define値を指定した場合，SQL_TRUE（サポートされている）またはSQL_FALSE（サポートされていない）が返されます。

SupportedPtrにはNULLも指定できます。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY095

関数型が範囲外である

○

HYT01

接続タイムアウト終了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.4.5　SQLGetTypeInfo，SQLGetTypeInfoW

(1)　機能

HADB ODBCドライバがサポートしているデータ型に関する情報をSQL文の結果セットの形式で返します。

(2)　形式

SQLGetTypeInfoの場合

SQLRETURN SQLGetTypeInfo
(
  SQLHSTMT       StatementHandle,      /* In */
  SQLSMALLINT    DataType              /* In */
)

SQLGetTypeInfoWの場合

SQLRETURN SQLGetTypeInfoW
(
  SQLHSTMT       StatementHandle,      /* In */
  SQLSMALLINT    DataType              /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

DataType：

SQLデータ型識別子を指定します。取得したいデータによって次の値を指定します。

個別のデータ型に関する情報を取得する場合

「15.3.1　ODBCのSQLデータ型とHADBのデータ型の対応」に記載されているODBC SQLデータ型識別子を指定します。

サポートしているすべてのデータ型に関する情報を取得する場合

SQL_ALL_TYPESを指定します。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

SQLGetTypeInfoまたはSQLGetTypeInfoWを実行すると結果セットが作成されます。返却される結果セットの形式を次に示します。

表16‒4　返却されるResultSetオブジェクトの形式

列番号

型

列名

列の意味

1

Varchar

TYPE_NAME

HADBデータ型名

2

Smallint

DATA_TYPE

ODBC SQLデータ型

3

Integer

COLUMN_SIZE

列サイズ

4

Varchar

LITERAL_PREFIX

リテラルを引用するために使用する接頭辞

5

Varchar

LITERAL_SUFFIX

リテラルを引用するために使用する接尾辞

6

Varchar

CREATE_PARAMS

型の作成に使用するパラメタ

7

Smallint

NULLABLE

ナル値を使用できるかどうかを返します。

常にSQL_NULLABLE_UNKNOWNを返します。

8

Smallint

CASE_SENSITIVE

大文字と小文字を区別するかどうかを返します。

SQL_TRUE：文字列系データ型

SQL_FALSE：そのほかのデータ型

9

Smallint

SEARCHABLE

WHEREでデータ型がどのように使われるかを返します。

常にSQL_SEARCHABLEを返します。

10

Smallint

UNSIGNED_ATTRIBUTE

符号なし属性かどうかを返します。

SQL_FALSE：数値データ型（符号ありのため）

ナル値：そのほかのデータ型

11

Smallint

FIXED_PREC_SCALE

通貨の値になれるかどうかを返します。

常にSQL_FALSEを返します。

12

Smallint

AUTO_UNIQUE_VALUE

自動インクリメントの値に使用できるかどうかを返します。

常にナル値を返します。

13

Varchar

LOCAL_TYPE_NAME

型名の地域対応されたバージョン

型名と同じものを返します。

14

Smallint

MINIMUM_SCALE

サポートされる最小スケール

スケールが適用されない場合はナル値を返します。

15

Smallint

MAXIMUM_SCALE

サポートされる最大スケール

スケールが適用されない場合はナル値を返します。

16

Smallint

SQL_DATA_TYPE

SQL_DESC_TYPEフィールドに設定されるODBC SQLデータ型

17

Smallint

SQL_DATETIME_SUB

日付時刻のサブコード

日付時刻のデータ型以外の場合はナル値を返します。

18

Integer

NUM_PREC_RADIX

10：数値データ型

ナル値：そのほかのデータ型

19

Smallint

INTERVAL_PRECISION

常にナル値を返します。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01S02

オプション値の変更

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

×

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

○

HY004

無効なSQLデータ型

○

HY008

動作がキャンセルされた

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY117

接続がサスペンド中

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.5　ドライバオプションの設定および取得

ここでは，ドライバオプションの設定，および取得時に使用するODBC関数について説明します。

16.5.1　SQLSetConnectAttr，SQLSetConnectAttrW

(1)　機能

接続属性を設定します。

(2)　形式

SQLSetConnectAttrの場合

SQLRETURN SQLSetConnectAttr
(
  SQLHDBC           ConnectionHandle,   /* In */
  SQLINTEGER        Attribute,          /* In */
  SQLPOINTER        ValuePtr,           /* In */
  SQLINTEGER        StringLength        /* In */
)

SQLSetConnectAttrWの場合

SQLRETURN SQLSetConnectAttrW
(
  SQLHDBC           ConnectionHandle,   /* In */
  SQLINTEGER        Attribute,          /* In */
  SQLPOINTER        ValuePtr,           /* In */
  SQLINTEGER        StringLength        /* In */
)

(3)　引数

ConnectionHandle：

属性を設定する接続の接続ハンドルを指定します。

Attribute：

設定する接続属性を指定します。指定できる属性については，「16.14　SQLSetConnectAttr，SQLSetConnectAttrW，SQLGetConnectAttrおよびSQLGetConnectAttrWに指定できる属性」を参照してください。

ValuePtr：

Attributeで関連づけられた値を指すポインタまたは32ビット整数値を指定します。指定できる値については，「16.14　SQLSetConnectAttr，SQLSetConnectAttrW，SQLGetConnectAttrおよびSQLGetConnectAttrWに指定できる属性」を参照してください。

StringLength：

*ValuePtrの長さを指定します（単位：バイト長）。ValuePtrが整数の場合，この引数の指定は無視されます。

ValuePtrが文字列へのポインタである場合，文字列の長さ（単位：バイト長）またはSQL_NTSを指定します。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01S02

オプション値の変更

○

08002

接続名が使用中である

×

08003

接続が存在しない

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

×

25000

ローカルトランザクション中の不正な操作

×

3D000

無効なカタログ名

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

×

HY011

ここでは属性を設定できない

○

HY013

メモリ管理エラー

×

HY024

無効な属性値

○

HY090

無効な文字列長または無効なバッファ長

次の条件をすべて満たしています。

*ValuePtrが文字列です。

StringLengthが0より小さい値です。

StringLengthがSQL_NTS以外の値です。

○

HY092

無効な属性識別子，または無効なオプション識別子

−

○

HY114

ドライバは接続レベルの非同期実行をサポートしていない

×

HY117

接続がサスペンド中

×

HY121

カーソルライブラリとドライバ依存のコネクションプーリングは同時実行できない

×

HYC00

オプション機能は実装されていない

指定されたAttributeは，規格にはありますがサポートしていません。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

IM009

トランスレータDLLをロードできない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

S1118

ドライバは非同期通知をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

ODBC規約に存在しないHADB独自のAttributeを指定する場合は，adbodb.hをincludeしてください。

この関数で指定するトランザクションアクセスモード（属性はSQL_ATTR_ACCESS_MODE）は，次の表に示す優先順位に従って決まります（優先順位の番号が小さいほど，優先順位が高くなります）。

表16‒5　トランザクションアクセスモードの優先順位

優先順位

トランザクションアクセスモードの指定個所

1

SQLSetConnectAttrまたはSQLSetConnectAttrWの指定

2

クライアント定義のadb_clt_trn_access_modeオペランドの指定

16.5.2　SQLGetConnectAttr，SQLGetConnectAttrW

(1)　機能

接続ハンドルの属性に設定されている値を返します。

(2)　形式

SQLGetConnectAttrの場合

SQLRETURN SQLGetConnectAttr
(
  SQLHDBC           ConnectionHandle,    /* In */
  SQLINTEGER        Attribute,           /* In */
  SQLPOINTER        ValuePtr,            /* Out */
  SQLINTEGER        BufferLength,        /* In */
  SQLINTEGER      * StringLengthPtr      /* Out */
)

SQLGetConnectAttrWの場合

SQLRETURN SQLGetConnectAttrW
(
  SQLHDBC           ConnectionHandle,    /* In */
  SQLINTEGER        Attribute,           /* In */
  SQLPOINTER        ValuePtr,            /* Out */
  SQLINTEGER        BufferLength,        /* In */
  SQLINTEGER      * StringLengthPtr      /* Out */
)

(3)　引数

ConnectionHandle：

接続ハンドルを指定します。

Attribute：

取得する属性を指定します。指定できる属性については，「16.14　SQLSetConnectAttr，SQLSetConnectAttrW，SQLGetConnectAttrおよびSQLGetConnectAttrWに指定できる属性」を参照してください。

ValuePtr：

Attributeで指定された属性の値を返すバッファのポインタを指定します。ValuePtrにはNULLも指定できます。

BufferLength：

Attributeに指定された属性の値の型が，文字列またはバイナリの場合，*ValuePtrの長さ（単位：バイト長）を指定します。それ以外のデータ型の場合，この引数の指定は無視されます。

StringLengthPtr：

返した属性の値の有効な長さ（単位：バイト長）の合計を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

ValuePtrがNULLの場合，*StringLengthPtrに値は返されません。

(4)　戻り値

SQL_SUCCESS，SQL_NO_DATA，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

×

08003

接続が存在しない

○

08S01

通信リンク失敗

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

×

HY092

無効な属性識別子，または無効なオプション識別子

○

HYC00

オプション機能は実装されていない

○

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

ODBC規約に存在しないHADB独自のAttributeを指定する場合は，adbodb.hをincludeしてください。

16.5.3　SQLSetEnvAttr

(1)　機能

環境属性を設定します。

(2)　形式

SQLRETURN SQLSetEnvAttr
(
  SQLHENV           EnvironmentHandle,   /* In */
  SQLINTEGER        Attribute,           /* In */
  SQLPOINTER        ValuePtr,            /* In */
  SQLINTEGER        StringLength         /* In */
)

(3)　引数

EnvironmentHandle：

属性を設定する接続の環境ハンドルを指定します。

Attribute：

設定する環境属性を指定します。指定できる属性については，「16.15　SQLSetEnvAttrおよびSQLGetEnvAttrに指定できる属性」を参照してください。

ValuePtr：

Attributeで関連づけられた値を指すポインタまたは32ビット整数値を指定します。指定できる値については，「16.15　SQLSetEnvAttrおよびSQLGetEnvAttrに指定できる属性」を参照してください。

StringLength：

ValuePtrが文字列またはバイナリを指すポインタの場合，*ValuePtrの長さを指定します（単位：バイト長）。ValuePtrが整数の場合，この引数の指定は無視されます。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01S02

オプション値の変更

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

○

HY011

ここでは属性を設定できない

EnvironmentHandleに接続ハンドルが割り当てられています。

×

HY013

メモリ管理エラー

−

×

HY024

無効な属性値

Attributeに指定された値に対して，ValuePtrに無効な値が指定されています。

○

HY090

無効な文字列長または無効なバッファ長

StringLengthに0より小さく，SQL_NTS以外の値が指定されています。

○

HY092

無効な属性識別子，または無効なオプション識別子

無効なAttributeが指定されています。

○

HY117

接続がサスペンド中

−

×

HYC00

オプション機能は実装されていない

指定されたAttributeは，規格にはありますがサポートしていません。

○

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.5.4　SQLGetEnvAttr

(1)　機能

環境ハンドルの属性に設定されている値を返します。

(2)　形式

SQLRETURN SQLGetEnvAttr
(
  SQLHENV           EnvironmentHandle,   /* In */
  SQLINTEGER        Attribute,           /* In */
  SQLPOINTER        ValuePtr,            /* Out */
  SQLINTEGER        BufferLength,        /* In */
  SQLINTEGER      * StringLengthPtr      /* Out */
)

(3)　引数

EnvironmentHandle：

環境ハンドルを指定します。

Attribute：

取得する属性を指定します。指定できる属性については，「16.15　SQLSetEnvAttrおよびSQLGetEnvAttrに指定できる属性」を参照してください。

ValuePtr：

Attributeで指定された属性の値を返すバッファのポインタを指定します。ValuePtrにはNULLも指定できます。

BufferLength：

Attributeに指定された属性の値の型が，文字列またはバイナリの場合，*ValuePtrの長さを指定します（単位：バイト長）。それ以外のデータ型の場合，この引数の指定は無視されます。

StringLengthPtr：

返した属性の値の有効な総バイト長を格納するバッファへのポインタを指定します。この総バイト長にNULL終端文字のバイト長は含みません。ValuePtrがNULLの場合，*StringLengthPtrに値は返されません。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY092

無効な属性識別子，または無効なオプション識別子

○

HYC00

オプション機能は実装されていない

○

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.5.5　SQLSetStmtAttr，SQLSetStmtAttrW

(1)　機能

ステートメントに関連する属性を設定します。

(2)　形式

SQLSetStmtAttrの場合

SQLRETURN SQLSetStmtAttr
(
  SQLHSTMT          StatementHandle,      /* In */
  SQLINTEGER        Attribute,            /* In */
  SQLPOINTER        ValuePtr,             /* In */
  SQLINTEGER        StringLength          /* In */
)

SQLSetStmtAttrWの場合

SQLRETURN SQLSetStmtAttrW
(
  SQLHSTMT          StatementHandle,      /* In */
  SQLINTEGER        Attribute,            /* In */
  SQLPOINTER        ValuePtr,             /* In */
  SQLINTEGER        StringLength          /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

Attribute：

設定する属性を指定します。指定できる属性については，「16.16　SQLSetStmtAttr，SQLSetStmtAttrW，SQLGetStmtAttrおよびSQLGetStmtAttrWに指定できる属性」を参照してください。

ValuePtr：

Attributeで指定した属性に設定する値を指定します。指定できる属性については，「16.16　SQLSetStmtAttr，SQLSetStmtAttrW，SQLGetStmtAttrおよびSQLGetStmtAttrWに指定できる属性」を参照してください。

StringLength：

Attributeに指定された属性の値の型が，文字列またはバイナリの場合，*ValuePtrの長さを指定します（単位：バイト長）。それ以外のデータ型の場合，この引数の指定は無視されます。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01S02

オプション値の変更

○

08S01

通信リンク失敗

×

24000

無効なカーソル状態

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

○

HY011

ここでは属性を設定できない

○

HY013

メモリ管理エラー

×

HY017

自動的に割り当てられるディスクリプタハンドルの不正使用

○

HY024

無効な属性値

○

HY090

無効な文字列長または無効なバッファ長

×

HY092

無効な属性識別子，または無効なオプション識別子

○

HYC00

オプション機能は実装されていない

○

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.5.6　SQLGetStmtAttr，SQLGetStmtAttrW

(1)　機能

ステートメントハンドルに設定されている属性の値を返します。

(2)　形式

SQLGetStmtAttrの場合

SQLRETURN SQLGetStmtAttr
(
  SQLHSTMT           StatementHandle,      /* In */
  SQLINTEGER         Attribute,            /* In */
  SQLPOINTER         ValuePtr,             /* Out */
  SQLINTEGER         BufferLength,         /* In */
  SQLINTEGER       * StringLengthPtr       /* Out */
)

SQLGetStmtAttrWの場合

SQLRETURN SQLGetStmtAttrW
(
  SQLHSTMT           StatementHandle,      /* In */
  SQLINTEGER         Attribute,            /* In */
  SQLPOINTER         ValuePtr,             /* Out */
  SQLINTEGER         BufferLength,         /* In */
  SQLINTEGER       * StringLengthPtr       /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

Attribute：

取得する属性を指定します。指定できる属性については，「16.16　SQLSetStmtAttr，SQLSetStmtAttrW，SQLGetStmtAttrおよびSQLGetStmtAttrWに指定できる属性」を参照してください。

ValuePtr：

Attributeで指定された属性の値を返すバッファのポインタを指定します。ValuePtrにはNULLも指定できます。

BufferLength：

Attributeに指定された属性の値の型が，文字列またはバイナリの場合，*ValuePtrの長さを指定します（単位：バイト長）。それ以外のデータ型の場合，この引数の指定は無視されます。

StringLengthPtr：

返した属性の値の有効なバイト長の合計が格納されるバッファのポインタを指定します。このバイト長の合計にNULL終端文字のバイト長は含みません。ValuePtrがNULLの場合，*StringLengthPtrに値は返されません。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

24000

無効なカーソル状態

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

×

HY092

無効な属性識別子，または無効なオプション識別子

○

HY109

無効なカーソル位置

×

HYC00

オプション機能は実装されていない

○

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.6　ディスクリプタ値の設定

ここでは，ディスクリプタ値の設定時に使用するODBC関数について説明します。

16.6.1　SQLGetDescField，SQLGetDescFieldW

(1)　機能

引数で指定されたディスクリプタフィールドの値を返します。

(2)　形式

SQLGetDescFieldの場合

SQLRETURN SQLGetDescField
(
  SQLHDESC        DescriptorHandle,         /* In */
  SQLSMALLINT     RecNumber,                /* In */
  SQLSMALLINT     FieldIdentifier,          /* In */
  SQLPOINTER      ValuePtr,                 /* Out */
  SQLINTEGER      BufferLength,             /* In */
  SQLINTEGER    * StringLengthPtr           /* Out */
)

SQLGetDescFieldWの場合

SQLRETURN SQLGetDescFieldW
(
  SQLHDESC        DescriptorHandle,         /* In */
  SQLSMALLINT     RecNumber,                /* In */
  SQLSMALLINT     FieldIdentifier,          /* In */
  SQLPOINTER      ValuePtr,                 /* Out */
  SQLINTEGER      BufferLength,             /* In */
  SQLINTEGER    * StringLengthPtr           /* Out */
)

(3)　引数

DescriptorHandle：

ディスクリプタハンドルを指定します。

RecNumber：

列番号（ARDまたはIRD），またはパラメタ番号（APDまたはIPD）を指定します。

FieldIdentifierがヘッダフィールドを示す場合，この引数の指定は無視されます。

FieldIdentifier：

値を返すディスクリプタのフィールド（ヘッダフィールドまたはレコードフィールド）を指定します。指定できる属性については，「16.17　SQLGetDescField，SQLGetDescFieldW，SQLSetDescFieldおよびSQLSetDescFieldWに指定できる属性」を参照してください。

ValuePtr：

ディスクリプタ情報を返すバッファへのポインタを指定します。この引数にはNULLも指定できます。

BufferLength：

FieldIdentifierに指定するディスクリプタフィールドのデータ型が，文字列またはバイナリの場合，*ValuePtrの長さを指定します（単位：バイト長）。それ以外のデータ型の場合，この引数の指定は無視されます。SQL_NTSは指定できません。

StringLengthPtr：

*ValuePtrに設定する値の有効な長さ（単位：バイト長）を格納するバッファへのポインタを指定します。

この引数にNULLが指定された場合でもValuePtrに値は設定されます。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，SQL_NO_DATA，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

BufferLengthに指定された値は，列名のバイト長より小さいため，列名が切り捨てられました。切り捨てられる前の列名の長さが，*StringLengthPtrに格納されます。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

07009

無効なディスクリプタインデクス

RecNumberに0以下の値が指定されています。

○

08S01

通信リンク失敗

−

×

HY001

メモリ割り当てエラー

×

HY007

関連づけられたステートメントが準備されていない

○

HY010

関数シーケンスエラー

この関数を実行する前に，DescriptorHandleが関連づけられているStatementHandleに対して，SQLExecute，SQLExecDirect，SQLExecDirectWまたはSQLParamDataのどれかが呼び出され，SQL_NEED_DATAを返しました。その後，実行時データパラメタまたは実行時データ列の設定が完了していません。

○

HY013

メモリ管理エラー

−

×

HY021

ディスクリプタ情報の不一致

×

HY090

無効な文字列長または無効なバッファ長

*ValuePtrが文字列で，BufferLengthに0より小さい値が指定されています。

BufferLengthに無効な値（SQL_NTS）が指定されました。

○

HY091

無効なディスクリプタフィールド識別子

FieldIdentifierは，ODBC定義のフィールドではありません。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.6.2　SQLGetDescRec，SQLGetDescRecW

(1)　機能

引数で指定されたディスクリプタレコードの複数フィールドの現在の設定または値を返します。列またはパラメタの名前，データ型，および格納位置を記述するフィールドが返されます。

(2)　形式

SQLGetDescRecの場合

SQLRETURN SQLGetDescRec
(
  SQLHDESC         DescriptorHandle,      /* In */
  SQLSMALLINT      RecNumber,             /* In */
  SQLCHAR        * Name,                  /* Out */
  SQLSMALLINT      BufferLength,          /* In */
  SQLSMALLINT    * StringLengthPtr,       /* Out */
  SQLSMALLINT    * TypePtr,               /* Out */
  SQLSMALLINT    * SubTypePtr,            /* Out */
  SQLLEN         * LengthPtr,             /* Out */
  SQLSMALLINT    * PrecisionPtr,          /* Out */
  SQLSMALLINT    * ScalePtr,              /* Out */
  SQLSMALLINT    * NullablePtr            /* Out */
)

SQLGetDescRecWの場合

SQLRETURN SQLGetDescRecW
(
  SQLHDESC         DescriptorHandle,      /* In */
  SQLSMALLINT      RecNumber,             /* In */
  SQLWCHAR       * Name,                  /* Out */
  SQLSMALLINT      BufferLength,          /* In */
  SQLSMALLINT    * StringLengthPtr,       /* Out */
  SQLSMALLINT    * TypePtr,               /* Out */
  SQLSMALLINT    * SubTypePtr,            /* Out */
  SQLLEN         * LengthPtr,             /* Out */
  SQLSMALLINT    * PrecisionPtr,          /* Out */
  SQLSMALLINT    * ScalePtr,              /* Out */
  SQLSMALLINT    * NullablePtr            /* Out */
)

(3)　引数

DescriptorHandle：

ディスクリプタハンドルを指定します。

RecNumber：

列番号（ARDまたはIRD），またはパラメタ番号（APDまたはIPD）を指定します。

Name：

ディスクリプタレコードのSQL_DESC_NAMEフィールドの値を返すバッファへのポインタを指定します。

BufferLength：

*Nameバッファの長さ※を指定します。

この長さにNULL終端文字は含まれます。SQL_NTSは指定できません。

StringLengthPtr：

*Nameバッファに返す有効なデータの長さ※を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

重要

ここに格納された*Nameの長さ※が，BufferLengthからNULL終端文字分を引いた長さ※より大きい場合，*Nameに格納される文字列はBufferLengthからNULL終端文字分を引いた長さ※に切り捨てられ，末尾にNULL終端文字が付加されます。

注※

長さの単位は，SQLGetDescRecの場合はバイト長，SQLGetDescRecWの場合は文字数となります。

TypePtr：

ディスクリプタレコードのSQL_DESC_TYPEフィールドの値を返すバッファへのポインタを指定します。

SubTypePtr：

ディスクリプタレコードのSQL_DESC_DATETIME_INTERVAL_CODEフィールドの値を返すバッファへのポインタを指定します。

LengthPtr：

ディスクリプタレコードのSQL_DESC_OCTET_LENGTHフィールドの値を返すバッファへのポインタを指定します。

PrecisionPtr：

ディスクリプタレコードのSQL_DESC_PRECISIONフィールドの値を返すバッファへのポインタを指定します。

ScalePtr：

ディスクリプタレコードのSQL_DESC_SCALEフィールドの値を返すバッファへのポインタを指定します。

NullablePtr：

ディスクリプタレコードのSQL_DESC_NULLABLEフィールドの値を返すバッファへのポインタを指定します。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，SQL_NO_DATA，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

BufferLengthに指定された値が，列名のバイト長より小さいため，列名が切り捨てられました。切り捨てられる前の列名の長さが，*StringLengthPtrに格納されます。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

07009

無効なディスクリプタインデクス

RecNumberに0以下の値が指定されています。

○

08S01

通信リンク失敗

−

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY007

関連づけられたステートメントが準備されていない

○

HY010

関数シーケンスエラー

この関数を実行する前に，DescriptorHandleが関連づけられているStatementHandleに対して，SQLExecute，SQLExecDirect，SQLExecDirectWまたはSQLParamDataのどれかが呼び出され，SQL_NEED_DATAを返しました。その後，実行時データパラメタまたは実行時データ列の設定が完了していません。

○

HY013

メモリ管理エラー

−

×

HY090

無効な文字列長または無効なバッファ長

BufferLengthに無効な値（SQL_NTS）が指定されました。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.6.3　SQLSetDescField，SQLSetDescFieldW

(1)　機能

引数で指定されたディスクリプタフィールドの値を設定します。

(2)　形式

SQLSetDescFieldの場合

SQLRETURN SQLSetDescField
(
  SQLHDESC      DescriptorHandle,       /* In */
  SQLSMALLINT   RecNumber,              /* In */
  SQLSMALLINT   FieldIdentifier,        /* In */
  SQLPOINTER    ValuePtr,               /* In */
  SQLINTEGER    BufferLength            /* In */
)

SQLSetDescFieldWの場合

SQLRETURN SQLSetDescFieldW
(
  SQLHDESC      DescriptorHandle,       /* In */
  SQLSMALLINT   RecNumber,              /* In */
  SQLSMALLINT   FieldIdentifier,        /* In */
  SQLPOINTER    ValuePtr,               /* In */
  SQLINTEGER    BufferLength            /* In */
)

(3)　引数

DescriptorHandle：

ディスクリプタハンドルを指定します。

RecNumber：

列番号（ARDまたはIRD），またはパラメタ番号（APDまたはIPD）を指定します。

FieldIdentifierがヘッダフィールドを示す場合，この引数の指定は無視されます。

この引数に該当するレコード番号を持つディスクリプタレコードがない場合，この関数は，そのレコード番号を持つディスクリプタレコードを新しく作成します。

FieldIdentifier：

値を設定するディスクリプタのフィールド（ヘッダフィールドまたはレコードフィールド）を指定します。指定できる属性については，「16.17　SQLGetDescField，SQLGetDescFieldW，SQLSetDescFieldおよびSQLSetDescFieldWに指定できる属性」を参照してください。

ValuePtr：

設定するディスクリプタ情報（ポインタまたは整数値）を指定します。指定できる値については，「16.17　SQLGetDescField，SQLGetDescFieldW，SQLSetDescFieldおよびSQLSetDescFieldWに指定できる属性」を参照してください。

BufferLength：

FieldIdentifierに指定するディスクリプタフィールドのデータ型が，文字列またはバイナリの場合，この引数に*ValuePtrの長さを指定します（単位：バイト長）。それ以外のデータ型の場合，この引数の指定は無視されます。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01S02

オプション値の変更

×

07009

無効なディスクリプタインデクス

RecNumberに0以下の値が指定されています。

RecNumberがデータソースがサポートしている列の最大個数またはパラメタの最大個数より大きく，DescriptorHandleがARDまたはAPDと関連づけられています。

FieldIdentifierがSQL_DESC_COUNTで，ValuePtrに0より小さい値が指定されています。

○

08S01

通信リンク失敗

−

×

22001

文字列データの右側が切り捨てられた

×

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

HY001

メモリ割り当てエラー

−

○

HY010

関数シーケンスエラー

この関数を実行する前に，DescriptorHandleが関連づけられているStatementHandleに対して，SQLExecute，SQLExecDirect，SQLExecDirectWまたはSQLParamDataのどれかが呼び出され，SQL_NEED_DATAを返しました。その後，実行時データパラメタまたは実行時データ列の設定が完了していません。

○

HY013

メモリ管理エラー

−

×

HY016

インプリメンテーション行ディスクリプタを変更できない

DescriptorHandleがIRDと関連づけられていますが，FieldIdentifierがSQL_DESC_ARRAY_STATUS_PTRまたはSQL_DESC_ROWS_PROCESSED_PTR以外です。

○

HY021

ディスクリプタ情報の不一致

−

×

HY090

無効な文字列長または無効なバッファ長

×

HY091

無効なディスクリプタフィールド識別子

FieldIdentifierに指定された値がODBC定義のフィールドでなく，実装時に定義された値でもありません。

FieldIdentifierはDescriptorHandleに対して無効です。

○

HY092

無効な属性識別子，または無効なオプション識別子

FieldIdentifierの指定値に対して，ValuePtrに設定されている値は無効です。

FieldIdentifierがSQL_DESC_UNNAMEDで，ValuePtrがSQL_NAMEDです。

○

HY105

無効なパラメタの種類

SQL_DESC_PARAMETER_TYPEフィールドに指定された値が無効（SQL_PARAM_INPUT以外）です。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.6.4　SQLSetDescRec

(1)　機能

同一ディスクリプタレコード内の複数ディスクリプタレコードフィールドに値を設定します。

(2)　形式

SQLRETURN SQLSetDescRec
(
  SQLHDESC        DescriptorHandle,    /* In */
  SQLSMALLINT     RecNumber,           /* In */
  SQLSMALLINT     Type,                /* In */
  SQLSMALLINT     SubType,             /* In */
  SQLLEN          Length,              /* In */
  SQLSMALLINT     Precision,           /* In */
  SQLSMALLINT     Scale,               /* In */
  SQLPOINTER      DataPtr,             /* Deferred  In */
  SQLLEN        * StringLengthPtr,     /* Deferred  In */
  SQLLEN        * IndicatorPtr         /* Deferred  In */
)

(3)　引数

DescriptorHandle：

ディスクリプタハンドルを指定します。IRDのハンドルは指定できません。

RecNumber：

列番号（ARDまたはIRD），またはパラメタ番号（APDまたはIPD）を指定します。

この引数に該当するレコード番号を持つディスクリプタレコードがない場合，この関数は，そのレコード番号を持つディスクリプタレコードを新しく作成します。

Type：

ディスクリプタレコードのSQL_DESC_TYPEフィールドに設定する値を指定します。

SubType：

ディスクリプタレコードのSQL_DESC_DATETIME_INTERVAL_CODEフィールドに設定する値を指定します。

Length：

ディスクリプタレコードのSQL_DESC_OCTET_LENGTHフィールドに設定する値を指定します。

Precision：

ディスクリプタレコードのSQL_DESC_PRECISIONフィールドに設定する値を指定します。

Scale：

ディスクリプタレコードのSQL_DESC_SCALEフィールドに設定する値を指定します。

DataPtr：

ディスクリプタレコードのSQL_DESC_DATA_PTRフィールドに設定する値を指定します。

StringLengthPtr：

ディスクリプタレコードのSQL_DESC_OCTET_LENGTH_PTRフィールドに設定する値を指定します。

IndicatorPtr：

ディスクリプタレコードのSQL_DESC_INDICATOR_PTRフィールドに設定する値を指定します。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

07009

無効なディスクリプタインデクス

RecNumberが，データソースがサポートしている列の最大個数またはパラメタの最大個数より大きく，DescriptorHandleがARD，APDまたはIPDと関連づけられています。

RecNumberに0以下の値が指定されています。

○

08S01

通信リンク失敗

−

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

○

HY010

関数シーケンスエラー

この関数を実行する前に，DescriptorHandleが関連づけられているStatementHandleに対して，SQLExecute，SQLExecDirect，SQLExecDirectWまたはSQLParamDataのどれかが呼び出され，SQL_NEED_DATAを返しました。その後，実行時データパラメタまたは実行時データ列の設定が完了していません。

○

HY013

メモリ管理エラー

−

×

HY016

インプリメンテーション行ディスクリプタを変更できない

DescriptorHandleがIRDと関連づけられています。

○

HY021

ディスクリプタ情報の不一致

−

○

HY090

無効な文字列長または無効なバッファ長

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.6.5　SQLCopyDesc

(1)　機能

ディスクリプタ情報をディスクリプタハンドル間でコピーします。

(2)　形式

SQLRETURN SQLCopyDesc
(
  SQLHDESC     SourceDescHandle,              /* In */
  SQLHDESC     TargetDescHandle               /* In */
)

(3)　引数

SourceDescHandle：

コピー元のディスクリプタハンドルを指定します。

TargetDescHandle：

コピー先のディスクリプタハンドルを指定します。この引数には，アプリケーションディスクリプタまたはIPDのハンドルを指定できます。この引数には，IRDのハンドルを指定できません。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

○

HY007

関連づけられたステートメントが準備されていない

○

HY010

関数シーケンスエラー

この関数を実行する前に，SourceDescHandleまたはTargetDescHandleのディスクリプタハンドルが関連づけられているStatementHandleに対して，SQLExecute，SQLExecDirect，SQLExecDirectWまたはSQLParamDataのどれかが呼び出され，SQL_NEED_DATAを返しました。その後，実行時データパラメタまたは実行時データ列の設定が完了していません。

○

HY013

メモリ管理エラー

−

×

HY016

インプリメンテーション行ディスクリプタを変更できない

TargetDescHandleがIRDと関連づけられました。

○

HY021

ディスクリプタ情報の不一致

−

×

HY092

無効な属性識別子，または無効なオプション識別子

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すこと性があるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

戻り値にSQL_SUCCESS以外が返却された場合，CompletionTypeにSQL_ROLLBACKを指定したSQLEndTran，またはHandleTypeにSQL_HANDLE_STMTを指定したSQLFreeHandleを実行してください。

16.7　SQL要求の作成

ここでは，SQL要求の作成時に使用するODBC関数について説明します。

16.7.1　SQLPrepare，SQLPrepareW

(1)　機能

SQL文をデータソースに送り，SQL文の前処理を実行します。

(2)　形式

SQLPrepareの場合

SQLRETURN SQLPrepare
(
  SQLHSTMT         StatementHandle,     /* In */
  SQLCHAR        * StatementText,       /* In */
  SQLINTEGER       TextLength           /* In */
)

SQLPrepareWの場合

SQLRETURN SQLPrepareW
(
  SQLHSTMT         StatementHandle,     /* In */
  SQLWCHAR       * StatementText,       /* In */
  SQLINTEGER       TextLength           /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

StatementText：

SQL文字列を指定します。SQL文字列中に，注釈（/*〜*/）は指定できませんが，インデクス指定（/*>>〜<<*/）などは指定できます。

TextLength：

*StatementTextの長さを指定します（単位：SQLPrepareの場合はバイト長，SQLPrepareWの場合は文字数）。

StatementTextに指定したSQL文字列がNULL終端文字を保証している場合，SQL_NTSを指定できます。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01S02

オプション値の変更

×

08S01

通信リンク失敗

×

21S01

挿入する値の一覧と列の一覧の不一致

×

21S02

導出したテーブルの次数が列の一覧と不一致

×

22018

キャスト指定に対する無効な文字値

×

22019

無効なエスケープ文字

×

22025

無効なエスケープシーケンス

×

24000

無効なカーソル状態

×

34000

無効なカーソル名

×

3D000

無効なカタログ名

×

3F000

無効なスキーマ名

×

42000

構文エラーまたはアクセス違反

×

42S01

ベーステーブルまたはビューがすでに存在する

×

42S02

ベーステーブルまたはビューが見つからない

×

42S11

インデクスがすでに存在する

×

42S12

インデクスが見つからない

×

42S21

列がすでに存在する

×

42S22

列が見つからない

×

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C041

データ型未サポートエラー

ドライバは指定されたデータ型をサポートしていません。

○

5C051

SQL文のテキスト文字列の長さが，16,000,000文字を超えた

SQL文のテキスト文字列が16,000,000文字以下の場合でも，ドライバマネージャの文字コード変換によって16,000,000文字を超えることがあります。このときも，このSQLSTATEが返されます。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

ドライバは，関数の実行または完了をサポートするメモリを割り当てられません。

○

HY008

動作がキャンセルされた

−

×

HY009

NULLポインタの不正使用

StatementTextにNULLポインタが指定されています。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

TextLengthに0以下で，SQL_NTS以外の値が指定されています。

○

HY117

接続がサスペンド中

−

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.7.2　SQLBindParameter

(1)　機能

SQL文の？パラメタにバッファをバインドします。

(2)　形式

SQLRETURN SQLBindParameter
(
  SQLHSTMT         StatementHandle,    /* In */
  SQLUSMALLINT     ParameterNumber,    /* In */
  SQLSMALLINT      InputOutputType,    /* In */
  SQLSMALLINT      ValueType,          /* In */
  SQLSMALLINT      ParameterType,      /* In */
  SQLULEN          ColumnSize,         /* In */
  SQLSMALLINT      DecimalDigits,      /* In */
  SQLPOINTER       ParameterValuePtr,  /* In */
  SQLLEN           BufferLength,       /* In */
  SQLLEN         * StrLen_or_IndPtr    /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

ParameterNumber：

パラメタ番号を指定します。パラメタの昇順に1から番号が付けられます。

InputOutputType：

次のパラメタの入出力の種類を指定します。

SQL_PARAM_INPUT

入力パラメタです。

SQL_PARAM_INPUT_OUTPUT

入出力パラメタです。

ただし，入出力パラメタは未サポートのため，SQL_PARAM_INPUTが指定されたとして動作します。

ValueType：

パラメタのCデータ型またはSQL_C_DEFAULTを指定します。

SQL_C_DEFAULTを指定すると，デフォルトのCデータ型を仮定します。

サポートしているデータ型については，「15.3.2　ODBCのSQLデータ型とCデータ型の対応」を参照してください。サポートされていないCデータ型を指定した場合はエラーとなります。

ParameterType：

パラメタのODBC SQLデータ型を指定します。

サポートしているデータ型については，「15.3.1　ODBCのSQLデータ型とHADBのデータ型の対応」を参照してください。サポートされていないODBC SQLデータ型を指定した場合はエラーとなります。

ColumnSize：

対応する？パラメタのデータのバイト長を指定します。

ParameterTypeがSQL_CHAR，SQL_VARCHAR，SQL_DECIMAL，SQL_DOUBLE，SQL_FLOATまたはSQL_NUMERICの場合にColumnSizeの値が使用されます。

そのほかのデータ型の場合，この引数の指定は無視されます。

DecimalDigits：

対応する？パラメタの列または式の小数点以下の桁数を指定します。

ParameterTypeがSQL_TYPE_TIME，SQL_TYPE_TIMESTAMP，SQL_DECIMAL，SQL_DOUBLE，SQL_FLOATまたはSQL_NUMERICの場合にDecimalDigitsの値が使用されます。

そのほかのデータ型の場合，この引数の指定は無視されます。

ParameterValuePtr：

パラメタデータのバッファへのポインタを指定します。データ型は，ValueTypeで指定される形式である必要があります。*StrLen_or_IndPtrがSQL_NULL_DATAまたはSQL_DATA_AT_EXECの場合，NULLポインタを指定できます。

SQL_LEN_DATA_AT_EXEC(length)マクロの結果，またはSQL_DATA_AT_EXECの場合，ParameterValuePtrは，パラメタに関連づけられたアプリケーション定義の32ビット値になります。

BufferLength：

文字型のCデータの場合，ParameterValuePtrバッファのバイト長を指定します。そのほかのCデータの場合，この引数の指定は無視されます。

StrLen_or_IndPtr：

次のうちのどれかの値を格納するバッファへのポインタを指定します。

*ParameterValuePtrに格納されるパラメタ値の長さ

文字型のCデータ以外の場合，この指定値は使用されません。

SQL_NTS

パラメタ値がNULL終端文字の場合に指定します。

SQL_NULL_DATA

パラメタ値がNULLの場合に指定します。

SQL_LEN_DATA_AT_EXEC(length)マクロの結果

SQLPutDataを使用する場合に指定します。lengthには0または整数を指定します。

SQL_DATA_AT_EXEC

SQLPutDataを使用する場合に指定します。

StrLen_or_IndPtrがNULLポインタの場合，ドライバはすべての入力パラメタ値がナル値以外であり，文字データの最後にNULLが付いていると見なします。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

07006

データ型属性の制限違反

×

07009

無効なディスクリプタインデクス

○

HY000

一般エラー

×

HY001

メモリ割り当てエラー

ドライバは，関数の実行または完了をサポートするメモリを割り当てられません。

○

HY003

無効なアプリケーションのバッファのデータ型

−

○

HY004

無効なSQLデータ型

○

HY009

NULLポインタの不正使用

○

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY021

ディスクリプタ情報の不一致

×

HY090

無効な文字列長または無効なバッファ長

BufferLengthの値に0より小さい値が指定されています。

SQLBindParameterにNULLポインタが指定されていますが，パラメタ長が0，SQL_NULL_DATAまたはSQL_DATA_AT_EXECのどれにも一致していないか，SQL_LEN_DATA_AT_EXEC_OFFSETより大きい値になっています。

○

HY104

無効な精度，または無効なスケール値

−

×

HY105

無効なパラメタの種類

InputOutputTypeに指定された値は無効です。

○

HY117

接続がサスペンド中

−

×

HYC00

オプション機能は実装されていない

ValueTypeの値とParameterTypeの値が不整合です。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

バインドした値は，次のどれかが実行されるまで有効です。

再度同じParameterNumberを指定してSQLBindParameterを呼び出す

SQL_RESET_PARAMSオプションを指定してSQLFreeStmtを呼び出す

SQLSetDescFieldを呼び出してAPDのSQL_DESC_COUNTヘッダフィールドに0を設定する

オフセットによる再バインドは未サポートです。

16.7.3　SQLGetCursorName，SQLGetCursorNameW

(1)　機能

指定したステートメントハンドルに関連づけられたカーソル名を返します。

(2)　形式

SQLGetCursorNameの場合

SQLRETURN SQLGetCursorName
(
  SQLHSTMT         StatementHandle,        /* In */
  SQLCHAR        * CursorName,             /* Out */
  SQLSMALLINT      BufferLength,           /* In */
  SQLSMALLINT    * NameLengthPtr           /* Out */
)

SQLGetCursorNameWの場合

SQLRETURN SQLGetCursorNameW
(
  SQLHSTMT         StatementHandle,        /* In */
  SQLWCHAR       * CursorName,             /* Out */
  SQLSMALLINT      BufferLength,           /* In */
  SQLSMALLINT    * NameLengthPtr           /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

CursorName：

カーソル名を返すバッファへのポインタを指定します。

BufferLength：

*CursorNameの長さ※を指定します。SQL_NTSは指定できません。

NameLengthPtr：

*CursorNameに返す有効な長さ※の合計を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

注※

長さの単位は，SQLGetCursorNameの場合はバイト長，SQLGetCursorNameWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

*CursorNameバッファの大きさが不足しているため，カーソル名を格納できませんでした（カーソル名が切り捨てられました）。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

メモリオブジェクトにアクセスできないため，関数の呼び出しを処理できません。

×

HY015

利用できるカーソル名がない

−

×

HY090

無効な文字列長または無効なバッファ長

BufferLengthに0より小さい値が指定されています。

BufferLengthに無効な値（SQL_NTS）が指定されました。

○

HYT01

接続タイムアウト終了

データソースが要求に応答する前に接続タイムアウト時間が経過しました。接続タイムアウト時間は，SQLSetConnectAttrまたはSQLSetConnectAttrWのSQL_ATTR_CONNECTION_TIMEOUTで設定できます。

×

IM001

ドライバはこの関数をサポートしていない

−

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

SQLSetCursorName関数またはSQLSetCursorNameW関数を使用しないで，明示的なカーソル名を設定していない場合，この関数はHADB ODBCドライバが自動で生成するカーソル名を返します。自動で生成するカーソル名は「SQL_CURXXXXX（XXXXX：00001から始まる通番）」です。

この関数で取得したカーソル名を使用する場合は，マイクロソフト社が提供するカーソルライブラリを使用してください。マイクロソフト社が提供するカーソルライブラリを使用しない場合，HADB ODBCドライバはステートメントハンドルに関連づけられたカーソル名を無視します。

16.7.4　SQLSetCursorName，SQLSetCursorNameW

(1)　機能

カーソル名をアクティブなステートメントハンドルに関連づけます。アプリケーションがこの関数を呼び出さない場合，HADB ODBCドライバがカーソル名を生成します。

(2)　形式

SQLSetCursorNameの場合

SQLRETURN SQLSetCursorName
(
  SQLHSTMT          StatementHandle,      /* In */
  SQLCHAR         * CursorName,           /* In */
  SQLSMALLINT       NameLength            /* In */
)

SQLSetCursorNameWの場合

SQLRETURN SQLSetCursorName
(
  SQLHSTMT          StatementHandle,      /* In */
  SQLWCHAR        * CursorName,           /* In */
  SQLSMALLINT       NameLength            /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

CursorName：

関連づけるカーソルの名称を指定します。

NameLength：

*CursorNameの長さを指定します（単位：SQLSetCursorNameの場合はバイト長，SQLSetCursorNameWの場合は文字数）。

CursorNameに指定した文字列がNULL終端文字を保証している場合，SQL_NTSを指定できます。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

×

24000

無効なカーソル状態

StatementHandleに関連づけられたステートメントは，すでに実行状態またはカーソルが位置づけられた状態です。

○

34000

無効なカーソル名

カーソル名のサイズに，HADB ODBCドライバで扱える上限（30バイト）よりも大きいサイズが指定されています。

CursorNameに指定されたカーソル名がSQL_CURで始まっています。

○

3C000

カーソル名の重複

*CursorNameに指定されたカーソル名はすでに存在しています。

○

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

×

HY009

NULLポインタの不正使用

CursorNameがNULLポインタです。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

メモリオブジェクトにアクセスできないため，関数の呼び出しを処理できません。

×

HY090

無効な文字列長または無効なバッファ長

NameLengthに0以下かつSQL_NTS以外の値が指定されています。

○

HYT01

接続タイムアウト終了

データソースが要求に応答する前に接続タイムアウト時間が経過しました。接続タイムアウト時間は，SQLSetConnectAttrまたはSQLSetConnectAttrWのSQL_ATTR_CONNECTION_TIMEOUTで設定できます。

×

IM001

ドライバはこの関数をサポートしていない

−

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

この関数で設定したカーソル名を使用する場合は，マイクロソフト社が提供するカーソルライブラリを使用してください。マイクロソフト社が提供するカーソルライブラリを使用しない場合，HADB ODBCドライバは設定されたカーソル名を無視します。

16.7.5　SQLDescribeParam

(1)　機能

SQLPrepareの実行によって得られた，？パラメタの情報を返します。この情報は，IPDのフィールドに設定されている情報です。

(2)　形式

SQLRETURN SQLDescribeParam
(
  SQLHSTMT          StatementHandle,    /* In */
  SQLUSMALLINT      ParameterNumber,    /* In */
  SQLSMALLINT     * DataTypePtr,        /* Out */
  SQLULEN         * ParameterSizePtr,   /* Out */
  SQLSMALLINT     * DecimalDigitsPtr,   /* Out */
  SQLSMALLINT     * NullablePtr         /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

ParameterNumber：

パラメタ番号を指定します。パラメタの昇順に1から番号が付けられます。

DataTypePtr：

パラメタのSQLデータ型を返すバッファへのポインタを指定します。

ParameterSizePtr：

対応するパラメタの列または式のサイズを返すバッファへのポインタを指定します。データソースで定義された内容が返されます。

DecimalDigitsPtr：

対応するパラメタの列または式の小数の桁数を返すバッファへのポインタを指定します。データソースで定義された内容が返されます。

NullablePtr：

パラメタがナル値を受け付けるかどうかを示す値を返すバッファへのポインタを指定します。この値はIPDのSQL_DESC_NULLABLEフィールドから読み出されます。次のどちらかの値が返されます。

SQL_NO_NULLS

パラメタはナル値を受け付けません。

SQL_NULLABLE

パラメタはナル値を受け付けます。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

07009

無効なディスクリプタインデクス

○

08S01

通信リンク失敗

×

21S01

挿入する値の一覧と列の一覧の不一致

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.7.6　SQLNumParams

(1)　機能

準備されたSQL文のパラメタの数を返します。

(2)　形式

SQLRETURN SQLNumParams
(
  SQLHSTMT        StatementHandle,     /* In */
  SQLSMALLINT   * ParameterCountPtr    /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

ParameterCountPtr：

SQL文のパラメタ数を返すバッファへのポインタを指定します。

この関数を実行する前にSQLPrepareに渡されたSQL文に含まれるパラメタの数が設定されます。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

ParameterCountPtrにNULLが指定されています。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

×

HY117

接続がサスペンド中

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.8　SQLの実行

ここでは，SQLの実行時に使用するODBC関数について説明します。

16.8.1　SQLExecute

(1)　機能

パラメタマーカーがステートメント中にある場合は，パラメタの現在の値を使用し，準備されたステートメントを実行します。

(2)　形式

SQLRETURN SQLExecute
(
  SQLHSTMT        StatementHandle     /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，SQL_NO_DATA，SQL_NEED_DATAまたはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01001

カーソル操作の競合

×

01003

集合関数でナル値が削除された

×

01004

文字列データの右側が切り捨てられた

○

01006

特権が破棄されない

×

01007

特権が与えられない

×

01S02

オプション値の変更

×

01S07

小数点以下切り捨て

×

07002

COUNTフィールドが不正

SQLBindParameterに指定されたパラメタの数が？パラメタの数と不一致です。

○

07006

データ型属性の制限違反

−

×

07007

制限パラメタ値違反

×

07S01

デフォルトパラメタの不正使用

×

08S01

通信リンク失敗

×

08003

接続が存在しない

○

21S02

導出したテーブルの次数が列の一覧と不一致

×

22001

文字列データの右側が切り捨てられた

○

22002

必要な標識変数が提供されない

×

22003

数値が範囲外である

○

22007

無効な日付時刻形式

○

22008

日付時刻フィールドのオーバフロー

○

22012

ゼロ除算

×

22015

間隔フィールドのオーバフロー

×

22018

キャスト指定に対する無効な文字値

○

22019

無効なエスケープ文字

×

22025

無効なエスケープシーケンス

×

23000

整合性の制約違反

×

24000

無効なカーソル状態

○

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

42000

構文エラーまたはアクセス違反

×

44000

WITH CHECK OPTION違反

×

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C036

データ変換エラー

設定要求があった入力データの指定内容が誤っています。

○

5C041

データ型未サポートエラー

ドライバは指定されたデータ型をサポートしていません。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

○

HY003

無効なCデータ型

○

HY004

無効なSQLデータ型

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

○

HY010

関数シーケンスエラー

事前にPrepareが実行されていません。

○

HY013

メモリ管理エラー

−

○

HY014

無効な精度または無効なスケール値

○

HY090

無効な文字列長または無効なバッファ長

○

HY104

無効な精度または無効なスケール値

○

HY105

無効なパラメタの種類

×

HY109

無効なカーソル位置

×

HY117

接続がサスペンド中

Disconnectとr-only関数は許されます。

×

HYC00

オプション機能は実装されていない

−

○

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

Microsoft Access Version 2.0に対応する処理は未サポートです。

ブックマーク機能は未サポートです。

16.8.2　SQLExecDirect，SQLExecDirectW

(1)　機能

準備されたSQL文を実行します。SQL文にパラメタマーカーがあれば，パラメタマーカー変数の現在の値を使用して実行します。この関数は，SQL文を1回の実行で発行できる最も早い方法です。

(2)　形式

SQLExecDirectの場合

SQLRETURN SQLExecDirect
(
  SQLHSTMT        StatementHandle,    /* In */
  SQLCHAR       * StatementText,      /* In */
  SQLINTEGER      TextLength          /* In */
)

SQLExecDirectWの場合

SQLRETURN SQLExecDirectW
(
  SQLHSTMT        StatementHandle,    /* In */
  SQLWCHAR      * StatementText,      /* In */
  SQLINTEGER      TextLength          /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

StatementText：

実行するSQL文字列を指定します。NULLポインタは指定できません。必ず1文字以上の文字列を指定してください。SQL文字列中に，注釈（/*〜*/）は指定できませんが，インデクス指定（/*>>〜<<*/）などは指定できます。

TextLength：

*StatementTextの長さを指定します。指定した値によって次の表のように扱われます。

TextLengthに指定された値

TextLengthの扱い

0より大きい整数値

*StatementTextの先頭から指定されたデータ長（単位：SQLExecDirectの場合はバイト長，SQLExecDirectWの場合は文字数）が有効になります。

SQL_NTS

TextLengthの値は無視され，*StatementTextの先頭からNULLまでが有効になります。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_NO_DATA，SQL_ERROR，SQL_NEED_DATAまたはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01001

カーソル操作の競合

×

01003

集合関数でナル値が削除された

×

01004

文字列データの右側が切り捨てられた

○

01006

特権が破棄されない

×

01007

特権が与えられない

×

01S02

オプション値の変更

×

01S07

小数点以下切り捨て

×

07002

COUNTフィールドが不正

SQLBindParameterに指定されたパラメタの数が？パラメタの数と不一致です。

○

07006

データ型属性の制限違反

−

×

07S01

デフォルトパラメタの不正使用

×

08003

接続が存在しない

○

08S01

通信リンク失敗

×

21S01

挿入する値の一覧と列の一覧の不一致

×

21S02

導出したテーブルの次数が列の一覧と不一致

×

22001

文字列データの右側が切り捨てられた

○

22002

必要な標識変数が提供されない

×

22003

数値が範囲外である

○

22007

無効な日付時刻形式

○

22008

日付時刻フィールドのオーバフロー

○

22012

ゼロ除算

×

22015

間隔フィールドのオーバフロー

×

22018

キャスト指定に対する無効な文字値

○

22019

無効なエスケープ文字

×

22025

無効なエスケープシーケンス

×

23000

整合性の制約違反

×

24000

無効なカーソル状態

○

34000

無効なカーソル名

×

3D000

無効なカタログ名

×

3F000

無効なスキーマ名

×

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

42000

構文エラーまたはアクセス違反

×

42S01

ベーステーブルまたはビューがすでに存在する

×

42S02

ベーステーブルまたはビューが見つからない

×

42S11

インデクスがすでに存在する

×

42S12

インデクスが見つからない

×

42S21

列がすでに存在する

×

42S22

列が見つからない

×

44000

WITH CHECK OPTION違反

×

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C036

データ変換エラー

設定要求があった入力データの指定内容が誤っています。

○

5C041

データ型未サポートエラー

ドライバは指定されたデータ型をサポートしていません。

○

5C051

SQL文のテキスト文字列の長さが，16,000,000文字を超えた

SQL文のテキスト文字列が16,000,000文字以下の場合でも，ドライバマネージャの文字コード変換によって16,000,000文字を超えることがあります。このときも，このSQLSTATEが返されます。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

○

HY003

無効なCデータ型

○

HY004

無効なSQLデータ型

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

○

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

○

HY014

無効な精度または無効なスケール値

○

HY090

無効な文字列長または無効なバッファ長

○

HY104

無効な精度または無効なスケール値

○

HY105

無効なパラメタの種類

×

HY109

無効なカーソル位置

×

HYC00

オプション機能は実装されていない

○

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

Microsoft Access Version 2.0に対応する処理は未サポートです。

ブックマーク機能は未サポートです。

16.8.3　SQLNativeSql，SQLNativeSqlW

(1)　機能

HADB ODBCドライバが修正したSQL文字列を返却します。この関数はSQL文を実行しません。

(2)　形式

SQLNativeSqlの場合

SQLRETURN SQLNativeSql
(
  SQLHDBC         ConnectionHandle,         /* In */
  SQLCHAR       * InStatementText,          /* In */
  SQLINTEGER      TextLength1,              /* In */
  SQLCHAR       * OutStatementText,         /* Out */
  SQLINTEGER      BufferLength,             /* In */
  SQLINTEGER    * TextLength2Ptr            /* Out */
)

SQLNativeSqlWの場合

SQLRETURN SQLNativeSqlW
(
  SQLHDBC         ConnectionHandle,         /* In */
  SQLWCHAR      * InStatementText,          /* In */
  SQLINTEGER      TextLength1,              /* In */
  SQLWCHAR      * OutStatementText,         /* Out */
  SQLINTEGER      BufferLength,             /* In */
  SQLINTEGER    * TextLength2Ptr            /* Out */
)

(3)　引数

ConnectionHandle：

接続ハンドルを指定します。

InStatementText：

変換元のSQL文字列を指定します。SQL文字列中に，注釈（/*〜*/）は指定できませんが，インデクス指定（/*>>〜<<*/）などは指定できます。

TextLength1：

*InStatementTextの長さ※を指定します。

InStatementTextに指定したSQL文字列がNULL終端文字で終わる場合，SQL_NTSを指定できます。

OutStatementText：

変換後のSQL文字列を返すバッファを指すポインタを指定します。

BufferLength：

*OutStatementTextの長さ※を指定します。

この長さにNULL終端文字の長さは含まれます。SQL_NTSは指定できません。

TextLength2Ptr：

*OutStatementTextに返す，有効な長さ※の合計を返すバッファへのポインタを指定します。HADB ODBCドライバはSQL文字列の有効な長さ※を返します。この長さにNULL終端文字は含まれません。

重要

ここに格納されたSQL文字列の長さ※が，BufferLengthからNULL終端文字分を引いた長さ※より大きい場合，OutStatementTextに格納される文字列はBufferLengthからNULL終端文字分を引いた長さ※に切り捨てられ，末尾にNULL終端文字が付加されます。

注※

長さの単位は，SQLNativeSqlの場合はバイト長，SQLNativeSqlWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

*OutStatementTextバッファの大きさが不足しているため，SQL文字列全体を格納できませんでした（情報が切り捨てられました）。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

08003

接続が存在しない

ConnectionHandleが接続状態ではありません。

○

08S01

通信リンク失敗

−

×

22007

無効な日付時刻形式

*InStatementTextのエスケープ句に，無効な日付，時刻またはタイムスタンプの値が指定されています。

×

24000

無効なカーソル状態

ステートメントが指定するカーソルが，結果セットの前または後ろにあります。

×

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C051

SQL文のテキスト文字列の長さが，16,000,000文字を超えた

SQL文のテキスト文字列が16,000,000文字以下の場合でも，ドライバマネージャの文字コード変換によって16,000,000文字を超えることがあります。このときも，このSQLSTATEが返されます。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

×

HY009

NULLポインタの不正使用

*InStatementTextがNULLポインタです。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

メモリオブジェクトにアクセスできないため，関数の呼び出しを処理できません。

×

HY090

無効な文字列長または無効なバッファ長

TextLength1に0より小さく，かつSQL_NTS以外の値が指定されています。

BufferLengthは0より小さい値ですが，OutStatementTextはNULLポインタではありません。

BufferLengthに無効な値（SQL_NTS）が指定されました。

○

HY109

無効なカーソル位置

カーソルの現在行はすでに削除されているか，またはフェッチできない行です。

×

HYT01

接続タイムアウト終了

データソースが要求に応答する前に接続タイムアウト時間が経過しました。接続タイムアウト時間は，SQLSetConnectAttrまたはSQLSetConnectAttrWのSQL_ATTR_CONNECTION_TIMEOUTで設定できます。

×

IM001

ドライバはこの関数をサポートしていない

−

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　エスケープ句の構文規則

指定されたSQL文内のエスケープ句を，HADBが実行できる形式に変換して返します。エスケープ句の構文規則を次に示します。

エスケープ句 ::= 日付・時刻・時刻印のエスケープシーケンス
　　　　　　　｜ LIKE述語のエスケープ文字のエスケープシーケンス
　　　　　　　｜ 外結合のエスケープシーケンス
　　　　　　　｜ スカラ関数のエスケープシーケンス
日付・時刻・時刻印のエスケープシーケンス ::= 日付のエスケープシーケンス
　　　　　　　　　　　　　　　　　　｜ 時刻のエスケープシーケンス
　　　　　　　　　　　　　　　　　　｜ 時刻印のエスケープシーケンス
日付のエスケープシーケンス ::=
　　　　　エスケープ開始子 d 日付データの既定の文字列表現 ※1 エスケープ終了子
時刻のエスケープシーケンス ::=
　　　　　エスケープ開始子 t 時刻データの既定の文字列表現 ※2 エスケープ終了子
時刻印のエスケープシーケンス ::=
　　　　　エスケープ開始子 ts 時刻印データの既定の文字列表現 ※3 エスケープ終了子
LIKE述語のエスケープ文字のエスケープシーケンス ::=
　　　　　エスケープ開始子 escape エスケープ文字 エスケープ終了子
外結合のエスケープシーケンス ::= エスケープ開始子 oj 結合表 エスケープ終了子
スカラ関数のエスケープシーケンス ::= エスケープ開始子 fn スカラ関数 エスケープ終了子
スカラ関数 ::= 標準形式のスカラ関数 ※4
エスケープ開始子 ::= '{'
エスケープ終了子 ::= '}'

注※1

'YYYY-MM-DD'で表される文字列表現のことです。

注※2

'hh:mm:ss[.nn....n]'で表される文字列表現のことです。nn....nはp桁の小数秒です。nは0〜9，pは0，3，6，9，または12です。

注※3

'YYYY-MM-DD hh:mm:ss[.nn....n]'で表される文字列表現のことです。nn....nはp桁の小数秒です。nは0〜9，pは0，3，6，9，または12です。

注※4

標準形式のスカラ関数については，「表16‒7　標準形式とHADB形式が異なるスカラ関数の変換内容一覧」を参照してください。

なお，下線部には，エスケープ句を指定できません。また，ODBCドライバでは構文解析をしないで，変換後もそのままとし，HADBサーバの構文解析に任せます。

エスケープシーケンスのキーワードを次に示します。キーワードでは，大文字と小文字を区別しません。

日付のエスケープシーケンス内の"d"

時刻のエスケープシーケンス内の"t"

時刻印のエスケープシーケンス内の"ts"

LIKE述語のエスケープ文字のエスケープシーケンス内の"escape"

外結合のエスケープシーケンス内の"oj"

スカラ関数のエスケープシーケンス内の"fn"

エスケープ句の入力規則を次に示します。

エスケープ句内の区切り文字には，半角空白が指定できます。

区切り文字は，エスケープ開始子の後ろ，キーワードの後ろ，およびエスケープ終了子の前に挿入できます。

1つのSQL文中に，複数のエスケープ句を指定できます。

HADB ODBCドライバは指定されたSQL文内のエスケープ句を，HADBが実行できる形式に変換します。変換するのは，｛　｝で囲まれたエスケープ句内だけです。エスケープ句外は変換しません。

エスケープ句の変換規則を次の表に示します。

表16‒6　エスケープ句の変換規則

対象エスケープ句

変換前

変換後

日付

エスケープ開始子 d 日付データの既定の文字列表現 エスケープ終了子

DATE日付データの既定の文字列表現

時刻

エスケープ開始子 t 時刻データの既定の文字列表現 エスケープ終了子

TIME時刻データの既定の文字列表現

時刻印

エスケープ開始子 ts 時刻印データの既定の文字列表現 エスケープ終了子

TIMESTAMP時刻印データの既定の文字列表現

LIKE

エスケープ開始子 escape エスケープ文字 エスケープ終了子

escape エスケープ文字

外結合

エスケープ開始子 oj 結合表 エスケープ終了子

結合表

スカラ関数

エスケープ開始子 fn スカラ関数 エスケープ終了子

HADB形式のスカラ関数※

注※

標準形式のスカラ関数を，HADB形式に変換します。

標準形式とHADB形式が異なるスカラ関数の変換内容を次の表に示します。

基本的に，スカラ関数の引数の個数チェックはしません。

表16‒7　標準形式とHADB形式が異なるスカラ関数の変換内容一覧

スカラ関数

変換前の形式

変換後の形式（HADB形式）

数学関数

CEILING(number)

CEIL(number)

LOG(float)

LN(float)

RAND([number, number])

RANDOM([number, number])

TRUNCATE(number[, places])

TRUNC(number[, places])

文字列関数

CHAR(code)

CHR(code)

LCASE(string)

LOWER(string)

OCTET_LENGTH(string)

LENGTHB(string)

SUBSTRING(string, start[, length])

SUBSTR(string, start[, length])

UCASE(string)

UPPER(string)

時刻と日付の関数

CURRENT_DATE()

CURRENT_DATE

CURRENT_TIME()

CURRENT_TIME

スカラ関数のエスケープ句内に指定した特定のスカラ関数の場合，HADBがサポートするデータ型名や日時単位以外にODBC規約に定められたキーワードおよびHADBが独自に定めたキーワードを指定できます。これらのキーワードを指定した場合，ODBCドライバがHADBで使用可能な形式に変換します。スカラ関数に指定可能なキーワードを次の表に示します。

表16‒8　スカラ関数に指定可能なキーワード

スカラ関数

指定可能なキーワード

CAST

CONVERT

次のSQLデータ型名を指定できます。

SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR

SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR

SQL_DECIMAL

SQL_NUMERIC

SQL_TINYINT

SQL_SMALLINT

SQL_INTEGER

SQL_BIGINT

SQL_REAL

SQL_FLOAT

SQL_DOUBLE

SQL_BIT

SQL_BINARY

SQL_VARBINARY

SQL_LONGVARBINARY

SQL_DATE

SQL_TYPE_DATE

SQL_TIME

SQL_TYPE_TIME

SQL_TIMESTAMP

SQL_TYPE_TIMESTAMP

SQL_INTERVAL_MONTH

SQL_INTERVAL_YEAR

SQL_INTERVAL_YEAR_TO_MONTH

SQL_INTERVAL_DAY

SQL_INTERVAL_HOUR

SQL_INTERVAL_MINUTE

SQL_INTERVAL_SECOND

SQL_INTERVAL_DAY_TO_HOUR

SQL_INTERVAL_DAY_TO_MINUTE

SQL_INTERVAL_DAY_TO_SECOND

SQL_INTERVAL_HOUR_TO_MINUTE

SQL_INTERVAL_HOUR_TO_SECOND

SQL_INTERVAL_MINUTE_TO_SECOND

SQL_GUID

TIMESTAMPADD

TIMESTAMPDIFF

次の日時単位キーワードを指定できます。

SQL_TSI_DAYOFYEAR

SQL_TSI_FRAC_SECOND

SQL_TSI_SECOND

SQL_TSI_MINUTE

SQL_TSI_HOUR

SQL_TSI_DAY

SQL_TSI_WEEK

SQL_TSI_MONTH

SQL_TSI_QUARTER

SQL_TSI_YEAR

メモ

スカラ関数のエスケープ句内に上記の表のキーワードを指定する場合，大文字および小文字は区別されません。

キーワードの変換規則を次の表に示します。

表16‒9　キーワードの変換規則

変換対象キーワード

変換後の形式

HADBでの使用可否

SQL_CHAR

CHAR

〇

SQL_VARCHAR

VARCHAR

〇

SQL_LONGVARCHAR

SQL_LONGVARCHAR

×

SQL_WCHAR

SQL_WCHAR

×

SQL_WVARCHAR

SQL_WVARCHAR

×

SQL_WLONGVARCHAR

SQL_WLONGVARCHAR

×

SQL_DECIMAL

DECIMAL

〇

SQL_NUMERIC

DECIMAL

〇

SQL_TINYINT

SQL_TINYINT

×

SQL_SMALLINT

SQL_SMALLINT

×

SQL_INTEGER

SMALLINT

〇

SQL_BIGINT

INTEGER

〇

SQL_REAL

SQL_REAL

×

SQL_FLOAT

DOUBLE

〇

SQL_DOUBLE

DOUBLE

〇

SQL_BIT

SQL_BIT

×

SQL_BINARY

BINARY

〇

SQL_VARBINARY

VARBINARY

〇

SQL_LONGVARBINARY

SQL_LONGVARBINARY

×

SQL_DATE

DATE

〇

SQL_TYPE_DATE

DATE

〇

SQL_TIME

TIME

〇

SQL_TYPE_TIME

TIME

〇

SQL_TIMESTAMP

TIMESTAMP

〇

SQL_TYPE_TIMESTAMP

TIMESTAMP

〇

SQL_INTERVAL_MONTH

SQL_INTERVAL_MONTH

×

SQL_INTERVAL_YEAR

SQL_INTERVAL_YEAR

×

SQL_INTERVAL_YEAR_TO_MONTH

SQL_INTERVAL_YEAR_TO_MONTH

×

SQL_INTERVAL_DAY

SQL_INTERVAL_DAY

×

SQL_INTERVAL_HOUR

SQL_INTERVAL_HOUR

×

SQL_INTERVAL_MINUTE

SQL_INTERVAL_MINUTE

×

SQL_INTERVAL_SECOND

SQL_INTERVAL_SECOND

×

SQL_INTERVAL_DAY_TO_HOUR

SQL_INTERVAL_DAY_TO_HOUR

×

SQL_INTERVAL_DAY_TO_MINUTE

SQL_INTERVAL_DAY_TO_MINUTE

×

SQL_INTERVAL_DAY_TO_SECOND

SQL_INTERVAL_DAY_TO_SECOND

×

SQL_INTERVAL_HOUR_TO_MINUTE

SQL_INTERVAL_HOUR_TO_MINUTE

×

SQL_INTERVAL_HOUR_TO_SECOND

SQL_INTERVAL_HOUR_TO_SECOND

×

SQL_INTERVAL_MINUTE_TO_SECOND

SQL_INTERVAL_MINUTE_TO_SECOND

×

SQL_GUID

SQL_GUID

×

SQL_TSI_DAYOFYEAR

DAYOFYEAR

〇

SQL_TSI_FRAC_SECOND

NANOSECOND

〇

SQL_TSI_SECOND

SECOND

〇

SQL_TSI_MINUTE

MINUTE

〇

SQL_TSI_HOUR

HOUR

〇

SQL_TSI_DAY

DAY

〇

SQL_TSI_WEEK

WEEK

〇

SQL_TSI_MONTH

MONTH

〇

SQL_TSI_QUARTER

QUARTER

〇

SQL_TSI_YEAR

YEAR

〇

（凡例）

〇：HADBで使用できます。

×：HADBで使用できません。

16.8.4　SQLParamData

(1)　機能

SQLPutDataとこの関数を一緒に使用すると，SQL文の実行時，SQLExecute，SQLExecDirectまたはSQLExecDirectW実行後にパラメタデータを送信します。

(2)　形式

SQLRETURN SQLParamData
(
  SQLHSTMT        StatementHandle,    /* In */
  SQLPOINTER    * ValuePtrPtr         /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

ValuePtrPtr：

SQL文のパラメタデータの設定先を指すポインタが返されます。

有効な値が返されるのは，戻り値がSQL_NEED_DATAのときだけです。

また，この値はSQLBindParameterのParameterValuePtrの値，またはSQLBindColのTargetValuePtrの値と同じ値であり，ディスクリプタレコードのSQL_DESC_DATA_PTRフィールドに指定されたものと同じ値です。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_NO_DATA，SQL_NEED_DATA，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

○

07002

COUNTフィールドが不正

SQLBindParameterに指定されたパラメタの数が？パラメタの数と不一致です。

○

07006

データ型属性の制限違反

−

×

08003

接続が存在しない

○

08S01

通信リンク失敗

×

22001

文字列データの右側が切り捨てられた

○

22003

数値が範囲外である

○

22007

無効な日付時刻形式

○

22008

日付時刻フィールドのオーバフロー

○

22018

キャスト指定に対する無効な文字値

○

22026

文字列データの長さが一致しない

×

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C036

データ変換エラー

設定要求があった入力データの指定内容が誤っています。

○

5C041

データ型未サポートエラー

ドライバは指定されたデータ型をサポートしていません。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

○

HY003

無効なCデータ型

○

HY004

無効なSQLデータ型

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

ParameterCountPtrにNULLが指定されています。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

○

HY014

無効な精度または無効なスケール値

○

HY090

無効な文字列長または無効なバッファ長

○

HY104

無効な精度または無効なスケール値

○

HY117

接続がサスペンド中

×

HYC00

オプション機能は実装されていない

○

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.8.5　SQLPutData

(1)　機能

SQL文の実行時にパラメタのデータをHADB ODBCドライバに送ります。

(2)　形式

SQLRETURN SQLPutData
(
  SQLHSTMT          StatementHandle,    /* In */
  SQLPOINTER        DataPtr,            /* In */
  SQLLEN            StrLen_or_Ind       /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

DataPtr：

パラメタに対する実際のデータが格納されているバッファを指すポインタを指定します。データは，SQLBindParameterのValueTypeで指定されたCデータ型である必要があります。

StrLen_or_Ind：

SQLBindParameterでCデータ型にSQL_C_CHARまたはSQL_C_BINARYを指定した場合

*DataPtrの長さ，SQL_NTS，またはSQL_NULL_DATAを指定します。

SQLBindParameterでそのほかのCデータ型を指定した場合

SQL_NULL_DATAを指定します。SQL_NULL_DATA以外が指定された場合，この引数の指定は無視され，HADB ODBCドライバは*DataPtrバッファのサイズをSQLBindParameterのValueTypeで指定されたCデータ型と見なします。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字データの右側が切り捨てられた

×

07006

データ型属性の制限違反

×

07S01

デフォルトパラメタの不正使用

×

08S01

通信リンク失敗

×

22001

文字列データの右側が切り捨てられた

×

22003

数値が範囲外である

×

22007

無効な日付時刻形式

×

22008

日付時刻フィールドのオーバフロー

×

22012

ゼロ除算

×

22015

間隔フィールドのオーバフロー

×

22018

キャスト指定に対する無効な文字値

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

DataPtrにNULLポインタが指定されていますが，StrLen_or_Indには0，またはSQL_NULL_DATA以外が指定されています。

○

HY010

関数シーケンスエラー

SQLParamDataで入力待ち実行時のデータパラメタが取得されていません。

○

HY013

メモリ管理エラー

−

×

HY019

文字データとバイナリデータ以外のデータが分割送信された

×

HY020

ナル値の連結を試みた

×

HY090

無効な文字列長または無効なバッファ長

次の条件をすべて満たしています。

DataPtrにNULLポインタ以外が指定されています。

StrLen_or_Indに0以下の値が指定されています。

StrLen_or_IndにSQL_NTSまたはSQL_NULL_DATA以外の値が指定されています。

○

HY117

接続がサスペンド中

−

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

次の機能はサポートしていません。

列のデータ対応

分割送信

16.9　実行結果および実行結果情報の取得

ここでは，実行結果および実行結果情報の取得時に使用するODBC関数について説明します。

16.9.1　SQLRowCount

(1)　機能

この関数を実行する前に行われた次の処理で変更された行数を返します。

各種SQL文（UPDATE文，INSERT文およびDELETE文）

(2)　形式

SQLRETURN SQLRowCount
(
  SQLHSTMT       StatementHandle,     /* In */
  SQLLEN       * RowCountPtr          /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

RowCountPtr：

変更された行カウントを返すバッファを指すポインタを指定します。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY009

NULLポインタの不正使用

RowCountPtrに無効な値が設定されました。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

×

HY117

接続がサスペンド中

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

実行したSQL文がUPDATE文，INSERT文またはDELETE文のどれかの場合，要求によって変更された行数を返します。ただし，次に示す場合は，-1を返します。

変更した行数にオーバフローが発生した場合

実行したSQL文が，UPDATE文，INSERT文，またはDELETE文以外の場合

16.9.2　SQLNumResultCols

(1)　機能

準備されたSQL文の結果セットの列数を返します。

(2)　形式

SQLRETURN SQLNumResultCols
(
  SQLHSTMT        StatementHandle,     /* In */
  SQLSMALLINT   * ColumnCountPtr       /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

ColumnCountPtr：

結果セットの列数を返すバッファを指すポインタを指定します。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

ColumnCountPtrにNULLが指定されています。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

×

HY117

接続がサスペンド中

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.9.3　SQLDescribeCol，SQLDescribeColW

(1)　機能

SQLPrepareの実行によって得られた，結果セットの列の情報を返します。この情報は，IRDのフィールドに設定されているものです。

(2)　形式

SQLDescribeColの場合

SQLRETURN SQLDescribeCol
(
  SQLHSTMT         StatementHandle,     /* In */
  SQLUSMALLINT     ColumnNumber,        /* In */
  SQLCHAR        * ColumnName,          /* Out */
  SQLSMALLINT      BufferLength,        /* In */
  SQLSMALLINT    * NameLengthPtr,       /* Out */
  SQLSMALLINT    * DataTypePtr,         /* Out */
  SQLULEN        * ColumnSizePtr,       /* Out */
  SQLSMALLINT    * DecimalDigitsPtr,    /* Out */
  SQLSMALLINT    * NullablePtr          /* Out */
)

SQLDescribeColWの場合

SQLRETURN SQLDescribeColW
(
  SQLHSTMT         StatementHandle,     /* In */
  SQLUSMALLINT     ColumnNumber,        /* In */
  SQLWCHAR       * ColumnName,          /* Out */
  SQLSMALLINT      BufferLength,        /* In */
  SQLSMALLINT    * NameLengthPtr,       /* Out */
  SQLSMALLINT    * DataTypePtr,         /* Out */
  SQLULEN        * ColumnSizePtr,       /* Out */
  SQLSMALLINT    * DecimalDigitsPtr,    /* Out */
  SQLSMALLINT    * NullablePtr          /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

ColumnNumber：

結果データの列番号を指定します。

ColumnName：

列名を返すバッファへのポインタを指定します。検索結果列の名称については，マニュアルHADB　SQLリファレンスのSELECT文の指定形式および規則の規則を参照してください。

BufferLength：

*ColumnNameバッファの長さ※を指定します。この長さにNULL終端文字は含まれます。SQL_NTSは指定できません。

NameLengthPtr：

*ColumnNameに設定される値の有効な長さ※の合計を格納するバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

重要

ここに格納された*ColumnNameの列名の長さ※が，BufferLengthからNULL終端文字分を引いた長さ※より大きい場合，ColumnNameに格納される文字列はBufferLengthからNULL終端文字分を引いた長さ※に切り捨てられ，末尾にNULL終端文字が付加されます。

DataTypePtr：

列のSQLデータ型を返すバッファへのポインタを指定します。データ型が不明な場合，SQL_C_DEFAULTが返されます。

ColumnSizePtr：

データソースの列のサイズを返すバッファへのポインタを指定します。列のサイズが不明な場合，0が返されます。

DecimalDigitsPtr：

データソースの列の小数の桁数を返すバッファへのポインタを指定します。小数の桁数が不明，または適用されない場合，0が返されます。

NullablePtr：

列がナル値を受け付けるかどうかを示す値を返すバッファへのポインタを指定します。次の値が返されます。

SQL_NO_NULLS

列はナル値を受け付けません。

SQL_NULLABLE

列はナル値を受け付けます。

注※

長さの単位は，SQLDescribeColの場合はバイト長，SQLDescribeColWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

○

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

07005

準備されたステートメントがcursor-specificationではない

−

○

07009

無効なディスクリプタインデクス

○

08S01

通信リンク失敗

×

24000

無効なカーソル状態

○

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

BufferLengthに無効な値（SQL_NTS）が指定されました。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.9.4　SQLColAttribute，SQLColAttributeW

(1)　機能

結果セットの列のディスクリプタ情報を返します。

(2)　形式

SQLColAttributeの場合

SQLRETURN SQLColAttribute
(
  SQLHSTMT          StatementHandle,        /* In */
  SQLUSMALLINT      ColumnNumber,           /* In */
  SQLUSMALLINT      FieldIdentifier,        /* In */
  SQLPOINTER        CharacterAttributePtr,  /* Out */
  SQLSMALLINT       BufferLength,           /* In */
  SQLSMALLINT     * StringLengthPtr,        /* Out */
  SQLLEN          * NumericAttributePtr     /* Out */
)

SQLColAttributeWの場合

SQLRETURN SQLColAttributeW
(
  SQLHSTMT          StatementHandle,        /* In */
  SQLUSMALLINT      ColumnNumber,           /* In */
  SQLUSMALLINT      FieldIdentifier,        /* In */
  SQLPOINTER        CharacterAttributePtr,  /* Out */
  SQLSMALLINT       BufferLength,           /* In */
  SQLSMALLINT     * StringLengthPtr,        /* Out */
  SQLLEN          * NumericAttributePtr     /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

ColumnNumber：

フィールド値を取得するIRDのレコード番号を指定します。この番号は1から列の昇順で番号が付けられていて，結果セットの列番号に対応しています。

FieldIdentifier：

取得するIRDのディスクリプタフィールドに対応する識別子を指定します。

指定できるフィールド識別子を次の表に示します。

表16‒10　SQLColAttributeおよびSQLColAttributeWのFieldIdentifierに指定できるフィールド識別子

項番

フィールド識別子

1

SQL_COLUMN_LENGTH

2

SQL_COLUMN_PRECISION

3

SQL_COLUMN_SCALE

4

SQL_DESC_AUTO_UNIQUE_VALUE

5

SQL_DESC_BASE_COLUMN_NAME

6

SQL_DESC_BASE_TABLE_NAME

7

SQL_DESC_CASE_SENSITIVE

8

SQL_DESC_CATALOG_NAME

9

SQL_DESC_CONCISE_TYPE

10

SQL_DESC_COUNT

11

SQL_DESC_DISPLAY_SIZE

12

SQL_DESC_FIXED_PREC_SCALE

13

SQL_DESC_LABEL

14

SQL_DESC_LENGTH

15

SQL_DESC_LITERAL_PREFIX

16

SQL_DESC_LITERAL_SUFFIX

17

SQL_DESC_LOCAL_TYPE_NAME

18

SQL_DESC_NAME

19

SQL_DESC_NULLABLE

20

SQL_DESC_NUM_PREC_RADIX

21

SQL_DESC_OCTET_LENGTH

22

SQL_DESC_PRECISION

23

SQL_DESC_SCALE

24

SQL_DESC_SCHEMA_NAME

25

SQL_DESC_SEARCHABLE

26

SQL_DESC_TABLE_NAME

27

SQL_DESC_TYPE

28

SQL_DESC_TYPE_NAME

29

SQL_DESC_UNNAMED

30

SQL_DESC_UNSIGNED

31

SQL_DESC_UPDATABLE

CharacterAttributePtr：

FieldIdentifierに対応するIRDのディスクリプタフィールド値を返すバッファへのポインタを指定します。ディスクリプタフィールド値が文字列以外の場合，この引数は使用されません。

BufferLength：

*CharacterAttributePtrの長さを指定します（単位：バイト長）。SQL_NTSは指定できません。

StringLengthPtr：

*CharacterAttributePtrに返す，有効な総バイト長（NULL終端文字を除く）を返すバッファへのポインタを指定します。

NumericAttributePtr：

FieldIdentifierに対応するIRDのディスクリプタフィールド値を返す整数バッファへのポインタを指定してください。ディスクリプタフィールド値が数値以外の場合は，この引数は使用されません。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

*CharacterAttributePtrバッファの大きさが不足しているため，すべての文字列値を格納できませんでした（文字列値が切り捨てられました）。切り捨てられる前の文字列値の長さが，*StringLengthPtrに格納されます。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

07005

準備されたステートメントがcursor-specificationではない

StatementHandleに関連づけられたステートメントが結果セットを返しません。

○

07009

無効なディスクリプタインデクス

ColumnNumberに0が指定されました。

ColumnNumberに結果セットの列数よりも大きい値が指定されました。

○

24000

無効なカーソル状態

−

○

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY010

関数シーケンスエラー

×

HY013

メモリ管理エラー

メモリオブジェクトにアクセスできないため，関数の呼び出しを処理できません。

×

HY090

無効な文字列長または無効なバッファ長

CharacterAttributePtrに文字列を指すポインタが指定されていて，BufferLengthに0以下の値が指定されています。

BufferLengthに無効な値が指定されました（SQL_NTS）。

○

HY091

無効なディスクリプタフィールド識別子

FieldIdentifierに指定された値が，定義された値でもなく，実装時に定義された値でもありません。

○

HYC00

オプション機能は実装されていない

FieldIdentifierに指定された値はサポートしていません。

○

HYT01

接続タイムアウト終了

データソースが要求に応答する前に接続タイムアウト時間が経過しました。接続タイムアウト時間は，SQLSetConnectAttrまたはSQLSetConnectAttrWのSQL_ATTR_CONNECTION_TIMEOUTで設定できます。

×

IM001

ドライバはこの関数をサポートしていない

−

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.9.5　SQLBindCol

(1)　機能

アプリケーションデータ領域を結果セットの列に関連づけます。

(2)　形式

SQLRETURN SQLBindCol
(
  SQLHSTMT        StatementHandle,        /* In */
  SQLUSMALLINT    ColumnNumber,           /* In */
  SQLSMALLINT     TargetType,             /* In */
  SQLPOINTER      TargetValuePtr,         /* Out */
  SQLLEN          BufferLength,           /* In */
  SQLLEN        * StrLen_or_IndPtr        /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

ColumnNumber：

関連づける結果セットの列の番号を指定します。

HADBはブックマークをサポートしていないため，列番号は1から始まります。

TargetType：

TargetValuePtrが指す領域のCデータ型の識別子またはSQL_C_DEFAULTを指定します。SQL_C_DEFAULTを指定すると，デフォルトのCデータ型を仮定します。

TargetValuePtr：

結果セットの列に関連づける領域を指すポインタを指定します。

関連づけを解除する場合は，NULLポインタを指定してください。

BufferLength：

TargetValuePtrが指す領域の長さを指定します（単位：バイト長）。

StrLen_or_IndPtr：

HADB ODBCドライバが返すデータの長さまたは標識を格納する領域を指すポインタを指定します。

実行後のSQLFetch関数がSQL_SUCCESSまたはSQL_SUCCESS_WITH_INFOを返す場合，HADB ODBCドライバはデータの長さ，または標識を返します。

また，列のデータがナル値の場合，戻り値にSQL_NULL_DATAを返します。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

07006

データ型属性の制限違反

ColumnNumberに0が指定されていますが，TargetTypeにSQL_C_BOOKMARKまたはSQL_C_VARBOOKMARK以外が指定されています。

×

07009

無効なディスクリプタインデクス

ColumnNumberに，結果セットの最大列数よりも大きい値が指定されています。

×

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

○

HY003

無効なアプリケーションのバッファのデータ型

TargetTypeに有効なデータ型またはSQL_C_DEFAULT以外が指定されています。

×

HY010

関数シーケンスエラー

StatementHandleに対して呼び出された非同期実行関数が，この関数が呼び出されたときも実行中です。

×

HY013

メモリ管理エラー

メモリオブジェクトにアクセスできないため，関数の呼び出しを処理できません。

×

HY090

無効な文字列長または無効なバッファ長

次の条件をすべて満たしています。

TargetValuePtrにNULLポインタ以外が指定されています。

BufferLengthに0未満の値が指定されています。

○

HYC00

オプション機能は実装されていない

ColumnNumberに0が指定されましたが，ブックマークはサポートしていません。

○

HYT01

接続タイムアウト終了

データソースが要求に応答する前に接続タイムアウト時間が経過しました。接続タイムアウト時間は，SQLSetConnectAttrまたはSQLSetConnectAttrWのSQL_ATTR_CONNECTION_TIMEOUTで設定できます。

×

IM001

ドライバはこの関数をサポートしていない

−

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

次の機能はサポートしていません。

バインドオフセット

配列のバインド

行方向バインド

16.9.6　SQLFetch

(1)　機能

結果セットから次の行セットのデータをフェッチし，SQLBindColで関連づけられたすべての列にデータを返します。

(2)　形式

SQLRETURN SQLFetch
(
  SQLHSTMT          StatementHandle    /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_NO_DATA，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

列に返された文字列またはバイナリのデータで，空白以外の文字またはNULL以外のバイナリデータが切り捨てられました。文字列の値は，その右側が切り捨てられました。

○

01S01

行のエラー

1つ以上の行のフェッチでエラーが発生しました。

×

01S07

小数点以下切り捨て

数値の小数部分が切り捨てられました。時刻部分を含む時刻，タイムスタンプまたは間隔データ型の場合，時刻の小数部分が切り捨てられました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

07006

データ型属性の制限違反

結果セットの列のデータ値をSQLBindColのTargetTypeで指定されたデータ型に変換できません。

○

07009

無効なディスクリプタインデクス

−

○

08S01

通信リンク失敗

×

22001

文字列データの右側が切り捨てられた

×

22002

必要な標識変数が提供されない

次のどちらかがNULLポインタである列に，NULLデータがフェッチされました。

SQLBindColによって設定されたStrLen_or_IndPtr

SQLSetDescField，SQLSetDescFieldW，SQLSetDescRecまたはSQLSetDescRecWのどれかによって設定されたSQL_DESC_INDICATOR_PTR

○

22003

数値が範囲外である

数値（数値または文字列）の整数部分が削除されました。

○

22007

無効な日付時刻形式

文字の列が日付，時刻またはタイムスタンプのCの構造体にバインドされましたが，列の値が無効な日付，時刻，またはタイムスタンプです。

○

22012

ゼロ除算

ゼロ除算が行われた算術式の値が返されました。

×

22015

間隔フィールドのオーバフロー

−

×

22018

キャスト指定に対する無効な文字値

○

24000

無効なカーソル状態

StatementHandleは実行状態ですが，関連する結果セットがありません。

○

40001

直列化の失敗

−

×

40003

ステートメントの完了が不明

×

5C002

文字コード変換エラー

○

5C037

データフォーマットエラー

○

5C038

データ変換エラー

取得した結果データまたは受け取り領域の指定内容のどちらかに誤りがあります。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

HADB ODBCドライバは，関数の実行または完了をサポートする必要なメモリを割り当てられていません。

×

HY003

無効なアプリケーションのバッファのデータ型

SQLBindColによって設定されたCデータ型が不正なデータ型です。

○

HY008

動作がキャンセルされた

−

×

HY009

NULLポインタの不正使用

○

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

○

HY090

無効な文字列長または無効なバッファ長

○

HY104

無効な精度または無効なスケール値

○

HY107

行の値が範囲外である

×

HYC00

オプション機能は実装されていない

HADB ODBCドライバまたはHADBサーバは，SQLBindColのTargetTypeと対応する列のSQLデータ型の組み合わせで指定される変換をサポートしていません。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

行ステータス配列に対して行ステータスを返却する機能はサポートしていません。

16.9.7　SQLFetchScroll

(1)　機能

結果セットから指定された行セットのデータをフェッチし，バインドされたすべての列のデータを返します。

ただし，HADBではSQLSTATEがHYC00で，SQL_ERRORを返します。

(2)　形式

SQLRETURN SQLFetchScroll
(
  SQLHSTMT        StatementHandle,           /* In */
  SQLSMALLINT     FetchOrientation,          /* In */
  SQLLEN          FetchOffset                /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

FetchOrientation：

この引数の指定は無視されます。

FetchOffset：

この引数の指定は無視されます。

(4)　戻り値

SQL_ERRORまたはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

×

01S01

行のエラー

×

01S06

結果セットが最初の行セットを返す前にフェッチを試みた

×

01S07

小数点以下切り捨て

×

07006

データ型属性の制限違反

×

07009

無効なディスクリプタインデクス

×

08S01

通信リンク失敗

×

22001

文字列データの右側が切り捨てられた

×

22002

必要な標識変数が提供されない

×

22003

数値が範囲外である

×

22007

無効な日付時刻形式

×

22012

ゼロ除算

×

22015

間隔フィールドのオーバフロー

×

22018

キャスト指定に対する無効な文字値

×

24000

無効なカーソル状態

×

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY010

関数シーケンスエラー

×

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

×

HY106

フェッチの種類が範囲外である

×

HY107

行の値が範囲外である

×

HY111

無効なブックマーク値

×

HYC00

オプション機能は実装されていない

SQL_ERRORを返します。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.9.8　SQLGetData

(1)　機能

結果セット中の単一列のデータを取得します。

(2)　形式

SQLRETURN SQLGetData
(
  SQLHSTMT        StatementHandle,        /* In */
  SQLUSMALLINT    ColumnNumber,           /* In */
  SQLSMALLINT     TargetType,             /* In */
  SQLPOINTER      TargetValuePtr,         /* Out */
  SQLLEN          BufferLength,           /* In */
  SQLLEN        * StrLen_or_IndPtr        /* Out */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

ColumnNumber：

データを取得する列の番号を指定します。

HADBはブックマークをサポートしていないため，列番号は1から始まります。

TargetType：

TargetValuePtrが指す領域のCデータ型の識別子またはSQL_C_DEFAULTを指定します。SQL_C_DEFAULTを指定すると，デフォルトのCデータ型を仮定します。

TargetValuePtr：

列のデータを受け取る領域を指すポインタを指定します。

BufferLength：

TargetValuePtrが指す領域の長さを指定します（単位：バイト長）。

StrLen_or_IndPtr：

HADB ODBCドライバが返すデータの長さまたは標識を格納する領域を指すポインタを指定します。

HADB ODBCドライバはデータの長さ，または標識を返します。

また，列のデータがナル値の場合，戻り値にSQL_NULL_DATAを返します。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_NO_DATA，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

TargetValuePtrバッファが指すバッファの大きさが，ColumnNumberで指定された列のデータを格納するのに十分ではありません。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S07

小数点以下切り捨て

数値の小数部分が切り捨てられました。時刻部分を含む時刻，タイムスタンプまたは間隔データ型の場合，時刻の小数部分が切り捨てられました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

01S51

文字コード変換時に置き換えが発生した

変換できない文字コードを検出し，指定の文字に置き換えました。このとき，SQL_SUCCESS_WITH_INFOを返します。

○

07006

データ型属性の制限違反

結果セットの列のデータ値をTargetTypeで指定されるCデータ型に変換できません。

○

07009

無効なディスクリプタインデクス

ColumnNumberに存在しない列番号が指定されました。

○

08S01

通信リンク失敗

−

×

22002

必要な標識変数が提供されない

StrLen_or_IndPtrがNULLポインタで，NULLデータが取得されました。

○

22003

数値が範囲外である

数値（数値または文字列）の整数部分が削除されました。

×

22007

無効な日付時刻形式

文字の列が日付，時刻またはタイムスタンプのCの構造体にバインドされましたが，列の値が無効な日付，時刻，またはタイムスタンプです。

○

22012

ゼロ除算

ゼロ除算が行われた算術式の値が返されました。

×

22015

間隔フィールドのオーバフロー

−

×

22018

キャスト指定に対する無効な文字値

○

24000

無効なカーソル状態

StatementHandle上でカーソルがオープンされ，SQLFetchが呼び出されましたが，カーソルが位置づけられているのは結果セットの先頭の前，または結果セットの末尾です。

○

5C002

文字コード変換エラー

−

○

5C037

データフォーマットエラー

○

5C038

データ変換エラー

取得した結果データまたは受け取り領域の指定内容のどちらかに誤りがあります。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

HADB ODBCドライバは，関数の実行または完了をサポートするために必要なメモリを割り当てられていません。

○

HY003

無効なアプリケーションのバッファのデータ型

−

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

TargetValuePtrとStrLen_or_IndPtrの両方にNULLポインタが指定されました。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

○

HY090

無効な文字列長または無効なバッファ長

次の条件をすべて満たしています。

TargetValuePtrにNULLポインタ以外が指定されています。

BufferLengthに0未満の値が指定されています。

○

HY104

無効な精度または無効なスケール値

−

○

HY109

無効なカーソル位置

×

HYC00

オプション機能は実装されていない

TargetTypeと対応する列のSQLデータ型の組み合わせで指定される変換をサポートしていません。

○

HYT00

タイムアウト終了

−

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

次の機能はサポートしていません。

可変長データの分割取得

データの最大返却長制限

16.9.9　SQLSetPos

(1)　機能

行セット内のカーソル位置を設定します。

ただし，HADBではSQLSTATEがHYC00で，SQL_ERRORを返します。

(2)　形式

SQLRETURN SQLSetPos
(
  SQLHSTMT        StatementHandle,      /* In */
  SQLSETPOSIROW   RowNumber,            /* In */
  SQLUSMALLINT    Operation,            /* In */
  SQLUSMALLINT    LockType              /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

RowNumber：

この引数の指定は無視されます。

Operation：

この引数の指定は無視されます。

LockType：

この引数の指定は無視されます。

(4)　戻り値

SQL_ERRORまたはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01001

カーソル操作の競合

×

01004

文字列データの右側が切り捨てられた

×

01S01

行のエラー

×

01S07

小数点以下切り捨て

×

07006

データ型属性の制限違反

×

07009

無効なディスクリプタインデクス

×

21S02

導出したテーブルの次数が列の一覧と不一致

×

22001

文字列データの右側が切り捨てられた

×

22003

数値が範囲外である

×

22007

無効な日付時刻形式

×

22008

日付時刻フィールドのオーバフロー

×

22015

間隔フィールドのオーバフロー

×

22018

キャスト指定に対する無効な文字値

×

23000

整合性の制約違反

×

24000

無効なカーソル状態

×

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

42000

構文エラーまたはアクセス違反

×

44000

WITH CHECK OPTION違反

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY010

関数シーケンスエラー

×

HY011

ここでは属性を設定できない

×

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

×

HY092

無効な属性識別子，または無効なオプション識別子

×

HY107

行の値が範囲外である

×

HY109

無効なカーソル位置

×

HYC00

オプション機能は実装されていない

SQL_ERRORを返します。

○

HYT00

タイムアウト終了

−

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.9.10　SQLBulkOperations

(1)　機能

一括挿入処理と，ブックマークによる一括ブックマーク処理を行います。一括ブックマーク処理には更新，削除，およびフェッチを含みます。

ただし，HADBではSQLSTATEがHYC00で，SQL_ERRORを返します。

(2)　形式

SQLRETURN SQLBulkOperations
(
  SQLHSTMT        StatementHandle,         /* In */
  SQLSMALLINT     Operation                /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

Operation：

この引数の指定は無視されます。

(4)　戻り値

SQL_ERRORまたはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01004

文字列データの右側が切り捨てられた

×

01S01

行のエラー

×

01S07

小数点以下切り捨て

×

07006

データ型属性の制限違反

×

07009

無効なディスクリプタインデクス

×

21S02

導出したテーブルの次数が列の一覧と不一致

×

22001

文字列データの右側が切り捨てられた

×

22003

数値が範囲外である

×

22007

無効な日付時刻形式

×

22008

日付時刻フィールドのオーバフロー

×

22015

間隔フィールドのオーバフロー

×

22018

キャスト指定に対する無効な文字値

×

23000

整合性の制約違反

×

24000

無効なカーソル状態

×

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

42000

構文エラーまたはアクセス違反

×

44000

WITH CHECK OPTION違反

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY010

関数シーケンスエラー

×

HY011

ここでは属性を設定できない

×

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

×

HY092

無効な属性識別子，または無効なオプション識別子

×

HYC00

オプション機能は実装されていない

SQL_ERRORを返します。

○

HYT00

タイムアウト終了

−

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.9.11　SQLMoreResults

(1)　機能

SELECT文，UPDATE文，INSERT文およびDELETE文実行時の結果を初期化します。

ただし，HADBではSQL_NO_DATAを返します。

(2)　形式

SQLRETURN SQLMoreResults
(
  SQLHSTMT          StatementHandle       /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

(4)　戻り値

SQL_NO_DATA，SQL_ERRORまたはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01S02

オプション値の変更

×

08S01

通信リンク失敗

×

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.9.12　SQLGetDiagField，SQLGetDiagFieldW

(1)　機能

ハンドルに関連づけられているエラー，警告，ステータスなどの情報を含む診断データ構造体のフィールドに現在設定されている値を返します。

(2)　形式

SQLGetDiagFieldの場合

SQLRETURN SQLGetDiagField
(
  SQLSMALLINT     HandleType,          /* In */
  SQLHANDLE       Handle,              /* In */
  SQLSMALLINT     RecNumber,           /* In */
  SQLSMALLINT     DiagIdentifier,      /* In */
  SQLPOINTER      DiagInfoPtr,         /* Out */
  SQLSMALLINT     BufferLength,        /* In */
  SQLSMALLINT   * StringLengthPtr      /* Out */
)

SQLGetDiagFieldWの場合

SQLRETURN SQLGetDiagFieldW
(
  SQLSMALLINT     HandleType,          /* In */
  SQLHANDLE       Handle,              /* In */
  SQLSMALLINT     RecNumber,           /* In */
  SQLSMALLINT     DiagIdentifier,      /* In */
  SQLPOINTER      DiagInfoPtr,         /* Out */
  SQLSMALLINT     BufferLength,        /* In */
  SQLSMALLINT   * StringLengthPtr      /* Out */
)

(3)　引数

HandleType：

次のどれかのハンドルの種類を指定します。

SQL_HANDLE_ENV：環境ハンドル

SQL_HANDLE_DBC：接続ハンドル

SQL_HANDLE_STMT：ステートメントハンドル

SQL_HANDLE_DESC：ディスクリプタハンドル

Handle：

ハンドルの値を指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

RecNumber：

アプリケーションが情報を取得する診断情報（ステータスレコード）番号を指定します。

診断ヘッダフィールドの値を取得する（DiagIdentifierに診断ヘッダフィールドを示す値を設定する）場合，この引数の指定は無視されます。

それ以外の場合，この引数には1以上の値を指定します。

DiagIdentifier：

要求診断フィールド識別子を指定します。大きく分けてヘッダフィールドとレコードフィールドの2種類があります。指定できる属性については，「16.18　SQLGetDiagFieldおよびSQLGetDiagFieldWのDiagIdentifierに指定できる属性」を参照してください。

DiagInfoPtr：

診断情報を返すバッファへのポインタを返します。データ型はDiagIdentifierの値によって異なります。

BufferLength：

DiagInfoPtrの長さを指定します。

この長さにNULL終端文字は含まれます。

DiagInfoPtrの種類によって次の値を指定します。

DiagIdentifierの値の種類

DiagInfoPtrの値の種類

BufferLengthに指定する値

「16.18　SQLGetDiagFieldおよびSQLGetDiagFieldWのDiagIdentifierに指定できる属性」に定義されている値

文字列またはバイナリ

DiagInfoPtrの長さ（単位：バイト長）

SQL_NTSは指定できません。

整数

なし（無視される）

StringLengthPtr：

DiagInfoPtrが文字データの場合だけ使用します。

DiagInfoPtrに返す有効な総バイト長を格納するバッファへのポインタを指定します。この総バイト長にNULL終端文字のバイト長は含みません。

重要

ここに格納されたDiagInfoPtrに設定する文字列の総バイト長が，BufferLengthからNULL終端文字分を引いた長さより大きい場合，DiagInfoPtrに格納される文字列はBufferLengthからNULL終端文字分を引いた長さに切り捨てられ，末尾にNULL終端文字が付加されます。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，SQL_INVALID_HANDLE，またはSQL_NO_DATAが返されます。この関数ではSQLSTATEを設定しない代わりに，戻り値に次の実行結果を示します。

戻り値

意味

SQL_SUCCESS

成功

SQL_SUCCESS_WITH_INFO

次のエラーのうちのどちらかが発生しました。

取得値に対してDiagInfoPtrのサイズが小さいため，切り捨てが発生しました。BufferLengthとStringLengthPtrを比較することで，切り捨てられたサイズを知ることができます。

文字コード変換時に変換できない文字コードを検出し，指定の文字に置き換えました。

SQL_ERROR

次のエラーのうちのどれかが発生しました。

DiagIdentifierに不正な値が指定されました。

DiagIdentifierに次のうちのどれかが指定されましたが，Handleがステートメントハンドルではありません。

・SQL_DIAG_CURSOR_ROW_COUNT

・SQL_DIAG_DYNAMIC_FUNCTION

・SQL_DIAG_DYNAMIC_FUNCTION_CODE

・SQL_DIAG_ROW_COUNT

DiagIdentifierに診断レコードフィールドを示す値が指定されましたが，RecNumberに0以下の値が指定されました。

要求フィールドのデータ型種別は文字列ですが，BufferLengthが次のすべての条件を満たしています。

・0より小さい

・SQL_NTSではない

・SQL_LEN_BINARY_ATTR(length)マクロの結果ではない

BufferLengthに無効な値（SQL_NTS）が指定されました。

SQL_INVALID_HANDLE

HandleTypeとHandleによって示されるハンドルが有効なハンドルではありません。

SQL_NO_DATA

RecNumberがHandleで指定されたハンドルに存在する診断レコードの数より大きいか，指定されたHandleに読み出しできる診断レコードがありません。

(5)　SQLSTATE

この関数ではSQLSTATEを返しません。

エラーの詳細は，「(4)　戻り値」に定義している値で通知します。

(6)　注意事項

エラーの詳細情報については，「15.4　エラー発生時に返却される情報」を参照してください。

診断情報は返しません。

16.9.13　SQLGetDiagRec，SQLGetDiagRecW

(1)　機能

ハンドルに関連づけられているエラー，警告，ステータスなどの情報を含む診断データ構造体のレコードフィールドに現在設定されている値を返します。

(2)　形式

SQLGetDiagRecの場合

SQLRETURN SQLGetDiagRec
(
  SQLSMALLINT     HandleType,        /* In */
  SQLHANDLE       Handle,            /* In */
  SQLSMALLINT     RecNumber,         /* In */
  SQLCHAR       * SQLState,          /* Out */
  SQLINTEGER    * NativeErrorPtr,    /* Out */
  SQLCHAR       * MessageText,       /* Out */
  SQLSMALLINT     BufferLength,      /* In */
  SQLSMALLINT   * TextLengthPtr      /* Out */
)

SQLGetDiagRecWの場合

SQLRETURN SQLGetDiagRecW
(
  SQLSMALLINT     HandleType,        /* In */
  SQLHANDLE       Handle,            /* In */
  SQLSMALLINT     RecNumber,         /* In */
  SQLWCHAR      * SQLState,          /* Out */
  SQLINTEGER    * NativeErrorPtr,    /* Out */
  SQLWCHAR      * MessageText,       /* Out */
  SQLSMALLINT     BufferLength,      /* In */
  SQLSMALLINT   * TextLengthPtr      /* Out */
)

(3)　引数

HandleType：

次のどれかのハンドルの種類を指定します。

SQL_HANDLE_ENV：環境ハンドル

SQL_HANDLE_DBC：接続ハンドル

SQL_HANDLE_STMT：ステートメントハンドル

SQL_HANDLE_DESC：ディスクリプタハンドル

Handle：

ハンドルの値を指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

RecNumber：

アプリケーションが情報を取得する診断情報（ステータスレコード）番号を指定します。

この引数には1以上の値を指定します。

SQLState：

RecNumberが示す診断レコードに関係するSQLSTATEコードを返すバッファへのポインタです。「クラス（2文字）＋サブクラス（3文字）」の5文字で構成されます。

この情報はSQL_DIAG_SQLSTATE診断フィールドに格納されている情報が返されます。

このパラメタにNULLが指定された場合は何も設定しません。

NativeErrorPtr：

データソースに固有のネイティブエラーコードを返すバッファへのポインタです。

この情報はSQL_DIAG_NATIVE診断フィールドに格納されている情報が返されます。

このパラメタにNULLが指定された場合は何も設定しません。

MessageText：

診断メッセージテキスト文字列を返すバッファへのポインタです。

この情報はSQL_DIAG_MESSAGE_TEXT診断フィールドに格納されている情報が返されます。

このパラメタにNULLが指定された場合は何も設定しません。

BufferLength：

MessageTextバッファの長さ※です。

診断メッセージテキストには最大長の定義はありませんが，必ず512バイト以上の値を指定してください。

この長さにNULL終端文字は含まれます。SQL_NTSは指定できません。

TextLengthPtr：

MessageTextに返す有効な長さ※の合計を返すバッファへのポインタを指定します。この長さにNULL終端文字は含まれません。

重要

ここに格納された長さ※が，BufferLengthからNULL終端文字分を引いた長さ※より大きい場合，MessageTextに格納される文字列はBufferLengthからNULL終端文字分を引いた長さ※に切り捨てられ，末尾にNULL終端文字が付加されます。

注※

長さの単位は，SQLGetDiagRecの場合はバイト長，SQLGetDiagRecWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，SQL_INVALID_HANDLE，またはSQL_NO_DATAが返されます。この関数ではSQLSTATEを設定しない代わりに，戻り値に次の実行結果を示します。

戻り値

意味

SQL_SUCCESS

成功

SQL_SUCCESS_WITH_INFO

次のエラーのうちのどちらかが発生しました。

診断メッセージテキストに対して，MessageTextのサイズが小さいため，切り捨てが発生しました。BufferLengthとTextLengthPtrを比較することで，切り捨てられたサイズを知ることができます。

文字コード変換時に変換できない文字コードを検出し，指定の文字に置き換えました。

SQL_ERROR

次のエラーのどれかが発生しました。

RecNumberに0以下の値が指定されました。

BufferLengthに0より小さい値が指定されました。

BufferLengthに無効な値（SQL_NTS）が指定されました。

SQL_INVALID_HANDLE

HandleTypeとHandleによって示されるハンドルが有効なハンドルではありません。

SQL_NO_DATA

RecNumberがHandleで指定されたハンドルに存在する診断レコードの数より大きいか，指定Handleに読み出しできる診断レコードがありません。

(5)　SQLSTATE

この関数ではSQLSTATEを返しません。

エラーの詳細はすべて「(4)　戻り値」に定義している値で通知します。

(6)　注意事項

エラーの詳細情報については，「15.4　エラー発生時に返却される情報」を参照してください。

NativeErrorPtrにはSQLCODEが設定されます。SQLCODEについては，マニュアルHADB　メッセージのSQLCODEの見方を参照してください。

診断情報は返しません。

16.10　データソースのシステム情報の取得

ここでは，データソースのシステム情報の取得時に使用するODBC関数について説明します。

16.10.1　SQLColumnPrivileges，SQLColumnPrivilegesW

(1)　機能

指定されたテーブルの列と関連づけられた特権の一覧を返します。SQLの結果セットの形式で出力します。

(2)　形式

SQLColumnPrivilegesの場合

SQLRETURN SQLColumnPrivileges
(
  SQLHSTMT       StatementHandle,   /* In */
  SQLCHAR      * CatalogName,       /* In */
  SQLSMALLINT    NameLength1,       /* In */
  SQLCHAR      * SchemaName,        /* In */
  SQLSMALLINT    NameLength2,       /* In */
  SQLCHAR      * TableName,         /* In */
  SQLSMALLINT    NameLength3,       /* In */
  SQLCHAR      * ColumnName,        /* In */
  SQLSMALLINT    NameLength4        /* In */
)

SQLColumnPrivilegesWの場合

SQLRETURN SQLColumnPrivilegesW
(
  SQLHSTMT       StatementHandle,   /* In */
  SQLWCHAR     * CatalogName,       /* In */
  SQLSMALLINT    NameLength1,       /* In */
  SQLWCHAR     * SchemaName,        /* In */
  SQLSMALLINT    NameLength2,       /* In */
  SQLWCHAR     * TableName,         /* In */
  SQLSMALLINT    NameLength3,       /* In */
  SQLWCHAR     * ColumnName,        /* In */
  SQLSMALLINT    NameLength4        /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

CatalogName：

テーブルに対するカタログ名を指定します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，空の文字列（""）またはNULLを指定します。

NameLength1：

*CatalogNameの長さ※1またはSQL_NTSを指定します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，0を指定します。

SchemaName：

テーブルのスキーマ名を指定します。パターン文字列※2を使用してスキーマ名を指定できます。

SchemaNameにNULLポインタまたは空の文字列（""）だけを指定した場合，SchemaNameにパターン文字列'%'だけを指定したと見なされます。

NameLength2：

*SchemaNameの長さ※1またはSQL_NTSを指定します。

NameLength2に0を指定した場合，SchemaNameにパターン文字列'%'だけを指定したと見なされます。

TableName：

テーブル名を指定します。パターン文字列※2を使用してテーブル名を指定できます。

TableNameにNULLポインタまたは空の文字列（""）だけを指定した場合，TableNameにパターン文字列'%'だけを指定したと見なされます。

NameLength3：

*TableNameの長さ※1またはSQL_NTSを指定します。

NameLength3に0を指定した場合，TableNameにパターン文字列'%'だけを指定したと見なされます。

ColumnName：

列名を指定します。パターン文字列※2を使用して列名を指定できます。

ColumnNameにNULLポインタまたは空の文字列（""）だけを指定した場合，ColumnNameにパターン文字列'%'だけを指定したと見なされます。

NameLength4：

*ColumnNameの長さ※1またはSQL_NTSを指定します。

NameLength4に0を指定した場合，ColumnNameにパターン文字列'%'だけを指定したと見なされます。

注※1

長さの単位は，SQLColumnPrivilegesの場合はバイト長，SQLColumnPrivilegesWの場合は文字数となります。

注※2

パターン文字列中に指定できる特殊文字については，「表16‒12　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

この関数を実行したときに返される結果セットの形式を次の表に示します。

表16‒11　返却される結果セットの形式

列番号

型

列名

列の意味

1

Varchar

TABLE_CAT

カタログ名（常にナル値を返します）

2

Varchar

TABLE_SCHEM

スキーマ名

3

Varchar

TABLE_NAME

表名

4

Varchar

COLUMN_NAME

列名

5

Varchar

GRANTOR

アクセス権限の付与者

6

Varchar

GRANTEE

アクセス権限の被付与者

7

Varchar

PRIVILEGE

許可されているアクセス権限を返します。

SELECT：SELECT権限

INSERT：INSERT権限

UPDATE：UPDATE権限

DELETE：DELETE権限

TRUNCATE：TRUNCATE権限

REFERENCES：REFERENCES権限

IMPORT TABLE：IMPORT TABLE権限

REBUILD INDEX：REBUILD INDEX権限

GET COSTINFO：GET COSTINFO権限

EXPORT TABLE：EXPORT TABLE権限

MERGE CHUNK：MERGE CHUNK権限

CHANGE CHUNK COMMENT：CHANGE CHUNK COMMENT権限

CHANGE CHUNK STATUS：CHANGE CHUNK STATUS権限

ARCHIVE CHUNK：ARCHIVE CHUNK権限

UNARCHIVE CHUNK：UNARCHIVE CHUNK権限

8

Varchar

IS_GRANTABLE

アクセス権限の被付与者が，ほかのユーザにアクセス権限を付与できるかどうかを返します。

YES：アクセス権限を付与できます。

NO：アクセス権限を付与できません。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

カーソルがオープンしている状態のときに実行されました。

○

40001

直列化の失敗

−

×

40003

ステートメントの完了が不明

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

名前の長さを格納する引数のどれかの値が，対応する名前の最大長を超えているか，またはSQL_NTS以外の負の値になっています。

〇

HY117

接続がサスペンド中

−

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.10.2　SQLColumns，SQLColumnsW

(1)　機能

列情報の一覧を結果セットとして返します。

(2)　形式

SQLColumnsの場合

SQLRETURN SQLColumns
(
  SQLHSTMT          StatementHandle,   /* In */
  SQLCHAR         * CatalogName,       /* In */
  SQLSMALLINT       NameLength1,       /* In */
  SQLCHAR         * SchemaName,        /* In */
  SQLSMALLINT       NameLength2,       /* In */
  SQLCHAR         * TableName,         /* In */
  SQLSMALLINT       NameLength3,       /* In */
  SQLCHAR         * ColumnName,        /* In */
  SQLSMALLINT       NameLength4        /* In */
)

SQLColumnsWの場合

SQLRETURN SQLColumnsW
(
  SQLHSTMT          StatementHandle,   /* In */
  SQLWCHAR        * CatalogName,       /* In */
  SQLSMALLINT       NameLength1,       /* In */
  SQLWCHAR        * SchemaName,        /* In */
  SQLSMALLINT       NameLength2,       /* In */
  SQLWCHAR         * TableName,        /* In */
  SQLSMALLINT       NameLength3,       /* In */
  SQLWCHAR        * ColumnName,        /* In */
  SQLSMALLINT       NameLength4        /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

CatalogName：

指定内容をカタログ名として使用します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，空の文字列（""）またはNULLを指定します。

NameLength1：

*CatalogNameの長さ※1，またはSQL_NTSを指定します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，0を指定します。

SchemaName：

スキーマ名のパターン文字列※2を指定します。NULLを指定した場合は，パターン文字列として'%'が指定されたときと同じ動作となります。

NameLength2：

*SchemaNameの長さ※1，またはSQL_NTSを指定します。

0を指定した場合は，SchemaNameにパターン文字列として'%'が指定されたときと同じ動作となります。

TableName：

テーブル名のパターン文字列※2を指定します。NULLを指定した場合は，パターン文字列として'%'が指定されたときと同じ動作となります。

NameLength3：

*TableNameの長さ※1，またはSQL_NTSを指定します。

0を指定した場合は，TableNameにパターン文字列として'%'が指定されたときと同じ動作となります。

ColumnName：

列名のパターン文字列※2を指定します。NULLを指定した場合は，パターン文字列として'%'が指定されたときと同じ動作となります。

NameLength4：

*ColumnNameの長さ※1，またはSQL_NTSを指定します。

0を指定した場合は，ColumnNameにパターン文字列として'%'が指定されたときと同じ動作となります。

注※1

長さの単位は，SQLColumnsの場合はバイト長，SQLColumnsWの場合は文字数となります。

注※2

パターン文字列中に指定できる特殊文字を次の表に示します。

表16‒12　パターン文字列中に指定できる特殊文字

指定できる特殊文字

意味

_（下線）

任意の1文字です。

%

0文字以上の任意の長さの文字列です。

¥

エスケープ文字です。パターン文字列中に指定したエスケープ文字の直後の特殊文字を通常の文字として扱います。

¥は，Shift-JISの0x5c（UTF-16LEの0x5c00）で示される文字です。UTF-8の場合は，¥（バックスラッシュ）で表示される文字を指定してください。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

実行後に返却される結果セットの形式を次の表に示します。

表16‒13　返却される結果セットの形式

列番号

型

列名

列の意味

1

Varchar

TABLE_CAT

常にナル値を返します。

2

Varchar

TABLE_SCHEM

スキーマ名

3

Varchar

TABLE_NAME

表名

4

Varchar

COLUMN_NAME

列名

5

smallint

DATA_TYPE

ODBC SQLデータ型識別子

6

Varchar

TYPE_NAME

型名

7

Integer

COLUMN_SIZE

列サイズ

8

Integer

BUFFER_LENGTH

列のデータ定義長

9

Smallint

DECIMAL_DIGITS

小数点以下の桁数

10

Smallint

NUM_PREC_RADIX

基数

真数値：10

数値以外：ナル値

11

Smallint

NULLABLE

この型にナル値を使用できるかどうかを返します。

SQL_NO_NULLS：ナル値を使用できないおそれがあります。

SQL_NULLABLE：ナル値を使用できます。

12

Varchar

REMARKS

常にナル値を返します。

13

Varchar

COLUMN_DEF

列の既定値を返します。

返却された値が，アポストロフィ（'）で囲まれている場合は，列の既定値が文字列であることを意味しています。

列の既定値にNULLが指定されている場合は，アポストロフィ（'）で囲まれていないNULLという文字列を返します。

列の既定値が指定されていない場合は，ナル値を返します。

そのほかの返却値については，マニュアルHADB　システム構築・運用ガイドのSQL_COLUMNSの内容のDEFAULT_VALUE列を参照してください。

14

Smallint

SQL_DATA_TYPE

ODBC SQLデータ型識別子

15

Smallint

SQL_DATETIME_SUB

ODBC SQLデータ型識別子のサブコード

16

Integer

CHAR_OCTET_LENGTH

文字データ型についての列の最大バイト長

17

Integer

ORDINAL_POSITION

列番号

1から始まります。

18

Varchar

IS_NULLABLE

この型にナル値が使用できるかどうかを返します。

YES：ナル値を使用できる可能性があります。

NO：ナル値を使用できません。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

×

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C041

データ型未サポートエラー

ドライバは指定されたデータ型をサポートしていません。

×

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

名前の長さを格納する引数のどれかの値が，対応する名前の最大長を超えました。

○

HY117

接続がサスペンド中

−

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

この関数を実行したHADBユーザが持っている権限によって，取得できる列情報が変わります。権限と取得できる列情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

16.10.3　SQLForeignKeys，SQLForeignKeysW

(1)　機能

次の外部キーの列情報をSQLの結果セットの形式で返します。

指定されたテーブルの外部キー一覧（別のテーブルの主キーを参照する指定をされたテーブルの列）

指定されたテーブルの主キーを参照する，別のテーブルの外部キー一覧

(2)　形式

SQLForeignKeysの場合

SQLRETURN SQLForeignKeys
(
  SQLHSTMT        StatementHandle,    /* In */
  SQLCHAR       * PKCatalogName,      /* In */
  SQLSMALLINT     NameLength1,        /* In */
  SQLCHAR       * PKSchemaName,       /* In */
  SQLSMALLINT     NameLength2,        /* In */
  SQLCHAR       * PKTableName,        /* In */
  SQLSMALLINT     NameLength3,        /* In */
  SQLCHAR       * FKCatalogName,      /* In */
  SQLSMALLINT     NameLength4,        /* In */
  SQLCHAR       * FKSchemaName,       /* In */
  SQLSMALLINT     NameLength5,        /* In */
  SQLCHAR       * FKTableName,        /* In */
  SQLSMALLINT     NameLength6         /* In */
)

SQLForeignKeysWの場合

SQLRETURN SQLForeignKeysW
(
  SQLHSTMT        StatementHandle,    /* In */
  SQLWCHAR      * PKCatalogName,      /* In */
  SQLSMALLINT     NameLength1,        /* In */
  SQLWCHAR      * PKSchemaName,       /* In */
  SQLSMALLINT     NameLength2,        /* In */
  SQLWCHAR      * PKTableName,        /* In */
  SQLSMALLINT     NameLength3,        /* In */
  SQLWCHAR      * FKCatalogName,      /* In */
  SQLSMALLINT     NameLength4,        /* In */
  SQLWCHAR      * FKSchemaName,       /* In */
  SQLSMALLINT     NameLength5,        /* In */
  SQLWCHAR      * FKTableName,        /* In */
  SQLSMALLINT     NameLength6         /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

PKCatalogName：

主キーのテーブルのカタログ名を指定します。ただし，指定しても無視されます。この関数を使用する際は，空の文字列（""），またはNULLを指定します。

NameLength1：

*PKCatalogNameの長さ※，またはSQL_NTSを指定します。ただし，指定しても無視されます。この関数を使用する際は，0を指定します。

PKSchemaName：

主キーのテーブルのスキーマ名を指定します。NULLを指定した場合は，すべてのスキーマ名を対象とします。

NameLength2：

*PKSchemaNameの長さ※，またはSQL_NTSを指定します。0を指定した場合は，すべてのスキーマ名を対象とします。

PKTableName：

主キーのテーブル名を指定します。指定する値については，「表16‒14　PKTableNameおよびFKTableNameの指定値の組み合わせと，その組み合わせによって返却される結果セット」を参照してください。空の文字列を指定した場合，結果セットの行数は0になります。

NameLength3：

*PKTableNameの長さ※，またはSQL_NTSを指定します。PKTableNameにNULLを指定した場合，この引数は無視されます。PKTableNameにNULL以外の値を指定して，この引数に0を指定した場合，PKTableNameに空の文字列を指定したときと同じ動作になります。

FKCatalogName：

外部キーのテーブルのカタログ名を指定します。ただし，指定しても無視されます。この関数を使用する際は，空の文字列（""），またはNULLを指定します。

NameLength4：

*FKCatalogNameの長さ※，またはSQL_NTSを指定します。ただし，指定しても無視されます。この関数を使用する際は，0を指定します。

FKSchemaName：

外部キーのテーブルのスキーマ名を指定します。NULLを指定した場合は，すべてのスキーマ名を対象とします。

NameLength5：

*FKSchemaNameの長さ※，またはSQL_NTSを指定します。0を指定した場合は，すべてのスキーマ名を対象とします。

FKTableName：

外部キーのテーブル名を指定します。指定する値については，「表16‒14　PKTableNameおよびFKTableNameの指定値の組み合わせと，その組み合わせによって返却される結果セット」を参照してください。空の文字列を指定した場合，結果セットの行数は0になります。

NameLength6：

*FKTableNameの長さ※，またはSQL_NTSを指定します。PKTableNameにNULLを指定した場合，この引数は無視されます。PKTableNameにNULL以外の値を指定して，この引数に0を指定した場合，PKTableNameに空の文字列を指定したときと同じ動作になります。

注※

長さの単位は，SQLForeignKeysの場合はバイト長，SQLForeignKeysWの場合は文字数となります。

PKTableNameおよびFKTableNameの指定値の組み合わせと，その組み合わせによって返却される結果セットを次の表に示します。

表16‒14　PKTableNameおよびFKTableNameの指定値の組み合わせと，その組み合わせによって返却される結果セット

PKTableName

FKTableName

返却される結果セット

NULL

NULL

−（エラー）

Not NULL

NULL

PKTableNameに指定されたテーブルの主キーと，その主キーを参照する別テーブルの外部キーの情報を返します。

PKTableNameに指定されたテーブルのユニーク制約だけのキーを参照する別テーブルの外部キーの情報は返しません。

NULL

Not NULL

FKTableNameに指定されたテーブルの外部キーと，その外部キーが参照する別テーブルの主キーの情報を返します。

別テーブルのユニーク制約だけのキーを参照するFKTableNameに指定されたテーブルの外部キーの情報は返しません。

Not NULL

Not NULL

FKTableNameに指定されたテーブルの外部キーと，その外部キーが参照するテーブルの主キーの情報を返します。この外部キーは，PKTableNameに指定されたテーブルの主キーだけを参照します。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

SQLForeignKeysまたはSQLForeignKeysWを実行すると結果セットが作成されます。返却される結果セットの形式を次に示します。

表16‒15　返却される結果セットの形式

列番号

型

列名

列の意味

1

Varchar

PKTABLE_CAT

常にナル値を返します。

2

Varchar

PKTABLE_SCHEM

主キーのスキーマ名を返します。スキーマ名がない場合，空の文字列を返します。

3

Varchar

PKTABLE_NAME

主キーの表名を返します。

4

Varchar

PKCOLUMN_NAME

主キーの列名を返します。列名がない場合，空の文字列を返します。

5

Varchar

FKTABLE_CAT

常にナル値を返します。

6

Varchar

FKTABLE_SCHEM

外部キーのスキーマ名を返します。スキーマ名がない場合，空の文字列を返します。

7

Varchar

FKTABLE_NAME

外部キーの表名を返します。

8

Varchar

FKCOLUMN_NAME

外部キーの列名を返します。列名がない場合，空の文字列を返します。

9

Smallint

KEY_SEQ

1から始まる外部キーの列順の番号を返します。

10

Smallint

UPDATE_RULE

更新を行うSQL文が要求されたときに，外部キーに適用される動作を返します。

SQL_NO_ACTION

主キーの値の更新，または外部キーの値の更新によって，外部キーの値に対応する主キーの値がない場合，更新はできません。ただし，CREATE TABLE文の参照制約定義で参照制約チェック抑止指定（DISABLE）を指定した場合は，主キーの値または外部キーの値を更新できます。

11

Smallint

DELETE_RULE

削除を行うSQL文が要求されたときに，外部キーに適用される動作を返します。

SQL_NO_ACTION

参照先テーブルの行削除によって，外部キーの値に対応する主キーの値がない場合，行削除はできません。ただし，CREATE TABLE文の参照制約定義で参照制約チェック抑止指定（DISABLE）を指定した場合は，行を削除できます。

12

Varchar

FK_NAME

外部キー名を返します。

13

Varchar

PK_NAME

主キー名を返します。

14

Smallint

DEFERRABILITY

外部キーに対する制約のチェックを遅延するかどうかを返します。

SQL_NOT_DEFERRABLE

SQL文が実行されるたびに制約がチェックされます。遅延できるように変更することはできません。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

カーソルがオープンしている状態のときに実行されました。

○

40001

直列化の失敗

−

×

40003

ステートメントの完了が不明

×

5C002

文字コード変換エラーが発生

変換できない文字コードを検出しました。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

PKTableNameおよびFKTableNameの両方がNULLです。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

名前の長さを格納する引数のどれかの値が，対応する名前の最大長を超えました。

○

HY117

接続がサスペンド中

−

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

この関数を実行したHADBユーザが持っている権限によって，取得できる外部キーの情報が変わります。権限と取得できる情報の対応については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

16.10.4　SQLPrimaryKeys，SQLPrimaryKeysW

(1)　機能

テーブルに対する主キーを構成する列名を返します。SQL文の結果セットの形式で出力します。

1回の呼び出しで複数のテーブルから主キーを返すことはできません。

(2)　形式

SQLPrimaryKeysの場合

SQLRETURN SQLPrimaryKeys
(
  SQLHSTMT       StatementHandle,     /* In */
  SQLCHAR      * CatalogName,         /* In */
  SQLSMALLINT    NameLength1,         /* In */
  SQLCHAR      * SchemaName,          /* In */
  SQLSMALLINT    NameLength2,         /* In */
  SQLCHAR      * TableName,           /* In */
  SQLSMALLINT    NameLength3          /* In */
)

SQLPrimaryKeysWの場合

SQLRETURN SQLPrimaryKeysW
(
  SQLHSTMT       StatementHandle,     /* In */
  SQLWCHAR     * CatalogName,         /* In */
  SQLSMALLINT    NameLength1,         /* In */
  SQLWCHAR     * SchemaName,          /* In */
  SQLSMALLINT    NameLength2,         /* In */
  SQLWCHAR     * TableName,           /* In */
  SQLSMALLINT    NameLength3          /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

CatalogName：

指定内容をカタログ名として使用します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，空の文字列（""）またはNULLを指定します。

NameLength1：

*CatalogNameの長さ※，またはSQL_NTSを指定します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，0を指定します。

SchemaName：

スキーマ名を指定します。NULLを指定した場合は，すべてのスキーマ名を対象にします。

NameLength2：

*SchemaNameの長さ※，またはSQL_NTSを指定します。

0を指定した場合は，SchemaNameによる絞り込みを行いません。

TableName：

テーブル名を指定します。NULLを指定した場合は，すべてのテーブル名を対象にします。

NameLength3：

*TableNameの長さ※，またはSQL_NTSを指定します。

0を指定した場合は，TableNameにNULLが指定されたときと同じ動作となります。

注※

長さの単位は，SQLPrimaryKeysの場合はバイト長，SQLPrimaryKeysWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

SQLPrimaryKeysまたはSQLPrimaryKeysWを実行すると結果セットが作成されます。返却される結果セットの形式を次に示します。

表16‒16　返却される結果セットの形式

列番号

型

列名

列の意味

1

Varchar

TABLE_CAT

常にナル値を返します。

2

Varchar

TABLE_SCHEM

スキーマ名

3

Varchar

TABLE_NAME

表名

4

Varchar

COLUMN_NAME

列名

5

Smallint

KEY_SEQ

主キー内で付けられる列順の番号

6

Varchar

PK_NAME

主キー名

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

カーソルがオープンしている状態のときに実行されました。

○

40001

直列化の失敗

−

×

40003

ステートメントの完了が不明

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

TableNameがNULLポインタです。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

名前の長さを格納する引数のどれかの値が，対応する名前の最大長を超えました。

○

HY117

接続がサスペンド中

−

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

この関数を実行したHADBユーザが持っている権限によって，取得できる主キーの情報が変わります。権限と取得できる主キーの情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

16.10.5　SQLProcedureColumns，SQLProcedureColumnsW

(1)　機能

入力パラメタと出力パラメタの一覧，および指定されたプロシジャに対する結果セットを構成する列の一覧を返します。SQL文の結果セットの形式で出力します。

ただし，プロシジャをサポートしていないため，検索結果セットの行数は常に0になります。

(2)　形式

SQLProcedureColumnsの場合

SQLRETURN SQLProcedureColumns
(
  SQLHSTMT        StatementHandle,    /* In */
  SQLCHAR       * CatalogName,        /* In */
  SQLSMALLINT     NameLength1,        /* In */
  SQLCHAR       * SchemaName,         /* In */
  SQLSMALLINT     NameLength2,        /* In */
  SQLCHAR       * ProcName,           /* In */
  SQLSMALLINT     NameLength3,        /* In */
  SQLCHAR       * ColumnName,         /* In */
  SQLSMALLINT     NameLength4         /* In */
)

SQLProcedureColumnsWの場合

SQLRETURN SQLProcedureColumnsW
(
  SQLHSTMT        StatementHandle,    /* In */
  SQLWCHAR      * CatalogName,        /* In */
  SQLSMALLINT     NameLength1,        /* In */
  SQLWCHAR      * SchemaName,         /* In */
  SQLSMALLINT     NameLength2,        /* In */
  SQLWCHAR      * ProcName,           /* In */
  SQLSMALLINT     NameLength3,        /* In */
  SQLWCHAR      * ColumnName,         /* In */
  SQLSMALLINT     NameLength4         /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

CatalogName：

プロシジャのカタログ名を指定します。

NameLength1：

*CatalogNameの長さ※を指定します。

SchemaName：

プロシジャのスキーマ名に対するパターン文字列を指定します。

NameLength2：

*SchemaNameの長さ※を指定します。

ProcName：

プロシジャ名に対するパターン文字列を指定します。

NameLength3：

*ProcNameの長さ※を指定します。

ColumnName：

列名に対するパターン文字列を指定します。

NameLength4：

*ColumnNameの長さ※を指定します。

注※

長さの単位は，SQLProcedureColumnsの場合はバイト長，SQLProcedureColumnsWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

カーソルがオープンしている状態のときに実行されました。

○

40001

直列化の失敗

−

×

40003

ステートメントの完了が不明

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

○

HY090

無効な文字列長または無効なバッファ長

×

HY117

接続がサスペンド中

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.10.6　SQLProcedures，SQLProceduresW

(1)　機能

特定のデータソースに格納されたプロシジャの一覧を返します。SQL文の結果セットの形式で出力します。

ただし，プロシジャをサポートしていないため，検索結果セットの行数は常に0になります。

(2)　形式

SQLProceduresの場合

SQLRETURN SQLProcedures
(
  SQLHSTMT       StatementHandle,   /* In */
  SQLCHAR      * CatalogName,       /* In */
  SQLSMALLINT    NameLength1,       /* In */
  SQLCHAR      * SchemaName,        /* In */
  SQLSMALLINT    NameLength2,       /* In */
  SQLCHAR      * ProcName,          /* In */
  SQLSMALLINT    NameLength3        /* In */
)

SQLProceduresWの場合

SQLRETURN SQLProceduresW
(
  SQLHSTMT       StatementHandle,   /* In */
  SQLWCHAR     * CatalogName,       /* In */
  SQLSMALLINT    NameLength1,       /* In */
  SQLWCHAR     * SchemaName,        /* In */
  SQLSMALLINT    NameLength2,       /* In */
  SQLWCHAR     * ProcName,          /* In */
  SQLSMALLINT    NameLength3        /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

CatalogName：

プロシジャのカタログ名を指定します。

NameLength1：

*CatalogNameの長さ※を指定します。

SchemaName：

プロシジャのスキーマ名に対するパターン文字列を指定します。

NameLength2：

*SchemaNameの長さ※を指定します。

ProcName：

プロシジャ名に対するパターン文字列を指定します。

NameLength3：

*ProcNameの長さ※を指定します。

注※

長さの単位は，SQLProceduresの場合はバイト長，SQLProceduresWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

カーソルがオープンしている状態のときに実行されました。

○

40001

直列化の失敗

−

×

40003

ステートメントの完了が不明

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

×

HY117

接続がサスペンド中

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.10.7　SQLSpecialColumns，SQLSpecialColumnsW

(1)　機能

指定されたテーブルの列に関する次のどちらかの情報を取得します。

テーブルの行を一意に識別する最適な列のセット

行の値がトランザクションによって更新されるときに自動的に更新される列

SQL文の結果セットの形式で出力します。

ただし，自動的に列を更新する機能をサポートしていないため，検索結果セットの行数は常に0になります。

(2)　形式

SQLSpecialColumnsの場合

SQLRETURN SQLSpecialColumns
(
  SQLHSTMT       StatementHandle,    /* In */
  SQLUSMALLINT   IdentifierType,     /* In */
  SQLCHAR      * CatalogName,        /* In */
  SQLSMALLINT    NameLength1,        /* In */
  SQLCHAR      * SchemaName,         /* In */
  SQLSMALLINT    NameLength2,        /* In */
  SQLCHAR      * TableName,          /* In */
  SQLSMALLINT    NameLength3,        /* In */
  SQLUSMALLINT   Scope,              /* In */
  SQLUSMALLINT   Nullable            /* In */
)

SQLSpecialColumnsWの場合

SQLRETURN SQLSpecialColumnsW
(
  SQLHSTMT       StatementHandle,    /* In */
  SQLUSMALLINT   IdentifierType,     /* In */
  SQLWCHAR     * CatalogName,        /* In */
  SQLSMALLINT    NameLength1,        /* In */
  SQLWCHAR     * SchemaName,         /* In */
  SQLSMALLINT    NameLength2,        /* In */
  SQLWCHAR     * TableName,          /* In */
  SQLSMALLINT    NameLength3,        /* In */
  SQLUSMALLINT   Scope,              /* In */
  SQLUSMALLINT   Nullable            /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

IdentifierType：

返す列の種類として，次の値のどちらかを指定します。

IdentifierType

内容

SQL_BEST_ROWID

列から値を取得することで，指定されたテーブルの行が一意に識別できる最適な列または列のセットを返します。

行を一意に識別できるインデクスの列がテーブル内に存在する場合はその列を返します。テーブル内にそういった列が存在しない場合は行を識別できるように一時的に作成した擬似列が返されます。

SQL_ROWVER

トランザクションによって行の値が更新される場合，指定されたテーブル内にデータソースによって自動的に更新される列があるとき，その列が返されます。

CatalogName：

テーブルに対するカタログ名を指定します。

NameLength1：

*CatalogNameの長さ※を指定します。

SchemaName：

テーブルに対するスキーマ名を指定します。

NameLength2：

*SchemaNameの長さ※を指定します。

TableName：

テーブル名を指定します。

NameLength3：

*TableNameの長さ※を指定します。

Scope：

必要最小限の行IDの有効範囲を次の値から選んで指定します。

Scope

内容

SQL_SCOPE_CURROW

行IDは，その行に位置づけられている間だけ有効です。

SQL_SCOPE_TRANSACTION

行IDは，現在のトランザクション中だけ有効です。

SQL_SCOPE_SESSION

行IDは，セッション（トランザクション境界にわたる）中，有効です。

Nullable：

ナル値を格納する特別な列を返すかどうかを指定します。

次の値のどちらかを指定します。

Nullable

内容

SQL_NO_NULLS

ナル値を格納できる特別な列を除きます。ドライバには，SQL_NO_NULLSをサポートできないものもあり，SQL_NO_NULLSが指定されると，空の結果セットを返すため，注意が必要です。アプリケーションはこれを踏まえて，必要な場合にだけSQL_NO_NULLSを指定します。

SQL_NULLABLE

ナル値が格納されている場合でも，特別な列を返します。

注※

長さの単位は，SQLSpecialColumnsの場合はバイト長，SQLSpecialColumnsWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

カーソルがオープンしている状態のときに実行されました。

○

40001

直列化の失敗

−

×

40003

ステートメントの完了が不明

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

×

HY097

IdentifierTypeに無効な値を指定された

×

HY098

Scopeに無効な値を指定された

×

HY099

Nullableに無効な値を指定された

×

HY117

接続がサスペンド中

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.10.8　SQLStatistics，SQLStatisticsW

(1)　機能

テーブルに関連づけられたインデクス情報の一覧をSQL文の結果セットの形式で返します。

(2)　形式

SQLStatisticsの場合

SQLRETURN SQLStatistics
(
  SQLHSTMT          StatementHandle,    /* In */
  SQLCHAR         * CatalogName,        /* In */
  SQLSMALLINT       NameLength1,        /* In */
  SQLCHAR         * SchemaName,         /* In */
  SQLSMALLINT       NameLength2,        /* In */
  SQLCHAR         * TableName,          /* In */
  SQLSMALLINT       NameLength3,        /* In */
  SQLUSMALLINT      Unique,             /* In */
  SQLUSMALLINT      Reserved            /* In */
)

SQLStatisticsWの場合

SQLRETURN SQLStatisticsW
(
  SQLHSTMT          StatementHandle,    /* In */
  SQLWCHAR        * CatalogName,        /* In */
  SQLSMALLINT       NameLength1,        /* In */
  SQLWCHAR        * SchemaName,         /* In */
  SQLSMALLINT       NameLength2,        /* In */
  SQLWCHAR        * TableName,          /* In */
  SQLSMALLINT       NameLength3,        /* In */
  SQLUSMALLINT      Unique,             /* In */
  SQLUSMALLINT      Reserved            /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

CatalogName：

指定内容をカタログ名として使用します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，空の文字列（""）またはNULLを指定します。

NameLength1：

*CatalogNameの長さ※，またはSQL_NTSを指定します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，0を指定します。

SchemaName：

スキーマ名を指定します。NULLを指定した場合は，すべてのスキーマ名を対象にします。

NameLength2：

*SchemaNameの長さ※，またはSQL_NTSを指定します。

0を指定した場合は，SchemaNameによる絞り込みを行いません。

TableName：

テーブル名を指定します。

NULLを指定した場合は，すべてのテーブル名を対象にします。

NameLength3：

*TableNameの長さ※，またはSQL_NTSを指定します。

0を指定した場合は，TableNameにNULLが指定されたとして動作します。

Unique：

インデクスの種類を指定します。

SQL_INDEX_UNIQUE

ユニークインデクスの情報だけを取得します。

SQL_INDEX_ALL

すべてのインデクス情報を取得します。

Reserved：

指定内容を結果セットのCARDINALITY列とPAGES列の重要度を示すオプションとして使用します。ただし，指定しても無視されます。

注※

長さの単位は，SQLStatisticsの場合はバイト長，SQLStatisticsWの場合は文字数となります。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

返却される結果セットの形式を次の表に示します。

表16‒17　返却される結果セットの形式

列番号

型

列名

列の意味

1

Varchar

TABLE_CAT

常にナル値を返します。

2

Varchar

TABLE_SCHEM

スキーマ名

3

Varchar

TABLE_NAME

表名

4

Smallint

NON_UNIQUE

インデクスを定義するキー値（インデクスとして定義する1つまたは複数の列全体の値）を一意でない値にできる場合は，SQL_TRUEを返します。できない場合は，SQL_FALSEを返します。

5

Varchar

INDEX_QUALIFIER

常にナル値を返します。

6

Varchar

INDEX_NAME

インデクス識別子

7

Smallint

TYPE

インデクス種別を返します。

常にSQL_INDEX_OTHERを返します。

8

Smallint

ORDINAL_POSITION

単一列インデクスの場合，1を返します。

複数列インデクスの場合，インデクスを構成する列の順序（インデクスを構成する列名順を識別する番号で，1から始まる整数）を返します。

9

Varchar

COLUMN_NAME

列名

10

Char(1)

ASC_OR_DESC

B-treeインデクスを昇順に定義する場合，"A"を返します。

B-treeインデクスを降順に定義する場合，"D"を返します。

テキストインデクスまたはレンジインデクスの場合，ナル値を返します。

11

Integer

CARDINALITY

常に0を返します。

12

Integer

PAGES

13

Varchar

FILTER_CONDITION

常にナル値を返します。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

カーソルがオープンしている状態のときに実行されました。

×

40001

直列化の失敗

−

×

40003

ステートメントの完了が不明

×

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C041

データ型未サポートエラー

ドライバは指定されたデータ型をサポートしていません。

×

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

TableNameにNULLポインタが指定されているか，またはNameLength3に0が指定されています。

○

HY010

関数シーケンスエラー

−

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

名前の長さを格納する引数のどれかの値が，対応する名前の最大長を超えました。

○

HY100

一意性のオプションが範囲外である

Uniqueに指定された値が無効です。

○

HY101

精度のオプションが範囲外である

−

×

HY117

接続がサスペンド中

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

この関数を実行したHADBユーザが持っている権限によって，取得できるインデクス情報が変わります。権限と取得できるインデクス情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

16.10.9　SQLTablePrivileges，SQLTablePrivilegesW

(1)　機能

テーブルの一覧と各テーブルに関連づけられたアクセス権限の一覧を返します。SQL文の結果セットの形式で出力します。

(2)　形式

SQLTablePrivilegesの場合

SQLRETURN SQLTablePrivileges
(
  SQLHSTMT       StatementHandle,    /* In */
  SQLCHAR      * CatalogName,        /* In */
  SQLSMALLINT    NameLength1,        /* In */
  SQLCHAR      * SchemaName,         /* In */
  SQLSMALLINT    NameLength2,        /* In */
  SQLCHAR      * TableName,          /* In */
  SQLSMALLINT    NameLength3         /* In */
)

SQLTablePrivilegesWの場合

SQLRETURN SQLTablePrivilegesW
(
  SQLHSTMT       StatementHandle,    /* In */
  SQLWCHAR     * CatalogName,        /* In */
  SQLSMALLINT    NameLength1,        /* In */
  SQLWCHAR     * SchemaName,         /* In */
  SQLSMALLINT    NameLength2,        /* In */
  SQLWCHAR     * TableName,          /* In */
  SQLSMALLINT    NameLength3         /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

CatalogName：

テーブルのカタログ名を指定します。

ただし，指定しても無視されます。この関数を使用する際は，空の文字列（""）またはNULLを指定してください。

NameLength1：

*CatalogNameの長さ※1，またはSQL_NTSを指定します。

ただし，指定しても無視されます。この関数を使用する際は，0を指定してください。

SchemaName：

テーブルのスキーマ名に対するパターン文字列※2を指定します。NULLを指定した場合は，すべてのスキーマ名を対象とします。

NameLength2：

*SchemaNameの長さ※1，またはSQL_NTSを指定します。0を指定した場合は，SchemaNameの指定による絞り込みを行いません。

TableName：

テーブル名に対するパターン文字列※2を指定します。NULLを指定した場合は，すべてのテーブル名を対象とします。

NameLength3：

*TableNameの長さ※1，またはSQL_NTSを指定します。0を指定した場合は，TableNameの指定による絞り込みを行いません。

注※1

長さの単位は，SQLTablePrivilegesの場合はバイト長，SQLTablePrivilegesWの場合は文字数となります。

注※2

パターン文字列中に指定できる特殊文字については，「表16‒12　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

SQLTablePrivilegesまたはSQLTablePrivilegesWを実行すると結果セットが作成されます。返却される結果セットの形式を次に示します。

表16‒18　返却される結果セットの形式

列番号

型

列名

列の意味

1

Varchar

TABLE_CAT

カタログ名

常にナル値を返します。

2

Varchar

TABLE_SCHEM

スキーマ名

3

Varchar

TABLE_NAME

表名

4

Varchar

GRANTOR

アクセス権限の付与者

5

Varchar

GRANTEE

アクセス権限の被付与者

6

Varchar

PRIVILEGE

許可されているアクセス権限

"SELECT"：SELECT権限

"INSERT"：INSERT権限

"UPDATE"：UPDATE権限

"DELETE"：DELETE権限

"TRUNCATE"：TRUNCATE権限

"REFERENCES"：REFERENCES権限

"IMPORT TABLE"：IMPORT TABLE権限

"REBUILD INDEX"：REBUILD INDEX権限

"GET COSTINFO"：GET COSTINFO権限

"EXPORT TABLE"：EXPORT TABLE権限

"MERGE CHUNK"：MERGE CHUNK権限

"CHANGE CHUNK COMMENT"：CHANGE CHUNK COMMENT権限

"CHANGE CHUNK STATUS"：CHANGE CHUNK STATUS権限

"ARCHIVE CHUNK"：ARCHIVE CHUNK権限

"UNARCHIVE CHUNK"：UNARCHIVE CHUNK権限

7

Varchar

IS_GRANTABLE

アクセス権限の被付与者が，別のHADBユーザにアクセス権限を与えることができるかどうかを返します。

"YES"：別のHADBユーザにアクセス権限を与えられます。

"NO"：別のHADBユーザにアクセス権限を与えられません。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

カーソルがオープンしている状態のときに実行されました。

○

40001

直列化の失敗

−

×

40003

ステートメントの完了が不明

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

○

HY008

動作がキャンセルされた

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

名前の長さを格納する引数のどれかの値が，対応する名前の最大長を超えました。

○

HY117

接続がサスペンド中

−

×

HYC00

オプション機能は実装されていない

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

この関数を実行したHADBユーザが持っている権限によって，取得できる情報が変わります。権限と取得できる情報の対応については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

16.10.10　SQLTables，SQLTablesW

(1)　機能

HADBサーバに格納されたテーブル名，スキーマ名およびテーブル種別の一覧を返します。

SQL文の結果セットの形式で出力します。

(2)　形式

SQLTablesの場合

SQLRETURN SQLTables
(
  SQLHSTMT         StatementHandle,        /* In */
  SQLCHAR        * CatalogName,            /* In */
  SQLSMALLINT      NameLength1,            /* In */
  SQLCHAR        * SchemaName,             /* In */
  SQLSMALLINT      NameLength2,            /* In */
  SQLCHAR        * TableName,              /* In */
  SQLSMALLINT      NameLength3,            /* In */
  SQLCHAR        * TableType,              /* In */
  SQLSMALLINT      NameLength4             /* In */
)

SQLTablesWの場合

SQLRETURN SQLTablesW
(
  SQLHSTMT         StatementHandle,        /* In */
  SQLWCHAR       * CatalogName,            /* In */
  SQLSMALLINT      NameLength1,            /* In */
  SQLWCHAR       * SchemaName,             /* In */
  SQLSMALLINT      NameLength2,            /* In */
  SQLWCHAR       * TableName,              /* In */
  SQLSMALLINT      NameLength3,            /* In */
  SQLWCHAR       * TableType,              /* In */
  SQLSMALLINT      NameLength4             /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

CatalogName：

カタログ名として使用します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，空の文字列（""）またはNULLを指定します。

NameLength1：

*CatalogNameの長さ※1，またはSQL_NTSを指定します。

指定内容は無効になりますが指定自体は必要なため，この関数を使用する際は，0を指定します。

SchemaName：

認可識別子または認可識別子に対するパターン文字列※2を指定します。NULLポインタまたは空の文字列（""）を指定した場合は，パターン文字列として'%'が指定されたと見なされます。

NameLength2：

*SchemaNameの長さ※1，またはSQL_NTSを指定します。

0を指定した場合，SchemaNameにパターン文字列として'%'が指定されたときと同じ動作になります。

TableName：

表識別子または表識別子に対するパターン文字列※2を指定します。NULLポインタまたは空の文字列（""）を指定した場合は，パターン文字列として'%'が指定されたと見なされます。

NameLength3：

*TableNameの長さ※1，またはSQL_NTSを指定します。

0を指定した場合，TableNameにパターン文字列として'%'が指定されたときと同じ動作になります。

TableType：

一致する表種別を示す文字列を指すポインタを指定します。HADB ODBCドライバが表種別として認識する文字列は次のとおりです。

SYSTEM TABLE

TABLE

VIEW

指定をする際，任意で各文字列の両端をアポストロフィ( ' )で囲んでください。また，複数の表種別の結果を取得する場合は，指定値をコンマ（ , ）で区切ります。

（例）

ディクショナリ表およびシステム表を取得する場合

「SYSTEM TABLE」または「'SYSTEM TABLE'」と指定します。

実表およびビュー表を取得する場合

「TABLE,VIEW」または「'TABLE','VIEW'」と指定します。

この引数にNULLポインタ，空の文字列（""），またはSQL_ALL_TABLE_TYPESを指定した場合，表種別として「'SYSTEM TABLE','TABLE','VIEW'」が指定されたと見なします。

また，HADB ODBCドライバが表種別として認識する文字列以外を指定した場合，HADB ODBCドライバが認識する文字列だけが有効となり，それ以外の指定値は無視されます。したがって，無効な文字列だけを指定した場合，NULLポインタ，空の文字列（""）が指定されたときと同様に，「'SYSTEM TABLE','TABLE','VIEW'」が指定されたと見なします。

NameLength4：

*TableTypeの長さ※1，またはSQL_NTSを指定します。

0を指定した場合，TableTypeに「'SYSTEM TABLE','TABLE','VIEW'」が指定されたと見なされます。

注※1

長さの単位は，SQLTablesの場合はバイト長，SQLTablesWの場合は文字数となります。

注※2

パターン文字列中に指定できる特殊文字については，「表16‒12　パターン文字列中に指定できる特殊文字」を参照してください。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

返却される結果セットの形式を次の表に示します。

表16‒19　返却される結果セットの形式

列番号

型

列名

列の意味

1

Varchar

TABLE_CAT

常にナル値を返します。

2

Varchar

TABLE_SCHEM

スキーマ名

3

Varchar

TABLE_NAME

表名

4

Varchar

TABLE_TYPE

表の種類

TABLE：実表

VIEW：ビュー表

SYSTEM TABLE：ディクショナリ表またはシステム表

5

Varchar

REMARKS

常にナル値を返します。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08S01

通信リンク失敗

×

24000

無効なカーソル状態

×

40001

直列化の失敗

×

40003

ステートメントの完了が不明

×

5C002

文字コードの変換エラー

変換できない文字コードを検出しました。

○

5C041

データ型未サポートエラー

ドライバは指定されたデータ型をサポートしていません。

×

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

HADB ODBCドライバは，関数の実行または完了をサポートするために必要なメモリを割り当てられません。

○

HY008

動作がキャンセルされた

−

×

HY009

NULLポインタの不正使用

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HY090

無効な文字列長または無効なバッファ長

名前の長さを格納する引数のどれかの値が，対応する名前の最大長を超えました。

○

HYC00

オプション機能は実装されていない

−

×

HYT00

タイムアウト終了

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

この関数を実行したHADBユーザが持っている権限によって，取得できるテーブルの情報が変わります。権限と取得できるテーブルの情報については，マニュアルHADB　システム構築・運用ガイドのHADBユーザが参照できるディクショナリ表とシステム表の範囲を参照してください。

16.11　SQL実行の終了

ここでは，SQL文の実行終了時に使用するODBC関数について説明します。

16.11.1　SQLFreeStmt

(1)　機能

指定したステートメントについて，オプションで指定された処理をします。関連する処理の停止，カーソルのクローズ，未処理結果の廃棄，ステートメントハンドルに関連するすべてのリソースの解放処理などをします。

(2)　形式

SQLRETURN SQLFreeStmt
(
  SQLHSTMT       StatementHandle,       /* In */
  SQLUSMALLINT   Option                 /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

Option：

次のうちのどれかのオプションを指定します。

オプションシンボル

内容

SQL_CLOSE

StatementHandleが管理しているカーソルをクローズします。SQLCloseCursorと同じ処理をしますが，この関数では，カーソルがオープンしていない場合，エラーになりません。SQL_SUCCESSで終了します。

SQL_UNBIND

ARDのSQL_DESC_COUNTフィールドに0を設定し，StatementHandleに対してSQLBindColで設定された列のバインドをすべて解除します。

SQL_RESET_PARAMS

APDのSQL_DESC_COUNTフィールドに0を設定し，StatementHandleに対してSQLBindParameterで設定されたパラメタのバインドをすべて解除します。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

24000

無効なカーソル状態

○

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY010

関数シーケンスエラー

この関数を実行する前にSQLExecute，SQLExecDirect，SQLExecDirectWまたはSQLParamDataのどれかがStatementHandleに対して呼び出され，SQL_NEED_DATAを返しました。その後，実行時データパラメタまたは実行時データ列の設定が完了していません。

○

HY013

メモリ管理エラー

−

×

HY092

無効な属性識別子，または無効なオプション識別子

OptionにSQL_DROPまたは無効な識別子が指定されました。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

OptionのSQL_DROPはサポートしていないため，ステートメントハンドルの解放はSQLFreeHandleで行ってください。

また，OptionのSQL_UNBINDおよびSQL_RESET_PARAMSではアンバインド処理だけをし，メモリの解放はしません。そのため，SQLBindColおよびSQLBindParameterでHADB ODBCドライバに渡したデータのメモリ領域の解放はAPで実行してください。

16.11.2　SQLCloseCursor

(1)　機能

指定したステートメントハンドルでオープンされたカーソルをクローズし，未処理の結果を破棄します。

(2)　形式

SQLRETURN SQLCloseCursor
(
  SQLHSTMT        StatementHandle       /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

24000

無効なカーソル状態

StatementHandleでオープンしているカーソルがありません。

○

HY000

一般エラー

−

×

HY001

メモリ割り当てエラー

HADB ODBCドライバは，関数の実行または完了をサポートするのに必要なメモリを割り当てられていません。

×

HY010

関数シーケンスエラー

−

×

HY013

メモリ管理エラー

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.11.3　SQLCancel

(1)　機能

実行中のSQL文の処理をキャンセルします。

(2)　形式

SQLRETURN SQLCancel
(
  SQLHSTMT        StatementHandle         /* In */
)

(3)　引数

StatementHandle：

ステートメントハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

SQLSTATEを返しません。

16.11.4　SQLEndTran

(1)　機能

接続に関連づけられたすべてのステートメント上でのアクティブな処理に対して，コミット処理またはロールバック処理を要求します。

(2)　形式

SQLRETURN SQLEndTran
(
  SQLSMALLINT    HandleType,         /* In */
  SQLHANDLE      Handle,             /* In */
  SQLSMALLINT    CompletionType      /* In */
)

(3)　引数

HandleType：

次のハンドルの種類を指定します。

SQL_HANDLE_DBC：接続ハンドル

Handle：

接続ハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

CompletionType ：

次のどちらかの処理を指定します。

SQL_COMMIT

コミット処理

SQL_ROLLBACK

ロールバック処理

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

08003

接続が存在しない

○

08007

トランザクション時の接続失敗

×

25S01

トランザクション状態が不明

×

25S02

トランザクションがまだアクティブである

×

25S03

トランザクションがロールバックされた

×

40001

直列化の失敗

×

40002

整合性の不一致

×

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY008

動作がキャンセルされた

×

HY010

関数シーケンスエラー

○

HY012

無効なトランザクション処理コード

×

HY013

メモリ管理エラー

×

HY092

無効な属性識別子，または無効なオプション識別子

HandleTypeまたはCompletionTypeに無効な値が設定されました。

○

HY115

非同期実行中の接続を含む環境を指定した

−

×

HYC00

オプション機能は実装されていない

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

IM017

非同期ポーリングが不正

×

IM018

非同期実行が未完了

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

(6)　注意事項

次のハンドルの種類はサポートしていません。

SQL_HANDLE_ENV：環境ハンドル

また，次のハンドルの種類を指定した場合，SQL_INVALID_HANDLEが返ることがあります。

SQL_HANDLE_STMT：ステートメントハンドル

SQL_HANDLE_DESC：ディスクリプタハンドル

16.12　データソースとの切断

ここでは，データソースとの切断時に使用するODBC関数について説明します。

16.12.1　SQLDisconnect

(1)　機能

特定の接続ハンドルに関連づけられた接続を切断します。

(2)　形式

SQLRETURN SQLDisconnect
(
  SQLHDBC           ConnectionHandle    /* In */
)

(3)　引数

ConnectionHandle：

接続ハンドルを指定します。

(4)　戻り値

SQL_SUCCESS，SQL_SUCCESS_WITH_INFO，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

01002

接続解除エラー

×

08003

接続が存在しない

○

25000

無効なトランザクション状態

○

HY000

一般エラー

×

HY001

メモリ割り当てエラー

×

HY010

関数シーケンスエラー

○

HY013

メモリ管理エラー

×

HYT01

接続タイムアウト終了

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.12.2　SQLFreeHandle

(1)　機能

特定の環境，接続，ステートメント，ディスクリプタのハンドルと関連づけられたリソースを解放します。

(2)　形式

SQLRETURN SQLFreeHandle
(
  SQLSMALLINT     HandleType,        /* In */
  SQLHANDLE       Handle             /* In */
)

(3)　引数

HandleType：

次のどれかのハンドルの種類を指定します。

SQL_HANDLE_ENV：環境ハンドル

SQL_HANDLE_DBC：接続ハンドル

SQL_HANDLE_STMT：ステートメントハンドル

SQL_HANDLE_DESC：ディスクリプタハンドル

Handle：

解放するハンドルを指定します。

この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。

(4)　戻り値

SQL_SUCCESS，SQL_ERROR，またはSQL_INVALID_HANDLEが返されます。

(5)　SQLSTATE

この関数では次のSQLSTATEを返します。

SQLSTATE

説明

備考

返却

01000

一般警告

−

×

HY001

メモリ割り当てエラー

×

HY010

関数シーケンスエラー

すべての従属ハンドルとコネクションを含むほかのリソースが先に解放されていません。

HandleTypeがSQL_HANDLE_STMTですが，そのステートメントハンドルに対して非同期実行関数が終了していません。

○

HY013

メモリ管理エラー

−

×

HY017

自動的に割り当てられるディスクリプタハンドルの不正使用

×

HY092

無効な属性識別子，または無効なオプション識別子

HandleTypeに指定できない値が指定されました。

○

HYT01

接続タイムアウト終了

−

×

IM001

ドライバはこの関数をサポートしていない

×

（凡例）

○：HADB ODBCドライバが返すことがあるSQLSTATEです。

×：HADB ODBCドライバが返さないSQLSTATEです。

−：なし。

16.13　SQLGetInfoおよびSQLGetInfoWのInfoTypeに指定できる情報型

InfoTypeに指定できる情報型を次の表に示します。

表16‒20　InfoTypeに指定できる情報型

項番

情報型（InfoType）

情報型の説明（規約）

返却値

データ型

1

SQL_ACCESSIBLE_PROCEDURES

次のどちらかの値を返却します。

Y

SQLProceduresがプロシジャをすべて実行できます。

N

SQLProceduresが実行できないプロシジャがあります。

"N"を返却します。

SQLCHAR *

SQLWCHAR *

2

SQL_ACCESSIBLE_TABLES

次のどちらかの値を返却します。

Y

SQLTablesが返すすべてのテーブルに対してSELECT特権が保証されます。

N

SQLTablesが返すテーブルにAPがアクセスできないものがあります。

"Y"を返却します。

SQLCHAR *

SQLWCHAR *

3

SQL_ACTIVE_ENVIRONMENTS

ドライバがサポートするアクティブな環境の最大数を返却します。制限が指定されていない，または不明な場合，この値には0を返却します。

0を返却します。

SQLUSMALLINT

4

SQL_AGGREGATE_FUNCTIONS

集計関数に関するサポート状況を示します。

次のビット列を返却します。

SQL_AF_ALL

SQL_AF_AVG

SQL_AF_COUNT

SQL_AF_DISTINCT

SQL_AF_MAX

SQL_AF_MIN

SQL_AF_SUM

SQLUINTEGER

5

SQL_ALTER_DOMAIN

データソースがサポートしているALTER DOMAINステートメントの句を示します。

戻り値が0の場合，ALTER DOMAINステートメントがサポートされていないことを示します。

0を返却します。

SQLUINTEGER

6

SQL_ALTER_TABLE

データソースがサポートしているALTER TABLEステートメントの句を示します。

環境ハンドルのSQL_ATTR_ODBC_VERSIONの指定値に従い，次のビット列を返却します。

SQL_OV_ODBC2の場合

SQL_AT_ADD_COLUMN

SQL_OV_ODBC3の場合

SQL_AT_ADD_COLUMN_SINGLE

SQLUINTEGER

7

SQL_ASYNC_MODE

ドライバでの非同期サポートのレベルを示します。

SQL_AM_NONEを返却します。

SQLUINTEGER

8

SQL_BATCH_ROW_COUNT

利用可能な行カウントに対するドライバの動作を示します。

0を返却します。

SQLUINTEGER

9

SQL_BATCH_SUPPORT

ドライバがサポートするバッチを示します。

0を返却します。

SQLUINTEGER

10

SQL_BOOKMARK_PERSISTENCE

ブックマークが有効になる処理を示します。

0を返却します。

SQLUINTEGER

11

SQL_CATALOG_LOCATION

修飾テーブル名のカタログの位置を示す値を返却します。

0を返却します。

SQLUSMALLINT

12

SQL_CATALOG_NAME

次のどちらかの値を返却します。

Y

サーバはカタログ名をサポートしています。

N

サーバはカタログ名をサポートしていません。

"N"を返却します。

SQLCHAR *

SQLWCHAR *

13

SQL_CATALOG_NAME_SEPARATOR

区切り文字として定義する1文字以上の文字列を返却します。この区切り文字は，カタログ名とその前後にある要素の間に置かれます。データソースがカタログをサポートしていない場合，空の文字列を返却します。

空の文字列を返却します。

SQLCHAR *

SQLWCHAR *

14

SQL_CATALOG_TERM

データソースのベンダー名を含む文字列をカタログとして返却します。データソースがカタログをサポートしていない場合，空の文字列を返却します。

空の文字列を返却します。

SQLCHAR *

SQLWCHAR *

15

SQL_CATALOG_USAGE

カタログを使用できるステートメントを示します。

データソースがカタログをサポートしていない場合，0を返却します。

0を返却します。

SQLUINTEGER

16

SQL_COLLATION_SEQ

照合の順序（サーバのデフォルト文字セットに対するデフォルトの照合）の名前を返却します。名前が不明な場合，空の文字列を返却します。

空の文字列を返却します。

SQLCHAR *

SQLWCHAR *

17

SQL_COLUMN_ALIAS

次のどちらかの値を返却します。

Y

データソースは列の別名をサポートしています。

N

データソースは列の別名をサポートしていません。

"Y"を返却します。

SQLCHAR *

SQLWCHAR *

18

SQL_CONCAT_NULL_BEHAVIOR

データソースがナル値の文字データ型の列をナル値以外のものと連結する方法を示します。

SQL_CB_NULLを返却します。

SQLUSMALLINT

19

SQL_CONVERT_BIGINT

データソースがサポートしている，CONVERTスカラ関数による変換を示します。

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_CHAR

SQL_CVT_DATE

SQL_CVT_DECIMAL

SQL_CVT_DOUBLE

SQL_CVT_FLOAT

SQL_CVT_INTEGER

SQL_CVT_NUMERIC

SQL_CVT_TIMESTAMP

SQL_CVT_VARCHAR

SQLUINTEGER

20

SQL_CONVERT_BINARY

次のビット列を返却します。

SQL_CVT_BINARY

SQL_CVT_CHAR

SQL_CVT_VARBINARY

SQL_CVT_VARCHAR

SQLUINTEGER

21

SQL_CONVERT_BIT

0を返却します。

SQLUINTEGER

22

SQL_CONVERT_CHAR

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_BINARY

SQL_CVT_CHAR

SQL_CVT_DATE

SQL_CVT_DECIMAL

SQL_CVT_DOUBLE

SQL_CVT_FLOAT

SQL_CVT_INTEGER

SQL_CVT_NUMERIC

SQL_CVT_TIME

SQL_CVT_TIMESTAMP

SQL_CVT_VARBINARY

SQL_CVT_VARCHAR

SQLUINTEGER

23

SQL_CONVERT_DATE

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_CHAR

SQL_CVT_DATE

SQL_CVT_INTEGER

SQL_CVT_TIMESTAMP

SQL_CVT_VARCHAR

SQLUINTEGER

24

SQL_CONVERT_DECIMAL

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_CHAR

SQL_CVT_DECIMAL

SQL_CVT_DOUBLE

SQL_CVT_FLOAT

SQL_CVT_INTEGER

SQL_CVT_NUMERIC

SQL_CVT_VARCHAR

SQLUINTEGER

25

SQL_CONVERT_DOUBLE

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_CHAR

SQL_CVT_DECIMAL

SQL_CVT_DOUBLE

SQL_CVT_FLOAT

SQL_CVT_INTEGER

SQL_CVT_NUMERIC

SQL_CVT_VARCHAR

SQLUINTEGER

26

SQL_CONVERT_FLOAT

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_CHAR

SQL_CVT_DECIMAL

SQL_CVT_DOUBLE

SQL_CVT_FLOAT

SQL_CVT_INTEGER

SQL_CVT_NUMERIC

SQL_CVT_VARCHAR

SQLUINTEGER

27

SQL_CONVERT_INTEGER

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_CHAR

SQL_CVT_DATE

SQL_CVT_DECIMAL

SQL_CVT_DOUBLE

SQL_CVT_FLOAT

SQL_CVT_INTEGER

SQL_CVT_NUMERIC

SQL_CVT_TIMESTAMP

SQL_CVT_VARCHAR

SQLUINTEGER

28

SQL_CONVERT_INTERVAL_YEAR_MONTH

0を返却します。

SQLUINTEGER

29

SQL_CONVERT_INTERVAL_DAY_TIME

0を返却します。

SQLUINTEGER

30

SQL_CONVERT_LONGVARBINARY

0を返却します。

SQLUINTEGER

31

SQL_CONVERT_LONGVARCHAR

0を返却します。

SQLUINTEGER

32

SQL_CONVERT_NUMERIC

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_CHAR

SQL_CVT_DECIMAL

SQL_CVT_DOUBLE

SQL_CVT_FLOAT

SQL_CVT_INTEGER

SQL_CVT_NUMERIC

SQL_CVT_VARCHAR

SQLUINTEGER

33

SQL_CONVERT_REAL

0を返却します。

SQLUINTEGER

34

SQL_CONVERT_SMALLINT

0を返却します。

SQLUINTEGER

35

SQL_CONVERT_TIME

次のビット列を返却します。

SQL_CVT_CHAR

SQL_CVT_TIME

SQL_CVT_VARCHAR

SQLUINTEGER

36

SQL_CONVERT_TIMESTAMP

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_CHAR

SQL_CVT_DATE

SQL_CVT_INTEGER

SQL_CVT_TIMESTAMP

SQL_CVT_VARCHAR

SQLUINTEGER

37

SQL_CONVERT_TINYINT

0を返却します。

SQLUINTEGER

38

SQL_CONVERT_VARBINARY

次のビット列を返却します。

SQL_CVT_BINARY

SQL_CVT_CHAR

SQL_CVT_VARBINARY

SQL_CVT_VARCHAR

SQLUINTEGER

39

SQL_CONVERT_VARCHAR

次のビット列を返却します。

SQL_CVT_BIGINT

SQL_CVT_BINARY

SQL_CVT_CHAR

SQL_CVT_DATE

SQL_CVT_DECIMAL

SQL_CVT_DOUBLE

SQL_CVT_FLOAT

SQL_CVT_INTEGER

SQL_CVT_NUMERIC

SQL_CVT_TIME

SQL_CVT_TIMESTAMP

SQL_CVT_VARBINARY

SQL_CVT_VARCHAR

SQLUINTEGER

40

SQL_CONVERT_FUNCTIONS

ドライバおよび関連するデータソースがサポートしているスカラ変換関数を示します。

次のビット列を返却します。

SQL_FN_CVT_CAST

SQL_FN_CVT_CONVERT

SQLUINTEGER

41

SQL_CORRELATION_NAME

テーブルの相関名をサポートするかどうかを示します。

SQL_CN_ANYを返却します。

SQLUSMALLINT

42

SQL_CREATE_ASSERTION

データソースがサポートするCREATE ASSERTIONステートメントの句を示します。

戻り値が0の場合，CREATE ASSERTIONステートメントがサポートされていないことを示します。

0を返却します。

SQLUINTEGER

43

SQL_CREATE_CHARACTER_SET

データソースがサポートするCREATE CHARACTER SETステートメントの句を示します。

戻り値が0の場合，CREATE CHARACTER SETステートメントがサポートされていないことを示します。

0を返却します。

SQLUINTEGER

44

SQL_CREATE_COLLATION

データソースがサポートするCREATE COLLATIONステートメントの句を示します。

戻り値が0の場合，CREATE COLLATIONステートメントがサポートされていないことを示します。

0を返却します。

SQLUINTEGER

45

SQL_CREATE_DOMAIN

データソースがサポートするCREATE DOMAINステートメントの句を示します。

戻り値が0の場合，CREATE DOMAINステートメントがサポートされていないことを示します。

0を返却します。

SQLUINTEGER

46

SQL_CREATE_SCHEMA

データソースがサポートするCREATE SCHEMAステートメントの句を示します。

戻り値が0の場合，CREATE SCHEMAステートメントがサポートされていないことを示します。

SQL_CS_CREATE_SCHEMAを返却します。

SQLUINTEGER

47

SQL_CREATE_TABLE

データソースがサポートするCREATE TABLEステートメントの句を示します。

戻り値が0の場合，CREATE TABLEステートメントがサポートされていないことを示します。

次のビット列を返却します。

SQL_CT_CREATE_TABLE

SQL_CT_TABLE_CONSTRAINT

SQL_CT_CONSTRAINT_NAME_DEFINITION

SQL_CT_COLUMN_DEFAULT

SQLUINTEGER

48

SQL_CREATE_TRANSLATION

データソースがサポートするCREATE TRANSLATIONステートメントの句を示します。

戻り値が0の場合，CREATE TRANSLATIONステートメントがサポートされていないことを示します。

0を返却します。

SQLUINTEGER

49

SQL_CREATE_VIEW

データソースがサポートするCREATE VIEWステートメントの句を示します。

戻り値が0の場合，CREATE VIEWステートメントがサポートされていないことを示します。

SQL_CV_CREATE_VIEWを返却します。

SQLUINTEGER

50

SQL_CURSOR_COMMIT_BEHAVIOR

COMMIT処理がカーソルとデータソースの準備されたステートメントに与える影響を示します。

SQL_CB_CLOSEを返却します。

SQLUSMALLINT

51

SQL_CURSOR_ROLLBACK_BEHAVIOR

ROLLBACK処理がカーソルとデータソースの準備されたステートメントに与える影響を示します。

SQL_CB_CLOSEを返却します。

SQLUSMALLINT

52

SQL_CURSOR_SENSITIVITY

カーソルの動作に対するサポートを示します。

SQL_UNSPECIFIEDを返却します。

SQLUINTEGER

53

SQL_DATA_SOURCE_NAME

接続中に使用するデータソース名の文字列を示します。

空の文字列または接続に使用したデータソース名を返却します。

SQLCHAR *

SQLWCHAR *

54

SQL_DATA_SOURCE_READ_ONLY

次のどちらかの値を返却します。

Y

データソースのモードがREAD ONLY

N

データソースのモードがREAD ONLY以外

"N"を返却します。

SQLCHAR *

SQLWCHAR *

55

SQL_DATABASE_NAME

データソースが"database"という名前付きのオブジェクトを定義する場合，現在使用中のデータベース名の文字列になります。

空の文字列を返却します。

SQLCHAR *

SQLWCHAR *

56

SQL_DATETIME_LITERALS

データソースがサポートするSQL-92の日付時刻リテラルを示します。

次のビット列を返却します。

SQL_DL_SQL92_DATE

SQL_DL_SQL92_TIME

SQL_DL_SQL92_TIMESTAMP

SQLUINTEGER

57

SQL_DBMS_NAME

ドライバがアクセスするDBMS製品の名前を示す文字列です。

"Hitachi Advanced Data Binder"を返却します。

SQLCHAR *

SQLWCHAR *

58

SQL_DBMS_VER

ドライバがアクセスするDBMS製品のバージョンを示す文字列です。

バージョンは，##.##.####の形式で表します。

DBMS製品のバージョンを返却します。

SQLCHAR *

SQLWCHAR *

59

SQL_DDL_INDEX

インデクスの作成および削除に対するサポートを示します。

次のビット列を返却します。

SQL_DI_CREATE_INDEX

SQL_DI_DROP_INDEX

SQLUINTEGER

60

SQL_DEFAULT_TXN_ISOLATION

ドライバまたはデータソースがサポートする，デフォルトのトランザクション隔離性水準を示します。

SQL_TXN_READ_COMMITTEDを返却します。

SQLUINTEGER

61

SQL_DESCRIBE_PARAMETER

次のどちらかの値を返却します。

Y

パラメタを記述できます。

N

パラメタを記述できません。

"Y"を返却します。

SQLCHAR *

SQLWCHAR *

62

SQL_DM_VER

ドライバマネージャのバージョンを示す文字列です。バージョンは##.##.####.####の形式で表します。この情報型はドライバマネージャが実装します。

ドライバマネージャが設定する値を返却します。

SQLCHAR *

SQLWCHAR *

63

SQL_DRIVER_HDBC

ドライバの接続ハンドルで，InfoTypeで調べることができます。この情報型はドライバマネージャが実装します。

ドライバマネージャが設定する値を返却します。

SQLUINTEGER

64

SQL_DRIVER_HDESC

ドライバマネージャのディスクリプタハンドルによって決まるドライバのディスクリプタハンドルで，アプリケーションが*InfoValuePtrに設定して渡す必要があります。この情報型はドライバマネージャが実装します。

ドライバマネージャが設定する値を返却します。

SQLUINTEGER

65

SQL_DRIVER_HENV

ドライバの環境ハンドルで，InfoTypeで調べることができます。この情報型はドライバマネージャが実装します。

ドライバマネージャが設定する値を返却します。

SQLUINTEGER

66

SQL_DRIVER_HLIB

ドライバDLLまたはそれに相当するものをロードしたときに，ロードライブラリからドライバマネージャに返されるhinstです。この情報型はドライバマネージャが実装します。

ドライバマネージャが設定する値を返却します。

SQLUINTEGER

67

SQL_DRIVER_HSTMT

ドライバマネージャのステートメントハンドルによって決まるドライバのステートメントハンドルで，アプリケーションが*InfoValuePtrに設定して渡す必要があります。この情報型は，ドライバマネージャが実装します。

ドライバマネージャが設定する値を返却します。

SQLUINTEGER

68

SQL_DRIVER_NAME

データソースにアクセスするために使用するドライバのファイル名を示す文字列です。

ドライバのファイル名を返却します。

SQLCHAR *

SQLWCHAR *

69

SQL_DRIVER_ODBC_VER

ドライバがサポートするODBCのバージョンを示す文字列です。バージョンは##.##の形式で表します。

ドライバがサポートするODBCのバージョンを返却します。

SQLCHAR *

SQLWCHAR *

70

SQL_DRIVER_VER

ドライバのバージョンを示す文字列です。通常，ドライバが値を返却します。最小のバージョンは，##.##.####の形式で表します。

ドライバのバージョンを返却します。

SQLCHAR *

SQLWCHAR *

71

SQL_DROP_ASSERTION

データソースがサポートするDROP ASSERTIONステートメントの句（SQL-92に定義されている）を示します。

0を返却します。

SQLUINTEGER

72

SQL_DROP_CHARACTER_SET

データソースがサポートするDROP CHARACTER SETステートメントの句（SQL-92に定義されている）を示します。

0を返却します。

SQLUINTEGER

73

SQL_DROP_COLLATION

データソースがサポートするDROP COLLATIONステートメントの句（SQL-92に定義されている）を示します。

0を返却します。

SQLUINTEGER

74

SQL_DROP_DOMAIN

データソースがサポートするDROP DOMAINステートメントの句（SQL-92に定義されている）を示します。

0を返却します。

SQLUINTEGER

75

SQL_DROP_SCHEMA

データソースがサポートするDROP SCHEMAステートメントの句（SQL-92に定義されている）を示します。

次のビット列を返却します。

SQL_DS_DROP_SCHEMA

SQL_DS_CASCADE

SQL_DS_RESTRICT

SQLUINTEGER

76

SQL_DROP_TABLE

データソースがサポートするDROP TABLEステートメントの句（SQL-92に定義されている）を示します。

次のビット列を返却します。

SQL_DT_DROP_TABLE

SQL_DT_CASCADE

SQL_DT_RESTRICT

SQLUINTEGER

77

SQL_DROP_TRANSLATION

データソースがサポートするDROP TRANSLATIONステートメントの句を示します。

0を返却します。

SQLUINTEGER

78

SQL_DROP_VIEW

データソースがサポートするDROP VIEWステートメントの句を示します。

SQL_DV_DROP_VIEWを返却します。

SQLUINTEGER

79

SQL_DYNAMIC_CURSOR_ATTRIBUTES1

ドライバがサポートしている動的カーソルの属性を示します。このビットマスクには，属性の最初のサブセットが格納されます。

0を返却します。

SQLUINTEGER

80

SQL_DYNAMIC_CURSOR_ATTRIBUTES2

ドライバがサポートしている動的カーソルの属性を示します。このビットマスクには，属性の2番目のサブセットが格納されます。

0を返却します。

SQLUINTEGER

81

SQL_EXPRESSIONS_IN_ORDERBY

次のどちらかの値を返却します。

Y

データソースはORDER BY一覧の式をサポートしています。

N

データソースはORDER BY一覧の式をサポートしていません。

"Y"を返却します。

SQLCHAR *

SQLWCHAR *

82

SQL_FILE_USAGE

単一層ドライバがデータソースのファイルを直接扱う方法を示します。

SQL_FILE_NOT_SUPPORTEDを返却します。

SQLUSMALLINT

83

SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1

ドライバがサポートしている，前方にしか進めないカーソルの属性を示します。

このビットマスクには，属性の最初のサブセットが格納されます。

0を返却します。

SQLUINTEGER

84

SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2

ドライバがサポートしている，前方にしか進めないカーソルの属性を示します。このビットマスクには，属性の2番目のサブセットが格納されます。

0を返却します。

SQLUINTEGER

85

SQL_GETDATA_EXTENSIONS

SQLGetDataの拡張機能を示します。

次の値を返却します。

SQL_GD_ANY_COLUMN

SQL_GD_ANY_ORDER

SQLUINTEGER

86

SQL_GROUP_BY

GROUP BY句の列と選択一覧にある集合関数以外の列の関係を示します。

SQL_GB_GROUP_BY_CONTAINS_SELECTを返却します。

SQLUSMALLINT

87

SQL_IDENTIFIER_CASE

SQLの識別子に関する情報を示します。

SQL_IC_UPPERを返却します。

SQLUSMALLINT

88

SQL_IDENTIFIER_QUOTE_CHAR

SQLステートメントの引用符付き識別子の開始および終端を示す記号として使用する文字列を示します。データソースが引用符付き識別子をサポートしていない場合，空白を返却します。

二重引用符（"）を返却します。

SQLCHAR *

SQLWCHAR *

89

SQL_INDEX_KEYWORDS

ドライバがサポートするCREATE INDEXステートメント中のキーワードを示します。

次のビット列を返却します。

SQL_IK_ASC

SQL_IK_DESC

SQLUINTEGER

90

SQL_INFO_SCHEMA_VIEWS

ドライバがサポートするINFORMATION_SCHEMAのビューを示します。

0を返却します。

SQLUINTEGER

91

SQL_INSERT_STATEMENT

INSERTステートメントのサポートを示します。

次のビット列を返却します。

SQL_IS_INSERT_LITERALS

SQL_IS_INSERT_SEARCHED

SQLUINTEGER

92

SQL_INTEGRITY

次のどちらかの値を返却します。

Y

データソースはIEFをサポートしています。

N

データソースはIEFをサポートしていません。

"N"を返却します。

SQLCHAR *

SQLWCHAR *

93

SQL_KEYSET_CURSOR_ATTRIBUTES1

ドライバがサポートしているキーセットカーソルの属性を示します。このビットマスクには，属性の最初のサブセットが格納されます。

0を返却します。

SQLUINTEGER

94

SQL_KEYSET_CURSOR_ATTRIBUTES2

ドライバがサポートしているキーセットカーソルの属性を示します。このビットマスクには，属性の2番目のサブセットが格納されます。

0を返却します。

SQLUINTEGER

95

SQL_KEYWORDS

データソース指定のすべてのキーワードをコンマで区切った一覧を含む文字列を示します。この一覧にはODBC固有のキーワードまたはデータソースとODBCの両方が使用するキーワードは含みません。この一覧はすべての予約キーワードを示します。

HADBの予約語からODBC固有のキーワードを除いたキーワードを返却します。

SQLCHAR *

SQLWCHAR *

96

SQL_LIKE_ESCAPE_CLAUSE

次のどちらかの値を返却します。

Y

次の条件をすべて満たします。

データソースがLIKE述語のパーセント記号（%）とアンダースコア（_）のエスケープ文字をサポートしています。

ドライバがLIKE述語のエスケープ文字を定義するためにODBC構文をサポートしています。

N

上記以外。

"Y"を返却します。

SQLCHAR *

SQLWCHAR *

97

SQL_MAX_ASYNC_CONCURRENT_STATEMENTS

指定の接続上でドライバがサポートする，非同期モードのアクティブな同時実行ステートメントの最大数を示します。特定の制限がない，または制限が不明な場合，0を返却します。

0を返却します。

SQLUINTEGER

98

SQL_MAX_BINARY_LITERAL_LEN

SQLステートメントのバイナリリテラルの最大値を示します。最大値がない，または長さが不明な場合，0を返却します。

64,000を返却します。

SQLUINTEGER

99

SQL_MAX_CATALOG_NAME_LEN

カタログ名の最大長を示します。最大長がない，または長さが不明な場合，0を返却します。

0を返却します。

SQLUSMALLINT

100

SQL_MAX_CHAR_LITERAL_LEN

SQLステートメントの文字リテラルの最大長を示します。最大長がない，または長さが不明な場合，0を返却します。

32,000を返却します。

SQLUINTEGER

101

SQL_MAX_COLUMN_NAME_LEN

データソースの列名の最大長を示します。最大長がない，または長さが不明な場合，0を返却します。

100を返却します。

SQLUSMALLINT

102

SQL_MAX_COLUMNS_IN_GROUP_BY

GROUP BY句に許されるグループ化列の最大数を示します。指定がない，または制限が不明な場合，0を返却します。

64を返却します。

SQLUSMALLINT

103

SQL_MAX_COLUMNS_IN_INDEX

インデクスに許される列の最大数を示します。指定がない，または制限が不明な場合，0を返却します。

16を返却します。

SQLUSMALLINT

104

SQL_MAX_COLUMNS_IN_ORDER_BY

ORDER BY句に許される列の最大数を示します。指定がない，または制限が不明な場合，0を返却します。

16を返却します。

SQLUSMALLINT

105

SQL_MAX_COLUMNS_IN_SELECT

選択一覧に許される列の最大数を示します。指定がない，または制限が不明な場合，0を返却します。

1,000を返却します。

SQLUSMALLINT

106

SQL_MAX_COLUMNS_IN_TABLE

テーブルに許される列の最大数を示します。指定がない，または制限が不明な場合，0を返却します。

1,000を返却します。

SQLUSMALLINT

107

SQL_MAX_CONCURRENT_ACTIVITIES

ドライバが接続に対してサポートするアクティブなステートメントの最大数を示します。制限が指定されていない，または不明な場合，0を返却します。

0を返却します。

SQLUSMALLINT

108

SQL_MAX_CURSOR_NAME_LEN

データソースのカーソル名に許される最大長を示します。最大長がない，または長さが不明な場合，0を返却します。

0を返却します。

SQLUSMALLINT

109

SQL_MAX_DRIVER_CONNECTIONS

ドライバが環境に対してサポートするアクティブな接続の最大数を示します。制限が指定されていない，または不明な場合，0を返却します。

0を返却します。

SQLUSMALLINT

110

SQL_MAX_IDENTIFIER_LEN

データソースがユーザ定義名に対してサポートする文字列の最大長を示します。

100を返却します。

SQLUSMALLINT

111

SQL_MAX_INDEX_SIZE

インデクスの結合フィールドに許される最大長（バイト長）を示します。指定がない，または制限が不明な場合，0を返却します。

4,036を返却します。

SQLUINTEGER

112

SQL_MAX_PROCEDURE_NAME_LEN

データソースのプロシジャ名の最大長を示します。最大長がない，または長さが不明な場合，0を返却します。

0を返却します。

SQLUSMALLINT

113

SQL_MAX_ROW_SIZE

テーブルの単一行に許される最大長を示します。指定がない，または制限が不明な場合，0を返却します。

0を返却します。

SQLUINTEGER

114

SQL_MAX_ROW_SIZE_INCLUDES_LONG

次のどちらかの値を返却します。

Y

SQL_MAX_ROW_SIZE情報型に対して返された行サイズの最大長が，行のすべてのSQL_LONGVARCHAR型の列の長さとSQL_LONGVARBINARY型の列の長さを含みます。

N

上記以外。

"N"を返却します。

SQLCHAR *

SQLWCHAR *

115

SQL_MAX_SCHEMA_NAME_LEN

データソースのスキーマ名の最大長を示します。最大長がない，または長さが不明な場合，0を返却します。

100を返却します。

SQLUSMALLINT

116

SQL_MAX_STATEMENT_LEN

SQLステートメントの最大長（文字数）を示します。最大長がない，または長さが不明な場合，0を返却します。

16,000,000を返却します。

SQLUINTEGER

117

SQL_MAX_TABLE_NAME_LEN

データソーステーブル名の最大長を示します。最大長がない，または長さが不明な場合，0を返却します。

100を返却します。

SQLUSMALLINT

118

SQL_MAX_TABLES_IN_SELECT

SELECTステートメントのFROM句に許されるテーブル数の最大値を示します。指定がない，または制限が不明な場合，0を返却します。

64を返却します。

SQLUSMALLINT

119

SQL_MAX_USER_NAME_LEN

データソースのユーザ名の最大長を示します。最大長がない，または長さが不明な場合，0を返却します。

100を返却します。

SQLUSMALLINT

120

SQL_MULT_RESULT_SETS

次のどちらかの値を返却します。

Y

データソースは複数の結果セットをサポートしています。

N

データソースは複数の結果セットをサポートしていません。

"N"を返却します。

SQLCHAR *

SQLWCHAR *

121

SQL_MULTIPLE_ACTIVE_TXN

次のどちらかの値を返却します。

Y

ドライバは複数のアクティブなトランザクションの同時実行をサポートしています。

N

ドライバは単一のアクティブなトランザクションの実行だけをサポートしています。

"Y"を返却します。

SQLCHAR *

SQLWCHAR *

122

SQL_NEED_LONG_DATA_LEN

次のどちらかの値を返却します。

Y

データソースはロングデータ値が送られる前に，そのデータ長が必要です。

N

データソースはロングデータ値が送られる前に，そのデータ長を必要としません。

"Y"を返却します。

SQLCHAR *

SQLWCHAR *

123

SQL_NON_NULLABLE_COLUMNS

データソースNOT NULLの列をサポートするかどうかを示します。

SQL_NNC_NON_NULLを返却します。

SQLUSMALLINT

124

SQL_NULL_COLLATION

NULLが結果セット中のどこにソートされるかを示します。

SQL_NC_HIGHを返却します。

SQLUSMALLINT

125

SQL_NUMERIC_FUNCTIONS

ドライバとデータソースがサポートしている数学関数を示します。

次のビット列を返却します。

SQL_FN_NUM_ABS

SQL_FN_NUM_ACOS

SQL_FN_NUM_ASIN

SQL_FN_NUM_ATAN

SQL_FN_NUM_ATAN2

SQL_FN_NUM_CEILING

SQL_FN_NUM_COS

SQL_FN_NUM_DEGREES

SQL_FN_NUM_EXP

SQL_FN_NUM_FLOOR

SQL_FN_NUM_LOG

SQL_FN_NUM_MOD

SQL_FN_NUM_PI

SQL_FN_NUM_POWER

SQL_FN_NUM_RADIANS

SQL_FN_NUM_RAND

SQL_FN_NUM_ROUND

SQL_FN_NUM_SIGN

SQL_FN_NUM_SIN

SQL_FN_NUM_SQRT

SQL_FN_NUM_TAN

SQL_FN_NUM_TRUNCATE

SQLUINTEGER

126

SQL_ODBC_INTERFACE_CONFORMANCE

ドライバが準拠するODBC 3.xのインタフェースのレベルを示します。

SQL_OIC_COREを返却します。

SQLUINTEGER

127

SQL_ODBC_VER

ドライバマネージャが準拠するODBCのバージョン情報を含む文字列です。バージョンは##.##.0000の形式で表します。この情報型はドライバマネージャが実装します。

ドライバマネージャが設定する値を返却します。

SQLCHAR *

SQLWCHAR *

128

SQL_OJ_CAPABILITIES

ドライバおよびデータソースがサポートする外結合の種類を示します。

次のビット列を返却します。

SQL_OJ_ALL_COMPARISON_OPS

SQL_OJ_FULL

SQL_OJ_INNER

SQL_OJ_LEFT

SQL_OJ_NESTED

SQL_OJ_RIGHT

SQLUINTEGER

129

SQL_ORDER_BY_COLUMNS_IN_SELECT

次のどちらかの値を返却します。

Y

ORDER BY句の列が選択一覧にあります。

N

ORDER BY句の列は選択一覧にありません。

"N"を返却します。

SQLCHAR *

SQLWCHAR *

130

SQL_PARAM_ARRAY_ROW_COUNTS

パラメタを使った実行で行カウントを利用できるかどうかに関するドライバのプロパティを示します。

0を返却します。

SQLUINTEGER

131

SQL_PARAM_ARRAY_SELECTS

パラメタ付きの実行結果セットを利用できるかどうかに関するドライバのプロパティを示します。

SQL_PAS_NO_SELECTを返却します。

SQLUINTEGER

132

SQL_PROCEDURE_TERM

プロシジャに対するデータソースのベンダーの名前を含む文字列を示します。

空の文字列を返却します。

SQLCHAR *

SQLWCHAR *

133

SQL_PROCEDURES

次のどちらかの値を返却します。

Y

次の条件をすべて満たします。

・データソースはプロシジャをサポートしています。

・ドライバはODBCプロシジャ起動構文をサポートしています。

N

上記以外。

"N"を返却します。

SQLCHAR *

SQLWCHAR *

134

SQL_QUOTED_IDENTIFIER_CASE

SQLステートメントの引用符付き識別子に関する情報を示します。

SQL_IC_SENSITIVEを返却します。

SQLUSMALLINT

135

SQL_ROW_UPDATES

次のどちらかの値を返却します。

Y

キーセットカーソルまたは複合カーソルがフェッチされたすべての行に対して行のバージョンまたは値を保持し，その行が最後にフェッチされてからAPが行った行の更新を検出できます。

N

上記以外。

"N"を返却します。

SQLCHAR *

SQLWCHAR *

136

SQL_SCHEMA_TERM

スキーマに対するデータソースベンダーの名前を含む文字列を示します。

"schema"を返却します。

SQLCHAR *

SQLWCHAR *

137

SQL_SCHEMA_USAGE

スキーマを使用できるステートメントを示します。

次のビット列を返却します。

SQL_SU_DML_STATEMENTS

SQL_SU_INDEX_DEFINITION

SQL_SU_TABLE_DEFINITION

SQL_SU_PRIVILEGE_DEFINITION

SQLUINTEGER

138

SQL_SCROLL_OPTIONS

スクロール可能なカーソルに対してサポートされているスクロールオプションを示します。

SQL_SO_FORWARD_ONLYを返却します。

SQLUINTEGER

139

SQL_SEARCH_PATTERN_ESCAPE

パターン検索のメタ文字であるアンダースコア（_）とパーセント記号（%）を検索パターンの有効な文字として使用するエスケープ文字を，ドライバがサポートすることを示す文字列を示します。

パターン検索を行う際に，通常はメタ文字であるアンダースコア（_）とパーセント記号（%）を有効な検索文字にするためのエスケープ文字を示します。

このエスケープ文字は，検索文字列をサポートするカタログ関数の引数にだけ適用されます。空の文字列の場合，ドライバはアンダースコア（_）とパーセント記号（%）を検索パターンの文字列として扱えません。

"¥"を返却します。

SQLCHAR *

SQLWCHAR *

140

SQL_SERVER_NAME

実際のデータソース指定のサーバ名を含む文字列です。

"Hitachi Advanced Data Binder"を返却します。

SQLCHAR *

SQLWCHAR *

141

SQL_SPECIAL_CHARACTERS

データソースでテーブル，列，インデクス名などのように識別子名として使用できるすべての特殊文字を含む文字列を返却します。

空の文字列を返却します。

SQLCHAR *

SQLWCHAR *

142

SQL_SQL_CONFORMANCE

ドライバがサポートするSQL-92のレベルを示します。

SQL_SC_SQL92_ENTRYを返却します。

SQLUINTEGER

143

SQL_SQL92_DATETIME_FUNCTIONS

ドライバおよび関連するデータソースがサポートする日付時刻スカラ関数を示します。

次のビット列を返却します。

SQL_SDF_CURRENT_DATE

SQL_SDF_CURRENT_TIME

SQL_SDF_CURRENT_TIMESTAMP

SQLUINTEGER

144

SQL_SQL92_FOREIGN_KEY_DELETE_RULE

DELETEステートメントの外部キーに対してサポートされている規則を示します。

0を返却します。

SQLUINTEGER

145

SQL_SQL92_FOREIGN_KEY_UPDATE_RULE

UPDATEステートメントの外部キーに対してサポートされている規則を示します。

0を返却します。

SQLUINTEGER

146

SQL_SQL92_GRANT

GRANTステートメントに対してサポートされている句を示します。

次のビット列を返却します。

SQL_SG_DELETE_TABLE

SQL_SG_INSERT_TABLE

SQL_SG_REFERENCES_TABLE

SQL_SG_SELECT_TABLE

SQL_SG_UPDATE_TABLE

SQLUINTEGER

147

SQL_SQL92_NUMERIC_VALUE_FUNCTIONS

ドライバおよび関連するデータソースがサポートする数値スカラ関数を示します。

次のビット列を返却します。

SQL_SNVF_EXTRACT

SQLUINTEGER

148

SQL_SQL92_PREDICATES

SELECTステートメントに対してサポートされている述語を示します。

次のビット列を返却します。

SQL_SP_BETWEEN

SQL_SP_COMPARISON

SQL_SP_EXISTS

SQL_SP_IN

SQL_SP_ISNOTNULL

SQL_SP_ISNULL

SQL_SP_LIKE

SQL_SP_QUANTIFIED_COMPARISON

SQLUINTEGER

149

SQL_SQL92_RELATIONAL_JOIN_OPERATORS

SELECTステートメントに対してサポートされている関係結合演算子を示します。

次のビット列を返却します。

SQL_SRJO_CROSS_JOIN

SQL_SRJO_FULL_OUTER_JOIN

SQL_SRJO_INNER_JOIN

SQL_SRJO_LEFT_OUTER_JOIN

SQL_SRJO_RIGHT_OUTER_JOIN

SQLUINTEGER

150

SQL_SQL92_REVOKE

データソースがサポートするREVOKEステートメントに対してサポートされている句を示します。

次のビット列を返却します。

SQL_SR_CASCADE

SQL_SR_DELETE_TABLE

SQL_SR_INSERT_TABLE

SQL_SR_REFERENCES_TABLE

SQL_SR_RESTRICT

SQL_SR_SELECT_TABLE

SQL_SR_UPDATE_TABLE

SQLUINTEGER

151

SQL_SQL92_ROW_VALUE_CONSTRUCTOR

SELECTステートメントに対してサポートされている行の値を組み立てる式を示します。

0を返却します。

SQLUINTEGER

152

SQL_SQL92_STRING_FUNCTIONS

ドライバおよび関連するデータソースがサポートする文字列スカラ関数を示します。

次のビット列を返却します。

SQL_SSF_CONVERT

SQL_SSF_LOWER

SQL_SSF_SUBSTRING

SQL_SSF_TRIM_BOTH

SQL_SSF_TRIM_LEADING

SQL_SSF_TRIM_TRAILING

SQL_SSF_UPPER

SQLUINTEGER

153

SQL_SQL92_VALUE_EXPRESSIONS

サポートされている値の式を示します。

次のビット列を返却します。

SQL_SVE_CASE

SQL_SVE_CAST

SQL_SVE_COALESCE

SQL_SVE_NULLIF

SQLUINTEGER

154

SQL_STANDARD_CLI_CONFORMANCE

ドライバが準拠するCLIの標準を示します。

SQL_SCC_ISO92_CLIを返却します。

SQLUINTEGER

155

SQL_STATIC_CURSOR_ATTRIBUTES1

ドライバがサポートする静的カーソルの属性を示します。このビットマスクには，属性の最初のサブセットが格納されます。

0を返却します。

SQLUINTEGER

156

SQL_STATIC_CURSOR_ATTRIBUTES2

ドライバがサポートする静的カーソルの属性を表します。このビットマスクには，属性の2番目のサブセットが格納されます。

0を返却します。

SQLUINTEGER

157

SQL_STRING_FUNCTIONS

データソースがサポートしている文字列スカラ関数を示します。

次のビット列を返却します。

SQL_FN_STR_ASCII

SQL_FN_STR_CONCAT

SQL_FN_STR_LCASE

SQL_FN_STR_LEFT

SQL_FN_STR_LENGTH

SQL_FN_STR_LTRIM

SQL_FN_STR_REPLACE

SQL_FN_STR_RIGHT

SQL_FN_STR_RTRIM

SQL_FN_STR_SUBSTRING

SQL_FN_STR_UCASE

SQLUINTEGER

158

SQL_SUBQUERIES

副問合せをサポートする述語を示します。

次のビット列を返却します。

SQL_SQ_COMPARISON

SQL_SQ_CORRELATED_SUBQUERIES

SQL_SQ_EXISTS

SQL_SQ_IN

SQL_SQ_QUANTIFIED

SQLUINTEGER

159

SQL_SYSTEM_FUNCTIONS

ドライバと関連するデータソースがサポートするシステムスカラ関数を示します。

0を返却します。

SQLUINTEGER

160

SQL_TABLE_TERM

テーブルに対するデータソースのベンダー名を含む文字列を返却します。

"table"を返却します。

SQLCHAR *

SQLWCHAR *

161

SQL_TIMEDATE_ADD_INTERVALS

ドライバと関連するデータソースがTIMESTAMPADDスカラ関数に対してサポートするタイムスタンプの間隔を示します。

次のビット列を返却します。

SQL_FN_TSI_FRAC_SECOND

SQL_FN_TSI_SECOND

SQL_FN_TSI_MINUTE

SQL_FN_TSI_HOUR

SQL_FN_TSI_DAY

SQL_FN_TSI_WEEK

SQL_FN_TSI_MONTH

SQL_FN_TSI_QUARTER

SQL_FN_TSI_YEAR

SQLUINTEGER

162

SQL_TIMEDATE_DIFF_INTERVALS

ドライバと関連するデータソースが，TIMESTAMPDIFFスカラ関数に対してサポートするタイムスタンプの間隔を示します。

次のビット列を返却します。

SQL_FN_TSI_FRAC_SECOND

SQL_FN_TSI_SECOND

SQL_FN_TSI_MINUTE

SQL_FN_TSI_HOUR

SQL_FN_TSI_DAY

SQL_FN_TSI_WEEK

SQL_FN_TSI_MONTH

SQL_FN_TSI_QUARTER

SQL_FN_TSI_YEAR

SQLUINTEGER

163

SQL_TIMEDATE_FUNCTIONS

ドライバと関連するデータソースがサポートする日付時刻スカラ関数を示します。

次のビット列を返却します。

SQL_FN_TD_CURRENT_DATE

SQL_FN_TD_CURRENT_TIME

SQL_FN_TD_CURRENT_TIMESTAMP

SQL_FN_TD_DAYOFWEEK

SQL_FN_TD_DAYOFYEAR

SQL_FN_TD_EXTRACT

SQL_FN_TD_TIMESTAMPADD

SQL_FN_TD_TIMESTAMPDIFF

SQLUINTEGER

164

SQL_TXN_CAPABLE

ドライバまたはデータソースがサポートしているトランザクションを示します。

SQL_TC_DDL_COMMITを返却します。

SQLUSMALLINT

165

SQL_TXN_ISOLATION_OPTION

ドライバまたはデータソースから得られるトランザクション隔離性水準を示します。

次のビット列を返却します。

SQL_TXN_READ_COMMITTED

SQL_TXN_REPEATABLE_READ

SQLUINTEGER

166

SQL_UNION

UNION句に対するサポートを示します。

次のビット列を返却します。

SQL_U_UNION

SQL_U_UNION_ALL

SQLUINTEGER

167

SQL_USER_NAME

特定のデータベースで使用される名前を含む文字列を示します。

ログイン名と異なる場合があります。

接続に使用したユーザ名を返却します。

SQLCHAR *

SQLWCHAR *

168

SQL_XOPEN_CLI_YEAR

ODBCドライバマネージャのバージョンが完全に準拠するX/Open仕様の刊行年を示す文字列を示します。

ドライバマネージャが設定する値を返却します。

SQLCHAR *

SQLWCHAR *

169

SQL_ODBC_API_CONFORMANCE

ODBC準拠のレベルを表すSQLSMALLINT値を示します。

SQL_OAC_LEVEL1を返却します。

SQLUSMALLINT

170

SQL_FETCH_DIRECTION

サポートするフェッチ方向のオプションを示します。

SQL_FD_FETCH_NEXTを返却します。

SQLUINTEGER

171

SQL_LOCK_TYPES

SQLSetPosの引数fLockに指定できるロックタイプを示します。

0を返却します。

SQLUINTEGER

172

SQL_ODBC_SAG_CLI_CONFORMANCE

SAG指定の関数の準拠LVを示します。

SQL_OSCC_COMPLIANTを返却します。

SQLUSMALLINT

173

SQL_ODBC_SQL_CONFORMANCE

ドライバがサポートするSQL文法を示します。

SQL_OSC_COREを返却します。

SQLUSMALLINT

174

SQL_OUTER_JOINS

データソースの外結合のサポート状況を示します。

"F"を返却します。

SQLCHAR *

SQLWCHAR *

175

SQL_POS_OPERATIONS

SQLSetPosがサポートする演算を示します。

0を返却します。

SQLUINTEGER

176

SQL_POSITIONED_STATEMENTS

データソースがサポートする位置づけSQLステートメントを示します。

0を返却します。

SQLUINTEGER

177

SQL_SCROLL_CONCURRENCY

スクロール可能なカーソルをサポートする同時実行制御オプションを示します。

SQL_SCCO_READ_ONLYを返却します。

SQLUINTEGER

178

SQL_STATIC_SENSITIVITY

次のことによって，アプリケーションが静的またはキーセット駆動カーソルに起こした変化を，そのアプリケーションで検出できるかを示します。

SQLSetPos関数

位置づけ更新または削除ステートメント

0を返却します。

SQLUINTEGER

16.14　SQLSetConnectAttr，SQLSetConnectAttrW，SQLGetConnectAttrおよびSQLGetConnectAttrWに指定できる属性

SQLSetConnectAttr，SQLSetConnectAttrW，SQLGetConnectAttrおよびSQLGetConnectAttrWに指定できる属性を次の表に示します。

表16‒21　SQLSetConnectAttr，SQLSetConnectAttrW，SQLGetConnectAttrおよびSQLGetConnectAttrWに指定できる属性

項番

属性（Attribute）

属性の説明（規約）

サポートの状況

データ型

1

SQL_ATTR_ACCESS_MODE

更新を行うSQLステートメントのサポート要否を指定します。

SQL_MODE_READ_ONLY

更新を行うSQLステートメントをサポートしていません。

SQL_MODE_READ_WRITE

更新を行うSQLステートメントをサポートしています。

次の値をサポートします。

SQL_MODE_READ_ONLY

SQL_MODE_READ_WRITE

SQLUINTEGER

2

SQL_ATTR_ANSI_APP

Unicode関数およびANSI関数の切り替えを指定します。

SQL_AA_TRUE

ANSI関数を使用します。

SQL_AA_FALSE

Unicode関数を使用します。

次の値をサポートします。

SQL_AA_TRUE

SQL_AA_FALSE

この属性は，ドライバマネージャで使用されます。アプリケーションでは使用できません。

また，SQLGetConnectAttrおよびSQLGetConnectAttrWでは未サポートエラーを返します。

SQLUINTEGER

3

SQL_ATTR_ASYNC_ENABLE

指定した接続のステートメントに対して呼び出された関数を非同期で実行するかどうかを指定します。

SQL_ASYNC_ENABLE_OFF

非同期実行されません。

次の値をサポートします。

SQL_ASYNC_ENABLE_OFF

SQLUINTEGER

4

SQL_ATTR_AUTO_IPD

SQLPrepareの呼び出し後にIPDの自動設定をサポートするかどうかを指定します。

未サポート属性です。

−

5

SQL_ATTR_AUTOCOMMIT

自動コミットモードを使用するかどうかを指定します。

SQL_AUTOCOMMIT_OFF

ドライバは，手動コミットモードを使用します。アプリケーションはSQLEndTranでトランザクションを明示的にコミットまたはロールバックする必要があります。

SQL_AUTOCOMMIT_ON

ドライバは，自動コミットモードを使用します。各ステートメントは実行後直ちにコミットされます。

次の値をサポートします。

SQL_AUTOCOMMIT_OFF

SQL_AUTOCOMMIT_ON

SQLUINTEGER

6

SQL_ATTR_CONNECTION_DEAD

接続状態を示す値を返却します。

この属性は，SQLGetConnectAttrおよびSQLGetConnectAttrWで設定できます。SQLSetConnectAttrおよびSQLSetConnectAttrWでは設定できません。

未サポート属性です。

SQLSetConnectAttrおよびSQLSetConnectAttrWでは無効な属性です。

SQLGetConnectAttrおよびSQLGetConnectAttrWでは未サポートエラーを返します。

SQLUINTEGER

7

SQL_ATTR_CONNECTION_TIMEOUT

アプリケーションが接続要求に対する応答を待つ時間（秒数）を指定します。

0

ODBCドライバでは，タイムアウトを検知しません。クライアントライブラリのタイムアウト制御に依存します。

次の値をサポートします。

0

SQLUINTEGER

8

SQL_ATTR_CURRENT_CATALOG

データソースが使用するカタログ名を指定します。

未サポート属性です。

−

9

SQL_ATTR_ENLIST_IN_DTC

Microsoftコンポーネントサービスが分散トランザクションにODBCドライバを使用するかどうかを指定します。

未サポート属性です。

−

10

SQL_ATTR_LOGIN_TIMEOUT

アプリケーションがログイン要求に対する応答を待つ時間（秒数）を指定します。

0

ODBCドライバでは，タイムアウトを検知しません。クライアントライブラリのタイムアウト制御に依存します。

次の値をサポートします。

0

0以外を設定した場合は，HADB ODBCドライバが0に書き換えて，SQL_SUCCESS_WITH_INFOを返却します。

SQLUINTEGER

11

SQL_ATTR_METADATA_ID

カタログ関数で文字列引数を扱う方法を指定します。

SQL_FALSE

カタログ関数の文字列引数は識別子と見なされません。大文字と小文字が区別されます。引数によって，文字列の検索パターンを含む場合と，含まない場合があります。

次の値をサポートします。

SQL_FALSE

ただし，SQLSetConnectAttrのときには，未サポートエラーになります。

−

12

SQL_ATTR_ODBC_CURSORS

ドライバマネージャによるODBCカーソルライブラリの使用方法を指定します。

SQL_CUR_USE_IF_NEEDED

必要に応じて，ドライバマネージャはODBCカーソルライブラリを使用します。

SQL_CUR_USE_ODBC

ドライバマネージャはODBCカーソルライブラリを使用します。

次の値をサポートします。

SQL_CUR_USE_IF_NEEDED

SQL_CUR_USE_ODBC

SQLINTEGER

13

SQL_ATTR_PACKET_SIZE

ネットワークパケットサイズ（バイト長）を指定します。

未サポート属性です。

−

14

SQL_ATTR_QUIET_MODE

32ビットのウィンドウハンドルを指定します。

未サポート属性です。

−

15

SQL_ATTR_TRACE

トレースの実行をドライバマネージャへ知らせます。

SQL_OPT_TRACE_OFF

トレースが無効です。

次の値をサポートします。

SQL_OPT_TRACE_OFF

SQLUINTEGER

16

SQL_ATTR_TRACEFILE

トレースファイル名を指定します。

未サポート属性です。

−

17

SQL_ATTR_TRANSLATE_LIB

ライブラリ名を指定します。

未サポート属性です。

−

18

SQL_ATTR_TRANSLATE_OPTION

トランスレータDLLに渡される32ビットのフラグ値を指定します。

未サポート属性です。

−

19

SQL_ATTR_TXN_ISOLATION

現在の接続に対するトランザクション隔離性水準を指定します。

この関数を呼び出す前にSQLEndTranを呼び出して，接続上にオープンされているすべてのトランザクションをコミットまたはロールバックしておく必要があります。

SQL_TXN_READ_COMMITTED

トランザクション隔離性水準をREAD_COMMITTEDに設定します。

SQL_TXN_REPEATABLE_READ

トランザクション隔離性水準をREPEATABLE_READに設定します。

次の値をサポートします。

SQL_TXN_READ_COMMITTED

SQL_TXN_REPEATABLE_READ

SQLUINTEGER

20

SQL_ATTR_HADB_ORDER_MODE

ODBC規約にはないHADB独自の属性です。

現在の接続に対する，ORDER BY句を指定したSELECT文の文字データの並び替え順序を設定します。

SQL_HADB_ORDER_MODE_BYTE

文字データをバイトコード順に並び替えます。

SQL_HADB_ORDER_MODE_ISO

文字データをソートコード順（ISO/IEC14651:2011準拠）に並び替えます。

次の値をサポートします。

SQL_HADB_ORDER_MODE_BYTE

SQL_HADB_ORDER_MODE_ISO

SQLUINTEGER

（凡例）−：該当しません。

16.15　SQLSetEnvAttrおよびSQLGetEnvAttrに指定できる属性

SQLSetEnvAttrおよびSQLGetEnvAttrに指定できる属性を次の表に示します。

表16‒22　SQLSetEnvAttrおよびSQLGetEnvAttrに指定できる属性

項番

属性（Attribute）

属性の説明（規約）

サポートの状況

データ型

1

SQL_ATTR_CONNECTION_POOLING

環境レベルで接続プールの設定を指定します。

未サポート属性です。

−

2

SQL_ATTR_CP_MATCH

接続プールから接続を選択する方法を指定します。

未サポート属性です。

−

3

SQL_ATTR_ODBC_VERSION

ドライバが準拠するODBCのバージョンを指定します。

SQL_OV_ODBC3

ドライバマネージャおよびドライバはODBC3.0として次のように動作します。

ドライバは，日付，時刻，およびタイムスタンプに対しODBC3.0のコードを返し，ODBC3.0のコードを前提とします。

SQLGetDiagField，またはSQLGetDiagRecが呼び出された場合，ドライバはODBC3.0のSQLSTATEコードを返します。

SQL_OV_ODBC2

ドライバマネージャおよびドライバはODBC2.xとして次のように動作します。

ドライバは，日付，時刻，およびタイムスタンプに対してODBC2.xのコードを返し，ODBC2.xのコードを前提とします。

SQLGetDiagField，またはSQLGetDiagRecが呼び出された場合，ドライバはODBC2.xのSQLSTATEコードを返します。

アプリケーションは，SQLHENV型の引数を指定する関数を呼び出す前に，この環境属性を設定する必要があります。

次の値をサポートします。

SQL_OV_ODBC3

SQL_OV_ODBC2

SQLUINTEGER

4

SQL_ATTR_OUTPUT_NTS

ドライバが文字列データを返却する方法を指定します。

SQL_TRUE

ドライバは，NULL終端文字データを返却します。

次の値をサポートします。

SQL_TRUE

SQLUINTEGER

（凡例）−：該当しません。

16.16　SQLSetStmtAttr，SQLSetStmtAttrW，SQLGetStmtAttrおよびSQLGetStmtAttrWに指定できる属性

SQLSetStmtAttr，SQLSetStmtAttrW，SQLGetStmtAttrおよびSQLGetStmtAttrWに指定できる属性を次の表に示します。

表16‒23　SQLSetStmtAttr，SQLSetStmtAttrW，SQLGetStmtAttrおよびSQLGetStmtAttrWに指定できる属性

項番

属性（Attribute）

属性の説明（規約）

サポートの状況

データ型

1

SQL_ATTR_APP_PARAM_DESC

次にSQLExecute，SQLExecDirectまたはSQLExecDirectWを行うときに使用できるAPDのハンドルを指定します。

次のどれかを指定します。

明示的に割り当てられたAPD

SQL_NULL_HDESC

自動的に割り当てられたAPDになります。

自動的に割り当てられたAPD

次の値をサポートします。

明示的に割り当てられたAPD

SQL_NULL_HDESC

自動的に割り当てられたAPD

SQLHDESC

2

SQL_ATTR_APP_ROW_DESC

次にフェッチを行うときに使用できるARDのハンドルを指定します。

次のどれかを指定します。

明示的に割り当てられたARD

SQL_NULL_HDESC

自動的に割り当てられたARDになります。

自動的に割り当てられたARD

次の値をサポートします。

明示的に割り当てられたARD

SQL_NULL_HDESC

自動的に割り当てられたARD

SQLHDESC

3

SQL_ATTR_ASYNC_ENABLE

この関数のStatementHandleに指定されたステートメントハンドルを引数として呼び出す関数を非同期に実行するかどうかを指定します。

SQL_ASYNC_ENABLE_OFF

非同期実行しません。

次の値をサポートします。

SQL_ASYNC_ENABLE_OFF

SQLULEN

4

SQL_ATTR_CONCURRENCY

カーソルの同時実行に関する指定をします。

SQL_CONCUR_READ_ONLY

カーソルは読み出しだけが実行できます。更新はできません。

次の値をサポートします。

SQL_CONCUR_READ_ONLY

SQL_CONCUR_READ_ONLY以外を設定した場合，HADB ODBCドライバがSQL_CONCUR_READ_ONLYに書き換えて，SQL_SUCCESS_WITH_INFOを返却します。

SQLULEN

5

SQL_ATTR_CURSOR_SCROLLABLE

アプリケーションが要求するサポートのレベルを指定します。

SQL_NONSCROLLABLE

ステートメントハンドルに対してスクロール可能なカーソルは要求されません。

次の値をサポートします。

SQL_NONSCROLLABLE

SQL_NONSCROLLABLE以外を設定した場合，HADB ODBCドライバがSQL_NONSCROLLABLEに書き換えて，SQL_SUCCESS_WITH_INFOを返却します。

SQLULEN

6

SQL_ATTR_CURSOR_SENSITIVITY

ステートメントハンドル上のカーソルが，別のカーソルが結果セットに対して行った変更を検出するかどうかを指定します。

SQL_UNSPECIFIED

カーソルの種類とカーソルが，ステートメントハンドル上で別のカーソルが結果セットに対して行った変更を検出するかどうかを指定しません。

次の値をサポートします。

SQL_UNSPECIFIED

SQL_UNSPECIFIED以外を設定した場合，HADB ODBCドライバがSQL_UNSPECIFIEDに書き換えて，SQL_SUCCESS_WITH_INFOを返却します。

SQLULEN

7

SQL_ATTR_CURSOR_TYPE

カーソルの種類を指定します。

SQL_CURSOR_FORWARD_ONLY

カーソルは前方にだけスクロールします。

次の値をサポートします。

SQL_CURSOR_FORWARD_ONLY

SQL_CURSOR_FORWARD_ONLY以外を設定した場合，HADB ODBCドライバがSQL_CURSOR_FORWARD_ONLYに書き換えて，SQL_SUCCESS_WITH_INFOを返却します。

SQLULEN

8

SQL_ATTR_ENABLE_AUTO_IPD

IPDの値の自動設定を実行するかどうかを指定します。

未サポート属性です。

−

9

SQL_ATTR_FETCH_BOOKMARK_PTR

バイナリのブックマーク値のポインタを指定します。

未サポート属性です。

−

10

SQL_ATTR_IMP_PARAM_DESC

ステートメントハンドルを最初に割り当てたときに割り当てられるIPDのハンドルを指定します。

次の値をサポートします。

自動的に割り当てられたIPD

SQLHDESC

11

SQL_ATTR_IMP_ROW_DESC

ステートメントハンドルを最初に割り当てたときに割り当てられるIRDのハンドルを指定します。

次の値をサポートします。

自動的に割り当てられたIRD

SQLHDESC

12

SQL_ATTR_KEYSET_SIZE

キーセットカーソルに対するキーセットの行数を指定します。

未サポート属性です。

−

13

SQL_ATTR_MAX_LENGTH

データソース間（サーバ・ホスト間）通信での，文字列またはバイナリ列の最大データ長を指定します。

0

データソースは有効なデータをすべて返します。

次の値をサポートします。

0

SQLULEN

14

SQL_ATTR_MAX_ROWS

データソース間（サーバ・ホスト間）通信での，SELECTステートメントに対して返される行の最大数を指定します。

0

データソースはすべての行を返します。

次の値をサポートします。

0

SQLULEN

15

SQL_ATTR_METADATA_ID

カタログ関数の文字列引数を扱う方法を指定します。

SQL_FALSE

大文字と小文字は区別され，カタログ関数の文字列引数は識別子と見なされません。

次の値をサポートします。

SQL_FALSE

SQLULEN

16

SQL_ATTR_NOSCAN

ドライバがエスケープシーケンスに対して構文解析を行い，DBMS固有の文法に変換されるかどうかを指定します。

SQL_NOSCAN_OFF

ドライバは，エスケープシーケンスに対して，DBMS固有の文法に変換します。

SQL_NOSCAN_ON

ドライバは，エスケープシーケンスに対して，DBMS固有の文法に変換しません。

次の値をサポートします。

SQL_NOSCAN_OFF

SQL_NOSCAN_ON

SQLULEN

17

SQL_ATTR_PARAM_BIND_OFFSET_PTR

動的パラメタのバインド時に使用されるポインタに加算するオフセットのポインタを指定します。

NULL

加算しません。

次の値をサポートします。

NULL

SQLULEN *

18

SQL_ATTR_PARAM_BIND_TYPE

動的パラメタに使用するバインドの方向を指定します。

SQL_PARAM_BIND_BY_COLUMN

列方向バインドを指定します。

次の値をサポートします。

SQL_PARAM_BIND_BY_COLUMN

SQLULEN

19

SQL_ATTR_PARAM_OPERATION_PTR

SQLステートメントの実行中にパラメタを無視するために使用する配列を指定します。

NULL

ドライバはパラメタのステータス値を返しません。

次の値をサポートします。

NULL

SQLUSMALLINT *

20

SQL_ATTR_PARAM_STATUS_PTR

SQLExecute，SQLExecDirectまたはSQLExecDirectWの呼び出し後，パラメタ値の各行に対してステータス情報を格納する配列を指定します。

NULL

SQLUSMALLINTのポインタ

ドライバはパラメタのステータス値を返しません。

次の値をサポートします。

NULL

SQLUSMALLINTのポインタ（NULL以外）

SQLUSMALLINT *

21

SQL_ATTR_PARAMS_PROCESSED_PTR

ドライバが，処理済みのパラメタセット数（エラーセットを含む）を返す変数のアドレスを指定します。

NULL

SQLULENのポインタ

パラメタセットの数は返されません。

次の値をサポートします。

NULL

SQLULENのポインタ（NULL以外）

SQLULEN *

22

SQL_ATTR_PARAMSET_SIZE

各パラメタセットの値の個数を指定する属性です。

次の値をサポートします。

1

1以外を設定した場合は，HADB ODBCドライバが1に書き換えて，SQL_SUCCESS_WITH_INFOを返却します。

SQLULEN

23

SQL_ATTR_QUERY_TIMEOUT

アプリケーションが，SQLステートメントが実行されるまで待つ時間（秒数）を指定します。

未サポート属性です。

−

24

SQL_ATTR_RETRIEVE_DATA

SQLFetchが，カーソルを指定の場所に位置づけたあとにデータを取得するかどうかを指定します。

SQL_RD_ON

SQLFetchは，カーソルを指定の場所に位置づけたあとにデータを取得します。

次の値をサポートします。

SQL_RD_ON

SQLULEN

25

SQL_ATTR_ROW_ARRAY_SIZE

SQLFetchまたはSQLFetchScrollが返す行数を指定します。

次の値をサポートします。

1

SQLULEN

26

SQL_ATTR_ROW_BIND_OFFSET_PTR

列データのバインドを変更するために，ポインタに加算するオフセットのポインタを指定します。

NULL

加算しません。

次の値をサポートします。

NULL

SQLULEN *

27

SQL_ATTR_ROW_BIND_TYPE

関連づけられたステートメントに対してSQLFetchまたはSQLFetchScrollが呼び出されたときに使用されるバインドの方向を指定します。

SQL_BIND_BY_COLUMN

列方向バインドを指定します。

次の値をサポートします。

SQL_BIND_BY_COLUMN

SQLULEN

28

SQL_ATTR_ROW_NUMBER

結果セットの現在の行番号を指定します。

未サポート属性です。

−

29

SQL_ATTR_ROW_OPERATION_PTR

SQLSetPosで一括処理中に行を無視するために使用する配列を指定します。

NULL

ドライバは行を無視しません。

次の値をサポートします。

NULL

SQLUSMALLINT *

30

SQL_ATTR_ROW_STATUS_PTR

SQLFetchまたはSQLFetchScrollを呼び出したあと，行のステータス値を格納する配列のポインタを指定します。

NULL

ドライバは行のステータス値を返しません。

次の値をサポートします。

NULL

SQLUSMALLINTのポインタ(NULL以外)

SQLUSMALLINT *

31

SQL_ATTR_ROWS_FETCHED_PTR

SQLFetchまたはSQLFetchScrollを呼び出したあと，フェッチされた行数を格納するバッファのポインタを指定します。

NULL

ドライバはフェッチされた行数を返しません。

次の値をサポートします。

NULL

SQLULENのポインタ(NULL以外)

SQLULEN *

32

SQL_ATTR_SIMULATE_CURSOR

位置づけ更新ステートメントと位置づけ削除ステートメントをシミュレートするドライバが，このステートメントで単一の行だけを変更するかどうかを指定します。

未サポート属性です。

−

33

SQL_ATTR_USE_BOOKMARKS

アプリケーションがカーソルでブックマークを使用するかどうかを指定します。

未サポート属性です。

−

（凡例）−：該当しません。

16.17　SQLGetDescField，SQLGetDescFieldW，SQLSetDescFieldおよびSQLSetDescFieldWに指定できる属性

SQLGetDescField，SQLGetDescFieldW，SQLSetDescFieldおよびSQLSetDescFieldWに指定できる属性を次の表に示します。

表16‒24　ディスクリプタのヘッダフィールドの値

項番

属性(Attribute)

属性の説明(規約)

サポートの状況

データ型

1

SQL_DESC_ALLOC_TYPE

そのディスクリプタが自動的に割り当てられたものか，明示的に割り当てられたものかを示します。

SQL_DESC_ALLOC_AUTO

ドライバが自動的に割り当てたディスクリプタです。

SQL_DESC_ALLOC_USER

アプリケーションが明示的に割り当てたディスクリプタです。

次の値をサポートします。

SQL_DESC_ALLOC_AUTO

SQL_DESC_ALLOC_USER

SQLSMALLINT

2

SQL_DESC_ARRAY_SIZE

ARD

行セットの行数（SQLFetchで返される行数）です。

APD

各パラメタの値の個数です。

次の値をサポートします。

1

SQLULEN

3

SQL_DESC_ARRAY_STATUS_PTR

IRD

SQLFetch実行後のステータスの値が格納される行ステータス配列へのポインタです。

IPD

SQLExecute，SQLExecDirectまたはSQLExecDirectW実行後，パラメタ値の各セットに対するステータス情報を格納するパラメタステータス配列へのポインタです。

ARD

SQLSetPosの処理に対して行の無視を指定するため，アプリケーションが値を設定できる操作配列へのポインタです。

APD

SQLExecute，SQLExecDirectまたはSQLExecDirectW実行時，パラメタセットの無視を指定するため，アプリケーションが値を設定できるパラメタ操作配列へのポインタです。

NULL

ドライバはステータスの値やステータス情報の格納，または行やパラメタセットの無視をしません。

次の値をサポートします。

NULL

SQLUSMALLINT *

4

SQL_DESC_BIND_OFFSET_PTR

APが指定するバインドオフセットです。

フェッチ時に，遅延フィールドに加算します。

NULL

加算しません。

次の値をサポートします。

NULL

SQLLEN *

5

SQL_DESC_BIND_TYPE

列またはパラメタのバインドの方向を指定します。

ARD

SQLFetch実行時のバインドの方向です。

APD

動的パラメタに対するバインドの方向です。

SQL_BIND_BY_COLUMN

列方向バインドを指定します。

次の値をサポートします。

SQL_BIND_BY_COLUMN

SQLINTEGER

6

SQL_DESC_COUNT

データを格納するレコード番号の最大値です。

指定できる値は1以上です。

次の値をサポートします。

0以上の整数値

SQLSMALLINT

7

SQL_DESC_ROWS_PROCESSED_PTR

IRD

SQLFetch実行後，フェッチした行数を格納するバッファへのポインタです。

IPD

SQLExecute，SQLExecDirectまたはSQLExecDirectW実行時に処理されたパラメタセットの数を格納するバッファへのポインタです。

NULL

ドライバはフェッチした行数やパラメタセットの数をバッファに格納しません。

次の値をサポートします。

NULL

SQLULEN *

表16‒25　ディスクリプタのレコードフィールドの値

項番

属性(Attribute)

属性の説明(規約)

サポートの状況

データ型

1

SQL_DESC_AUTO_UNIQUE_VALUE

列が自動的にインクリメントされるかどうかを示します。

SQL_FALSE

列が自動的にインクリメントされません。

次の値をサポートします。

SQL_FALSE

SQLINTEGER

2

SQL_DESC_BASE_COLUMN_NAME

結果セット列に対応するベース列名です。

次の値をサポートします。

列名

"EXPnnnn_NO_NAME"（nnnnは0001から1000の符号なし整数）

検索項目列が列指定ではありません。

SQLCHAR *

SQLWCHAR *

3

SQL_DESC_BASE_TABLE_NAME

結果セット列に対応するベーステーブル名です。

次の値をサポートします。

空の文字列

SQLCHAR *

SQLWCHAR *

4

SQL_DESC_CASE_SENSITIVE

照合または比較のときに，列またはパラメタの大文字と小文字を区別するかどうかを示します。

SQL_TRUE

照合・比較時に，列・パラメタの大文字と小文字を区別します。

SQL_FALSE

次のどちらかを示します。

・照合・比較時に，列・パラメタの大文字と小文字を区別しません。

・列が文字以外です。

次の値をサポートします。

SQL_TRUE

SQL_FALSE

SQLINTEGER

5

SQL_DESC_CATALOG_NAME

列を格納するベーステーブルに対するカタログ名です。

次の値をサポートします。

空の文字列

SQLCHAR *

SQLWCHAR *

6

SQL_DESC_CONCISE_TYPE

すべてのデータ型に対する簡潔データ型です。

次の値をサポートします。

当ドライバでサポートしているデータ型

SQLSMALLINT

7

SQL_DESC_DATA_PTR

パラメタの値（APD）または列の値（ARD）を格納するバッファへのポインタです。

次の値をサポートします。

NULL

バッファへのポインタ

SQLPOINTER

8

SQL_DESC_DATETIME_INTERVAL_CODE

SQL_DESC_TYPEフィールドの値がSQL_DATETIMEまたはSQL_INTERVALの場合，特定の日付時刻または間隔のデータ型に対するサブコードです。

上記以外の場合，このフィールドは0です。

次の値をサポートします。

特定の日付時刻または間隔のデータ型に対するサブコード

0

SQLSMALLINT

9

SQL_DESC_DATETIME_INTERVAL_PRECISION

SQL_DESC_TYPEフィールドがSQL_INTERVALの場合，間隔先行精度です。

上記以外の場合，このフィールドは0です。

次の値をサポートします。

0

SQLINTEGER

10

SQL_DESC_DISPLAY_SIZE

列からデータを表示するときに必要な最大文字数です。

データ型の種類によって，次の値をサポートします。

SQL_CHAR，SQL_VARCHAR

定義長（バイト数）

SQL_BIGINT，SQL_INTEGER

桁数

SQL_DECIMAL

精度（全体の桁数）＋2

SQL_TYPE_DATE，SQL_DATE

10

SQL_TYPE_TIME，SQL_TIME

8＋（p＋1）※

SQL_TYPE_TIMESTAMP，SQL_TIMESTAMP

19＋（p＋1）※

SQL_DOUBLE

24

SQL_BINARY，SQL_VARBINARY

定義長（バイト数）×2

SQLLEN

11

SQL_DESC_FIXED_PREC_SCALE

列が真数値型かどうかを示します。

SQL_FALSE

列が真数値型以外で，固定精度とスケールが設定されています。

次の値をサポートします。

SQL_FALSE

SQLSMALLINT

12

SQL_DESC_INDICATOR_PTR

列またはパラメタの値がNULLかどうかを示します。

次の値をサポートします。

NULL

バッファへのポインタ

SQLLEN *

13

SQL_DESC_LABEL

列のラベルまたはタイトルです。

次の値をサポートします。

列名

"EXPnnnn_NO_NAME"（nnnnは0001から1000の符号なし整数）

検索項目列が列指定ではありません。

SQLCHAR *

SQLWCHAR *

14

SQL_DESC_LENGTH

文字列またはバイナリデータ型の最大長または実際の文字長です。

次の値をサポートします。

各データ型の定義長(バイト長)

SQLULEN

15

SQL_DESC_LITERAL_PREFIX

データ型のリテラルに対するプレフィックスとしてドライバが認識する1文字以上の文字です。

次の値をサポートします。

空の文字列

SQLCHAR *

SQLWCHAR *

16

SQL_DESC_LITERAL_SUFFIX

データ型のリテラルに対するサフィックスとしてドライバが認識する1文字以上の文字です。

次の値をサポートします。

空の文字列

SQLCHAR *

SQLWCHAR *

17

SQL_DESC_LOCAL_TYPE_NAME

普通のデータ型名とは異なるデータ型のローカル名です。

次の値をサポートします。

空の文字列

SQLCHAR *

SQLWCHAR *

18

SQL_DESC_NAME

列のエイリアスです。列のエイリアスが適用されない場合は，列名です。

次の値をサポートします。

列名

"EXPnnnn_NO_NAME"（nnnnは0001から1000の符号なし整数）

検索項目列が列指定ではありません。

SQLCHAR *

SQLWCHAR *

19

SQL_DESC_NULLABLE

列にNULLを指定できるかどうかを示します。

SQL_NULLABLE

列にナル値を指定できます。

SQL_NO_NULLS

列にナル値を指定できません。

次の値をサポートします。

SQL_NULLABLE

SQL_NO_NULLS

SQLSMALLINT

20

SQL_DESC_NUM_PREC_RADIX

SQL_DESC_TYPEフィールドのデータ型が概数値データ型か，真数値データ型かを示します。

10

データ型が真数値データ型です。

0

データ型が数値以外です。

次の値をサポートします。

10

0

SQLINTEGER

21

SQL_DESC_OCTET_LENGTH

文字列またはバイナリデータ型のバイト長です。

次の値をサポートします。

各データ型の定義長(バイト長)

SQLLEN

22

SQL_DESC_OCTET_LENGTH_PTR

動的引数（パラメタディスクリプタの場合）またはバインドされた列の値（行ディスクリプタの場合）の長さの合計（バイト長）を格納する変数を指します。

次の値をサポートします。

NULL

バッファへのポインタ

SQLLEN *

23

SQL_DESC_PARAMETER_TYPE

パラメタの種類(入力・出力・入出力)を示します。

SQL_PARAM_INPUT

入力パラメタです。

SQL_PARAM_INPUT_OUTPUT

入出力パラメタです。

次の値をサポートします。

SQL_PARAM_INPUT

SQL_PARAM_INPUT_OUTPUT

SQL_PARAM_INPUTに置き換えます。

SQLSMALLINT

24

SQL_DESC_PRECISION

真数値型の場合は桁数，概数値型の場合は仮数（バイナリ精度）のビット数です。

データ型の種類によって，次の値をサポートします。

SQL_BIGINT，SQL_INTEGER

桁数

SQL_DECIMAL，SQL_NUMERIC

精度（全体の桁数）

SQL_TYPE_TIME，SQL_TYPE_TIMESTAMP，SQL_TIME，SQL_TIMESTAMP

小数秒の桁数

SQL_DOUBLE，SQL_FLOAT

15

そのほかのデータ型

0

SQLSMALLINT

25

SQL_DESC_SCALE

10進および数値のデータ型

スケールの定義値です。

次の値をサポートします。

スケールの定義値

0

数値以外のデータ型です。

SQLSMALLINT

26

SQL_DESC_SCHEMA_NAME

列を格納するベーステーブルのスキーマ名です。

次の値をサポートします。

空の文字列

SQLCHAR *

SQLWCHAR *

27

SQL_DESC_SEARCHABLE

WHERE句で列を使用できるかどうかを示します。

SQL_PRED_SEARCHABLE

WHERE句の任意の比較演算子で列を使用できます。

次の値をサポートします。

SQL_PRED_SEARCHABLE

SQLSMALLINT

28

SQL_DESC_TABLE_NAME

列を格納するベーステーブル名です。

次の値をサポートします。

空の文字列

SQLCHAR *

SQLWCHAR *

29

SQL_DESC_TYPE

日付時刻と間隔以外のデータ型

簡潔SQLデータ型または簡潔Cデータ型です。

日付時刻および間隔のデータ型

冗長データ型（SQL_DATETIMEまたはSQL_INTERVAL）です。

次の値をサポートします。

簡潔SQLデータ型

簡潔Cデータ型

冗長データ型

SQLSMALLINT

30

SQL_DESC_TYPE_NAME

データソースに依存するデータ型名です。

データ型が不明な場合，空の文字列が指定されます。

次の値をサポートします。

データソースに依存するデータ型名

空の文字列

SQLCHAR *

SQLWCHAR *

31

SQL_DESC_UNNAMED

SQL_DESC_NAMEフィールドに列名または列のエイリアスが指定されたかどうかを示します。

SQL_NAMED

SQL_DESC_NAMEフィールドに列名または列のエイリアスが指定されました。

SQL_UNNAMED

SQL_DESC_NAMEフィールドに列名または列のエイリアスが指定されていません。

次の値をサポートします。

SQL_NAMED

SQL_UNNAMED

SQLSMALLINT

32

SQL_DESC_UNSIGNED

列のデータ型が符号付きか，符号なしかを示します。

SQL_TRUE

列のデータ型が符号なし，または数値以外です。

SQL_FALSE

列のデータ型が符号付きです。

次の値をサポートします。

SQL_TRUE

SQL_FALSE

SQLSMALLINT

33

SQL_DESC_UPDATABLE

結果セットの列の更新が可能かどうかを示します。

SQL_ATTR_READWRITE_UNKNOWN

結果セット列は更新可能かどうかわかりません。

次の値をサポートします。

SQL_ATTR_READWRITE_UNKNOWN

SQLSMALLINT

34

SQL_COLUMN_LENGTH

ODBC2.0で定義されているフィールドです。

データ型の種類によって，次の値をサポートします。

SQL_CHAR，SQL_VARCHAR，SQL_BINARY，SQL_VARBINARY

定義長（バイト数）

SQL_BIGINT，SQL_INTEGER

桁数

SQL_DECIMAL，SQL_NUMERIC

精度（全体の桁数）＋2

SQL_TYPE_DATE

10

SQL_TYPE_TIME，SQL_TIME

8＋（p＋1）※

SQL_TYPE_TIMESTAMP，SQL_TIMESTAMP

19＋（p＋1）※

SQL_DOUBLE，SQL_FLOAT

24

SQLLEN

35

SQL_COLUMN_PRECISION

ODBC2.0で定義されているフィールドです。

次の値をサポートします。

SQL_DESC_PRECISIONと同じ値

SQLSMALLINT

36

SQL_COLUMN_SCALE

ODBC2.0で定義されているフィールドです。

次の値をサポートします。

SQL_DESC_SCALEと同じ値

SQLSMALLINT

注※

pは最大12桁の小数秒精度を意味しています。

（ ）内は，小数秒がある場合に加算します。

16.18　SQLGetDiagFieldおよびSQLGetDiagFieldWのDiagIdentifierに指定できる属性

DiagIdentifierに指定できる属性を次の表に示します。

表16‒26　DiagIdentifierに指定できる属性（ヘッダフィールドの場合）

項番

診断フィールド識別子(DiagIdentifier)

診断フィールド識別子の説明(規約)

返却値

データ型

1

SQL_DIAG_CURSOR_ROW_COUNT

カーソル内の行カウント値が返されます。

ステートメントハンドルだけが有効です。ステートメントハンドル以外が指定された場合は，SQL_ERRORが返されます。

常に0が返されます。

SQLLEN

2

SQL_DIAG_DYNAMIC_FUNCTION

関数が実行したSQLステートメントが返されます。

ステートメントハンドルだけが有効です。ステートメントハンドル以外が指定された場合は，SQL_ERRORが返されます。

SQLExecute，SQLExecDirectまたはSQLExecDirectWの直後に取得できます。

次の値が返されます。

"ALTER TABLE"

"ALTER USER"

"ALTER VIEW"

"CREATE AUDIT"

"CREATE INDEX"

"CREATE SCHEMA"

"CREATE TABLE"

"CREATE USER"

"CREATE VIEW"

"DELETE"

"DROP AUDIT"

"DROP INDEX"

"DROP SCHEMA"

"DROP TABLE"

"DROP USER"

"DROP VIEW"

"GRANT"

"INSERT"

"PURGE CHUNK"

"REVOKE"

"SELECT CURSOR"

"TRUNCATE TABLE"

"UPDATE"

""

SQLExecute，SQLExecDirect，またはSQLExecDirectWの直後以外は，常に""が返されます。

SQLCHAR *

SQLWCHAR *

3

SQL_DIAG_DYNAMIC_FUNCTION_CODE

関数が実行したSQLステートメントを示す値が返されます。

ステートメントハンドルだけが有効です。ステートメントハンドル以外が指定された場合は，SQL_ERRORが返されます。

SQLExecute，SQLExecDirectまたはSQLExecDirectWの直後に取得できます。

次の値が返されます。

SQL_DIAG_INSERT

SQL_DIAG_CREATE_TABLE

SQL_DIAG_ALTER_TABLE

SQL_DIAG_DROP_TABLE

SQL_DIAG_CREATE_INDEX

SQL_DIAG_DROP_INDEX

SQL_DIAG_CREATE_SCHEMA

SQL_DIAG_DROP_SCHEMA

SQL_DIAG_CREATE_VIEW

SQL_DIAG_DROP_VIEW

SQL_DIAG_UNKNOWN_STATEMENT

SQL_DIAG_SELECT_CURSOR

SQL_DIAG_UPDATE_WHERE

SQL_DIAG_DELETE_WHERE

SQL_DIAG_GRANT

SQL_DIAG_REVOKE

SQLExecute，SQLExecDirect，またはSQLExecDirectWの直後以外は，常にSQL_DIAG_UNKNOWN_STATEMENTが返されます。

SQLINTEGER

4

SQL_DIAG_NUMBER

利用可能なステータスレコード数が返されます。

0または1が返されます。

SQLINTEGER

5

SQL_DIAG_RETURNCODE

SQLGetDiagFieldまたはSQLGetDiagFieldW，SQLGetDiagRecまたはSQLGetDiagRecWの実行直前に実行したODBC関数が返したリターンコードが返されます。

常にSQL_SUCCESSが返されます。

SQLRETURN

6

SQL_DIAG_ROW_COUNT

挿入，削除，更新処理によって変更された行数が返されます。

ステートメントハンドルだけが有効です。ステートメントハンドル以外が指定された場合は，SQL_ERRORが返されます。

常に0が返されます。

SQLLEN

表16‒27　DiagIdentifierに指定できる属性（レコードフィールドの場合）

項番

診断フィールド識別子(DiagIdentifier)

診断フィールド識別子の説明(規約)

返却値

データ型

1

SQL_DIAG_CLASS_ORIGIN

SQLSTATEのクラス部分を定義しているドキュメントを示す文字列が返されます。

次の値が返されます。

"ODBC 3.0"

"ISO 9075"

SQLCHAR *

SQLWCHAR *

2

SQL_DIAG_COLUMN_NUMBER

結果セット中の列番号またはパラメタセット中のパラメタ番号を示す値が返されます。

ステートメントハンドルだけ有効です。

常に0が返されます。

SQLINTEGER

3

SQL_DIAG_CONNECTION_NAME

接続の名前が返されます。

常に""が返されます。

SQLCHAR *

SQLWCHAR *

4

SQL_DIAG_MESSAGE_TEXT

エラーまたは警告に関するメッセージが返されます。

"[Hitachi Advanced Data Binder ODBC Driver]"で始まる文字列が返されます。

付加情報が付くことがあります。

SQLCHAR *

SQLWCHAR *

5

SQL_DIAG_NATIVE

ODBCドライバまたはデータソース固有のネイティブエラーコードが返されます。

ない場合は0が返されます。

0またはSQLCODEの値を返します。

SQLCODEについては，マニュアルHADB　メッセージのSQLCODEの見方を参照してください。

SQLINTEGER

6

SQL_DIAG_ROW_NUMBER

行セット中の列番号またはパラメタセット中のパラメタ番号を示す値が返されます。

ステートメントハンドルだけ有効です。

常に0が返されます。

SQLLEN

7

SQL_DIAG_SERVER_NAME

サーバ名が返されます。

常に""が返されます。

SQLCHAR *

SQLWCHAR *

8

SQL_DIAG_SQLSTATE

5文字のSQLSTATEの診断コードが返されます。

ODBC規約に定められた5文字のSQLSTATEの診断コードが返されます。

SQLCHAR *

SQLWCHAR *

9

SQL_DIAG_SUBCLASS_ORIGIN

SQL_DIAG_CLASS_ORIGINと同じ形式の有効な値を持った文字列が返されます。SQLSTATEのサブクラス部分の定義を識別するものです。

次の値が返されます。

"ODBC 3.0"

"ISO 9075"

SQLCHAR *

SQLWCHAR *

17　トラブルシュート

この章では，ODBCインタフェース使用時のトラブルシュートについて説明します。

17.1　トラブルシュート時に使用する情報

ODBCインタフェース（BIツールやODBCモジュールなど）を使用している場合のトラブルシュート時に使用する情報について説明します。

17.1.1　BIツールやODBCモジュールの出力するメッセージ

BIツールやODBCモジュール（Microsoft Excelなど）から，HADBサーバにアクセスした際にエラーが発生した場合，ダイアログボックス，BIツールのステータス画面やメッセージ欄，またはログにエラーメッセージが出力されます。

メッセージの出力形式は，BIツールやODBCモジュールなどの仕様によって異なりますが，その製品独自のメッセージに続いて，エラー発生元のメッセージが出力されるケースが一般的です。出力されたメッセージ中に，「Hitachi」または「KFAA」などの文字列がある場合は，HADBが原因元であるエラーが発生した可能性があります。

重要

ダイアログボックスや，BIツールのメッセージ欄に出力されたエラーメッセージは，以降表示されないことがあります。そのため，出力されたエラーメッセージのスクリーンショットを取得してください。

17.1.2　ODBCトレース

ドライバマネージャの機能によって，APとドライバマネージャ間の入出力情報をトレースログに出力します。これをODBCトレースといいます。

ODBCトレースでは，ドライバマネージャがAPから受け取った要求単位に情報が出力されます。そのため，APのデバッグや，エラーの原因調査に使用できます。

■ODBCトレースの取得方法

ODBCトレースを取得する場合は，ODBCデータソースアドミニストレーターの［トレース］タブで，［トレースの開始］をクリックしてください。

［ログファイルのパス］に指定したパスに，ODBCトレースが出力されます。ODBCトレースの取得方法の詳細については，MSDNライブラリのODBCデータソースアドミニストレーターを使うを参照してください。

重要

トレースログのファイルへの入出力を，ドライバマネージャがAPから受け取った要求単位で行うため，その分処理性能が低下します。そのため，ODBCトレースを常に出力する運用は推奨しません。

17.1.3　HADB ODBCドライバトレース情報

HADB ODBCドライバ独自のトレース出力機能（HADB ODBCドライバトレース）によって，HADB ODBCドライバトレース情報を出力します。ドライバマネージャとHADB ODBCドライバ間の入出力情報を出力します。

HADB ODBCドライバトレース情報の取得方法については，「17.3　HADB ODBCドライバトレース情報を出力するときの設定」を参照してください。出力される情報の詳細については，「17.4　HADB ODBCドライバトレース情報に出力される情報」を参照してください。

■HADB ODBCドライバトレース情報の出力先

HADB ODBCドライバトレース情報の出力先フォルダは，次のどちらかになります。

ODBCデータソースアドミニストレーターの［Trace Setup］ダイアログの［Trace Directory Path］に指定したフォルダ

環境変数ADBODBTRCPATHに指定したフォルダ

HADB ODBCドライバトレースファイルの名称は，次のとおりです。

adbodbtrace_PID_TID_01.log

adbodbtrace_PID_TID_02.log

PIDは，HADB ODBCドライバを使用するAPやBIツールのプロセスIDを16進数で表した値です。TIDは，HADB ODBCドライバを使用するAPやBIツールのプロセスによって起動されたスレッドのスレッドIDを16進数で表した値です。

HADB ODBCドライバトレースファイルは，HADB ODBCドライバを利用するプロセスのスレッドごとに出力されます。そのため，HADB ODBCドライバを利用するAPやBIツールのプロセス数およびスレッド数に比例して，出力されるファイル数が増加します。

なお，出力された情報が，HADB ODBCドライバトレースファイルの容量の上限に達した場合，出力先をadbodbtrace_PID_TID_01.logとadbodbtrace_PID_TID_02.logで切り替えます。出力先の切り替え時，切り替え先のファイルのサイズが上限に達している場合，切り替え先のファイル内のすべての情報を削除してから，HADB ODBCドライバトレース情報を出力します。

重要

HADB ODBCドライバトレース情報を出力するたびに，HADB ODBCドライバトレースファイルをオープンおよびクローズします。そのため，処理性能が著しく低下することが予想されます。したがって，HADB ODBCドライバトレース情報を常に出力する運用は推奨しません。

17.1.4　HADBサーバまたはHADBクライアントが出力するメッセージ

HADBサーバまたはHADBクライアントが出力するメッセージには，クライアントからの接続情報や，実行したSQL文などの情報が出力されます。

17.1.5　SQLトレース情報

SQLトレース情報は，APからHADBサーバが受け付けたSQL文のトレース情報を出力する機能です。SQLトレース情報については，マニュアルHADB　システム構築・運用ガイドのSQLトレース機能の運用を参照してください。

ODBCインタフェースを利用した環境下では，HADB ODBCドライバからHADBクライアントへの要求，およびHADBクライアントからHADB ODBCドライバに返却された内容が確認できます。

17.2　トラブルシュートの方法

ODBCインタフェースを使用しているときのトラブルシュートの方法について説明します。

17.2.1　エラーの対処方法

トラブルシュートの流れとしては，最初にエラーの発生元を特定します。そのあとに，エラーの対処を行います。エラーの発生元の特定方法を次の図に示します。

図17‒1　エラーの発生元の特定方法

上記のフローからエラーの発生元を特定したあとに，次の表に示す対処方法を参照してください。

表17‒1　エラーの対処方法

項番

状態

対処方法

1

【状態A】

APまたはドライバマネージャでエラーが発生しています。

次のことを実施してください。

APの設定，またはプログラムの設定を確認してください。

HADBクライアントのインストールが正しく行われているかを確認してください。

データソースの登録または接続情報の指定が正しいかを確認してください。

出力されたSQLSTATEを確認してください。MSDNライブラリのODBCプログラマーズリファレンスなどで，SQLSTATEやメッセージの内容を確認してください。

再現性があるエラーの場合は，ODBCトレースを取得して，エラーの原因となっているODBC関数を特定してください。

2

【状態B】

ドライバマネージャでエラーが発生しています。

項番1の対処方法と同じになります。

3

【状態C】

ODBCドライバでエラーまたは警告が発生しています。

次のことを実施してください。

出力されたSQLSTATEを確認してください。SQLSTATEについては，MSDNライブラリのODBCプログラマーズリファレンス，または「16.　ODBC関数」の各ODBC関数のSQLSTATEの説明を参照してください。このエラーは，ODBCの実装規約に従って出力されるエラーです。

再現性があるエラーの場合は，HADB ODBCドライバトレース情報を取得して，ODBC関数の実行順序や，どのODBC関数でどのようなエラーが発生しているかなどを中心に調査してください。

4

【状態D】

ODBCドライバでエラーまたは警告が発生しています。

次のことを実施してください。

出力されたメッセージを確認し，マニュアルHADB　メッセージを参照して，エラーまたは警告の原因を調査してください。

再現性があるエラーまたは警告の場合は，HADB ODBCドライバトレース情報を取得して，ODBC関数の実行順序や，エラーの原因となっているODBC関数を特定してください。

データ変換のエラーや，文字コード変換のエラーが原因となることが多いため，BIツールやODBCモジュールの設定，検索データの表示方法などを見直してください。

サポートしていない属性情報にアクセスしている可能性があります。「16.13　SQLGetInfoおよびSQLGetInfoWのInfoTypeに指定できる情報型」〜「16.18　SQLGetDiagFieldおよびSQLGetDiagFieldWのDiagIdentifierに指定できる属性」を参照し，サポート状況を確認してください。

5

【状態E】

HADBサーバへの接続が完了していません。

HADBサーバまでアクセスが到達していない可能性があります。アクセス経路のうち，どこまで到達しているかを調査する必要があります。

最初に次のことを実施してください。

メッセージログファイルの出力先フォルダ，およびメッセージログファイルのアクセス権限の設定が正しいかを確認してください。

環境変数の設定が正しいかを確認してください。

HADBクライアントのインストールが正しく行われているかを確認してください。

上記が正しく設定されているのに，エラーが再現する場合は，ODBCトレース，HADB ODBCドライバトレース情報，およびSQLトレース情報の出力を設定してください。そのあとに，エラーを再現して，各トレースの出力情報を解析してください。

エラーの発生がなく，BIツールやODBCモジュールにも何も出力されない場合は，BIツールやODBCモジュール側のトラブルの可能性があります。

6

【状態F】

HADBクライアントでエラーが発生しています。

出力されたエラー要因コードを確認し，エラー原因を調査してください。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

環境変数やクライアント定義のパスの指定が誤っている，または権限がないなどの原因が考えられます。

7

【状態G】

HADBサーバまたはHADBクライアントでエラーまたは警告が発生しています。

出力されたHADBのメッセージを確認し，エラーまたは警告の原因を調査してください。

8

【状態H】

HADBサーバへの接続は完了しています。

HADBサーバまでアクセスが到達しています。

メッセージログファイルに出力されているメッセージや，SQL文を解析してトラブルシュートを実施してください。

詳細情報を取得する場合は，ODBCトレース，HADB ODBCドライバトレース情報，およびSQLトレース情報の出力を設定してください。そのあとに，エラーを再現して，各トレースの出力情報を解析してください。

エラーの発生がなく，BIツールやODBCモジュールにも何も出力されない場合は，BIツールやODBCモジュール側のトラブルの可能性があります。

BIツールや，ODBCモジュールから，HADB ODBCドライバを経由してHADBサーバにアクセスする際の処理の流れを次の図に示します。

図17‒2　HADB ODBCドライバを経由してHADBサーバにアクセスする際の処理の流れ

なお，エラー原因の対処後に，異なるエラーが発生した場合は，再度エラーの発生元の特定からし直してください。

17.2.2　トラブルシュートのポイント

(1)　ODBCトレースを参照する際のポイント

ODBCトレースを参照することによって，ドライバマネージャが，APやBIツール，ODBCモジュールなどから受け付けた要求と，その返却内容を確認できます。

APやBIツール，ODBCモジュールなどは，ドライバマネージャからエラーが返却された場合，ODBC関数のSQLGetDiagFieldおよびSQLGetDiagRecを発行し，エラーの詳細情報を取得するのが一般的です。特に，SQLGetDiagRecで得られるSQLSTATE，NativeError，およびMessageTextは有用なトラブルシュート情報となります。

メモ

ODBCトレースは，HADB ODBCドライバからの要求や返却内容を示すものではありません。

(2)　メッセージテキストからエラー発生元を特定する際のポイント

メッセージテキストが出力されている場合，そのメッセージテキストから出力元を判別することができます。ポイントを次に示します。

メッセージテキスト中に，KFAAで始まるメッセージIDがないかを確認してください。さらに，メッセージテキスト中に，[Hitachi Advanced Data Binder] [ODBC Driver]タグがないかを確認してください。

上記の条件に該当する場合は，HADB（HADB ODBCドライバも含む）でエラーまたは警告が発生しています。

KFAAで始まるメッセージがKFAA72000番台の場合は，HADB ODBCドライバでエラーが発生しています。

上記以外のメッセージIDの場合は，HADBサーバまたはHADBクライアントでエラーが発生しています。

メッセージIDおよびタグが途中までしか出力されていない場合は，HADBサーバまたはHADBクライアントで処理が行われたと考えられます。この場合，各種トレースやログを確認して，完全なメッセージを取得してください。

メッセージテキスト中に，[Microsoft] [ODBC Driver Manager]タグがないかを確認してください。タグがある場合は，ドライバマネージャでエラーまたは警告が発生しています。

この場合，HADB（HADB ODBCドライバも含む）では処理が行われていない可能性が高いと考えられます。シーケンスエラーなど，致命的なエラーのケースが多く見られるため，APのデバッグ，BIツールまたはODBCモジュールの設定の見直しを行ってください。

上記の1，2で確認したキーワードがない場合は，ドライバマネージャおよびHADB（HADB ODBCドライバも含む）では処理が行われていない可能性が高いと考えられます。BIツールまたはODBCモジュールの設定で，使用するインタフェースやDBMSの指定に誤りなどがないか，設定を確認してください。

(3)　SQLSTATEを参照する際のポイント

エラーの発生元を特定したあとに，SQLSTATEを確認してエラーの原因を特定します。

ドライバマネージャがエラーの発生元の場合

ドライバマネージャが返すSQLSTATEは，ODBCの実装規約に基づいています。MSDNライブラリのODBCプログラマーズリファレンスのODBC Error CodesにSQLSTATEの一覧があります。そこにエラー原因の簡単な説明と，SQLSTATEを返したODBC関数が説明されています。詳細な情報については，SQLSTATEとODBC関数を基に，ODBC API Referenceを参照して確認してください。

HADB ODBCドライバがエラーの発生元の場合

ODBC関数が返すSQLSTATEを確認して，エラーの原因を特定してください。

メモ

HADB ODBCドライバが返すSQLSTATEは，ドライバマネージャが返すSQLSTATEと同様に，ODBCの実装規約に基づいています。より詳細にエラー原因を特定できる場合は，HADB独自のSQLSTATEを返しています。

HADBサーバまたはHADBクライアントがエラーの発生元の場合

HADBサーバまたはHADBクライアントが返すSQLSTATEは，HADBのメッセージと対応しています。SQLSTATEとHADBのメッセージの対応については，マニュアルHADB　メッセージのSQLSTATEの一覧を参照してください。

対応しているメッセージの内容を確認して，エラーの原因を特定してください。

(4)　SQLSTATEおよびメッセージテキストの取得方法

SQLSTATEおよびメッセージテキストは，次のODBC関数を実行して取得します。

SQLGetDiagField

SQLGetDiagFieldW

SQLGetDiagRec

SQLGetDiagRecW

17.3　HADB ODBCドライバトレース情報を出力するときの設定

HADB ODBCドライバトレース情報を出力するときの設定方法には，次に示す2つの方法があります。

ODBCデータソースアドミニストレーターで設定する方法

環境変数で設定する方法

どちらの方法を選択するかの目安を次の表に示します。

表17‒2　設定方法を選択する際の目安

使用条件

推奨する設定方法

HADBサーバへの接続時にデータソースを使用するかどうか

HADBサーバへの接続時に使用するデータソース種別

動的にトレース情報を出力，停止する必要があるかどうか

使用する

ユーザDSN

必要がある

ODBCデータソースアドミニストレーターで設定する方法

必要がない

どちらの方法でもよい

システムDSN

必要がある

ODBCデータソースアドミニストレーターで設定する方法

必要がない

どちらの方法でもよい

ファイルDSN

必要がある

なし

必要がない

環境変数で設定する方法

使用しない

該当なし

必要がある

なし

必要がない

環境変数で設定する方法

各方法について，以降で説明します。

17.3.1　ODBCデータソースアドミニストレーターで設定する方法

ODBCデータソースアドミニストレーターを使用して，HADB ODBCドライバトレース情報を出力するときの設定方法を説明します。

(1)　HADB ODBCドライバトレース情報を出力する場合

HADB ODBCドライバトレース情報を出力する際の設定方法を説明します。

手順

［Hitachi Advanced Data Binder ODBC Driver Setup］ダイアログを表示する

ODBCデータソースアドミニストレーターの［ユーザーDSN］タブで，HADB ODBCドライバを使用するデータソースを選択し，［構成(C)...］ボタンをクリックします。

メモ

ODBCデータソースアドミニストレーターの［システムDSN］タブでも，同じ操作をして［Hitachi Advanced Data Binder ODBC Driver Setup］ダイアログを表示することができます。

［Hitachi Advanced Data Binder ODBC Driver Setup］ダイアログで，［Options>>］ボタンをクリックする

［Trace Setup...］ボタンをクリックする

［Trace Setup］ダイアログで，HADB ODBCドライバトレース情報の出力に関する設定を行う

次の指定を行います。

Trace Level

トレースレベルを選択します。トレースレベルについては，「17.4.1　トレースレベルとは」を参照してください。

Trace Size

HADB ODBCドライバトレースファイルの1ファイル当たりのサイズの上限値（単位：メガバイト）を指定します。32〜1,024の値（半角の数値）を指定できます。

指定をしない場合，または不正な値を指定した場合は，256が仮定されます。

Trace Directory Path

HADB ODBCドライバトレースファイルを格納するフォルダを絶対パスで指定します。

［...］ボタンをクリックして，フォルダを選択してください。

実行ユーザに対するアクセス権限があるフォルダを指定してください。

また，210バイト以下のパス名を指定してください。

重要

次に示す場合は，HADB ODBCドライバトレース情報は出力されません。

［Trace Directory Path］にパス名を指定しない場合

［Trace Directory Path］に不正なパスを指定した場合

［Trace Directory Path］に211バイト以上のパス名を指定した場合

［Apply & Trace Start］ボタンをクリックする

HADB ODBCドライバトレース情報の出力が開始されます。

メモ

手順の4.の操作を実行すると，［Apply & Trace Start］ボタンが活性化されます。

設定を中止する場合は，［Apply & Trace Start］ボタンをクリックする前に［CANCEL］をクリックしてください。

［OK］をクリックする

［Hitachi Advanced Data Binder ODBC Driver Setup］ダイアログで，［OK］をクリックする

(2)　HADB ODBCドライバトレース情報の出力をやめる場合

［Hitachi Advanced Data Binder ODBC Driver Setup］ダイアログを表示する

ODBCデータソースアドミニストレーターの［ユーザーDSN］タブで，HADB ODBCドライバを使用するデータソースを選択し，［構成(C)...］ボタンをクリックします。

メモ

ODBCデータソースアドミニストレーターの［システムDSN］タブでも，同じ操作をして［Hitachi Advanced Data Binder ODBC Driver Setup］ダイアログを表示することができます。

［Hitachi Advanced Data Binder ODBC Driver Setup］ダイアログで，［Options>>］ボタンをクリックする

［Trace Setup...］ボタンをクリックする

［Apply & Trace Stop］ボタンをクリックする

HADB ODBCドライバトレース情報の出力が停止されます。

［OK］をクリックする

［Hitachi Advanced Data Binder ODBC Driver Setup］ダイアログで，［OK］をクリックする

17.3.2　環境変数で設定する方法

次に示す場合は，環境変数を指定してHADB ODBCドライバトレース情報を出力してください。

SQLDriverConnect，SQLDriverConnectW，SQLBrowseConnect，またはSQLBrowseConnectW関数で，データソースを使用しないでODBCドライバ名称で接続（接続属性にDRIVERを指定）する場合

SQLConnectまたはSQLConnectW関数などの接続関数で，ファイルDSNを使用する場合

指定する環境変数を次に示します。

ADBODBTRC

HADB ODBCドライバトレース情報を出力するかどうかを指定します。

ADBODBTRCSIZE

HADB ODBCドライバトレースファイルの1ファイル当たりのサイズの上限値を指定します。

ADBODBTRCPATH

HADB ODBCドライバトレースファイルを格納するフォルダを指定します。

実行ユーザに対するアクセス権限があるフォルダを指定してください。

ADBODBTRCLV

HADB ODBCドライバトレースのトレースレベルを指定します。

各環境変数の指定方法については，「4.3.1　Windows版のHADBクライアントの場合」を参照してください。

なお，環境変数を次のように指定した場合，その環境変数の指定は無効になります。この場合，その環境変数にはデフォルト値が仮定されます。

export ADBODBTRCSIZE=

重要

ODBCドライバ経由でAPがHADBサーバにアクセスしている最中に，上記の環境変数の値を変更しても，そのAPのプロセスに対しては，変更後の値は有効になりません。

17.3.3　ODBCデータソースアドミニストレーターと環境変数の設定値の優先順位

ODBCデータソースアドミニストレーターの設定と，環境変数の設定の両方を実施した場合，基本的にはODBCデータソースアドミニストレーターの設定値が優先されます。ただし，次のケースでは，ODBCデータソースアドミニストレーターでの設定が有効になりません。

環境変数ADBODBTRCにYESを指定しているときに，ODBCデータソースアドミニストレーターで［Apply & Trace Stop］ボタンをクリックして，HADB ODBCドライバトレース情報の出力を停止した

この場合，環境変数ADBODBTRCの設定値が有効になるため，HADB ODBCドライバトレース情報の出力は継続されます。

17.4　HADB ODBCドライバトレース情報に出力される情報

ここでは，HADB ODBCドライバトレース情報に出力される情報について説明します。

なお，出力する情報量をトレースレベルで選択することができます。

17.4.1　トレースレベルとは

HADB ODBCドライバトレース情報に出力される情報を，トレースレベルを指定して選択できます。トレースレベルには2種類あり，簡易トレースのトレースレベル1と，詳細トレースのトレースレベル2があります。各トレースレベルと出力される情報の関係を次の表に示します。

表17‒3　各トレースレベルと出力される情報の関係

出力情報

トレースレベル

トレースレベル1

トレースレベル2

アクセス種別

×

○

関数名

○

○

引数

×

○

ハンドル

○

○

時刻

○

○

実行結果

○

○

SQLSTATE

○

○

エラーメッセージ

○

○

実行SQL

○

○

付加情報

○

○

（凡例）

○：出力します。

×：出力しません。

なお，トレースレベル1の場合は，1行に256バイトまでしか情報を出力しません。一方，トレースレベル2の場合は，すべての情報を出力します。そのため，トレースレベル2を選択した場合，出力情報が多くなる分，性能に影響を及ぼします。

また，HADB ODBCドライバトレース情報の出力タイミングが，トレースレベルによって次のように異なります。

トレースレベル1

ODBC関数の終了直前に出力されます。

トレースレベル2

ODBC関数の開始時および終了直前に出力されます。

メモ

詳細なトラブルシュート情報を出力する場合は，トレースレベル2を選択する必要がありますが，性能に影響があることを考慮してください。

17.4.2　トレースレベル1の場合に出力される情報

トレースレベル1の場合の出力例を次に示します。

■出力例（トレースレベル1の場合）

トレースレベル1の場合，1行に出力される文字列は最大256バイトです。ただし，実行要求したSQL文，および診断情報メッセージについては，すべての情報が出力されます。

各出力情報について次の表で説明します。

表17‒4　HADB ODBCドライバトレース情報に出力される情報（トレースレベル1の場合）

項番

出力項目

説明

1

［Trace Start Time］

HADB ODBCドライバトレース情報の出力を開始した日時を出力します。

日時の取得に失敗した場合，日付および時刻のすべての欄に0を出力します。

2

［Process ID］

プロセスIDを出力します。

3

［Module Name］

HADB ODBCドライバを使用するモジュール名称を出力します。モジュール名称が不明な場合は，unknownを出力します。

4

［Platform］

HADB ODBCドライバが動作しているプラットフォームを出力します。

5

［ODBC environment variables］

HADB ODBCドライバが使用している環境変数の値を出力します。環境変数に指定された値ではなく，HADB ODBCドライバで有効となっている値（デフォルト値やODBCデータソースアドミニストレーターで変更された値）が出力されます。

ADBCLTLANG

HADBクライアントで使用している文字コード

ADBODBTRC

HADB ODBCドライバトレース情報の出力有無

ADBODBTRCSIZE

HADB ODBCドライバトレースファイルの1ファイル当たりのサイズの上限値

ADBODBTRCPATH

HADB ODBCドライバトレースファイルを格納するフォルダの絶対パス

ADBODBTRCLV

トレースレベルの指定

ADBODBAPMODE

HADB ODBCドライバのアプリケーションモード

上記の環境変数については，「4.3.1　Windows版のHADBクライアントの場合」を参照してください。

6

［RETURN Value］

ODBC関数の戻り値の説明です。

項番11のRETURNのSQLRETURN型の整数値に対応する定義の説明です。

7

FUNCTION

ODBC関数名を出力します。

8

HANDLE

ODBC関数に引数として渡されたハンドルの値を出力します。

9

START-TIME

ODBC関数の実行開始日時を出力します。

日時の取得に失敗した場合，日付および時刻のすべての欄に0を出力します。

10

END-TIME

ODBC関数の実行終了日時を出力します。

日時の取得に失敗した場合，日付および時刻のすべての欄に0を出力します。

11

RETURN

ODBC関数の実行結果であるSQLRETURN型の値を出力します。

値の意味については，上部に出力される［RETURN Value］を参照してください。

12

SQLSTATE

SQLSTATEを出力します。

ODBC関数を実行した結果，SQLSTATEが出力された場合に限り出力されます。

13

CON_ID

コネクション番号を出力します。

SQLトレース情報に出力されるコネクション番号と同じものが出力されます。

HADBサーバと接続する前の場合は，*を出力します。

14

CON_NUM

コネクション通番を出力します。

SQLトレース情報に出力されるコネクション通番と同じものが出力されます。

HADBサーバと接続する前の場合は，*を出力します。

15

OPTION

オプション情報を出力します。詳細については，「表17‒5　OPTIONに出力されるオプション情報」を参照してください。

ODBC関数ごとに出力情報が異なります。

出力する情報がない場合は，*を出力します。

シンボル名で出力する情報のうち，不明な値の場合は，シンボル値の代わりにunknownが出力されます。

16

Connect Info

HADBサーバとの接続が確立したときに出力される情報を出力します。

17

［DataSourceName］

接続しているデータソース名を出力します。

データソースを使用していない場合，またはファイルDSNを使用している場合は，*を出力します。

18

［Client Definition File Path］

クライアント定義ファイルのパスを出力します。

19

［Hitachi Advanced Data Binder ODBC Driver Version］

HADB ODBCドライバのバージョンを出力します。

20

［ProcessID］

HADBクライアントのプロセスIDを出力します。

21

<SQL>

実行要求したSQL文を出力します。

次のODBC関数が実行された場合に，ODBC関数の引数として渡されたSQL文を出力します。

SQLPrepare

SQLExecDirect

22

<Message>

診断情報メッセージを出力します。

ODBC関数の実行結果が次の場合に出力されます。

SQL_ERROR

SQL_SUCCESS_WITH_INFO

SQL_NEED_DATA（SQLBrowseConnectの場合）

上記の表のOPTIONに出力されるオプション情報を次の表に示します。

表17‒5　OPTIONに出力されるオプション情報

項番

分類

ODBC関数

OPTIONに出力されるオプション情報

1

データソースとの接続

SQLAllocHandle

HandleType (シンボル値)

Address：OutputHandlePtrパラメタに返却したアドレス値

2

SQLConnect(W)

ServerName

UserName

3

SQLDriverConnect(W)

InConnectionString

パスワードは，*1個を出力します。

4

SQLBrowseConnect(W)

5

ドライバおよびデータソースの情報取得

SQLDataSources(W)

なし

6

SQLDrivers(W)

7

SQLGetInfo(W)

InfoType

8

SQLGetFunctions

FunctionID

9

SQLGetTypeInfo(W)

DataType

10

ドライバオプションの設定および取得

SQLSetConnectAttr(W)

Attribute

11

SQLGetConnectAttr(W)

12

SQLSetEnvAttr

13

SQLGetEnvAttr

14

SQLSetStmtAttr(W)

15

SQLGetStmtAttr(W)

16

ディスクリプタ値の設定

SQLGetDescField(W)

RecNumber

FieldIdentifier (シンボル値)

17

SQLGetDescRec(W)

RecNumber

*Name

18

SQLSetDescField(W)

RecNumber

FieldIdentifier

19

SQLSetDescRec

RecNumber

Type

SubType

20

SQLCopyDesc

Source：SourceDescHandleの値

Target：TargetDescHandleの値

21

SQL要求の作成

SQLPrepare(W)

tran_id：トランザクションID

stmt_hdl：文ハンドルID

sql_serial_num：SQL文通番

22

SQLBindParameter

ParameterNumber

ValueType

ParameterType

23

SQLGetCursorName(W)

なし

24

SQLSetCursorName(W)

25

SQLDescribeParam

ParameterNumber

26

SQLNumParams

*ParameterCountPtr

27

SQLの実行

SQLExecute

tran_id：トランザクションID

stmt_hdl：文ハンドルID

sql_serial_num：SQL文通番

28

SQLExecDirect(W)

29

SQLNativeSql(W)

OutStatementText

30

SQLParamData

なし

31

SQLPutData

StrLen_or_Ind

32

実行結果および実行結果情報の取得

SQLRowCount

*RowCountPtr

33

SQLNumResultCols

*ColumnCountPtr

34

SQLDescribeCol(W)

ColumnNumber

35

SQLColAttribute(W)

ColumnNumber

FieldIdentifier (シンボル値)

36

SQLBindCol

ColumnNumber

TargetType (シンボル値)

37

SQLFetch

なし

38

SQLFetchScroll

39

SQLGetData

ColumnNumber

TargetType (シンボル値)

40

SQLSetPos

なし

41

SQLBulkOperations

42

SQLMoreResults

43

SQLGetDiagField(W)

DiagIdentifier

44

SQLGetDiagRec(W)

なし

45

データソースのシステム情報の取得

SQLColumnPrivileges(W)

なし

46

SQLColumns(W)

47

SQLForeignKeys(W)

48

SQLPrimaryKeys(W)

49

SQLProcedureColumns(W)

50

SQLProcedures(W)

51

SQLSpecialColumns(W)

52

SQLStatistics(W)

53

SQLTablePrivileges(W)

54

SQLTables(W)

55

SQL実行の終了

SQLFreeStmt

Option

Option=SQL_CLOSEの場合は，次の情報も出力します。

tran_id：トランザクションID

stmt_hdl：文ハンドルID

sql_serial_num：SQL文通番

56

SQLCloseCursor

tran_id：トランザクションID

stmt_hdl：文ハンドルID

sql_serial_num：SQL文通番

57

SQLCancel

なし

58

SQLEndTran

CompletionType

tran_id：トランザクションID

59

データソースとの切断

SQLDisconnect

なし

60

SQLFreeHandle

注

*付きの変数名は出力値を出力します。それ以外の場合は，入力値を出力します。

(シンボル値)は，シンボル値に置き換えた文字列を出力します。それ以外の場合は，数値を出力します。不明な値の場合は，unknownを出力します。

トランザクションが決着済みのときなど，tran_id，stmt_htdl，およびsql_serial_numが取得できない場合は，各値に*を出力します。

オプション情報に2つ以上の情報を出力する場合，各情報をコンマで区切って出力します。

17.4.3　トレースレベル2の場合に出力される情報

トレースレベル2の場合の出力例を次に示します。

■出力例（トレースレベル2の場合）

各出力情報について次の表で説明します。

表17‒6　HADB ODBCドライバトレース情報に出力される情報（トレースレベル2の場合）

項番

出力項目

説明

1

［Trace Start Time］

HADB ODBCドライバトレース情報の出力を開始した日時を出力します。

日時の取得に失敗した場合，日付および時刻のすべての欄に0を出力します。

2

［Process ID］

プロセスIDを出力します。

3

［Module Name］

HADB ODBCドライバを使用するモジュール名称を出力します。モジュール名称が不明な場合は，unknownを出力します。

4

［Platform］

HADB ODBCドライバが動作しているプラットフォームを出力します。

5

［ODBC environment variables］

HADB ODBCドライバが使用している環境変数の値を出力します。環境変数に指定された値ではなく，HADB ODBCドライバで有効となっている値（デフォルト値やODBCデータソースアドミニストレーターで変更された値）が出力されます。

ADBCLTLANG

HADBクライアントで使用している文字コード

ADBODBTRC

HADB ODBCドライバトレース情報の出力有無

ADBODBTRCSIZE

HADB ODBCドライバトレースファイルの1ファイル当たりのサイズの上限値

ADBODBTRCPATH

HADB ODBCドライバトレースファイルを格納するフォルダの絶対パス

ADBODBTRCLV

トレースレベルの指定

ADBODBAPMODE

HADB ODBCドライバのアプリケーションモード

上記の環境変数については，「4.3.1　Windows版のHADBクライアントの場合」を参照してください。

6

ACCESS

アクセス種別を出力します。

[E]：関数の呼び出し

[R]：関数からの戻り

7

FUNCTION

ODBC関数名を出力します。

8

HANDLE

ODBC関数に引数として渡されたハンドルの値を出力します。

32ビット環境の場合は，プレフィックス0x(2桁)＋8桁で出力されます。

64ビット環境の場合は，16桁の16進数で出力されます。

9

START-TIME

ODBC関数の実行開始日時を出力します。

日時の取得に失敗した場合，日付および時刻のすべての欄に0を出力します。

10

END-TIME

ODBC関数の実行終了日時を出力します。

日時の取得に失敗した場合，日付および時刻のすべての欄に0を出力します。

アクセス種別が[E]の場合は，*を出力します。

11

RETURN

ODBC関数の実行結果であるSQLRETURN型の値を示すシンボル名を出力します。不明な値の場合は，シンボル名の代わりにunknownを出力します。

アクセス種別が[E]の場合は，*を出力します。

12

SQLSTATE

SQLSTATEを出力します。

ODBC関数を実行した結果，SQLSTATEが出力された場合に限り出力されます。

アクセス種別が[E]の場合は，*を出力します。

13

CON_ID

コネクション番号を出力します。

SQLトレース情報に出力されるコネクション番号と同じものが出力されます。

HADBサーバと接続する前の場合は，*を出力します。

14

CON_NUM

コネクション通番を出力します。

SQLトレース情報に出力されるコネクション通番と同じものが出力されます。

HADBサーバと接続する前の場合は，*を出力します。

15

［Input］

入力パラメタを出力します。次の形式で出力されます。

変数名(データ型名) = 値(シンボル名または参照先データ)

値の後ろの（）は省略されることがあります。

不明な値の場合は，シンボル名の代わりにunknownを出力します。

16

［Output］

出力パラメタを出力します。次の形式で出力されます。

変数名(データ型名) = 値(シンボル名または参照先データ)

値の後ろの（）は省略されることがあります。

不明な値の場合は，シンボル名の代わりにunknownを出力します。

ODBC関数が出力パラメタを持たない場合は，出力されません。

17

接続ユーザ名およびパスワード

接続ユーザ名およびパスワードを出力します。

パスワードは，*1個を出力します。

18

Connect Info

HADBサーバとの接続が確立したときに出力される情報を出力します。

19

［DataSourceName］

接続しているデータソース名を出力します。

データソースを使用していない場合，またはファイルDSNを使用している場合は，*を出力します。

20

［Client Definition File Path］

クライアント定義ファイルのパスを出力します。

21

［Hitachi Advanced Data Binder ODBC Driver Version］

HADB ODBCドライバのバージョンを出力します。

22

［ProcessID］

HADBクライアントのプロセスIDを出力します。

23

［SYSTEM］

HADB固有の情報を出力します。

詳細については，「表17‒7　［SYSTEM］に出力される情報」を参照してください。

ODBC関数ごとに出力情報が異なります。

24

<Message>

診断情報メッセージを出力します。

ODBC関数の実行結果が次の場合に出力されます。

SQL_ERROR

SQL_SUCCESS_WITH_INFO

SQL_NEED_DATA（SQLBrowseConnectの場合）

上記の表の［SYSTEM］に出力される情報を次の表に示します。

表17‒7　［SYSTEM］に出力される情報

項番

分類

ODBC関数名

［SYSTEM］に出力される情報

1

データソースとの接続

SQLAllocHandle

なし

2

SQLConnect(W)

3

SQLDriverConnect(W)

4

SQLBrowseConnect(W)

5

ドライバおよびデータソースの情報取得

SQLDataSources(W)

なし

6

SQLDrivers(W)

7

SQLGetInfo(W)

8

SQLGetFunctions

9

SQLGetTypeInfo(W)

10

ドライバオプションの設定および取得

SQLSetConnectAttr(W)

なし

11

SQLGetConnectAttr(W)

12

SQLSetEnvAttr

13

SQLGetEnvAttr

14

SQLSetStmtAttr(W)

15

SQLGetStmtAttr(W)

16

ディスクリプタ値の設定

SQLGetDescField(W)

なし

17

SQLGetDescRec(W)

18

SQLSetDescField(W)

19

SQLSetDescRec

20

SQLCopyDesc

21

SQL要求の作成

SQLPrepare(W)

tran_id：トランザクションID

stmt_hdl：文ハンドルID

sql_serial_num：SQL文通番

22

SQLBindParameter

なし

23

SQLGetCursorName(W)

24

SQLSetCursorName(W)

25

SQLDescribeParam

26

SQLNumParams

27

SQLの実行

SQLExecute

tran_id：トランザクションID

stmt_hdl：文ハンドルID

sql_serial_num：SQL文通番

28

SQLExecDirect(W)

29

SQLNativeSql(W)

なし

30

SQLParamData

31

SQLPutData

32

実行結果および実行結果情報の取得

SQLRowCount

なし

33

SQLNumResultCols

34

SQLDescribeCol(W)

35

SQLColAttribute(W)

36

SQLBindCol

37

SQLFetch

38

SQLFetchScroll

39

SQLGetData

40

SQLSetPos

41

SQLBulkOperations

42

SQLMoreResults

43

SQLGetDiagField(W)

44

SQLGetDiagRec(W)

45

データソースのシステム情報の取得

SQLColumnPrivileges(W)

なし

46

SQLColumns(W)

47

SQLForeignKeys(W)

48

SQLPrimaryKeys(W)

49

SQLProcedureColumns(W)

50

SQLProcedures(W)

51

SQLSpecialColumns(W)

52

SQLStatistics(W)

53

SQLTablePrivileges(W)

54

SQLTables(W)

55

SQL実行の終了

SQLFreeStmt

Option=SQL_CLOSEの場合に，次の情報を出力します。

tran_id：トランザクションID

stmt_hdl：文ハンドルID

sql_serial_num：SQL文通番

56

SQLCloseCursor

tran_id：トランザクションID

stmt_hdl：文ハンドルID

sql_serial_num：SQL文通番

57

SQLCancel

なし

58

SQLEndTran

tran_id：トランザクションID

59

データソースとの切断

SQLDisconnect

なし

60

SQLFreeHandle

注

トランザクションが決着済みのときなど，tran_id，stmt_htdl，およびsql_serial_numが取得できない場合は，各値に*を出力します。

17.5　HADB ODBCドライバトレース情報に関する注意事項

HADB ODBCドライバトレースが原因となるエラーまたは警告が発生した場合，HADB ODBCドライバトレース情報が出力されなくなることがあります。この場合でも，ODBC関数の実行に影響はありません。

HADB ODBCドライバトレース情報を出力している環境では，ODBCインタフェースを使用するすべてのAPに影響があるため，それを考慮するようにしてください。

HADB ODBCドライバトレース情報が出力されるたびにHADB ODBCドライバトレースファイルが単調増加していきます。そのため，出力先のディレクトリの容量不足によって，HADB ODBCドライバトレース情報が出力されなくなることがあります。

第5編　AP作成編【CLI関数】

18　APの作成

この章では，C言語およびC++言語でAPを設計，作成するときに考慮する必要がある基本事項について説明します。

18.1　APの設計

ここでは，APを設計するときに考慮する必要がある基本事項について説明します。

18.1.1　APの処理の流れ

データベースを操作する際のAPの処理の流れを次の図に示します。

図18‒1　データベースを操作する際のAPの処理の流れ

HADBサーバへの接続

APからデータベースを操作する場合は，APをHADBサーバに接続する必要があります。最初にコネクションを一意に識別するためのコネクションハンドルをAPに割り当てます。次にコネクションハンドルを利用してコネクションを確立します。これで，APがHADBサーバに接続されます。

同じAPから複数のコネクションを確立することもできます。ただし，同時に確立できるコネクションの数は決まっています。

なお，HADBサーバへの接続を行う際は，あらかじめHADBサーバを開始しておく必要があります。

HADBサーバへの接続が完了すると，APからSQL文を使ってデータベースを操作できます。

HADBサーバからの切り離し

APを終了する前に，APをHADBサーバから切り離してください。最初にコネクションを終了させて，次にコネクションハンドルを解放します。これで，APがHADBサーバから切り離されて，APを終了できます。

18.1.2　トランザクション制御

ここでは，トランザクションの開始または終了契機と，トランザクション制御（コミット処理およびロールバック処理）について説明します。

(1)　コネクションとトランザクションの関係

トランザクションを開始する前に，HADBサーバとのコネクションを確立してください。コネクションを確立しないと，トランザクションを開始できません。コネクションを確立するには，CLI関数のa_rdb_SQLConnect()を使用します。

また，確立したコネクションを終了すると，トランザクションはCOMMITされます（AP中でCOMMITを明示的に発行しなくても，コネクションを終了すると，トランザクションが正常終了します）。コネクションを終了するには，CLI関数のa_rdb_SQLDisconnect()を使用します。

(2)　トランザクションの開始と終了

APが文ハンドルを確保したときがトランザクションの開始となります。COMMITまたはROLLBACKが実行されたときがトランザクションの終了となります。トランザクションの開始と終了の例を次の図に示します。

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

トランザクションのCOMMITおよびROLLBACKは，CLI関数のa_rdb_SQLEndTran()で行います。

定義系SQLを実行した場合は，自動的にCOMMIT処理が行われます。

18.1.3　？パラメタを使用する際の処理の流れ

APの実行時に，入力値だけが異なる複数の操作系SQLの処理を行う場合，？パラメタを使用すると，SQL文の前処理を何度も行う必要がなくなり，APでSQL文を組み立てるときに比べて，処理効率を高めることができます。

？パラメタを使用する場合は，SQL文のAPから値を渡される個所に「？」を指定し，CLI関数のa_rdb_SQLPrepare()でSQL文を前処理します。その後，CLI関数のa_rdb_SQLBindParams()で？パラメタを設定することで，？パラメタを指定したSQL文を実行できます。

？パラメタを使用する際の処理の流れを次の図に示します。

図18‒3　？パラメタを使用する際の処理の流れ

？パラメタについては，マニュアルHADB　SQLリファレンスの変数（？パラメタ）を参照してください。

18.1.4　更新操作によるカーソルを使用した検索への影響

カーソルを使用した検索中に更新操作を行うと，タイミングによっては更新操作の結果が，検索の結果に反映されることがあります。更新操作の結果を検索の結果に反映させないようにするには，次のように運用してください。

カーソルを閉じたあとに，行の追加または更新を行う

追加または更新する行が，検索結果と一致しないようにデータや探索条件などを工夫する

カーソルを使用した検索中の更新操作の例を次に示します。

char *selSql = "SELECT * FROM T1 WHERE C1 BETWEEN 10 AND 20";
char *updSql = "UPDATE T1 SET C1=30 WHERE C1=20";

/* SELECT文の前処理 */
rtnc = a_rdb_SQLPrepare(cnctContext, hStmt1,selSql);
    ：

/* 行の取り出し */
rtnc = a_rdb_SQLFetch(cnctContext, hStmt1);                ...1

/* UPDATEの前処理 */
rtnc = a_rdb_SQLPrepare(cnctContext, hStmt2, updSql);

/* 行の更新 */
rtnc = a_rdb_SQLExecute(cnctContext, hStmt2);              ...2

/* 行の取り出し */
rtnc = a_rdb_SQLFetch(cnctContext, hStmt1);                ...3
    ：

［説明］

2.の時点でC1列が20の行を更新した場合，1.の時点での1回目のFETCH実行によって，すでにHADBサーバがAPとは非同期に検索処理を実行しています。そのため，タイミングによっては3.の時点でC1列が20の行を検索できないことがあります。すでにC1列が20の行の検索を完了している場合は，検索できます。

18.1.5　SQL文のエラー判定と対処方法

APで実行したSQL文が正常に実行されたかどうかを判定する必要があります。ここでは，SQL文が正常に実行されたかどうかを判定する方法と，エラーを検出した場合の対処方法について説明します。

(1)　SQL文のエラー判定方法

SQL文が実行されると，CLI関数の戻り値としてSQLCODEが返却されます。返却されたSQLCODEの値によってSQL文が正常に実行されたかどうかを判定します。SQLCODEの値とその意味を次の表に示します。

表18‒1　SQLCODEの値とその意味

項番

SQLCODEの値

意味

1

100

検索する行がなくなったことを意味しています。特に，次に示すことを判定するときに有効です。

FETCHで取り出す行がなくなったかどうか

INSERT，DELETE，またはUPDATEで更新対象の行があるかどうか

2

1

SQL文の処理は終了しましたが，処理の延長で警告が発生したことを意味しています。発生する警告を次に示します。

HADBサーバでサーバメッセージログファイルを格納しているディスクが満杯になった

クライアントメッセージログファイルを格納しているディスクが満杯になった

HADBサーバでSQLトレース情報を出力する際にメモリ不足を検知した

コネクション終了の延長でコミット処理に失敗し，ロールバック処理を行ってからコネクションを終了した

3

負の値

SQLエラーが発生したことを意味しています。

4

上記以外

SQL文が正常に実行されたことを意味しています。

CLI関数の戻り値については，「19.8　CLI関数の戻り値」を参照してください。

(2)　エラー検出時の対処方法

SQL文のエラーを検出した場合，次に示す順序で対処します。なお，ここではCLI関数を使用した場合の例について説明します。

(a)　戻り値の出力

CLI関数の戻り値を出力，または表示します。

(b)　エラーへの対処

SQL文を使用したデータ操作でエラーが発生した場合，次に示す手順で対処してください。

手順

SQL結果情報のメンバisInConnectの値を判定します。isInConnectの値によって対処方法が次のように異なります。

isInConnectの値がa_rdb_SQL_IS_IN_CONNECTの場合

手順の2に進んでください。

isInConnectの値がa_rdb_SQL_IS_NOT_IN_CONNECTの場合

致命的なエラーが発生したため，APがHADBサーバから切り離されました。クライアントメッセージログファイルに出力されたメッセージを確認し，HADBサーバが異常終了している場合は，HADB管理者に連絡してください。

SQL結果情報のメンバEndTranの値を判定します。EndTranの値によって対処方法が次の表に示すように異なります。

項番

EndTranの値

対処方法

1

a_rdb_SQL_ROLLBACKED

内部的にロールバックが発生したため，HADBサーバからの切り離しを行ってAPを終了してください。そのあと，戻り値を参考にエラーの対策を行ってください。

2

a_rdb_SQL_TRAN_NOT_ENDED

ROLLBACKを実行してトランザクションを取り消してから，HADBサーバからの切り離しを行いAPを終了してください。そのあと，戻り値を参考にエラーの対策を行ってください。

3

上記以外の場合

HADBサーバからの切り離しを行ってAPを終了してください。そのあと，戻り値を参考にエラーの対策を行ってください。

18.2　CLI関数の使い方

C言語またはC++言語でAPを作成する場合，CLI関数を使用できます。ここでは，CLI関数の基本的な使い方について説明します。

18.2.1　HADBサーバへの接続および切り離しをする場合

ここでは，CLI関数を使用したHADBサーバへの接続，およびHADBサーバからの切り離しについて説明します。

HADBサーバへの接続から切り離しまでの処理の流れを次の図に示します。

図18‒4　HADBサーバへの接続から切り離しまでの処理の流れ

注※

SQL文を使ったデータ操作については，「18.2.2　データを参照する場合」以降で説明します。

(1)　HADBサーバへの接続

HADBサーバに接続する場合は，次に示すCLI関数を使用します。

a_rdb_SQLAllocConnect()（コネクションハンドルの割り当て）

a_rdb_SQLConnect()（コネクションの確立）

(a)　コネクションハンドルの割り当て

コネクションを確立する前に，コネクションハンドルの割り当てが必要になります。コネクションハンドルを割り当てるにはa_rdb_SQLAllocConnect()を使用します。コネクションハンドルの割り当てが成功すると，戻り値としてa_rdb_RC_SQL_SUCCESSが返されます。a_rdb_SQLAllocConnect()の呼び出し例を次に示します。

a_rdb_SQLAllocConnect()の呼び出し例

signed short rtnc ;                 /* 戻り値 */
void  *hCnct ;                      /* コネクションハンドルアドレス */

/* コネクションハンドルの割り当て */
rtnc = a_rdb_SQLAllocConnect(&hCnct,
                        "/hadb/client.def",   /* クライアント定義ファイルパス */
                        NULL) ;

a_rdb_SQLAllocConnect()の第2引数にクライアント定義ファイルの絶対パスを指定することで，コネクションごとに異なるクライアント定義を使用できます。クライアント定義については，「4.4　クライアント定義の作成」を参照してください。

a_rdb_SQLAllocConnect()については，「19.2.1　a_rdb_SQLAllocConnect()（コネクションハンドルの割り当て）」を参照してください。

(b)　コネクションの確立

コネクションを確立するには，a_rdb_SQLConnect()を使用します。コネクションが確立されると，戻り値としてa_rdb_RC_SQL_SUCCESSが返されます。

a_rdb_SQLConnect()の呼び出し例を次に示します。

a_rdb_SQLConnect()の呼び出し例

a_rdb_SQLResultInfo_t  rsltInfo ;          /* SQL結果情報 */

/* コネクションの確立 */
rtnc = a_rdb_SQLConnect(hCnct,             /* コネクションハンドル */
                      "ADBUSER01",         /* 認可識別子 */
                      "password01",        /* パスワード */
                      &rsltInfo,
                      NULL) ;

SQL結果情報のアドレスをa_rdb_SQLConnect()の第4引数に指定することで，CLI関数の呼び出し単位で各種結果を返却するSQL結果情報を取得できます。SQL結果情報については，「19.7.6　a_rdb_SQLResultInfo_t構造体（SQL結果情報）」を参照してください。

a_rdb_SQLConnect()については，「19.2.2　a_rdb_SQLConnect()（コネクションの確立）」を参照してください。

(2)　HADBサーバからの切り離し

HADBサーバからの切り離しを行う場合は，次に示すCLI関数を使用します。

a_rdb_SQLDisconnect()（コネクションの終了）

a_rdb_SQLFreeConnect()（コネクションハンドルの解放）

(a)　コネクションの終了

コネクションを終了するには，a_rdb_SQLDisconnect()を使用します。a_rdb_SQLDisconnect()の呼び出し例を次に示します。

a_rdb_SQLDisconnect()の呼び出し例

/* コネクションの終了 */
rtnc = a_rdb_SQLDisconnect(hCnct, NULL) ;

a_rdb_SQLDisconnect()については，「19.2.4　a_rdb_SQLDisconnect()（コネクションの終了）」を参照してください。

(b)　コネクションハンドルの解放

コネクションを終了したあとに，コネクションハンドルを解放してください。コネクションハンドルを解放するには，a_rdb_SQLFreeConnect()を使用します。a_rdb_SQLFreeConnect()の呼び出し例を次に示します。

a_rdb_SQLFreeConnect()の呼び出し例

/* コネクションハンドルの解放 */
rtnc = a_rdb_SQLFreeConnect(hCnct, NULL) ;

a_rdb_SQLFreeConnect()については，「19.2.5　a_rdb_SQLFreeConnect()（コネクションハンドルの解放）」を参照してください。

18.2.2　データを参照する場合

データの参照方法の例を説明します。ここでは，カーソルを使用した行の取り出し方法について説明します。カーソルを使用した行の取り出し方法を次の図に示します。

図18‒5　カーソルを使用した行の取り出し方法

各処理の詳細を次に説明します。

(1)　文ハンドルの確保

SQL文を実行する前に，a_rdb_SQLAllocStmt()を使用して文ハンドルを確保します。文ハンドルを確保できた場合，戻り値としてa_rdb_RC_SQL_SUCCESSが返されます。文ハンドルの確保例を次に示します。

文ハンドルの確保例

void  *hStmt ;                           /* 文ハンドルアドレス */

/* 文ハンドルの確保 */
rtnc = a_rdb_SQLAllocStmt(hCnct,
                          &hStmt,
                          NULL) ;

a_rdb_SQLAllocStmt()については，「19.4.1　a_rdb_SQLAllocStmt()（文ハンドルの確保）」を参照してください。

(2)　SQL文の前処理

次に，「(1)　文ハンドルの確保」で取得した文ハンドルにSQL文を割り当てます。取得した文ハンドルにSQL文を割り当てるには，a_rdb_SQLPrepare()を使用してSQL文の前処理を実行します。SELECT文の前処理の例を次に示します。

SELECT文の前処理の例

/* SELECT文の前処理 */
rtnc = a_rdb_SQLPrepare(hCnct,
                        hStmt,
                        "SELECT C1,C2,C3 FROM T1",
                        NULL) ;

a_rdb_SQLPrepare()については，「19.4.14　a_rdb_SQLPrepare()（SQL文の前処理）」を参照してください。

(3)　検索結果列数の取得

動的にSQL文を実行するなど，APの作成時に検索結果列数（検索結果として出力される列の数）が確定していない場合，a_rdb_SQLNumResultCols()を使用して検索結果列数を取得します。検索結果列数の取得例を次に示します。

検索結果列数の取得例

/* 検索結果列数の取得 */
rtnc = a_rdb_SQLNumResultCols(hCnct,
                              hStmt,
                              &colCount,    /* 列数 */
                              NULL) ;

a_rdb_SQLNumResultCols()については，「19.4.13　a_rdb_SQLNumResultCols()（検索結果列数の取得）」を参照してください。

(4)　検索結果列の情報取得

動的にSQL文を実行するなど，APの作成時に検索結果列の列名，データ型，またはデータ長などの列情報が確定していない場合，a_rdb_SQLDescribeCols()を使用して検索結果列の情報を取得します。a_rdb_SQLDescribeCols()で取得できる情報を次に示します。

検索結果列の列名

検索結果列のデータ型

検索結果列の最大要素数

検索結果列のデータ長

検索結果列の情報取得例を次に示します。

検索結果列の情報取得例

/* 検索結果列の情報の取得 */
rtnc = a_rdb_SQLDescribeCols(hCnct,
                             hStmt,
                             colCount,           /* 検索結果列数 */
                             &(colInf[0]),       /* 全検索結果列の情報返却領域 */
                             NULL) ;

a_rdb_SQLDescribeCols()については，「19.4.6　a_rdb_SQLDescribeCols()（検索結果列の情報取得）」を参照してください。

(5)　検索結果列の関連づけ

検索結果列と，検索結果列から取り出した値を格納する領域の関連づけ（検索結果列の関連づけ）を行います。検索結果列の関連づけを行うと，a_rdb_SQLFetch()を使用してカーソルを操作する際に，検索結果列の値が関連づけた領域に自動的に格納されます。

検索結果列の関連づけを行うには，a_rdb_SQLBindCols()を使用します。検索結果列の関連づけの例を次に示します。

検索結果列の関連づけの例

/* 検索結果列の関連づけ */
rtnc = a_rdb_SQLBindCols(hCnct,
                         hStmt,
                         colCount,           /* 検索結果列数 */
                         &(colInf[0]),       /* 全列割り当て格納領域 */
                         NULL) ;

a_rdb_SQLBindCols()については，「19.4.3　a_rdb_SQLBindCols()（検索結果列の関連づけ）」を参照してください。

(6)　SQL文の実行（カーソルのオープン）

a_rdb_SQLExecute()を使用して，前処理したSQL文を実行します。a_rdb_SQLExecute()の引数に，実行するSQL文の文ハンドルを指定します。SQL文が正常に実行されると，戻り値としてa_rdb_RC_SQL_SUCCESSが返され，カーソルがオープンします。SQL文の実行例を次に示します。

SQL文の実行例

/* SQL文の実行 */
rtnc = a_rdb_SQLExecute(hCnct,
                        hStmt,
                        NULL) ;

a_rdb_SQLExecute()については，「19.4.9　a_rdb_SQLExecute()（前処理したSQL文の実行）」を参照してください。

(7)　カーソルを使用した行の取り出し

SQL文の実行によってオープンされたカーソルを使用して行を取り出すには，a_rdb_SQLFetch()を使用します。行の取り出しが成功すると，戻り値としてa_rdb_RC_SQL_SUCCESSが返されます。カーソルを使用した行の取り出し例を次に示します。

カーソルを使用した行の取り出し例

/* カーソルを使用した行の取り出し */
rtnc = a_rdb_SQLFetch(hCnct,
                      hStmt,
                      NULL) ;

a_rdb_SQLFetch()については，「19.4.10　a_rdb_SQLFetch()（行の取り出し）」を参照してください。

(8)　取り出したデータの変換

取り出したデータが，SQLのDECIMAL型，NUMERIC型，BINARY型，VARBINARY型，DATE型，TIME型，またはTIMESTAMP型のデータの場合，CLI関数を使用してC言語またはC++言語の文字列データに変換できます。DECIMAL型のデータを変換する例を次に示します。

データの変換例

#define PRECISION 6
#define SCALE 3

unsigned char data_decimal[4];
char data_char[PRECISION+4];

/* DECIMAL型データを変換 */
rtnc = a_rdb_CNV_DECIMALchar(data_decimal,  /* 出力データの先頭アドレス */
                            PRECISION,      /* 出力データの精度 */
                            SCALE,          /* 出力データの位取り */
                            data_char,      /* 変換後データの格納領域アドレス */
                            (PRECISION+4),  /*変換後データの格納領域長 */
                            NULL);

DECIMAL型またはNUMERIC型のデータを変換する場合は，a_rdb_CNV_DECIMALchar()を使用します。a_rdb_CNV_DECIMALchar()については，「19.5.9　a_rdb_CNV_DECIMALchar()（DECIMAL型またはNUMERIC型データの変換）」を参照してください。

BINARY型のデータを変換する場合は，a_rdb_CNV_BINARYchar()を使用します。a_rdb_CNV_BINARYchar()については，「19.5.7　a_rdb_CNV_BINARYchar()（BINARY型データの変換）」を参照してください。

VARBINARY型のデータを変換する場合は，a_rdb_CNV_VARBINARYchar()を使用します。a_rdb_CNV_VARBINARYchar()については，「19.5.12　a_rdb_CNV_VARBINARYchar()（VARBINARY型データの変換）」を参照してください。

DATE型のデータを変換する場合は，a_rdb_CNV_DATEchar()を使用します。a_rdb_CNV_DATEchar()については，「19.5.8　a_rdb_CNV_DATEchar()（DATE型データの変換）」を参照してください。

TIME型のデータを変換する場合は，a_rdb_CNV_TIMEchar()を使用します。a_rdb_CNV_TIMEchar()については，「19.5.10　a_rdb_CNV_TIMEchar()（TIME型データの変換）」を参照してください。

TIMESTAMP型のデータを変換する場合は，a_rdb_CNV_TIMESTAMPchar()を使用します。a_rdb_CNV_TIMESTAMPchar()については，「19.5.11　a_rdb_CNV_TIMESTAMPchar()（TIMESTAMP型データの変換）」を参照してください。

(9)　カーソルのクローズ

a_rdb_SQLCloseCursor()を使用して，カーソルをクローズします。カーソルのクローズ例を次に示します。

カーソルのクローズ例

/* カーソルのクローズ */
rtnc = a_rdb_SQLCloseCursor(hCnct,
                            hStmt,
                            NULL) ;

a_rdb_SQLCloseCursor()については，「19.4.5　a_rdb_SQLCloseCursor()（カーソルのクローズ）」を参照してください。

(10)　文ハンドルの解放

a_rdb_SQLFreeStmt()をして，確保した文ハンドルを解放します。文ハンドルの解放例を次に示します。

文ハンドルの解放例

/* 文ハンドルの解放 */
rtnc = a_rdb_SQLFreeStmt(hCnct,
                         hStmt,
                         NULL) ;

重要

COMMITまたはROLLBACKが実行されると，文ハンドルが解放されます。この場合は，a_rdb_SQLFreeStmt()を実行しないでください。

a_rdb_SQLFreeStmt()については，「19.4.11　a_rdb_SQLFreeStmt()（文ハンドルの解放）」を参照してください。

18.2.3　？パラメタを使用する場合

？パラメタを指定したSQL文を実行する場合は，SQL文の割り当て，SQL文の前処理，？パラメタの設定，およびSQL文の実行という手続きを行います。？パラメタを指定したときのSQL文実行の流れを次の図に示します。

図18‒6　？パラメタを指定したときのSQL文実行の流れ

文ハンドルの確保，SQL文の前処理，およびSQL文の実行方法については，「18.2.2　データを参照する場合」で説明した方法と同じです。ここでは，？パラメタ数の取得，？パラメタ情報の取得，入力データのSQLのデータ型への変換，および？パラメタの設定方法について説明します。

(1)　？パラメタ数の取得

動的にSQL文を実行するなど，APの作成時に？パラメタの数が確定していない場合は，a_rdb_SQLNumParams()を使用して？パラメタ数を取得します。？パラメタ数の取得例を次に示します。

？パラメタ数の取得例

/* ？パラメタ数の取得 */
rtnc = a_rdb_SQLNumParams(hCnct,
                          hStmt,
                          &paramCount,    /* ？パラメタの数*/
                          NULL) ;

a_rdb_SQLNumParams()については，「19.4.12　a_rdb_SQLNumParams()（？パラメタ数の取得）」を参照してください。

(2)　？パラメタ情報の取得

動的にSQL文を実行するなど，APの作成時に？パラメタのデータ型やデータ長などの情報が確定していない場合は，a_rdb_SQLDescribeParams()を使用して？パラメタの情報を取得します。a_rdb_SQLDescribeParams()で取得できる情報は次のとおりです。

？パラメタのデータ型

？パラメタの最大要素数

？パラメタのデータ長

？パラメタ情報の取得例を次に示します。

？パラメタ情報の取得例

/* ？パラメタ情報の取得 */
rtnc = a_rdb_SQLDescribeParams(hCnct,
                               hStmt,
                               paramCount,       /* ？パラメタの数 */
                               &(paramInfo[0]),  /* 全？パラメタ情報返却領域 */
                               NULL) ;

a_rdb_SQLDescribeParams()については，「19.4.7　a_rdb_SQLDescribeParams()（？パラメタの情報取得）」を参照してください。

(3)　入力データのSQLのデータ型への変換

？パラメタの入力データが，SQLのDECIMAL型，NUMERIC型，BINARY型，VARBINARY型，DATE型，TIME型，またはTIMESTAMP型のデータの場合，CLI関数を使用してC言語またはC++言語の文字列データから該当するデータ型に変換できます。C言語またはC++言語の文字列データをDECIMAL型のデータに変換する例を次に示します。

データの変換例

#define PRECISION 6
#define SCALE 3

char data_char[]="-123.567";
unsigned char data_decimal[4];

/* DECIMAL型データに変換 */
rtnc = a_rdb_CNV_charDECIMAL(data_char,          /* 変換するデータの先頭アドレス */
                            (unsigned short)strlen(data_char), /* 変換するデータ長 */
                            PRECISION,           /* 入力データの精度 */
                            SCALE,               /* 入力データの位取り */
                            data_decimal,        /* 入力データの格納領域アドレス */
                            4,                   /* 入力データの格納領域長 */
                            NULL);

DECIMAL型またはNUMERIC型のデータに変換する場合は，a_rdb_CNV_charDECIMAL()を使用します。a_rdb_CNV_charDECIMAL()については，「19.5.3　a_rdb_CNV_charDECIMAL()（DECIMAL型またはNUMERIC型データへの変換）」を参照してください。

BINARY型のデータに変換する場合は，a_rdb_CNV_charBINARY()を使用します。a_rdb_CNV_charBINARY()については，「19.5.1　a_rdb_CNV_charBINARY()（BINARY型データへの変換）」を参照してください。

VARBINARY型のデータに変換する場合は，a_rdb_CNV_charVARBINARY()を使用します。a_rdb_CNV_charVARBINARY()については，「19.5.6　a_rdb_CNV_charVARBINARY()（VARBINARY型データへの変換）」を参照してください。

DATE型のデータに変換する場合は，a_rdb_CNV_charDATE()を使用します。a_rdb_CNV_charDATE()については，「19.5.2　a_rdb_CNV_charDATE()（DATE型データへの変換）」を参照してください。

TIME型のデータに変換する場合は，a_rdb_CNV_charTIME()を使用します。a_rdb_CNV_charTIME()については，「19.5.4　a_rdb_CNV_charTIME()（TIME型データへの変換）」を参照してください。

TIMESTAMP型のデータに変換する場合は，a_rdb_CNV_charTIMESTAMP()を使用します。a_rdb_CNV_charTIMESTAMP()については，「19.5.5　a_rdb_CNV_charTIMESTAMP()（TIMESTAMP型データへの変換）」を参照してください。

(4)　？パラメタの設定

a_rdb_SQLBindParams()を使用して？パラメタを設定します。設定が正常に完了すると，戻り値としてa_rdb_RC_SQL_SUCCESSが返されます。？パラメタの設定例を次に示します。

？パラメタの設定例

/* ？パラメタの設定 */
rtnc = a_rdb_SQLBindParams(hCnct,
                           hStmt,
                           paramCount,       /* ？パラメタの数 */
                           &(paramInfo[0]),  /* 全？パラメタ設定用領域 */
                           NULL) ;

a_rdb_SQLBindParams()については，「19.4.4　a_rdb_SQLBindParams()（？パラメタの関連づけ）」を参照してください。

18.2.4　データを追加，更新，または削除する場合

更新系SQLによるデータの追加，更新，または削除は，SELECTと同様に文ハンドルを確保してからSQL文の前処理を行い，そのあとにa_rdb_SQLExecute()を使用してSQL文を実行します。

データの更新および削除の処理の流れを次の図に示します。

図18‒7　データの更新および削除の処理の流れ

注

a_rdb_SQLPrepare()で事前にSQL文を前処理していない場合でも，a_rdb_SQLExecDirect()でSQL文の前処理と実行を同時に行うことができます。

なお，？パラメタを使用する場合は，a_rdb_SQLBindParams()またはa_rdb_SQLBindArrayParams()を使用して？パラメタの関連づけをする必要があります。a_rdb_SQLBindParams()については「19.4.4　a_rdb_SQLBindParams()（？パラメタの関連づけ）」を，a_rdb_SQLBindArrayParams()については「19.4.2　a_rdb_SQLBindArrayParams()（？パラメタの一括関連づけ）」を参照してください。

データの更新および削除の実行例を次に示します。

データの更新および削除の実行例

/* 文ハンドルの確保 */
rtnc = a_rdb_SQLAllocStmt(hCnct, &hStmt, NULL) ;
/* INSERT文の準備 */
rtnc = a_rdb_SQLPrepare(hCnct,
                        hStmt,
                        "INSERT INTO TABLE1 VALUES ('A','B','C')",
                        NULL) ;
/* SQL文の実行 */
rtnc = a_rdb_SQLExecute(hCnct, hStmt, NULL) ;
/* DELETEの実行 */
rtnc = a_rdb_SQLExecDirect(hCnct,
                           hStmt,
                           "DELETE FROM TABLE1",
                           NULL) ;

a_rdb_SQLExecDirect()については，「19.4.8　a_rdb_SQLExecDirect()（SQL文の前処理および実行）」を参照してください。

18.2.5　実行中のSQLをキャンセルする場合

実行中のSQLをa_rdb_SQLCancel()でキャンセルできます。キャンセルできるSQL（CLI関数）を次に示します。

a_rdb_SQLCloseCursor()

a_rdb_SQLExecDirect()

a_rdb_SQLExecute()

a_rdb_SQLFetch()

a_rdb_SQLPrepare()

a_rdb_SQLCancel()は，SQLを処理しているスレッドとは別のスレッドで実行します。SQLのキャンセルの実行例を次に示します。

SQLの実行スレッド

rtnc = a_rdb_SQLAllocStmt(hCnct, &hStmt, NULL) ;
/* DELETE文の実行 */
rtnc = a_rdb_SQLExecDirect(hCnct,
                           hStmt,
                           "DELETE FROM TABLE1",
                           NULL) ;
/* キャンセルされたかどうかをチェック */
if ( rtnc == -955 )
{
  /* キャンセル後の処理 */
}
else ;

SQLのキャンセルの実行例（別スレッドで実行）

/* SQLキャンセル機能の実行 */
rtnc = a_rdb_SQLCancel(hCnct, NULL) ;
                  /* キャンセル対象のSQLを実行しているコネクションと */
                  /* 同様のコネクションハンドルを指定 */

SQLのキャンセルが成功した場合，SQL処理を中断してトランザクションをロールバックしたあとにSQLCODEが返却されます。

a_rdb_SQLCancel()については，「19.3.1　a_rdb_SQLCancel()（SQLのキャンセル）」を参照してください。

なお，キャンセル処理はa_rdb_SQLCancel()とは非同期に実行されるため，a_rdb_SQLCancel()の正常終了はキャンセル処理の完了（成功）を意味するものではありません。

18.2.6　CLI関数を使用する場合の留意事項

ここでは，CLI関数の引数に指定するアドレスの有効期間および境界位置調整について説明します。

(1)　領域の有効期間

CLI関数の引数に，アドレスが指す領域が解放されている無効なアドレスが指定されている場合，動作は保証されません。

CLI関数にアドレスを指定する引数のうち，次に示す引数は処理の開始から終了までの間，有効であることを保証する必要があります。

HADBサーバへの接続から切り離しまでの間，有効であることを保証する必要がある引数

次に示す引数が該当します。

各CLI関数のConnectionHandle

a_rdb_SQLConnect()のResultInfo（SQL結果情報を取得する場合）

カーソルのオープンからクローズまでの間，有効であることを保証する必要がある引数

次に示す引数が該当します。

a_rdb_SQLBindCols()のColumnInfo構造体のメンバTargetValueおよびStrLen_or_Ind

a_rdb_SQLBindParams()およびa_rdb_SQLBindArrayParams()のParameterInfo構造体のメンバParameterValueおよびInd

a_rdb_SQLBindParams()およびa_rdb_SQLBindArrayParams()の引数については，カーソルを使用しないSQLを前処理する場合でも，a_rdb_SQLExecute()を実行するまで領域が有効であることを保証してください。

なお，トランザクションの開始から終了までの間，有効であることを保証する必要がある引数はありません。

(2)　境界位置調整

検索結果のデータや，？パラメタの入力値などを格納する領域の先頭アドレスは，SQLのデータ型ごとに次の表に従って境界位置調整を行ってください。

表18‒2　境界位置調整

項番

SQLデータ型

境界位置調整

1

VARBINARY型

2バイト境界

2

SMALLINT型

4バイト境界

3

VARCHAR型

4

INTEGER型

8バイト境界

5

DOUBLE PRECISION型

6

FLOAT型

18.3　APのコンパイルとリンケージ

APの言語に従ったコンパイラで，ソースプログラムをコンパイルおよびリンケージしてください。コンパイルおよびリンケージの方法については，各言語に対応するコンパイラのマニュアルを参照してください。また，OSのReadmeファイルも参照してください。

APをコンパイルおよびリンケージする際は，次の表に従ってHADBクライアントが提供しているライブラリから開発環境に合わせたものを指定してください。

表18‒3　APをコンパイルおよびリンケージする際に指定するライブラリ

項番

開発環境（OS）

指定するライブラリ

1

Windows

adbclt.lib（64ビット版のHADBクライアントを使用している場合）

adbclt32.lib（32ビット版のHADBクライアントを使用している場合）

2

Linux

libadbclt.so

19　CLI関数

この章では，HADBが提供しているCLI関数の機能と文法について説明します。

19.1　CLI関数の一覧と共通規則

ここでは，CLI関数の一覧と共通規則について説明します。

19.1.1　CLI関数の一覧

HADBでは，次の表に示すCLI関数を提供しています。

表19‒1　CLI関数の一覧

項番

分類

CLI関数

機能

1

HADBサーバへの接続および切り離し時に使用するCLI関数

a_rdb_SQLAllocConnect()

コネクションハンドルを割り当てます。

2

a_rdb_SQLConnect()

HADBサーバとのコネクションを確立します。

3

a_rdb_SQLSetConnectAttr()

コネクション属性を設定します。

4

a_rdb_SQLDisconnect()

コネクションを終了します。

5

a_rdb_SQLFreeConnect()

コネクションハンドルを解放します。

6

トランザクションの制御時に使用するCLI関数

a_rdb_SQLCancel()

処理中のSQLをキャンセルします。

7

a_rdb_SQLEndTran()

トランザクションを終了します。

8

SQLの実行時に使用するCLI関数

文ハンドルの確保・解放

a_rdb_SQLAllocStmt()

文ハンドルを確保します。

9

a_rdb_SQLFreeStmt()

文ハンドルを解放します。

10

SQL文の前処理，実行，カーソル操作，行の取り出し

a_rdb_SQLPrepare()

SQL文の前処理を実行します。

11

a_rdb_SQLExecute()

前処理したSQL文を実行します。

12

a_rdb_SQLExecDirect()

SQL文を前処理して実行します。

13

a_rdb_SQLFetch()

取り出す行を示すカーソルの位置を次の行に進め，その行の列の値を取り出し相手リストで指定した取り出し先に読み込みます。

14

a_rdb_SQLCloseCursor()

カーソルをクローズします。

15

検索結果列

a_rdb_SQLNumResultCols()

検索結果列数を取得します。

16

a_rdb_SQLDescribeCols()

検索結果列の情報を取得します。

17

a_rdb_SQLBindCols()

検索結果列と，その列から取り出した値を格納する領域を結合します（関連づけます）。

18

？パラメタ

a_rdb_SQLNumParams()

SQL文中の？パラメタの数を取得します。

19

a_rdb_SQLDescribeParams()

SQL文中の？パラメタの情報を取得します。

20

a_rdb_SQLBindParams()

SQL文中の？パラメタの値を設定する領域の結合（関連づけ）を行います。

21

a_rdb_SQLBindArrayParams()

SQL文中の？パラメタの値を設定する領域の結合（関連づけ）を行います。SQL文中の複数組の？パラメタの値をまとめて結合します。

22

データ型の変換時に使用するCLI関数

C言語またはC++言語の文字列データをSQLのデータ型に変換

a_rdb_CNV_charBINARY()

C言語またはC++言語の文字列データ（2進数または16進数）をSQLのBINARY型のデータに変換します。

23

a_rdb_CNV_charDATE()

C言語またはC++言語の文字列データをSQLのDATE型のデータに変換します。

24

a_rdb_CNV_charDECIMAL()

C言語またはC++言語の文字列データを，SQLのDECIMAL型またはNUMERIC型のデータに変換します。

25

a_rdb_CNV_charTIME()

C言語またはC++言語の文字列データをSQLのTIME型のデータに変換します。

26

a_rdb_CNV_charTIMESTAMP()

C言語またはC++言語の文字列データをSQLのTIMESTAMP型のデータに変換します。

27

a_rdb_CNV_charVARBINARY()

C言語またはC++言語の文字列データ（2進数または16進数）をSQLのVARBINARY型のデータに変換します。

28

SQLのデータ型をC言語またはC++言語の文字列データに変換

a_rdb_CNV_BINARYchar()

SQLのBINARY型のデータをC言語またはC++言語の文字列データに変換します。

29

a_rdb_CNV_DATEchar()

SQLのDATE型のデータをC言語またはC++言語の文字列データに変換します。

30

a_rdb_CNV_DECIMALchar()

SQLのDECIMAL型またはNUMERIC型のデータを，C言語またはC++言語の文字列データに変換します。

31

a_rdb_CNV_TIMEchar()

SQLのTIME型のデータをC言語またはC++言語の文字列データに変換します。

32

a_rdb_CNV_TIMESTAMPchar()

SQLのTIMESTAMP型のデータをC言語またはC++言語の文字列データに変換します。

33

a_rdb_CNV_VARBINARYchar()

SQLのVARBINARY型のデータをC言語またはC++言語の文字列データに変換します。

これらのCLI関数は，C言語またはC++言語で記述したソースプログラムに，HADBクライアントが提供するヘッダファイルおよびクライアントライブラリを取り込むことで利用できます。HADBクライアントが提供するヘッダファイルおよびクライアントライブラリを次の表に示します。

表19‒2　HADBクライアントが提供するヘッダファイルおよびクライアントライブラリ

項番

使用するCLI関数

使用するヘッダファイルおよびクライアントライブラリ

ヘッダファイル

クライアントライブラリ

1

HADBサーバへの接続および切り離し時に使用するCLI関数

$ADBDIR/include/adbcli.h

$ADBDIR/include/adbtypes.h

64ビット版のHADBクライアントを使用している場合

%ADBCLTDIR%¥client¥lib¥adbclt.lib

32ビット版のHADBクライアントを使用している場合

%ADBCLTDIR%¥client¥lib¥adbclt32.lib

Linuxの場合

$ADBDIR/client/lib/libadbclt.so

2

トランザクションの制御時に使用するCLI関数

3

SQLの実行時に使用するCLI関数

4

データ型の変換時に使用するCLI関数

$ADBDIR/include/adbcnv.h

注　使用するCLI関数ごとにヘッダファイルが異なります。

19.1.2　共通規則

CLI関数の共通規則を次に示します。

(1)　コネクションハンドル

HADBサーバとのコネクションを一意に識別するために，コネクションハンドルを使用します。このコネクションハンドルを，HADBサーバへの接続から切り離しまでの間，有効にし続ける必要があります。コネクションハンドルを有効にし続けないと，動作は保証されません。コネクションハンドルを有効にし続けるには，a_rdb_SQLAllocConnect()で割り当てたコネクションハンドルをa_rdb_SQLFreeConnect()で解放するまでの間，各CLI関数の引数に同じコネクションハンドルを指定する必要があります。

(2)　SQL結果情報

CLI関数の呼び出し単位で各種SQL結果情報を取得できます。SQL結果情報を取得する場合，SQL結果情報の領域はHADBサーバへの接続から切り離しまでの間，解放しないでください。

(3)　文ハンドル

割り当てたSQL文を一意に識別するために，文ハンドルを使用します。COMMITまたはROLLBACKが行われると，文ハンドルは解放されます。

なお，同一コネクションで割り当てた複数の文ハンドルでSQL文を同時に実行した場合に，最大SQL処理リアルスレッド数分の処理リアルスレッドが使用できないときは，SQL文の実行要求がエラーとなります（待ち状態にはなりません）。

最大SQL処理リアルスレッド数は，次のオペランドで指定しています。

サーバ定義のadb_sql_exe_max_rthd_num

クライアント定義のadb_sql_exe_max_rthd_num

(4)　暗黙カーソル

表の検索結果は，通常複数行にわたります。APで複数行の検索結果を1行ずつ取り出すために最新の取り出し位置を保持するものをカーソルといいます。カーソルは，データの検索で使用します。

SELECT文の前処理時にカーソルが割り当てられて，SELECT文の実行時にカーソルがオープンされます。COMMITまたはROLLBACKが実行されると，オープンしているカーソルはすべてクローズされます。

19.2　HADBサーバへの接続および切り離し時に使用するCLI関数

ここでは，HADBサーバへの接続時，およびHADBサーバからの切り離し時に使用するCLI関数について説明します。

19.2.1　a_rdb_SQLAllocConnect()（コネクションハンドルの割り当て）

(1)　機能

HADBサーバとのコネクションを一意に識別するためのコネクションハンドルを割り当てます。

(2)　形式

signed short a_rdb_SQLAllocConnect
(
  void                         **ConnectionHandle,   /* Out */
  char                          *ClientDefPath,      /* In  */
  void                          *Option              /* In  */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを設定するアドレスを指定します。

ClientDefPath：

クライアント定義ファイルのパスをC言語またはC++言語の文字列表現で指定します。

NULLを指定した場合，%ADBCLTDIR%¥conf¥client.def※が指定されたと仮定します。

注※　Linux版のHADBクライアントの場合は，$ADBCLTDIR/conf/client.defになります。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLAllocConnect()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

コネクションハンドルの割り当ては成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLAllocConnect()は実行できません。

不正なクライアント定義ファイルのパスを指定した場合

クライアント定義の指定内容に誤りがある場合

コネクションハンドルの割り当てに失敗した場合

19.2.2　a_rdb_SQLConnect()（コネクションの確立）

(1)　機能

HADBサーバとのコネクションを確立します。

(2)　形式

signed short a_rdb_SQLConnect
(
  void                          *ConnectionHandle,   /* In */
  char                          *UserID,             /* In */
  char                          *Password,           /* In */
  a_rdb_SQLResultInfo_t         *ResultInfo,         /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

UserID：

HADBサーバに接続する認可識別子をC言語またはC++言語の文字列表現で指定します。

Password：

UserIDで指定した認可識別子のパスワードをC言語またはC++言語の文字列表現で指定します。

パスワードの規則については，マニュアルHADB　SQLリファレンスのCREATE USER文の指定形式および規則を参照してください。

ResultInfo：

CLI関数の呼び出し単位で各種結果を返却するSQL結果情報のアドレスを指定します。a_rdb_SQLDisconnect()が発行されるまで，指定した領域にSQL結果情報が返却されます。

アドレスがNULLの場合，SQL結果情報は返却されません。

a_rdb_SQLResultInfo_t構造体については，「19.7.6　a_rdb_SQLResultInfo_t構造体（SQL結果情報）」を参照してください。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLConnect()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

コネクションハンドルの確立には成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLConnect()は実行できません。

CONNECT権限を持たないHADBユーザが実行した場合

コネクションがすでに確立されている場合

不正な認可識別子を指定した場合

HADBサーバの文字コードと異なる文字コードがADBCLTLANGに指定されている場合

HADBサーバへの接続数が，最大同時接続数に達している場合

19.2.3　a_rdb_SQLSetConnectAttr()（コネクション属性の設定）

(1)　機能

指定したコネクションハンドルのコネクション属性を設定します。

(2)　形式

signed short a_rdb_SQLSetConnectAttr
(
  void                          *ConnectionHandle,    /* In */
  signed short                   Attribute,           /* In */
  void                          *Value,               /* In */
  void                          *Option               /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

Attribute：

次に示すどれかのコネクション属性を指定します。

トランザクション隔離性水準を設定する場合：

a_rdb_SQL_ATTR_TXN_ISOLATION

ORDER BY句を指定したSELECT文の文字データの並び替え順序を設定する場合：

a_rdb_SQL_ATTR_ORDER_MODE

トランザクションアクセスモードを設定する場合：

a_rdb_SQL_ATTR_ACCESS_MODE

Value：

属性情報を格納したアドレスを指定します。

・トランザクション隔離性水準を設定する場合

次に示すどれかの値が設定されているunsigned shortの領域のアドレスを指定します。

READ COMMITTEDの場合：

a_rdb_SQL_TXN_READ_COMMITTED

REPEATABLE READの場合：

a_rdb_SQL_TXN_REPEATABLE_READ

指定値を未設定（このCLI関数を使用して一度もトランザクション隔離性水準を設定していない状態）に変更する場合：

a_rdb_SQL_TXN_UNSPECIFIED

・ORDER BY句を指定したSELECT文の文字データの並び替え順序を設定する場合

次に示すどれかの値が設定されているunsigned shortの領域のアドレスを指定します。

文字データをバイトコード順で並び替える場合：

a_rdb_SQL_ORDER_MODE_BYTE

文字データをソートコード順（ISO/IEC14651:2011準拠）で並び替える場合：

a_rdb_SQL_ORDER_MODE_ISO

指定値を未設定（このCLI関数を使用して一度も文字データの並び替え順序を設定していない状態）に変更する場合：

a_rdb_SQL_ORDER_MODE_UNSPECIFIED

・トランザクションアクセスモードを設定する場合

次に示すどれかの値が設定されているunsigned shortの領域のアドレスを指定します。

読み書き可能モードの場合：

a_rdb_SQL_ACCESS_MODE_READ_WRITE

読み取り専用モードの場合：

a_rdb_SQL_ACCESS_MODE_READ_ONLY

指定値を未設定（このCLI関数を使用して一度もトランザクションアクセスモードを設定していない状態）に変更する場合：

a_rdb_SQL_ACCESS_MODE_UNSPECIFIED

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLSetConnectAttr()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

コネクション属性の設定には成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLSetConnectAttr()は実行できません。

コネクションが確立されていない場合

トランザクションが決着していない場合

無効なコネクション属性を指定した場合

無効なトランザクション隔離性水準を指定した場合

無効な文字データの並び替え順序を指定した場合

無効なトランザクションアクセスモードを指定した場合

トランザクション隔離性水準は，次に示す優先順位に従って決定されます。番号が小さいほど優先順位が高くなります。1と2では1の指定が優先されます。

1．a_rdb_SQLSetConnectAttr()で指定したトランザクション隔離性水準

2．クライアント定義のadb_clt_trn_iso_lvオペランドで指定したトランザクション隔離性水準

3．サーバ定義のadb_sys_trn_iso_lvオペランドで指定したトランザクション隔離性水準

文字データの並び替え順序は，次に示す優先順位に従って決定されます。

番号が小さいほど優先順位が高くなります。1と2では1の指定が優先されます。

1．a_rdb_SQLSetConnectAttr()で指定した文字データの並び替え順序

2．クライアント定義のadb_clt_sql_order_modeオペランドで指定した文字データの並び替え順序

3．サーバ定義のadb_sql_order_modeオペランドで指定した文字データの並び替え順序

トランザクションアクセスモードは，次に示す優先順位に従って決定されます。

番号が小さいほど優先順位が高くなります。1と2では1の指定が優先されます。

1．a_rdb_SQLSetConnectAttr()で指定したトランザクションアクセスモード

2．クライアント定義のadb_clt_trn_access_modeオペランドで指定したトランザクションアクセスモード

19.2.4　a_rdb_SQLDisconnect()（コネクションの終了）

(1)　機能

トランザクションを正常終了させ，同期点を設定し1コミットメント単位を生成します。そのあと，確立したHADBサーバとのコネクションを終了します。

(2)　形式

signed short a_rdb_SQLDisconnect
(
  void                          *ConnectionHandle,   /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLDisconnect()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

コネクションの終了には成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

a_rdb_SQLDisconnect()を実行した際にトランザクションが終了していない場合，HADBサーバが自動的にCOMMITを実行します。そのあとにHADBサーバとのコネクションを終了します。

内部的に実行されたCOMMITが失敗した場合，HADBサーバがROLLBACKを実行してトランザクションを取り消します。そのあとにHADBサーバとのコネクションを終了します。

a_rdb_SQLDisconnect()を実行しないでAPを終了した場合，HADBサーバがROLLBACKを実行します。そのあとにHADBサーバとのコネクションを終了します。

コネクションが確立されていない場合，a_rdb_SQLDisconnect()は実行できません。

19.2.5　a_rdb_SQLFreeConnect()（コネクションハンドルの解放）

(1)　機能

終了したコネクションのコネクションハンドルを解放します。

(2)　形式

signed short a_rdb_SQLFreeConnect
(
  void                          *ConnectionHandle,   /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLFreeConnect()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

コネクションハンドルの解放には成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

a_rdb_SQLDisconnect()を実行しないでa_rdb_SQLFreeConnect()を実行した場合，a_rdb_SQLFreeConnect()の延長でa_rdb_SQLDisconnect()相当の処理が実行され，そのあとにコネクションハンドルが解放されます。

19.3　トランザクションの制御時に使用するCLI関数

ここでは，トランザクションの制御時に使用するCLI関数について説明します。

19.3.1　a_rdb_SQLCancel()（SQLのキャンセル）

(1)　機能

実行中のSQLをキャンセルします。a_rdb_SQLCancel()でキャンセルできるSQL（CLI関数）を次に示します。

a_rdb_SQLCloseCursor()

a_rdb_SQLExecDirect()

a_rdb_SQLExecute()

a_rdb_SQLFetch()

a_rdb_SQLPrepare()

なお，上記以外のCLI関数の実行中にa_rdb_SQLCancel()を実行しても，a_rdb_SQLCancel()は正常に終了します。

(2)　形式

signed short a_rdb_SQLCancel
(
  void                          *ConnectionHandle,   /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLCancel()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

(5)　留意事項

a_rdb_SQLCancel()は，SQLを処理しているスレッドとは別のスレッドで実行してください。

a_rdb_SQLCancel()を実行しても，SQL結果情報は設定されません。

a_rdb_SQLCancel()がエラーとなった場合でも，クライアントメッセージログファイルにメッセージは出力されません。

SQLのキャンセルが成功した場合，キャンセル対象のSQLはロールバックされ，SQLCODEが返却されます。

キャンセル処理はa_rdb_SQLCancel()とは非同期に実行されるため，a_rdb_SQLCancel()の正常終了はキャンセル処理の完了（成功）を意味するものではありません。

コネクションが確立されていない場合，a_rdb_SQLCancel()は実行できません。

19.3.2　a_rdb_SQLEndTran()（トランザクションの終了）

(1)　機能

トランザクションを終了します。トランザクションが終了すると，その時点で割り当てられているすべての文ハンドルが解放されます。

(2)　形式

signed short a_rdb_SQLEndTran
(
  void                          *ConnectionHandle,   /* In */
  unsigned short                 CompletionType,     /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

CompletionType：

次に示すどちらかの値を指定します。

a_rdb_SQL_COMMIT：COMMIT（トランザクションの正常終了）する場合に指定します。

a_rdb_SQL_ROLLBACK：ROLLBACK（トランザクションの取り消し）する場合に指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLEndTran()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

トランザクションの終了には成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

行の取り出し処理で発生したエラーを，コミットの延長で実行されたカーソルクローズで検知した場合，トランザクションは正常終了しないで，自動的にROLLBACKが実行されます。これ以外の理由でCOMMITに失敗した場合，HADBサーバは異常終了します。

ROLLBACKに失敗した場合，HADBサーバは異常終了します。

次に示す場合，a_rdb_SQLEndTran()は実行できません。

コネクションが確立されていない場合

CompletionTypeに不正な値を指定した場合

行の取り出し処理で発生したエラーを，コミットの延長で実行されたカーソルクローズで検知した場合

a_rdb_SQLEndTran()を実行してトランザクションをコミットまたはロールバックした場合，次に示す状態になります。

オープンしているカーソルはすべてクローズされます。

前処理されたSQL文は無効になります。

すべての文ハンドルが解放されます。

19.4　SQLの実行時に使用するCLI関数

ここでは，SQLの実行時に使用するCLI関数について説明します。

19.4.1　a_rdb_SQLAllocStmt()（文ハンドルの確保）

(1)　機能

文ハンドル（SQL文のハンドル）を確保します。

(2)　形式

signed short a_rdb_SQLAllocStmt
(
  void                          *ConnectionHandle,   /* In  */
  void                         **StatementHandle,    /* Out */
  void                          *Option              /* In  */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを設定するアドレスを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLAllocStmt()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

文ハンドルの確保には成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

コネクションが確立されていない場合，a_rdb_SQLAllocStmt()は実行できません。

トランザクションの開始に失敗した場合，HADBサーバは異常終了します。

19.4.2　a_rdb_SQLBindArrayParams()（？パラメタの一括関連づけ）

(1)　機能

SQL文中の？パラメタの値を設定する領域の結合（関連づけ）を行います。

次に示すSQL文中の，複数組の？パラメタの値をまとめて結合します。

DELETE文

INSERT文

UPDATE文

？パラメタの値の一括転送を行う場合に，このCLI関数を使用します。？パラメタの値の一括転送については，「5.15　？パラメタの値の一括転送」を参照してください。

(2)　形式

signed short a_rdb_SQLBindArrayParams
(
  void                          *ConnectionHandle,  /* In  */
  void                          *StatementHandle,   /* In  */
  int                            ArrayCount,        /* In  */
  unsigned short                 ParameterCount,    /* In  */
  a_rdb_SQLParameterInfo_t      *ParameterInfo[],   /* In  */
  unsigned long long             RowCount[],        /* Out */
  void                          *Option             /* In  */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

ArrayCount：

ParameterInfoおよびRowCountの配列数を指定します。

ParameterCount：

値を与える？パラメタの数を指定します。

a_rdb_SQLNumParams()で取得した？パラメタの数を指定してください。

ParameterInfo[]：

値の格納領域のアドレスを設定するパラメタ情報領域のアドレス配列を指定します。配列1つごとにa_rdb_SQLParameterInfo_t構造体をParameterCountに指定した数だけ連続させた領域を用意し，その領域の先頭アドレスを各配列値として指定してください。

a_rdb_SQLParameterInfo_t構造体については，「19.7.5　a_rdb_SQLParameterInfo_t構造体（パラメタ情報）」を参照してください。

RowCount[]：

SQL文の処理結果行数を格納する配列の先頭アドレスを指定します。NULLを指定した場合は，処理結果行数は取得されません。

a_rdb_SQLExecute()によるSQL文の実行後，各配列には各組の？パラメタの値を入力して実行した処理結果行数が格納されます。

なお，SQL文の実行が途中でエラーとなった場合，成功したところまでの処理結果行数が格納されます。ただし，SQL文のエラーによってロールバックが実行された場合，すべての配列に0が設定されます。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLBindArrayParams()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

？パラメタの関連づけには成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

a_rdb_SQLParameterInfo_t構造体のデータ格納領域の先頭アドレスに対して境界位置調整を行ってください。境界位置調整については，「18.2.6　CLI関数を使用する場合の留意事項」の「(2)　境界位置調整」を参照してください。

a_rdb_SQLBindArrayParams()で？パラメタを関連づけしてa_rdb_SQLExecute()を実行した場合，SQL文がエラーにならないかぎり処理が続行されます。そのため，処理の途中で処理結果行数が0となるような？パラメタの値の組が設定されている場合でも処理が続行されます。

a_rdb_SQLResultInfo_t構造体のRowCountには，RowCount[]配列に格納された処理結果行数の合計が格納されます。

次に示す場合，a_rdb_SQLBindArrayParams()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

配列数に0以下の値を指定した場合

？パラメタ数に，a_rdb_SQLNumParams()で取得した？パラメタの数以外の値を指定した場合

DELETE文，INSERT文，またはUPDATE文以外のSQL文に対してa_rdb_SQLBindArrayParams()を実行しようとした場合

19.4.3　a_rdb_SQLBindCols()（検索結果列の関連づけ）

(1)　機能

検索結果列と，検索結果列から取り出した値を格納する領域の結合（検索結果列の関連づけ）を一括で行います。検索結果列の関連づけを行うと，a_rdb_SQLFetch()でのカーソル操作時に，関連づけられた検索結果列の値が格納されます。

なお，検索結果が列以外の場合もa_rdb_SQLBindCols()を実行できます。

(2)　形式

signed short a_rdb_SQLBindCols
(
  void                          *ConnectionHandle,   /* In  */
  void                          *StatementHandle,    /* In  */
  unsigned short                 ColumnCount,        /* In  */
  a_rdb_SQLColumnInfo_t         *ColumnInfo,         /* In  */
  void                          *Option              /* In  */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

ColumnCount：

値を取り出す列の数を指定します。

a_rdb_SQLNumResultCols()で取得した検索結果列数を指定してください。

ColumnInfo：

値格納用領域のアドレスを設定する列情報領域の先頭アドレスを指定します。

a_rdb_SQLColumnInfo_t構造体をColumnCountに指定した数だけ連続させた領域を用意してください。

a_rdb_SQLColumnInfo_t構造体については，「19.7.1　a_rdb_SQLColumnInfo_t構造体（列情報）」を参照してください。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLBindCols()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

検索結果列の関連づけには成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

取得データがCHAR型の場合，a_rdb_SQLColumnInfo_t構造体のデータ格納領域にはデータの末尾にナル文字を1文字付加したものを格納します。ここでのナル文字とは，0x00のことです。

a_rdb_SQLColumnInfo_t構造体のデータ格納領域の先頭アドレスに対して境界位置調整を行ってください。境界位置調整については，「18.2.6　CLI関数を使用する場合の留意事項」の「(2)　境界位置調整」を参照してください。

a_rdb_SQLColumnInfo_t構造体のデータ格納領域長またはインジケータ値のどちらかを格納する領域には，取得データに応じて，次の表に従って値が設定されます。表中のBLは指定したデータ格納領域長を，DLは取得データを格納するのに必要な領域の大きさ（バイト数）を意味しています。

表19‒3　データ格納領域長またはインジケータ値のどちらかを格納する領域の値

項番

格納データ

データ構造

データ型

BLとDLの関係

データ格納領域長またはインジケータ値

1

ナル値

任意

任意

任意

a_rdb_SQL_NULL_DATA

2

非ナル値

任意

任意

BL＝DL

a_rdb_SQL_NOT_NULL_DATA

3

上記以外

−（SQLエラー）※

注※

この場合SQLエラーとなり，インジケータに値が設定される処理が行われないで，値が不定になります。

次に示す場合，a_rdb_SQLBindCols()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

a_rdb_SQLNumResultCols()で取得した検索結果列数以外の値を検索結果列数に指定した場合

a_rdb_SQLColumnInfo_t構造体のデータ格納領域長に，取得データ格納に必要な領域長以外の値を指定した場合

配列型の検索結果列に対して列結合を実行した場合

19.4.4　a_rdb_SQLBindParams()（？パラメタの関連づけ）

(1)　機能

SQL文中の？パラメタの値を設定する領域の結合（関連づけ）を行います。

(2)　形式

signed short a_rdb_SQLBindParams
(
  void                          *ConnectionHandle,   /* In  */
  void                          *StatementHandle,    /* In  */
  unsigned short                 ParameterCount,     /* In  */
  a_rdb_SQLParameterInfo_t      *ParameterInfo,      /* In  */
  void                          *Option              /* In  */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

ParameterCount：

値を与える？パラメタの数を指定します。

a_rdb_SQLNumParams()で取得した？パラメタの数を指定してください。

ParameterInfo：

値格納用領域のアドレスを設定するパラメタ情報領域の先頭アドレスを指定します。

a_rdb_SQLParameterInfo_t構造体をParameterCountに指定した数だけ連続させた領域を用意してください。

a_rdb_SQLParameterInfo_t構造体については，「19.7.5　a_rdb_SQLParameterInfo_t構造体（パラメタ情報）」を参照してください。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLBindParams()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

？パラメタの関連づけには成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

a_rdb_SQLParameterInfo_t構造体のデータ格納領域の先頭アドレスに対して境界位置調整を行ってください。境界位置調整については，「18.2.6　CLI関数を使用する場合の留意事項」の「(2)　境界位置調整」を参照してください。

次に示す場合，a_rdb_SQLBindParams()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

？パラメタ数に，a_rdb_SQLNumParams()で取得した？パラメタの数以外の値を指定した場合

19.4.5　a_rdb_SQLCloseCursor()（カーソルのクローズ）

(1)　機能

カーソルをクローズして，行の取り出しを終了します。

行を取り出している最中の処理リアルスレッドがある場合，その処理リアルスレッドを終了します。

(2)　形式

signed short a_rdb_SQLCloseCursor
(
  void                          *ConnectionHandle,   /* In */
  void                          *StatementHandle,    /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLCloseCursor()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

カーソルのクローズには成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLCloseCursor()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

行の取り出し処理で発生したエラーを，カーソルクローズで検知した場合

トランザクションが終了した場合，その時点でオープンしているカーソルはすべてクローズされます。また，暗黙的にデータベースへの更新が無効にされた場合にも，カーソルはすべてクローズされます。なお，暗黙的にデータベースへの更新が無効にされた場合，サーバメッセージログファイルおよびクライアントメッセージログファイルに，KFAA51001-EまたはKFAA51002-Eメッセージが出力されます。

19.4.6　a_rdb_SQLDescribeCols()（検索結果列の情報取得）

(1)　機能

検索結果列の情報を取得します。次に示す情報を取得します。

検索結果列の列名

検索結果列のデータ型

検索結果列の最大要素数

検索結果列のデータ長

(2)　形式

signed short a_rdb_SQLDescribeCols
(
  void                          *ConnectionHandle,   /* In  */
  void                          *StatementHandle,    /* In  */
  unsigned short                 ColumnCount,        /* In  */
  a_rdb_SQLColumnInfo_t         *ColumnInfo,         /* Out */
  void                          *Option              /* In  */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

ColumnCount：

情報を取得する検索結果列数を指定します。

a_rdb_SQLNumResultCols()で取得した検索結果列数を指定してください。

ColumnInfo：

検索結果列の情報を取得する領域のアドレスを設定する列情報領域の先頭アドレスを指定します。

a_rdb_SQLColumnInfo_t構造体をColumnCountに指定した数だけ連続させた領域を用意してください。

a_rdb_SQLColumnInfo_t構造体については，「19.7.1　a_rdb_SQLColumnInfo_t構造体（列情報）」を参照してください。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLDescribeCols()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

検索結果列の情報取得には成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

a_rdb_SQLNameInfo_t構造体の名称格納領域には，検索結果列名を取得します。検索結果列名については，マニュアルHADB　SQLリファレンスのSELECT文の指定形式および規則の規則を参照してください。

a_rdb_SQLNameInfo_t構造体の名称格納領域長は，ナル文字1文字のバイト数以上の値を指定してください。ここでのナル文字とは，0x00のことです。

a_rdb_SQLNameInfo_t構造体の名称格納領域長が，検索結果列名の長さ（バイト数）にナル文字1文字のバイト数を加算した値以上の場合，名称格納領域には，検索結果列名の末尾にナル文字1文字を付加した文字列が取得されます。

a_rdb_SQLNameInfo_t構造体の名称格納領域長が，検索結果列名の長さ（バイト数）にナル文字1文字のバイト数を加算した値より小さい場合，検索結果列名の後半部分（名称格納領域に納まらない部分）が切り捨てられます。名称格納領域には，検索結果列名を先頭から格納していき，最後にナル文字1文字を付加した文字列が格納されます。

a_rdb_SQLNameInfo_t構造体の列名長格納領域には，検索結果列名の長さ（バイト数）が取得されます。

a_rdb_SQLDataType_t構造体のデータ型コード格納領域には，検索結果列のデータ型を表すコード（データ型コード）が取得されます。各データ型に対応するデータ型コードについては，マニュアルHADB　SQLリファレンスのデータ型の種類を参照してください。

a_rdb_SQLDataType_t構造体の最大要素数格納領域には，検索結果列の最大要素数が取得されます。検索結果列の最大要素数は，検索結果列が配列型でない場合は常に1となります。

a_rdb_SQLDataType_t構造体の列長格納領域と列長属性格納領域には，検索結果列のデータ長に関する情報が取得されます。各領域に取得される値は，検索結果列のデータ型に応じて，次の表に示す値になります。

表19‒4　列長と列長属性

項番

データ型

列長

列長属性

1

INTEGER

8

0

2

SMALLINT

4

0

3

DECIMAL(m,n)※1

m

n

4

NUMERIC(m,n)※1

5

DOUBLE PRECISION

8

0

6

FLOAT

7

CHAR(n)

n

0

8

VARCHAR(n)

n

0

9

DATE

4

0

10

TIME(p)※2

3+↑p÷2↑

p

11

TIMESTAMP(p)※2

7+↑p÷2↑

p

12

BINARY(n)

n

0

13

VARBINARY(n)

n

0

14

ROW

行長

0

（凡例）

m，n，p：正の整数

注※1

データ型がDECIMAL型またはNUMERIC型の場合，列長として精度を取得します。

また，列長属性として位取りを取得します。

注※2

データ型がTIME型またはTIMESTAMP型の場合，列長としてデータ長を取得します。また，列長属性として小数秒の桁数を取得します。

次に示す場合，a_rdb_SQLDescribeCols()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

a_rdb_SQLNumResultCols()で取得した検索結果列数以外の値を検索結果列数に指定した場合

19.4.7　a_rdb_SQLDescribeParams()（？パラメタの情報取得）

(1)　機能

SQL文中の？パラメタの情報を取得します。次に示す情報を取得します。

？パラメタのデータ型

？パラメタの最大要素数

？パラメタのデータ長

(2)　形式

signed short a_rdb_SQLDescribeParams
(
  void                          *ConnectionHandle,   /* In  */
  void                          *StatementHandle,    /* In  */
  unsigned short                 ParameterCount,     /* In  */
  a_rdb_SQLParameterInfo_t      *ParameterInfo,      /* Out */
  void                          *Option              /* In  */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

ParameterCount：

情報を取得する？パラメタの数を指定します。

a_rdb_SQLNumParams()で取得した？パラメタの数を指定してください。

ParameterInfo：

各種パラメタ情報取得用領域のアドレスを設定するパラメタ情報領域の先頭アドレスを指定します。

a_rdb_SQLParameterInfo_t構造体をParameterCountに指定した数だけ連続させた領域を用意してください。

a_rdb_SQLParameterInfo_t構造体については，「19.7.5　a_rdb_SQLParameterInfo_t構造体（パラメタ情報）」を参照してください。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLDescribeParams()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

？パラメタの情報取得には成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

a_rdb_SQLDataType_t構造体のデータ型コード格納領域には，HADBによって仮定された？パラメタのデータ型を表すコード（データ型コード）が取得されます。各データ型に対応するデータ型コードについては，マニュアルHADB　SQLリファレンスのデータ型の種類を参照してください。

a_rdb_SQLDataType_t構造体の最大要素数格納領域には，？パラメタの最大要素数が取得されます。？パラメタの最大要素数は常に1となります。

a_rdb_SQLDataType_t構造体のパラメタ長格納領域とパラメタ属性格納領域には，？パラメタのデータ長に関する情報が取得されます。各領域に取得する値は，HADBによって仮定された？パラメタのデータ型に応じて，次の表に示す値になります。

表19‒5　パラメタ長とパラメタ長属性

項番

データ型

パラメタ長

パラメタ長属性

1

INTEGER

8

0

2

SMALLINT

4

0

3

DECIMAL(m,n)※1

m

n

4

NUMERIC(m,n)※1

5

DOUBLE PRECISION

8

0

6

FLOAT

7

CHAR(n)

n

0

8

VARCHAR(n)

n

0

9

DATE

4

0

10

TIME(p)※2

3+↑p÷2↑

p

11

TIMESTAMP(p)※2

7+↑p÷2↑

p

12

BINARY(n)

n

0

13

VARBINARY(n)

n

0

14

ROW

行長

0

（凡例）

m，n，p：正の整数

注※1

データ型がDECIMAL型またはNUMERIC型の場合，パラメタ長として精度を取得します。

また，パラメタ長属性として位取りを取得します。

注※2

データ型がTIME型またはTIMESTAMP型の場合，パラメタ長としてデータ長を取得します。また，パラメタ長属性として小数秒の桁数を取得します。

次に示す場合，a_rdb_SQLDescribeParams()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

？パラメタ数に，a_rdb_SQLNumParams()で取得した？パラメタの数以外の値を指定した場合

19.4.8　a_rdb_SQLExecDirect()（SQL文の前処理および実行）

(1)　機能

SQL文を前処理して実行します。実行可能なSQL文を次に示します。

DELETE文※

INSERT文※

PURGE CHUNK文※

TRUNCATE TABLE文

UPDATE文※

定義系SQL

注※

？パラメタが指定されている場合は，a_rdb_SQLExecDirect()を実行できません。

(2)　形式

signed short a_rdb_SQLExecDirect
(
  void                          *ConnectionHandle,   /* In */
  void                          *StatementHandle,    /* In */
  char                          *StatementText,      /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

StatementText：

前処理および実行するSQL文のテキストをC言語またはC++言語の文字列表現で指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLExecDirect()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSまたはa_rdb_RC_SQL_NO_DATAが返却されます。

SQL文を前処理して実行することには成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLExecDirect()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

19.4.9　a_rdb_SQLExecute()（前処理したSQL文の実行）

(1)　機能

前処理したSQL文を実行します。実行可能なSQL文を次に示します。

DELETE文

INSERT文

PURGE CHUNK文

TRUNCATE TABLE文

SELECT文

UPDATE文

定義系SQL

SELECT文に対してa_rdb_SQLExecute()を実行した場合，カーソルがオープンされます。

(2)　形式

signed short a_rdb_SQLExecute
(
  void                          *ConnectionHandle,   /* In */
  void                          *StatementHandle,    /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLExecute()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSまたはa_rdb_RC_SQL_NO_DATAが返却されます。

SQL文の実行には成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLExecute()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

指定する文ハンドルには，前処理が完了しているSQL文が準備されている必要があります。

一度オープンしたカーソルを再度オープンする場合は，いったんカーソルをクローズしてから，再度オープンしてください。

a_rdb_SQLFetch()による行の取り出しを実行する場合は，カーソルをオープンしてから行の取り出しを実行してください。

COMMITまたはROLLBACKを実行した場合（暗黙的ロールバックを含む），その時点でオープンしているカーソルはすべてクローズされます。

19.4.10　a_rdb_SQLFetch()（行の取り出し）

(1)　機能

カーソルの位置を次の行に進めます。列結合している場合は，さらにカーソルの示す1行の列の値を，取り出し相手リストで指定した取り出し先に読み込みます。

(2)　形式

signed short a_rdb_SQLFetch
(
  void                          *ConnectionHandle,   /* In */
  void                          *StatementHandle,    /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLFetch()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSまたはa_rdb_RC_SQL_NO_DATAが返却されます。

行の取り出しには成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLFetch()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

使用するカーソルは，a_rdb_SQLExecute()でオープンしておいてください。

19.4.11　a_rdb_SQLFreeStmt()（文ハンドルの解放）

(1)　機能

a_rdb_SQLAllocStmt()で確保した文ハンドルを解放します。

文ハンドルが解放されると，オープンしているカーソルもクローズされます。

(2)　形式

signed short a_rdb_SQLFreeStmt
(
  void                          *ConnectionHandle,   /* In */
  void                          *StatementHandle,    /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLFreeStmt()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

文ハンドルの解放には成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLFreeStmt()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

行の取り出し処理で発生したエラーを，文ハンドルの解放の延長で実行されたカーソルクローズで検知した場合

19.4.12　a_rdb_SQLNumParams()（？パラメタ数の取得）

(1)　機能

SQL文中の？パラメタの数を取得します。

(2)　形式

signed short a_rdb_SQLNumParams
(
  void                          *ConnectionHandle,    /* In  */
  void                          *StatementHandle,     /* In  */
  unsigned short                *ParameterCount,      /* Out */
  void                          *Option               /* In  */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

ParameterCount：

？パラメタの数を取得するアドレスを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLNumParams()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

？パラメタ数の取得には成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLNumParams()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

19.4.13　a_rdb_SQLNumResultCols()（検索結果列数の取得）

(1)　機能

検索結果列数を取得します。

(2)　形式

signed short a_rdb_SQLNumResultCols
(
  void                          *ConnectionHandle,   /* In  */
  void                          *StatementHandle,    /* In  */
  unsigned short                *ColumnCount,        /* Out */
  void                          *Option              /* In  */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

ColumnCount：

検索結果列数を取得するアドレスを指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLNumResultCols()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

検索結果列数の取得には成功したが，クライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLNumResultCols()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

文ハンドルに割り当てられたSQL文がSELECT文でない場合は，検索結果列数を格納する領域に0が格納されます。

19.4.14　a_rdb_SQLPrepare()（SQL文の前処理）

(1)　機能

SQL文の前処理を実行します。前処理できるSQL文を次に示します。

DELETE文

INSERT文

PURGE CHUNK文

TRUNCATE TABLE文

SELECT文

UPDATE文

定義系SQL

a_rdb_SQLPrepare()を実行すると，指定したSQL文が実行可能な状態に前処理され，文ハンドルにそのSQL文が割り当てられます。

(2)　形式

signed short a_rdb_SQLPrepare
(
  void                          *ConnectionHandle,   /* In */
  void                          *StatementHandle,    /* In */
  char                          *StatementText,      /* In */
  void                          *Option              /* In */
)

(3)　引数の説明

ConnectionHandle：

コネクションハンドルを指定します。

StatementHandle：

文ハンドルを指定します。

StatementText：

前処理を実行するSQL文のテキストをC言語またはC++言語の文字列表現で指定します。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_SQLPrepare()が正常に終了した場合，a_rdb_RC_SQL_SUCCESSが返却されます。

SQL文の前処理には成功したが，サーバメッセージログファイルまたはクライアントメッセージログファイルを格納しているディスクが満杯になった場合，a_rdb_RC_SQL_WARNINGが返却されます。

クライアントメッセージログファイルにメッセージが出力できない場合にエラーが発生したときは，エラー要因コードが返却されます。エラー要因コードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

次に示す場合，a_rdb_SQLPrepare()は実行できません。

コネクションが確立されていない場合

無効な文ハンドルを指定した場合

19.5　データ型の変換時に使用するCLI関数

ここでは，データ型の変換時に使用するCLI関数について説明します。

19.5.1　a_rdb_CNV_charBINARY()（BINARY型データへの変換）

(1)　機能

C言語またはC++言語の文字列データ（2進数または16進数）をSQLのBINARY型のデータに変換します。文字列データをBINARY型のデータに変換する場合の例を次の図に示します。

図19‒1　文字列データをBINARY型のデータに変換する場合の例

重要

変換前の文字列データは，次に示す値である必要があります。

変換前の文字列データの形式が2進数の場合

'0'および'1'

変換前の文字列データの形式が16進数の場合

'0'〜'9'および'A'〜'F'（または'a'〜'f''）

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_charBINARY
(
  char                          *char_Data,         /* In  */
  unsigned int                   char_Length,       /* In  */
  unsigned short                 char_Type,         /* In  */
  unsigned short                 BINARY_Length,     /* In  */
  unsigned char                 *BINARY_Data,       /* Out */
  unsigned short                 BufferLength,      /* In  */
  void                          *Option             /* In  */
)

(3)　引数の説明

char_Data：

変換前の文字列データ（C言語またはC++言語の文字列データ）を格納している領域の先頭アドレスを指定します。

char_Length：

変換前の文字列データの長さを指定します（単位：バイト）。次の値を指定してください。

変換前の文字列データの形式が2進数の場合

1〜BINARY_Lengthの値×8

変換前の文字列データの形式が16進数の場合

1〜BINARY_Lengthの値×2

char_Type：

変換前の文字列データの形式を指定します。次のどちらかを指定します。

変換前の文字列データの形式が2進数の場合

a_rdb_CNV_CHAR_TYPE_BINARY

変換前の文字列データの形式が16進数の場合

a_rdb_CNV_CHAR_TYPE_HEX

BINARY_Length：

変換後のBINARY型データの長さを指定します（単位：バイト）。1〜32,000を指定できます。

BINARY_Data：

変換後のBINARY型データを格納する領域の先頭アドレスを指定します。

BufferLength：

変換後のBINARY型データを格納する領域の長さを指定します（単位：バイト）。BINARY_Lengthと同じ値を指定してください。

Option：

NULLを指定します。値を指定しても無視されます。

(4)　戻り値

a_rdb_CNV_charBINARY()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（char_Data）と，変換後のデータ格納領域（BINARY_Data）は重複しないようにしてください。

変換前の文字列データの長さは，次の条件を満たしている必要があります。

変換前の文字列データの形式が2進数の場合：8の倍数

変換前の文字列データの形式が16進数の場合：2の倍数

変換前の文字列データをBINARY型データのデータ形式に変換し，格納領域の先頭から格納します。ただし，変換する文字列データの長さが次に示す値より小さい場合は，右側に0x00を補います。

変換前の文字列データの形式が2進数の場合：BINARY_Lengthの値×8

変換前の文字列データの形式が16進数の場合：BINARY_Lengthの値×2

19.5.2　a_rdb_CNV_charDATE()（DATE型データへの変換）

(1)　機能

C言語またはC++言語の文字列データをSQLのDATE型のデータに変換します。文字列データをDATE型のデータに変換する場合の例を次の図に示します。

図19‒2　文字列データをDATE型のデータに変換する場合の例

重要

変換前の文字列データは，日付を表す既定の入力表現に従った形式にしておく必要があります。日付を表す既定の入力表現については，マニュアルHADB　SQLリファレンスの既定の文字列表現を参照してください。

（例）

2014年9月30日を表す場合，文字列データは次のどちらかの形式である必要があります。

2014-09-30

2014/09/30

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_charDATE
(
  char              *char_Data,                 /* In  */
  unsigned char     *DATE_Data,                 /* Out */
  unsigned short     BufferLength,              /* In  */
  void              *Option                     /* In  */
)

(3)　引数の説明

char_Data：

変換前の文字列データ（C言語またはC++言語の文字列データ）を格納している領域の先頭アドレスを指定します。

DATE_Data：

変換後のDATE型のデータを格納する領域の先頭アドレスを指定します。

BufferLength：

変換後のDATE型のデータを格納する領域の長さをバイト数で指定します。4を指定してください。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_CNV_charDATE()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（char_Data）と，変換後のデータ格納領域（DATE_Data）は重複しないようにしてください。

19.5.3　a_rdb_CNV_charDECIMAL()（DECIMAL型またはNUMERIC型データへの変換）

(1)　機能

C言語またはC++言語の文字列データを，SQLのDECIMAL型またはNUMERIC型のデータに変換します。文字列データをDECIMAL型のデータに変換する場合の例を次の図に示します。

図19‒3　文字列データをDECIMAL型のデータに変換する場合の例

重要

変換前の文字列データは，次に示す形式にしておく必要があります。

'[△△…△][+|-][aa....aa][.][bb....bb]'

[△△…△]：0個以上の空白

[+|-]：正符号または負符号（符号を省略した場合は正符号が仮定されます）

[aa....aa]：整数部分

[.]：ピリオド（小数部分がない場合はピリオドを省略できます）

[bb....bb]：小数部分

注意事項を次に示します。

整数部分[aa....aa]，または小数点[.]と小数部分[bb....bb]のどちらかは必ず指定してください。

整数部分[aa....aa]と小数部分[bb....bb]を合わせて38個以下になるようにしてください。

ピリオド（小数点）を省略した場合は，変換後のデータの末尾に小数点が仮定されます。

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_charDECIMAL
(
  char                 *char_Data,                /* In  */
  unsigned short        char_Length,              /* In  */
  unsigned short        DECIMAL_Precision,        /* In  */
  unsigned short        DECIMAL_Scale,            /* In  */
  unsigned char        *DECIMAL_Data,             /* Out */
  unsigned short        BufferLength,             /* In  */
  void                 *Option                    /* In  */
)

(3)　引数の説明

char_Data：

変換前の文字列データ（C言語またはC++言語の文字列データ）を格納している領域の先頭アドレスを指定します。

char_Length：

変換前の文字列データの長さをバイト数で指定します。1〜41を指定できます。

DECIMAL_Precision：

変換後のDECIMAL型またはNUMERIC型のデータの精度（全体の桁数）を指定します。1〜38を指定できます。

？パラメタの関連づけを行う？パラメタと同じ精度を指定してください。

DECIMAL_Scale：

変換後のDECIMAL型またはNUMERIC型のデータの位取り（小数点以下の桁数）を指定します。0〜38を指定できます。

？パラメタの関連づけを行う？パラメタと同じ位取りを指定してください。

DECIMAL_Data：

変換後のDECIMAL型またはNUMERIC型のデータを格納する領域の先頭アドレスを指定します。

BufferLength：

変換後のDECIMAL型またはNUMERIC型のデータを格納する領域の長さをバイト数で指定します。次に示す値を指定してください。

表19‒6　BufferLengthの指定値

項番

DECIMAL_Precisionの値

BufferLengthの指定値

1

1≦DECIMAL_Precision≦4の場合

2

2

5≦DECIMAL_Precision≦8の場合

4

3

9≦DECIMAL_Precision≦16の場合

8

4

17≦DECIMAL_Precision≦38の場合

16

Option：

NULLを指定します。

(4)　戻り値

a_rdb_CNV_charDECIMAL()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（char_Data）と，変換後のデータ格納領域（DECIMAL_Data）は重複しないようにしてください。

変換前のデータが"-0."に相当する場合，同じ文字数の"+0."と見なします。例えば，変換するデータが"-0.0"の場合は"+0.0"と見なし，変換前のデータが"-0.0000"の場合は"+0.0000"と見なします。

変換前の文字列データをDECIMAL型またはNUMERIC型のデータ形式に変換し，格納領域の先頭から格納します。このとき，整数部分が格納できない場合はエラーになります。小数部分が格納できない場合は格納できない部分を切り捨てます。

精度と位取りが一致している場合だけ，整数部に0を付加した文字列データを指定できます。その場合，DECIMAL_Precisionには，整数部の0を除いた整数の数を指定してください。

19.5.4　a_rdb_CNV_charTIME()（TIME型データへの変換）

(1)　機能

C言語またはC++言語の文字列データをSQLのTIME型のデータに変換します。文字列データをTIME型のデータに変換する場合の例を次の図に示します。

図19‒4　文字列データをTIME型のデータに変換する場合の例

重要

変換前の文字列データは，時刻を表す既定の入力表現に従った形式にしておく必要があります。時刻を表す既定の入力表現については，マニュアルHADB　SQLリファレンスの既定の文字列表現を参照してください。

（例）

11時3分58.123秒を表す場合，文字列データは次の形式である必要があります。

11:03:58.123

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_charTIME
(
  char                  *char_Data,                  /* In  */
  unsigned short         char_Length,                /* In  */
  unsigned short         TIME_Scale,                 /* In  */
  unsigned char         *TIME_Data,                  /* Out */
  unsigned short         BufferLength,               /* In  */
  void                  *Option                      /* In  */
)

(3)　引数の説明

char_Data：

変換前の文字列データ（C言語またはC++言語の文字列データ）を格納している領域の先頭アドレスを指定します。

char_Length：

変換前の文字列データの長さを指定します（単位：バイト）。8〜8＋TIME_Scaleの値＋1の範囲の値を指定してください。

TIME_Scale：

変換後のTIME型データの小数秒の桁数を指定します。0，3，6，9，または12を指定してください。

TIME_Data：

変換後のTIME型データを格納する領域の先頭アドレスを指定します。

BufferLength：

変換後のTIME型データを格納する領域の長さを指定します（単位：バイト）。3＋↑TIME_Scaleの値÷2↑を指定してください。

Option：

NULLを指定します。値を指定しても無視されます。

(4)　戻り値

a_rdb_CNV_charTIME()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（char_Data）と，変換後のデータ格納領域（TIME_Data）は重複しないようにしてください。

変換する文字列データをTIME型データのデータ形式に変換し，格納領域の先頭から格納します。ただし，変換する文字列データの小数秒の桁数が3，6，9，または12桁でない場合は，TIME_Scaleに指定した小数秒の桁数になるまで右側に0を補います。

19.5.5　a_rdb_CNV_charTIMESTAMP()（TIMESTAMP型データへの変換）

(1)　機能

C言語またはC++言語の文字列データをSQLのTIMESTAMP型のデータに変換します。文字列データをTIMESTAMP型のデータに変換する場合の例を次の図に示します。

図19‒5　文字列データをTIMESTAMP型のデータに変換する場合の例

重要

変換前の文字列データは，時刻印を表す既定の入力表現に従った形式にしておく必要があります。時刻印を表す既定の入力表現については，マニュアルHADB　SQLリファレンスの既定の文字列表現を参照してください。

（例）

2014年9月30日19時6分48秒を表す場合，文字列データは次のどちらかの形式である必要があります。

2014-09-30 19:06:48

2014/09/30 19:06:48

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_charTIMESTAMP
(
  char                  *char_Data,                  /* In  */
  unsigned short         char_Length,                /* In  */
  unsigned short         TIMESTAMP_Scale,            /* In  */
  unsigned char         *TIMESTAMP_Data,             /* Out */
  unsigned short         BufferLength,               /* In  */
  void                  *Option                      /* In  */
)

(3)　引数の説明

char_Data：

変換前の文字列データ（C言語またはC++言語の文字列データ）を格納している領域の先頭アドレスを指定します。

char_Length：

変換前の文字列データの長さを指定します（単位：バイト）。19〜19＋TIMESTAMP_Scaleの値＋1の範囲の値を指定してください。

TIMESTAMP_Scale：

変換後のTIMESTAMP型データの小数秒の桁数を指定します。0，3，6，9，または12を指定してください。

TIMESTAMP_Data：

変換後のTIMESTAMP型のデータを格納する領域の先頭アドレスを指定します。

BufferLength：

変換後のTIMESTAMP型のデータを格納する領域の長さをバイト数で指定します。7＋↑TIMESTAMP_Scaleの値÷2↑を指定してください。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_CNV_charTIMESTAMP()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（char_Data）と，変換後のデータ格納領域（TIMESTAMP_Data）は重複しないようにしてください。

変換する文字列データをTIMESTAMP型データのデータ形式に変換し，格納領域の先頭から格納します。ただし，変換する文字列データの小数秒の桁数が3，6，9，または12桁でない場合は，TIMESTAMP_Scaleに指定した小数秒の桁数になるまで右側に0を補います。

19.5.6　a_rdb_CNV_charVARBINARY()（VARBINARY型データへの変換）

(1)　機能

C言語またはC++言語の文字列データ（2進数または16進数）をSQLのVARBINARY型のデータに変換します。文字列データをVARBINARY型のデータに変換する場合の例を次の図に示します。

図19‒6　文字列データをVARBINARY型のデータに変換する場合の例

重要

変換前の文字列データは，次に示す値である必要があります。

変換前の文字列データの形式が2進数の場合

'0'および'1'

変換前の文字列データの形式が16進数の場合

'0'〜'9'および'A'〜'F'（または'a'〜'f''）

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_charVARBINARY
(
  char                          *char_Data,           /* In  */
  unsigned int                   char_Length,         /* In  */
  unsigned short                 char_Type,           /* In  */
  unsigned short                 VARBINARY_Length,    /* In  */
  a_rdb_VARBINARY_t             *VARBINARY_Data,      /* Out */
  unsigned short                 BufferLength,        /* In  */
  void                          *Option               /* In  */
)

(3)　引数の説明

char_Data：

変換前の文字列データ（C言語またはC++言語の文字列データ）を格納している領域の先頭アドレスを指定します。

char_Length：

変換前の文字列データの長さを指定します（単位：バイト）。次の値を指定してください。

変換前の文字列データの形式が2進数の場合

1〜VARBINARY_Lengthの値×8

変換前の文字列データの形式が16進数の場合

1〜VARBINARY_Lengthの値×2

char_Type：

変換前の文字列データの形式を指定します。次のどちらかを指定します。

変換前の文字列データの形式が2進数の場合

a_rdb_CNV_CHAR_TYPE_BINARY

変換前の文字列データの形式が16進数の場合

a_rdb_CNV_CHAR_TYPE_HEX

VARBINARY_Length：

変換後のVARBINARY型データの長さを指定します（単位：バイト）。1〜32,000を指定できます。

VARBINARY_Data：

変換後のVARBINARY型データを格納する領域の先頭アドレスを指定します。

BufferLength：

変換後のVARBINARY型データを格納する領域の長さを指定します（単位：バイト）。VARBINARY_Lengthの値＋2を指定してください。

Option：

NULLを指定します。値を指定しても無視されます。

(4)　戻り値

a_rdb_CNV_charVARBINARY()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（char_Data）と，変換後のデータ格納領域（VARBINARY_Data）は重複しないようにしてください。

変換前の文字列データの長さは，次の条件を満たしている必要があります。

変換前の文字列データの形式が2進数の場合：8の倍数

変換前の文字列データの形式が16進数の場合：2の倍数

変換前の文字列データをVARBINARY型データのデータ形式に変換し，格納領域の先頭から格納します。

19.5.7　a_rdb_CNV_BINARYchar()（BINARY型データの変換）

(1)　機能

SQLのBINARY型のデータをC言語またはC++言語の文字列データに変換します。BINARY型のデータを文字列データに変換する場合の例を次の図に示します。

図19‒7　BINARY型のデータを文字列データに変換する場合の例

［説明］

BINARY型のデータを次の文字列定数の形式に変換し，格納領域の先頭から格納します。末尾には，ナル文字（0x00）が付加されます。

変換後の文字列データの形式が2進数の場合：2進形式バイナリ定数

変換後の文字列データの形式が16進数の場合：16進形式バイナリ定数

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_BINARYchar
(
  unsigned char                  *BINARY_Data,      /* In  */
  unsigned short                  BINARY_Length,    /* In  */
  unsigned short                  char_Type,        /* In  */
  char                           *char_Data,        /* Out */
  unsigned int                    BufferLength,     /* In  */
  void                           *Option            /* In  */
)

(3)　引数の説明

BINARY_Data：

変換前のBINARY型のデータを格納している領域の先頭アドレスを指定します。

BINARY_Length：

変換前のBINARY型のデータの長さを指定します（単位：バイト）。1〜32,000を指定できます。

char_Type：

変換後の文字列データの形式を指定します。次のどちらかを指定してください。

変換後の文字列データの形式が2進数の場合

a_rdb_CNV_CHAR_TYPE_BINARY

変換後の文字列データの形式が16進数の場合

a_rdb_CNV_CHAR_TYPE_HEX

char_Data：

変換後の文字列データ（C言語またはC++言語の文字列データ）を格納する領域の先頭アドレスを指定します。

BufferLength：

変換後の文字列データを格納する領域の長さを指定します（単位：バイト）。次のどちらかの値を指定してください。

変換後の文字列データの形式が2進数の場合

BINARY_Lengthの値×8＋1

変換後の文字列データの形式が16進数の場合

BINARY_Lengthの値×2＋1

Option：

NULLを指定します。値を指定しても無視されます。

(4)　戻り値

a_rdb_CNV_BINARYchar()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（BINARY_Data）と，変換後のデータ格納領域（char_Data）は重複しないようにしてください。

19.5.8　a_rdb_CNV_DATEchar()（DATE型データの変換）

(1)　機能

SQLのDATE型のデータをC言語またはC++言語の文字列データに変換します。DATE型のデータを文字列データに変換する場合の例を次の図に示します。

図19‒8　DATE型のデータを文字列データに変換する場合の例

［説明］

DATE型のデータを，日付を表す既定の出力表現に従って文字列データに変換します。日付を表す既定の出力表現については，マニュアルHADB　SQLリファレンスの既定の文字列表現を参照してください。

末尾にナル文字（0x00）を付加します。

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_DATEchar
(
  unsigned char       *DATE_Data,               /* In  */
  char                *char_Data,               /* Out */
  unsigned short       BufferLength,            /* In  */
  void                *Option                   /* In  */
)

(3)　引数の説明

DATE_Data：

変換前のDATE型のデータを格納している領域の先頭アドレスを指定します。

char_Data：

変換後の文字列データ（C言語またはC++言語の文字列データ）を格納する領域の先頭アドレスを指定します。

BufferLength：

変換後の文字列データを格納する領域の長さをバイト数で指定します。11を指定してください。

Option：

NULLを指定します。

(4)　戻り値

a_rdb_CNV_DATEchar()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（DATE_Data）と，変換後のデータ格納領域（char_Data）は重複しないようにしてください。

19.5.9　a_rdb_CNV_DECIMALchar()（DECIMAL型またはNUMERIC型データの変換）

(1)　機能

SQLのDECIMAL型またはNUMERIC型のデータを，C言語またはC++言語の文字列データに変換します。DECIMAL型のデータを文字列データに変換する場合の例を次の図に示します。

図19‒9　DECIMAL型のデータを文字列データに変換する場合の例

［説明］

DECIMAL型のデータを符号なしの10進数定数の定数表現に文字列変換します。

引数のDECIMAL_PrecisionとDECIMAL_Scaleの値が同じ場合は，小数点の前に0を付加して文字列変換します。

DECIMAL_Scaleの値が0の場合は，小数点は付加されません。

データが負数の場合は，先頭に負符号'−'（マイナス）を付加します。

末尾にナル文字（0x00）を付加して，格納領域に右詰で格納します。

格納した文字列の長さよりBufferLengthの方が大きい場合，余った領域には空白文字を格納します。

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_DECIMALchar
(
  unsigned char          *DECIMAL_Data,             /* In  */
  unsigned short          DECIMAL_Precision,        /* In  */
  unsigned short          DECIMAL_Scale,            /* In  */
  char                   *char_Data,                /* Out */
  unsigned short          BufferLength,             /* In  */
  void                   *Option                    /* In  */
)

(3)　引数の説明

DECIMAL_Data：

変換前のDECIMAL型またはNUMERIC型のデータを格納している領域の先頭アドレスを指定します。

DECIMAL_Precision：

変換前のDECIMAL型またはNUMERIC型のデータの精度（全体の桁数）を指定します。1〜38を指定できます。

取り出した列値のデータ型と同じ精度を指定してください。

DECIMAL_Scale：

変換前のDECIMAL型またはNUMERIC型のデータの位取り（小数点以下の桁数）を指定します。0〜38を指定できます。

取り出した列値のデータ型と同じ位取りを指定してください。

char_Data：

変換後の文字列データ（C言語またはC++言語の文字列データ）を格納する領域の先頭アドレスを指定します。

BufferLength：

変換後の文字列データを格納する領域の長さをバイト数で指定します。次に示す値を指定してください。

DECIMAL_Precision＋4

Option：

NULLを指定します。

(4)　戻り値

a_rdb_CNV_DECIMALchar()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（DECIMAL_Data）と，変換後のデータ格納領域（char_Data）は重複しないようにしてください。

19.5.10　a_rdb_CNV_TIMEchar()（TIME型データの変換）

(1)　機能

SQLのTIME型のデータをC言語またはC++言語の文字列データに変換します。TIME型のデータを文字列データに変換する場合の例を次の図に示します。

図19‒10　TIME型のデータを文字列データに変換する場合の例

［説明］

TIME型のデータを，時刻を表す既定の出力表現に従って文字列データに変換します。時刻を表す既定の出力表現については，マニュアルHADB　SQLリファレンスの既定の文字列表現を参照してください。

末尾にナル文字（0x00）を付加します。

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_TIMEchar
(
  unsigned char         *TIME_Data,               /* In  */
  unsigned short         TIME_Scale,              /* In  */
  char                  *char_Data,               /* Out */
  unsigned short         BufferLength,            /* In  */
  void                  *Option                   /* In  */
)

(3)　引数の説明

TIME_Data：

変換前のTIME型データを格納している領域の先頭アドレスを指定します。

TIME_Scale：

変換前のTIME型データの小数秒の桁数を指定します。0，3，6，9，または12を指定してください。

char_Data：

変換後の文字列データ（C言語またはC++言語の文字列データ）を格納する領域の先頭アドレスを指定します。

BufferLength：

変換後の文字列データを格納する領域の長さを指定します（単位：バイト）。次に示す値を指定してください。

変換前のTIME型データの小数秒の桁数が0の場合：9

変換前のTIME型データの小数秒の桁数が3，6，9，または12の場合：9＋TIME_Scaleの値＋1

Option：

NULLを指定します。値を指定しても無視されます。

(4)　戻り値

a_rdb_CNV_TIMEchar()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（TIME_Data）と，変換後のデータ格納領域（char_Data）は重複しないようにしてください。

19.5.11　a_rdb_CNV_TIMESTAMPchar()（TIMESTAMP型データの変換）

(1)　機能

SQLのTIMESTAMP型のデータをC言語またはC++言語の文字列データに変換します。TIMESTAMP型のデータを文字列データに変換する場合の例を次の図に示します。

図19‒11　TIMESTAMP型のデータを文字列データに変換する場合の例

［説明］

TIMESTAMP型のデータを，時刻印を表す既定の出力表現に従って文字列データに変換します。時刻印を表す既定の出力表現については，マニュアルHADB　SQLリファレンスの既定の文字列表現を参照してください。

末尾にナル文字（0x00）を付加します。

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_TIMESTAMPchar
(
  unsigned char         *TIMESTAMP_Data,          /* In  */
  unsigned short         TIMESTAMP_Scale,         /* In  */
  char                  *char_Data,               /* Out */
  unsigned short         BufferLength,            /* In  */
  void                  *Option                   /* In  */
)

(3)　引数の説明

TIMESTAMP_Data：

変換前のTIMESTAMP型のデータを格納している領域の先頭アドレスを指定します。

TIMESTAMP_Scale：

変換前のTIMESTAMP型データの小数秒の桁数を指定します。0，3，6，9，または12を指定してください。

char_Data：

変換後の文字列データ（C言語またはC++言語の文字列データ）を格納する領域の先頭アドレスを指定します。

BufferLength：

変換後の文字列データを格納する領域の長さを指定します（単位：バイト）。次に示す値を指定してください。

変換するTIMESTAMP型データの小数秒の桁数が0の場合：20

変換するTIMESTAMP型データの小数秒の桁数が3，6，9，または12の場合：20＋TIMESTAMP_Scaleの値＋1

Option：

NULLを指定します。

(4)　戻り値

a_rdb_CNV_TIMESTAMPchar()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（TIMESTAMP_Data）と，変換後のデータ格納領域（char_Data）は重複しないようにしてください。

19.5.12　a_rdb_CNV_VARBINARYchar()（VARBINARY型データの変換）

(1)　機能

SQLのVARBINARY型のデータをC言語またはC++言語の文字列データに変換します。VARBINARY型のデータを文字列データに変換する場合の例を次の図に示します。

図19‒12　VARBINARY型のデータを文字列データに変換する場合の例

［説明］

VARBINARY型のデータを次の文字列定数の形式に変換し，格納領域の先頭から格納します。末尾には，ナル文字（0x00）が付加されます。

変換後の文字列データの形式が2進数の場合：2進形式バイナリ定数

変換後の文字列データの形式が16進数の場合：16進形式バイナリ定数

(2)　形式

#include <adbcnv.h>

signed short a_rdb_CNV_VARBINARYchar
(
  a_rdb_VARBINARY_t           *VARBINARY_Data,       /* In  */
  unsigned short               VARBINARY_Length,     /* In  */
  unsigned short               char_Type,            /* In  */
  char                        *char_Data,            /* Out */
  unsigned int                 BufferLength,         /* In  */
  void                        *Option                /* In  */
)

(3)　引数の説明

VARBINARY_Data：

変換前のVARBINARY型のデータを格納している領域の先頭アドレスを指定します。

VARBINARY_Length：

変換前のVARBINARY型のデータの長さを指定します（単位：バイト）。1〜32,000を指定できます。

char_Type：

変換後の文字列データの形式を指定します。次のどちらかを指定してください。

変換後の文字列データの形式が2進数の場合

a_rdb_CNV_CHAR_TYPE_BINARY

変換後の文字列データの形式が16進数の場合

a_rdb_CNV_CHAR_TYPE_HEX

char_Data：

変換後の文字列データ（C言語またはC++言語の文字列データ）を格納する領域の先頭アドレスを指定します。

BufferLength：

変換後の文字列データを格納する領域の長さを指定します（単位：バイト）。次のどちらかの値を指定してください。

変換後の文字列データの形式が2進数の場合

VARBINARY_Lengthの値×8＋1

変換後の文字列データの形式が16進数の場合

VARBINARY_Lengthの値×2＋1

Option：

NULLを指定します。値を指定しても無視されます。

(4)　戻り値

a_rdb_CNV_VARBINARYchar()が正常に終了した場合，a_rdb_RC_CNV_SUCCESSが返却されます。

エラーが発生した場合，戻り値にエラーコードが返却されます。エラーコードについては，「19.8　CLI関数の戻り値」を参照してください。

(5)　留意事項

変換前のデータ格納領域（VARBINARY_Data）と，変換後のデータ格納領域（char_Data）は重複しないようにしてください。

19.6　SQLのデータ型との対応

ここでは，SQLのデータ型と，それに対応する記号定数やデータ型について説明します。

19.6.1　SQLのデータ型と記号定数および値の対応

SQLのデータ型と記号定数および値の対応を次の表に示します。

表19‒7　SQLのデータ型と記号定数および値の対応

項番

SQLのデータ型

記号定数

値

1

CHAR

a_rdb_SQL_DT_CHAR

0xC5

2

VARCHAR

a_rdb_SQL_DT_VARCHAR

0xC1

3

INTEGER

a_rdb_SQL_DT_INT

0xF1

4

SMALLINT

a_rdb_SQL_DT_SMALLINT

0xF5

5

DECIMAL

a_rdb_SQL_DT_DEC

0xE5

6

DOUBLE PRECISION

a_rdb_SQL_DT_DOUBLE

0xE1

7

DATE

a_rdb_SQL_DT_DATE

0x71

8

TIME

a_rdb_SQL_DT_TIME

0x79

9

TIMESTAMP

a_rdb_SQL_DT_TIMESTAMP

0x7D

10

BINARY

a_rdb_SQL_DT_BINARY

0x95

11

VARBINARY

a_rdb_SQL_DT_VARBINARY

0x91

12

ROW

a_rdb_SQL_DT_ROW

0x45

19.6.2　SQLのデータ型とデータ記述の対応

SQLのデータ型とC言語またはC++言語のデータ記述の対応を次の表に示します。

表19‒8　SQLのデータ型とC言語またはC++言語のデータ記述の対応

項番

SQLのデータ型

C言語またはC++言語のデータ記述

領域長（バイト）

1

CHAR(n)

char 変数名 [n＋1];

n＋1

2

VARCHAR(n)

a_rdb_M_VARCHAR(n) 変数名;

n＋4

3

INTEGER

long long 変数名;

8

4

SMALLINT

int 変数名;

4

5

DECIMAL(m,n)

unsigned char 変数名[p※1];

p※1

6

NUMERIC(m,n)

7

DOUBLE PRECISION

double 変数名;

8

8

FLOAT

9

DATE

unsigned char 変数名[4];

4

10

TIME(p)※2

unsigned char 変数名[3＋(p＋1)÷2];

3＋(p＋1)÷2

11

TIMESTAMP(p)※2

unsigned char 変数名[7＋(p＋1)÷2];

7＋(p＋1)÷2

12

BINARY(n)

unsigned char 変数名[n];

n

13

VARBINARY(n)

a_rdb_M_VARBINARY(n) 変数名;

n＋2

14

ROW

unsigned char 変数名[行長※3];

行長※3

（凡例）

m，n：正の整数

注※1

pはm（精度）の値によって異なります。

項番

mの値

pの値

1

1≦m≦4の場合

2

2

5≦m≦8の場合

4

3

9≦m≦16の場合

8

4

17≦m≦38の場合

16

注※2

pは小数秒精度で，0，3，6，9，または12となります。

注※3

各列のデータ長の合計が行長になります。各列のデータ長の計算方法については，マニュアルHADB　SQLリファレンスのデータ型の種類のデータ格納長を参照してください。

データ記述に使用されるマクロは，次のように展開されます。

■a_rdb_M_VARCHAR(n) 変数名;

struct
{
  unsigned int Length ;           /* データ長   */
  char Data[n] ;                  /* 文字データ */
}

■a_rdb_M_VARBINARY(n) 変数名;

struct
{
  unsigned short Length ;         /* データ長       */
  unsigned char Data[n] ;         /* バイナリデータ */
}

19.6.3　VARCHAR型との対応

(1)　機能

a_rdb_VARCHAR_tは，SQLのデータ型のVARCHAR型に対応します。

(2)　形式

typedef struct a_rdb_TG_VARCHAR {
  unsigned int     Length ;
  char             Data[1] ;
} a_rdb_VARCHAR_t ;

(3)　メンバの説明

Length：

可変長文字列のバイト数を指定します。

Data：

可変長文字列を指定します。

19.6.4　VARBINARY型との対応

(1)　機能

a_rdb_VARBINARY_tは，SQLのデータ型のVARBINARY型に対応します。

(2)　形式

typedef struct a_rdb_TG_VARBINARY {
  unsigned short   Length ;
  unsigned char   Data[1] ;
} a_rdb_VARBINARY_t ;

(3)　メンバの説明

Length：

可変長バイナリデータのバイト数を指定します。

Data：

可変長バイナリデータを指定します。

19.7　CLI関数で使用するデータ型

ここでは，CLI関数で使用するデータ型について説明します。

19.7.1　a_rdb_SQLColumnInfo_t構造体（列情報）

(1)　機能

a_rdb_SQLColumnInfo_t構造体には，a_rdb_SQLDescribeCols()で取得した検索結果列の情報を格納します。

また，a_rdb_SQLBindCols()による検索結果列の関連づけをする際にもこの構造体を使用します。

a_rdb_SQLDescribeCols()については，「19.4.6　a_rdb_SQLDescribeCols()（検索結果列の情報取得）」を，a_rdb_SQLBindCols()については，「19.4.3　a_rdb_SQLBindCols()（検索結果列の関連づけ）」を参照してください。

(2)　形式

typedef struct a_rdb_TG_ColumnInfo {
  struct a_rdb_TG_NameInfo    *NameInfo ;              /* Out */
  struct a_rdb_TG_DataType    *TypeInfo ;              /* Out */
  unsigned short               Nullable ;              /* Out */
  char                         _ColumnInfo_rsv01[2] ;
  signed int                   StrLen_or_Ind ;         /* Out */
  void                        *TargetValue ;           /* Out */
  unsigned int                 BufferLength ;          /* In */
  char                         _ColumnInfo_rsv02[28] ;
} a_rdb_SQLColumnInfo_t ;

(3)　メンバの説明

NameInfo：

検索結果列の列名に関する情報を取得するアドレスを指定します。

列記述を実行する場合に指定してください。列結合を実行する場合に指定しても無視されます。

0を指定した場合は，情報は取得しません。

TypeInfo：

検索結果列のデータ型に関する情報を取得するアドレスを指定します。

列記述を実行する場合に指定してください。列結合を実行する場合に指定しても無視されます。

0を指定した場合は，情報は取得しません。

Nullable：

検索結果列にナル値が返却される可能性があるかどうかを返します。

ナル値を返却する可能性がない場合：a_rdb_SQL_IS_NOT_NULLABLE

ナル値を返却する可能性がある場合：a_rdb_SQL_IS_NULLABLE

列記述を実行する場合にこれらの値が設定されます。

StrLen_or_Ind：

値の長さまたはインジケータ値のどちらかを取得します。

行を取り出した際に値が設定されます。

TargetValue：

値を設定するアドレスを指定します。値は，SQLのデータ型に対応するC言語またはC++言語のデータ記述で指定します。

SQLのデータ型に対応するC言語またはC++言語のデータ記述については，「19.6.2　SQLのデータ型とデータ記述の対応」を参照してください。

列結合を実行する場合に指定してください。列記述を実行する場合に指定しても無視されます。

BufferLength：

値を設定する領域の長さを指定します。

データの領域長については，「19.6.2　SQLのデータ型とデータ記述の対応」を参照してください。

列結合を実行する場合に指定してください。列記述を実行する場合に指定しても無視されます。

(4)　留意事項

a_rdb_SQLColumnInfo_t構造体を使用する場合，最初に領域を0で初期化してください。そのあとで，使用する各メンバに値を指定してください。

19.7.2　a_rdb_SQLNameInfo_t構造体（名称情報）

(1)　機能

a_rdb_SQLNameInfo_t構造体には，a_rdb_SQLDescribeCols()で取得した検索結果列の列名情報などの名称情報を格納します。a_rdb_SQLDescribeCols()については，「19.4.6　a_rdb_SQLDescribeCols()（検索結果列の情報取得）」を参照してください。

(2)　形式

typedef struct a_rdb_TG_NameInfo {
  unsigned short   NameLength ;                 /* Out */
  unsigned short   BufferLength ;               /* In * /
  char             _NameInfo_rsv01[4] ;
  char            *Name ;                       /* Out */
} a_rdb_SQLNameInfo_t ;

(3)　メンバの説明

NameLength：

名称の長さをバイト数で取得します。

BufferLength：

名称を取得する領域の大きさをバイト数で指定します。

Name：

名称を取得する領域のアドレスを指定します。

(4)　留意事項

a_rdb_SQLNameInfo_t構造体を使用する場合，最初に領域を0で初期化してください。そのあとで，使用する各メンバに値を指定してください。

19.7.3　a_rdb_SQLDataType_t構造体（データ型情報）

(1)　機能

a_rdb_SQLDataType_t構造体には，次に示す情報を格納します。

a_rdb_SQLDescribeCols()で取得した検索結果列のデータ型に関する情報

a_rdb_SQLDescribeParams()で取得した？パラメタのデータ型に関する情報

a_rdb_SQLDescribeCols()については，「19.4.6　a_rdb_SQLDescribeCols()（検索結果列の情報取得）」を，a_rdb_SQLDescribeParams()については，「19.4.7　a_rdb_SQLDescribeParams()（？パラメタの情報取得）」を参照してください。

(2)　形式

typedef struct a_rdb_TG_DataType {
  signed int            DataType ;                /* Out */
  unsigned short        ElementCount ;            /* Out */
  char                  _DataType_rsv01[2] ;
  unsigned int          DataLength1 ;             /* Out */
  unsigned int          DataLength2 ;             /* Out */
  char                  _DataType_rsv02[16] ;
} a_rdb_SQLDataType_t ;

(3)　メンバの説明

DataType：

データ型コードを取得します。

配列型の場合は，要素データ型のデータ型コードを取得します。

ElementCount：

配列型の場合は，最大要素数を取得します。配列型でない場合は，1を取得します。

DataLength1：

a_rdb_SQLDescribeCols()の場合は列長を取得します。a_rdb_SQLDescribeParams()の場合はパラメタ長を取得します。

取得する値については，「19.4.6　a_rdb_SQLDescribeCols()（検索結果列の情報取得）」または「19.4.7　a_rdb_SQLDescribeParams()（？パラメタの情報取得）」を参照してください。

DataLength2：

a_rdb_SQLDescribeCols()の場合は列長属性を取得します。a_rdb_SQLDescribeParams()の場合はパラメタ長属性を取得します。

詳細については，「19.4.6　a_rdb_SQLDescribeCols()（検索結果列の情報取得）」および「19.4.7　a_rdb_SQLDescribeParams()（？パラメタの情報取得）」を参照してください。

(4)　留意事項

a_rdb_SQLDataType_t構造体を使用する場合，最初に領域を0で初期化してください。そのあとで，使用する各メンバに値を指定してください。

19.7.4　a_rdb_SQLInd_t（インジケータ）

(1)　機能

a_rdb_SQLInd_t（インジケータ）は，値がナル値であるかを識別します。

(2)　形式

typedef signed char a_rdb_SQLInd_t ;

(3)　インジケータ値

インジケータの意味に対応する記号定数および値を次の表に示します。

表19‒9　インジケータの意味に対応する記号定数および値

項番

意味

記号定数

値

1

ナル値

a_rdb_SQL_NULL_DATA

-1

2

非ナル値データ

a_rdb_SQL_NOT_NULL_DATA

0

19.7.5　a_rdb_SQLParameterInfo_t構造体（パラメタ情報）

(1)　機能

a_rdb_SQLParameterInfo_t構造体には，a_rdb_SQLDescribeParams()で取得した？パラメタの情報を格納します。

また，a_rdb_SQLBindParams()またはa_rdb_SQLBindArrayParams()による？パラメタの値を設定する領域の関連づけをする際にもこの構造体を使用します。

a_rdb_SQLDescribeParams()については，「19.4.7　a_rdb_SQLDescribeParams()（？パラメタの情報取得）」を，a_rdb_SQLBindParams()については，「19.4.4　a_rdb_SQLBindParams()（？パラメタの関連づけ）」を，a_rdb_SQLBindArrayParams()については，「19.4.2　a_rdb_SQLBindArrayParams()（？パラメタの一括関連づけ）」を参照してください。

(2)　形式

typedef struct a_rdb_TG_ParameterInfo {
  struct a_rdb_TG_DataType     *TypeInfo ;                    /* Out */
  unsigned short                Nullable ;                    /* Out */
  char                          _ParameterInfo_rsv01[2] ;
  a_rdb_SQLInd_t                Ind ;                         /* In  */
  char                          _ParameterInfo_rsv02[3] ;
  void                         *ParameterValue;               /* In  */
  char                          _ParameterInfo_rsv03[24] ;
} a_rdb_SQLParameterInfo_t ;

(3)　メンバの説明

TypeInfo：

？パラメタのデータ型に関する情報を取得するアドレスを指定します。

パラメタ記述を実行する場合に指定してください。パラメタ結合を実行する場合は指定する必要はありません。指定した場合は無視されます。

Nullable：

？パラメタにナル値を指定できるかどうかを返します。

ナル値を指定できない場合：a_rdb_SQL_IS_NOT_NULLABLE

ナル値を指定できる場合：a_rdb_SQL_IS_NULLABLE

パラメタ記述の場合に値が設定されます。

Ind：

インジケータ値を指定します。

パラメタ結合を実行する場合に指定してください。パラメタ記述を実行する場合は指定する必要はありません。指定した場合は無視されます。

ParameterValue：

値を設定するアドレスを指定します。

値は，SQLデータ型に対応するC言語またはC++言語のデータ記述で指定します。SQLのデータ型に対応するC言語またはC++言語のデータ記述については，「19.6.2　SQLのデータ型とデータ記述の対応」を参照してください。

パラメタ結合を実行する場合に指定してください。パラメタ記述を実行する場合は指定する必要はありません。指定した場合は無視されます。

(4)　留意事項

a_rdb_SQLParameterInfo_t構造体を使用する場合，最初に領域を0で初期化してください。そのあとで，使用する各メンバに値を指定してください。

19.7.6　a_rdb_SQLResultInfo_t構造体（SQL結果情報）

(1)　機能

a_rdb_SQLResultInfo_t構造体には，SQLの結果情報がCLI関数の呼び出し単位で格納されます。

(2)　形式

typedef struct a_rdb_TG_ResultInfo {
  unsigned long long  RowCount ;                  /* Out */
  unsigned char       isInConnect ;               /* Out */
  unsigned char       EndTran ;                   /* Out */
  unsigned char       RowCountOverFlowed ;        /* Out */
  unsigned char       isMessageLogFull ;          /* Out */
  unsigned char       isClientLogFull ;           /* Out */
  char                _ResultInfo_rsv01[3] ;
  char                SQLState[5] ;               /* Out */
  char                _ResultInfo_rsv02[11] ;
} a_rdb_SQLResultInfo_t ;

(3)　メンバの説明

RowCount：

CLI関数の戻り値がa_rdb_RC_SQL_SUCCESSまたはa_rdb_RC_SQL_NO_DATAの場合，処理結果行数を返します。それ以外の場合は0を返します。

なお，処理結果行数は0〜18,446,744,073,709,551,615までの範囲で返却します。

18,446,744,073,709,551,615を超えてオーバフローした場合は，18,446,744,073,709,551,615を返却し，RowCountOverFlowedにa_rdb_SQL_OVERFLOWEDを設定します。

isInConnect：

コネクションが確立されている（接続中）かどうかを返します。

確立されていない場合：a_rdb_SQL_IS_NOT_IN_CONNECT

確立されている場合：a_rdb_SQL_IS_IN_CONNECT

EndTran：

トランザクションの実行結果を返します。

トランザクションが正常終了した場合：a_rdb_SQL_COMMITTED

トランザクションが取り消された場合：a_rdb_SQL_ROLLBACKED

トランザクションが実行中の場合：a_rdb_SQL_TRAN_NOT_ENDED

トランザクションが開始前の場合：a_rdb_SQL_TRAN_NOT_STARTED

トランザクションが正常終了したときにSQLエラーが発生し，トランザクションを取り消した場合：a_rdb_SQL_DETECTED_ERROR_IN_COMMIT

トランザクションの実行結果とトランザクションの状態の対応を次の表に示します。

表19‒10　トランザクションの実行結果とトランザクションの状態の対応

項番

トランザクションの実行結果

トランザクションの状態

1

a_rdb_SQL_COMMITTED

トランザクション開始可能※

2

a_rdb_SQL_ROLLBACKED

トランザクション開始可能※

3

a_rdb_SQL_TRAN_NOT_ENDED

トランザクション実行中

4

a_rdb_SQL_TRAN_NOT_STARTED

トランザクション開始可能

5

a_rdb_SQL_DETECTED_ERROR_IN_COMMIT

トランザクション開始可能※

注※

COMMITおよびROLLBACKの成功によってトランザクションが決着し，次のトランザクションが開始できる状態です。

RowCountOverFlowed：

RowCountがオーバフローしたかどうかを返します。

オーバフローしていない場合：a_rdb_SQL_NOT_OVERFLOWED

オーバフローした場合：a_rdb_SQL_OVERFLOWED

isMessageLogFull：

サーバメッセージログファイルの状態を返します。

正常状態の場合：a_rdb_SQL_IS_NOT_LOG_FULL

縮退状態の場合：a_rdb_SQL_IS_LOG_FULL

サーバメッセージログファイルが縮退状態の場合は，HADB管理者に連絡してください。

isClientLogFull：

クライアントメッセージログファイルの状態を返します。

正常状態の場合：a_rdb_SQL_IS_NOT_LOG_FULL

縮退状態の場合：a_rdb_SQL_IS_LOG_FULL

クライアントメッセージログファイルが縮退状態の場合は，クライアントメッセージログファイルを格納しているディスクの空き容量を確保してください。環境変数ADBMSGLOGSIZEで指定したサイズ×2以上の空き容量が必要になります。

SQLState：

CLI関数の実行結果のSQLSTATEを返します。

SQLSTATEについては，マニュアルHADB　メッセージのSQLSTATEの一覧を参照してください。

19.8　CLI関数の戻り値

次に示すCLI関数の戻り値を次の表に示します。

HADBサーバへの接続および切り離し時に使用するCLI関数

トランザクションの制御時に使用するCLI関数

SQLの実行時に使用するCLI関数

表19‒11　CLI関数の戻り値

項番

事象

記号定数

値

1

CLI関数が正常に終了した

a_rdb_RC_SQL_SUCCESS

0

2

警告あり終了

a_rdb_RC_SQL_WARNING

+1

3

データがない

a_rdb_RC_SQL_NO_DATA

+100

4

SQLエラーが発生した

−

SQLCODE

5

クライアントメッセージログファイルにメッセージが出力できないエラーが発生した

−

エラー要因コード※

6

そのほかのエラーが発生した

a_rdb_RC_SQL_ERROR

-1

（凡例）

−：該当しません。

注※

エラー要因コードの一覧を次の表に示します。

表19‒12　エラー要因コードの一覧

項番

エラー要因コード

エラー要因

1

-10000

引数ConnectionHandleの指定に誤りがあります（NULLが指定されました）。

2

-11000

クライアントメッセージログファイルのメッセージカタログファイルの絶対パスの取得に失敗しました。

3

-12XXX

クライアントメッセージログファイルのメッセージカタログファイルのopen処理に失敗しました。XXXにはerrno（エラー番号）が返却されます。

4

-13000

環境変数ADBMSGLOGSIZE（クライアントメッセージログファイルのサイズ）の取得に失敗しました。

5

-14000

クライアントメッセージログファイルの絶対パスの取得に失敗しました。

6

-15XXX

クライアントメッセージログファイルのopen処理に失敗しました。XXXにはerrno（エラー番号）が返却されます。

7

-16XXX

クライアントメッセージログファイルのfstat処理に失敗しました。XXXにはerrno（エラー番号）が返却されます。

8

-17XXX

クライアントのメッセージログファイルのread処理に失敗しました。XXXにはerrno（エラー番号）が返却されます。

9

-18XXX

クライアントのメッセージログファイルのlseek処理に失敗しました。XXXにはerrno（エラー番号）が返却されます。

10

-19XXX

クライアントのメッセージログファイルのwrite処理に失敗しました。XXXにはerrno（エラー番号）が返却されます。

11

-21000

HADBクライアントのバージョンとODBCドライバのバージョンが不一致です。

データ型の変換時に使用するCLI関数の戻り値を次の表に示します。

表19‒13　データ型の変換時に使用するCLI関数の戻り値

項番

事象

記号定数

値

対処方法

1

CLI関数が正常に終了した

a_rdb_RC_CNV_SUCCESS

0

なし。

2

変換前のデータを格納している領域のアドレスが不正

a_rdb_RC_CNV_INVALID_SRC_ADDRESS

1

変換前のデータを格納している領域のアドレスを確認してください。

3

変換前のデータ長が不正

a_rdb_RC_CNV_INVALID_SRC_LENGTH

2

変換前のデータ長が正しいか確認してください。

4

変換前のデータに変換できないデータがある

a_rdb_RC_CNV_INVALID_FORMAT

3

変換前のデータを確認してください。

5

変換後のデータ型が不正

a_rdb_RC_CNV_INVALID_DEST_LENGTH

4

SQLのデータ型については，マニュアルHADB　SQLリファレンスのデータ型を参照してください。

そのあと，次に示す指定が正しいか確認してください。

a_rdb_CNV_charDECIMAL()の引数DECIMAL_PrecisionまたはDECIMAL_Scale

a_rdb_CNV_charTIME()の引数TIME_Scale

a_rdb_CNV_charTIMESTAMP()の引数TIMESTAMP_Scale

a_rdb_CNV_charBINARY()の引数BINARY_Length

a_rdb_CNV_charVARBINARY()の引数VARBINARY_Length

6

変換後のデータを格納する領域のアドレスが不正

a_rdb_RC_CNV_INVALID_DEST_ADDRESS

5

変換後のデータを格納する領域のアドレスを確認してください。

7

変換後のデータを格納する領域の長さが不正

a_rdb_RC_CNV_INVALID_BUF_LENGTH

6

変換されたデータを格納する領域の長さを指定する引数（BufferLength）の値を確認してください。

8

変換前のデータを格納する領域と，変換後のデータを格納する領域が重複している

a_rdb_RC_CNV_OVERRAPPING_AREA

7

領域のアドレスが重複していないか，引数の値を確認してください。

9

指定された文字列種別が不正

a_rdb_RC_CNV_INVALID_CHAR_TYPE

8

正しい文字列種別を指定してください。

付録

付録A　サンプルAP

HADBサーバへの接続・切り離し，および行の検索，追加，削除を実行するAPをサンプルAPとして提供しています。

付録A.1　サンプルAPの概要

HADBが提供しているサンプルAPを次の表に示します。

表A‒1　HADBが提供しているサンプルAP

項番

サンプルAPの名称

サンプルAPの記述言語

サンプルAPのファイル名

サンプルAPで実行する操作

1

sample1

Java言語

Sample1.java

表の検索（SELECT）

行の追加（INSERT）

行の削除（DELETE）

2

ODBC関数

odbc_sample1.c

3

C言語，C++言語

cli_sample1.c

メモ

サンプルAPは，HADBサーバの次に示すディレクトリ下にあります。

$ADBDIR/sample

付録A.2　サンプルAPを実行するための準備

サンプルAPを実行する前に，次に示す準備作業をしてください。

サンプルAPのmake環境を作成してください。HADBが提供するインクルードファイルおよびライブラリを設定し，makeを実行してください。

HADBクライアントの環境設定が完了している必要があります。HADBクライアントの環境設定については，「4.　HADBクライアントの環境設定（ODBCドライバおよびCLI関数を使用する場合）」を参照してください。

サンプルAPがアクセスするSAMPLE表を定義して，SAMPLE表にデータをインポートしてください。詳細については，「付録A.3　SAMPLE表の作成手順」を参照してください。

付録A.3　SAMPLE表の作成手順

SAMPLE表を作成するには，SAMPLE表を格納するデータ用DBエリア（ADBUTBL01およびADBUIDX01）が作成されている必要があります。ADBUTBL01およびADBUIDX01を作成していない場合は，ここで説明する方法でSAMPLE表を作成できません。

SAMPLE表を作成する手順を次に示します。

手順

ADBUSER02という名前のユーザを作成します。ADBUSER02ユーザのパスワードは#HelloHADB_02にします。

実行するSQL文

CREATE USER "ADBUSER02" IDENTIFIED BY '#HelloHADB_02'

ADBUSER02ユーザにはCONNECT権限およびスキーマ定義権限を付与します。

実行するSQL文

GRANT CONNECT, SCHEMA TO "ADBUSER02"

SAMPLE表を作成するには，SAMPLE表を作成するシェルスクリプト（$ADBDIR/sample/create_sampledb.sh）を実行します。

このシェルスクリプトを実行すると，SAMPLE表が定義されて，SAMPLE表にデータがインポートされます。

作成されるSAMPLE表のスキーマ定義，表定義，およびB-treeインデクス定義を次に示します。

CREATE SCHEMA "ADBUSER02"

CREATE TABLE "SAMPLE"(
    "STATECODE"       SMALLINT,
    "STATENAME"       VARCHAR(15),
    "ZIPCODE"         CHAR(15),
    "ADDRESS"         VARCHAR(100),
    "AREA"            DECIMAL(19))
  IN ADBUTBL01

CREATE INDEX "CODE_IDX" ON "SAMPLE"("STATECODE" ASC)
  IN ADBUIDX01 EMPTY

■SAMPLE表のイメージ

STATECODE

STATENAME

ZIPCODE

ADDRESS

AREA

1

Alabama

36130-2751

State Capitol N-104 600 Dexter Avenue Montgomery

135,765,000,000

2

Alaska

99811

State Capitol Juneau

1,717,854,000,000

3

Arizona

85007

State Capitol West Wing 1700 W. Washington, 9th Fl. Phoenix

295,254,000,000

：

：

：

：

：

49

Wisconsin

53707-7863

State Capitol P.O. Box 7863 Madison

169,639,000,000

50

Wyoming

82002-0010

State Capitol Cheyenne

253,336,000,000

［説明］

STATECODE：州番号

STATENAME：州名

ZIPCODE：郵便番号

ADDRESS：州議事堂の住所

AREA：面積

サンプルAPに関連するファイルを次に示します。

$ADBDIR/sample/Sample1.java：JDBCドライバを使用したサンプルAP

$ADBDIR/sample/odbc_sample1.c：ODBCドライバを使用したサンプルAP

$ADBDIR/sample/cli_sample1.c：CLI関数を使用したサンプルAP

$ADBDIR/sample/create_sampledb.sh：SAMPLE表を作成するシェルスクリプト

$ADBDIR/sample/SAMPLE.txt：SAMPLE表に格納するデータ

$ADBDIR/sample/SAMPLE_table.sql：SAMPLE表を定義する定義系SQLを記述したファイル

付録A.4　サンプルAPの実行手順

サンプルAP（sample1）の実行手順を次に示します。

手順

sample1の実行ファイルを起動します。

次に示すメッセージが表示されます。実行するSQL文（1〜3）を選択してください。選択したSQL文ごとの操作方法を(1)以降で説明します。

   ***** HADB CLI Function Sample Program *****
   1. Search (specify search range)
   2. Add
   3. Delete
   4. Exit
   Please specify a menu item (1 - 4):

(1)　SELECT文を選択した場合（1を選択した場合）

アメリカの州番号（STATECODE）を指定した検索が実行されます。次に示すSQL文が実行されます。

SELECT "STATECODE","STATENAME","ZIPCODE","ADDRESS","AREA"
    FROM "SAMPLE"
    WHERE "STATECODE" BETWEEN ? AND ?

SELECT文を選択すると，次に示すメッセージが標準出力に出力されます。

・Please specify the minimum number of search conditions (1 - 50):（入力待ち）
      ← 1つ目の?パラメタの値（下限値）を指定します。
・Please specify the maximum number of search conditions (1 - 50):（入力待ち）
      ← 2つ目の?パラメタの値（上限値）を指定します。

指定した値に従ってSELECT文が実行されます。

メモ

上記の2つの入力が空入力（［改行］だけを入力）の場合，1つ目に1，2つ目に50が指定されたと仮定し，SELECT文が実行されます。

(2)　INSERT文を選択した場合（2を選択した場合）

SAMPLE表に行が追加されます。次に示すSQL文が実行されます。

INSERT INTO "SAMPLE" VALUES (?,?,?,?,?)

INSERT文を選択すると，次に示すメッセージが標準出力に出力されます。

・Please specify a state code :(入力待ち)
      ← 1つ目の?パラメタの値（州番号）を指定します。
・Please specify a state name :(入力待ち)
      ← 2つ目の?パラメタの値（州名）を指定します。
・Please specify a zip code :(入力待ち)
      ← 3つ目の?パラメタの値（郵便番号）を指定します。
・Please specify an address :(入力待ち)
      ← 4つ目の?パラメタの値（州議事堂の住所）を指定します。
・Please specify an area :(入力待ち)
      ← 5つ目の?パラメタの値（面積）を指定します。

指定した値に従ってINSERT文が実行されます。

なお，不正な値を指定するとSQLエラーになります。

(3)　DELETE文を選択した場合（3を選択した場合）

SAMPLE表から行が削除されます。次に示すSQL文が実行されます。

DELETE FROM "SAMPLE" WHERE "STATECODE" = ?

DELETE文を選択すると，次に示すメッセージが標準出力に出力されます。

・Please specify the state code of the row to be deleted :(入力待ち)
      ← ?パラメタの値（削除する行の州番号）を指定します。

指定した値に従ってDELETE文が実行されます。

なお，不正な値を指定するとSQLエラーになります。

付録B　HADBクライアントのディレクトリの構成

ここでは，HADBクライアントのクライアントディレクトリ（インストール時），およびクライアントディレクトリ（運用時）の構成を説明します。

付録B.1　Windows版のHADBクライアントの場合

(1)　クライアントディレクトリ（インストール時）の構成

Windows版のHADBクライアントをインストールしたときのクライアントディレクトリ（インストール時）の構成を次の表に示します。

なお，表中の%INSTCLTDIR%は，クライアントディレクトリ（インストール時）を示します。

表B‒1　クライアントディレクトリ（インストール時）の構成（64ビット版のHADBクライアントの場合）

項番

フォルダ名およびファイル名

説明

1

%INSTCLTDIR%¥client

HADBクライアントで使用するコマンド，ライブラリ，ODBCドライバ，およびODBCデータソースセットアッププログラムを格納するフォルダ

2

%INSTCLTDIR%¥client¥bin

HADBクライアントで使用するコマンド，ODBCドライバ，およびODBCデータソースセットアッププログラムを格納するフォルダ

3

%INSTCLTDIR%¥client¥bin¥adbclt.dll

HADBクライアント

4

%INSTCLTDIR%¥client¥bin¥adbodbc.dll

ODBCドライバ

5

%INSTCLTDIR%¥client¥bin¥adbodbcstp.dll

ODBCデータソースセットアッププログラム

6

%INSTCLTDIR%¥client¥bin¥adbclt32.dll

HADBクライアント（32bit）

7

%INSTCLTDIR%¥client¥bin¥adbodbc32.dll

ODBCドライバ（32bit）

8

%INSTCLTDIR%¥client¥bin¥adbodbstp32.dll

ODBCデータソースセットアッププログラム（32bit）

9

%INSTCLTDIR%¥client¥lib

HADBクライアントで使用する各種ライブラリを格納するフォルダ

10

%INSTCLTDIR%¥client¥lib¥adbclt.lib

クライアントライブラリ

11

%INSTCLTDIR%¥client¥lib¥adbclt32.lib

クライアントライブラリ（32bit）

12

%INSTCLTDIR%¥client¥lib¥adbjdbc8.jar

JDBCドライバ（JRE8版）

13

%INSTCLTDIR%¥conf

クライアント定義を格納するフォルダ

14

%INSTCLTDIR%¥include

ユーザ提供ヘッダファイルを格納するフォルダ

15

%INSTCLTDIR%¥include¥adbcnv.h

ユーザ提供ヘッダファイル

16

%INSTCLTDIR%¥include¥adbcli.h

17

%INSTCLTDIR%¥include¥adbtypes.h

18

%INSTCLTDIR%¥include¥adbodb.h

19

%INSTCLTDIR%¥lib

各種ライブラリを格納するフォルダ

20

%INSTCLTDIR%¥lib¥sysdef

定義解析情報ファイルを格納するフォルダ

21

%INSTCLTDIR%¥lib¥sysdef¥adbclt.def

定義解析情報ファイル

22

%INSTCLTDIR%¥sample

サンプルAPおよび定義ファイルのひな形を格納するフォルダ

23

%INSTCLTDIR%¥sample¥cli_sample1.c

サンプルAP

24

%INSTCLTDIR%¥sample¥Sample1.java

サンプルAP（JDBC用）

25

%INSTCLTDIR%¥sample¥odbc_sample1.c

サンプルAP（ODBC用）

26

%INSTCLTDIR%¥sample¥conf

定義ファイルのひな形を格納するフォルダ

27

%INSTCLTDIR%¥sample¥conf¥client.def

クライアント定義のひな形ファイル

28

%INSTCLTDIR%¥spool

HADBクライアントの実行結果ログを格納するフォルダ

29

%INSTCLTDIR%¥vclib

Microsoft Visual Studio 2019のVisual C++再頒布可能パッケージを格納するフォルダ

30

%INSTCLTDIR%¥vclib¥VC_redist.x64.exe

Microsoft Visual Studio 2019のVisual C++再頒布可能パッケージ

31

%INSTCLTDIR%¥adbreg.reg

レジストリ登録コマンド

32

%INSTCLTDIR%¥adbunreg.reg

レジストリ削除コマンド

33

%INSTCLTDIR%¥readme.txt

READMEファイル（リリースノート）

メモ

上記の表に示すフォルダおよびファイルが作成されるタイミングは，HADBクライアントのインストール時です。また，上記の表に示すフォルダおよびファイルが削除されるタイミングは，HADBクライアントのアンインストール時です。

表B‒2　クライアントディレクトリ（インストール時）の構成（32ビット版のHADBクライアントの場合）

項番

フォルダ名およびファイル名

説明

1

%INSTCLTDIR%¥client

HADBクライアントで使用するコマンド，ライブラリ，ODBCドライバ，およびODBCデータソースセットアッププログラムを格納するフォルダ

2

%INSTCLTDIR%¥client¥bin

HADBクライアントで使用するコマンド，ODBCドライバ，およびODBCデータソースセットアッププログラムを格納するフォルダ

3

%INSTCLTDIR%¥client¥bin¥adbclt32.dll

HADBクライアント

4

%INSTCLTDIR%¥client¥bin¥adbodbc32.dll

ODBCドライバ

5

%INSTCLTDIR%¥client¥bin¥adbodbstp32.dll

ODBCデータソースセットアッププログラム

6

%INSTCLTDIR%¥client¥lib

HADBクライアントで使用する各種ライブラリを格納するフォルダ

7

%INSTCLTDIR%¥client¥lib¥adbclt32.lib

クライアントライブラリ

8

%INSTCLTDIR%¥client¥lib¥adbjdbc8.jar

JDBCドライバ（JRE8版）

9

%INSTCLTDIR%¥conf

クライアント定義を格納するフォルダ

10

%INSTCLTDIR%¥include

ユーザ提供ヘッダファイルを格納するフォルダ

11

%INSTCLTDIR%¥include¥adbcnv.h

ユーザ提供ヘッダファイル

12

%INSTCLTDIR%¥include¥adbcli.h

13

%INSTCLTDIR%¥include¥adbtypes.h

14

%INSTCLTDIR%¥include¥adbodb.h

15

%INSTCLTDIR%¥lib

各種ライブラリを格納するフォルダ

16

%INSTCLTDIR%¥lib¥sysdef

定義解析情報ファイルを格納するフォルダ

17

%INSTCLTDIR%¥lib¥sysdef¥adbclt.def

定義解析情報ファイル

18

%INSTCLTDIR%¥sample

サンプルAPおよび定義ファイルのひな形を格納するフォルダ

19

%INSTCLTDIR%¥sample¥cli_sample1.c

サンプルAP

20

%INSTCLTDIR%¥sample¥Sample1.java

サンプルAP（JDBC用）

21

%INSTCLTDIR%¥sample¥odbc_sample1.c

サンプルAP（ODBC用）

22

%INSTCLTDIR%¥sample¥conf

定義ファイルのひな形を格納するフォルダ

23

%INSTCLTDIR%¥sample¥conf¥client.def

クライアント定義のひな形ファイル

24

%INSTCLTDIR%¥spool

HADBクライアントの実行結果ログを格納するフォルダ

25

%INSTCLTDIR%¥vclib32

Microsoft Visual Studio 2019のVisual C++再頒布可能パッケージを格納するフォルダ

26

%INSTCLTDIR%¥vclib32¥VC_redist.x86.exe

Microsoft Visual Studio 2019のVisual C++再頒布可能パッケージ

27

%INSTCLTDIR%¥adbreg32.reg

レジストリ登録コマンド

28

%INSTCLTDIR%¥adbunreg32.reg

レジストリ削除コマンド

29

%INSTCLTDIR%¥readme.txt

READMEファイル（リリースノート）

メモ

上記の表に示すフォルダおよびファイルが作成されるタイミングは，HADBクライアントのインストール時です。また，上記の表に示すフォルダおよびファイルが削除されるタイミングは，HADBクライアントのアンインストール時です。

(2)　クライアントディレクトリ（運用時）の構成

Windows版のHADBクライアントの場合は，クライアントディレクトリ（インストール時）をそのままクライアントディレクトリ（運用時）として使用します。

表B‒3　クライアントディレクトリ（運用時）の構成（64ビット版のHADBクライアントの場合）

項番

フォルダ名およびファイル名

説明

作成されるタイミング

削除されるタイミング

1

%ADBCLTDIR%¥client

HADBクライアントで使用するコマンド，ライブラリ，ODBCドライバ，およびODBCデータソースセットアッププログラムを格納するフォルダ

HADBクライアントのインストール時

HADBクライアントのアンインストール時

2

%ADBCLTDIR%¥client¥bin

HADBクライアントで使用するコマンド，ODBCドライバ，およびODBCデータソースセットアッププログラムを格納するフォルダ

3

%ADBCLTDIR%¥client¥bin¥adbclt.dll

HADBクライアント

4

%ADBCLTDIR%¥client¥bin¥adbodbc.dll

ODBCドライバ

5

%ADBCLTDIR%¥client¥bin¥adbodbcstp.dll

ODBCデータソースセットアッププログラム

6

%ADBCLTDIR%¥client¥bin¥adbclt32.dll

HADBクライアント（32bit）

7

%ADBCLTDIR%¥client¥bin¥adbodbc32.dll

ODBCドライバ（32bit）

8

%ADBCLTDIR%¥client¥bin¥adbodbstp32.dll

ODBCデータソースセットアッププログラム（32bit）

9

%ADBCLTDIR%¥client¥lib

HADBクライアントで使用する各種ライブラリを格納するフォルダ

10

%ADBCLTDIR%¥client¥lib¥adbclt.lib

クライアントライブラリ

11

%ADBCLTDIR%¥client¥lib¥adbclt32.lib

クライアントライブラリ（32bit）

12

%ADBCLTDIR%¥client¥lib¥adbjdbc8.jar

JDBCドライバ（JRE8版）

13

%ADBCLTDIR%¥conf

クライアント定義を格納するフォルダ

14

%ADBCLTDIR%¥include

ユーザ提供ヘッダファイルを格納するフォルダ

15

%ADBCLTDIR%¥include¥adbcnv.h

ユーザ提供ヘッダファイル

16

%ADBCLTDIR%¥include¥adbcli.h

17

%ADBCLTDIR%¥include¥adbtypes.h

18

%ADBCLTDIR%¥include¥adbodb.h

19

%ADBCLTDIR%¥lib

各種ライブラリを格納するフォルダ

20

%ADBCLTDIR%¥lib¥sysdef

定義解析情報ファイルを格納するフォルダ

21

%ADBCLTDIR%¥lib¥sysdef¥adbclt.def

定義解析情報ファイル

22

%ADBCLTDIR%¥sample

サンプルAPおよび定義ファイルのひな形を格納するフォルダ

23

%ADBCLTDIR%¥sample¥cli_sample1.c

サンプルAP

24

%ADBCLTDIR%¥sample¥Sample1.java

サンプルAP（JDBC用）

25

%ADBCLTDIR%¥sample¥odbc_sample1.c

サンプルAP（ODBC用）

26

%ADBCLTDIR%¥sample¥conf

定義ファイルのひな形を格納するフォルダ

27

%ADBCLTDIR%¥sample¥conf¥client.def

クライアント定義のひな形ファイル

28

%ADBCLTDIR%¥spool※1

HADBクライアントの実行結果ログを格納するフォルダ

29

%ADBCLTDIR%¥spool¥adbmessagecltXX.log

クライアントメッセージログファイル※2

HADBクライアントのインストール後の，HADBクライアントからHADBサーバへの初回接続時

30

%ADBCLTDIR%¥spool¥.adbmessageclt

クライアントメッセージログファイル番号管理ファイル

31

%ADBCLTDIR%¥vclib

Microsoft Visual Studio 2019のVisual C++再頒布可能パッケージを格納するフォルダ

HADBクライアントのインストール時

32

%ADBCLTDIR%¥vclib¥VC_redist.x64.exe

Microsoft Visual Studio 2019のVisual C++再頒布可能パッケージ

33

%ADBCLTDIR%¥adbreg.reg

レジストリ登録コマンド

34

%ADBCLTDIR%¥adbunreg.reg

レジストリ削除コマンド

35

%ADBCLTDIR%¥readme.txt

READMEファイル（リリースノート）

36

%ADBODBTRCPATH%¥adbodbtrace_PID_TID_xx.log※1

HADB ODBCドライバトレースファイル※3

HADB ODBCドライバを使用した初回のハンドル取得時

HADBクライアントはファイルを削除しません。

注※1

HADBクライアント（ODBCドライバを含む）を使用する可能性があるOSユーザに対して，次のフォルダの書き込み権限を与えてください。

%ADBCLTDIR%¥spool

%ADBODBTRCPATH%

注※2

クライアントメッセージログファイルは，最大4個作成されます。1ファイル当たりの最大容量は，環境変数ADBMSGLOGSIZEで指定します。

注※3

HADB ODBCドライバトレースファイルは，1プロセスまたは1スレッド当たり最大2個作成されます。1ファイル当たりの最大容量は，環境変数ADBODBTRCSIZEで指定します。

HADB ODBCドライバトレースファイルを格納するフォルダは，ユーザが作成します。フォルダが不要になった場合は，ユーザがフォルダを削除します，HADBクライアントは，フォルダを作成または削除しません。

表B‒4　クライアントディレクトリ（運用時）の構成（32ビット版のHADBクライアントの場合）

項番

フォルダ名およびファイル名

説明

作成されるタイミング

削除されるタイミング

1

%ADBCLTDIR%¥client

HADBクライアントで使用するコマンド，ライブラリ，ODBCドライバ，およびODBCデータソースセットアッププログラムを格納するフォルダ

HADBクライアントのインストール時

HADBクライアントのアンインストール時

2

%ADBCLTDIR%¥client¥bin

HADBクライアントで使用するコマンド，ODBCドライバ，およびODBCデータソースセットアッププログラムを格納するフォルダ

3

%ADBCLTDIR%¥client¥bin¥adbclt32.dll

HADBクライアント

4

%ADBCLTDIR%¥client¥bin¥adbodbc32.dll

ODBCドライバ

5

%ADBCLTDIR%¥client¥bin¥adbodbstp32.dll

ODBCデータソースセットアッププログラム

6

%ADBCLTDIR%¥client¥lib

HADBクライアントで使用する各種ライブラリを格納するフォルダ

7

%ADBCLTDIR%¥client¥lib¥adbclt32.lib

クライアントライブラリ

8

%ADBCLTDIR%¥client¥lib¥adbjdbc8.jar

JDBCドライバ（JRE8版）

9

%ADBCLTDIR%¥conf

クライアント定義を格納するフォルダ

10

%ADBCLTDIR%¥include

ユーザ提供ヘッダファイルを格納するフォルダ

11

%ADBCLTDIR%¥include¥adbcnv.h

ユーザ提供ヘッダファイル

12

%ADBCLTDIR%¥include¥adbcli.h

13

%ADBCLTDIR%¥include¥adbtypes.h

14

%ADBCLTDIR%¥include¥adbodb.h

15

%ADBCLTDIR%¥lib

各種ライブラリを格納するフォルダ

16

%ADBCLTDIR%¥lib¥sysdef

定義解析情報ファイルを格納するフォルダ

17

%ADBCLTDIR%¥lib¥sysdef¥adbclt.def

定義解析情報ファイル

18

%ADBCLTDIR%¥sample

サンプルAPおよび定義ファイルのひな形を格納するフォルダ

19

%ADBCLTDIR%¥sample¥cli_sample1.c

サンプルAP

20

%ADBCLTDIR%¥sample¥Sample1.java

サンプルAP（JDBC用）

21

%ADBCLTDIR%¥sample¥odbc_sample1.c

サンプルAP（ODBC用）

22

%ADBCLTDIR%¥sample¥conf

定義ファイルのひな形を格納するフォルダ

23

%ADBCLTDIR%¥sample¥conf¥client.def

クライアント定義のひな形ファイル

24

%ADBCLTDIR%¥spool※1

HADBクライアントの実行結果ログを格納するフォルダ

25

%ADBCLTDIR%¥spool¥adbmessagecltXX.log

クライアントメッセージログファイル※2

HADBクライアントのインストール後の，HADBクライアントからHADBサーバへの初回接続時

26

%ADBCLTDIR%¥spool¥.adbmessageclt

クライアントメッセージログファイル番号管理ファイル

27

%ADBCLTDIR%¥vclib32

Microsoft Visual Studio 2019のVisual C++再頒布可能パッケージを格納するフォルダ

HADBクライアントのインストール時

28

%ADBCLTDIR%¥vclib32¥VC_redist.x86.exe

Microsoft Visual Studio 2019のVisual C++再頒布可能パッケージ

29

%ADBCLTDIR%¥adbreg32.reg

レジストリ登録コマンド

30

%ADBCLTDIR%¥adbunreg32.reg

レジストリ削除コマンド

31

%ADBCLTDIR%¥readme.txt

READMEファイル（リリースノート）

32

%ADBODBTRCPATH%¥adbodbtrace_PID_TID_xx.log※1

HADB ODBCドライバトレースファイル※3

HADB ODBCドライバを使用した初回のハンドル取得時

HADBクライアントはファイルを削除しません。

注※1

HADBクライアント（ODBCドライバを含む）を使用する可能性があるOSユーザに対して，次のフォルダの書き込み権限を与えてください。

%ADBCLTDIR%¥spool

%ADBODBTRCPATH%

注※2

クライアントメッセージログファイルは，最大4個作成されます。1ファイル当たりの最大容量は，環境変数ADBMSGLOGSIZEで指定します。

注※3

HADB ODBCドライバトレースファイルは，1プロセスまたは1スレッド当たり最大2個作成されます。1ファイル当たりの最大容量は，環境変数ADBODBTRCSIZEで指定します。

HADB ODBCドライバトレースファイルを格納するフォルダは，ユーザが作成します。フォルダが不要になった場合は，ユーザがフォルダを削除します，HADBクライアントは，フォルダを作成または削除しません。

付録B.2　Linux版のHADBクライアントの場合

(1)　クライアントディレクトリ（インストール時）の構成

Linux版のHADBクライアントディレクトリ（インストール時）の構成を次の表に示します。

なお，表中の$INSTCLTDIRはHADBクライアントディレクトリ（インストール時）を示します。HADBクライアントディレクトリ（インストール時）は，adbinstallコマンドでHADBクライアントをインストールしたディレクトリです。

表B‒5　クライアントディレクトリ（インストール時）の構成

項番

ディレクトリ名およびファイル名

説明

1

$INSTCLTDIR/client

HADBクライアントで使用するコマンドおよびライブラリを格納するディレクトリ

2

$INSTCLTDIR/client/bin

HADBクライアントで使用するコマンドを格納するディレクトリ

3

$INSTCLTDIR/client/bin/adbsql

SQL実行コマンド

4

$INSTCLTDIR/client/lib

HADBクライアントで使用する各種ライブラリを格納するディレクトリ

5

$INSTCLTDIR/client/lib/libadbclt.so

クライアントライブラリ

6

$INSTCLTDIR/client/lib/adbjdbc8.jar

JDBCドライバ（JRE8版）

7

$INSTCLTDIR/conf

クライアント定義を格納するディレクトリ

8

$INSTCLTDIR/include

ユーザ提供ヘッダファイルを格納するディレクトリ

9

$INSTCLTDIR/include/adbcnv.h

ユーザ提供ヘッダファイル

10

$INSTCLTDIR/include/adbcli.h

11

$INSTCLTDIR/include/adbtypes.h

12

$INSTCLTDIR/include/adbodb.h

13

$INSTCLTDIR/lib

各種ライブラリを格納するディレクトリ

14

$INSTCLTDIR/lib/adbmsg.cat

メッセージカタログファイル

15

$INSTCLTDIR/lib/sysdef

定義解析情報ファイルを格納するディレクトリ

16

$INSTCLTDIR/lib/sysdef/adbclt.def

定義解析情報ファイル

17

$INSTCLTDIR/sample

サンプルAPおよび定義ファイルのひな形を格納するディレクトリ

18

$INSTCLTDIR/sample/cli_sample1.c

サンプルAP

19

$INSTCLTDIR/sample/Sample1.java

サンプルAP（JDBC用）

20

$INSTCLTDIR/sample/odbc_sample1.c

サンプルAP（ODBC用）

21

$INSTCLTDIR/sample/conf

定義ファイルのひな形を格納するディレクトリ

22

$INSTCLTDIR/sample/conf/client.def

クライアント定義のひな形ファイル

23

$INSTCLTDIR/spool

HADBクライアントの実行結果ログを格納するディレクトリ

24

$INSTCLTDIR/adbinstcl.log

HADBクライアントをインストールしたときの実行結果ログファイル

メモ

上記の表に示すディレクトリおよびファイルが作成されるタイミングは，HADBクライアントのインストール時です。また，上記の表に示すディレクトリおよびファイルが削除されるタイミングは，HADBクライアントのアンインストール時です。

(2)　クライアントディレクトリ（運用時）の構成

クライアントディレクトリ（運用時）の構成を次の表に示します。

表B‒6　クライアントディレクトリ（運用時）の構成

項番

ディレクトリ名およびファイル名

説明

作成されるタイミング

削除されるタイミング

1

$ADBCLTDIR/client

HADBクライアントで使用するコマンドおよびライブラリを格納するディレクトリ

HADBクライアントのインストール時

HADBクライアントのアンインストール時

2

$ADBCLTDIR/client/bin

HADBクライアントで使用するコマンドを格納するディレクトリ

3

$ADBCLTDIR/client/bin/adbsql

SQL実行コマンド

4

$ADBCLTDIR/client/lib

HADBクライアントで使用する各種ライブラリを格納するディレクトリ

5

$ADBCLTDIR/client/lib/libadbclt.so

クライアントライブラリ

6

$ADBCLTDIR/client/lib/adbjdbc8.jar

JDBCドライバ（JRE8版）

7

$ADBCLTDIR/conf

クライアント定義を格納するディレクトリ

8

$ADBCLTDIR/include

ユーザ提供ヘッダファイルを格納するディレクトリ

9

$ADBCLTDIR/include/adbcnv.h

ユーザ提供ヘッダファイル

10

$ADBCLTDIR/include/adbcli.h

11

$ADBCLTDIR/include/adbtypes.h

12

$ADBCLTDIR/include/adbodb.h

13

$ADBCLTDIR/lib

各種ライブラリを格納するディレクトリ

14

$ADBCLTDIR/lib/adbmsg.cat

メッセージカタログファイル

15

$ADBCLTDIR/lib/sysdef

定義解析情報ファイルを格納するディレクトリ

16

$ADBCLTDIR/lib/sysdef/adbclt.def

定義解析情報ファイル

17

$ADBCLTDIR/sample

サンプルAPおよび定義ファイルのひな形を格納するディレクトリ

18

$ADBCLTDIR/sample/cli_sample1.c

サンプルAP

19

$ADBCLTDIR/sample/Sample1.java

サンプルAP（JDBC用）

20

$ADBCLTDIR/sample/odbc_sample1.c

サンプルAP（ODBC用）

21

$ADBCLTDIR/sample/conf

定義ファイルのひな形を格納するディレクトリ

22

$ADBCLTDIR/sample/conf/client.def

クライアント定義のひな形ファイル

23

$ADBCLTDIR/spool

HADBクライアントの実行結果ログを格納するディレクトリ

24

$ADBCLTDIR/spool/adbmessagecltXX.log

クライアントメッセージログファイル※

HADBクライアントのインストール後の，HADBクライアントからHADBサーバへの初回接続時

25

$ADBCLTDIR/spool/.adbmessageclt

クライアントメッセージログファイル番号管理ファイル

26

$ADBCLTDIR/adbinstcl.log

HADBクライアントをインストールしたときの実行結果ログファイル

HADBクライアントのインストール時

注※

クライアントメッセージログファイルは，最大4個作成されます。1ファイル当たりの最大容量は，環境変数ADBMSGLOGSIZEで指定します。

付録C　HADBクライアントのメモリ所要量の見積もり

ここでは，HADBクライアントが使用するメモリ所要量の見積もりについて説明します。

付録C.1　HADBサーバへの接続時に使用するメモリ所要量

HADBサーバへの接続時に使用するメモリ所要量は，12キロバイトになります。

付録C.2　HADBクライアントとHADBサーバの通信時に使用するメモリ所要量

HADBクライアントとHADBサーバの通信時に使用するメモリ所要量は，次に示す計算式から求めてください。

計算式（単位：キロバイト）

通信時に使用するメモリ所要量＝ RPCC＋SBF＋256

(1)　RPCCの求め方

RPCC（通信管理情報）は，次に示す計算式から求めてください。

計算式（単位：キロバイト）

SMSG：HADBサーバの送信データサイズ

SMSGの求め方については，マニュアルHADB　システム構築・運用ガイドの通常運用時のメモリ所要量の求め方のリアルスレッド固有メモリの所要量の求め方（通常運用時）にある変数RTHD_COMMUSZの求め方の，変数SMSGの説明を参照してください。

max_sql_concurrent_exec_num：

1トランザクション内で同時に実行するSQL文の最大数

(2)　SBFの求め方

SBF（送信バッファ）の初期確保サイズは4,096バイトになります。

初期確保サイズを超える送信データが作成された場合，次に示す計算式で求められた値を再確保します。

計算式（再確保時）（単位：キロバイト）

SBF＝ ↑CMSG÷4,096↑×4

CMSG：HADBクライアントからの送信データサイズ

送信データサイズは処理の内容によって異なります。各処理で確保される送信データサイズを次の表に示します。

表C‒1　各処理で確保される送信データサイズの一覧

項番

処理内容

送信データサイズの計算式（単位：バイト）

1

前処理および実行をした場合

CMSG＝clt_base_info＋clt_exec_direct＋clt_sql_text

2

カーソルをオープンした場合

CMSG＝clt_base_info＋clt_open＋PARAM_DATA

3

SQL文を実行した場合

CMSG＝clt_base_info＋clt_exec＋PARAM_DATA

4

前処理をした場合

CMSG＝clt_base_info＋clt_prepare＋clt_sql_text

（凡例）

clt_base_info：送信データ基本情報

32バイトを代入してください。

clt_exec_direct：前処理および実行固有情報

44バイトを代入してください。

clt_sql_text：SQLテキストのサイズ

実行するSQL文の長さ（単位：バイト）を代入してください。

clt_open：カーソルオープン固有情報

48バイトを代入してください。

clt_exec：実行固有情報

48バイトを代入してください。

clt_prepare：前処理固有情報

44バイトを代入してください。

PARAM_DATA：？パラメタ情報

次に示す計算式から求めてください。

計算式（単位：バイト）

param_num：SQL文に指定した？パラメタ数

param_size（i）：各？パラメタ数に指定したデータサイズ

array_num：一括更新した？パラメタの組の数※

注※

APの実装方法によって異なります。

CLI関数を使用したAPの場合

a_rdb_SQLBindArrayParams()の引数ArrayCountに指定した数になります。a_rdb_SQLBindParams()を使用してパラメタ結合した場合は，1で固定されます。

JDBCドライバを使用したAPの場合

addBatchメソッドで登録したパラメタリストの数になります。executeBatchメソッドまたはexecuteLargeBatchメソッドを使用しない場合は，1で固定されます。

索引

記号

？パラメタ

APの設計[1]

CLI関数の使い方[1]

？パラメタ数の取得

a_rdb_SQLNumParams()[1]

CLI関数の使用例[1]

？パラメタの値の一括転送[1]

？パラメタの一括関連づけ[1]

？パラメタの関連づけ

a_rdb_SQLBindParams()[1]

CLI関数の使用例[1]

？パラメタの情報取得

a_rdb_SQLDescribeParams()[1]

CLI関数の使用例[1]

A

a_rdb_CNV_BINARYchar()[1]

a_rdb_CNV_charBINARY()[1]

a_rdb_CNV_charDATE()[1]

a_rdb_CNV_charDECIMAL()[1]

a_rdb_CNV_charTIME()[1]

a_rdb_CNV_charTIMESTAMP()[1]

a_rdb_CNV_charVARBINARY()[1]

a_rdb_CNV_DATEchar()[1]

a_rdb_CNV_DECIMALchar()[1]

a_rdb_CNV_TIMEchar()[1]

a_rdb_CNV_TIMESTAMPchar()[1]

a_rdb_CNV_VARBINARYchar()[1]

a_rdb_SQLAllocConnect()[1]

a_rdb_SQLAllocStmt()[1]

a_rdb_SQLBindArrayParams()[1]

a_rdb_SQLBindCols()[1]

a_rdb_SQLBindParams()[1]

a_rdb_SQLCancel()[1]

a_rdb_SQLCloseCursor()[1]

a_rdb_SQLColumnInfo_t構造体[1]

a_rdb_SQLConnect()[1]

a_rdb_SQLDataType_t構造体[1]

a_rdb_SQLDescribeCols()[1]

a_rdb_SQLDescribeParams()[1]

a_rdb_SQLDisconnect()[1]

a_rdb_SQLEndTran()[1]

a_rdb_SQLExecDirect()[1]

a_rdb_SQLExecute()[1]

a_rdb_SQLFetch()[1]

a_rdb_SQLFreeConnect()[1]

a_rdb_SQLFreeStmt()[1]

a_rdb_SQLInd_t[1]

a_rdb_SQLNameInfo_t構造体[1]

a_rdb_SQLNumParams()[1]

a_rdb_SQLNumResultCols()[1]

a_rdb_SQLParameterInfo_t構造体[1]

a_rdb_SQLPrepare()[1]

a_rdb_SQLResultInfo_t構造体[1]

a_rdb_SQLSetConnectAttr()[1]

absolute(int row)[1]

acceptsURL(String url)[1]

ADB_AUDITREAD[1]

adb_clt_ap_name

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_clt_fetch_size

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_clt_group_name

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_clt_rpc_con_wait_time

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_clt_rpc_sql_wait_time

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_clt_rpc_srv_host

クライアント定義[1]

システムプロパティ[1]

ユーザプロパティ[1]

adb_clt_rpc_srv_port

クライアント定義[1]

システムプロパティ[1]

ユーザプロパティ[1]

adb_clt_sql_order_mode

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_clt_sql_parallel_exec

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_clt_sql_text_out

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_clt_trn_access_mode

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_clt_trn_iso_lv

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

ADB_CSVREAD[1]

adb_dbbuff_wrktbl_clt_blk_num

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_jdbc_cache_info_max[1]

adb_jdbc_exc_trc_out_path[1]

adb_jdbc_info_max[1]

adb_jdbc_trc_out_lv[1]

adb_sql_exe_hashflt_area_size

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_sql_exe_hashgrp_area_size

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_sql_exe_hashtbl_area_size

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_sql_exe_max_rthd_num

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_sql_prep_dec_div_rs_prior

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

adb_sql_prep_delrsvd_use_srvdef

クライアント定義[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

ADBCLTDIR〔環境変数〕[1], [2]

ADBCLTLANG〔環境変数〕[1], [2]

ADBMSGLOGSIZE〔環境変数〕[1], [2]

ADBODBAPMODE〔環境変数〕[1]

ADBODBTRC〔環境変数〕[1]

ADBODBTRCLV〔環境変数〕[1]

ADBODBTRCPATH〔環境変数〕[1]

ADBODBTRCSIZE〔環境変数〕[1]

ADBSQLNULLCHAR〔環境変数〕[1]

addBatch

PreparedStatementインタフェース[1]

Statementインタフェース[1]

addConnectionEventListener[1]

afterLast()[1]

allProceduresAreCallable()[1]

allTablesAreSelectable()[1]

AP識別子[1]

APの設計[1]

APのチューニング[1]

APの無応答状態への対策[1]

JDBCドライバ使用時[1]

Arrayインタフェース[1]

autoCommitFailureClosesAllResultSets()[1]

AUTOCOMMITの仕様[1]

B

B-treeインデクスによる評価方式[1]

B-treeインデクスの選択規則[1]

beforeFirst()[1]

BINARY型データの変換〔CLI関数〕[1]

BINARY型データへの変換〔CLI関数〕[1]

BUILD COLUMN[1], [2]

C

cancel()[1]

CLASSPATH〔環境変数〕[1]

clearBatch()[1]

clearParameters()[1]

clearWarnings()

Connectionインタフェース[1]

ResultSetインタフェース[1]

Statementインタフェース[1]

CLI関数[1]

CLI関数の戻り値[1]

close()

Connectionインタフェース[1]

PooledConnectionインタフェース[1]

ResultSetインタフェース[1]

Statementインタフェース[1]

closeOnCompletion()[1]

COLLECT TIME〔表コスト情報〕[1]

COLLECT VERSION〔表コスト情報〕[1]

COLUMN[1]

COLUMN STORE[1]

commit()[1]

connect(String url, Properties info)[1]

Connection Number[1]

ConnectionPoolDataSourceインタフェース[1]

Connectionインタフェース[1]

CREATE FILTER[1], [2]

CREATE GLOBAL WORK TABLE[1]

CREATE LOCAL WORK TABLE[1]

createStatement()[1]

createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)[1]

createStatement(int resultSetType, int resultSetConcurrency)[1]

CROSS JOIN[1]

D

DatabaseMetaDataインタフェース[1]

dataDefinitionCausesTransactionCommit()[1]

dataDefinitionIgnoredInTransactions()[1]

DataSourceインタフェース[1]

DataSourceオブジェクトの生成[1]

DATE型データの変換〔CLI関数〕[1]

DATE型データへの変換〔CLI関数〕[1]

DECIMAL型データの変換〔CLI関数〕[1]

DECIMAL型データへの変換〔CLI関数〕[1]

DELEGATION[1]

DELETE STATEMENT[1]

deletesAreDetected(int type)[1]

DERIVED TABLE[1]

DISTINCT[1]

doesMaxRowSizeIncludeBlobs()[1]

DriverPropertyInfoの各フィールドの設定値[1]

Driverインタフェース[1]

Driverクラスの登録方法[1]

E

EXCEPT ALL[1]

EXCEPT DISTINCT[1]

Exceptionトレースログ[1]

execute

PreparedStatementインタフェース[1]

Statementインタフェース[1]

executeBatch()[1]

executeLargeBatch()[1]

executeLargeUpdate()[1]

executeLargeUpdate(String sql)[1]

executeQuery

PreparedStatementインタフェース[1]

Statementインタフェース[1]

executeUpdate

PreparedStatementインタフェース[1]

Statementインタフェース[1]

F

FILTER[1], [2]

findColumn(String columnName)[1]

first()[1]

FULL OUTER JOIN[1]

FUNCTION NAME[1]

G

generatedKeyAlwaysReturned()[1]

getApName()[1]

getArray()[1]

getArray(int columnIndex)[1]

getArray(long index, int count)[1]

getArray(String columnName)[1]

getAsciiStream(int columnIndex)[1]

getAsciiStream(String columnName)[1]

getAttributes[1]

getAutoCommit()[1]

getBaseType()[1]

getBaseTypeName()[1]

getBestRowIdentifier[1]

getBigDecimal(int columnIndex)[1]

getBigDecimal(String columnName)[1]

getBinaryStream(int columnIndex)[1]

getBinaryStream(String columnName)[1]

getBoolean(int columnIndex)[1]

getBoolean(String columnName)[1]

getByte(int columnIndex)[1]

getByte(String columnName)[1]

getBytes(int columnIndex)[1]

getBytes(String columnName)[1]

getCatalog()[1]

getCatalogName(int column)[1]

getCatalogs()[1]

getCatalogSeparator()[1]

getCatalogTerm()[1]

getCharacterStream(int columnIndex)[1]

getCharacterStream(String columnName)[1]

getClientInfoProperties()[1]

getColumnClassName(int column)[1]

getColumnCount()[1]

getColumnDisplaySize(int column)[1]

getColumnLabel(int column)[1]

getColumnName(int column)[1]

getColumnPrivileges[1]

getColumns[1]

getColumnType(int column)[1]

getColumnTypeName(int column)[1]

getConcurrency()[1]

getConnection

DatabaseMetaDataインタフェース[1]

DataSourceインタフェース[1], [2]

PooledConnectionインタフェース[1]

Statementインタフェース[1]

getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable)[1]

getCursorName()[1]

getDatabaseMajorVersion()[1]

getDatabaseMinorVersion()[1]

getDatabaseProductName()[1]

getDatabaseProductVersion()[1]

getDate(int columnIndex, Calendar cal)[1]

getDate(int columnIndex)[1]

getDate(String columnName, Calendar cal)[1]

getDate(String columnName)[1]

getDefaultTransactionIsolation()[1]

getDouble(int columnIndex)[1]

getDouble(String columnName)[1]

getDriverMajorVersion()[1]

getDriverMinorVersion()[1]

getDriverName()[1]

getDriverVersion()[1]

getEncodeLang[1]

getExportedKeys[1]

getExtraNameCharacters()[1]

getFetchDirection()

ResultSetインタフェース[1]

Statementインタフェース[1]

getFetchSize()

ResultSetインタフェース[1]

Statementインタフェース[1]

getFloat(int columnIndex)[1]

getFloat(String columnName)[1]

getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern)[1]

getFunctions(String catalog, String schemaPattern, String functionNamePattern)[1]

getHADBConnectionID()[1]

getHADBConnectionSerialNum()[1]

getHADBOrderMode()[1]

getHADBSQLHashFltSize()[1]

getHADBSQLHashTblSize()[1]

getHADBSQLMaxRthdNum()[1]

getHADBSQLSerialNum()

PreparedStatementインタフェース[1]

Statementインタフェース[1]

getHADBStatementHandle()

PreparedStatementインタフェース[1]

Statementインタフェース[1]

getHADBTransactionID()[1]

getHoldability()

Connectionインタフェース[1]

ResultSetインタフェース[1]

getHostName()[1]

getIdentifierQuoteString()[1]

getImportedKeys[1]

getIndexInfo[1]

getInt(int columnIndex)[1]

getInt(String columnName)[1]

getInterfaceMethodTrace()[1]

getJDBCMajorVersion()[1]

getJDBCMinorVersion()[1]

getLargeMaxRows()[1]

getLargeUpdateCount()[1]

getLoginTimeout()

ConnectionPoolDataSourceインタフェース[1]

DataSourceインタフェース[1]

getLogWriter()

ConnectionPoolDataSourceインタフェース[1]

DataSourceインタフェース[1]

getLong(int columnIndex)[1]

getLong(String columnName)[1]

getMajorVersion()[1]

getMaxBinaryLiteralLength()[1]

getMaxCatalogNameLength()[1]

getMaxCharLiteralLength()[1]

getMaxColumnNameLength()[1]

getMaxColumnsInGroupBy()[1]

getMaxColumnsInIndex()[1]

getMaxColumnsInOrderBy()[1]

getMaxColumnsInSelect()[1]

getMaxColumnsInTable()[1]

getMaxConnections()[1]

getMaxCursorNameLength()[1]

getMaxFieldSize()[1]

getMaxIndexLength()[1]

getMaxLogicalLobSize()[1]

getMaxProcedureNameLength()[1]

getMaxRows()[1]

getMaxRowSize()[1]

getMaxSchemaNameLength()[1]

getMaxStatementLength()[1]

getMaxStatements()[1]

getMaxTableNameLength()[1]

getMaxTablesInSelect()[1]

getMaxUserNameLength()[1]

getMetaData()

Connectionインタフェース[1]

PreparedStatementインタフェース[1]

ResultSetインタフェース[1]

getMinorVersion()[1]

getMoreResults()[1]

getNotErrorOccurred()[1]

getNumericFunctions()[1]

getObject(int columnIndex,Class<T> type)[1]

getObject(int columnIndex)[1]

getObject(String columnLabel,Class<T> type)[1]

getObject(String columnName)[1]

getParameterClassName(int param)[1]

getParameterCount()[1]

getParameterMetaData()[1]

getParameterMode(int param)[1]

getParameterType(int param)[1]

getParameterTypeName(int param)[1]

getPassword()[1]

getPooledConnection()[1]

getPooledConnection(String user, String password)[1]

getPort()[1]

getPrecision(int column)[1]

getPrecision(int param)[1]

getPrimaryKeys(String catalog, String schema, String table)[1]

getProcedureColumns[1]

getProcedures[1]

getProcedureTerm()[1]

getPropertyInfo(String url, Properties info)[1]

getPseudoColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern)[1]

getQueryTimeout()[1]

getResultSet()[1], [2]

getResultSet(long index, int count)[1]

getResultSetConcurrency()[1]

getResultSetHoldability()

DatabaseMetaDataインタフェース[1]

Statementインタフェース[1]

getResultSetType()[1]

getRow()[1]

getRowIdLifetime()[1]

getScale(int column)[1]

getScale(int param)[1]

getSchema()[1]

getSchemaName(int column)[1]

getSchemas()[1]

getSchemas(String catalog, String schemaPattern)[1]

getSchemaTerm()[1]

getSearchStringEscape()[1]

getShort(int columnIndex)[1]

getShort(String columnName)[1]

getSQLKeywords()[1]

getSQLStateType()[1]

getSQLWarningKeep()[1]

getStatement()[1]

getString(int columnIndex)[1]

getString(String columnName)[1]

getStringFunctions()[1]

getSuperTables[1]

getSuperTypes[1]

getSystemFunctions()[1]

getTableName(int column)[1]

getTablePrivileges[1]

getTables[1]

getTableTypes()[1]

getTime(int columnIndex, Calendar cal)[1]

getTime(int columnIndex)[1]

getTime(String columnName, Calendar cal)[1]

getTime(String columnName)[1]

getTimeDateFunctions()[1]

getTimestamp(int columnIndex, Calendar cal)[1]

getTimestamp(int columnIndex)[1]

getTimestamp(String columnName, Calendar cal)[1]

getTimestamp(String columnName)[1]

getTraceNumber()[1]

getTransactionIsolation()[1]

getType()[1]

getTypeInfo()[1]

getTypeMap()[1]

getUDTs[1]

getUpdateCount()[1]

getURL()[1]

getUser()[1]

getUserName()[1]

getVersionColumns[1]

getWarnings()

Connectionインタフェース[1]

ResultSetインタフェース[1]

Statementインタフェース[1]

GLOBAL HASH GROUPING[1]

GLOBAL HASH UNIQUE[1]

GROUPING[1]

GROUPING SET[1], [2]

H

HADB ODBCドライバトレース情報[1]

出力される情報[1]

HADB ODBCドライバトレース情報の出力設定[1]

HADB ODBCドライバの環境設定[1]

HADBクライアント

バージョンアップ[1]

バージョンダウン[1]

HADBクライアント〔Linux版〕

アンインストール[1]

インストール[1]

HADBクライアント〔Windows版〕

アンインストール[1]

インストール[1]

HADBクライアントの環境設定[1]

HADBクライアントのメモリ所要量の見積もり[1]

HADBサーバからの切り離し

CLI関数の使用例[1]

HADBサーバへの接続

CLI関数の使用例[1]

HADBサーバへの接続方法〔Java〕[1]

HASH[1]

HASH JOIN[1], [2]

HAVING[1]

HAVING句に関する等価変換[1]

host

接続用のURL[1]

I

INDEX[1]

INDEX COLUMN[1]

INDEX NAME[1]

INDEX SCAN[1], [2]

INDEX TYPE[1]

INNER JOIN[1]

INSERT STATEMENT[1]

insertsAreDetected(int type)[1]

INTERSECT ALL[1]

INTERSECT DISTINCT[1]

IN述語に関する等価変換[1]

isAfterLast()[1]

isAutoIncrement(int column)[1]

isBeforeFirst()[1]

isCaseSensitive(int column)[1]

isCatalogAtStart()[1]

isClosed()

Connectionインタフェース[1]

ResultSetインタフェース[1]

Statementインタフェース[1]

isCloseOnCompletion()[1]

isCurrency(int column)[1]

isDefinitelyWritable(int column)[1]

isFirst()[1]

isLast()[1]

isNullable(int column)[1]

isNullable(int param)[1]

isPoolable()[1]

isReadOnly()

Connectionインタフェース[1]

DatabaseMetaDataインタフェース[1]

isReadOnly(int column)[1]

isSearchable(int column)[1]

isSigned(int column)[1]

isSigned(int param)[1]

isValid(int timeout)[1]

isWrapperFor(Class<?> iface)[1]

isWritable(int column)[1]

J

JARファイルの差し替え[1]

JARファイルのパッケージ名称[1]

java.sql.Driver自動ローディング[1]

JDBC 1.2 API[1]

jdbc:hadb[1]

jdbcCompliant()[1]

JDBCインタフェースメソッドトレース[1]

JDBC規格への準拠範囲[1]

JDBCドライバ

アンインストール[1]

インストール[1]

修正版との入れ替え[1]

バージョンアップ[1]

JDBCドライバの環境設定[1]

JNDI[1]

JNDI対応[1]

JNDIへのDataSourceの登録[1]

JOIN TYPE[1]

K

KEY SCAN[1], [2]

L

LANG〔環境変数〕[1]

last()[1]

LD_LIBRARY_PATH〔環境変数〕[1]

LEFT OUTER JOIN[1]

LIMIT[1]

LOCAL HASH GROUPING[1]

locatorsUpdateCopy()[1]

M

methodtrace

接続用のURL[1]

ユーザプロパティ[1]

N

nativeSQL(String sql)[1]

NESTED LOOP JOIN[1], [2]

next()[1]

nullPlusNonNullIsNull()[1]

nullsAreSortedAtEnd()[1]

nullsAreSortedAtStart()[1]

nullsAreSortedHigh()[1]

nullsAreSortedLow()[1]

NUMERIC型データの変換〔CLI関数〕[1]

NUMERIC型データへの変換〔CLI関数〕[1]

O

ODBC

トラブルシュート[1]

ODBCカーソルライブラリ[1]

ODBC関数の一覧[1]

ODBCドライバの環境設定[1]

ODBCトレース[1]

ORDER[1]

OR条件に関する等価変換

IN条件への変換[1]

OR条件の外側への抜き出し[1]

集合演算UNION ALLを指定した導出表への等価変換[1]

OSの時刻変更[1]

othersDeletesAreVisible(int type)[1]

othersInsertsAreVisible(int type)[1]

othersUpdatesAreVisible(int type)[1]

ownDeletesAreVisible(int type)[1]

ownInsertsAreVisible(int type)[1]

ownUpdatesAreVisible(int type)[1]

P

PARALLEL[1]

PARALLEL DISABLED[1]

ParameterMetaDataインタフェース[1]

password

接続用のURL[1]

ユーザプロパティ[1]

PATH〔環境変数〕[1], [2]

PooledConnectionインタフェース[1]

port

接続用のURL[1]

PreparedStatementインタフェース[1]

prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)[1]

prepareStatement(String sql, int resultSetType, int resultSetConcurrency)[1]

prepareStatement(String sql)[1]

previous()[1]

PROBE COLUMN[1], [2]

property

接続用のURL[1]

PURGE CHUNK STATEMENT[1]

Q

QUERY[1]

QUERY SCAN[1]

R

RECURSIVE[1]

relative(int rows)[1]

removeConnectionEventListener[1]

ResultSetMetaDataインタフェース[1]

ResultSetインタフェース[1]

RIGHT OUTER JOIN[1]

rollback()[1]

RowSets[1]

ROWの指定[1]

S

sample1[1]

SELECT DISTINCTの処理方式[1]

作業表実行[1]

ハッシュ実行[1]

SELECT STATEMENT[1]

SET OPERATION[1]

SET OPERATION TYPE[1]

setApName(String name)[1]

setAsciiStream[1]

setAutoCommit(boolean autoCommit)[1]

setBigDecimal(int parameterIndex, BigDecimal x)[1]

setBinaryStream(int parameterIndex, InputStream x, int length)[1]

setBoolean(int parameterIndex, boolean x)[1]

setByte(int parameterIndex, byte x)[1]

setBytes(int parameterIndex, byte[] x)[1]

setCatalog(String catalog)[1]

setCharacterStream[1]

setCursorName(String name)[1]

setDate(int parameterIndex, Date x, Calendar cal)[1]

setDate(int parameterIndex, Date x)[1]

setDouble(int parameterIndex, double x)[1]

setEncodeLang(String lang)[1]

setEscapeProcessing(boolean enable)[1]

setFetchDirection(int direction)

ResultSetインタフェース[1]

Statementインタフェース[1]

setFetchSize(int rows)

ResultSetインタフェース[1]

Statementインタフェース[1]

setFloat(int parameterIndex, float x)[1]

setHADBAuditInfo(int pos,String userinfo)[1]

setHADBOrderMode(int mode)[1]

setHADBSQLHashFltSize(int areaSize)[1]

setHADBSQLHashTblSize(int areaSize)[1]

setHADBSQLMaxRthdNum(int rthdNum)[1]

setHoldability(int holdability)[1]

setHostName(String name)[1]

setInt(int parameterIndex, int x)[1]

setInterfaceMethodTrace(boolean flag)[1]

setLargeMaxRows(long max)[1]

setLoginTimeout(int seconds)

ConnectionPoolDataSourceインタフェース[1]

DataSourceインタフェース[1]

setLogWriter

DataSourceインタフェース[1]

setLogWriter(PrintWriter out)

ConnectionPoolDataSourceインタフェース[1]

setLong(int parameterIndex, long x)[1]

setMaxFieldSize(int max)[1]

setMaxRows(int max)[1]

setNotErrorOccurred(boolean mode)[1]

setNull(int parameterIndex,int sqlType)[1]

setObject(int parameterIndex, Object x, int targetSqlType, int scale)[1]

setObject(int parameterIndex, Object x, int targetSqlType)[1]

setObject(int parameterIndex, Object x)[1]

setPassword(String password)[1]

setPort(int port)[1]

setQueryTimeout(int seconds)[1]

setReadOnly(boolean readOnly)[1]

setSchema(String schema)[1]

setShort(int parameterIndex, short x)[1]

setSQLWarningKeep(boolean mode)[1]

setString(int parameterIndex, String x)[1]

setTime(int parameterIndex, Time x, Calendar cal)[1]

setTime(int parameterIndex, Time x)[1]

setTimestamp(int parameterIndex, Timestamp x, Calendar cal)[1]

setTimestamp(int parameterIndex, Timestamp x)[1]

setTraceNumber(int num)[1]

setTransactionIsolation(int level)[1]

setUser(String user)[1]

SKIP COND[1]

SORT GROUPING[1]

SORTING[1]

SPECIFIC[1], [2], [3], [4], [5], [6]

SPECIFIC DISABLED[1], [2]

SQL Serial Number[1]

SQLAllocHandle[1]

SQLBindCol[1]

SQLBindParameter[1]

SQLBrowseConnect，SQLBrowseConnectW[1]

SQLBulkOperations[1]

SQLCancel[1]

SQLCloseCursor[1]

SQLColAttribute，SQLColAttributeW[1]

SQLColumnPrivileges，SQLColumnPrivilegesW[1]

SQLColumns，SQLColumnsW[1]

SQLConnect，SQLConnectW[1]

SQLCopyDesc[1]

SQLDataSources，SQLDataSourcesW[1]

SQLDescribeCol，SQLDescribeColW[1]

SQLDescribeParam[1]

SQLDisconnect[1]

SQLDriverConnect，SQLDriverConnectW[1]

SQLDrivers，SQLDriversW[1]

SQLEndTran[1]

SQLExceptionインタフェース[1]

SQLExecDirect，SQLExecDirectW[1]

SQLExecute[1]

SQLFetch[1]

SQLFetchScroll[1]

SQLForeignKeys，SQLForeignKeysW[1]

SQLFreeHandle[1]

SQLFreeStmt[1]

SQLGetConnectAttr，SQLGetConnectAttrW[1]

SQLGetCursorName，SQLGetCursorNameW[1]

SQLGetData[1]

SQLGetDescField，SQLGetDescFieldW[1]

SQLGetDescRec，SQLGetDescRecW[1]

SQLGetDiagField，SQLGetDiagFieldW[1]

SQLGetDiagRec，SQLGetDiagRecW[1]

SQLGetEnvAttr[1]

SQLGetFunctions[1]

SQLGetInfo，SQLGetInfoW[1]

SQLGetStmtAttr，SQLGetStmtAttrW[1]

SQLGetTypeInfo，SQLGetTypeInfoW[1]

SQLMoreResults[1]

SQLNativeSql，SQLNativeSqlW[1]

SQLNumParams[1]

SQLNumResultCols[1]

SQLParamData[1]

SQLPrepare，SQLPrepareW[1]

SQLPrimaryKeys，SQLPrimaryKeysW[1]

SQLProcedureColumns，SQLProcedureColumnsW[1]

SQLProcedures，SQLProceduresW[1]

SQLPutData[1]

SQLRowCount[1]

SQLSetConnectAttr，SQLSetConnectAttrW[1]

SQLSetCursorName，SQLSetCursorNameW[1]

SQLSetDescField，SQLSetDescFieldW[1]

SQLSetDescRec[1]

SQLSetEnvAttr[1]

SQLSetPos[1]

SQLSetStmtAttr，SQLSetStmtAttrW[1]

SQLSpecialColumns，SQLSpecialColumnsW[1]

SQLStatistics，SQLStatisticsW[1]

SQLTablePrivileges，SQLTablePrivilegesW[1]

SQLTables，SQLTablesW[1]

sqlwarningkeep

接続用のURL[1]

ユーザプロパティ[1]

SQLWarningインタフェース[1]

SQL実行の終了[1]

SQLデータ型の対応[1]

SQLのキャンセル〔CLI関数〕[1]

SQLの実行[1]

SQLの処理の取り消し[1]

SQLパラレル実行機能が適用される条件[1]

SQLパラレル実行機能の適用[1]

SQL文のエラー判定方法[1]

SQL文の実行

a_rdb_SQLExecute()[1]

CLI関数の使用例[1]

SQL文の実行計画[1]

SQL文の実行時に使用されるB-treeインデクス[1]

SQL文の実行時に使用されるテキストインデクス[1]

SQL文の実行時に使用されるレンジインデクス[1]

SQL文の特定情報[1]

SQL文の前処理

a_rdb_SQLPrepare()[1]

CLI関数の使用例[1]

SQL文の前処理および実行

a_rdb_SQLExecDirect()[1]

CLI関数の使用例[1]

SQL要求の作成[1]

SQL例外拡張[1]

SQL例外拡張機能〔JDBC 4.0 API〕[1]

SQLを実行した場合に作成される作業表について[1]

Statementインタフェース[1]

storesLowerCaseIdentifiers()[1]

storesLowerCaseQuotedIdentifiers()[1]

storesMixedCaseIdentifiers()[1]

storesMixedCaseQuotedIdentifiers()[1]

storesUpperCaseIdentifiers()[1]

storesUpperCaseQuotedIdentifiers()[1]

SUBQUERY[1]

SUBQUERY HASH[1]

SUBQUERY LOOP[1]

supportsAlterTableWithAddColumn()[1]

supportsAlterTableWithDropColumn()[1]

supportsANSI92EntryLevelSQL()[1]

supportsANSI92FullSQL()[1]

supportsANSI92IntermediateSQL()[1]

supportsBatchUpdates()[1]

supportsCatalogsInDataManipulation()[1]

supportsCatalogsInIndexDefinitions()[1]

supportsCatalogsInPrivilegeDefinitions()[1]

supportsCatalogsInProcedureCalls()[1]

supportsCatalogsInTableDefinitions()[1]

supportsColumnAliasing()[1]

supportsConvert()[1]

supportsConvert(int fromType, int toType)[1]

supportsCoreSQLGrammar()[1]

supportsCorrelatedSubqueries()[1]

supportsDataDefinitionAndDataManipulationTransactions()[1]

supportsDataManipulationTransactionsOnly()[1]

supportsDifferentTableCorrelationNames()[1]

supportsExpressionsInOrderBy()[1]

supportsExtendedSQLGrammar()[1]

supportsFullOuterJoins()[1]

supportsGetGeneratedKeys()[1]

supportsGroupBy()[1]

supportsGroupByBeyondSelect()[1]

supportsGroupByUnrelated()[1]

supportsIntegrityEnhancementFacility()[1]

supportsLikeEscapeClause()[1]

supportsLimitedOuterJoins()[1]

supportsMinimumSQLGrammar()[1]

supportsMixedCaseIdentifiers()[1]

supportsMixedCaseQuotedIdentifiers()[1]

supportsMultipleOpenResults()[1]

supportsMultipleResultSets()[1]

supportsMultipleTransactions()[1]

supportsNamedParameters()[1]

supportsNonNullableColumns()[1]

supportsOpenCursorsAcrossCommit()[1]

supportsOpenCursorsAcrossRollback()[1]

supportsOpenStatementsAcrossCommit()[1]

supportsOpenStatementsAcrossRollback()[1]

supportsOrderByUnrelated()[1]

supportsOuterJoins()[1]

supportsPositionedDelete()[1]

supportsPositionedUpdate()[1]

supportsRefCursors()[1]

supportsResultSetConcurrency(int type, int concurrency)[1]

supportsResultSetHoldability(int holdability)[1]

supportsResultSetType(int type)[1]

supportsSavepoints()[1]

supportsSchemasInDataManipulation()[1]

supportsSchemasInIndexDefinitions()[1]

supportsSchemasInPrivilegeDefinitions()[1]

supportsSchemasInProcedureCalls()[1]

supportsSchemasInTableDefinitions()[1]

supportsSelectForUpdate()[1]

supportsStatementPooling()[1]

supportsStoredFunctionsUsingCallSyntax()[1]

supportsStoredProcedures()[1]

supportsSubqueriesInComparisons()[1]

supportsSubqueriesInExists()[1]

supportsSubqueriesInIns()[1]

supportsSubqueriesInQuantifieds()[1]

supportsTableCorrelationNames()[1]

supportsTransactionIsolationLevel(int level)[1]

supportsTransactions()[1]

supportsUnion()[1]

supportsUnionAll()[1]

T

TABLE FUNCTION DERIVED TABLE[1]

TABLE SCAN[1], [2]

TABLE VALUE CONSTRUCTOR SCAN[1]

TABLE〔表コスト情報〕[1]

TIMESTAMP型データの変換〔CLI関数〕[1]

TIMESTAMP型データへの変換〔CLI関数〕[1]

TIME型データの変換〔CLI関数〕[1]

TIME型データへの変換〔CLI関数〕[1]

tracenum

接続用のURL[1]

ユーザプロパティ[1]

Transaction ID[1]

try-with-resources文[1]

TZ〔環境変数〕[1], [2]

JDBCドライバの使用時[1]

U

UNION ALL[1]

UNION DISTINCT[1]

UNNEST[1]

UNNEST DERIVED TABLE SCAN[1]

unwrap(Class<T> iface)[1]

UPDATE STATEMENT[1]

updatesAreDetected(int type)[1]

URLの指定[1]

USE FILTER[1], [2]

user

接続用のURL[1]

ユーザプロパティ[1]

usesLocalFilePerTable()[1]

usesLocalFiles()[1]

USING CACHE[1]

USING COST[1]

V

VARBINARY型データの変換〔CLI関数〕[1]

VARBINARY型データへの変換〔CLI関数〕[1]

Version[1]

W

wasNull()[1]

WINDOW[1]

WORK TABLE SCAN[1]

Wrapperインタフェース[1]

あ

アーカイブマルチチャンク表

SQL文の等価変換[1]

検索する際のポイント[1]

アーカイブレンジ列の日時情報を使用した検索範囲の絞り込み[1]

アクセスパス[1]

アクセスパスに表示される情報〔アルファベット順〕[1]

アクセスパスの見方の例[1]

アクセスパスを確認するには[1]

値[1]

集まり導出表に関する情報[1]

集まり導出表の指定〔アクセスパス〕[1]

アンインストール〔HADBクライアント〕[1]

暗黙カーソル[1]

い

一括送信行数[1]

一括転送

？パラメタの値[1]

検索結果[1]

イベントリスナの登録[1]

入れ替え〔修正版HADBクライアント〕[1]

インジケータ[1]

インストール

HADBクライアント[1]

Java Development Kit[1]

Java Runtime Environment[1]

JDBCドライバ[1]

インデクス指定を使用する[1]

インデクススキャン[1]

インデクスの優先順位[1]

う

ウイルス対策ソフト

スキャン対象の見直し〔JDBCドライバ使用時〕[1]

内表[1]

え

エスケープ句[1]

エスケープ句で指定できるスカラ関数[1]

エスケープ構文の解析[1]

エラー発生時に返却される情報〔ODBC〕[1]

エラー判定方法〔SQL文〕[1]

エラー要因コードの一覧〔CLI関数の戻り値〕[1]

お

大きい更新カウント[1]

オーバフローが発生したときの処理[1]

か

カーソルの移動[1]

カーソルのオープン

a_rdb_SQLExecute()[1]

CLI関数の使用例[1]

カーソルのクローズ[1]

a_rdb_SQLCloseCursor()[1]

CLI関数の使用例[1]

カーソルを使用した行の取り出し

CLI関数の使用例[1]

カーソルを使用した検索への影響[1]

環境設定〔HADBクライアント〕[1]

環境設定〔JDBCドライバ〕[1]

環境変数

CLASSPATH[1]

TZ〔JDBCドライバの使用時〕[1]

環境変数の設定

Linux[1]

Windows[1]

き

キー[1]

キー条件〔B-treeインデクス〕[1]

キースキャン[1]

記号定数[1]

行ID[1]

境界位置調整[1]

行値実行[1]

行の取り出し〔a_rdb_SQLFetch()〕[1]

く

クライアントグループ名[1]

クライアント定義の作成[1]

クライアント定義の集中管理機能〔適用対象外のオペランド〕[1]

クライアント定義の設計[1]

クライアントディレクトリ[1], [2]

クライアントディレクトリ（インストール時）の構成

Linux版の場合[1]

Windows版の場合[1]

クライアントディレクトリ（運用時）の構成

Linux版の場合[1]

Windows版の場合[1]

クライアントマシンのOSの時刻変更[1]

クライアントマシンのOSの時刻を進める方法[1]

クライアントマシンのOSの時刻を戻す方法[1]

クライアントライブラリ[1]

クラス名称

Arrayインタフェース[1]

Connectionインタフェース[1]

DatabaseMetaDataインタフェース[1]

Driverインタフェース[1]

PreparedStatementインタフェース[1]

ResultSetMetaDataインタフェース[1]

ResultSetインタフェース[1]

Statementインタフェース[1]

グループ化集合情報[1], [2]

グループ化の処理方式[1]

ソートグループ化[1]

ハッシュグループ化[1]

グローバル作業表[1]

グローバルハッシュグループ化[1]

け

結果セットの拡張機能のサポート範囲[1]

結合種別[1]

結合方式[1]

結合列[1]

検索系SQL[1]

検索結果の一括転送[1]

検索結果の取得[1]

検索結果列数の取得

a_rdb_SQLNumResultCols()[1]

CLI関数の使用例[1]

検索結果列の関連づけ

a_rdb_SQLBindCols()[1]

CLI関数の使用例[1]

検索結果列の情報取得

a_rdb_SQLDescribeCols()[1]

CLI関数の使用例[1]

検索方式[1]

こ

更新系SQL[1]

構造体[1]

コスト情報表示[1], [2]

コネクション属性の設定[1]

コネクションの確立

a_rdb_SQLConnect()[1]

CLI関数の使用例[1]

コネクションの終了

a_rdb_SQLDisconnect()[1]

CLI関数の使用例[1]

コネクションハンドルの解放

a_rdb_SQLFreeConnect()[1]

CLI関数の使用例[1]

コネクションハンドルの割り当て

a_rdb_SQLAllocConnect()[1]

CLI関数の使用例[1]

コンパイル[1]

さ

サーチ条件〔B-treeインデクス〕[1]

作業表が作成されるSQLを実行する際の考慮点[1]

作業表行値実行[1]

作業表実行

SELECT DISTINCTの処理方式[1]

集合演算の処理方式[1]

外への参照列を含まない副問合せの処理方式[1]

作業表の構成列[1]

作業表の種類

グローバル作業表[1]

ローカル作業表[1]

サポートしていないインタフェース

JDBC 1.2 API[1]

JDBC 2.1 コアAPI[1]

JDBC 3.0 API[1]

JDBC 4.0 API[1]

サロゲートペア[1]

サンプルAP[1]

し

時刻変更

JDBCドライバをインストールしたマシン[1]

クライアントマシンのOS[1]

システムプロパティの設定[1]

実行計画〔SQL文〕[1]

実行結果および実行結果情報の取得[1]

自動コミットモードの設定[1]

自動ローディング〔java.sql.Driver〕[1]

集合演算の処理方式[1]

作業表実行[1]

ハッシュ実行[1]

修正版HADBクライアントとの入れ替え[1]

詳細表示[1]

詳細表示に出力される情報[1]

使用されるインデクスを確認する方法[1]

す

スカラ演算に関する等価変換[1]

スカラ関数追加[1]

スキャン対象の見直し

ウイルス対策ソフト〔JDBCドライバ使用時〕[1]

スクロール可能なカーソル[1]

スクロールタイプ[1]

せ

接続管理[1]

接続情報の優先順位[1]

接続プール[1]

接続用のURL[1]

encodelang[1]

そ

ソートグループ化[1]

外表[1]

た

タイムアウト

HADBサーバへの処理要求[1]

HADBサーバへの接続処理[1]

タイムアウト時間の設定

ConnectionPoolDataSourceインタフェース[1]

DataSourceインタフェース[1]

Statementインタフェース[1]

探索条件の等価変換[1]

探索条件の評価方式[1]

ち

注意事項（OSの時刻変更）[1]

チューニング[1]

つ

ツリー行番号[1]

ツリー表示[1]

ツリー表示に出力される情報[1]

て

ディスクリプタ値の設定[1]

データ型の対応〔ODBC〕[1]

データ型のマッピング[1]

データ記述[1]

データソースとの接続〔ODBC〕[1]

データソースとの切断〔ODBC〕[1]

データソースの削除〔ODBC〕[1]

データソースのシステム情報の取得[1]

データソースの設定〔ODBC〕[1]

テーブルスキャン[1]

テキストインデクスの選択規則[1]

と

問合せツリー[1]

問合せツリー番号[1]

等価変換

IN述語[1]

IN条件への変換[1]

OR条件の外側への抜き出し[1]

WHERE句への変換[1]

集合演算UNION ALLを指定した導出表への等価変換[1]

スカラ演算[1]

等価変換〔探索条件〕[1]

特殊文字[1]

特定情報表示[1]

ドライバオプションの設定および取得[1]

ドライバおよびデータソースの情報取得[1]

トラブルシュート〔ODBC〕[1]

トランザクションアクセスモードの指定

CLI関数の場合[1]

JDBCドライバの場合[1]

ODBCドライバの場合[1]

クライアント定義の場合[1]

システムプロパティ[1]

接続用のURL[1]

ユーザプロパティ[1]

トランザクション制御〔APの設計〕[1]

トランザクションの終了〔CLI関数〕[1]

トレースレベル[1]

な

内部導出表の展開[1]

ナル値表示文字列[1]

ね

ネストループ行値実行[1]

ネストループ作業表実行[1]

ネストループジョイン[1]

は

バージョンアップ〔HADBクライアント〕[1]

バージョンダウン〔HADBクライアント〕[1]

配列型の列を定義した表へのアクセス[1]

パターン文字列中に指定できる特殊文字[1]

パッケージ名称

Arrayインタフェース[1]

Connectionインタフェース[1]

DatabaseMetaDataインタフェース[1]

Driverインタフェース[1]

JARファイル[1]

PreparedStatementインタフェース[1]

ResultSetMetaDataインタフェース[1]

ResultSetインタフェース[1]

Statementインタフェース[1]

ハッシュグループ化[1]

グローバルハッシュグループ化[1]

ローカルハッシュグループ化[1]

ハッシュグループ化領域サイズ[1]

ハッシュ検索情報[1]

ハッシュ実行

SELECT DISTINCTの処理方式[1]

集合演算の処理方式[1]

外への参照列を含まない副問合せの処理方式[1]

外への参照列を含む副問合せの処理方式[1]

ハッシュジョイン[1]

ハッシュテーブル[1]

ハッシュテーブル領域が不足した場合の対処方法[1]

ハッシュテーブル領域サイズ[1]

ハッシュフィルタ領域サイズ[1]

ハッシング[1]

バッチ更新機能のサポート範囲[1]

バッチへのSQL文登録[1]

ひ

評価方式

B-treeインデクス[1]

レンジインデクス[1]

表コスト情報[1]

表の結合方式[1]

表の検索方式[1]

ふ

副問合せの処理方式[1]

行値実行[1]

作業表行値実行[1]

作業表実行[1]

外への参照列を含まない場合[1]

外への参照列を含む場合[1]

ネストループ行値実行[1]

ネストループ作業表実行[1]

ハッシュ実行[1], [2]

ブックマーク機能[1]

文ハンドルの解放

a_rdb_SQLFreeStmt()[1]

CLI関数の使用例[1]

文ハンドルの確保

a_rdb_SQLAllocStmt()[1]

CLI関数の使用例[1]

へ

並行処理タイプ[1]

ヘッダファイル[1]

ほ

ポート番号の指定[1]

ホスト名の指定[1]

む

無応答状態への対策

JDBCドライバ使用時[1]

ODBCドライバまたはCLI関数使用時[1]

め

メモリ所要量の見積もり〔HADBクライアント〕[1]

も

文字コード[1]

文字コードの設定

Linux版の場合[1]

Windows版の場合[1]

文字コードの変換〔JDBC〕[1]

文字コード変換〔ODBC〕[1]

戻り値〔CLI関数〕[1]

ゆ

ユーザプロパティ

encodelang[1]

ユーザプロパティの指定[1]

優先順位〔接続情報〕[1]

よ

読み書き可能トランザクション[1]

読み書き可能モード[1]

読み取り専用トランザクション[1]

読み取り専用モード[1]

ら

ラッパーパターン[1]

り

リンケージ[1]

れ

レジストリキーの登録

HADBクライアント[1]

ODBC[1]

レンジインデクス条件[1]

セグメントのスキップ[1]

チャンクのスキップ[1]

レンジインデクスによる評価方式[1]

ろ

ローカル作業表[1]

ローカルハッシュグループ化[1]

ログライターの設定

ConnectionPoolDataSourceインタフェース[1]

DataSourceインタフェース[1]

マニュアル発行元

株式会社 日立製作所

〒100-8280　東京都千代田区丸の内一丁目6番6号