2012-04-05 53 views
-1

我有以下要求:如何获取列值的新行Oracle 10g中

Emp表已如以下3 columns

Id , Name and programming

Id Name Programming 
-- ---- --------------- 
1 Raju Java,Plsql,sql 
2 Kamal C,C++,Java 
------------------------- 

我需要下面的输出如下:

Id  Name     Programming 
-------------------------------------------- 
1   Raju      Java 
            plsql 
            sql 
2   kamal      c 
            c++ 
            Java. <code> 
------------------------------------------------   

Id1NameRaja那么编程为Java, 下一行应该not是任何value for id and Name但 为programming应该有PLSQL和下一行也同样没有价值。

对于IdName然后编程它应该是Sql

任何人都可以建议我获得上述格式的代码? 预先感谢您。

回答

0

使用函数来创建从昏迷分隔的字符串集合:

1)创建的类型;

CREATE OR REPLACE TYPE "TNA_STRMANIPTYPE" as table of varchar2(4000) 
/

2)

CREATE OR REPLACE function str_manipulation 
    (p_str in varchar2, 
    p_delim in varchar2 default ',') 
    return tna_strManipType 
    AS 
    v_str long default p_str || p_delim; 
    v_n number; 
    v_data tna_strManipType := tna_strManipType(); 
    BEGIN 
     LOOP 
      v_n := instr(v_str, p_delim); 
      exit when (nvl(v_n,0) = 0); 
      v_data.extend; 
      v_data(v_data.count) := ltrim(rtrim(substr(v_str,1,v_n-1))); 
      v_str := substr(v_str, v_n+1); 
     END LOOP; 
     RETURN v_data; 
END; 

现在你可以使用这个集合作为一个表:

SELECT column_value 
    FROM TABLE(str_manipulation('Java,Plsql,sql')) 

,并使用此功能,并将其强制转换为一个表,你将需要处理其余部分为您的需求:)