zoukankan      html  css  js  c++  java
  • 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 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;

             

                成长

           /      |     \

        学习   总结   分享

    QQ交流群:122230156

  • 相关阅读:
    美联储主席和欧洲央行说了什么
    12月CPI,PPI有哪些变化
    中国人民银行行长易纲就贯彻落实中央经济工作会议精神接受采访谈
    2018年个人的一些简单预测
    从首套房利率走势看市场
    百城价格房价周期和郑州、武汉房价比较分析
    国际非农超预期美联储主席态度软化,国内适度宽松货币+积极财政仍是主基调
    三大经济体年2018年末形势一览
    从房地产住宅销售面积增速看房地产行业
    枚举类
  • 原文地址:https://www.cnblogs.com/benio/p/2172099.html
Copyright © 2011-2022 走看看