oracle 账号安全管理oracle中添加split函数

oracle中添加split函数

 

1.创建表类型  www.2cto.com  

CREATE OR REPLACE TYPE "TYPE_SPLIT"   as table of varchar2(4000) ;

2.创建split 函数

CREATE OR REPLACE FUNCTION split(p_list VARCHAR2,

                                 p_sep  VARCHAR2 := ',') RETURN type_split

  PIPELINED IS

  l_idx  PLS_INTEGER;

  v_list VARCHAR2(4000) := p_list;

BEGIN

  IF p_list IS NULL

     OR p_list = '' THEN

    RETURN;

  END IF;

  LOOP

    l_idx := instr(v_list, p_sep);

    IF l_idx > 0 THEN

      PIPE ROW(substr(v_list, 1, l_idx – 1));

      v_list := substr(v_list, l_idx + length(p_sep));

    ELSE

      PIPE ROW(v_list);

      EXIT;

    END IF;

  END LOOP;

  RETURN;

END split;

3. 使用场景 我们经常使用in进行查询如  www.2cto.com  

SELECT t.*

  FROM stu t

 WHERE t.useId IN ('12,23,34');

但是当查询的条数大于1000条时候就会报错。所以此时我们可以用上面的split进行查询

SELECT t.*

  FROM stu t,

       (SELECT column_voracle账号alue cv

          FROM TABLE(CAST(split('12,23,45,66') AS type_split))) a

 WHERE t.userId = a.cv

这其中,首先是将字符串'12,23,45,66'分割成四行,split('12,23,45,66')

然后,是把分割的值转换成 我们定义的分割类型type_split ;

cast(split('12,23,45,66')  as  type_split ) 这步貌似可以不用 然后,在table 下,转换成表。分割的字段名默认叫 column_value ;

 

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。