ここでは、OpenESQL アシスタントの使用と構成について説明します。
OpenESQL アシスタントは、次の作業を簡単に行うための対話型ツールです。
OpenESQL アシスタントを使用して SQL クエリーを作成する前に、OpenESQL アシスタントの動作を決定するオプションと SQL の生成方法を指定します。これらは、「OpenESQL アシスタント構成オプション」ダイアログボックスで行います。このダイアログボックスでは、次の設定ができます。
デフォルトでは、すべてのクエリーは修飾しないでビルドされ、ツリービュー内のすべてのテーブルが表示されます。ただし、データソースに同じ名前のテーブルが複数ある場合は、ツリービューで表示されるテーブル名の後ろにかっこで囲まれたオーナー名のテーブル名を設定できます。クエリー処理も、オーナー名で修飾されたテーブル名を返します。
デフォルトでは、カラム名またはテーブル名に空白文字、特殊文字 ($ など)、DBCS 文字が含まれていない場合は、カラム名やテーブル名はデータソースに関連付けられている引用符識別子で囲まれません。すべてのテーブル名とカラム名を引用符識別子で囲むことができます。
デフォルトでは、SQLCODE の確認を使用して SQL 文が生成されます。SQLSTATE の確認を使用して SQL 文を生成するように変更できます。
デフォルトでは、アプリケーションで使用する SQL 文が生成されます。Web サービスとして使用できる SQL 文も作成できます。
デフォルトでは、ツリービュー内に一覧表示される項目の順序は、システムカタログから返される順序です。これを、テーブル名の順序で一覧表示できます。この順序にすると、項目の一覧表示にはオーナー名は考慮されません。
デフォルトでは、SQL クエリーやコピーブックは大文字と小文字の組み合わせが使用されます。すべて小文字または大文字で生成することもできます。
デフォルトでは、クエリーの実行時に最初の 50 行のみ返されます。クエリーから多量の行が返されてマシンがクラッシュしたりネットワークがオーバーロードしたりすることがあります。そのため、この返される行の最大数を指定できます。返されるデータ量またはテストに必要なデータ量を考慮して適切な値を選択してください。
デフォルトでは、VARCHAR カラムの PIC X(n) フィールドとしてホスト変数が生成されます。データをホスト変数にマップする場合には、データは NULL で終了します。2 つのレベル-49 変数 (1 つはマップされたデータの長さで、もう 1 つは実際のテキストデータの長さ) を使用してホスト変数を生成できます。
デフォルトでは、適用可能な場合は SQL TYPE 定義を使用して COBOL ホスト変数が生成されます。これにより、SQL プリコンパイラは、ホスト変数の用途をより的確に判断できます。以前の方法でもホスト変数を生成できます。また、配列取り込みでコピーブックを使用している場合にも生成できます。
デフォルトでは、コピーブックの構造体名を「DCLtablename」として生成します。テーブル名のみの構造体名や有効な COBOL 名での構造体名にもできます。アンダスコアはすべてハイフンに変換されます。
デフォルトでは、カラム名とテーブル名の接頭語との組み合わせを使用してホスト変数が作成されます。有効な COBOL 名を作成するために、アンダスコアはすべてハイフンに変換されます。常にカラム名 (接頭語なし) のみを使用してホスト変数を生成できます。また、アルファベット文字の接頭語も使用できます。最初に選択されたテーブルの接頭語を「A」、次に選択されたテーブルの接頭語を「B」といったようにアルファベット文字の接頭語でホスト変数が生成されます。
注:生成されたホスト変数名が文字数が 32 文字以上の場合や、名前に無効な文字が含まれる場合は、指定方法に関わらず、FLD が前に付いたカラム番号としてホスト変数名が生成されます。
デフォルトでは、コピーブックの最後にインジケータ変数を生成します。各ホスト変数の最後にも生成できます。また、インジケータ変数を生成させないこともできます。
デフォルトでは、データソースへの接続時に、ユーザ ID およびパスワードが要求されます。常に同じデータソースに接続する場合や、データソースへの接続時に常に同じログオン情報を使用する場合は、接続するたびに自動的に使用されるユーザ ID およびパスワードを指定できます。
デフォルトでは、ツリービューに、データソース内で検出されたすべてのテーブル、ビュー、別名、および同義語が表示されます。特定の種類のデータソースでは、リストの作成応答時間が長くなります。このリストの作成応答時間を短くするためには、返されるデータを限定してこのリストの内容を制限できます。これを行うには、修飾子、テーブル名、オーナー、またはこれらの組み合わせを指定します。これらの指定で、次のワイルドカード文字が使用できます。
たとえば、XYZ で始まるテーブルのみをリストに限定表示する場合には、「XYZ%」と指定します。
OpenESQL アシスタントを使用すると、SQL クエリーを簡単に設計および作成でき、COBOL コードに SQL クエリーを埋め込めます。クエリーを指定すると、OpenESQL アシスタントは必要なコードを生成します。それらをプログラム内に埋め込む前に、適切な結果の作成を確認するためにクエリーをテストすることもできます。また、COBOL 内のクエリーをサポートするために必要な補助コードを生成または埋め込むことができます。
Net Express を起動したときに、OpenESQL アシスタントのドッキング可能なウィンドウを表示するように構成できます。また、必要なときに OpenESQL アシスタントを簡単に起動できます。
OpenESQL の構成によっては、ユーザ名とパスワードを入力する必要があります。
OpenESQL アシスタントで SQL を作成する前に、アクセスしたいデータを含むデータソースへ接続する必要があります。ワークステーション上のカタログされたすべてのデータソースは、OpenESQLアシスタントのツリービューに一覧表示されます。一度に接続できるデータソースは 1 つです。接続した後は、データソース内のすべてのデータ名はツリービューに表示されます。
一度データソースへ接続すると、データソースのプロパティを参照できます。「データソースのプロパティ」ダイアログボックスには、次の情報が含まれます。
これらの情報は、データソースでサポートされるテーブルとカラムを確認できます。テーブルまたはカラムの長さ 0 は、表示されません。たとえば、検索条件を設定する場合に、長さ 0 のテーブルまたはカラムを指定できません。
OpenESQL を使用してクエリーをビルドする方法は、次の複数の手順を実行します。
以後では、これらの手順について説明します。
1 回の操作で 1 つのテーブルを選択できます。または、データソース内のすべてのテーブルを選択できます。「生成するクエリーのタイプを選択」ダイアログボックスでテーブル上で実行したいクエリーの型を選択します。このダイアログボックスには、選択したテーブル上で実行できるクエリーの型が一覧表示されます。選択するクエリーの型によっては、デフォルトのカーソル名も変更できます。また、クエリーをストアドプロシージャとして生成し、ストアドプロシージャ (stored procedure; SP) 名も指定できます。
選択されたテーブルは、テーブルアイコン にチェックマークが付いて、ツリービューに表示されます。
クエリーを選択する場合は、選択したクエリーに対する COBOL コードが自動生成され、[クエリー] タブの下部に表示されます。同時に、テーブル名の下部にテーブルの全カラムが一覧表示されます。
SELECT クエリーを選択すると、OpenESQL アシスタントによりテーブルの別名が自動生成されています。次に例を示します。
SELECT FROM Customer A
最初に選択したテーブルは、別名には「A」の文字が使用されています。2 番目に選択するテーブルについては、OpenESQL アシスタント は「B」の文字を使用して別名を生成します。その後は同様に、テーブルの選択順に対応したアルファベットを使用して別名を生成します。
各カラム名の前にも、別名 (A.CustID、A.Company など) が付きます。この別名により、テーブル内のカラムを他のテーブル内のカラムと区別できます。
一部のデータベースでは、システムテーブルの名前に特殊文字が使用されます。たとえば、Oracle では、システムテーブル名にドル記号 ($) が使用されることがあります。OpenESQL アシスタントは、システムテーブルの名前に生成されたテーブル名を規約違反にするような特殊文字を検出すると、自動的にカラム名やテーブル名を引用符で囲みます。
カラム名から生成された名前 (接頭語と接尾語を含む) の文字数が 31 文字を超えたり、名前に規約違反な文字が含まれたりするために COBOL で規約違反になった場合は、OpenESQL はカラム名ではなく、カラム番号 (COL005 など) を使用してホスト変数を生成します。
テーブルおよびクエリーの型を選択すると、クエリーを処理する 1 つ以上のカラムを選択できます。
選択されたカラムは、カラムアイコン にチェックマークが付いて、ツリービューに表示されます。
SELECT (カーソル) または SELECT DISTINCT (カーソル) クエリーのどのカラムでも集約関数を指定できます。集約関数は、カラムから返されるデータの特定な情報を取得します。
OpenESQL は、返されるデータの各グループに対して、次の情報を返します。
集約関数 | 返されるデータの各グループに対する値 |
---|---|
SUM | すべての値の合計が返されます (数字カラムのみ) |
AVG | すべての値の平均が返されます (数字カラムのみ) |
MAX | 最大値が返されます |
MIN | 最小値が返されます |
COUNT | レコード数が返されます |
OpenESQL アシスタントの [検索条件] タブで検索条件を指定する場合は、クエリーで返される行を制限できます。OpenESQL アシスタントは、指定する条件に基づいた WHERE 句を生成します。
OpenESQL アシスタントの [ソート] タブでソートするカラムを指定して、クエリーから返される行の順序を決定できます。OpenESQL アシスタントは、指定する順序に基づいた ORDER BY 句を生成します。
複数のテーブル間に共通するカラムが 1 つでもあれば、これらのテーブルを結合させ、複数のテーブルから同時に情報を検索できます。OpenESQL アシスタントは、最初に一致するカラムを使用して結合テーブルを作成します。一致するカラムが見つからない場合は、自動的に結合は生成されません。この場合は、検索条件機能を使用して結合を指定できます。
この機能は、SELECT クエリーのみで使用可能です。
ここでは、いくつかの OpenESQL アシスタントの機能とクエリーの作成を拡張する推奨処理を説明します。
OpenESQL アシスタントの [詳細] タブは、テーブルに含まれるカラムの詳細情報を表示します。[詳細] タブには、選択されたテーブルの次に示すカラムの内容が表示されます。
テーブルの各カラム名。各カラム名の前に、別名が付くことに注意してください。たとえば、テーブルの CustID という名前は、A.CustID のように「カラム名」に表示されます。「カラム名」の左横にあるチェックボックスがチェックされている場合は、現在そのカラムが選択されていることを示します。
カラムのデータ型。このデータ型は、接続するデータソースで使用します。カラムのデータ型は、そのカラムの値をデータソースと受け渡しするホスト変数の COBOL PICTURE 句で指定するデータ形式と一致する必要があります。
OpenESQL アシスタントを使用して、現在のディレクトリに tablename.cpy というコピーファイルを生成できます。このコピーファイルでは、カラムのデータ型を使用して生成されたCOBOL PICTURE 句と一致する必要なホスト変数がすべて宣言されます。詳細は、『補助コード』の節を参照してください。
数字カラムの総桁数またはテキストカラムのカラム長。
カラムの数値を丸める桁数。
カラムについて生成されたホスト変数の値。ホスト変数名は、次の形式で生成されます。
:<table-name>-<column-name>
カラムについて生成されたインジケータ変数の値。インジケータ変数名は、次の形式で生成されます。
:<table-name>-<column-name>-NULL
データソースから接続を解除すると、OpenESQL は現在のクエリーを破棄します。他のデータソースへ接続する前に、現在のデータソースの接続を解除する必要があります。
クエリーを終了すると、OpenESQL は生成されたコードは破棄され、新規クエリーを作成できます。
OpenESQL アシスタントで作成されるほとんどのクエリーは、1 つのテーブルのみにアクセスします。クエリーからテーブルを削除すると、OpenESQL はクエリーを閉じて、作成されたコードは失われます。ただし、1 つ以上のテーブルを結合する SELECT クエリーを作成した場合は、クエリーを閉じずに安全にテーブルを削除できます。SELECT クエリーからテーブルの削除を行うと、削除を確認するダイアログが表示されます。確認後に、OpenESQL はクエリーからテーブルに関係する生成されたコードを削除します。また、テーブルに属するカラムに関係するすべてのコードも削除されます。
OpenESQL アシスタントでは、配列取り込みのためのコードは直接生成されません。ただし、OpenESQL アシスタントで生成された SELECT (カーソル) コードを変更し、配列取り込みを処理できます。
プログラムコードで動作させる前に、OpenESQL アシスタントでクエリーをテストできます。これを行うには、OpenESQL アシスタントからクエリーを実行します。すべての SELECT 文の結果は、[実行結果] タブに自動的に表示されます。他のクエリーの型は、メッセージボックスに次に示す情報が表示されます。
クエリーが正しく実行されるために、追加の指定が必要になる場合があります。OpenESQL アシスタントがコードを実行できない場合は、正しくするように求められます。
注:OpenESQL アシスタントでクエリーを実行すると、データベースに対して UPDATE 文、INSERT 文、および DELETE 文が実行され、内容が変更されます。
作成した SQL クエリーに問題がない場合には、COBOL プログラムに追加できます。
OpenESQL で生成された SQL クエリーは、COBOL プログラムから正しく実行されるために、クエリーを除く追加のコードが必要になる場合があります。たとえば、DB2 UDB でデータベースへアクセスする SQL クエリーを正常に実行するには、データソースへ接続する CONNECT 文を挿入する必要があります。クエリーを埋め込むと、OpenESQL アシスタントで補助コードを生成して埋め込めます。
OpenESQL アシスタントは、次に示す EXEC SQL 補助コードを生成できます。
現在のデータソース接続に関する情報を基に CONNECT 文を自動生成します。
INCLUDE 文を自動生成し、プログラムに SQL 通信領域 (SQLCA) を追加します。
選択した各テーブルに対して、必要なホスト変数宣言をすべて含むコピーファイルが生成されます。OpenESQL アシスタントでは、INCLUDE 文を自動生成し、プログラムに必要なコピーファイルを追加することができます。
DISCONNECT 文を自動生成し、現在のデータソースとの接続を解除します。
COMMIT 文を自動生成し、直前の SQL 文で実行されたデータソースへの変更をコミットします。
ROLLBACK 文を自動生成し、直前の SQL 文 (または複数の SQL 文) で実行されたデータソースへの変更をロールバックします。
INCLUDE SQLCA、CONNECT、および DISCONNECT SQL 文を含むスケルトンの SQL プログラムと、デフォルトの SQL エラールーチンを自動生成します。
SQL クエリーを埋め込む方法と同じように、補助コードを埋め込みます。
ここでは、ストアドプロシージャの生成方法とOpenESQL アシスタントを使用してストアドプロシージャをテストする方法を説明します。
注:ストアドプロシージャ内には複数のタイプの SQL 文を記述できます。OpenESQL アシスタントでは、複数のタイプの SQL 文をもつストアドプロシージャを生成できません。そのため、これを行うには、Microsoft が提供しているツールなどを使用します。
OpenESQL アシスタントは、簡単なストアドプロシージャと、これらのストアドプロシージャを呼び出すために必要な COBOL コードの生成方法をすばやく理解するために提供されています。
Microsoft は、ストアドプロシージャを作成、編集、およびテストするツールを提供しています。プログラマは、COBOL クライアントプログラムからこれらのストアドプロシージャを呼び出すコードを生成する必要があります。OpenESQL アシスタントは、このプロセスをより簡単に行えます。
Microsoft SQL Server データソースを使用している場合は、OpenESQL アシスタントで、クエリーをストアドプロシージャとして生成するオプションを使用できます。このオプションを使用すると、ストアドプロシージャおよび、そのプロシージャを呼び出すクライアントコードを作成する 2 つの SQL 文を生成します。
OpenESQL アシスタントでは、ストアドプロシージャを削除し、作成する 2 つの SQL 文を生成します。これらの SQL 文は 1 回のみ実行する必要があるため、通常はサーバプログラムに記述されます。
OpenESQL アシスタントでは、クライアントプログラムに記述するコードも生成し、ストアドプロシージャを呼び出します。選択するクエリーの型によっては、ストアドプロシージャを呼び出す DECLARE CURSOR 文や SQL CALL 文のみを生成することがあります。
ストアドプロシージャクエリーを作成した後に、他のクエリーをテストした方法と同じように、ストアドプロシージャクエリーをテストできます。ただし、OpenESQL アシスタントでは、ストアドプロシージャ用に複数の SQL 文が作成されるので、複数回クエリーを実行する必要があります。クエリーが実行されるたびに、次の SQL 文が実行されます。
クエリーを最初に実行するときに、DROP PROCEDURE 文が実行され、次のメッセージが表示されます。
ストアドプロシージャ 'spname' が存在していないため削除できません。
このメッセージは意図的なものであり、DROP PROCEDURE を複数回実行すると、異なるメッセージが表示されます。
次にクエリーを実行すると、CREATE PROCEDURE 文が実行されます。文の実行が成功したことを示すメッセージが表示されます。
定数値が必要な検索条件をもつストアドプロシージャの CALL 文を実行する場合は、定数値を入力するよう求められます。
すべての SQL 文が実行されると、[実行結果] タブに結果が表示されます。
正しい結果になるまで、この処理を繰り返します。
この方法は、プログラムへ標準的な SQL クエリーを埋め込む方法と似ています。
OpenESQL アシスタントでは、クライアントプログラムとサーバプログラムの両方に文が生成されます。不要な文は削除できます。プログラムがクライアントプログラムである場合は、DROP PROCEDURE 文と CREATE PROCEDURE 文は必要ありません。
注:前述の方法でクエリーをテストする場合は、ストアドプロシージャがすでに作成されているため、DROP PROCEDURE 文または CREATE PROCEDURE 文を実行する必要はありません。ストアドプロシージャがまだ作成されていない場合は、SQL COMMIT 文または SQL(AUTOCOMMIT) 指令を、CREATE PROCEDURE を実行するプログラムに追加します。この方法を実行しないと、ストアドプロシージャはデータソースに保存されません。