Oracle:如何内省一个视图?

Oracle: How can I introspect a view?

如何在 Oracle 中内省视图?例如,如果我有

create view v as select foo, bar from baz

我想知道 foobar 是选择的第一列和第二列。

您也可以使用 all_tab_columns 查看。所以前两列视图 v 将类似于:

SELECT *
  FROM all_tab_columns
 WHERE TABLE_NAME = 'V' AND column_id IN (1, 2);

然后你可以询问特定的列:

 SELECT COUNT(*) TOTAL
  FROM all_tab_columns
 WHERE TABLE_NAME = 'V' AND (table_name,column_id) IN (('FOO',1), ('BAR',2));

如果总计为2,则表示foobar是选择的第一列和第二列。您可以使用案例或解码使其更具可读性:

SELECT CASE WHEN TOTAL = 2 THEN 1 ELSE 0 END RESULT FROM
(SELECT COUNT(*) TOTAL
      FROM all_tab_columns
     WHERE TABLE_NAME = 'V' AND (table_name,column_id) IN (('FOO',1), ('BAR',2)));