在PL/SQL中写一个function函数,在测试时输原字符串 11;22;33;e4 以分号为分隔符的字符串,例如我需要取第一个,得到的值应该为11 取第四个就是e4,,写一个通用的函数,测试编译时字符串 11;22;33;e4 中的数字自己都可以换成别的,函数里可以用str来表示里面的数字,分号可以用str2来表示等等,新人求指教啊!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是啊,谢谢,但不是用instr和substr写一个简单的SQL语句,而是要写一个function函数,源字符串里的数字是可以变的,分号也可以变,用变量来代替,在测试时对应输入查看结果!谢谢! create or replace function f_getchar( in_string varchar2, -- 原始字符串 in_number number, -- 截取位数 in_separator varchar2 -- 分隔符)return varchar2as rt_string varchar2(4000); str_basestring varchar2(4000); int_charat number;begin -- 截取位数不正确,返回空 if (nvl(in_number, 0) <=0 ) then return rt_string; end if; str_basestring := in_string || in_separator; for i in 1..in_number loop int_charat := instr(str_basestring, in_separator); rt_string := substr(str_basestring, 1, int_charat - 1); str_basestring := substr(str_basestring, int_charat + 1); end loop; return rt_string;exception when others then rt_string := sqlerrm; return rt_string;end f_getchar; create or replace function test( str_in_var varchar2, --字符串 num_in_int integer, --取第几个字符 str_in_type varchar2 --分隔符) return varchar2 is str_var varchar2(200); num_int1 integer; num_int2 integer; str_var2 varchar2(60);begin str_var :=str_in_type||str_in_var||str_in_type; num_int1 :=instr(str_var,str_in_type,1,num_in_int); num_int2 :=instr(str_var,str_in_type,1,num_in_int+1); str_var2 :=SUBSTR(str_var,num_int1+1,num_int2-num_int1-1); return str_var2;end test; 关于验证数据合法性 不定行转列的问题,向各位大侠请救,不胜感激,在线等…… PL 紧急求救: SP2-0738: 限制的命令 "edit" 不可用 proc怎么调用存储过程? 造数据的问题,求sql语句或者解决方案! 一个关于导入导出的简单问题,谢谢 表的主码信息在oracle8那张表中能找到? 求助,PL/SQL 登陆报ORA-01033 安装Grid Infrastructure执行root脚本报错,怎么解决 关于SQL语句 PL/SQL中编写一个函数:取原字符串 123;asd;33;e4 以分号为分隔符的字符串,例如我需要取第一个,得到的值应该为123 ,取第四个就是e4
create or replace function f_getchar
(
in_string varchar2, -- 原始字符串
in_number number, -- 截取位数
in_separator varchar2 -- 分隔符
)return varchar2
as
rt_string varchar2(4000);
str_basestring varchar2(4000);
int_charat number;
begin
-- 截取位数不正确,返回空
if (nvl(in_number, 0) <=0 ) then
return rt_string;
end if; str_basestring := in_string || in_separator; for i in 1..in_number
loop
int_charat := instr(str_basestring, in_separator);
rt_string := substr(str_basestring, 1, int_charat - 1);
str_basestring := substr(str_basestring, int_charat + 1);
end loop; return rt_string;
exception
when others then
rt_string := sqlerrm;
return rt_string;
end f_getchar;
(
str_in_var varchar2, --字符串
num_in_int integer, --取第几个字符
str_in_type varchar2 --分隔符
) return varchar2 is
str_var varchar2(200);
num_int1 integer;
num_int2 integer;
str_var2 varchar2(60);
begin
str_var :=str_in_type||str_in_var||str_in_type;
num_int1 :=instr(str_var,str_in_type,1,num_in_int);
num_int2 :=instr(str_var,str_in_type,1,num_in_int+1);
str_var2 :=SUBSTR(str_var,num_int1+1,num_int2-num_int1-1); return str_var2;
end test;