我有返回列名的函数,我试图使用列名作为select语句的一部分,但我的结果是作为列名而不是值
FUNCTION返回列名:
get_col_name(input1, input2)
可以将此查询用于表格 -
中列的结果SELECT GET_COL_NAME(input1,input2) FROM TABLE;
答案 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来测试代码。