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

Idis1和 the isName然后Raja编程是Java,在下一行应该not有任何value for id and Nameprogramming应该有 Plsql 并且在下一行也同样没有价值。

对于编程IdName它应该是Sql.

谁能建议我获得上述格式的代码?先感谢您。

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