スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PL/pgSQLで引数からIN句を構築する

PL/pgSQLでSELECT文をラップする時に引数の値でIN句を構築してみます。
IN句って
user_id IN (1, 2, 3)
のような書き方になるので、単純に考えると動的SQLを使わないとできそうにないです。
ここで利用するのが、配列とSOMEです。

CREATE OR REPLACE FUNCTION get_user (
p_user_ids TEXT
,p_separator TEXT
) RETURNS SETOF t_user AS $$
BEGIN
RETURN QUERY SELECT
*
FROM
t_user
WHERE
user_id = SOME (regexp_split_to_array(p_user_ids, p_separator)::BIGINT[])
;
END;
$$ LANGUAGE plpgsql;


呼び方は
select * from get_user('1,2', ',');


複数のIDは文字列でカンマ区切りで渡します。
それをセパレーターで区切って配列にしてから、= SOMEを使うとIN句と同じ動作になってくれます。
ちなみに配列にしただけだとテキストの配列になってしまうので::BIGINT[]で数字の配列にキャストしています。
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。