从sql查询中提取标题

时间:2014-11-20 06:08:06

标签: sql oracle

有一种从给定的sql查询中获取列标题的简单方法。

所以从以下几点开始:

select name, dob, trunc((sysdate-dob)/365.25) age, address "Persons address" from persons

一个人会得到:

NAME
DOB
AGE
Persons address

2 个答案:

答案 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,则可以看到其他列信息也可用,例如数据类型,长度,精度等。