2012-04-05 4 views
-1

나는 다음과 같은 요구 사항이 있습니다오라클 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, 이다.

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

이 기능을 사용하여 테이블에 캐스팅, 당신은 처리해야합니다 귀하의 필요에 맞게 삽입 부분의 나머지 부분 :

관련 문제