前回の記事「複数の引数を渡す方法」では、ファンクションに2つの引数を渡す方法を学びました。
今回はファンクションに配列の引数を渡すサンプルを記します。
当サイトに記載されている会社名、製品名などは一般に各社または団体の商標または登録商標です。
当サイトの資料により直接的および間接的障害が生じても一切責任を負いませんので、あらかじめご了承ください。
自己責任のもとで本資料をご利用ください。
以下のようにSQLで配列を記述することができます。
sakuradb=> SELECT * FROM unnest(ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); unnest -------- 1 2 3 4 5 6 7 8 9 10 (10 rows)
※unnest配列関数は、配列を行集合に展開します。
PL/pgSQLで配列の引数を渡すサンプルコードを記します。
引数で渡したintの配列の値を足し算し結果をクエリーに表示します。
(sumでも同様のことができますが、PL/pgSQL入門という事でご了承くださいませ。)
-- aryarg.sql CREATE OR REPLACE FUNCTION aryarg(num int[]) RETURNS int AS $$ DECLARE n int; t int := 0; BEGIN FOREACH n IN ARRAY num LOOP t := t + n; END LOOP; RETURN t; END $$ LANGUAGE plpgsql ;
上記のファンクションは、intの配列を渡し、足し算を行いクエリー結果として合計値を返却します。
aryarg.sqlを登録し実行します。
ユーザ名、ホスト、データベース名は皆さんの環境にあった値に替えてください。
sakura@cygwin ~$ psql -U sakura -h localhost -f aryarg.sql sakuradb Password for user sakura: CREATE FUNCTION
sakura@cygwin ~$ psql -U sakura -h localhost sakuradb Password for user sakura: psql (9.6.0, server 9.2.17) Type "help" for help. sakuradb=> select aryarg(ARRAY[1,2,3,4,5,6,7,8,9,10]) as sum; sum ----- 55 (1 row)
1から10までの合計値が返却されます。
尚、本サンプルに記述されているFOREACHに関しては、別途記事を公開しています。
psqlフロントエンドから直接DROPしてみます。
sakuradb=> DROP FUNCTION aryarg(num int[]); DROP FUNCTION sakuradb=>