Скажем, у меня есть собственный тип данных, который имеет несколько членов.Например:
create type myType as object(
field1 number,
field2 varchar2(50),
field3 varchar2(25)
);
Теперь, если у меня есть функция, которая возвращает myType
и помещает ее, скажем, в оператор select
, Oracle вернет что-то вроде:
select myTypeFunction() from dual;
> myTypeFunction()
> -------------------------------------------------
> schemaowner.myType(1,'something','another thing')
Есть ли общий способ, которым я могу разделить эти три (в этом примере) поля на их собственные столбцы;поэтому в этом случае я хотел бы вернуть:
> field1 field2 field3
> --------------------------------
> 1 something another thing
Я знаю, что это возможно, вызывая функцию несколько раз.Например:
select myTypeFunction().field1,
myTypeFunction().field2,
myTypeFunction().field3
from dual;
Или, вызвав функцию один раз в подзапросе (или, аналогично, используя тип таблицы):
select x.y.field1, x.y.field2, x.y.field3
from (select myTypeFunction() y from dual) x;
-- or, where myTypeFunction has been modified to return a table of myType:
select field1,field2,field3 from table(myTypeFunction());
Однако все эти способы кажутся грязными инеэффективный - последний вариант, возможно, выглядит наиболее привлекательным, за исключением альтернатив - поэтому я бы предпочел избегать их, если это возможно.Более того, я считаю, что ни один из этих способов не сработал бы, если бы у функции были параметры, которым были переданы значения из других источников;например:
select x.field1, x.field2, x.field3
from lookupTable alpha,
table(anotherTypeFunction(alpha.id)) x;
или более сложное соединение, где anotherTypeFunction
, очевидно, возвращает различные значения, основанные на его параметрах.(Хотя я не очень уверен в этом!)
Спасибо:)