この章では、(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コールのコードを記述する場合は、SQLXXXのかわりにSQ2XXXをコールする必要があります。たとえば、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コールのコードを記述したい場合は、SQLXXXのかわりにSQ0XXXをコールする必要があります。たとえば、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++プログラマーズ・ガイド』を参照してください。 |