----
⌣''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]''
----

* 配列の引数を渡す方法 [#zcd125f4]
前回の記事「[[複数の引数を渡す方法>PL/pgSQL/複数の引数を渡す方法]]」では、ファンクションに2つの引数を渡す方法を学びました。~
今回はファンクションに配列の引数を渡すサンプルを記します。

#contents
#htmlinsertpcsp(db-top.html,db-sp.html)

* お約束 [#p68aa961]
当サイトに記載されている会社名、製品名などは一般に各社または団体の商標または登録商標です。~
当サイトの資料により直接的および間接的障害が生じても一切責任を負いませんので、あらかじめご了承ください。~
自己責任のもとで本資料をご利用ください。

* SQLで配列の記述方法 [#vd27873a]
以下のように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配列関数は、配列を行集合に展開します。

* 配列の引数を渡すサンプル [#f40136f6]
PL/pgSQLで配列の引数を渡すサンプルコードを記します。~
引数で渡したintの配列の値を足し算し結果をクエリーに表示します。~
(sumでも同様のことができますが、PL/pgSQL入門という事でご了承くださいませ。)
#ref(aryarg.sql)
 -- 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の配列を渡し、足し算を行いクエリー結果として合計値を返却します。


* ファンクションの登録および実行 [#gd900684]
&ref(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に関しては、別途記事を公開しています。

* ファンクションの削除 [#fd9c3ce0]
psqlフロントエンドから直接DROPしてみます。
 sakuradb=> DROP FUNCTION aryarg(num int[]);
 DROP FUNCTION
 sakuradb=>

* まとめ [#p375b926]
+ ARRAY[foo,bar,hoge]のようにすれば、配列を渡すことができる。
+ この記事では、intの配列int[]としましたが、text[]のようにすれば、文字列の配列なども可能である。

----
⌣''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]''

#htmlinsertpcsp(db-btm.html,db-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS