Oracle从列中名称在另一个表中可用的表中选择所选列

时间:2014-01-14 08:02:05

标签: sql oracle

让我举个例子:

假设我有一个表TableA(Col1, Col2, Col3, Col4, Col5)

我有另一个TableB表,它们是需要获取的TableA列名称的条目,例如Col2 and Col5

现在我想编写一个SQL查询,它只会获取TableB中定义的TableA列。

1 个答案:

答案 0 :(得分:1)

这是一个开始。

我们的想法是将column_names的连接列表构建为varchar

'col1, col2, col3, col4'

并在动态sql查询中使用它。

declare 
column_list xmltype;
column_names varchar(10000);

begin

SELECT 
          XMLAGG (XMLELEMENT (e, t1.column_name || ',')).EXTRACT ('//text()')
          column_name
  into column_list
  FROM all_tab_cols t1
  where t1.table_name = 'TABLEA'
  and exists (select null 
              from TableB
              where t1.column_name = <the field for the column_name in tableB>);

column_names := RTRIM(column_list.getClobVal(), ',');

--this will just display the sql query, you'll need to execute it to get your results with EXECUTE IMMEDIATE
dbms_output.put_line( 'SELECT '||column_names||' from TableA');
end;