2012-04-05 11 views
-1

私は、次の要件がありますのOracle 10gで改行の列値を取得する方法

Empテーブル

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

私は次の出力を必要とする以下の3 columns

Id , Name and programmingを示しているように以下:

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

Id1であり、NameRaja次に、プログラミングはnotprogrammingための任意value for id and Nameしかし はない値PLSQLと次の行にも同じあるはずが存在すべきである次の行にJava、 あります。

IdおよびNameの場合、プログラミングの場合は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')) 

と、この機能を使用して、テーブルにそれをキャストし、あなたが処理する必要がありますあなたのニーズのための挿入部分の残りの部分:

関連する問題