这两天需要写一个存储过程,实现把传入的以+号分隔的字符串分隔,然后以数组存储每个截出来的子串,然后这些子串做为一条插入语句中的各个字段值,测试了一些网上的例子,截出来可以了,但是在试验以数组存储时就出错了,不知道应该怎么做,请大家帮忙,谢谢

解决方案 »

  1.   

    比如说,String str="A+B+C+D";
    我在存储过程中实现把A,B,C,D分隔开,然后通过一个数组来存储这四个子串
    array[1]=A
    array[2]=B
    array[3]=C
    array[4]=D这样子要怎么做,小弟对于存储过程了解有限,只是通过网上查询知道可以这样实现,但在调试过程中一直出错,实在是辙了,请大家指教
      

  2.   

    数组元素个数是固定的还是可变的?
    下面这个是固定的DECLARE
    TYPE T_VARRAY IS VARRAY(3) OF VARCHAR2(20);
    V_VAR T_VARRAY := T_VARRAY('I', 'LOVE', 'STUDY');
    BEGIN
      FOR I IN 1 .. V_VAR.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE(V_VAR(I));
      END LOOP;
    END;
    http://q.sohu.com/forum/5/topic/4254063
      

  3.   

    接受函数返回值,  定义变量接受
    DECLARE
    TYPE T_VARRAY IS VARRAY(3) OF VARCHAR2(20);
    V_VAR T_VARRAY := T_VARRAY('I', 'LOVE', 'STUDY');
    v_SQL varchar2(8000);
    V_GET_VALUE number(20);
    BEGIN
      V_SQL :=' INSERT INTO TABLE_T VALUES( ' ;
      FOR I IN 1 .. V_VAR.COUNT LOOP
        V_SQL := V_SQL || '''' ||V_VAR(I) || ''',';
      END LOOP;
      V_SQL :=V_SQL || ' )';
      DBMS_OUTPUT.PUT_LINE(V_SQL);
      
      V_GET_VALUE := floor(200.123441);
      DBMS_OUTPUT.PUT_LINE(V_GET_VALUE);
    END;
      

  4.   

    功能描述:用指定分隔符切割输入的字符串,返回一维数组,每个数组元素为一个子串。源代码:CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
        RETURN ty_str_split
    IS
        j INT := 0;
        i INT := 1;
        len INT := 0;
        len1 INT := 0;
        str VARCHAR2 (4000);
        str_split ty_str_split := ty_str_split ();
    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 fn_split;
    /测试:DECLARE
        CURSOR c
        IS
            SELECT *
              FROM TABLE (CAST (fn_split ('1;;12;;123;;1234;;12345', ';;') AS ty_str_split
                               )
                         );    r c%ROWTYPE;
    BEGIN
        OPEN c;    LOOP
            FETCH c INTO r;        EXIT WHEN c%NOTFOUND;
            DBMS_OUTPUT.put_line (r.column_value);
        END LOOP;    CLOSE c;
    END;
    / 结果:
    1
    12
    123
    1234
    12345本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangsong145/archive/2009/05/10/4164699.aspx