技術ネタ: 2007年6月アーカイブ

OracleでSQLだけではスマートに解決できない処理が必要になった。
ということで、初めてPLSQLに挑戦。

内容としては、SELECT文の結果セットを基にして、
UPDATE文をレコード数分だけ繰り返すという簡単な内容
忘れないようにメモ代わりに作成例を記載。

---------------------------------------------
declare
/* SELECT文の結果セットをカーソル(変数)に代入 */
cursor c_result is select user_id, data from sample_tbl;

/* カーソル用の変数定義 */
record c_result%rowtype;


begin
open c_result;
loop
/* カーソルからレコードを1行取り出す */
fetch c_result into record;

/* 値を確認するためのDEBUG */
dbms_output.put_line('user_id = ' || record.user_id );
dbms_output.put_line('data = ' || record.data );

/* UPDATE文 */
update target_tbl TRGT set TRGT.data = record.data
where TRGT.user_id = record.cust_id;

exit when c_result%notfound;

end loop;
close c_result;
end;