PDA

Ver la Versión Completa : problemas con insercion en procedure


pani_alex
02-06-2006, 15:02:04
tengo un pequeño problema con unos procedimientos, no me insertan los datos.
el procedimiento se encuentra anidado y consta de tres partes, siendo el ultimo el que efectua el insert.

proc 1
CREATE PROCEDURE I_POSICION_COTIZACIONMONEDA (
VE_IDSUCURSALAGENCIA INTEGER)
AS
declare variable v_idCotizacionMoneda integer;
declare variable v_Fecha date;
BEGIN
/* 1 select de cotizaciones monedas */
v_Fecha=extractdate(cast("NOW" AS DATE));

for select id_cotizacionmoneda
from cotizacionesmonedas
where estado='A'
and id_tipocotizacion=1
into :v_idCotizacionMoneda
do begin
execute procedure i_posicion_tipoespecie :ve_idsucursalagencia,:v_idCotizacionMoneda,:v_fecha;
end
/* SUSPEND;*/
END

proc 2
CREATE PROCEDURE I_POSICION_TIPOESPECIE (
VE_IDSUCURSALAGENCIA INTEGER,
VE_IDCOTIZACIONMONEDA INTEGER,
VE_FECHA DATE)
AS
declare variable v_idTipoEspecie integer;
BEGIN
/* 2 select de tiposEspecies */
for select id_tipoespecie
from tiposespecies
where estado='A'
into :v_idTipoEspecie
do begin
execute procedure i_posicion_caja :VE_IDSUCURSALAGENCIA,:v_idTipoEspecie,:VE_IDCOTIZACIONMONEDA,:ve_fecha;
end
END

proc 3
CREATE PROCEDURE I_POSICION_CAJA (
VE_IDSUCURSALAGENCIA INTEGER,
VE_IDTIPOESPECIE INTEGER,
VE_IDCOTIZACIONMONEDA INTEGER,
VE_FECHA DATE)
AS
declare variable v_idCaja integer;
declare variable v_EstadoPosicion varchar(1);
declare variable v_CodCaja varchar(4);
/*declare variable v_fecha varchar(10);*/
declare variable v_idPosicion integer;
BEGIN
/* Procedure body */
for select id_caja,codigo
from cajas
where estado='A'
into :v_idCaja,:v_CodCaja
do begin
if(:v_CodCaja='9999')then
v_EstadoPosicion='P';
else
v_EstadoPosicion='L';

/* select *
from sp_fechaactual
into :v_fecha;*/
v_idPosicion=0;
/* select id_posicion
from posiciones
where posiciones.id_sucursalagencia=:VE_IDSUCURSALAGENCIA
and posiciones.id_tipoespecie=:VE_IDTIPOESPECIE
and posiciones.id_caja=:v_idCaja
and posiciones.id_cotizacionmoneda=:VE_IDCOTIZACIONMONEDA
and posiciones.fecha=:ve_fecha
and posiciones.estadoposicion=:v_EstadoPosicion
into :v_idPosicion;*/

if((:v_idPosicion=0)or(:v_idPosicion is null))then
insert into posiciones(id_posicion,id_sucursalagencia,
id_tipoespecie,id_caja,id_cotizacionmoneda,estadoPosicion,estado,fecha,
otrosimpuestos,iva,actoDocumento,gastoCobrado,resultadoAcumulado,resultadoDia,
entradaFondo,salidaFondo,
debitoPosicionME,debitoPosicionMN,
creditoPosicionME,creditoPosicionMN,
saldoPosicionME,saldoPosicionMN,
saldoCajaME,saldoCajaMN,
creditoCajaME,creditoCajaMN,
debitoCajaME,debitoCajaMN)
values(gen_id(id_posicion,1),:VE_IDSUCURSALAGENCIA,
:VE_IDTIPOESPECIE,:v_idCaja,:VE_IDCOTIZACIONMONEDA,:v_EstadoPosicion,'A',:ve_fecha,
0,0,0,0,0,0,
0,0,
0,0,
0,0,
0,0,
0,0,
0,0,
0,0);
end
END

en este ultimo se deberia efectuar la insercion dentro de la tabla especificada.

alguien puede corregirme o decirme como introdusco todo esto dentro de un solo procedimiento porque a mi me saltaba un error al tener varios for anidados dentro de un mismo procedimiento, pienso que este era su problema

gracias

ronimaxh
05-06-2006, 17:53:53
Lo mejor seria hacerlo todo en un solo procedure, no da error tener varios for,
y lo demas depende de lo que quieres hacer, porque no está muy claro...