この章では、(Pro*Cなどの)個々のプリコンパイラおよびホスト言語コール(Oracle Call Interface)のドキュメントの補足となる、BS2000/OSD固有の情報を説明します。内容は次のとおりです。
Oracleプログラム・インタフェースは、高水準言語プログラムから、SQL文を使用しOracle Databaseにアクセスするアプリケーション・デザイナ向けのツールです。次のタイプのプログラム・インタフェースがあります。
高水準言語のソース・コードにSQL文を組み込むことが可能なプログラミング・ツールである、プリコンパイラ・インタフェース。
Oracle Databaseカーネルを直接呼び出し、高水準言語のアプリケーションがOracle Database内のデータにアクセスすることを可能にする、Oracle Call Interface。
BS2000/OSDでは、Oracle Databaseプリコンパイラでは、C、C++およびCOBOLプログラミング言語で記述されたプログラミング言語がサポートされています。
Oracleプリコンパイラの詳細は、『Oracle Database Oracleプリコンパイラのためのプログラマーズ・ガイド』および次のリストの適切な補足ドキュメントを参照してください。
『Pro*C/C++プログラマーズ・ガイド』
『Pro*COBOLプログラマーズ・ガイド』
すべてのプリコンパイラおよびOracle Call Interface (OCI)アプリケーションは、小さなstubモジュールを使用してリンク編集されます。stubモジュールでは、ORALOAD
ライブラリから(BIND
システム・マクロを使用し)、Oracleプリコンパイラ・ソフトウェアのバルク・コードを動的にロードします。次の言語で記述されたプログラムは、結合できます。
Pro*C/C++
Pro*COBOL (COBOL85およびCOBOL2000)
注意: OCI CおよびOCI COBOLプログラムは結合できません(結合しようとすると実行エラーとなります)。(OLOGONなど)OCI CおよびOCI COBOLによって使用されるOracle Databaseへのエントリは、同じ名前ですが、引数一覧は異なります(OCI COBOLのすべての引数は、パラメータの一覧にすべてポインタが含まれる参照によるものであるのに対し、OCI Cの数値の引数は値です)。 |
Oracleのプリコンパイラでは、言語が異なると、別のSQLLIB
関数名を生成します。次の名前が使用されます。
SQ0XXX:
COBOL
SQ2XXX:
C
『Oracle Database PL/SQL言語リファレンス』で説明されるとおり、プリコンパイラでは、PL/SQLがサポートされています。PL/SQLを使用する際には、プリコンパイラのオプション行で、SQLCHECK=FULL
またはSQLCHECK=SEMANTICS
を指定する必要があります。デフォルトはSQLCHECK=NONE
です。SQLCHECK
を要求する際、プリコンパイラではデータベースに接続する必要があります。したがって、必要な接続情報を提供していることを確認する必要があります。(ORAENV
ファイルにDEFAULT_CONNECTION
変数も設定した方がよいでしょう)。
SQLCHECK=SEMANTICS
では、USERID=username/password
も指定します。
プログラム・インタフェース・アプリケーションを構築および実行するには、次の手順を実行します。詳細は、この章のプログラム・インタフェースに関する具体的な記述を参照してください。
プリコンパイラの汎用のドキュメントに概要が説明されているとおり、組込みSQLを含むソース・コードを編集してください。
対応するプリプロセッサで、ソースを事前処理します。
注意: プリコンパイル時、クライアントのキャラクタ・セットには、(ORAENV ファイルに設定されている)WE8BS2000を使用します。その他のキャラクタ・セットでは、連結記号(||)で問題が発生する場合があります。
OCI CまたはOCI COBOLアプリケーションを構築している場合は、プリコンパイルは行う必要がありません。 |
アプリケーションをコンパイルします。
PRO.LIB
のstubモジュールPROSTUB
でアプリケーションをリンク編集します。
SET-FILE-LINK
コマンドを使用し、ORALOAD
ライブラリを識別します。(通常、これはORAENV
プロシージャに含まれています)。
START-PROG
コマンドを使用し、アプリケーションを実行します。サポートされるOracle Databaseユーザー・モジュールがORALOAD
ライブラリから動的にロードされます。
インストール・ユーザーIDの$ORAC1120.P.PROC、$ORAC1120.P.PROCOBおよび$ORAC1120.P.PROLNK
には、サンプル・ファイルがあります。
図5-1では、前述の番号付けされたリストで概要を示したイベントの順序と、プログラム・インタフェースでどのようにプログラム・ライブラリが使用されるかを示します。
BS2000/OSD上のOracle Databaseプリコンパイラでは、次のファイルのLMSライブラリをサポートしています。
この機能では、ディスクのリソースを節約することを可能にし、異なるライブラリにファイルをグループ化して明確にします。
使用するすべてのLMSライブラリ要素は、要素タイプSである必要があります。Pro*では、ライブラリが使用される場合、タイプSの要素が生成されます。LMSの要素を使用した場合には、プリコンパイラでは接頭辞#Tが使用され、事前処理が正常に完了すると完全に削除される一時ファイルを構築します。
LMSライブラリ要素を使用する場合、指定する要素名はサフィックスを含む完全な要素名にする必要があります。Pro*では、要素名にサフィックスは追加されません。
すべての標準のインクルード・ファイルは、LMSライブラリ$ORAC1120.PRO.INCLUDE.LIB
に含まれ出荷されます。EXEC SQL INCLUDE
文には、次のように、INCLUDE
プリコンパイラのオプションを使用して、このライブラリまたはユーザー定義のインクルード・ライブラリを入力する必要があります。
* INCLUDE=$ORAC1120.PRO.INCLUDE.LIB \ * INCLUDE=mylibrary
ここで、mylibrary
は、PROC.INCLIB
などのユーザー定義ライブラリのBS2000ファイル名です。
注意: 様々なINCLUDEオプションを指定する順番は、プリコンパイルのパフォーマンスに影響を与えます。よく使用するファイルは、まれにしか使用しないファイルの前に配置する必要があります。 |
次の構文を使用すると、ユーザー固有の構成ファイルをLMS要素として指定できます。
* CONFIG=my_config_lib[config_element]
ここで、my_config_lib
は構成ライブラリのBS2000ファイル名で、config_elementは要素の完全な名前です。
注意: 構成要素を指定する場合は、次の例のとおり、カッコを使用します。 |
次に例を示します。
* CONFIG=CONFIG.LIB[PROCOB.CFG]
BS2000ファイルを使用する以外に、プリコンパイラのI/OでINAME
、ONAME
およびLNAME
オプションを使用してLMS要素を利用できます。
そこからライブラリ・ファイル名や要素を指定しない場合、OracleプリコンパイラではデフォルトでISAM BS2000ファイルを生成します。入力する必要のある唯一のオプションは、INAME
オプションです。これは、BS2000ファイル名(SAM
またはISAM
)またはライブラリ・ファイル名とそこからの要素の名前にすることが可能です。
次に例を示します。
* INAME=my_input_lib[my_element]\ * ONAME=my_output_lib[my_element]\ * LNAME=my_list_lib[my_element]
ここで、my_input_lib
は特定のライブラリのBS2000ファイル名で、my_element
は特定のサフィックスを含む要素の名前です。
注意: 適切な構成要素を指定する場合は、カッコを使用します。 |
次の例では、ONAME
オプションが省略されているので、Pro*Cは、SAMPLE.C
というBS2000-ISAM出力ファイルを生成します。
* INAME=INPUT.LIB[SAMPLE.PC] \ * LNAME=LIST.LIB[SAMPLE.LST]
次に、このリリースのOracle Database 11gリリース2 (11.2) for Fujitsu BS2000/OSDに関するその他の注意点を示します。
ILCS標準リンケージをサポートするコンパイラおよびコンパイラ・バージョンのみがサポートされます。Oracle Databaseが標準リンケージ規則を使用しないユーザー・プログラムからのコールが検出された場合、タスクは終了し、メッセージ番号5002または5003が表示されます。
ONAME
がプリコンパイラの起動時に指定されない場合、プリコンパイラでは該当のサフィックスとINAME
の最後の部分で構成されるデフォルトの名前を生成します。たとえば、コンパイルするCプログラムの名前がMYPROG.PERS.TEST.PC
で、ONAME
が省略されている場合、Pro*Cでは、TEST.C
という名前の出力ファイルを生成します。
float変数を使用する場合、丸めの問題が発生することがあります。これを解決するには、float変数をdouble変数として宣言します。
この項では、Pro*C/C++を使用する手順について説明します。
Pro*Cプリコンパイラを起動するには、次を入力します。
/START-PROGRAM $ORAC1120.PROC * INAME=myprog.PC ONAME=myprog.C [options]
ここで、
myprog
は、コンパイルしリンクするCプログラムの名前です。
options
はPROC
オプションの1つです。有効なオプションの一覧および説明は、『Pro*C/C++プログラマーズ・ガイド』を参照してください。
注意: 『Pro*C/C++プログラマーズ・ガイド』での説明とは異なり、指定する各パスには、プリコンパイラ・オプション、INCLUDE を1つ指定する必要があります。オプションSYS_INCLUDE に許可されているリストによって、プリコンパイラでループが発生する可能性があります。Pro*C/C++のIncludeオプションに関する説明を参照してください。 |
Pro*Cのインクルード・ファイル、デモ・ファイル、システム構成ファイルは、次に含まれ出荷されています。
$ORAC1120.PRO.INCLUDE.LIB $ORAC1120.C.DEMO.*.PC $ORAC1120.UTM.DEMO.*.PC $ORAC1120.CONFIG.PCSCFG.CFG
コンパイルおよびプリコンパイル手順の例は、Oracle Databaseソフトウェアに$ORAC1120.P.PROC
という名前で含まれています。
SQLLIB
関数に対し明示的にCコールのコードを記述する場合は、SQL
XXX
のかわりにSQ2
XXX
をコールする必要があります。たとえば、SQLCEX
ではなくSQ2CEX
をコールます。
Pro*Cプログラムにリンクを行うには、次を実行する必要があります。
共通ランタイム環境(CRTE
)。
stubモジュールPROSTUB
を含むPro*ライブラリ($ORAC1120.PRO.LIB
)。実行時には、このモジュールが実際のSQLLIB
コードを含む事前にリンクされているモジュールORAPRO
をロードします。
注意: TSOSLNK のかわりにBINDER を使用する必要があります。 |
プログラムをリンクするには、ユーザー固有のリンク手順を作成する必要があります。このようなリンク手順の例は、Oracle Databaseソフトウェアに$ORAC1120.P.PROLNK
という名前で含まれています。
sq2cls()
やsq2glm()
などのPro*C関数をコールする場合、CプログラムにSQLCPR.H
ファイルを含め、正しく関数をコールしたことを確認できます。
Pro*Cプログラムに次の行を追加します。
EXEC SQL INCLUDE SQLCPR
これは、SQLCA
やSQLDA
のときと同様です。
この項では、Pro*COBOLを使用する手順について説明します。Pro*COBOLを使用する際には、次の特殊な事柄を考慮する必要があります。
n
=8およびn >10
での、タイプPIC S9(
n
)
のホスト変数はサポートされていません。
Pro*COBOLを使用する場合、プリコンパイラでは、これらのEXEC
文から生成されたコード用にパラグラフのヘッダーを生成するため、パラグラフとEXEC
文がある次の構文には注意してください。
プリコンパイル前 | プリコンパイル後 |
---|---|
COB-LABEL1. | COB-LABEL1 |
. | . |
. | . |
EXEC SQL.... | SQL-LABEL1. |
. | . |
. | . |
COB-LABEL2. | COB-LABEL2. |
プリコンパイル前、文PERFORM COB-LABEL1
では、COB-LABEL2
のヘッダーに到達するまでコードをパラグラフCOB-LABEL1
で実行します。ただし、プリコンパイラは、EXEC SQL
文から生成したコード用にパラグラフ・ヘッダーSQL-LABEL1
を生成します。
その結果、プリコンパイル後、PERFORM COB-LABEL1
ではSQL-LABEL1
に到達するまでパラグラフCOB-LABEL1
でコードを実行します。この問題を解決するには、SECTIONS
を使用するか、PERFORM COB-LABEL1 THRU COB-LABEL2
を実行します。
WORKING STORAGE SECTION
の最初の文にCOPY
文があるときに、コピーされた構造がコピーされていないコードによって続行される場合、プリコンパイラがソース・プログラムの最初のデータ定義の前にそのデータ定義を生成するので、不正なコードが生成される場合があります。この動作を避けるには、次のように、WORKING-STORAGE SECTION
の最初の行にFILLER
定義を1つ挿入します。
01 FILLER PIC X
バージョン8.1.7以上では、PIC X
変数のデフォルトのデータ型は、VARCHAR2
からCHARF
に変更されています。プリコンパイラには、下位互換のオプションPICX={VARCHAR2 | CHARF (default)}
があります。
このオプションは、コマンドラインまたは構成ファイルでのみ使用できます。新しいデフォルトのアクションは、COBOLの通常の移動アクションと一貫性があります。
注意: 既存のアプリケーションのプリコンパイルでデフォルトのPICX=CHARF を使用すると、ランタイム・エラーORA-1403: データが見つかりません。 が発生する場合があります。 |
詳細は、『Pro*COBOLプログラマーズ・ガイド』のプリコンパイラのオプションに関する章を参照してください。
Pro*COBOLのプリコンパイラを起動するには、次のコマンドを入力します。
/START-PROGRAM $ORAC1120.PROCOB
* INAME=myprog.PCO ONAME=myprog.COB [options]
ここで、
myprog
は、コンパイルおよびリンクするCOBOLプログラムを指定します
options
は、『Pro*COBOLプログラマーズ・ガイド』で説明されているPROCOBのオプションの1つです
注意: 『Pro*COBOLプログラマーズ・ガイド』のとおり、PROCOBのオプションのMAXLITERALのデフォルトは256ではなく180です。オプションFORMAT=TERMINALはサポート対象外です。 |
Pro*COBOLのインクルード・ファイル、デモ・ファイル、システム構成ファイルは、次に含まれ出荷されています。
$ORAC1120.PRO.INCLUDE.LIB $ORAC1120.COBOL.DEMO.*.PCO $ORAC1120.UTM.DEMO.*.PCO $ORAC1120.CONFIG.PCBCFG.CFG
コンパイルおよびプリコンパイル手順の例は、Oracle Databaseソフトウェアに$ORAC1120.P.PROCOB2000
という名前で含まれています。
SQLLIB
関数に対し明示的にCOBOLコールのコードを記述したい場合は、SQL
XXX
のかわりにSQ0
XXX
をコールする必要があります。たとえば、SQLADR
ではなく、SQ0ADR
をコールます。
Pro*COBOLプログラムでリンクを行うには、次を実行する必要があります。
共通ランタイム環境(CRTE
)。
stubモジュールPROSTUB.
を含むPro*ライブラリ($ORAC1120.PRO.LIB
)。実行時には、このモジュールが実際のSQLLIB
コードを含む事前にリンクされているモジュールORAPRO
をロードします。
Unicodeは、COBOL2000のみでサポートされています。これによって、BS2000のマクロNLSCNV
に対して、コールが生成される場合があります。GNLCNV
のエントリを解決するには、システムのXHCSライブラリを使用します。GNLCNV
のエントリの詳細は、BS2000用XHCSのFujitsu社のユーザーズ・ガイドを参照してください。
注意: TSOSLNK のかわりにBINDER を使用する必要があります。 |
プログラムをリンクするには、ユーザー固有のリンク手順を作成する必要があります。このようなリンク手順の例は、Oracle Databaseソフトウェアに$ORAC1120.P.PROLNK
という名前で含まれています。
BS2000/OSDでは、Oracle Call InterfaceはCおよびCOBOLの言語がサポートされています。
Oracle Call Interfaceを構成するホスト言語コールのセットを使用すると、CおよびCOBOLのプログラミング言語で記述されたプログラムでOracle Databaseのデータにアクセスできます。OCIのコールの完全な説明は、Oracle Call Interfaceプログラマーズ・ガイドを参照してください。
制限については、『Oracle Databaseインストレーションおよび構成ガイドfor Fujitsu BS2000/OSD』の既知の問題、制限および対処方法に関する説明を参照してください。
注意: オラクルのプリコンパイラ製品には、Oracle Databaseに対する高レベルなインタフェースがあります。1つのプリコンパイラのコールを、いくつかのOCIコールに変換できます。プリコンパイラは簡単に使用でき、OCIより機能が多くあったり異なることはあまりないので、一部のアプリケーションではプリコンパイラを使用した方がよいでしょう。 |
OCIプログラム・ファイルをリンクするには、次が必要です。
共通ランタイム環境(CRTE)。
stubモジュールOCI$COB
およびPROSTUB
を含むPro*ライブラリ($ORAC1120.PRO.LIB
)。実行時、PROSTUB
は事前リンクされている実際のSQLLIB
コードを含むモジュールORAPRO
をロードします。
OCI COBOLプログラムをリンクする際、OCI$COB
は常にPROSTUB
の前に含める必要があります。
注意: TSOSLNKのかわりにBINDERを使用する必要があります。 |
プログラムをリンクするには、ユーザー固有のリンク手順を作成する必要があります。このようなリンク手順の例は、Oracle Databaseソフトウェアに$ORAC1120.P.PROLNK
という名前で含まれています。
たとえば、このサンプルのプロシージャを使用してプログラムにリンクするには、次を入力します。
/CALL-PROCEDURE $ORAC1120.P.PROLNK,dir,module,TYPE=OCIC
または、
/CALL-PROCEDURE $ORAC1120.P.PROLNK,dir,module,TYPE=OCICOB
ここで、リンクされるモジュールはdir
.LIB
に格納されています。
例のファイルは、次の下に含まれ出荷されています。
$ORAC1120.RDBMS.DEMO.*.C $ORAC1120.RDBMS.DEMO.*.COB
この項では、Object Type Translatorを使用する際のポート固有の注意点について説明します。
Object Type TranslatorはJavaを使用しているので、POSIX環境からのみ起動できます。データベースに接続するには、JDBC Thinドライバを使用する必要があります。接続文字列は、次のようにurlオプションで発行されます。
url=jdbc:oracle:thin:@
hostname
:
port
:
sid
次の例では、OTTはサービス識別子orcl
を使用して、ポート1521にTCP/IPリスナーがあるホストmyhost
に接続します。
次に例を示します。
ott userid=scott/tiger url=jdbc:oracle:thin:@myhost:1521:orcl intype=demoin.typ outtype=demoout.typ code=c hfile=demo.h
関連項目: Object Type Translatorの詳細は、『Pro*C/C++プログラマーズ・ガイド』を参照してください。 |