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)