Estou com um problema/dúvida se alguém puder me ajudar ficarei muito agradecido.
Eu tenho um function que seu retorno é um CURSOR, mas pelo o que estou precisando fazer, eu estou trabalhando com TABLE RECORD.
Quero saber como eu posso passar esses dados da TABLE RECORD para um CURSOR.
Segue abaixo o código:
FUNCTION RETORNACFCDESC(...parametros...) RETURN TCURSOR IS
CURSOR_DESCRED_CFC TCURSOR;
TYPE MY_LISTA_REC IS RECORD(
CAMPO1 VARCHAR2(112),
CAMPO3 VARCHAR2(1000),
CAMPO2 VARCHAR2(1000));
TYPE A_LISTA IS TABLE OF MY_LISTA_REC INDEX BY BINARY_INTEGER;
LISTA A_LISTA;
CONTADOR NUMBER;
QTD_CATEG_A NUMBER;
QTD_CATEG_B NUMBER;
CREDENCIADO_FLAG NUMBER;
CATEGORIA_VEIC VARCHAR2(4);
MOTIVO_DESCREDENCIAMENTO VARCHAR2(300);
BEGIN
SELECT T.TB_VALOR_VARIAVEL
INTO QTD_MIN_CATEG_A
FROM TB_PARAMETROS_DO_SISTEMA T
WHERE T.TB_NOME_VARIAVEL = 'QTD_MIN_CATEG_A';
SELECT T.TB_VALOR_VARIAVEL
INTO QTD_MIN_CATEG_B
FROM TB_PARAMETROS_DO_SISTEMA T
WHERE T.TB_NOME_VARIAVEL = 'QTD_MIN_CATEG_B';
QTD_CATEG_A := 0;
QTD_CATEG_B := 0;
CONTADOR := 0;
FOR REG2 IN (SELECT CFC.DT_PESSOA_CFC,
VEIC.RE_VEI_PLACA PLACA,
CFC.TB_CFC_TIPO_EMPRESA TIPO_CFC
FROM TB_CFC CFC,
RE_VEICULO_ASSOCIACAO ASSOC,
RE_VEICULO VEIC
WHERE CFC.DT_PESSOA_CFC = ASSOC.DT_PESSOA_CFC
AND ASSOC.RE_VEI_PLACA = VEIC.RE_VEI_PLACA
AND UPPER(ASSOC.RE_VCF_SITUACAO) = 'S') LOOP
CATEGORIA_VEIC := PKG_VEICULO.RETORNA_CATEGCNH_VEI(REG2.PLACA);
IF CATEGORIA_VEIC = 'A' THEN
QTD_CATEG_A := QTD_CATEG_A + 1;
ELSIF CATEGORIA_VEIC = 'B' THEN
QTD_CATEG_B := QTD_CATEG_B + 1;
END IF;
-- VERIFICA CATEGORIA A
IF QTD_CATEG_A < TO_NUMBER(QTD_MIN_CATEG_A) THEN
CREDENCIADO_FLAG := CREDENCIADO_FLAG + 1;
MOTIVO_DESCREDENCIAMENTO := MOTIVO_DESCREDENCIAMENTO || 'CATEGORIA A MINIMO ' ||
QTD_MIN_CATEG_A|| ' VEICULO(S);';
END IF;
-- VERIFICA CATEGORIA B
IF QTD_CATEG_B < TO_NUMBER(QTD_MIN_CATEG_B) THEN
CREDENCIADO_FLAG := CREDENCIADO_FLAG + 1;
MOTIVO_DESCREDENCIAMENTO := MOTIVO_DESCREDENCIAMENTO||'CATEGORIA B MINIMO '||
QTD_MIN_CATEG_B|| ' VEICULO(S); ';
END IF;
LISTA(CONTADOR).CAMPO1 := REG2.DT_PESSOA_CFC;
LISTA(CONTADOR).CAMPO2 := CREDENCIADO_FLAG;
LISTA(CONTADOR).CAMPO3 := MOTIVO_DESCREDENCIAMENTO;
CONTADOR := CONTADOR + 1;
QTD_CATEG_A := 0;
QTD_CATEG_B := 0;
MOTIVO_DESCREDENCIAMENTO := NULL;
-- END;
END LOOP;
CONTADOR := 0;
IF CREDENCIADO_FLAG > 0 THEN
/**
AQUI EU IRIA INSERIR OS DADOS DO RECORD PARA O CURSOR E RETORNAR O CURSOR
**/
END IF;
/* LIMPANDO TABELAS DE MEMÓRIA */
LISTA.DELETE;
RETURN CURSOR_DESCRED_CFC;
END RETORNACFCDESC;