Oracle实现split函数2

本文介绍了一个在 Oracle 数据库中使用 PL/SQL 实现的类似于 Java 中 split 函数的功能。通过创建包 (pack) 和包体 (body),定义了一个名为 fn_split 的函数,该函数接受一个字符串和一个分隔符作为参数,并返回一个由分隔后的子字符串组成的数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 
  1. --创建pack spec   
  2. create or replace package yhef_test is  
  3.   --构建索引表   
  4.   TYPE t_Array IS TABLE OF VARCHAR2(4000) index by binary_integer;   
  5.   -- Purpose 实现类似java的split函数   
  6.   -- parameter pi_str需要操作的字符串   
  7.   -- parameter pi_separator 分隔符   
  8.   function fn_split(pi_str In Varchar2, pi_separator In Varchar2)   
  9.     RETURN t_Array;   
  10.   
  11. end yhef_test;   
  12.   
  13. --创建pack body   
  14. create or replace package body yhef_test is  
  15.   -- Purpose 实现类似java的split函数   
  16.   -- parameter pi_str需要操作的字符串   
  17.   -- parameter pi_separator 分隔符   
  18.   FUNCTION fn_split(pi_str In Varchar2, pi_separator In Varchar2)   
  19.     RETURN t_Array IS  
  20.      
  21.     idx          Number; --分隔符在字符串中的位置   
  22.     currentindex Number := 1; --数组的索引   
  23.     strs         t_Array; --返回值   
  24.     v_str        varchar2(4000) := pi_str; --临时变量   
  25.   BEGIN  
  26.      
  27.     IF pi_str IS NOT NULL AND pi_separator IS NOT NULL THEN  
  28.       --存在分隔符   
  29.       IF INSTR(v_str, pi_separator) <> 0 THEN  
  30.         LOOP   
  31.           EXIT WHEN v_str IS NULL;   
  32.           EXIT WHEN INSTR(v_str, pi_separator) = 0;   
  33.           idx := INSTR(v_str, pi_separator);   
  34.           --截取字符串赋值给对应的数组   
  35.           strs(currentindex) := SUBSTR(v_str, 0, idx - 1);   
  36.           currentindex := currentindex + 1;   
  37.           --更新字符串   
  38.           v_str := SUBSTR(v_str, idx + 1);   
  39.         END LOOP;   
  40.       END IF;   
  41.     END IF;   
  42.     --如果分隔符为空,则直接返回字符串   
  43.     IF v_str IS NOT NULL THEN  
  44.       strs(currentindex) := v_str;   
  45.     END IF;   
  46.     Return strs;   
  47.   END fn_split;   
  48.   
  49. end yhef_test;   
  50.   
  51. --test    
  52. declare  
  53.   ret yhef_test.t_array;   
  54. begin  
  55.   -- Call the function   
  56.   ret := yhef_test.fn_split('a,b,c,d,e'',');   
  57.   for i in 1 .. ret.count loop   
  58.     dbms_output.put_line(i || '=' || ret(i));   
  59.   end loop;   
  60. end;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值