用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个数字组成的集合,可以用下面的方法
例如:
上述function 中需要传入一个变量,变量含有一个或多个数字,以 ',' 区分的字符串,调用方法
解析:
REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
场景:在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'。)
相关文章推荐
- 实现函数 functionFunction,调用之后满足如下条件: 1、返回值为一个函数 f 2、调用返回的函数 f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ', ' 3、所
- oracle中PLSQL存储过程中如何使用逗号分隔的集合(逗号分隔字符串转换为一个集合)
- 一个生成验证字符或数字的增强类(downmoon)(基于.net1.1)及调用示例
- 查询一个int类型的变量(数字)是否在一个字符串里边(逗号分隔的)以及 sqlif 与case
- Oracle将以逗号分隔的数字字符串根据字典表转换为中文字符串
- 一个生成验证字符或数字的增强类(基于.net1.1)及调用示例
- JavaSE 之 如何将一个用逗号分隔的字符串转换成字符数组
- 给一个金额字符串插入逗号分隔 保留两位有效数字
- 分享一个很实用的java代码,可以将以逗号分隔的数字以从大到小的方式排序后返回
- C++ 计算字符串长度之Function(包含unicode,utf-8),包含特殊字符,欧洲数字千位分隔符,逗号分隔符
- Oracle中将数字转换成字符插入表中会多一个空格的解决方法
- oracle判断一个字符是否是数字
- 一个生成验证字符或数字的增强类(downmoon)(基于.net1.1)及调用示例
- oracle数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
- 【原创工具】将一个整形数字转换成三位逗号分隔的形式
- 汇编语言: 从键盘上输入一串字符(用回车键结束,使用 10 号功能调用。)放在 STRING 中,试 编制一个程序测试字符串中是否存在数字。如有,则把 CL 的第 5 位置 1,否则将该位置置 0。
- js数字的货币格式表示法(每三位一个逗号分隔)
- 分享一个很实用的代码,可以将以逗号分隔的数字以从大到小的方式排序后返回
- (转载)oracle 在一个存储过程中调用另一个返回游标的存储过程
- 将一个字串中含有全角的数字字符、字母、空格或'%+-()'字符转换为相应半角字符