-1

次の要件があります。

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>
------------------------------------------------        

The Idis1と the NameisRajaの場合、プログラミングは is ですJava。次の行にはnotanyvalue for id and Nameprogrammingあるはずですが、Plsql があり、次の行にも同じ値がありません。

プログラミングの場合は、 である必要がIdあります。NameSql

上記の形式を取得するためのコードを誰かに提案できますか? 前もって感謝します。

4

1 に答える 1

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'))

この関数を使用してテーブルにキャストすると、必要に応じて残りの挿入部分を処理する必要があります:)

于 2012-04-09T12:52:28.847 に答える