Cursor

Hola, se que tal vez esta pregunta sea muy tonta, pero estoy iniciando con Oracle, estoy tratando de declarar un cursor pero me marca un error, este es mu código:
Declare cursor registro is
SELECT VOUCHER_NO, SUPPLIER_NUMBER, ACTUAL_CURR, BOOK_CURRENCY, GROSS_AMT, PO_TERMS, INVOICE_DATE
FROM FACTURAS_DETAIL;
OPEN REGISTRO;
FOR I IN 1..5 LOOP
FETCH REGISTRO INTO FACTURA, DUNN, MONEDA_ORIGINAL,
MONEDA_PAGO, MONTO_TOT, TERMINOS, FECHA_FACTURA;
EXIT WHEN REGISTRO%NOTFOUND;
INSERT INTO EF.EF_FACTURAS_DETAIL1 (NUM_FACTURA) VALUES (FACTURA);
COMMIT;
END LOOP;
CLOSE REGISTRO;
Se que se ve muy feo, pero espero que puedas ayudarme, gracias.

1 respuesta

Respuesta
1
Lo que te falta es declarar las variables a las cuales les haces FETCH y además debes procesar el código dentro de un bloque BEGIN .. END;
Tu caso sería algo como esto:
DECLARE FACTURA NUMBER(10);
DUNN CHAR(3);
MONEDA_ORIGINAL NUMBER(18);
MONEDA_PAGO NUMBER(18);
MONTO_TOT NUMBER(18);
TERMINOS CHAR(20);
FECHA_FACTURA DATE;
CURSOR REGISTRO IS
SELECT VOUCHER_NO, SUPPLIER_NUMBER, ACTUAL_CURR, BOOK_CURRENCY, GROSS_AMT, PO_TERMS, INVOICE_DATE
FROM FACTURAS_DETAIL;
Begin
OPEN REGISTRO;
FOR I IN 1..5
LOOP
FETCH REGISTRO INTO FACTURA, DUNN, MONEDA_ORIGINAL,
MONEDA_PAGO, MONTO_TOT, TERMINOS, FECHA_FACTURA;
EXIT WHEN REGISTRO%NOTFOUND;
INSERT INTO EF.EF_FACTURAS_DETAIL1 (NUM_FACTURA) VALUES (FACTURA);
COMMIT;
END LOOP;
CLOSE REGISTRO;
END;
/
OJO: Los tipos de las variables los debes colocar tú, yo sólo te estoy poniendo un ejemplo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas