使用PL SQL 编写一个逗号分割字符串分割处理函数

create or replace function F_INTELLECT_FIRST_SALES_PROV(var_sales in varchar2,
       var_first_sales IN VARCHAR2,
        var_split in VARCHAR2) return varchar2 is
  Result varchar2(1);
  
  /****************************************************
  ** 
  ** All rights reserved.
  **
  ** 函数名称:F_INTELLECT_FIRST_SALES_PROVINCE

  ** 参    数:【名称】         【类型 】      【说明】
  **           var_sales          varchar2       字符串1,逗号分隔的,如'aaa,bbb'
               var_first_sales    varchar2       字符串2,逗号分割的,如'cc,aaa'
  **           var_split        varchar2       要使用的分隔符
  ** 返 回 值:Result           varchar2    处理后返回的值1/0
  ** 摘    要:如果字符串2中的某一个分割的字符串在字符串1中就返回1,否则返回0
               
  **
  ** 当前版本:1.0
  **
  ** 作    者:liuzhih
  ** 完成日期:2013年1月29日
  ** 备    注:
  ****************************************************/
  var_element varchar2(4000);
  var_element2 varchar2(4000);
  var_tmp     varchar2(4000);
  var_tmp2    varchar2(4000);
  
BEGIN
     RESULT := '0';
     var_tmp := var_sales;
     var_tmp2 := var_first_sales;
     
  IF var_tmp2 IS NULL OR var_tmp2 ='' THEN
    return(Result);
  ELSIF var_tmp IS NULL OR var_tmp ='' THEN
    return(Result);
  ELSE
    /*如果字符串1不为空,在后面加上一个特殊的字符,
    这样循环时就可以直接在循环内部处理,不然需要在最外面循环出再一次处理var_tmp,因为最后一次var_tmp中不含有分隔符,不会进行loop循环*/
    var_tmp := var_tmp || var_split || '-1';
  END IF;
  
   while instr(var_tmp, var_split) > 0 LOOP
     /****循环字符串1,每次获得一个var_element****/
     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));
     
        while instr(var_tmp2, var_split) > 0 LOOP
          /****循环字符串2,每次获得一个var_element2****/
         var_element2 := substr(var_tmp2, 1, instr(var_tmp2, var_split) - 1);
          var_tmp2     := substr(var_tmp2,
                              instr(var_tmp2, var_split) + length(var_split),
                              length(var_tmp2));
           /*如果字符串1中有字符串2中的一个值,返回1*/
           IF var_element = var_element2 THEN
             RESULT := '1';
             return(Result);
           END IF;
        END LOOP;
        
        /*最后一个截取的var_tmp2 不会进入循环 所以在此处处理
        
                          如果字符串1中含有字符串2的一个值,返回1*/
           IF var_element = var_tmp2 THEN
             RESULT := '1';
             return(Result);
           END IF;
     
   END LOOP;

  return(Result);
end F_INTELLECT_FIRST_SALES_PROV;

你可能感兴趣的:(ORACLE,plsql,字符串分割)