Error en job oracle

osvaldo
18 de Febrero del 2010
hola tengo este job

DECLARE

CURSOR digepyme is select valor,nombre from admin_parametros_generales WHERE nombre ='MAIL_DIGEPYME';

CURSOR empresas_formulario IS SELECT inscripcion_registro.id_inscripcion_registro,
inscripcion_registro.id_tipo_solicitud,
inscripcion_registro.id_fundamento,
inscripcion_registro.id_empresa
FROM inscripcion_info_general, inscripcion_registro
WHERE inscripcion_info_general.id_pyme = inscripcion_registro.id_empresa
ORDER BY inscripcion_registro.id_empresa ASC;

p_inscripcionRegistro NUMBER;--id del formulario actual
p_email_digepyme VARCHAR2;--usado para guardar el email de digepyme
p_email_usuario VARCHAR2;--usado para almacenar el email del usuario
p_usuario NUMBER;--usado para almacenar el id funcionarip
p_consecutivoFechas NUMBER;--este es para guardar el consecutivo de secuencia de inscripcion fechas
digepymeRegistro admin_parametros_generales%ROWTYPE;--representacion de un registro del cursor digepyme
empresas_formulario_registro inscripcion_registro%ROWTYPE;--representacion de un registro del cursor empresas_formulario
empresas_info inscripcion_info_general%ROWTYPE;
fechas_inscripcion inscripcion_fechas%ROWTYPE;
entidad PYME_ENTIDAD%ROWTYPE;
p_registroProcesado NUMBER;--Para indicar que el formulario fue procesado y debe cerrar el ciclo.
usuarios_registro admin_usuarios%ROWTYPE; -- representa un registro de la tabla de usuarios
p_nombre_usuario VARCHAR2;
--Objetos para envio de correo primero un connection
conexionCorreo UTL_SMTP.connection;
p_mensaje VARCHAR2;
p_solicitud NUMBER;
p_fundamento NUMBER;
p_fund_nombre VARCHAR2;
p_sol_nombre VARCHAR2;
p_empresa_nombre VARCHAR2;
p_empresa_identificacion VARCHAR2;
p_empresa_id NUMBER;


BEGIN


open digepyme;--habro el cursos y extraigo el email de digepyme
loop
fetch digepyme into digepymeRegistro;
exit when digepyme%NOTFOUND;
email_digepyme := digepymeRegistro.Valor;
end loop;
close digepyme; --Cierro el cursor digepyme

-- Aqui debo recorrer todos los formularios registrados por empresas
-- Luego obtener el primer registro de ese formulario en inscripcion fechas
-- Luego ver cual si paso mas de un año desde el primer registro de ese formulario actual
-- Si es asi entonces crea un nuevo registro en inscripcion fechas y lo pone como inactivo
-- Luego buscar el usuario que creo ese primer registro y enviarle un email
-- Enviarle email al administrador digepyme


OPEN empresas_formulario;
LOOP
FETCH empresas_formulario INTO empresas_formulario_registro;
EXIT WHEN empresas_formulario%NOTFOUND

p_inscripcionRegistro := empresas_formulario_registro.id_inscripcion_registro;
p_solicitud := empresas_formulario_registro.id_tipo_solicitud
p_fundamento := empresas_formulario_registro.id_fundamento;
p_empresa_id := empresas_formulario_registro.id_empresa;
p_registroProcesado := 0;

CURSOR formulario_fechas IS SELECT inscripcion_fechas.id_formulario ,
inscripcion_fechas.id,
inscripcion_fechas.fecha,
inscripcion_fechas.id_funcionario
FROM inscripcion_fechas
WHERE inscripcion_fechas.id_formulario = inscripcionRegistro
GROUP BY inscripcion_fechas.id,inscripcion_fechas.id_formulario,
inscripcion_fechas.id_funcionario,inscripcion_fechas.fecha
ORDER BY inscripcion_fechas.ID DESC;
OPEN formulario_fechas;
LOOP
FETCH formulario_fechas INTO fechas_inscripcion;
EXIT WHEN formulario_fechas%NOTFOUND OR registroProcesado == 1;

