mysql 复杂存储过程_一个比较复杂的多次拆分字符串的存储过程

自己写的特殊拆分函数如下:

create or replace function FN_SPLIT_STR_2(var_str in varchar2)return varchar2

/*

有一张表 t1,里面有个字段叫c3,存的是所有店铺的点位信息。

现在需要一个存储过程,将所有的记录的c3字段的坐标值都缩小3倍,写入c字段

内容举例为 220.25 257,220.25 269.75,229.25 269.75,229.25 257

每个逗号分开的是一个个的坐标点,每个坐标点用空格区分x坐标和y坐标

存储函数名称:FN_SPLIT_STR_2

用途:把bis_store坐标v_coords3缩小三倍更新coords,比如

author:huangshan

*/

as

var_tmp varchar2(4000);

var_element varchar2(4000);

var_result varchar2(4000);

var_instr_first number;

var_instr_second number;

var_length number;

beginvar_tmp := var_str;

var_instr_first :=0;

var_instr_second :=0;

var_result :='';

var_length:=0;

/* 替换掉传过来的特殊字符

chr(9) 制表符

chr(10)回车

chr(13)换行

*/var_tmp:= replace(var_tmp,chr(10),'');

var_tmp:= replace(var_tmp,chr(13),'');

var_tmp:= replace(var_tmp,chr(9),'');

while instr(var_tmp, ' ') > 0

or instr(var_tmp, ',')>0

or(var_length>0) loop

var_instr_first :=instr(var_tmp, ' ');

var_instr_second :=instr(var_tmp, ',');

-- dbms_output.put_line('var_instr_kg:'||var_instr_first||' ');

-- dbms_output.put_line('var_instr_dh:'||var_instr_second||' ');

var_length:=length(var_tmp);

-- dbms_output.put_line('var_length :'||var_length||' ');

/* 1 如果是先有空格,比如 12 32,12 32这类 **/if var_instr_first

var_element := round(to_number(substr(var_tmp, 1, var_instr_first-1))/3,2);

var_result := var_result|| var_element|| ' ';

var_tmp := substr(var_tmp,var_instr_first+1, length(var_tmp));

-- dbms_output.put_line('var_result kg:'||var_result);

-- dbms_output.put_line('var_tmp kg:'||var_tmp||' ');

-- dbms_output.put_line('var_element kg:'||var_element||' ');

/* 2 如果是已经截取完空格,逗号在前面比如 32,12 32这类 **/elsif var_instr_first>var_instr_second and var_instr_second>0 then

var_element := round(to_number(substr(var_tmp, 1, var_instr_second-1))/3,2);

var_result := var_result || var_element || ',' ;

var_tmp := substr(var_tmp,var_instr_second+1, length(var_tmp));

-- dbms_output.put_line('var_result dh:'||var_result);

-- dbms_output.put_line('var_tmp dh:'||var_tmp||' ');

-- dbms_output.put_line('var_element dh:'||var_element||' ');

/* 3 如果是已经截取完逗号,已经只剩下最后一个坐标x y,比如12 32这类 **/elsif var_instr_first>var_instr_second and var_instr_second=0 then

var_element := round(to_number(substr(var_tmp, 1, var_instr_first-1))/3,2);

var_result := var_result|| var_element|| ' ';

var_tmp := substr(var_tmp,+1, length(var_tmp));

-- dbms_output.put_line('var_result kg:'||var_result);

-- dbms_output.put_line('var_tmpvar_instr_first kg:'||var_tmp||' ');

-- dbms_output.put_line('var_element kg:'||var_element||' ');

/* 4 如果是已经截取到最后一个坐标,比如32这类 **/elsif var_instr_first=0 and var_instr_second=0 and var_length>0 then

-- dbms_output.put_line('var_tmp the last one:'||var_tmp||' ');

var_element := round(to_number(var_tmp)/3,2);

var_result := var_result || var_element;

var_tmp:='';

-- dbms_output.put_line('var_result 0:'||var_result);

-- dbms_output.put_line('var_tmp 0:'||var_tmp||' ');

-- dbms_output.put_line('var_element 0:'||var_element||' ');

/* 5 如果其他的东西,设置成''退出while循环为止 **/else

var_tmp:='';

end if;

-- dbms_output.put_line(' ');

end loop;

return var_result;

end FN_SPLIT_STR_2;

-- google其他人的拆分function如下:-- 拆分函数create or replace function split_str(var_str in varchar2,

var_split in varchar2)

/****************************************************

注意 先执行下面语句 创建类型

create or replace type t_ret_table is table of varchar2(100)

** 函数名称:split_str

** 参 数:【名称】 【类型 】 【说明】

** var_str varchar2 要拆分的字符串

** var_split varchar2 字符串分隔符

** 返 回 值:Result t_ret_table 拆分后数组集合

** 摘 要:拆分字符串

调用 举例:

select * from table(split_str('2008-10-21','-'))

****************************************************/

return t_ret_table is

var_out t_ret_table;

var_tmp varchar2(4000);

var_element varchar2(4000);

beginvar_tmp := var_str;

var_out := t_ret_table();

--如果存在匹配的分割符

while instr(var_tmp, var_split) > 0 loop

var_element := substr(var_tmp, 1, instr(var_tmp, var_split) - 1);

var_tmp := substr(var_tmp,

instr(var_tmp, var_split) + length(var_split),

length(var_tmp));

--var_out.extend(1);

var_out.extend;

var_out(var_out.count) := var_element;

end loop;

--var_out.extend(1);

var_out.extend;

var_out(var_out.count) := var_tmp;

return var_out;

end split_str;

以上就是一个比较复杂的多次拆分字符串的存储过程的内容,更多相关内容请关注PHP中文网(www.php.cn)!

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值