如,传进来一个字符串'11,12,13,14',',','33','34'.其中,11,12,13,14是well_id的值,33,34是另一个字段的值。
想要如下结果
11
12
13
14
33
34
该怎么实现呀?
现在只会截取
11
12
13
14
代码:
CREATE TYPE my_tbl_type AS OBJECT(engineid VARCHAR2(20));CREATE OR REPLACE TYPE myTableType as TABLE OF my_tbl_type;
--建立嵌套表类型myTableType,基于对象类型my_tbl_type定义,以包含多个engineid信息。--将字付串转化为表
CREATE OR REPLACE FUNCTION str2tbl(p_str IN VARCHAR2) RETURN myTableType
AS
    l_str VARCHAR2(1000):=p_str||',';
    l_n   NUMBER;
    l_data myTableType:=myTableType();
BEGIN
    LOOP
        l_n:=instr(l_str,',');
        EXIT WHEN (NVL(l_n,0)=0);
        l_data.extend;
        l_data(l_data.count):=my_tbl_type(SUBSTR(l_str,1,l_n-1));
        l_str:=SUBSTR(l_str,l_n+1);
    END LOOP;
    RETURN l_data;
END;
--示例应用
var aaa varchar2(1000)
exec :aaa:='11,12,13,14'
select * from table(cast(str2tbl(:aaa) as myTableType));
11
12
13
14后面的不知道该怎么弄了。
请大侠帮帮忙!

解决方案 »

  1.   

    http://zhidao.baidu.com/question/79359797.html
      

  2.   

    select regexp_substr('"11,12,13,14",",","33","34"','\d+',1,level) as str from dual connect by level <=6
      

  3.   

    搞错了,后面的两个字符串'33','34'应该是传进来的两个变量,因此需要再写一个函数,用游标接受字符串截取的数据11 12 13 14,然后写一个嵌套循环,在每个WELL_ID里嵌套33,34,最终实现了这样的效果:
    11 33
    11 34
    12 33
    12 34
    13 33
    14 34.