複数行の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でもRETURNI…

続きを読む

元表TRUNCATE時にマテビューログもTRUNCATE

truncate table テーブル名 purge MATERIALIZED VIEW log; でマテビューログ MLOG$テーブル名 がTRUNCATEされると思ったが、SQL Traceを見ると見事 DELETE をしている。 昔の書き方の SNAPSHOT にしたらひょっとしたらTRUNCATEされると思ったがだめだった。 truncate table テーブル名 purge SNAPSHOT log; DBMS_MVIEW にもそれらしいプロシージャ無いので、元表 TRUNCATE 後に MLOG$テーブル名 を直接 TRUNCATE するしかなさそう。

続きを読む

長いテーブル名のマテビューログはつくれるのか?

マテリアライズドビュー・ログのテーブル名はOracleが勝手につけている。 MLOG$_<元のテーブル名> という名前なので、30文字中6文字を使っている。25文字以上のテーブルにはマテビューログは作れないの?なんて思ったので試してみた。 結果は、実質問題なし。 長い場合は、元のテーブル名を途中でちょん切って連番でつけている。 MLOG$_<元のテーブル名の前方20文字> + 連番(最大9999と思う) なので、普通そんな前方一致で合致するテーブルをそんなに作らんので問題ない。 最後まで使い切ったらどんなエラーがでるか見ようと思ったが、 9600テーブル超えたあたり…

続きを読む