Não consigo dar um SELECT na PL/SQL Table que minha function retorna. Segue o código da package:
Package SMP_RESULT_CONSOLIDADO_UNIDADE IS
FUNCTION SP_RESULT_CONSOLIDADO
(ano IN VARCHAR, grupo IN VARCHAR DEFAULT NULL, unidade IN VARCHAR DEFAULT NULL)
RETURN SMP_RESULT_CONSOLIDADO_UNIDADE.tab_resultado;
TYPE r_resultado IS RECORD(
codigo fb_res_gerencial.codigo%TYPE
,descricao fb_res_gerencial.GERENCIAL%TYPE
,cdmaster fb_res_gerencial.codigo%TYPE
,dsmaster fb_res_gerencial.GERENCIAL%TYPE
,m1 FBG_RES_CONTA.VALOR%TYPE
,m2 FBG_RES_CONTA.VALOR%TYPE
,m3 FBG_RES_CONTA.VALOR%TYPE
,m4 FBG_RES_CONTA.VALOR%TYPE
,m5 FBG_RES_CONTA.VALOR%TYPE
,m6 FBG_RES_CONTA.VALOR%TYPE
,m7 FBG_RES_CONTA.VALOR%TYPE
,m8 FBG_RES_CONTA.VALOR%TYPE
,m9 FBG_RES_CONTA.VALOR%TYPE
,m10 FBG_RES_CONTA.VALOR%TYPE
,m11 FBG_RES_CONTA.VALOR%TYPE
,m12 FBG_RES_CONTA.VALOR%TYPE
,valor_ano FBG_RES_CONTA.VALOR%TYPE
);
TYPE tab_resultado IS TABLE OF r_resultado INDEX BY BINARY_INTEGER;
END;
Package Body SMP_RESULT_CONSOLIDADO_UNIDADE
IS
FUNCTION SP_RESULT_CONSOLIDADO
(ano IN VARCHAR, grupo IN VARCHAR DEFAULT NULL, unidade IN VARCHAR DEFAULT NULL)
RETURN SMP_RESULT_CONSOLIDADO_UNIDADE.tab_resultado
IS
str VARCHAR2(3000);
p_rc SMP_RESULT_CONSOLIDADO_UNIDADE.tab_resultado;
--p_rc_row SMP_RESULT_CONSOLIDADO_UNIDADE.r_resultado;
TYPE cur_type IS REF CURSOR;
c_str cur_type;
i NUMBER:=0;
codigo fb_res_gerencial.CODIGO%TYPE;
descricao fb_res_gerencial.GERENCIAL%TYPE;
cdmaster fb_res_gerencial.CODIGO%TYPE;
dsmaster fb_res_gerencial.GERENCIAL%TYPE;
m1 FBG_RES_CONTA.VALOR%TYPE;
m2 FBG_RES_CONTA.VALOR%TYPE;
m3 FBG_RES_CONTA.VALOR%TYPE;
m4 FBG_RES_CONTA.VALOR%TYPE;
m5 FBG_RES_CONTA.VALOR%TYPE;
m6 FBG_RES_CONTA.VALOR%TYPE;
m7 FBG_RES_CONTA.VALOR%TYPE;
m8 FBG_RES_CONTA.VALOR%TYPE;
m9 FBG_RES_CONTA.VALOR%TYPE;
m10 FBG_RES_CONTA.VALOR%TYPE;
m11 FBG_RES_CONTA.VALOR%TYPE;
m12 FBG_RES_CONTA.VALOR%TYPE;
valor_ano FBG_RES_CONTA.VALOR%TYPE;
BEGIN
str := 'SELECT GIGANTE';
OPEN c_str FOR str;
LOOP
FETCH c_str INTO codigo,descricao,cdmaster,dsmaster,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,valor_ano;
EXIT WHEN c_str%NOTFOUND;
i := i +1;
p_rc(i).codigo := codigo;
p_rc(i).descricao := descricao;
p_rc(i).cdmaster := cdmaster;
p_rc(i).dsmaster := dsmaster;
p_rc(i).m1 := m1;
p_rc(i).m2 := m2;
p_rc(i).m3 := m3;
p_rc(i).m4 := m4;
p_rc(i).m5 := m5;
p_rc(i).m6 := m6;
p_rc(i).m7 := m7;
p_rc(i).m8 := m8;
p_rc(i).m9 := m9;
p_rc(i).m10 := m10;
p_rc(i).m11 := m11;
p_rc(i).m12 := m12;
p_rc(i).valor_ano := valor_ano;
--PIPE ROW(p_rc(i));
END LOOP;
RETURN p_rc;
END;
END;
Se eu faço assim:
SELECT * FROM TABLE(smp_result_consolidado_unidade.sp_result_consolidado('2007','',''))
Já tentei usar CAST, MULTISET, mas nada funciona. E agora? rs
Obridgado à todos!