【PostgreSQL】SQLの結果を変数に格納する

PostgreSQL構文

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;

 

 

 

 

関数で使う例(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;