通过Oracle中的查询字符串获取列和别名的列表

问题描述 投票:1回答:1

我正在使用Pl / SQL和Oracle Database 11g。

我想通过查询字符串获取带别名的列列表。有一种方法可以使用dbms_sql.describe_columns2获取查询的所有列名,但只有我得到别名。

例如:

DECLARE
    l_cursor NUMBER := dbms_sql.open_cursor;
    l_ignore NUMBER;
    l_desc dbms_sql.desc_tab2;
    l_cnt NUMBER;
BEGIN
    dbms_sql.parse( l_cursor, 'select a.col1 column1, a.col2 column2 from table_test a', dbms_sql.native );
    dbms_sql.describe_columns2( l_cursor, l_cnt, l_desc );
    FOR i IN 1 .. l_cnt LOOP
        dbms_output.put_line(l_desc(i).col_name);
    END LOOP;
    dbms_sql.close_cursor( l_cursor );
END;
/

返回:

column1
column2

有没有办法在查询中使用别名获取值a.col1a.col2

oracle oracle11g
1个回答
1
投票

可以使用Rob van Wijk的自定义视图DBA_DEPENDENCY_COLUMNS检索SQL语句中使用的列名。

将视图安装为SYS和grant select on dba_dependency_columns to <your user>;

该视图仅适用于对象。在SELECT语句上创建一个VIEW,然后依赖项将可用。例如:

create table table_test(col1 number, col2 number);

create or replace view test_view as
select a.col1 column1, a.col2 column2 from table_test a;

select referenced_column
from sys.dba_dependency_columns
where owner = user
    and name = 'TEST_VIEW'
order by 1;

结果:

REFERENCED_COLUMN
-----------------
COL1
COL2

以上结果得到“列列表”。但你的部分回答也暗示你可能想要获得“列表达式”。这将是一个完全不同的任务,但是可能。解析SQL可能非常困难,因此它可能有助于准确解释您想要的内容以及您想要它的原因。

© www.soinside.com 2019 - 2024. All rights reserved.