gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:29:25 24 4
gpt4 key购买 nike

我有一个函数,它返回一个具有 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, 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 语句将起作用。它失败了,因为我没有为内联 View 包含别名。

出于某种原因,这将起作用:

select
iv.func_data.a,
iv.func_data.b,
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)

关于sql - 在 Oracle 的 select 语句中使用对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1589715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com