Oracle:如何内省一个视图?
Oracle: How can I introspect a view?
如何在 Oracle 中内省视图?例如,如果我有
create view v as select foo, bar from baz
我想知道 foo
和 bar
是选择的第一列和第二列。
您也可以使用 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,则表示foo
和bar
是选择的第一列和第二列。您可以使用案例或解码使其更具可读性:
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)));
如何在 Oracle 中内省视图?例如,如果我有
create view v as select foo, bar from baz
我想知道 foo
和 bar
是选择的第一列和第二列。
您也可以使用 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,则表示foo
和bar
是选择的第一列和第二列。您可以使用案例或解码使其更具可读性:
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)));