【PostgreSQL】SQLの結果を変数に格納する
SQLの結果を変数に格納する
関数をつくる際、select結果を変数に代入し、その後の処理に使うケースが結構あると思います。
その場合の書き方は、次のようになります。
--「列名」の値を変数へ代入する
select 列名 into 変数名 from テーブル名 where 条件文;
--実例:m_schoolのschool_nameを変数sch_nmに入れる
select school_name into sch_nm from m_school where school_code = 'a';
selectで取得した1行丸ごと変数に入れたいときも、書き方は変わりません。
が、結果を格納する型に注意する必要があります(後ほど説明)。
--「select *」で取得した結果を変数に入れる
select * into 変数名 from テーブル名 where 条件文;
--もちろん「select *」ではなく、列名指定でも同じ
--一列ごとintoではなく、まとめてinto 変数名で変数に結果を格納する
select 列名 , 列名 , ・・・ into 変数名 from テーブル名 where 条件文;
--実例:m_schoolの行を変数rec_schoolに入れる
--下の方にある「関数で使う例(1行を取得して変数に格納する)」がわかりやすいと思います
select * into rec_school from m_school where school_code = 'a';
あわせて読みたい
この記事は1行取得した結果を変数に入れる方法です。
複数行の結果を取得して扱う方法はこちらで紹介しています。
関数で使う例(1列を取得して変数に格納する)
上で紹介した構文を使った、実際の関数での使用例です。
CREATE OR REPLACE FUNCTION test()
RETURNS boolean
LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$
declare
--selectの結果を格納する変数を宣言
sch_nm character(10);
begin
--m_schoolのschool_nameを変数sch_nmに入れる
select school_name into sch_nm from m_school where school_code = 'a';
--動作確認用(変数の中身を表示する)
raise info '%' , sch_nm;
-- (略)
end;
$BODY$;
ALTER FUNCTION public.test()
OWNER TO postgres;
あわせて読みたい
関数の終わりにあるraiseは、変数の中を途中で確認するために使っています。
詳しくはこちら。
関数で使う例(1行を取得して変数に格納する)
上で紹介した構文を使った、実際の関数での使用例です。
取得した行丸ごと、変数に入れるにはrecord型で変数宣言すると便利です。
CREATE OR REPLACE FUNCTION test2()
RETURNS boolean
LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$
declare
--selectの結果を格納する変数を宣言(record型で宣言)
rec_school record;
begin
--実例:m_schoolの行を変数rec_schoolに入れる
select * into rec_school from m_school where school_code = 'a';
--動作確認用(変数の中身を表示する)
raise info '%' , rec_school.school_name;
-- (略)
end;
$BODY$;
ALTER FUNCTION public.test2()
OWNER TO postgres;