このセクションでは、SOAtest/Virtualize で DB ツールを設定して適用する方法について説明します。 DB ツールを使用すると、 SOAtest で SQL 文を検証するためにデータベースにクエリーを送信できます。このセクションの内容:

DB ツールとは

このツールは、ユーザーが指定したデータベースにクエリーを送信します。クエリーから結果を受け取ると、SOAtest/Virtualize は結果を XML 形式にします。出力先に XML ベースのツール (XML Data Bank、 XSLT ツールなど) を連結できます。

DB ツールは、「PL/SQL とストアド プロシージャのサポート」で説明するように、PL/SQL を使用するなどして、ストアド プロシージャを呼び出すために使用できます。

Traffic Viewer は自動的に DB ツールに連結されます。 そのため、パラメータライズ、変数などを考慮して、サーバーへ送信された問い合わせの最終結果を参照できます 。レスポンスでは、JDBC 関連のオブジェクトを確認できます。

DB ツールの構成

以下で詳しく説明するように、DB ツールで構成できるオプションがいくつかあります。

全般

[接続] タブ

DB ツールをデータベースに接続する方法はいくつかあります。デフォルトでは、ファイルを使用することで、またはデータベース ドライバー設定を指定することで、ローカル接続を構成できます。 

[ファイル] オプションを有効化し、ファイル システムまたはワークスペースの接続構成ファイルを探します。

[ローカル] オプションを有効化し、使用するデータベースの [ドライバー]、[URL]、[ユーザー名]、および [パスワード] を指定します。 データベース接続構成の詳細については「データベース構成パラメーター (SOAtest) 」または「データベース構成パラメーター (Virtualize) 」を参照してください。データベースを 1 度しか使わず、他のコマンドを待機する必要がない場合、[接続を閉じる] オプションを有効化して接続を閉じることもできます。すべての DB ツールが 1 つの接続を共有できるよう、複数の DB ツールを同じ DB に接続することを考えている場合、このオプションを有効化しないでください。DB ツールごとに新しく接続を確立するたびにリソースを消費するのに対して、接続を共有することはリソース効率を改善します。

テスト スイートにデータベース アカウントの共有プロパティがある場合、[ローカル設定を使用]、[共有プロパティを使用]、[両方を使用] を使って接続できます。これらのオプションを使用すると、関連する DB ツール内の設定だけ、共有のグローバル データベース アカウントからの設定 (グローバル プロパティとしてテスト スイートに追加したグローバル データベースの設定) だけ、あるいはその両方を使用できます。 共有プロパティの定義方法とファイルへのエクスポート方法の詳細については、「グローバル設定の追加 (SOAtest)」 または「グローバル設定の追加 (Virtualize)」 を参照してください。

Traffic ツールはコネクション ID を表示します。この ID をチェックすることで、DB ツールが同じ接続設定を使用していることを確認できます。

[SQL クエリー] タブ

ステートメント セパレーターの動作

[セミコロン (;) でステートメントを分割] オプションを使用すると、ツールはセミコロンで SQL クエリー エディターのコンテンツを分割します。[マジック トークン (通常、ストアド プロシージャで使用される) でステートメントを分割] オプションを使用すると、ツールは指定したマジック トークン文字列で SQL クエリー エディターのコンテンツを分割します。マジック トークンとは、行の先頭から始まり、マジック トークンだけからなる文字列です (トークンの後ろに任意の空白を挿入できます)。

選択したセパレーターは、セミコロンの場合もマジック トークンの場合も、サーバーには送信されません。DB ツールは、それぞれの分割された部分文字列を別々の JDBC コールとして、同じ接続を使用してサーバーへ送信します。つまり、 1 つの DB ツールで複数のクエリーを使用することが可能です。SQL サーバーの DJBC ドライバーによっては、同じ JDBC コールで複数のクエリーを送信することが可能です。

1 つの DB ツールで複数のステートメントを使用する場合は、マジック トークンで分割する必要があります (DB2 と Oracle に制限があるためです)。たとえば、マジック トークン "GO"(デフォルト) で分割する次のクエリー文字列を入力する場合、それぞれ 2 つの SQL 文を含む 2 つの JDBC コールが送信されます。

create table pr88467(dkey int, svalue varchar(30));
insert into pr88467 (dkey,svalue) values (1,"A"),(2,"B"),(3,"C"); 
GO
select * from pr88467;
drop table pr88467;

