![]() |
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 |
¿ Has utilizado un depurador de Firebird ?.
IBExpert lleva un depurador de procedimientos almacenados, con él podrás seguir la ejecución y comprobar si el bucle genera todos los registros que esperas y asigna las variables tal y como debería. http://ibexpert.net/ibe/index.php?n=Main.DownloadTrial NOTA: Tendrás que instalar la Trial de x días, puesto que la versión gratuita de IB-Expert no incorpora este depurador. Saludos. |
Guillo muchas gracias no sabia eso, tengo la version completa asi que pruebo con eso.
Saludos Mario |
La franja horaria es GMT +2. Ahora son las 02:55:22. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi