我现在有一个表,里面有一个long类型的字段,字段里面存储的是    83.362    82.284    81.422    80.862    80.431    80.000 ,这些内容,每个数字之间用空格分开,现在想把这些数字拆成表的形式,如下:表内容:
83.362
82.284
81.422
80.862
80.431
80.000 请问大家有什么好的方法吗??????是long类型的。

解决方案 »

  1.   

    CREATE OR REPLACE FUNCTION V_splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
        RETURN str_split
        PIPELINED
    AS
        v_length   NUMBER := LENGTH(p_string);
        v_start    NUMBER := 1;
        v_index    NUMBER;
    BEGIN
        WHILE(v_start <= v_length)
        LOOP
            v_index := INSTR(p_string, p_delimiter, v_start);        IF v_index = 0
            THEN
                PIPE ROW(SUBSTR(p_string, v_start));
                v_start := v_length + 1;
            ELSE
                PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
                v_start := v_index + 1;
            END IF;
        END LOOP;    RETURN;
    END V_splitstr;拆分字符串函数
      

  2.   

    拆字符串只能对nvchar2的类型进行拆分,不能对long类型字段。。
      

  3.   

    http://rwl6813021.javaeye.com/blog/311228
    原来将LONG转换为VARCHAR2这么麻烦
    还好从来就很听ORACLE的话,没有用LONG类型
      

  4.   

    --这个
    CREATE OR REPLACE PROCEDURE split_str(lstr IN LONG, sep IN VARCHAR2) IS
      item VARCHAR2(200);
      str  VARCHAR2(30000);
    BEGIN
      SELECT lstr INTO str FROM dual;
      str := sep || str || sep;
      FOR i IN 1 .. length(str) - length(REPLACE(str, sep)) - 1 LOOP
        item := substr(str,
                       instr(str, sep, 1, i) + 1,
                       instr(str, sep, 1, i + 1) - 
                       instr(str, sep, 1, i) - 1);
      END LOOP;
    END;
    /
      

  5.   

    不要使用long类型,这是遗留的东西,臭名昭著
      

  6.   

    按照那个帖子里的没有办法转换?
    你再去GOOGLE下,应该有方法转换的,ORACLE里转换不行,好像还有程序段的转换
    好像程序前端的转换比较方便
      

  7.   

    顶一下
      oracle QQ群:54775466
            欢迎您的到来 
                   大家一起探讨。