您的位置:首页 > 数据库 > Oracle

用oracle 写了一个 function 带了一个用逗号分隔数字字符,调用出错。

2017-11-03 15:23 253 查看
原文转载自:https://zhidao.baidu.com/question/1046275642765056619.html

场景:在oracle 的存储过程或function 中需要传入一个 用逗号分割,带有多个数字的参数时,如:'1,2,3,4,5,6'  

'1,2,3,4,5,6'仅仅是含有数字的单个字符串,必需想办法把它分解为由6个数字组成的集合,可以用下面的方法

SELECT REGEXP_SUBSTR('1,2,3,4,5,6', '[^,]+', 1, LEVEL, 'i') AS STR
FROM DUAL  CONNECT BY LEVEL <=
LENGTH('1,2,3,4,5,6') - LENGTH(REGEXP_REPLACE('1,2,3,4,5,6', ',', ''))+1;


例如:

/**
*
*
*/
create or replace function f_test(p_qids in varchar2) return varchar2 as
cursor mycursor is select * from t_user where m_user_id in(
SELECT REGEXP_SUBSTR(p_qids, '[^,]+', 1, LEVEL, 'i') AS STR
FROM DUAL  CONNECT BY LEVEL <=
LENGTH(p_qids) - LENGTH(REGEXP_REPLACE(p_qids, ',', ''))+1
);
v_reuslt varchar2(200);
v_answer t_user%rowtype;
begin
open mycursor;
loop
fetch mycursor into v_answer;
exit when mycursor%notfound
dbms_output.put_line(v_answer.m_user_id|| ',' ||v_answer.m_user_name);
end loop;
close mycursor;
return nvl(v_reuslt,'');  --return v_reuslt 这个变量不知道有什么目的,自己处理一下
end;


上述function 中需要传入一个变量,变量含有一个或多个数字,以 ',' 区分的字符串,调用方法

select f_test('1,2,3,4,5,6') from dual;  --是可以用得起的


解析:

REGEXP_SUBSTR函数格式如下:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

__srcstr :需要进行正则处理的字符串

__pattern :进行匹配的正则表达式

__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)

__occurrence :标识第几个匹配组,默认为1

__modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