函数结果将在select语句中使用列名

时间:2017-08-01 18:02:33

标签: oracle function

我有返回列名的函数,我试图使用列名作为select语句的一部分,但我的结果是作为列名而不是值

FUNCTION返回列名:

get_col_name(input1, input2)

可以将此查询用于表格 -

中列的结果
SELECT GET_COL_NAME(input1,input2) FROM TABLE; 

1 个答案:

答案 0 :(得分:1)

有几种方法可以直接在SQL语句中运行动态SQL。应该避免这些技术,因为它们通常是复杂,缓慢和错误的。在此之前,尝试找到解决问题的另一种方法。

以下解决方案使用DBMS_XMLGEN.GETXML从动态创建的SQL语句生成XML,然后使用XML表处理来提取值。

这是在SQL中运行动态SQL的最简单方法,它只需要内置包。主要限制是列的数量和类型仍然是固定的。如果您需要一个返回未知数量列的函数,那么您需要更强大的功能,例如开源程序Method4。但是,这种级别的动态代码变得更加困难,只有在仔细考虑后才能使用。

示例架构

--drop table table1;
create table table1(a number, b number);
insert into table1 values(1, 2);
commit;

返回列名

的函数
create or replace function get_col_name(input1 number, input2 number) return varchar2 is
begin
    if input1 = 0 then
        return 'a';
    else
        return 'b';
    end if;
end;
/

示例查询和结果

select dynamic_column
from
(
    select xmltype(dbms_xmlgen.getxml('
        select '||get_col_name(0,0)||' dynamic_column from table1'
    )) xml_results
    from dual
)
cross join
xmltable
(
    '/ROWSET/ROW'
    passing xml_results
    columns dynamic_column varchar2(4000) path 'DYNAMIC_COLUMN'
);


DYNAMIC_COLUMN
--------------
1

如果您更改了函数的输入,则从B列中新值为2.使用此SQL Fiddle来测试代码。