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

本文介绍了一种在Oracle中将逗号分隔的数字字符串转换为数字集合的方法,利用REGEXP_SUBSTR函数实现。通过创建一个函数f_test,演示了如何将输入的字符串拆分为多个独立的数字,并基于这些数字查询数据库。

原文转载自: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'。)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值