2017-02-22 12 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)として取得され、iは、カーソルデータに基づいて、以下のように動的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

どのようにあなたが参加する条件として使用する列を知っていますか?あなたは列名に頼り、いつも同じ名前の列に参加できますか?また、あなたのカーソルが固められ、開かれた方法を投稿してください...人々があなたの出発点を理解できるようにしてください。 – Aleksej

答えて

1

私は右のそれを理解していれば、あなたはCOLUMN2列によって接合されたCOLUMN3テーブルから選択column1の値を求めています。

それはエレガントではありませんが、動作するはずです:

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

関連する問題