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サーバーのマニュアルを参照してください。







