2012-04-05 25 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')) 

,並使用此功能,並將其強制轉換爲一個表,你將需要處理其餘部分爲您的需求:)