Пожалуйста, обратите внимание, что я не знаком с .NET, так что я пишу это буквально на ваш вопрос «как я могу вернуть вложенное таблицу из хранимой процедуры в оракуле ". Я не уверен в том, что «потреблять в моем .net-клиенте» часть, так как я не уверен, что тип/тип возвращаемого типа записи может быть непосредственно использован в .net-коде.
Я провел некоторое исследование и узнал, что нет прямой поддержки типа записи в любом клиентском интерфейсе oracle. Что обычно делают люди, так это создать процедуру обертки вокруг возвращаемого типа таблицы из функции, чтобы преобразовать ее в курсор ref и использовать курсор ref в пользовательском коде.
CREATE OR REPLACE TYPE changes AS OBJECT(
col1 VARCHAR2(20),
col2 VARCHAR2(20),
col3 VARCHAR2(20)
);
CREATE OR REPLACE TYPE collection is table of changes;
CREATE OR REPLACE PACKAGE test_pkg AS
FUNCTION test_fn RETURN collection;
END test_pkg;
CREATE OR REPLACE PACKAGE BODY test_pkg
AS
FUNCTION test_fn RETURN collection AS
l_collection collection;
BEGIN
l_collection := collection();
l_collection.EXTEND;
l_collection(l_collection.LAST) := changes('Subhasis','Mukherjee','Male');
RETURN l_collection;
END test_fn;
END test_pkg;
SELECT * FROM table(test_pkg.test_fn)
col1 col2 col3
----------- ------------- --------------
Subhasis Mukherjee Male