このセクション全体が廃止されたのではありませんか?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文ではデータベースを名前で参照できます。