ストアドでINSERT文を作る
単純なSQLでもできるけど、練習のためストアドで実行する。
やりたいこと
USERテーブルのレコードを2倍にするuser_idがプライマリーキー(一意制約)なので、重複しないように値を入れて、レコードを倍にしていく。
INSERT前のデータ
書き方
USERテーブルのレコードを2倍にするuser_idがプライマリーキー(一意制約)なので、重複しないように気を付ける。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
CREATE OR REPLACE FUNCTION USER_INSERT () RETURNS text AS $body$ DECLARE cnt integer := (select max(user_id) from user_table); rec RECORD; user_cursor cursor for select user_name,dept_no,start_date,end_date from user_table; BEGIN open user_cursor; LOOP cnt := cnt+1; FETCH user_cursor INTO rec; IF NOT FOUND THEN EXIT; END IF; insert into user_table (user_id,user_name,dept_no,start_date,end_date) values(cnt,rec.user_name,rec.dept_no,rec.start_date,rec.end_date ); END LOOP; CLOSE user_cursor; return 'FINISH!'; END; $body$ LANGUAGE plpgsql; select * from USER_INSERT (); |
変数「cnt」 に user_id の最大番号を代入し、INSERTの前に+1することで、値の重複を防いでいる。
「user_cursor」 のレコードを 1行ずつ 「rec」 に入れて、すべてのレコードを取り出すまで処理をLOOPさせる。
実行結果
次回は制御文に取り組みたい
今回は以上。次回は制御文を学んで記録する。
コメント