El problema es que no se pueden crear y borrar tablas externas desde un procedimiento.
Primero tienes que crear la tabla y luego utilizarla como si fuera una tabla más de la base de datos.
Además, veo que faltan algunas comas...
El script de creación sería algo así;
Recuerda inicializar V_DATO en cada iteración del bucle.
Si un select no encuentra registros, V_DATO no se toca y queda con el valor anterior y podría dar falsos positivos.
Código SQL
[-]
set term ^;
CREATE TABLE ERR_COMBINACIONES EXTERNAL 'C:\ATENCION\ERR_COMBINACION.TXT' (
ERR_LEC_ORIGEN CHAR(10),
ERR_LEC_DESTINO CHAR(10),
ERR_RUTA CHAR(3),
ERR_FECHA_VISITA CHAR(10))
^
commit work^
CREATE PROCEDURE SP_VALIDAR_COMBINACION (
I_MES INTEGER,
I_ANIO INTEGER)
AS
DECLARE VARIABLE V_RUTA INTEGER;
DECLARE VARIABLE V_FECHA_VISITA DATE;
DECLARE VARIABLE V_CONSEC_MAX INTEGER;
DECLARE VARIABLE V_CONSEC INTEGER;
DECLARE VARIABLE V_LEC_SEDE NUMERIC(10,0);
DECLARE VARIABLE V_LECHERIA NUMERIC(10,0);
DECLARE VARIABLE V_DATO NUMERIC(1,0);
DECLARE VARIABLE V_LECHERIA2 NUMERIC(10,0);
begin
FOR SELECT DISTINCT(a.clave_ruta),
a.fecha_visita,
MAX( a.consec )
FROM atencion_lecheria a
WHERE a.clave_ruta in (SELECT DISTINCT(A.clave_ruta)
FROM atencion_lecheria A
WHERE A.mes_periodo=:i_MES
AND A.anio_periodo=:i_ANIO)
AND a.mes_periodo=:i_mes
AND a.anio_periodo=:i_anio
GROUP BY a.clave_ruta,
a.fecha_visita
INTO :v_ruta, :v_fecha_visita, :v_consec_max DO
BEGIN
v_consec=1;
While ( v_consec <= v_consec_max ) do
begin
select b.clave_lec
from atencion_lecheria b
where b.fecha_visita=:v_fecha_visita
and b.clave_ruta=:v_ruta
and b.consec=:v_consec
into :v_lecheria;
v_dato = NULL;
if (v_consec=1) then
begin
select r.clave_lec_sede
from ruta r
where r.clave_ruta=:v_ruta
into :v_lec_sede;
select 1
from lecheria_a_lecheria c
where c.clave_lec_origen=:v_lec_sede
and c.clave_lec_destino=:v_lecheria
into :v_dato;
if (v_dato is null) then
begin
select 1
from lecheria_a_lecheria c
where c.clave_lec_origen=:v_lecheria
and c.clave_lec_destino=:v_lec_sede
into :v_dato;
if (v_dato is null) then
begin
INSERT INTO ERR_COMBINACIONES (ERR_LEC_ORIGEN,
ERR_LEC_DESTINO,
ERR_RUTA,
ERR_FECHA_VISITA)
values (:v_lecheria,
:v_lec_sede,
:v_ruta,
:v_fecha_visita);
end
end
v_lecheria2=v_lecheria;
end Else
begin
select 1
from lecheria_a_lecheria c
where c.clave_lec_origen=:v_lecheria2
and c.clave_lec_destino=:v_lecheria
into :v_dato;
if (v_dato is null) then
begin
select 1
from lecheria_a_lecheria c
where c.clave_lec_origen=:v_lecheria
and c.clave_lec_destino=:v_lecheria2
into :v_dato;
if (v_dato is null) then
begin
INSERT INTO ERR_COMBINACIONES (ERR_LEC_ORIGEN,
ERR_LEC_DESTINO,
ERR_RUTA,
ERR_FECHA_VISITA)
values (:v_lecheria,
:v_lec_sede,
:v_ruta,
:v_fecha_visita);
end
end
v_lecheria2=:v_lecheria;
end
v_consec=:v_consec+1;
end
END
end
^
commit work^