パイプとカーソルの使用
パイプとカーソルは、個別または組み合わせて使用することで、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