備忘録

複数行のRETURNING

RETURNING でINSERT/UPDATEした時の1行分のデータを取得できるのは知っていたが
複数行もBULK COLLECT INTOで取得できるそうだ。
SQLリファレンスのreturning_clause の説明を見ると集計関数をかますことも出来るみたい。
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 100
RETURNING SUM(salary) INTO :bnd1;


PL/SQL言語リファレンスのRETURNING INTO句 をみると、DELETEでもRETURNINGが使える。

更新した結果をもって、カーソルを開けると言う事なしなのに。
BULK COLLECTだと件数が多いとPGAがあふれてしまう。

海外サイトだがいいサンプルがあったのでリンク

マニュアルを見ていたらこんなのも見つけた。RECORDでそのまま更新できるらしい。
ROWってカラムがあったらどんな動きをするんでしょうね。RECORDは全部カラムがないといけないかも興味あり。
今度試してみようか。。
DECLARE
default_week schedule%ROWTYPE;
BEGIN
default_week.Mon := 'Day Off';
default_week.Tue := '0900-1800';
default_week.Wed := '0900-1800';
default_week.Thu := '0900-1800';
default_week.Fri := '0900-1800';
default_week.Sat := '0900-1800';
default_week.Sun := 'Day Off';

FOR i IN 1..3 LOOP
default_week.week := i;

UPDATE schedule
SET ROW = default_week
WHERE week = i;
END LOOP;
/
次のページ