このセクション全体が廃止されたのではありませんか?OCI 7コールはサポートされなくなりましたか?
注意:
ログイン・データ領域(LDA)は、サポートされなくなりました。OCIリリース7コールをPro*C/C++プログラムに埋め込む機能は、サポートされていません。
OCIリリース7コールをPro*C/C++プログラムに埋め込む手順は、次のとおりです。
OCIログイン・データ領域(LDA)をPro*C/C++プログラム内(MODE=ANSIを指定してプリコンパイルする場合は、宣言部の外)で宣言します。LDAは、OCIヘッダー・ファイルoci.h
内で定義された構造体です。詳細は、リリース7対応の『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。
OCIのorlon()
またはonblon()
コールではなく、埋込みSQL文CONNECTを使用してOracleに接続します。
SQLLIBランタイム・ライブラリ関数sqllda()
をコールしてLDA.SQLLIB関数を設定します。
これにより、Pro*C/C++プリコンパイラとOCIでは、両者が連動していることが認識されます。ただし、Oracleカーソルは共有されません。
Oracleランタイム・ライブラリにより接続が管理され、HDAがメンテナンスされるため、OCIホスト・データ領域(HDA)の宣言を意識する必要はありません。
OCIコールを発行してLDAを設定します。
sqllda(&lda);
ldaでは、LDAデータ構造体を指定します。
設定が失敗すると、ldaのlda_rcフィールドがエラーを示す1012に設定されます。
sqllda()
のコールにより、最後に実行されたSQL文で使用する接続用のLDAが設定されます。追加接続に必要な別のLDAを設定するには、各CONNECTの直後に別のLDAを指定してsqllda()
をコールする必要があります。次の例では、2つの非デフォルト・データベースに同時に接続します。
#include <ocidfn.h> Lda_Def lda1; Lda_Def lda2; char username[10], password[10], db_string1[20], dbstring2[20]; ... strcpy(username, "scott"); strcpy(password, "tiger"); strcpy(db_string1, "NYNON"); strcpy(db_string2, "CHINON"); /* give each database connection a unique name */ EXEC SQL DECLARE DB_NAME1 DATABASE; EXEC SQL DECLARE DB_NAME2 DATABASE; /* connect to first nondefault database */ EXEC SQL CONNECT :username IDENTIFIED BY :password; AT DB_NAME1 USING :db_string1; /* set up first LDA */ sqllda(&lda1); /* connect to second nondefault database */ EXEC SQL CONNECT :username IDENTIFIED BY :password; AT DB_NAME2 USING :db_string2; /* set up second LDA */ sqllda(&lda2);
DB_NAME1およびDB_NAME2は、C言語の変数ではなくSQL識別子です。識別子DB_NAME1およびDB_NAME2は、2つの非デフォルト・ノードのデフォルトのデータベースの名前を指定するためにのみ使用します。これにより、後のSQL文ではデータベースを名前で参照できます。