sql - 获取查询结果的列名 Oracle SQL
问题描述
我需要一个查询来获取另一个查询结果的列名。另一个查询可以是任何东西——我不能对它做出任何假设,但它通常是一些SELECT
陈述。
例如,如果我有这张桌子Members
Id | Name | Age
---|------|----
1 | John | 25
2 | Amir | 13
而这个SELECT
说法
SELECT Name, Age FROM Members
那么我试图写的查询的结果将是
Name
Age
在 SQL Server 中,有一个函数 - sys.dm_exec_describe_first_result_set
- 可以执行此操作,但我在 Oracle 中找不到等效函数。
我尝试使用这个答案,但由于权限问题我不能使用语句,并且出于同样的原因CREATE TYPE
我可能不能使用语句。CREATE FUNCTION
解决方案
假设您有这样的查询:
select *
from (select deptno, job, sal from scott.emp)
pivot (avg(sal) as avg_sal for job in
('ANALYST' as analyst, 'CLERK' as clerk, 'SALESMAN' as salesman)
)
order by deptno
;
这会产生结果:
DEPTNO ANALYST_AVG_SAL CLERK_AVG_SAL SALESMAN_AVG_SAL
---------- --------------- ------------- ----------------
10 1300
20 3000 950
30 950 1400
注意列名(如)——它们在查询中的任何地方ANALYST_AVG_SAL
都没有完全以这种形式出现!它们由两个独立的部分组成,并用下划线放在一起。
现在,如果您被允许创建视图(请注意,这不会在您的数据库中创建任何数据 - 它只是保存查询的文本),您可以这样做:
创建视图(只需将第一行代码添加到我们已有的内容中):
create view q201028_vw as
select *
from (select deptno, job, sal from scott.emp)
pivot (avg(sal) as avg_sal for job in
('ANALYST' as analyst, 'CLERK' as clerk, 'SALESMAN' as salesman)
)
order by deptno
;
(这里我假设你有一些方法来识别查询,一个 id like Q201028
,并在视图名称中使用它。这并不重要,除非你需要经常这样做并且同时处理大量查询。)
然后,您可以通过查询*_TAB_COLUMNS
. 例如:
select column_id, column_name
from user_tab_columns
where table_name = 'Q201028_VW'
order by column_id
;
COLUMN_ID COLUMN_NAME
---------- --------------------
1 DEPTNO
2 ANALYST_AVG_SAL
3 CLERK_AVG_SAL
4 SALESMAN_AVG_SAL
现在,如果您不需要它用于其他任何事情,您可以删除该视图。
顺便说一句:在 Oracle 中,在数据库中“保存”查询的“通常”方式是创建视图。如果它们已经存在于您的数据库中,那么您所需要的就是我向您展示的最后一步。否则,“其他查询”(您需要为其查找列)是否首先来自?
推荐阅读
- javascript - 数组方法过滤器不删除项目 React Redux
- google-app-engine - 在 gcloud 应用引擎中部署 Flask-admin 模块时出现问题
- c++ - 链表对于类似的指针分配有不同的行为
- node.js - 如何在 node-rfc 中获取 RFC 模块的参数?
- google-chrome - Snapchat一次下载所有记忆
- ios - 使用自定义 UIBazierPath 快速遮罩图像
- java - 如何在java中以以下格式获取日期和时间?
- react-native - 如何在 react-native-pell-rich-editor 中隐藏键盘而不失去焦点?
- amazon-web-services - 如何使用ansible终止属于同一安全组的多个ec2实例?
- python - 有没有更快更有效的方法来保存 python 字典?