我通过以下查询返回主键:
SELECT b.column_name
FROM all_constraints a, all_cons_columns b
WHERE a.constraint_name = b.constraint_name
AND a.table_name = 'tableX';
AND a.constraint_type = 'P'
...并且查询返回3行,例如
一个
乙
C
现在我想创建一个嵌套在上面查询中的查询,以创建另一个查询,如:
SELECT A, B, C
FROM tableY
所以A,B,C部分需要被查询替换。有任何想法吗? 我正在使用Oracle 11G。
答案 0 :(得分:1)
正如Ed和Mat建议的那样,这几乎肯定是通过EXECUTE IMMEDIATE
或一些输出查询的PL / SQL块来完成的。
对于必须在单个SQL语句中执行此操作的极少数情况,请尝试我的开源项目Method4。它允许您运行查询生成的查询。它比一般的SQL语句更强大,但更混乱,更慢,更虚伪。
--Sample schema:
drop table tablex;
create table tableX(A number, B number, C number, D varchar2(10),
constraint tableX_pk primary key (A,B,C));
insert into tableX values (1,2,3,'4');
--Query the primary key columns of a table.
select * from table(method4.dynamic_query(
q'[
--Query that returns a query.
SELECT
'select '||listagg(b.column_name,',') within group (order by column_name)||
' from '||a.table_name v_sql
FROM all_constraints a, all_cons_columns b
WHERE a.constraint_name = b.constraint_name
AND a.table_name = 'TABLEX'
AND a.constraint_type = 'P'
GROUP BY a.table_name
]'
));
--Results:
A B C
- - -
1 2 3