複数の値を 1 つのパラメーターに渡すには、VARIADIC データ型を使用できます。これにより、パラメータの値の配列を指定できます。 job_ids という名前の VARIADIC パラメーターを受け入れるように次の関数を変更します:
<code class="language-sql">CREATE OR REPLACE FUNCTION test_var(VARIADIC job_ids int[]) RETURNS TABLE ( job_id int, job_reference int, job_job_title text, job_status text ) AS $$ BEGIN RETURN QUERY SELECT jobs.id, jobs.reference, jobs.job_title, ltrim(right(jobs.status, -2)) AS status -- 使用right()函数改进字符串处理 FROM jobs INNER JOIN company c ON c.id = jobs.id -- 使用INNER JOIN改进查询效率 WHERE jobs."DeleteFlag" = '0' AND c.DeleteFlag = '0' AND c.active = '1' AND (jobs.id = ANY(job_ids) OR job_ids = '{ -1 }') -- 简化条件判断 ORDER BY jobs.job_title; END; $$ LANGUAGE plpgsql;</code>
値の配列を job_ids パラメータに渡すことで、test_var 関数を呼び出すことができるようになりました。例:
<code class="language-sql">SELECT * FROM test_var('{270, 378}');</code>
これにより、ID 270 と 378 のジョブ データが返されます。
VARIADIC パラメーターの使用に加えて、right()
関数を負の長さと組み合わせて使用して、文字列の先頭の文字をトリミングすることもできます。これは、substring
を使用するよりも高速かつ簡単です。
また、DeleteFlag
列のデータ型がテキストではなくブール型であることを確認してください。これにより、正しい比較と効率が保証されます。
最後に、回答で提供されている f_test 関数は、PL/pgSQL の使用を回避し、これらの問題を解決する簡潔な SQL 関数を示しています。 実際のニーズに基づいて、適切な機能実装方法を選択することをお勧めします。
以上がPostgreSQL で単一の関数パラメータに複数の値を渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。