Estou usando pipelined para retornar resultados de queries que estou montando aqui e funciona tudo certinho com um tipo objeto(ROWS) e um tipo tabela(TABLE OF ROWS)
Porém, como fazer um pipelined para selects quando as colunas são dinâmicas? Vou mostrar um exemplo:
Function FN_RESULT_ACUMULADO
( unidade IN VARCHAR,
anoInicial IN NUMBER,
anoFinal IN NUMBER)
RETURN NEWAGE.TP_TABLE_RES_ACUMULADO PIPELINED
IS
str VARCHAR2(3000);
strGeral VARCHAR2(32000);
p_rc_row TP_ROW_RES_ACUMULADO := TP_ROW_RES_ACUMULADO(NULL,NULL,NULL,NULL,NULL,NULL);
TYPE cur_type IS REF CURSOR;
c_str cur_type;
BEGIN
str := 'SELECT COLUNA1, COLUNA2';
FOR i IN anoInicial..anoFinal
LOOP
str := str || ' ,SUM(CASE WHEN SUBSTR(X.MESANO,-4,4)='''||i||
''' THEN X.VALOR) ELSE NULL END) AS A'||i;
END LOOP;
' FROM TABELA'||
OPEN c_str FOR str;
LOOP
FETCH c_str INTO
p_rc_row.COLUNA1,
p_rc_row.COLUNA2,
p_rc_row.a1, p_rc_row.a2, ....--E AGORA??????????????????
EXIT WHEN c_str%NOTFOUND;
PIPE ROW(p_rc_row);
END LOOP;
RETURN;
END;
Valeu pela atenção!!