COBOL アプリケーションの SQL アクセス
COBOL アプリケーションの SQL アクセスの提供
この付録では、以下の項目について説明します。
COBOL の PSQL サポートの概要
PSQL リレーショナル エンジンには、COBOL の OCCURS 句、部分的 REDEFINES、および可変レコード レイアウトのサポートが含まれています。
部分的 REDEFINES 句は、レコード内のデータの一部(たとえば、01 レベル内の 05 レベルなど)を識別します。可変レコード レイアウトもまた REDEFINES と呼ばれます。これは、レコード全体を再定義するものだからです。用語の混乱を避けるため、このトピックでは部分的 REDEFINES および可変レコード レイアウトと呼びます。
SQL アクセスを利用するために COBOL アプリケーションを変更する必要はありません。
アプリケーションでのデータの処理を PSQL リレーショナル エンジンに示すことによって、SQL アクセスは有効になります。開発者の言葉で言えば、リレーショナル エンジンにメタデータを定義します。
このトピックは、OCCURS、部分的 REDEFINES、または可変レコード レイアウトを含んでいる COBOL アプリケーションにのみ適用されることに注意してください。
制限
現在、COBOL アプリケーションに SQL アクセスを提供する場合には以下の制限が適用されます。
SQL ステートメント
次の表は、OCCURS、部分的 REDEFINES、または可変レコード レイアウトに基づいて作成されたデータ テーブルでの SQL ステートメントの使用を示します。
PSQL の SQL 文法 を参照してください。
コンポーネント
PSQL は、COBOL アプリケーションの SQL アクセスを提供するために以下のコンポーネントをインストールします。
Schema Executor が使用するルーチンの 32 ビット ライブラリ
Windows サーバー:<file_path>\PSQL\bin\
Schema Executor が使用するルーチンの 64 ビット ライブラリ
Windows サーバー:<file_path>\PSQL\bin\
Schema Executor が使用するルーチンの 32 ビットおよび 64 ビット ライブラリ
Windows サーバー:<file_path>\PSQL\bin\
Windows サーバー:<file_path>\PSQL\bin\
XML ファイルを処理する際に Schema Executor が使用する制御ファイル(ドキュメント型定義)
Windows サーバー:
<file_path>\PSQL\schemas
XML ファイルを処理する際に Schema Executor が生成したメッセージを記録するデフォルトのログ ファイル
Windows サーバー:
<file_path>\PSQL\logs
<file_path>\PSQL\bin\
サンプル XML ファイルの実行例も参照してください。
Windows サーバーおよびクライアント:
<file_path>\PSQL\samples\cobolschemaexec
サンプル XML ファイルの実行例も参照してください。
Windows サーバーおよびクライアント:
<file_path>\PSQL\samples\cobolschemaexec
サンプル XML ファイルの実行例も参照してください。
Windows サーバーおよびクライアント:
<file_path>\PSQL\samples\cobolschemaexec
サンプル XML ファイルの実行例も参照してください。
Windows サーバーおよびクライアント:
<file_path>\PSQL\samples\cobolschemaexec
Schema Executor コマンドの形式を参照してください。
1 PSQL ファイルのデフォルトの保存場所については、『Getting Started with PSQL』の PSQL ファイルはどこにインストールされますか?を参照してください。
SQL アクセスの使用
SQL アクセスを利用するには次の作業を行います。
1
2
3
4
手順 1:サンプル XML テンプレートの変更
PSQL にはサンプルの XML テンプレートが含まれており、これを利用すると、COBOL アプリケーションで必要とされるとおりにデータのレイアウトを定義できます。表 181 を参照してください。開発者の言葉で言えば、XML ファイルにメタデータを記述します。
1
2
3
手順 2:XML テンプレートで指定したデータ ファイルのコピー
Schema Executor を起動する前に、XML ファイルで指定したデータ ファイルをデータベースのデータ ファイルの場所へコピーします。データベースは、テーブルを追加する必要のあるデータベースです。
たとえば、XML で mytable.mkd と指定したテーブルをデータベース test に追加するとします。このとき、データベースのデータ ファイルは c:\data\test にあるとします。Schema Executor を起動する前に、データ ファイル mytable.mkd を c:\data\test へコピーします。
手順 3:Schema Executor ユーティリティの実行
PSQL には Schema Executor というコマンド ライン ユーティリティが付属しています。このユーティリティは SchemaExec とも言います。
Schema Executor は以下の操作を実行します。
サンプル XML ファイルの実行例も参照してください。
1
2
必須オプションの XMLfilename および databasename と、必要な任意のオプションを指定します。Schema Executor コマンドの形式を参照してください。
XML コンテンツの処理中にエラーが発生した場合は、Schema Executor ログ ファイルに報告されているエラーを検討します。ログ メッセージを参照してください。処理でエラーが発生しなくなるまで、繰り返し XML を修正してユーティリティを実行します。
Schema Executor コマンドの形式
cobolschemaexec XMLfilename databasename [-s servername] [-u login_id] [-p password] [-i svr_loginid] [-c svr_password] [-l log_file] [ -h | -? ]
 
