CREATE OR ALTER PROCEDURE REPORTEDETALLADORANGO (
listar integer,
desde varchar(10),
hasta varchar(10),
comb integer,
dpto varchar(1),
consumidor integer)
returns (
sdespid integer,
sfecha date,
sdesptipo varchar(5),
scant numeric(15,2),
sveid integer,
srecibido varchar(60),
scomb integer,
scons integer,
sconsnombre varchar(150),
skm integer,
sdficha varchar(10),
svficha varchar(10),
scategoria integer,
sasignadoa varchar(60),
splaca varchar(10),
stipoveh varchar(50),
scombnombre varchar(20))
as
declare variable sql varchar(1000);
declare variable edespid integer;
declare variable efecha date;
declare variable edesptipo varchar(5);
declare variable ecant numeric(15,2);
declare variable eveid integer;
declare variable erecibido varchar(60);
declare variable ecomb integer;
declare variable econs integer;
declare variable econsnombre varchar(150);
declare variable ekm integer;
declare variable edficha varchar(10);
declare variable evficha varchar(10);
declare variable ecategoria integer;
declare variable easignadoa varchar(60);
declare variable eplaca varchar(10);
declare variable etipoveh varchar(50);
declare variable ecombnombre varchar(20);
BEGIN
SQL = 'select d.desp_id, d.desp_fecha, d.desp_tipo, d.desp_cant, d.ve_id, d.desp_recibido, d.desp_comb, d.desp_consumidor,
d.desp_consnombre, d.desp_km, d.ve_ficha, v.ve_ficha, v.ve_categoria, v.ve_asignadoa,v.ve_placa, t.tv_nombre, c.comb_nombre
from despachos d
join vehiculos v on v.ve_id = d.ve_id
join tipos_vehiculos t on t.tv_id = v.ve_tipo
join combustibles c on c.comb_id = d.desp_comb';
if (LISTAR = 0) then
SQL = SQL || '
where d.desp_fecha >= ''' || :DESDE || ''' AND d.desp_fecha <= ''' || :HASTA || ''' and d.desp_comb = ' || :COMB || ' AND d.desp_estado = 1
group by d.desp_tipo, d.desp_consnombre, d.desp_consumidor, v.ve_categoria, d.desp_fecha, d.desp_id, d.desp_cant, d.ve_id,
d.desp_recibido,d.desp_comb,d.desp_km, d.ve_ficha, v.ve_ficha, v.ve_asignadoa, t.tv_nombre, c.comb_nombre, v.ve_placa
order by d.desp_tipo, d.desp_consnombre';
if (LISTAR = 1) then
SQL = SQL || '
where d.desp_fecha >= ''' || :DESDE || ''' AND d.desp_fecha <= ''' || :HASTA || ''' and d.desp_comb = ' || :COMB || ' AND d.desp_estado = 1
group by d.desp_tipo, d.desp_consnombre, d.desp_consumidor, v.ve_categoria, d.desp_fecha, d.desp_id, d.desp_cant, d.ve_id,
d.desp_recibido,d.desp_comb,d.desp_km, d.ve_ficha, v.ve_ficha, v.ve_asignadoa, t.tv_nombre, c.comb_nombre, v.ve_placa
order by d.desp_tipo, d.desp_consnombre';
if (LISTAR = 2) then
SQL = SQL || '
where d.desp_fecha >= ''' || :DESDE || ''' AND d.desp_fecha <= ''' || :HASTA || ''' and d.desp_comb = ' || :COMB || '
group by d.desp_tipo, d.desp_consnombre, d.desp_consumidor, v.ve_categoria, d.desp_fecha, d.desp_id, d.desp_cant, d.ve_id,
d.desp_recibido,d.desp_comb,d.desp_km, d.ve_ficha, v.ve_ficha, v.ve_asignadoa, t.tv_nombre, c.comb_nombre, v.ve_placa
order by d.desp_tipo, d.desp_consnombre';
if (dpto = 'T') then
SQL = SQL || '
where d.desp_comb = ' || :COMB || ' AND d.desp_estado = 1 AND d.desp_consumidor = ' || :CONSUMIDOR || ' and d.desp_fecha >= ''' || :DESDE || ''' AND d.desp_fecha <= ''' || :HASTA || '''
group by d.desp_tipo, d.desp_consnombre, d.desp_consumidor, v.ve_categoria, d.desp_fecha, d.desp_id, d.desp_cant, d.ve_id,
d.desp_recibido,d.desp_comb,d.desp_km, d.ve_ficha, v.ve_ficha, v.ve_asignadoa, t.tv_nombre, c.comb_nombre, v.ve_placa
order by d.desp_tipo, d.desp_consnombre';
for execute statement SQL into :EDESPID, :EFECHA, :EDESPTIPO, :ECANT, :EVEID, :ERECIBIDO, :ECOMB,
:ECONS, :ECONSNOMBRE, :EKM, :EDFICHA, :EVFICHA, :ECATEGORIA, :EASIGNADOA, :EPLACA, :ETIPOVEH, :ECOMBNOMBRE do
begin
SDESPID = :EDESPID;
SFECHA = :EFECHA;
SDESPTIPO = :EDESPTIPO;
SCANT = :ECANT;
SVEID = :EVEID;
SRECIBIDO = :ERECIBIDO;
SCOMB = :ECOMB;
SCONS = :ECONS;
SCONSNOMBRE = :ECONSNOMBRE;
SKM = :EKM;
SDFICHA = :EDFICHA;
SVFICHA = :EVFICHA;
SCATEGORIA = :ECATEGORIA;
SASIGNADOA = :EASIGNADOA;
SPLACA = :EPLACA;
STIPOVEH = :ETIPOVEH;
SCOMBNOMBRE = :ECOMBNOMBRE;
SUSPEND;
end
END
El error que me da es:
Arithmetic overflow or division by Zero has occurred. arithmetic exception, numeric overflow, or string truncation. string rigth truncation. at procedure 'REPORTEDETALLADORANGO' line: 75, col: 21.
el error está en la línea:
if (dpto = 'T') then
Ya tengo una mañana entera tratando de ver cual es el problema
Saludos.