Open4
PostgreSQLで関数を作りたい
PostgreSQLの関数を作るとき、 CREATE OR REPLACE FUNCTION
でいきなり関数を作ってしまうと、記述ミスがあったときに都度 DROP FUNCTION
を実行しなければならず、かなり面倒くさい。
ということで、関数を作るまでの流れを確立したいのでスクラップに書き殴っていく。
関数を作成せずに関数っぽい作りで記述する方法
DO $$
DECLARE
-- 変数があればここに書いていく
BEGIN
-- ここに実行したいSQL文を書いていく
END $$;
これが基本形。
DECLARE
とは変数の宣言をするところ。
DECLARE の使い方
JSなどとは異なり「変数の宣言」と「値の格納」は別々にする必要がある。
面倒だがそういうものなので仕方がない。
▼ select * from hoge
で取得した値を全部変数に格納したい場合
DO $$
DECLARE -- 2パターン記述してますが、どちらか一方でいいです。
v_hoge hoge; -- テーブル名「hoge」のデータを格納するならこっちの型
v_join_hoge record; -- 色んなテーブルのデータが入りそうならrecord型
BEGIN
-- INTOによって変数への格納を実行している
SELECT * INTO v_hoge from hoge where id = 1;
END $$;
▼ 指定した値だけ変数に入れたいとき
DO $$
DECLARE
v_public_id uuid; -- uuidを変数に入れたい
BEGIN
SELECT public_id INTO v_public_id from hoge where id = 1;
END $$;
型が書かれた一覧はないのか?
あります。
こちらのページの「表 8-1. データ型」の「名称」の箇所に書かれている箇所を見ればOKだと思います。この型は関数を作った後にデータを返すために RETURN QUERY
をした値を RETURNS TABLE()
で返却値と型を指定する際にも使用します。
変数の中身を確認したい
変数の中身を確認するのも手間だ。
DO $$
DECLARE
v_hoge hoge;
BEGIN
SELECT * INTO v_hoge from hoge where id = 1;
RAISE NOTICE '結果: %', v_hoge;
END $$;
RAISE NOTICE '結果: %', v_hoge;
この記述によって変数の中身を確認できる。 %
はここに結果を出力してくれという命令。 ,
の右の v_hoge
はどの変数を %
にぶち込むかを指定している。