Oracle 甲骨文:我如何反思一个观点?

Oracle 甲骨文:我如何反思一个观点?,oracle,view,introspection,Oracle,View,Introspection,如何在Oracle中反思视图?例如,如果我有 create view v as select foo, bar from baz 我想知道foo和bar是选择的第一列和第二列。您也可以使用所有的选项卡列查看。因此视图v的前两列类似于: SELECT * FROM all_tab_columns WHERE TABLE_NAME = 'V' AND column_id IN (1, 2); 然后,您可以询问特定列: SELECT COUNT(*) TOTAL FROM all_ta

如何在Oracle中反思视图?例如,如果我有

create view v as select foo, bar from baz

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

您也可以使用所有的选项卡列查看。因此视图
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,则表示选择的第一列和第二列为
foo
bar
。您可以使用case或decode使其更具可读性:

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)));