send several values to an IN query

0

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

    
asked by joselo 27.02.2018 в 16:27
source

0 answers