4 Oracle Database ODBC Driverの使用
この章は、Oracle Database ODBCドライバのユーザーにOracle Database ODBCドライバの構成と使用に関する情報を提供することを目的としています。
トピック:
4.1 TLS (Azure AD用に事前構成済)を使用したOracle Databaseへの接続
この例では、Azure ADを使用するように事前構成されたTLSを使用して、Microsoft ExcelからOracle Databaseに接続する方法を示します。
4.1.1 概要
Oracle Database ODBCドライバを使用すると、Microsoft Entra ID (以前のAzure AD) SSO資格証明を使用して、Microsoft Excelおよびその他のツールからOracle Databaseにアクセスできます。次の例で、Microsoft ExcelからOracle Databaseにアクセスする方法を示します。
4.1.2 ExcelでOracle ODBCを使用するための前提条件のステップ
ノート:
Oracle Database 19.16以上、およびOracle Database 23ai (Oracle Database 21cは含まれません)のみがEntra ID統合をサポートしています。
-
Entra ID統合のデータベースを構成します。
関連項目:
Oracle DatabaseとのEntra IDの統合の詳細は、『Oracle Databaseセキュリティ・ガイド』のMicrosoft Entra ID (Azure AD)ユーザーの認証および認可に関する項を参照してください。
-
構成を開始する前にデータベースに対して有効なOAuth 2トークンを取得し、接続文字列の
TOKEN_LOCATION
パラメータで指定された場所にトークンを配置します。ノート:
トークンは約1時間のみ有効です。構成の完了にかかる時間が1時間を超える場合は、新しいトークンのリクエストが必要になることがあります。
関連項目:
TOKEN_LOCATION
パラメータの詳細は、『Oracle Database Net Servicesリファレンス』のtnsnames.oraファイルのローカル・ネーミング・パラメータに関する項を参照してください。
4.2 Oracle Database ODBCドライバのTNSサービス名の作成
Oracle Net Servicesを使用してOracle Database ODBCドライバのTNSサービス名を作成するには、Oracle Net Servicesのインストールと同時にインストールされるOracle Net Configuration Assistant (NETCA)を使用します。NETCAによって、Oracle Database ODBCドライバのTNSサービス名のエントリがtnsnames.ora
ファイルに作成されます。
4.3 SQL文
Oracle Database ODBCドライバは、SQL-92のエントリ・レベル仕様のスーパーセットであるSQL-99のコア仕様と広く互換性があります。Oracleの文法に加えて、ODBC仕様の付録Cで概要を説明しているベンダー固有のエスケープ・シーケンスもサポートしています。ODBCの設計に従って、Oracle Database ODBCドライバは固有のSQL構文をOracle Databaseに渡します。
関連項目:
-
プログラマは、「ODBC SQL構文の実装」を参照してください
4.4 データ型
Oracle Databaseのデータ型は、Oracle Database ODBCドライバによってODBC SQLのデータ型にマップされます。
ノート:
Microsoft ODBC 3.52 Software Development Kit and Programmers ReferenceのAppendix Dにあるすべての変換は、適切な情報型を指定したSQLGetInfo
のコールでリストされるODBC SQLデータ型についてサポートされています。
関連項目:
-
プログラマ:
4.5 データ型の実装
トピック:
BOOLEANデータ型
Oracle Database 23ai以降、Oracle DatabaseではISO SQL標準に準拠したネイティブのBOOLEAN
データ型をサポートしています。ネイティブのブール型を使用すると、表の列は、値がtrue、falseまたはnullであるSQLブール・データ型として定義できます。
SQLブール・データ型を使用すると、コーディングの明瞭性、一貫性および迅速性が向上します。ブール・データ型を使用すると、ブールの状態がより明確になり、コードの読みやすさの向上につながります。
ネイティブのブール・データ型のサポートを使用すると、ODBC準拠アプリケーションでは次のことができます。
-
BOOLEAN
列データのフェッチまたは変更 -
BOOLEAN
列に関するメタデータのフェッチ
ブール・データ型は、外部ではSQLT_BOL
データ型として表されます。SQLT_BOL
データ型は、BOOLEAN
列のSQL型識別子として使用されます。APIコールのバインドと定義により、ODBCベースのアプリケーションのホスト変数にSQLT_BOL
データ型を関連付けることができます。
ODBCインタフェースは、Cデータ型識別子であるSQL_C_BIT
でブール型を表します。SQL_C_BIT
は、アプリケーションでブール型を表す符号なし文字(UCHAR
)です。SQL_C_BIT
は0または1の値のみを受け入れるため、データベースからブール・データを取得するときに、このデータ値は0または1として表されます。
BOOLEAN
列を使用してブール型データをバインドおよびフェッチ(または変更)するには、アプリケーションでバインドと定義の関数をコールして、次のものでCデータ型SQL_C_BIT
を指定します。
-
SQLBindCol()
関数とSQLGetData()
関数のTargetType
引数。 -
SQLBindParameter()
関数のValueType
引数。
SQLBindCol()
関数は、BOOLEAN
列をフェッチの前にアプリケーション変数にバインドし、SQLGetData()
関数はフェッチしたデータをフェッチ後に変数にバインドします。SQLBindParameter()
関数では、SQL文のパラメータをアプリケーション変数にバインドします。
TargetType
引数がSQL_C_BIT
データ型の場合、Oracle Database ODBCドライバは、パラメータのバインドと定義を処理するときにSQLT_BOL
をSQL_C_BIT
にマップします。その後、ドライバはBOOLEAN
列からデータをフェッチ(または変更)および取得するときに必要な変換を実行します。
データ・ソースでブール・データ型がサポートされているかどうかを判断するために、アプリケーションではSQLGetTypeInfo
関数をコールできます。
SQLT_BOL
データ型で外部的に定義されている表の列のメタデータを取得するために、アプリケーションではSQLDescribeCol()
関数をコールできます。
下位互換性確保のために、23aiより前のOracle Databaseリリースでは、内部的なデータ型変換を使用してOracle Database ODBCドライバのブール値をサポートします。
関連項目:
-
ブール・データ型の詳細は、『Oracle Database SQL言語リファレンス』のブール・データ型に関する項を参照してください。
-
ODBCのバインドと定義の関数およびサポートされるデータ型の詳細は、Microsoft ODBC API仕様を参照してください。
DATEおよびTIMESTAMP
OracleのDATE
およびTIMESTAMP
データ型のセマンティクスは、同名のODBCデータ型と必ずしも正確に対応していません。OracleのDATE
データ型には日付情報および時間情報の両方が、SQL_DATE
データ型には日付情報のみが含まれます。OracleのTIMESTAMP
データ型にも日付と時間の情報が格納されていますが、その小数秒の精度は他方に比較して高くなります。ODBCドライバでは、OracleのDATE
列とTIMESTAMP
列の両方のデータ型がSQL_TIMESTAMP
としてレポートされ、情報の紛失が回避されています。また、ODBCドライバにより、SQL_TIMESTAMP
パラメータがOracleのTIMESTAMP
値としてバインドされます。
浮動小数点データ型
10.1以降のOracleサーバーに接続すると、ODBCドライバにより、Oracleの浮動小数点のデータ型であるBINARY_FLOAT
およびBINARY_DOUBLE
が、ODBCデータ型であるSQL_REAL
およびSQL_DOUBLE
にそれぞれマップされます。以前のリリースでは、SQL_REAL
およびSQL_DOUBLE
がOracleの汎用数値データ型にマップされていました。
関連項目:
VECTORデータ型
Oracle Database 23ai以降、Oracle Database ODBCドライバではVECTOR
データ型がサポートされています。ドライバは、SQL_CHAR
を使用してVECTOR
データ型にマップします。
関連項目:
ベクトル・データ型の詳細は、『Oracle Database SQL言語リファレンス』のベクトル・データ型に関する項を参照してください
4.6 エラー・メッセージ
エラーが発生すると、Oracle Database ODBCドライバは、固有のエラー番号、SQLSTATE
(ODBCエラー・コード)およびエラー・メッセージを返します。ドライバが検出したエラーとOracleサーバーが戻したエラーの両方から、この情報を導出します。
固有のエラー
データソースでエラーが発生した場合、Oracle Database ODBCドライバは、Oracleサーバーから戻された固有のエラーを返します。Oracle Database ODBCドライバまたはドライバ・マネージャがエラーを検出した場合、Oracle Database ODBCドライバは、0 (ゼロ)という固有のエラーを返します。
SQLSTATE
データソースでエラーが発生した場合、Oracle Database ODBCドライバは、戻された固有のエラーを適切なSQLSTATE
にマップします。Oracle Database ODBCドライバがエラーを検出した場合は、適切なSQLSTATE
を生成します。ドライバ・マネージャがエラーを検出した場合は、ドライバ・マネージャが適切なSQLSTATE
を生成します。
エラー・メッセージ
データソースでエラーが発生した場合、Oracle Database ODBCドライバは、Oracleサーバーから戻されたメッセージに基づいてエラー・メッセージを返します。Oracle Database ODBCドライバまたはドライバ・マネージャでエラーが発生した場合、Oracle Database ODBCドライバは、SQLSTATE
に関連するテキストに基づいてエラー・メッセージを返します。
エラー・メッセージの書式は次のとおりです。
[vendor] [ODBC-component] [data-source] error-message
大カッコ([ ])内の接頭辞によってエラーのソースが識別されます。次の表に、Oracle Database ODBCドライバから返される接頭辞の値を示します。エラーがデータソースで発生したときは、[vendor]および[ODBC-component]という接頭辞によって、ベンダーと、データソースからエラーを受け取るODBCコンポーネントの名前が識別されます。
表4-1 Oracle Database ODBCドライバが戻す接頭辞のエラー・メッセージ値
エラー・ソース | 接頭辞 | 値 |
---|---|---|
ドライバ・マネージャ |
[vendor][ODBC-component][data-source] |
[Microsoft/unixODBC][ODBC Driver Manager]N/A |
Oracle ODBCドライバ |
[vendor][ODBC-component][data-source] |
[ORACLE][ODBC Driver]N/A |
Oracleサーバー |
[vendor][ODBC-component][data-source] |
[ORACLE][ODBC Driver]N/A |
たとえば、次に示すフォーマットのようにエラー・メッセージに[Ora]という接頭辞が含まれない場合、そのエラーはOracle ODBC Driverのエラーであり、自明であるために接頭辞が省略されています。
[Oracle][ODBC]Error message text here
次に示すフォーマットのようにエラー・メッセージに[Ora]という接頭辞が含まれる場合、Oracle ODBC Driverのエラーではありません。
ノート:
エラー・メッセージに[Ora]接頭辞が付いている場合でも、実際のエラーは複数のソースのいずれかで発生している可能性があります。
[Oracle][ODBC][Ora]Error message text here
エラー・メッセージのテキストが次に示す接頭辞で始まる場合は、そのエラーについての詳しい情報がOracleサーバーのマニュアルに記載されています。
ORA-
Oracle Net Servicesエラーおよびトレース・ロギングは、OCIソフトウェアがインストールされたWindowsシステムのORACLE_HOME
\NETWORK
ディレクトリまたはUNIXシステムのORACLE_HOME
/NETWORK
ディレクトリの下、具体的にはそれぞれlogディレクトリとtraceディレクトリにあります。データベース・ロギングは、Oracleサーバー・ソフトウェアがインストールされたWindowsシステムのORACLE_HOME
\RDBMS
ディレクトリまたはUNIXシステムのORACLE_HOME
/rdbms
ディレクトリにあります。
サーバーのエラー・メッセージの詳細は、Oracleサーバーのマニュアルを参照してください。