У меня есть функция, которая возвращает объект, который имеет 3 значения. Есть ли способ вызвать эту функцию из оператора select и иметь ли каждое значение другой столбец? Я мог бы разбить его на 3 функции, но значения связаны, поэтому я хотел сохранить его как один из соображений производительности. (Так что оракул не должен вызывать 3 очень похожие сложные функции для каждой строки в запросе.)Использование типа объекта в операторе select в Oracle
Так для:
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;
Я хотел бы быть в состоянии назвать 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, или есть лучший способ решить эту проблему?
спасибо! это помогло мне. – filiprem
Проблема заключается просто в разрешении имен. Oracle всегда интерпретирует первую часть перед точкой в инструкции SELECT в виде табличного псевдонима или синонима/пакета в базе данных. Он также не проверяет все столбцы. Таким образом, вы должны полностью квалифицировать имя с помощью table_alias.column.attribute – Falco