如何将下面这段字符信息按逗号拆分,放入相应的变量,我遇到的问题就是比如何取得“类别”、“状态”等将其存放的相应的变量中:
类别,状态,返回码,返回解释,发卡行,卡号,交易金额,交易日期,清算日期,交易时间,凭证号,POS号,收款员,子商户,终端号,授权号,交易参考号,结帐状态,附加信息

解决方案 »

  1.   

    我自己定义的split函数,第一个参数为要分割的字符串,第二个为分界字符,返回varchar2类型的table,
    应该可以解决楼主的问题
    TYPE TYP_TBL_VARCHAR2 IS TABLE OF VARCHAR2(50);FUNCTION SPLIT(P_STR IN VARCHAR2, P_CHAR IN CHAR) RETURN TYP_TBL_VARCHAR2 IS
               ARRAY_STRING     TYP_TBL_VARCHAR2 := TYP_TBL_VARCHAR2();
               V_I              NUMBER(10);
               
               POSITION         NUMBER(10);
               TMP_STR          VARCHAR2(500);
           BEGIN
               TMP_STR := P_STR;
               V_I := 1;
               POSITION := INSTR(TMP_STR, P_CHAR);
               WHILE ( POSITION > 0 ) LOOP
                   ARRAY_STRING.EXTEND;
                   ARRAY_STRING(V_I) := SUBSTR(TMP_STR, 1, POSITION - 1);
                   V_I := V_I + 1;
                   TMP_STR := SUBSTR(TMP_STR, POSITION + 1);
                   POSITION := INSTR(TMP_STR, P_CHAR);
               END LOOP;
               
               ARRAY_STRING.EXTEND;
               ARRAY_STRING(V_I) := TMP_STR;           RETURN ARRAY_STRING;  
           END SPLIT;
      

  2.   

    create or replace TYPE TYP_TBL_VARCHAR2 IS TABLE OF VARCHAR2(50);
    create or replace FUNCTION SPLIT(P_STR IN VARCHAR2, P_CHAR IN CHAR) 
    RETURN TYP_TBL_VARCHAR2 IS
           ARRAY_STRING     TYP_TBL_VARCHAR2 := TYP_TBL_VARCHAR2();
           V_I              NUMBER(10);
           POSITION         NUMBER(10);
           TMP_STR          VARCHAR2(500);
           BEGIN
               TMP_STR := P_STR;
               V_I := 1;
               POSITION := INSTR(TMP_STR, P_CHAR);
               WHILE ( POSITION > 0 ) LOOP
                   ARRAY_STRING.EXTEND;
                   ARRAY_STRING(V_I) := SUBSTR(TMP_STR, 1, POSITION - 1);
                  
                   V_I := V_I + 1;
                   TMP_STR := SUBSTR(TMP_STR, POSITION + 1);
                   POSITION := INSTR(TMP_STR, P_CHAR);
               END LOOP;
               ARRAY_STRING.EXTEND;
               ARRAY_STRING(V_I) := TMP_STR;
               RETURN ARRAY_STRING;  
           END SPLIT;
    SQL> select * from table(split('1,2,3',','));
     
    COLUMN_VALUE
    --------------------------------------------------
    1
    2
    3