DECLARE
-- Record
TYPE rteste IS RECORD (ID number(10),
valor NUMBER(10,2));
-- Table
TYPE tteste IS TABLE OF rteste INDEX BY BINARY_INTEGER;
-- Recupera retorno
vretornofunc tteste;
-- Função que retorna Objeto
FUNCTION fretornatable
RETURN tteste
IS
vretorno tteste;
vindice PLS_INTEGER := 0;
BEGIN
--Popula Type
FOR x IN (SELECT *
FROM teste)
LOOP
vindice := vindice + 1;
vretorno(vindice).id := x.id;
vretorno(vindice).valor := x.valor;
END LOOP;
--
RETURN vretorno;
--
END fretornatable;
--
BEGIN
-- Chama função
vretornofunc := fretornatable;
-- Lê retorno
FOR z IN vretornofunc.first .. vretornofunc.last
LOOP
dbms_output.put_line('ID: '||vretornofunc(z).id||
'Valor: '||vretornofunc(z).valor);
END LOOP;
END;
/*
TABELA TESTE: ID NUMBER(10)
VALOR NUMBER(10,2)
*/
Qualquer coisa, manda pra gente.
Editado pela última vez por Trevisolli em Qui, 05 Mar 2009 8:35 am, em um total de 1 vez.
Também conhecidas como table functions.
Isso quer dizer que você pode usar um glorioso SELECT * FROM TABLE(minha_function(parametros)), pode criar uma view em cima dela, fazer joins e transformações incluindo dml, pode deixar a imaginação voar. Viva Oracle!