-u login_id
-p password
-i svr_loginid
-c svr_password
-l log_file
ログ メッセージを参照してください。
メモ: 必須オプションの XMLfilenamedatabasename は位置決めされており、この順序で指定する必要があります。
使い方の例
次の例は、Schema Executor の使い方を示しています。
PSQL ファイルのデフォルトの保存場所については、『Getting Started with PSQL』の PSQL ファイルはどこにインストールされますか?を参照してください。
cobolschemaexec <file_path>\PSQL\samples\cobolschemaexec\test.xml demodata\
cobolschemaexec <file_path>\PSQL\samples\cobolschemaexec\test.xml mytest
ユーティリティは次のようなプロンプトを表示します。
CB103 : mytest に接続できません
データベースを作成しますか(y/n)?
y を押すと、ユーティリティはデータベース パスを入力するプロンプトを表示します。
データベース パスを入力してください。
既存のパスを入力します。そうしないと、エラーが返されます。必ず、XML ファイルで使用されているデータベース ファイル(たとえば .MKD ファイル)がそのパスで使用可能であるようにしてください。
cobolschemaexec <file_path>\PSQL\samples\cobolschemaexec\test.xml demodata -s TestMachine -i testuser -c testuser
この例では、管理者権限を持つユーザー testuser(パスワード "testuser")がリモート マシン(TestMachine)に存在し、XML ファイルで使用されるデータベース ファイルは、リモート マシン上のデータベースのデータ ファイル ディレクトリにあるものとします。
cobolschemaexec <file_path>\PSQL\samples\cobolschemaexec\test.xml mytest -s RemoteMachine -i testuser -c testuser
この例では、ユーザー testuser(パスワード "testuser")はリモート マシン(TestMachine)に存在し、管理者権限を持っているものとします。
ユーティリティは次のようなプロンプトを表示します。
CB103 : mytest に接続できません
データベースを作成しますか(y/n)?
y を押すと、ユーティリティはデータベース パスを入力するプロンプトを表示します。
データベース パスを入力してください。
既存のパスを入力します。そうしないと、エラーが返されます。必ず、XML ファイルで使用されているデータベース ファイル(たとえば .MKD ファイル)がそのパスで使用可能であるようにしてください。
Schema Executor による新規データベースの作成
ユーティリティ オプション databasename に存在しないデータベースを指定すると、Schema Executor は新しいデータベースを作成するかどうかを尋ねます。"yes" と答えると、新しいデータベースの場所を入力するプロンプトが表示されます。Schema Executor がデータベースを作成する場所(パスとフォルダー名)は既存でなければなりません。
また、Schema Executor は、デフォルト フォルダーに databasename のデータ ファイルがあることを期待するので注意してください。データ ファイルが見つからない場合は、その旨が通知されます。データ ファイルを自分でデフォルト フォルダーへコピーしてから、Schema Executor を再実行して XML を処理します。
ログ メッセージ
このセクションは、Schema Executor による XML ファイルの処理後、ログ ファイルに記載されている可能性のあるコードの一覧を示します。
成功を表すコードは、「CB100:Schemaexec は正常に完了しました」です。
次の表は、エラー コードの一覧を示します。
TableName - TableName が重複しています
FieldName - FieldName が重複しています
IndexName - IndexName が重複しています
Identifier - 不正な文字が含まれています
TableFilter - テーブル フィルターは 255 文字を超えてはいけません
FieldName は TableName のフィールドではありません
識別子名 identifiername は英文字で始まっている必要があります
識別子名 identifiername にキーワードは使用できません
DataFile - DatabasePath に存在しません
コマンド ライン引数 argument の値が不正です
DatabaseName に接続できません
ディレクトリ パス Databasepath にデータベース DatabaseName を作成できませんでした
手順 4:システム テーブルの配布(任意)
COBOL アプリケーションの開発者である場合は、作成したアプリケーションと共にすべてのシステム アプリケーションを配布するようにしてください。配布自体に違いはありませんが、追加するシステム テーブルが生じる可能性があるので、ここで述べています。たとえば、PSQL の現在のバージョンより前のバージョンで作成されたデータベースに対して Schema Executor を実行した場合は、追加のシステム テーブルが作成され配置されます。その結果、配布するシステム テーブル(DDF ファイル)がいくつか追加されることになります。
サンプル XML ファイルの実行例
サンプル XML ファイルおよびデータ ファイルは、<file_path>\PSQL\samples\cobolschemaexec フォルダー内に提供されています。PSQL ファイルのデフォルトの保存場所については、『Getting Started with PSQL』の PSQL ファイルはどこにインストールされますか?を参照してください。
Schema Executor を使って XML ファイル SampleMainTable.xml を実行するには、次の手順に従います。
1
たとえば、test という名前のデータベースがあり、データ ファイルの場所は c:\data\test であるとします。c:\data\test へ maintbl.mkd をコピーします。
2
PSQL\bin\ ディレクトリでコマンド プロンプトを開きます。
3
cobolschemaexec <file_path>\PSQL\samples\cobolschemaexec\samplemaintable.xml test
4
5
これで、PCC を使ってテーブル maintbl で SQL 操作を実行できます。
補注
このセクションでは、SELECT ステートメントおよびテーブル フィルターに関する注意事項を提供します。
SELECT ステートメント
OCCURS テーブルで SELECT クエリを実行すると、次の内容が返されます。
たとえば、次のサンプル XML ファイルについて Schema Executor を実行した結果作成されるテーブルに対し、SELECT * FROM FIELD というクエリを実行するとします。
<file_path>\PSQL\samples\cobolschemaexec\ SampleMainWithOccurs.xml
ユーティリティは、列 Id、OccursCounter、Field_1、Field_2、および Field_3 を返します。
REDEFINES テーブルで SELECT を実行すると、親テーブルの列と REDEFINES テーブルの列がすべて返されます。
たとえば、次のサンプル XML ファイルについて Schema Executor を実行した結果作成されるテーブルに対し、SELECT * FROM Redefined_group というクエリを実行するとします。
<file_path>\PSQL\samples\ cobolschemaexec\SampleMainWithRedefines.xml
ユーティリティは、列 Id、Account_Num、Category、Redef_Struct_Num(親テーブルのすべての列)、および Redefined_field_1(REDEFINES テーブルの列)を返します。
テーブル フィルター
テーブル フィルターとは、特定のテーブルのフィルター条件のことです。サンプル XML ファイルでは TABLEFILTER として参照されます。
オペランドと演算子の間にスペースを入れてください。
例: Cust_Num = '100' (Cust_Num は列名です)
有効な TABLEFILTER の使用例
Cust_Num = '100' (Cust_Num = 100 と同等)
 
Cust_Num &lt; '100' (Cust_Num < 100 と同等)
 
Cust_Num &gt; '100' (Cust_Num > 100 と同等)
 
Cust_Num &lt;&gt; '100' (Cust_Num <> 100 と同等)
 
'a' = Category | Account_Num &lt;= 'a123' ('a'=category OR account_num <= 'a123' と同等)
 
'a' = Category &amp; Account_Num = 'a123' ('a' = category AND account_num = 'a123' と同等)
 
Cust_Num = My_cust_Num (両オペランドが列名)