PostgreSQL 関数の単一パラメータ複数値の受け渡し
PostgreSQL は、単一のパラメータを使用して関数に複数の値を渡す便利な方法を提供します。これは、VARIADIC パラメータを使用することで実現できます。
VARIADIC パラメータの構文は次のとおりです:
CREATE OR REPLACE FUNCTION 函数名(VARIADIC 参数数据类型)
VARIADIC
は、パラメーターが複数の値を受け入れることができることを示します。 参数数据类型
渡される値のデータ型を指定します。
次の関数は複数の整数値を受け入れます:
CREATE OR REPLACE FUNCTION test(VARIADIC int[]) RETURNS TABLE (job_id int, job_reference int, job_job_title text, job_status text) AS $$ BEGIN RETURN QUERY SELECT * FROM jobs WHERE job_id = ANY() ORDER BY job_job_title; END; $$ LANGUAGE plpgsql;
この関数は、カンマで区切られた複数の整数値を渡すことで呼び出すことができます:
SELECT * FROM test(270, 378);
PostgreSQL 9.1 以降では、配列型を使用して VARIADIC パラメーター関数を直接呼び出すこともできます。次のコードは前の例と同等です:
SELECT * FROM test(VARIADIC '{1, 2, 3}'::int[]);
right()
関数の負の引数を使用して、文字列の先頭の文字を削除します。これは、substring()
関数を使用するよりも高速です。 "DeleteFlag"
など、列名の前後に二重引用符を使用することは避けてください。 text
などの文字データ型ではなく、適切なブール データ型を使用します。 上記の最適化を適用した、元の関数の改良版は次のとおりです。
CREATE OR REPLACE FUNCTION f_test(VARIADIC int[]) RETURNS TABLE (id int, reference int, job_title text, status text) AS $func$ SELECT id, reference, job_title, ltrim(right(status, -2)) AS status FROM company c JOIN job j USING (id) WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag AND id = ANY() ORDER BY job_title; $func$ LANGUAGE sql;
以上がPostgreSQL 関数の単一パラメータに複数の値を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。