SQL Statment ignored - Error
Publicado por CGSC (1 intervención) el 06/03/2013 17:20:19
Hola.! Agradeceria alguna ayuda que me puedan dar, llevo trabajando en ello unos dias y no he encontrado solucion...
estoy creando un Function en oracle, que me devuelve un conjunto de datos cuando es llamada.
creo un tipo de dato que es la tabla donde se contiene la informacion del resultado.
create or replace
FUNCTION HistorialAnnoVacaciones(cedulaPersona varchar2)---retorno de la funcion ---
return tipoTablaFinalHistorialAnnoV2 as --- variables ---
resultado tipoTablaFinalHistorialAnnoV2;
annoIngreso number;
annoActual number;
annoConsulta number;
mesConsulta varchar(3);
iteracion number;--- cuerpo, consulta ---
begin ---insercion de datos en variables---
select to_number(to_char(sysdate,'YYYY'),'9999') into annoActual from dual;
select to_number(to_char(Fecha_Contratacion,'YYYY'),'9999') into annoIngreso from Vacaciones_Control where Cedula = cedulaPersona;
select to_char(Fecha_Contratacion,'MON') into mesConsulta from Vacaciones_Control where Cedula = cedulaPersona;
annoConsulta := annoActual;
iteracion := annoActual - annoIngreso; ---para sacar el reporte de todos los años---
while iteracion >= 0 loop
select Persona.Nombre,
VacacionesControl.Fecha_Contratacion,
Persona.Cedula,
VacacionesSolicitudes.Fecha_solicitud,
(select sum(VacacionesSolicitudes.Cantidad_dias)
from VACACIONES_SOLICITUDES VacacionesSolicitudes, PERSONA Persona, VACACIONES_CONTROL VacacionesControl
WHERE Persona.cedula=cedulaPersona
and Persona.CEDULA = VacacionesSolicitudes.CEDULA
and VacacionesControl.cedula = Persona.cedula --- cedula persona
and VacacionesSolicitudes.Fecha_inicial between to_date(01/mesConsulta/annoConsulta) and to_date(01/mesConsulta/(annoConsulta+1))
and VacacionesSolicitudes.ESTADO = 'A') dias_vacacionados
into resultado
from VACACIONES_SOLICITUDES VacacionesSolicitudes, PERSONA Persona, VACACIONES_CONTROL VacacionesControl
WHERE Persona.cedula = cedulaPersona ---cedula persona
and Persona.CEDULA = VacacionesSolicitudes.CEDULA
and VacacionesControl.cedula = Persona.Cedula
and rownum = 1; ---34-- --condicion de salida ---
annoConsulta := annoConsulta + 1;
iteracion := iteracion - 1;
end loop; ----fin del while --
end;
el error que me da es el siguiente
Error(17,13): PL/SQL: SQL Statement ignored -> linea del while
Error(29,13): PL/SQL: ORA-00947: not enough values -> linea donde esta el resultado
estoy creando un Function en oracle, que me devuelve un conjunto de datos cuando es llamada.
creo un tipo de dato que es la tabla donde se contiene la informacion del resultado.
create or replace
FUNCTION HistorialAnnoVacaciones(cedulaPersona varchar2)---retorno de la funcion ---
return tipoTablaFinalHistorialAnnoV2 as --- variables ---
resultado tipoTablaFinalHistorialAnnoV2;
annoIngreso number;
annoActual number;
annoConsulta number;
mesConsulta varchar(3);
iteracion number;--- cuerpo, consulta ---
begin ---insercion de datos en variables---
select to_number(to_char(sysdate,'YYYY'),'9999') into annoActual from dual;
select to_number(to_char(Fecha_Contratacion,'YYYY'),'9999') into annoIngreso from Vacaciones_Control where Cedula = cedulaPersona;
select to_char(Fecha_Contratacion,'MON') into mesConsulta from Vacaciones_Control where Cedula = cedulaPersona;
annoConsulta := annoActual;
iteracion := annoActual - annoIngreso; ---para sacar el reporte de todos los años---
while iteracion >= 0 loop
select Persona.Nombre,
VacacionesControl.Fecha_Contratacion,
Persona.Cedula,
VacacionesSolicitudes.Fecha_solicitud,
(select sum(VacacionesSolicitudes.Cantidad_dias)
from VACACIONES_SOLICITUDES VacacionesSolicitudes, PERSONA Persona, VACACIONES_CONTROL VacacionesControl
WHERE Persona.cedula=cedulaPersona
and Persona.CEDULA = VacacionesSolicitudes.CEDULA
and VacacionesControl.cedula = Persona.cedula --- cedula persona
and VacacionesSolicitudes.Fecha_inicial between to_date(01/mesConsulta/annoConsulta) and to_date(01/mesConsulta/(annoConsulta+1))
and VacacionesSolicitudes.ESTADO = 'A') dias_vacacionados
into resultado
from VACACIONES_SOLICITUDES VacacionesSolicitudes, PERSONA Persona, VACACIONES_CONTROL VacacionesControl
WHERE Persona.cedula = cedulaPersona ---cedula persona
and Persona.CEDULA = VacacionesSolicitudes.CEDULA
and VacacionesControl.cedula = Persona.Cedula
and rownum = 1; ---34-- --condicion de salida ---
annoConsulta := annoConsulta + 1;
iteracion := iteracion - 1;
end loop; ----fin del while --
end;
el error que me da es el siguiente
Error(17,13): PL/SQL: SQL Statement ignored -> linea del while
Error(29,13): PL/SQL: ORA-00947: not enough values -> linea donde esta el resultado
Valora esta pregunta


0