2017-02-22 4 views
0

아래와 같이 동적 임시 테이블이 있습니다. 가정,Oracle : SQL 동적 커서 문

테이블 이름 : TB_EMP_TEMP_TABLE

Column1 | column2  | column3 
Emp_NM | EMP_ID  |TB_EMP_DTLS 
Emp_Adr | EMP_ID  |TB_EMP_DTLS 
Emp_Sal | EMP_ID  |TB_EMP_OTHER 

상기 데이터는 Cursor(Emp_cursor)으로 검색되고 난 커서 데이터에 기초하여 다음과 같이 동적 SQL 쿼리를 구축 할 필요가있다.

예상 출력 : 내가 PLSQL/커서 개념을 광범위하게했다 havent 한

SELECT TB_EMP_DTLS.EMP_NM,TB_EMP_DTLS.EMP_Adr,TB_EMP_OTHER.EMP_SAL 
FROM TB_EMP_DTLS,TB_EMP_OTHER 
WHERE TB_EMP_DTLS.EMP_ID=TB_EMP_OTHER.EMP_ID 

. 예상 출력을 얻기 위해 커서를 반복 할 수있는 방법. 내가 제대로 이해하면

+0

가 어떻게 조인 조건으로 사용할 열을 알 수 있습니까? 열 이름에 의존하면서 항상 같은 이름의 열에 가입 할 수 있습니까? 또한, 귀하의 커서가 cedined, 열리는 방법을 게시하십시오 ... 그래서 사람들이 당신의 출발점을 이해할 수 있도록 – Aleksej

답변

1

, 당신은 3 열에서 2 열 열 합류 테이블을 선택 , 컬럼 값을합니다.

그것은 우아한 아니지만 작동합니다 :

select listagg(v, ' ') within group (order by n asc) my_cursor from (
    with 
     tb as (select distinct column3 val from tb_emp_temp_table), --tables 
     sl as (select distinct column3||'.'||column1 val from tb_emp_temp_table), --selected columns 
     pr as (select distinct column3||'.'||column2 val from tb_emp_temp_table) --predicates 
    select 1 n, 'SELECT' v from dual 
    union 
    select 2 n, listagg(val, ', ') within group (order by val) v from sl 
    union 
    select 3 n, 'FROM' v from dual 
    union 
    select 4 n, listagg(val, ', ') within group (order by val) v from tb 
    union 
    select 5 n, 'WHERE' v from dual 
    union 
    select 6 n, listagg(pra.val||'='||prb.val, ' AND ') within group (order by pra.val) v from pr pra, pr prb where pra.val != prb.val 
) 
+0

대단히 감사합니다 :) – Karthik