ユーザーガイド > プロシージャ > SQLスクリプトの操作 > パイプとカーソルの使用
 
パイプとカーソルの使用
パイプとカーソルは、個別または組み合わせて使用することで、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