このセクションでは、SOAtest/Virtualize で DB ツールを設定して適用する方法について説明します。DB ツールを使用すると、 SOAtest で SQL 文を検証するためにデータベースにクエリーを送信できます。
このセクションの内容:
このツールは、ユーザーが指定したデータベースにクエリーを送信し、問い合わせ結果を受け取ります。 SOAtest/Virtualize は結果を XML 形式にするので、出力先に XML ベースのツール (XML Data Bank、 XSLT ツールなど) を連結できます。
DB ツールは、「PL/SQL とストアド プロシージャのサポート」で説明するように、PL/SQL を使用するなどして、ストアド プロシージャを呼び出すために使用できます。
Traffic Viewer は自動的に DB ツールに連結されます。 そのため、パラメータライズ、変数などを考慮して、サーバーへ送信された問い合わせの最終結果を参照できます 。レスポンスでは、JDBC 関連のオブジェクトを確認できます。
DB ツールでは、次のオプションを設定できます。
データ ソース: 値を提供するために使用するデータ ソースを指定します。このオプションは、 テスト スイートにデータ ソースが追加されている場合だけ利用可能です。
DB ツールをデータベースに接続する方法はいくつかあります。デフォルトでは、ファイルを使用することで、またはデータベース ドライバー設定を指定することで、ローカル接続を構成できます。
[ファイル] オプションを有効化し、ファイル システムまたはワークスペースの接続構成ファイルを探します。
[ローカル] オプションを有効化し、使用するデータベースの [ドライバー、[URL]、[ユーザー名]、および [パスワード] を指定します。データベース接続構成の詳細については次を参照してください: データベース構成パラメーター (SOAtest) または データベース構成パラメーター (Virtualize)
データベースを 1 度しか使わず、他のコマンドを待機する必要がない場合、[接続を閉じる] オプションを有効化して接続を閉じることもできます。すべての DB ツールが 1 つの接続を共有できるよう、複数の DB ツールを同じ DB に接続することを考えている場合、このオプションを有効化しないでください。DB ツールごとに新しく接続を確立するたびにリソースを消費するのに対して、接続を共有することはリソース効率を改善します。
テスト スイートにデータベース アカウントの共有プロパティがある場合、[ローカル設定を使用]、[共有プロパティを使用]、[両方を使用] を使って接続できます。これらのオプションを使用すると、関連する DB ツール内の設定だけ、共有のグローバル データベース アカウントからの設定 (グローバル プロパティとしてテスト スイートに追加したグローバル データベースの設定) だけ、あるいはその両方を使用できます。共有プロパティの定義方法とファイルへのエクスポート方法の詳細については、次を参照してください: グローバル設定の追加 (SOAtest) または グローバル設定の追加 (Virtualize)
Traffic ツールはコネクション ID を表示します。この ID をチェックすることで、DB ツールが同じ接続設定を使用していることを確認できます。 |
${column}
を入力し、[データ ソース] ドロップダウン メニューからデータ ソースを選択することで、粒度の細かいパラメータライズを行うことができます。 実行時に、ツールは指定のデータ ソースの列をルックアップします。どんな文字列の値でもパラメータライズできます。SELECT *
FROM People
WHERE state = ’${States}’
実行するとき、 DB ツールは次のクエリーを作成します。
SELECT *
FROM People
WHERE state = "CA"
SELECT *
FROM People
WHERE state = "NY"
SELECT *
FROM People
WHERE state = "WA"
書き込み可能なデータ ソースの値に接続する場合は、次を使用します。
${<Data Source Name>: <Column Name>}
コロン (:) と <Column Name> の間にはスペースが必要です。
XML Data Bank の値に接続する場合は、次を使用します。
${<Data Source Column Name mapped to Selected Element>}
[セミコロン (;) でステートメントを分割] オプションを使用すると、ツールはセミコロンで 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 コールを発行します。
クエリー実行後にデータベースへの変更をロールバック: ロールバックを有効にするかどうかを指定します。このオプションがオンにすると、変更は直ちに取り消されます。
自動コミット モードはロールバック モードを無効にします。自動コミット モードがオンの場合、ロールバック モードは自動的に無効になります。データベースにツールの存続時間中だけ見ることができる変更を行う場合は、自動コミット モードをオフにします。ツールの使用中に変更を取り消す場合は、ロールバック オプションを使用します。 |
列名と値を分離: SOAtest が値から列名を分割するべきかどうかを決定します。人間が読むことが難しい出力を作成することになるので、デフォルトではオフになっています。
単一結果フォーマット:
<updatedRows>0</updatedRows> |
複数結果フォーマット:
<results> <updatedRows>0</updatedRows> </results> |
複数結果フォーマットと複数の結果:
<results> <updatedRows>0</updatedRows> <updatedRows>0</updatedRows> <updatedRows>0</updatedRows> </results> |
[ストアド プロシージャの 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)。 はまず、 ユーザーが提供した型を java.sql.Types の中を検索します。見つからなかった場合は、oracle.jdbc.OracleTypes の中を検索します。ユーザーが提供した型名は JDBC CallableStatement.registerOutParameter() に渡されます。
IN パラメーターを 4 つ取得するストアド プロシージャを呼び出すには、次を使用します。 CALL MYPROC(XMLTYPE('<hello>Some XML</hello>'), 55, 'character large object', 'some text')
CALL MYPROC(XMLTYPE('<hello>some XML</hello>'), ?, 'character large object', ?)
INTEGER, VARCHAR
?
= CALL MYFUNCTION(XMLTYPE('<hello>Some XML</hello>'), 'character large object', ?, 33, ?, ?, ?, ?)
VARCHAR, INTEGER, SYS.XMLTYPE, CLOB, VARCHAR, DATE
上と同じ関数を呼び出し、いくつかの IN パラメーターにデータ ソース値を使用する場合、次を使用します。 ?
= CALL MYFUNCTION(XMLTYPE('${My CML Content Columna name}'), 'character large object', ?, ${Column Name 2}, ?, ?, ?, ?)
通常の SQL クエリーでするように、 DB ツールは関数の戻り値や OUT パラメーターを XML にシリアライズします。これによって、ユーザーは実行結果を見たり、XML Assertor や XML Data Bank といった XML 検証/抽出 ツールを連結したりすることができます。
戻り値や OUT パラメーターのいずれかが CURSOR 型の場合、 SOAtest はそれを JDBC ResultSet として処理します。そして通常のクエリー結果 と同じように、全体的な結果の XML 内にネストされた XML へシリアライズします。
?
= CALL MYFUNC(15000)
CURSOR
Oracle データベースは、さまざまな独自データ型に対応しています。ユーザーのデータベースがこれらのデータ型を利用している場合、 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] > [JDBC ドライバー] で JDBC classpath に追加される必要があります。
ストアド プロシージャは今日のシステムのビジネス ロジックを推進しているため、システムの他のコンポーネントのように、ストアド プロシージャも検証する必要があります。SOAtest は Oracle データベースにプロシージャ (または関数、プロシージャ、パッケージ、トリガーなど) を格納できます。これらのプロシージャは繰り返し呼び出すことができます。頻繁に実行する必要がある複雑なクエリーにとっては特に有効です。
Oracle データベースでは、 PL/SQL (Procedural Language/Structured Query Language) という、Oracle 独自の SQL データベース用の手続き型拡張言語が使用されます。他の SQL データベース管理システムは、似通った SQL 言語の拡張機能を提供しています。
次のイメージは、ストアド プロシージャを作成または置換するために DB ツールのクエリーを [SQL クエリー] タブで構成する方法のサンプルです。
次のイメージは、ストアド プロシージャを呼び出すための、 DB ツールのクエリーの構成方法のサンプルです。
Traffic Viewer ツールが DB ツールに連結され、DB ツールで "SELECT" 文が実行されたとき、Traffic Viewer ツールのレスポンス エリアに DB クエリーの結果を含むテーブルが表示されます。
DB ツールが複数の SQL 文を実行し、 XML レスポンスが複数の結果セットを含む場合、コンボ ボックスを使用してどの結果セットのトラフィックを表示するかを決めることができます。コンボ ボックスは、複数の結果セットがある場合にテーブルの上部に表示されます。
以下の図では、Traffic Viewer ツールは結果セット 2 の結果を表示しています。