パイプとカーソルの使用
パイプとカーソルは、個別または組み合わせて使用することで、TDV 内でさまざまな課題を解決できます。SQL で条件記述が難しい行をなくす、XML JMS メッセージの XSLT 変換からフラット化された行を返すなど、複雑なデータに対して前処理を行う必要がある場合に有用です。
パイプ
パイプは、データを多くのソースから挿入できるカーソルです。TDV は、パイプをプロシージャの出力パラメーターとしてのみ認識します。INSERT ステートメントを使用して、データをパイプに取り込んで処理することができます。たとえば次のとおりです。
PROCEDURE q(OUT name VARCHAR)
BEGIN
DECLARE c CURSOR (name VARCHAR);
CALL /shared/rtnPipe(c);
FETCH c INTO name;
END
カーソル
TDV のカーソルは、単一のデータ ソースから返される結果セットです。カーソルは、行セット内の 1行へのポインターと考えることができます。カーソルは一度に 1行しか参照できませんが、必要に応じて結果セットの他の行に移動できます。
カーソルを使用して、個々の行で複雑なロジックを実行できます。
SQL プロシージャでカーソルを使用するには、以下を行う必要があります。
| • | 結果セットを定義するカーソルを宣言します。 |
| • | カーソルを開いて結果セットを確立します。 |
| • | 一度に 1 行ずつ、カーソルから必要に応じてデータをローカル変数にフェッチします。 |
| • | 完了したらカーソルを閉じます。 |
静的カーソルの例
DECLARE <cursor-name> CURSOR FOR <select>;
動的カーソルの例
PROCEDURE p (OUT p_name VARCHAR)
BEGIN
DECLARE c CURSOR (name VARCHAR); OPEN c FOR SELECT name FROM /shared/T;
FETCH c INTO p_name;
CLOSE c;
END
動的カーソルを再度開くことができるのは、以下の場合です。
| • | 同じクエリまたは別のクエリで |
| • | クローズ後のみ |
PROCEDURE p (OUT p_name VARCHAR)
BEGIN
DECLARE c CURSOR (name VARCHAR);
OPEN c FOR SELECT name FROM /shared/T;
CLOSE c;
-- Reopen with same query
OPEN c;
CLOSE c;
-- Reopen with new query
OPEN c FOR SELECT name FROM /shared/U WHERE birthdate > ‘2000-01-01’;
CLOSE c;
END