Sql 从查询返回列名的表中选择特定列的数据

Sql 从查询返回列名的表中选择特定列的数据,sql,oracle,Sql,Oracle,我写了两个独立的查询 一, 二, 第一个查询返回所有列的名称,但我希望避免的列除外。第二个返回表中所有列的数据。 是否有某种方法可以合并这些查询,以便仅从第二个查询(从第一个查询返回)中选择这些列的数据 提前感谢您将不得不为此BTW使用动态SQL,我取消了USER_TABLES查询的子选择-这是不必要的: var cur refcursor / declare v_stmt varchar2(4000); begin v_stmt := 'SELECT '; for cur

我写了两个独立的查询

一,

二,

第一个查询返回所有列的名称,但我希望避免的列除外。第二个返回表中所有列的数据。 是否有某种方法可以合并这些查询,以便仅从第二个查询(从第一个查询返回)中选择这些列的数据


提前感谢

您将不得不为此BTW使用动态SQL,我取消了USER_TABLES查询的子选择-这是不必要的:

var  cur refcursor
/
declare
  v_stmt varchar2(4000);
begin
  v_stmt := 'SELECT ';  
  for cur in (
    SELECT COLUMN_NAME
    FROM ALL_TAB_COLUMNS
    WHERE TABLE_NAME =
       'MY_TABLE'
    AND COLUMN_NAME NOT IN ('AVOID_COLUMN')
  ) 
  loop
    v_stmt := v_stmt || cur.column_name || ',';
  end loop;
  -- get rid of trailing ','
  v_stmt := regexp_replace(v_stmt, ',$', '');

  v_stmt := v_stmt || ' from my_table MT WHERE MT.COL1 = ''1''';
  dbms_output.put_line(v_stmt);
  open :cur for v_stmt;
end; 

谢谢你的努力,弗兰克。然而,我希望在sql中是否有任何方法可以完全做到这一点?@Rohan:对不起,但我必须问:你不能简单地定义一个视图吗?我同意阿基米德的观点-视图将是最简单的解决方案。除此之外-否,您不能在静态SQL中执行此操作,因为您要选择的列列表不能更改;因此,您必须动态地创建语句。但是为什么不想使用PL/SQL呢?我试着用这种方式进行查询,以便得到一个显示列的查询,但不显示我想要避免的列。通常,我们必须明确命名要显示的列—只需使用一个视图—创建视图v_my_view作为从my_表中选择的视图,并对该视图进行查询。查看我对今天上午提出的一个非常类似问题的回答:

    SELECT *
      FROM MY_TABLE MT
     WHERE MT.COL1 = '1'
var  cur refcursor
/
declare
  v_stmt varchar2(4000);
begin
  v_stmt := 'SELECT ';  
  for cur in (
    SELECT COLUMN_NAME
    FROM ALL_TAB_COLUMNS
    WHERE TABLE_NAME =
       'MY_TABLE'
    AND COLUMN_NAME NOT IN ('AVOID_COLUMN')
  ) 
  loop
    v_stmt := v_stmt || cur.column_name || ',';
  end loop;
  -- get rid of trailing ','
  v_stmt := regexp_replace(v_stmt, ',$', '');

  v_stmt := v_stmt || ' from my_table MT WHERE MT.COL1 = ''1''';
  dbms_output.put_line(v_stmt);
  open :cur for v_stmt;
end;