PLSQL 实现split

PLSQL 实现split:
 

 

FUNCTION  Get_Field_Value
    (
        in_str   IN   VARCHAR2 ,
        findstr  IN   VARCHAR2 ,
        field    IN   INTEGER
    )  RETURN   VARCHAR2   AS
        tmp_msg  VARCHAR2 ( 20 );
         --  取字段 值 ,field start from 0 
        startidx  INTEGER ;
        endidx    INTEGER ;
    
     BEGIN
        startidx : =   1 ;
        endidx   : =   1 ;
    
         FOR  i  IN   1  .. field
        LOOP
             -- INSTR(in_string,'|',tmp_pos);
             -- substr(in_string,tmp_pos,tmp_pos1-tmp_pos); 
             IF  i  >   1   THEN
                startidx : =  INSTR(in_str, findstr, startidx);
                 IF  startidx  =   0   THEN
                     RETURN   NULL ;
                 END   IF ;
                startidx : =  startidx  +  length(findstr);
             END   IF ;
         END  LOOP;
    
        endidx : =  INSTR(in_str, findstr, startidx);
         IF  endidx  =   0   THEN
            endidx : =  length(in_str)  +   1 ;
         END   IF ;
    
         RETURN  substr(in_str, startidx, endidx  -  startidx);
    
    EXCEPTION
         WHEN  OTHERS  THEN
             RETURN   NULL ;
     END ;

 


例二

 

TYPE ARRAY  IS  TABLE  OF  VARCHAR2( 255);
FUNCTION SPLIT(P_STR  IN  VARCHAR2, P_DELIMITER  IN  VARCHAR2)  RETURN ARRAY  IS
    J          INT : =  0;
    I          INT : =  1;
     LEN        INT : =  0;
    LEN1       INT : =  0;
     STR        VARCHAR2( 4000);
    STR_SPLIT ARRAY : = ARRAY();
   BEGIN
     LEN  : = LENGTH(P_STR);
    LEN1 : = LENGTH(P_DELIMITER);
  
     WHILE J  <  LEN LOOP
      J : = INSTR(P_STR, P_DELIMITER, I);
    
       IF J  =  0  THEN
        J   : =  LEN;
         STR : = SUBSTR(P_STR, I);
        STR_SPLIT.EXTEND;
        STR_SPLIT(STR_SPLIT. COUNT) : =  STR;
      
         IF I  >=  LEN  THEN
           EXIT;
         END  IF;
       ELSE
         STR : = SUBSTR(P_STR, I, J  - I);
        I   : = J  + LEN1;
        STR_SPLIT.EXTEND;
        STR_SPLIT(STR_SPLIT. COUNT) : =  STR;
       END  IF;
     END LOOP;
  
     RETURN STR_SPLIT;
   END SPLIT;

 

调用:

STR_SPLIT := SPLIT('A,B,C,D,E,F', ',');
FOR I IN 1 .. STR_SPLIT.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(I);
END LOOP;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知了学飞

随意打赏,超额打赏邀请进铁杆群

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值