1 はじめにOCIコネクタは、Oracle Call Interfaceのに似たAPIを提供します。 Oracle Call Interfaceを使用するように作成されたアプリケーションは、Advanced Serverデータベースサーバーと対話するために、EnterpriseDBのOCIコネクタを使用して再コンパイルできます。
以下の説明において、 用語は、言語キーワード、ユーザ指定の値、リテラルなどであり得る任意の単語または単語のグループを指す。用語の正確な意味は、それが使用される文脈に依存する。
• イタリック体のフォント は、通常は初めて定義する文章の中に新しい用語を導入します。
• Fixed-width (mono-spaced) font は、 SQL コマンド、例で使用されている特定のテーブル名および列名、プログラミング言語のキーワード など、文字通りに指定する必要がある用語に使用され ます 。例えば、 SELECT * FROM emp;
•
•
•
•
2 要件の概要
•
•
以前は今、アプリケーション・コードを変更せずに、最小限にEDBのPostgres Advanced ServerまたはOracleデータベースのいずれかで動作することができ、「固定」されたアプリケーション- オープンクライアントライブラリでは、Oracle Call Interfaceのでアプリケーションの相互運用性を提供します。 Open Client LibraryのEnterpriseDB実装はCで書かれています。
3.2.1 RPMパッケージを使用したコネクタのインストールリポジトリ設定ファイルをダウンロードした後、スーパーユーザー特権を引き受け 、次のコマンドを使用してリポジトリ設定ファイルを作成します。インストーラによって、 edb という名前のリポジトリ設定ファイルが作成されます 。 repo ;ファイルは/etc/yum.repos.dます。このファイルには、各EnterpriseDBリポジトリのエントリが含まれています。コネクタをインストールするには、 enterprisedb - toolsリポジトリのエントリを有効にする必要があります。
2。
3.2.2 SLES 12ホストへのコネクタのインストール入力を求められたら User NameとPassword 、EnterpriseDBのリポジトリ用の接続の資格情報を提供しています。認証情報が必要な場合は、EnterpriseDBに連絡してください。
DebianまたはUbuntuホストにDEBパッケージをインストールするには、EnterpriseDBリポジトリへのアクセスを許可する認証情報が必要です。リポジトリの認証情報を要求するには、以下のEnterpriseDB Advanced Downloadsページにアクセスしてください。次の手順では、EnterpriseDB aptリポジトリを使用してDEBパッケージをインストールする方法について説明します。コマンドを使用するときは、 usernameとpasswordをEnterpriseDBが提供する資格情報に置き換えてください。
このセクションでは、インストールウィザードを使用してWindowsシステムにコネクタをインストールする方法について説明します。 (インストーラをダウンロードし、インストーラのアイコンを右クリックして 、コンテキストメニューから[ Administrator As Run ]を選択します。)Nextをクリックして続けます。StackBuilder Plusを使用して、既存のAdvanced Serverインストールでコネクタを追加または更新することもできます。 StackBuilder Plusを開くには、Windows Appsメニューから、またはLinux ApplicationsメニューからStackBuilder Plusを選択します(図2.5を参照)。StackBuilder Plusが開いたら、画面上の指示に従います。ツリーコントロールの[ Database Driversノードから[ EnterpriseDB OCI Connector ]オプションを選択します(図2.6を参照)。
3.3 接続文字列の形成userは接続ユーザーの名前です。passwordは、接続しているユーザーに関連付けられているパスワードです。hostは、接続先のホスト名またはIPアドレスです。 IPV6アドレスを指定するには、アドレスを角括弧で囲みます。portは接続しているポート番号です。dbnameは、接続しているデータベースの名前です。paramx = valuexペアは、追加の(アプリケーション固有の)接続プロパティを指定します。
3.4 プログラムのコンパイルとリンク
1。 設定し ORACLE_HOME Oracleホーム・ディレクトリの完全なパス名に。EDB_HOMEをホームディレクトリの完全パス名に設定します。
2。
3。 Advanced Server Open Clientライブラリを含めるには、 LD_LIBRARY_PATHを設定します。デフォルトでは、 libiconv.so.2は$EDB_HOME/oci/libます。
3.5 参照カーソルのサポートAdvanced Server Open Clientライブラリは REF の使用をサポートします。 Oracleと互換性のあるPL / SQLプロシージャの OUT パラメータ としての CURSOR 。以下のAPIを通じてサポートが提供されます。次の例は、カーソルを開き、 REF CURSORを出力パラメータとして返すストアドプロシージャを呼び出す方法を示しています。コード・サンプルでは、 openCursorという名前のPL / SQLプロシージャ( REF CURSOR型のOUTパラメータを持つ)がデータベース・サーバー上に作成されており、必要なハンドルが割り当てられていることを前提としています。この時点で、 stmtUseRefCursorステートメント・ハンドルにはカーソルへの参照が含まれています。情報を取得するには、参照カーソルの出力変数を定義します。
3.6 OCI関数リファレンス次の表に、OCIコネクタでサポートされている機能を示します。すべてのヘッダーファイルはユーザーが提供する必要があります。 Advanced Serverはそのようなファイルを提供していません。
3.6.1 接続、許可、および関数の初期化
3.6.1.1 tnsnames.oraファイルの使用OCIServerAttach方法はで指定された接続記述子使用dblinkのパラメータtnsnames 。 oraファイルtnsnames使用してください。データベース接続アドレスを指定するための、Oracleデータベースと互換性のあるoraファイル。 Advanced Serverはユーザーのホームディレクトリでtnsnamesという名前のファイルを検索します。 ora 。 Advanced Serverがtnsnames見つけられない場合ユーザーのホームディレクトリにあるoraファイルは、 TNS_ADMIN指定されたパスを検索します。サンプルに含まれていないパラメータは、Open Client Libraryによって無視されます。サンプルでは、 SIDはポート5444サーバー「localhost」で実行されているクラスタ内のedbという名前のデータベースを参照します。
3.6.2 ハンドル関数とディスクリプタ関数
Get handle attributes. Advanced server supports the following handle attributes: OCI_ATTR_USERNAME , OCI_ATTR_PASSWORD , OCI_ATTR_SERVER , OCI_ATTR_ENV , OCI_ATTR_SESSION , OCI_ATTR_ROW_COUNT , OCI_ATTR_CHARSET_FORM , OCI_ATTR_CHARSET_ID , EDB_ATTR_STMT_LEVEL_TX , OCI_ATTR_MODULE Set handle attributes. Advanced server supports the following handle attributes: OCI_ATTR_USERNAME , OCI_ATTR_PASSWORD , OCI_ATTR_SERVER , OCI_ATTR_ENV , OCI_ATTR_SESSION , OCI_ATTR_ROW_COUNT , OCI_ATTR_CHARSET_FORM , OCI_ATTR_CHARSET_ID , EDB_ATTR_STMT_LEVEL_TX , OCI_ATTR_MODULE , OCI_ATTR_PREFETCH_ROWS 3.6.2.1 EDB_ATTR_EMPTY_STRINGSデフォルトでは、Advanced Serverは空の文字列を NULL値として扱います。 EDB_ATTR_EMPTY_STRINGS環境属性を使用して、空の文字列をマッピングするときのOCIコネクタの動作を制御できます。マッピング動作を変更するには、 OCIAttrSet()関数を使用してEDB_ATTR_EMPTY_STRINGSを次のいずれかに設定します。
3.6.2.2 EDB_ATTR_HOLDABLEAdvanced Serverは、 WITH HOLDカーソルとして実行される文をサポートしています 。 EDB_ATTR_HOLDABLE属性は、どのステートメントをWITH HOLDカーソルとして実行するかを指定します。 EDB_ATTR_HOLDABLE属性は、次の3つの値のいずれかに設定できます。
•
• EDB_WITHOUT_HOLD - プロトコルレベルの準備済みステートメントを使用して実行します
• OCI_DEFAULT - 以下の定義を参照あなたには属性を設定することができます OCIStmtハンドルまたはOCIServerハンドル。あなたが作成する場合OCIServerハンドルまたはOCIStmtハンドルを、 EDB_ATTR_HOLDABLEそのハンドルの属性がに設定されているOCI _ DEFAULT 。Advanced Serverは SELECT文を実行するときに、 OCIServerハンドルのEDB_ATTR_HOLDABLE属性を調べます。その属性がEDB_WITH_HOLDに設定されてEDB_WITH_HOLD場合、クエリはWITH HOLDカーソルとして実行されます。OCIServerハンドルの EDB_ATTR_HOLDABLE属性がOCI_DEFAULTに設定されている場合、Advanced ServerはOCIServerハンドルのEDB_ATTR_HOLDABLE属性の値を使用します( EDB_ATTR_HOLDABLE属性がOCIServerに設定されているEDB_WITH_HOLDは、クエリはWITH HOLDカーソルとして実行されます。クエリはプロトコル準備済みステートメントとして実行されます。3.6.2.3 EDB_HOLD_CURSOR_ACTIONEDB_HOLD_CURSOR_ACTION属性は途中変更WITH HOLD OCIインタフェースを使用して作成されたカーソルを。この属性は、次のいずれかの値に設定できます。
• EDB_COMMIT_AFTER_CURSOR - カーソル作成後にトランザクションをコミットする
• EDB_CURSOR_WITHOUT_XACT_BLK - 新しいトランザクションチェーンを開始しません
• OCI_DEFAULT - 以下の定義を参照文を実行するたびに、OCIはデータベースサーバのトランザクション状態を調べます。トランザクションがまだ進行中でない場合、OCIは BEGIN文を実行して新しいトランザクションブロックを作成してから、指定した文を実行します。トランザクション・ブロックは、 OCITransCommit()またはOCITransRollback()をコールするまでオープンされたままです。デフォルトでは、データベースサーバは、コミットまたはロールバック時に開いているカーソルをすべて閉じます。自分(またはOCI)が WITH HOLD句を含むカーソルを宣言した場合、カーソル結果セットはデータベースサーバに永続化され、引き続きそのカーソルからフェッチすることができます。ただし、トランザクションをロールバックしても、データベースサーバは開いているカーソルを保持しません。 ROLLBACK後にカーソルからフェッチしようとすると、データベースサーバはエラーを報告します。トランザクションをロールバックした後でアプリケーションが WITH HOLDカーソルから読み取る必要がある場合は、カーソルを作成する前にEDB_HOLD_CURSOR_ACTIONをEDB_COMMIT_AFTER_CURSORに設定することで、OCIがカーソルを作成した直後にトランザクションをコミットするようにEDB_COMMIT_AFTER_CURSORできます。例えば:EDB_COMMIT_AFTER_CURSOR によって追加された追加のコミットでアプリケーションが正しく実行されない場合は、 EDB_ATTR_HOLD_CURSOR_ACTIONをEDB_CURSOR_WITHOUT_XACT_BLK設定してEDB_ATTR_HOLD_CURSOR_ACTIONてEDB_CURSOR_WITHOUT_XACT_BLK 。これにより、OCIは新しいトランザクションチェーンを開始しません。トランザクションをコミットまたはロールバックした直後にWITH HOLDカーソルを作成すると、そのカーソルはそれ自身のトランザクション内で作成され、データベースサーバはそのトランザクションをコミットし、カーソルは持続します。カーソル宣言がトランザクション内の最初のステートメントでない場合でもエラーが発生する可能性があることを理解することが重要です。カーソルを宣言する前に他のステートメントを実行すると、 WITH HOLDカーソルがトランザクションブロック内に作成されロールされる可能性があります。エラーが発生した場合(またはアプリケーションがOCITransRollback()コールした場合)あなたが設定できることに注意してください EDB_HOLD_CURSOR_ACTIONサーバーレベル(上OCIServer )または各ステートメントハンドル(のためOCIStmt )。文の属性がOCI_DEFAULT以外の値に設定されている場合、値は文のハンドルから導出されます。それ以外の場合(文の属性がOCI_DEFAULT設定されている場合)、値はサーバーのハンドルから取得されます。そのため、サーバー・ハンドルに属性を設定し、文ハンドルでその属性をOCI_DEFAULTに設定したままにすることで、サーバー全体のデフォルトのアクションを定義できます。あなたが適当であると思うようにあなたはそれぞれのステートメントハンドル(またはサーバーハンドル)に対して異なる値を使うことができます。3.6.2.4 EDB_ATTR_STMT_LVL_TX特に指示がない限り 、サーバーからエラーが報告されると、OCIコネクタは現在のトランザクションを ROLLBACKします。選択した場合は、 edb_stmt_level_txパラメーターを使用して自動ROLLBACKをオーバーライドできます。これにより、1つ(または複数)のステートメントでトランザクション内でエラーが発生した場合でも、トランザクション内での変更が保持されます。OCIServer OCIAttrSet()およびOCIAttrGet() OCIServer属性を使用すると、 OCIServerを有効または無効にEDB_ATTR_STMT_LEVEL_TXます。デフォルトでは、 edb_stmt_level_txは無効になっています。 edb_stmt_level_txを有効にするには、クライアント・アプリケーションはOCIAttrSet()コールする必要があります。edb_stmt_level_tx を無効にするには
3.6.3 関数のバインド、定義、記述
3.6.4 ステートメント関数
3.6.5 トランザクション機能
3.6.6 XA関数
3.6.6.1 xaoSvcCtxどこ required_fields次のとおりです。HostName= host_ip_addressは、Advanced ServerデータベースのIPアドレスを指定します。PortNumber= host_port_numberは、Advanced Serverが稼働しているポート番号を指定します。SqlNet= dbnameはデータベース名を指定します。Acc=P/ username / passwordは、データベースのユーザー名とパスワードを指定します。 passwordは省略passwordことができます。その場合、フィールドはAcc=P/username/として指定されAcc=P/username/ 。AppName= app_idは、アプリケーションを識別する番号を指定します。
3.6.7 日付と日付時刻関数
descriptor according to the specified format. Convert the given string to Oracle datetime type in the OCIDateTime descriptor according to the specified format. Convert the given string to Oracle datetime type in the descriptor according to the specified format.
3.6.8 区間関数
OCINumber values. Implements multiplication of OCIInterval values by Implements multiplication of values.
3.6.9 数関数
at a specified decimal place. NUMBER at a specified decimal place. Truncate a at a specified decimal place.
3.6.10 文字列関数
3.6.12 LOB関数
3.6.13 その他の機能
3.6.14 サポートされているデータ型
3.7 OCIエラーコード - 参照次の表に、OCIコネクタで定義されているエラーコードのマッピングを示します。データベースサーバからエラーコードまたは状態(1列目または2列目に表示)が報告されると、OCIはその値を3列目に表示されている互換性のある値に変換します。