Oracle では、Tom Kyte のトークナイザーの変形を使用して、不明なリスト サイズを処理します (Oracle の IN 句に対する 1k 制限と、それを回避するために複数の IN を実行することの悪化を考えると)。これは varchar2 用ですが、数値に合わせて調整できます (または、'1' = 1 /shudder を知っている Oracle に頼ることもできます)。
myBatis の呪文を渡すか実行ids
して文字列として取得すると仮定すると、次のようになります。
select @Select("SELECT * FROM blog WHERE id IN (select * from table(string_tokenizer(#{ids}))")
コード:
create or replace function string_tokenizer(p_string in varchar2, p_separator in varchar2 := ',') return sys.dbms_debug_vc2coll is
return_value SYS.DBMS_DEBUG_VC2COLL;
pattern varchar2(250);
begin
pattern := '[^(''' || p_separator || ''')]+' ;
select
trim(regexp_substr(p_string, pattern, 1, level)) token
bulk collect into
return_value
from
dual
where
regexp_substr(p_string, pattern, 1, level) is not null
connect by
regexp_instr(p_string, pattern, 1, level) > 0;
return return_value;
end string_tokenizer;