備忘録

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

複数行の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;
/

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://ncdkayak.blog.fc2.com/tb.php/26-0768ae82
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。