Ver Mensaje Individual
  #1  
Antiguo 09-05-2011
el-mono el-mono is offline
Miembro
 
Registrado: abr 2008
Ubicación: Lules
Posts: 176
Reputación: 17
el-mono Va por buen camino
Ayuda con Update or Insert

Hola gente necesito de su ayuda.

Resulta estoy haciendo un sistema de liquidación de sueldos al momento de imputar la liquidación (básicamente pasar datos de unas tablas que obtengo de una consulta a mi tabla liquidación - tabla principal para la liquidacion de sueldos) necesito modificar los registros en la tabla liquidación de aquellos conceptos que ya existan o ingresarlos si no fueron cargados todavía y para ello cree un Procedimiento Almacenado que utiliza Update or Insert para este menester.

El problema es que solo me modifica un solo registro y no me inserta los que debe hacerlo.Por ej prepare el siguiente escenario para probar:

La consulta me devuelve 4 registros de los cuales ya tengo cargados dos en la tabla liquidación entonces el procedimiento debería ingresarme los dos registros que no están cargados todavía y modificarme los otros dos, pero solo modifica el ultimo registro que obtiene de la consulta. Algo estoy haciendo mal, pero no lo puedo ver.:cool

Algún iluminado que me ayuda por favor. :D

Aquí pego el código del procedimiento para que vean que estoy haciendo mal.

Begin
ind1 = 0;
ind2 = 0;
ind3 = 0;
ind4 = 0;
ind5 = 0;

for select n.legajo, n.concepto,c.clase, c.periodicidad, n.periodo, n.porcentaje, n.cantidad, n.importe, n.duracion, n.novedad , c.indicador, c.participa, c.tipo, c.acumulador, e.categoria, e.centro_costo from novedades n
left join conceptos c on n.concepto = c.codigo left join empleado e on n.legajo = e.legajo into
:legajo, :concepto, :clase, :periodicidad, :periodo, :porcen, :cantidad, :importe, :duracion, :novedad, :indicador, :participa, :tipo, :acumulador, :categoria, :ccosto
do
begin
if (:indicador = 1) then
ind1 = 1;
else
if (:indicador = 2) then
ind2 = 2;
else
if (:indicador = 3) then
ind3 = 3;
else
if (:indicador = 4) then
ind4 = 4;
else
if (:indicador = 5) then
begin
ind1 = 1;
ind2 = 2;
ind3 = 3;
ind4 = 4;
ind5 = 5;
end

UPDATE or INSERT INTO LIQUIDACION (LEGAJO, CODIGO, CANTIDAD, PORCENTAJE, IMPORTE_UNITARIO, PARTICIPA, DURACION,PERIODICIDAD,VECES, PERIODO_IMPUTADO, NOVEDAD, INDICADOR1, INDICADOR2, INDICADOR3, INDICADOR4, INDICADOR5, TIPO, ACUMULADOR, CENTRO_COSTO, NRO_CATEGORIA, CLASE)
VALUES (:legajo, :concepto, :cantidad, :porcen, :importe, :participa, :duracion, :periodicidad, 0, :periodo, :novedad, :ind1, :ind2, :ind3, :ind4, :ind5, :tipo, :acumulador, :ccosto, :categoria, :clase);
matching(legajo,codigo);
suspend;
end
Responder Con Cita