我将通过逗号分隔值传递给oracle中的存储过程。我希望把这些值作为一个表,这样我可以像查询中使用它们:在oracle中处理逗号分隔值的好方法
select * from tabl_a where column_b in (<csv values passed in>)
什么是在11g中做到这一点的最好方法是什么?
现在我们正在逐一循环并将它们插入到我认为效率低下的gtt中。
任何指针?
我将通过逗号分隔值传递给oracle中的存储过程。我希望把这些值作为一个表,这样我可以像查询中使用它们:在oracle中处理逗号分隔值的好方法
select * from tabl_a where column_b in (<csv values passed in>)
什么是在11g中做到这一点的最好方法是什么?
现在我们正在逐一循环并将它们插入到我认为效率低下的gtt中。
任何指针?
这解决了完全相同的问题
Oracle不附带内置标记器。但是可以使用SQL类型和PL/SQL来推出我们自己的。我已在this other SO thread中发布了一个示例解决方案。
这将使这样一个解决方案:
select * from tabl_a
where column_b in (select *
from table (str_to_number_tokens (<csv values passed in>)))
/
在11g中,您可以使用REGEXP_SUBSTR的“发生”参数来直接选择值在SQL中:
select regexp_substr(<csv values passed in>,'[^,]+',1,level) val
from dual
connect by level < regexp_count(<csv values passed in>,',')+2;
B因为regexp_substr有点贵,我不确定它是否是最快速的最有效的。
但在该解决方案中,你永远不会显示'str_to_number_tokens'看起来像什么? – dmitry 2010-06-15 22:00:20
@dmitry - 也许我太微妙了,但是在“我正在使用Anup Pani的实现变体”一句中嵌入了一个链接,即http://anuppani.blogspot.com/2007/07/tokenizer-in-oracle -plsql.html – APC 2010-06-16 01:17:59