IF(ceil((SYSDATE - min(to_date(fechas_inscripcion.fecha, 'dd/mm/yyyy:hh:mi:ssam'))) >= 365) THEN
--Obtener el id de inscripcion_fechas
--INSERTAR EN INSCRIPCION_FECHAS

INSERT INTO INSCRIPCION_FECHAS(ID, ID_FORMULARIO, FECHA, ID_ESTADO, ID_FUNCIONARIO, OBSERVACION)
VALUES(SQ_FECHAS_INSCRIPCION.NEXTVAL,inscripcionRegistro,TO_DATE(SYSDATE),335,1,'Desactivado por Scheduler Oracle');

p_usuario := fechas_inscripcion.id_funcionario;
--Buscar datos generales empresa
CURSOR pyme IS SELECT nombre,identificacion FROM inscripcion_info_general WHERE id_pyme = p_empresa_id;
OPEN pyme;
LOOP
FETCH pyme INTO empresas_info;
EXIT WHEN pyme%NOTFOUND;
p_empresa_nombre := empresas_info.nombre;
p_empresa_identificacion := empresas_info.identificacion;
END LOOP;
CLOSE pyme;
--Busca datos del fundamento
CURSOR fund IS SELECT VALOR_DESPLEGAR ,COD_GENERAL FROM PYME_ENTIDAD WHERE ID_ENTIDAD = p_fundamento;
OPEN fund;
LOOP
FETCH fund INTO entidad;
EXIT WHEN fund%NOTFOUND;
p_fund_nombre := entidad.valor_desplegar;
END LOOP;
CLOSE fund;

-- busca la solicitud
CURSOR sol IS SELECT VALOR_DESPLEGAR ,COD_GENERAL FROM PYME_ENTIDAD WHERE ID_ENTIDAD = p_solicitud;
OPEN sol;
LOOP
FETCH sol INTO entidad;
EXIT WHEN sol%NOTFOUND;
p_sol_nombre := entidad.valor_desplegar;
END LOOP;
CLOSE fund;

--Voy a buscar el usuario que registro por primera vez el formulario actual para enviarle un email
CURSOR usuario_temp IN SELECT email, nombre_usuario FROM admin_usuarios WHERE id_usuario = p_usuario;
OPEN usuario_temp;
LOOP
FETCH usuario_temp INTO usuarios_registro;
EXIT WHEN usuario_temp%NOTFOUND;

p_nombre_usuario := usuarios_registro.nombre_usuario;
p_email_usuario := usuarios_registro.email;

BEGIN --script para enviar correo al usuario
conexionCorreo := UTL_SMTP.open_connection('digepyme.meic.co.cr', 25); --usado para conectar con un mail server enun puerto especifico
UTL_SMTP.helo(conexionCorreo, 'digepyme.meic.co.cr');--inicia la sesion mail enviadndo un hello para identificarse contra el servidor
UTL_SMTP.mail(conexionCorreo, email_digepyme);--quien envia el correo electronico
UTL_SMTP.rcpt(conexionCorreo, p_email_usuario); --tquien es el que lo recibira
UTL_SMTP.open_data(conexionCorreo); --se habre el flujo para envio de mensajes
--escribimos el texto del correo
UTL_SMTP.write_data(conexionCorreo, 'Fecha: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || Chr(13));
UTL_SMTP.write_data(conexionCorreo, 'De: ' || email_digepyme || Chr(13));
UTL_SMTP.write_data(conexionCorreo, 'Asunto: ' || 'Actualización de Información de Empresa' || Chr(13));
UTL_SMTP.write_data(conexionCorreo, 'Para: ' || p_email_usuario || Chr(13));
UTL_SMTP.write_data(conexionCorreo, '' || Chr(13));

p_mensaje := ' Por medio de la presente, se le comunica que el registro de inscripción del Formulario ' || p_sol_nombre || CHR(13)|| CHR(10) ||
' con Fundamento Jurídico' || p_fund_nombre || 'de la empresa ' || p_empresa_nombre || ' con la identificación ' || p_empresa_identificacion || CHR(13)|| CHR(10) ||
' se encuentra desactualizado y se ha Inactivado, por favor ingrese al sistema y actualice los datos de la misma.';
UTL_SMTP.write_data(conexionCorreo, p_mensaje);
UTL_SMTP.close_data(conexionCorreo);--se cierra la conexion.
UTL_SMTP.quit(conexionCorreo);--la sesion se cierra con la sentencia quit
END;
--envio los 2 correos primero al administrador y el segundo al usuario creador
END LOOP;
CLOSE usuario_temp;
p_registroProcesado :=1;
END IF;
END LOOP;
CLOSE formulario_fechas; --Ciero el cursor formulario_fechas
END LOOP;
CLOSE empresas_formulario; -- ciero el cursor empresas_formulario


END;


me marca este error al guardar The following error has occurred:

ORA-01480: trailing null missing from STR bind value

Details:
ORA-01480: trailing null missing from STR bind value

y no encuentro..la logica creo que esta bien..