Oracle:SQL动态游标语句

问题描述:

我有一个如下所示的动态临时表。对于假设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查询。

预期输出:

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 

我还没有上PLSQL /光标概念广泛的合作。游标如何循环以获得预期的输出。

+0

你怎么知道的连接条件要使用的列?你能依赖列名并且总是加入同名的列吗?另外,请张贴你的光标被打开,打开,...以便人们可以理解你的出发点 – Aleksej

如果我的理解对不对,你想从栏3选择通过COLUMN2列加入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