在oracle中,是否可以查询具有相同数据类型的列

时间:2015-09-17 16:23:56

标签: sql oracle oracle11g

我有几百个字段的桌子。我想得到数据类型为date的所有字段。是否有可能在oracle中写入这样的查询返回字段只包含某种数据类型?这是我的伪查询:

Select * from mytable 
where colum_datatype is date

同样,我想得到所有varchar2类型的字段。有可能这样做吗? 我可以手动找到所有日期字段并将它们放入查询中,但我只想知道是否有其他方法可以执行此操作。 谢谢!

2 个答案:

答案 0 :(得分:4)

您可以查询其中一个系统表/视图以获取列列表:

select column_name
from all_tab_cols
where owner = :owner and table_name = :table and data_type = 'DATE';

如果您需要一次性解决方案,只需聚合这些并插入一个SQL查询。您可以构造整个SQL查询:

select 'SELECT ' || listagg(column_name, ', ') within group (order by column_id) || ' FROM ' || :table
from all_tab_cols
where owner = :owner and table_name = :table and data_type = 'DATE';

您还可以将查询放入字符串并使用动态SQL(execute immediate)来运行查询。

答案 1 :(得分:2)

抱歉,vanilla SQL中不存在此类功能。您可以通过创建一个将游标返回到动态创建的SQL语句的PL / SQL函数来模拟此类功能。