I have the following procedure:
create or replace PROCEDURE VERIFICAR_FACTURAS
(
DFECHA IN DATE ,TIPOUSUARIO IN VARCHAR2
)
AS
--definimos la bandera para determinar si existe algun error en los registros
bandera number(4) := 0;
--definimos una variable char para obtener los grupos de medicion
VGRUPOS VARCHAR2(30000):= NULL;
SIN_GRUPOS_MEDICION EXCEPTION;
SIN_FECHA EXCEPTION;
SIN_TIPO_CLIENTE EXCEPTION;
Numero_error NUMBER;
Mensaje_error VARCHAR2(100);
--Definimos el cursor
CURSOR c_facturas(VGRUPOSC VARCHAR2) IS
WITH detalle_factura_numerado
AS (SELECT RANK ()
OVER (PARTITION BY n_id_factura
ORDER BY n_id) AS secuencia,
N_ID_FACTURA , N_IMPORTE_BOB ,C_CREDITO_FISCAL , V_DESCRIPCION, n_cantidad
FROM ct_factura_detalle)
select CT_FACTURA.N_ID ID,V_RECORRIDO,
(SELECT case when CT_USUARIO.V_APELLIDO_PATERNO IS NOT NULL AND CT_USUARIO.V_APELLIDO_MATERNO IS NOT NULL
then RPAD(CT_USUARIO.V_APELLIDO_PATERNO || ' ' || CT_USUARIO.V_APELLIDO_MATERNO || ' ' || CT_USUARIO.V_NOMBRES,50,' ')
when CT_USUARIO.V_APELLIDO_PATERNO IS NOT NULL AND CT_USUARIO.V_APELLIDO_MATERNO IS NULL
then RPAD(CT_USUARIO.V_APELLIDO_PATERNO || ' ' || CT_USUARIO.V_NOMBRES,50,' ')
when CT_USUARIO.V_APELLIDO_PATERNO IS NULL AND CT_USUARIO.V_APELLIDO_MATERNO IS NOT NULL
then RPAD(CT_USUARIO.V_APELLIDO_MATERNO || ' ' || CT_USUARIO.V_NOMBRES,50,' ')
when CT_USUARIO.V_APELLIDO_PATERNO IS NULL AND CT_USUARIO.V_APELLIDO_MATERNO IS NULL
then RPAD(CT_USUARIO.V_NOMBRES,50,' ')
end
FROM CT_CONTRATO_CUENTA,CT_CONTRATO,CT_PROPIEDAD,CT_USUARIO
WHERE CT_CONTRATO_CUENTA.N_ID_CONTRATO = CT_CONTRATO.N_ID
AND CT_PROPIEDAD.N_ID = CT_CONTRATO.N_ID_PROPIEDAD
AND CT_USUARIO.N_ID = CT_PROPIEDAD.N_ID_USUARIO
AND CT_CONTRATO_CUENTA.N_ID_FACTURA = ct_factura.n_id
ORDER BY CT_CONTRATO_CUENTA.D_FECHA desc fetch first 1 row only) NOMBRE,
V_DIRECCION,V_NIT,V_CODIGO_MEDIDOR, V_CATEGORIA,D_FECHA_LECTURA_ACTUAL ,N_LECTURA_ACTUAL,
---RPAD(f1.V_DESCRIPCION,62 -LENGTH(to_char(round(f1.n_cantidad,0)))-3, ' ') ||
--round(f1.n_cantidad)
---
V_CONSUMO,f1.V_DESCRIPCION DESCRIPCION,f1.n_cantidad CANTIDAD,CT_FACTURA.V_PERIODO V_PERIODO,f1.N_IMPORTE_BOB MONTO_ITEM1,D_FECHA_EMISION,
D_FECHA_VENCIMIENTO, N_NUMERO_FACTURA,N_IMPORTE_DEUDA_BOB,N_IMPORTE_PERIODO_BOB,V_CUENTA,V_CODIGO_CONTROL,ct_dosificacion.d_fecha_limite FECHA_LIMITE,
ct_dosificacion.n_numero_autorizacion NUMERO_AUTORIZACION,
(select case when obtiene_municipio(CT_PROPIEDAD_DIVISION_GEO.N_ID_DIVISION_GEO) = 1
then 'SFC:01'
when obtiene_municipio(CT_PROPIEDAD_DIVISION_GEO.N_ID_DIVISION_GEO) = 2
then 'SFC:02'
else NULL
end
from ct_contrato_cuenta,ct_contrato,CT_PROPIEDAD_DIVISION_GEO
where ct_contrato.n_id = ct_contrato_cuenta.N_ID_CONTRATO
AND CT_PROPIEDAD_DIVISION_GEO.N_ID_PROPIEDAD = ct_contrato.N_ID_PROPIEDAD
AND n_id_factura = ct_factura.n_id
order by ct_contrato_cuenta.n_id fetch first 1 row only) CodigoSucursal,
(SELECT LPAD((SUM(N_IMPORTE_BOB))*100,9,0)
FROM CT_FACTURA_DETALLE
WHERE C_CREDITO_FISCAL = '1' AND CT_FACTURA_DETALLE.N_ID_FACTURA = ct_factura.n_id) ImpBaseCfiscal,
(SELECT RPAD(V_NOMBRE_FACTURA,50,' ')
FROM CT_CONTRATO_CUENTA,CT_CONTRATO
WHERE CT_CONTRATO_CUENTA.N_ID_CONTRATO = CT_CONTRATO.N_ID
AND CT_CONTRATO_CUENTA.N_ID_FACTURA = ct_factura.n_id
ORDER BY D_FECHA desc fetch first 1 row only) razonSocial
FROM CT_FACTURA
INNER JOIN ct_dosificacion ON ct_dosificacion.n_id = CT_FACTURA.n_id_dosificacion
LEFT JOIN detalle_factura_numerado f1 ON f1.n_id_factura = ct_factura.n_id AND f1.secuencia = 1,
(SELECT CT_FACTURA2.n_id COL1
FROM ct_lectura
INNER JOIN ct_ruta_asignacion ON ct_ruta_asignacion.n_id = ct_lectura.N_ID_RUTA_ASIGNACION
LEFT JOIN ct_factura CT_FACTURA2 ON CT_FACTURA2.V_PERIODO =TO_CHAR (TO_DATE(ct_lectura.N_MES || '/' || ct_lectura.N_ANIO,'mm/yyyy'),'MON/yyyy','NLS_DATE_LANGUAGE = SPANISH')
AND ct_lectura.N_CUENTA = CT_FACTURA2.v_cuenta
AND CT_FACTURA2.C_CODIGO_FACTURA_TIPO = 'MES'
WHERE ct_ruta_asignacion.n_id_cronograma_medicion_grupo IN (VGRUPOSC)
AND (CT_FACTURA2.n_id IS NOT NULL OR ct_lectura.c_estado = 7)
GROUP BY CT_FACTURA2.n_id) FACTURA_GRUPOS
where ct_factura.n_id = FACTURA_GRUPOS.COL1
order by V_RECORRIDO;
BEGIN
--dbms_output.put_line('LLEGA AQUI'|| 'TIPO USUARIO: ' || TIPOUSUARIO);
IF(DFECHA IS NULL) THEN
RAISE SIN_FECHA;
END IF;
IF(TIPOUSUARIO = 'GCLI') THEN
SELECT OBTENER_GRUPOS_MEDICION_GCLI(DFECHA) INTO VGRUPOS FROM DUAL;
END IF;
IF(TIPOUSUARIO = 'CLI') THEN
--dbms_output.put_line('HOLAS');
SELECT OBTENER_GRUPOS_MEDICION(DFECHA) INTO VGRUPOS FROM DUAL;
END IF;
IF(TIPOUSUARIO = ' ' OR TIPOUSUARIO IS NULL) THEN
RAISE SIN_TIPO_CLIENTE;
END IF;
IF VGRUPOS IS NULL THEN
RAISE SIN_GRUPOS_MEDICION;
END IF;
dbms_output.put_line('grupos: ' || VGRUPOS);
FOR registro IN c_facturas(VGRUPOS) LOOP
IF registro.V_RECORRIDO IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin recorrido');
bandera:=1;
EXIT;
END IF;
IF registro.NOMBRE IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin nombre');
bandera:=1;
EXIT;
END IF;
IF registro.V_DIRECCION IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin direccion');
bandera:=1;
EXIT;
END IF;
IF registro.V_NIT IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin nit');
bandera:=1;
EXIT;
END IF;
IF registro.V_CODIGO_MEDIDOR IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin codigo de medidor');
bandera:=1;
EXIT;
END IF;
IF registro.V_CATEGORIA IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin categoria');
bandera:=1;
EXIT;
END IF;
IF registro.D_FECHA_LECTURA_ACTUAL IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin fecha actual de lecturas');
bandera:=1;
EXIT;
END IF;
IF registro.N_LECTURA_ACTUAL IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin lectura actual');
bandera:=1;
EXIT;
END IF;
IF registro.DESCRIPCION IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin descripcion del item1');
bandera:=1;
EXIT;
END IF;
IF registro.CANTIDAD IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin cantidad del item1');
bandera:=1;
EXIT;
END IF;
IF registro.V_PERIODO IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin periodo');
bandera:=1;
EXIT;
END IF;
IF registro.MONTO_ITEM1 IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin monto del item1');
bandera:=1;
EXIT;
END IF;
IF registro.D_FECHA_EMISION IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin fecha de emision');
bandera:=1;
EXIT;
END IF;
IF registro.D_FECHA_VENCIMIENTO IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin fecha de vencimiento');
bandera:=1;
EXIT;
END IF;
IF registro.N_NUMERO_FACTURA IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin numero de factura');
bandera:=1;
EXIT;
END IF;
IF registro.N_IMPORTE_DEUDA_BOB IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin importe de deuda total');
bandera:=1;
EXIT;
END IF;
IF registro.N_IMPORTE_PERIODO_BOB IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin importe de deuda del periodo');
bandera:=1;
EXIT;
END IF;
IF registro.V_CUENTA IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y recorrido: ' || registro.V_RECORRIDO || ',' ||'no existe cuenta');
bandera:=1;
EXIT;
END IF;
IF registro.V_CODIGO_CONTROL IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin codigo de control');
bandera:=1;
EXIT;
END IF;
IF registro.FECHA_LIMITE IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin fecha limite');
bandera:=1;
EXIT;
END IF;
IF registro.NUMERO_AUTORIZACION IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin numero de autorizacion');
bandera:=1;
EXIT;
END IF;
IF registro.CodigoSucursal IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin codigo de sucursal');
bandera:=1;
EXIT;
END IF;
IF registro.ImpBaseCfiscal IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin importe de base fiscal');
bandera:=1;
EXIT;
END IF;
IF registro.razonSocial IS NULL THEN
dbms_output.put_line('Factura con id: ' || registro.ID || ' ' || 'y cuenta: ' || registro.V_CUENTA || ',' ||'sin razon social');
bandera:=1;
EXIT;
END IF;
END LOOP;
IF bandera=0 THEN
DBMS_OUTPUT.PUT_LINE('Datos procesados correctamente');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('No existen datos de facturas');
WHEN SIN_GRUPOS_MEDICION THEN
dbms_output.put_line('No existen grupos de medicion');
WHEN SIN_FECHA THEN
dbms_output.put_line('No se envio la fecha,envie la fecha de dosificacion');
WHEN SIN_TIPO_CLIENTE THEN
dbms_output.put_line('No se envio el tipo de cliente.Por ejemplo:GCLI o CLI');
--WHEN OTHERS THEN
---Numero_error := SQLCODE;
--Mensaje_error := SUBSTR(SQLERRM,1,100);
--dbms_output.put_line('Existe un error(VERIFICAR_FACTURAS): ' || Mensaje_error || '. ' || 'codigo de error: ' || Numero_error);
END VERIFICAR_FACTURAS;
When trying to send this variable: VGRUPOS , in IN (VGRUPOS) in the cursor, I get this:
Cause: The specified number was invalid. * Action: Specify a valid number.
I would like to know how I can send several values in IN (), since the function that generates these values returns a value of VARCHAR2, THANK YOU GREETINGS CORDIALES