我有一个函数返回一个有3个值的对象.有没有办法从select语句调用该函数并使每个值成为不同的列?我可以把它分成3个函数,但是这些值是相关的,所以我想把它作为性能原因保留. (因此oracle不必为查询中的每一行调用3个非常相似的复杂函数.)
因此对于:
create type test_obj is object ( a NUMBER,b NUMBER,c NUMBER); create or replace function test_func ( pinput NUMBER) return test_obj as begin return test_obj(0,0); end test_func;
我希望能够从select语句调用test_func,但是a,b和c是不同的列,而不是多次调用该函数.我想也许是这样的,但它不起作用:
select iv.col1,iv.col2,iv.func_data.a,iv.func_data.b,iv.func_data.c from (select mt.col1,mt.col2,test_func(mt.input) as func_data from my_table mt) iv
解决方法
问题中的select语句将起作用.它失败了因为我没有为内联视图添加别名.
出于某种原因,这将有效:
select iv.func_data.a,iv.func_data.c from (select test_func(mt.input) as func_data from my_table mt) iv
但这不会:
select func_data.a,func_data.b,func_data.c from (select test_func(mt.input) as func_data from my_table mt)