有一种从给定的sql查询中获取列标题的简单方法。
所以从以下几点开始:
select name, dob, trunc((sysdate-dob)/365.25) age, address "Persons address" from persons
一个人会得到:
NAME
DOB
AGE
Persons address
答案 0 :(得分:0)
除非将别名保存在数据库中,否则无法直接显示别名,但我们可以通过如下所示的select语句创建表格
create table persons_temp as
select name, dob, trunc((sysdate-dob)/365.25) age, address "Persons address" from persons
然后我们可以查询数据字典表user_tab_columns,如
select column_name from user_tab_columns where table_name = 'PERSONS_TEMP'
希望这会对你有所帮助。
答案 1 :(得分:0)
TOAD和其他工具和环境可以显示列标题,因为可以在解析语句后检索列信息,这在执行时完成。
根据您的环境,您可以编写代码来调用查询的解析,然后解析的语句将是一个对象,其中包含名称和数据类型以及长度作为属性的列对象集合。在许多支持准备和执行SQL语句的编程语言中,这是可能的。
在PL / SQL中,您还可以使用包DBMS_SQL解析语句并检索列信息。看一下这里的文档: https://docs.oracle.com/database/121/ARPLS/d_sql.htm#ARPLS68199(向下滚动到示例8。)
简化了示例8的修改,只提供了您需要的列名称:
declare
c number;
col_cnt integer;
rec_tab dbms_sql.desc_tab;
begin
c := dbms_sql.open_cursor;
dbms_sql.parse(c, q'[SELECT 'a' col1, 3 "Col2" FROM dual]', dbms_sql.native);
dbms_sql.describe_columns(c, col_cnt, rec_tab);
for j in 1..col_cnt loop
dbms_output.put_line(rec_tab(j).col_name);
end loop;
dbms_sql.close_cursor(c);
end;
/
这将输出(如果你已经启用了dbms_output)以下内容:
COL1
Col2
如果您在文档中看到示例8,则可以看到其他列信息也可用,例如数据类型,长度,精度等。