※本記事は自学内容のアウトプットになります。
#関数
PL/SQLの特徴として、基本的な関数をSQL内で実行することができる点が挙げられる。
例えば
FOR文で一定の抽出処理をLOOPさせ、
抽出した内容をCSVなどに吐き出す際に
一行ずつ処理結果を吐き出す処理を作る場合
-- 宣言
DECLARE
-- 処理
BEGIN
FOR i IN 1..10 LOOP
IF (i IN (2, 4, 6, 8, 10)) THEN
DBMS_OUTPUT.PUT_LINE(i || '偶数');
ELSE
DBMS_OUTPUT.PUT_LINE(i || '奇数');
END IF;
END LOOP;
END;
といった具合にLOOPさせることかできる。この内容を組み込むと、処理の流れは以下のようになる。
BEGIN
--宣言部で抽出した結果を含むカーソル
OPEN CUR1;
--抽出件数を保存する宣言
cnt = 0;
-- 1件目
FETCH CUR1 INTO CUR1_SP;
/*
上記処理とカウント関数を用いて
ヘッダ行と明細行を使い分けることで
cnt + 1 = 1 のときに
ヘッダ行を出力
それ以降は明細行として出力
というような使い方も可能
*/
--繰り返し処理
LOOP
-- カーソルにデータがない場合LOOPを終了
IF CUR1%NOTFOUND THEN
EXIT;
END IF;
--表領域の表示
DBMS_OUTPUT.PUT_LINE(CUR1_SP.TABLESPACE_NAME);
/*
個人的によく使いのは別途ファイル出力用のファンクションを設け
そこに ファンクション(カウント数, CUR1_SP)
のような形で値を渡し、出力する方法
*/
FETCH CUR1 INTO CUR1_BK;
END LOOP;
--カーソルのCLOSE
CLOSE CUR1
上記の処理にCASE文などで条件分岐をさせ
より柔軟にデータを取得していくのが
一般的な業務上での使い方かと思う。
CASE WHEN '条件1'
THEN 結果
WHEN 条件2
THEN 結果
ELSE 結果
END;
と、条件式を駆使し、
SQL内で柔軟な抽出処理に対応することができる。