PLSQL开发实现字符串拆分

2014-11-24 18:33:14 · 作者: · 浏览: 0

在应用程序开发中,会出现单选或多选框条件输入的需求。如输入框的输入值为'sz',或'sz|nj|zj|nt',在SQL中会这样处理。


select * from tab_1 where col_1='sz' ;这是单选框输入。


select * from tab_1 where col_1 ='sz|nj' ;这是多选框输入。


很明显,多选输入值不会查询出结果。


如何解决这个问题?


有使用动态SQL实现的方法,如拼装成这样的SQL语句:select * from tab_1 where col_1 in ('sz','nj') ;


还有将'sz|nj'拆分插入到临时表中,再关联该临时表实现,如select * from tab_1 where col_1 in (select a from tt);


临时表涉及到表的创建和维护,还有IO。


我最近想到一个方法:将传入的字符串以嵌套表类型返回,使用表函数调用,实现这类需求。


函数代码如下:


测试如下:


以上解决方法仅供参数,欢迎交流。


再增加一种方法。


使用pipelined函数也能实现这个需求。但在此处性能优势不会体现出来,如果您碰巧碰到大数据量如亿级别的字符串拆分,该方法就能派上用场。


代码如下:


这些方法仅供参考,欢迎交流。