オプションの引数を使用して PL/pgSQL 関数を作成しようとしています。フィルター処理されたレコードのセット (指定されている場合) に基づいてクエリを実行し、それ以外の場合は、テーブル内のデータ セット全体に対してクエリを実行します。
例(疑似コード) :
CREATE OR REPLACE FUNCTION foofunc(param1 integer, param2 date, param2 date, optional_list_of_ids=[]) RETURNS SETOF RECORD AS $$
IF len(optional_list_of_ids) > 0 THEN
RETURN QUERY (SELECT * from foobar where f1=param1 AND f2=param2 AND id in optional_list_of_ids);
ELSE
RETURN QUERY (SELECT * from foobar where f1=param1 AND f2=param2);
ENDIF
$$ LANGUAGE SQL;
この機能を実装する正しい方法は何でしょうか?
余談ですが、そのような関数を別の外部関数で呼び出す方法を知りたいです。これは私が行う方法です-それは正しいですか、それともより良い方法がありますか?
CREATE FUNCTION foofuncwrapper(param1 integer, param2 date, param2 date) RETURNS SETOF RECORD AS $$
BEGIN
CREATE TABLE ids AS SELECT id from foobar where id < 100;
RETURN QUERY (SELECT * FROM foofunc(param1, param2, ids));
END
$$ LANGUAGE SQL