加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在Oracle的select语句中使用对象类型

发布时间:2020-12-12 06:28:42 所属栏目:MsSql教程 来源:网络整理
导读:我有一个函数返回一个有3个值的对象.有没有办法从select语句调用该函数并使每个值成为不同的列?我可以把它分成3个函数,但是这些值是相关的,所以我想把它作为性能原因保留. (因此oracle不必为查询中的每一行调用3个非常相似的复杂函数.) 因此对于: create ty
我有一个函数返回一个有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

有没有办法在Oracle 10g中做这样的事情,还是有更好的方法来解决这个问题?

解决方法

问题中的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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读