sql - Pl/SQL- 从查询中获取列名

标签 sql oracle plsql

我在 Oracle 数据库 11g 中使用 Pl/SQL。

我正在编写一个将 select 语句作为参数 (varchar2) 的函数。该函数使用 for 循环遍历行并将格式应用于特定列,并输出整个内容。基本上,我需要某种方法来获取列名,以便我可以将它们显示在顶部。我知道有多种方法可以对表执行此操作,但是由于传入了此查询,因此可能尚未选择所有列,可能已使用别名等。

有没有办法可以从此查询中选择列名?
理想情况下是这样的:select column_names from (subquery)

最佳答案

我相信你可以使用 DESCRIBE_COLUMNS 来做到这一点。只需传入游标和其他必需的参数。

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sql.htm#i1026120

declare
    v_sql varchar2(32767) := 'select 1 column1, 2 column2 from dual';
    v_cursor_id integer;
    v_col_cnt integer;
    v_columns dbms_sql.desc_tab;
begin
    v_cursor_id := dbms_sql.open_cursor;
    dbms_sql.parse(v_cursor_id, v_sql, dbms_sql.native);
    dbms_sql.describe_columns(v_cursor_id, v_col_cnt, v_columns);

    for i in 1 .. v_columns.count loop
        dbms_output.put_line(v_columns(i).col_name);
    end loop;

    dbms_sql.close_cursor(v_cursor_id);
exception when others then
    dbms_sql.close_cursor(v_cursor_id);
    raise;
end;
/

Output:
COLUMN1
COLUMN2

关于sql - Pl/SQL- 从查询中获取列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18020060/

相关文章:

sql - Microsoft Access-案例查询

c# - 尝试更新记录时出现 AngularJS 错误

python - 将 Oracle Instant 客户端安装到 Python cx_Oracle 的 Docker 容器中

sql - Oracle 中的 TO_NUMBER 函数出现奇怪的问题

sql - 根据同一表中的其他数据验证插入的数据 (Oracle)

java - 使用JAVA从Oracle数据库读取网络文件

mysql - 带日期和限制的查询(DQL 中可选)

c# - 我将如何在一列数据库设计中创建多个类型ID

sql - 如何创建虚拟列并在连接后填充数组?

java - 如何从 plsql 中的存储过程获取 java 代码中的结果集