码迷,mamicode.com
首页 > 其他好文 > 详细

分割函数和

时间:2015-08-04 13:11:21      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

需求:函数传入一个字符串参数 例如  123-456

将这个字符串123-456拆成两个值 123   456,在通过两个值分别查出数据(例如 张三  李四),拼接成     张三-李四

 

CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
    RETURN str_split 
    PIPELINED
AS
    v_length   NUMBER := LENGTH(p_string);
    v_start    NUMBER := 1;
    v_index    NUMBER;
BEGIN
    WHILE(v_start <= v_length)
    LOOP
        v_index := INSTR(p_string, p_delimiter, v_start);
 
        IF v_index = 0
        THEN
            PIPE ROW(SUBSTR(p_string, v_start));
            v_start := v_length + 1;
        ELSE
            PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
            v_start := v_index + 1;
        END IF;
    END LOOP;
 
    RETURN;
END splitstr;
 
 
--使用方法--
select * from table(splitstr(16021-16022,-));
 
--执行出的结果
 
COLUMN_VALUE
16021
16022

这个是我自己写的函数

CREATE OR REPLACE FUNCTION  fn_GetDead (v_deadId varchar2)
return varchar2
is
  
v_deadString varchar2(100);
v_deadString_all VARCHAR2(4000);
cursor c_deadIdSpilt  --设置一个分割字符串游标--
 is
select *  from table(splitstr(‘‘||v_deadId||‘‘,-));
c_row c_deadIdSpilt%rowtype;
  
begin  
    
 if  instr(v_deadId,-) > 0 then  ---判读变量中是否含有"-"字符,如果有,则循环遍历这个字符,取出亡人姓名
  open c_deadIdSpilt;              --打开游标--
  loop
    fetch c_deadIdSpilt into c_row;
    EXIT WHEN c_deadIdSpilt%NOTFOUND;
      SELECT wrxm into v_deadString FROM wrxxb WHERE id=C_ROW.COLUMN_VALUE;
        
       v_deadString_all:=v_deadString_all||-||v_deadString;       
       
  end loop;
  
 close c_deadIdSpilt;
 
  return ltrim(v_deadString_all,-);
 else
     
  SELECT wrxm INTO v_deadString FROM wrxxb WHERE id=‘‘||v_deadId||‘‘;
  
  return v_deadString;
 end if;
  
--异常处理--
exception
  
  when others then dbms_output.put_line(error);
  return -1;
end fn_GetDead;
/
 --调用--
SELECT  fn_GetDead(16021-16022) FROM dual;
 
--我执行出的结果-- 
FN_GETDEAD(16021-16022)
马瑞祥-赵桂芝

 

分割函数和

标签:

原文地址:http://www.cnblogs.com/siyunianhua/p/4701453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!