NULLを渡すと処理を実行せずにNULLを返す testdb=# \d Table func1.sample

testdb=# \df
                            List of functions
 Schema |      Name       | Result data type | Argument data types | Type 
--------+-----------------+------------------+---------------------+------
 func1  | sample_func     | SETOF integer    | text                | func
 public | log_time_writer | trigger          |                     | func
(2 rows)

CREATE FUNCTIONは関数を定義するコマンドです。
書式は以下の通りです。

CREATE [OR REPLACE] FUNCTION 関数名([引数の型]) RETURNS [SETOF] 戻り値の型 AS $$ 処理内容 $$ LANGUAGE 使用言語 [引数NULLの挙動] [実行権限];

TEXT型の引数を持つsample_func関数が定義されています。すでに同じ関数名(かつ同じ引数の型)が存在している場合は置き換えられます。
SETOFオプションが設定されているため、戻り値が複数ある場合は複数件返されます。また、STRICTオプションが設定されているため、引数にNULLが含まれる場合は処理を実行せずにNULLを返します。

testdb=# SELECT * FROM sample ORDER BY id;
 id | cutomer | staff 
----+---------+-------
  1 | 顧客A   | 佐藤
  4 | 顧客B   | 佐藤
  6 | 顧客D   | 渡辺
(3 rows)
testdb=# SELECT sample_func(NULL);
 sample_func 
-------------
(0 rows)

testdb=# SELECT sample_func('佐藤');
 sample_func 
-------------
           1
           4
(2 rows)

この記事が気に入ったらサポートをしてみませんか?