在编写PL/SQL时,有时候我们需要处理这样一个输入的变量,它的格式是由多个值通过分隔符组成的字符串,如“1,2,3”,我们需要将这个变量加入到我们的SQL中,形成诸如in('1','2','3')的条件。

  下面的SQL可以把一个字符串分割成一个临时表,然后用于in条件:

SELECT * FROM TEST_TABLE WHERE ID in(

  SELECT REGEXP_SUBSTR ('1,2,3', '[^,]+', 1,rownum) val
  FROM DUAL
  CONNECT BY ROWNUM <= LENGTH ('1,2,3') - LENGTH(REPLACE('1,2,3',',',''))+1

);

  如果要处理的字符串含有英文逗号,则可以使用字符串组进行分割的,SQL如下:

SELECT REGEXP_SUBSTR ('11wxrd2wxrd33wxrd4wxrd5wxrd6', '[^wxrd]+', 1,rownum) val
FROM DUAL
CONNECT BY ROWNUM <= LENGTH ('11wxrd2wxrd33wxrd4wxrd5wxrd6') - LENGTH(REPLACE('11wxrd2wxrd33wxrd4wxrd5wxrd6','wxrd','xrd'))+1
;

说明:wxrd为分隔符,xrd为比分割符wxrd少一位的辅助替换字符串

        需要确保的是在输入的字符串中不存在分隔符和辅助替换字符串。

 

posted on 2014-08-04 14:51  倾真鱼  阅读(403)  评论(0编辑  收藏  举报