Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

busqueda sentencia de faltantes

Estas en el tema de busqueda sentencia de faltantes en el foro de Oracle en Foros del Web. Buenos dias: Tengo hacer la siguiente tarea: Buscar datos mes faltantes por cada año reportado, por documento de una compañia. formato de Periodo : yyyymm ...
  #1 (permalink)  
Antiguo 19/07/2011, 11:02
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años
Puntos: 0
busqueda sentencia de faltantes

Buenos dias:

Tengo hacer la siguiente tarea:

Buscar datos mes faltantes por cada año reportado, por documento de una compañia.

formato de Periodo : yyyymm

estoy utilizando la siguiente sentencia:

SELECT min(periodo) AS Minimo, max(Periodo) AS Maximo
FROM Tabla
WHERE Documento = '1234567890';
BEGIN
FOR año IN Minimo..maximo
LOOP
FOR MES IN 1..12
LOOP
SELECT substr(periodo,5,2),
CASE WHEN substr(periodo,5,2) <> MES
THEN
RETURN (MES)
END AS falta
FROM REC_PLANOS WHERE documento = '1234567890';
END LOOP;
END LOOP;
END

Pero la verdad o tenga lo logica perdida o no se escribir, no se porque no corre

Una ayuda Gracias
  #2 (permalink)  
Antiguo 20/07/2011, 10:43
 
Fecha de Ingreso: junio-2011
Mensajes: 16
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: busqueda sentencia de faltantes

Deberias poner el error.

Para mi que va por aquello del loop dentro del loop
LOOP
FOR MES IN 1..12
LOOP

Explica un poco mejor que necesitas.
  #3 (permalink)  
Antiguo 21/07/2011, 07:28
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años
Puntos: 0
Respuesta: busqueda sentencia de faltantes

Hola, Gracias por la atencion, revisando el codigo, para ver como agarro ese toro, voy en esto pero me sigue generando error, agradezco la colaboracion.

SELECT min(Tiempo) AS Minimo, max(Tiempo) AS Maximo FROM Tabla WHERE Documento = 'xxxxxxx';
FOR ANO IN TO_NUMBER(substr(:Minimo,1,4))..TO_NUMBER(substr(: Maximo,1,4)) LOOP
FOR MES IN 1..12 LOOP
EXECUTE IMMEDIATE ('SELECT COUNT(*) AS REGISTROS FROM Tabla WHERE Documento = to_number(xxxxxxx) AND substr(tiempo,1,4) = to_number(1998) AND substr(tiempo,5,2) = to_number(12)') BULK COLLECT INTO REGISTROS;
IF REGISTROS.COUNT = 0 THEN
dbms_output.put_line('NO EXISTE DATO DEL PERIODO ' :ANO :MES)
END IF;
END LOOP;
END LOOP;

Ahora bien, la verdad no soy ducho en cursores..... sera mejor crear un cursor ???
donde encuentro literatura de cursores para dummys.

Gracias
  #4 (permalink)  
Antiguo 21/07/2011, 07:30
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 15 años
Puntos: 0
Respuesta: busqueda sentencia de faltantes

El error me sale en la palabra FOR así:

ORA-00900: sentencia SQL no válida
----------------------------------------------------
FOR ANO IN TO_NUMBER(substr(:Minimo,1,4))..TO_NUMBER(substr(: Maximo,1,4)) LOOP
FOR MES IN 1..12 LOOP
EXECUTE IMMEDIATE ('SELECT COUNT(*) AS REGISTROS FROM REC_PLANOS WHERE COTIZANTE = to_number(4975093) AND substr(periodo_cotizado,1,4) = to_number(1998) AND substr(periodo_cotizado,5,2) = to_number(12)') BULK COLLECT INTO REGISTROS
  #5 (permalink)  
Antiguo 22/07/2011, 06:36
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 9 meses
Puntos: 43
Respuesta: busqueda sentencia de faltantes

Cita:
Iniciado por calichet Ver Mensaje
El error me sale en la palabra FOR así:

ORA-00900: sentencia SQL no válida
----------------------------------------------------
FOR ANO IN TO_NUMBER(substr(:Minimo,1,4))..TO_NUMBER(substr(: Maximo,1,4)) LOOP
FOR MES IN 1..12 LOOP
EXECUTE IMMEDIATE ('SELECT COUNT(*) AS REGISTROS FROM REC_PLANOS WHERE COTIZANTE = to_number(4975093) AND substr(periodo_cotizado,1,4) = to_number(1998) AND substr(periodo_cotizado,5,2) = to_number(12)') BULK COLLECT INTO REGISTROS

Así a bote pronto, veo mal esto :

EN un PL, una sentencia SELECT debe acompañarse por el INTO ( Exceptuando cursores, claro )

SELECT CAMPO
INTO VARIABLE
FROM TABLA;

El espacio entre los dos puntos y Maximo, sobra .

(: Maximo,1,4)


Esto está mal.

dbms_output.put_line('NO EXISTE DATO DEL PERIODO ' :ANO :MES)

Debería ser

dbms_output.put_line('NO EXISTE DATO DEL PERIODO '|| :ANO|| :MES)

Desconozco que es eso de :ano, :mes, :maximo, :minimo....................... ¿ bind variables ?

En la cadena entrecomillada ¿ haces un to_number de un number ?, me dá que la tienes mal montada, pero eso te chillaría en ejecución, no en " parseo "

Etiquetas: faltantes, periodos, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:53.