PLSQL 实现split

本文介绍了使用PLSQL实现字符串分割的方法,通过自定义函数Get_Field_Value和SPLIT,能够从给定的字符串中提取指定分隔符后的字段值。详细步骤包括函数定义、参数解释及实际应用案例。

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

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 VARCHAR2RETURN 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;

转载于:https://www.cnblogs.com/benio/archive/2011/09/09/2172099.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值