ストアド プロシージャを作成したり呼び出したりするとき、マジック トークンによる分割を必ず使用し、ストアド プロシージャはそのグループ内で唯一のステートメントである必要があります。このことは、プロシージャを作成するときに重要です。なぜならプロシージャは通常はセミコロンを含んでおり、[セミコロン (’;’) でステートメントを分割] オプションを使用すると、それも削除されてしまうためです。また、プロシージャを呼び出すとき、呼び出すプロシージャが分割されている必要があります。なぜなら、DB ツールはそれらを検出し、 CallableStatement として、任意の出力パラメーターと一緒に、 JDBC ドライバーへ送信できる必要があるからです。例:

create or replace function pr83185_func2(s NUMBER) return SYS_REFCURSOR as mycursor SYS_REFCURSOR;
begin
open mycursor for select * from EMPLOYEES where SALARY > s;
return mycursor;
end;
GO
? = call pr83185_func2(15000)

上記のステートメントは、 2 つの JDBC コールを発行します。

[オプション] タブ

単一結果フォーマット:

<updatedRows>0</updatedRows>

複数結果フォーマット:

<results>
	<updatedRows>0</updatedRows>
</results> 

複数結果フォーマットと複数の結果:  

<results>
	<updatedRows>0</updatedRows>
	<updatedRows>0</updatedRows>
	<updatedRows>0</updatedRows>
</results>

ストアド プロシージャの JDBC OUT パラメーター型

[ストアド プロシージャの JDBC OUT パラメーター型] フィールドは、OUT パラメーターを取得する、または値を返す、ストアド プロシージャや関数を呼び出すことができます。通常の SQL クエリーや、OUT パラメーターを持たないストアド プロシージャを実行する場合は、このフィールドは空にします。

フィールドにリストするデータ型は、スペースまたはカンマで区切ることができ、型名は、java.sql.Types クラスのフィールド名に対応するか (http://docs.oracle.com/javase/8/docs/api/java/sql/Types.html)、または oracle.jdbc.OracleTypes クラスのフィールドに対応します (http://download.oracle.com/docs/cd/A97329_03/web.902/q20224/oracle/jdbc/OracleTypes.html)。見つからなかった場合は、oracle.jdbc.OracleTypes の中を検索します。ユーザーが提供した型名は JDBC CallableStatement.registerOutParameter() に渡されます。

Oracle データ型の拡張

Oracle データベースは、さまざまな独自データ型に対応しています。 データベースがこれらのデータ型を利用している場合、JDBC classpath に適切な jar を追加する必要があります (設定パネルの [Parasoft] > [設定] > [JDBC ドライバー] )。たとえば、 Oracle は oracle.xdb.XMLType に対応しています。これは、特定の Oracle アプリケーションに付属している xdb.jar と xmlparserv2.jar で利用可能です。XML Developer's Kit (XDK) Java からも利用可能です。XML Developer's Kit (XDK) Java を入手するには、 http://www.oracle.com で Downloads をクリックし、XML Developer Kit のリンクをクリックします。任意のプラットフォームを選択してキットをダウンロードします。このキットはその他のファイルも含んでいますが、上に記載した 2 ファイルだけ必要です。  

両方の jar が、設定パネルの [Parasoft] > [設定] > [Parasoft] > [JDBC ドライバー] で JDBC classpath に追加される必要があります。

PL/SQL とストアド プロシージャのサポート

ストアド プロシージャは今日のシステムのビジネス ロジックを推進しているため、システムの他のコンポーネントのように、ストアド プロシージャも検証する必要があります。Oracle データベースへのプロシージャ (関数、パッケージ、トリガー) も格納できます。これらのプロシージャは繰り返し呼び出すことができます。頻繁に実行する必要がある複雑なクエリーにとっては特に有効です。 

Oracle データベースでは、 PL/SQL (Procedural Language/Structured Query Language) という、Oracle 独自の SQL データベース用の手続き型拡張言語が使用されます。他の SQL データベース管理システムは、似通った SQL 言語の拡張機能を提供しています。

次のイメージは、ストアド プロシージャを作成または置換するために DB ツールのクエリーを [SQL クエリー] タブで構成する方法のサンプルです。

次のイメージは、ストアド プロシージャを呼び出すための、 DB ツールのクエリーの構成方法のサンプルです。

Traffic Viewer でクエリー結果を確認

Traffic Viewer ツールが DB ツールに連結され、DB ツールで SELECT 文が実行されたとき、Traffic Viewer ツールのレスポンス エリアに DB クエリーの結果を含むテーブルが表示されます。

DB ツールが複数の SQL 文を実行し、 XML レスポンスが複数の結果セットを含む場合、メニューを使用してどの結果セットのトラフィックを表示するかを決めることができます。メニューは、複数の結果セットがある場合にテーブルの上部に表示されます。

以下の図では、Traffic Viewer ツールは結果セット 2 の結果を表示しています。