PDA

Ver la Versión Completa : Procedimientos Almacenados


guachalla
31-12-2011, 01:21:44
Buenas noches...

Disculpen la molestia, soy nuevo en el foro, tengo una pregunta:

Tengo una tabla (solo para el control de los pagos, no de detalle de pagos que es otra tabla) donde se almacenan los datos de los pagos de los alumnos con los siquientes campos:
codigo, concepto, nro_cuota, monto_cuota, pagos_cuota, saldo_cuota, estado, cod_de_concepto
11....... PENSION .......1 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......2 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......3 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......4 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......5 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......n ...........100 ...............0 ................100 ...........D ...........1


Quisiera crear un procidimiento para que segun un monto(parametro) se actualice los datos supongamos que le envio 250 como parametro y en la tabla se deberia de actualizar de la siguiente manera

codigo, concepto, nro_cuota, monto_cuota, pagos_cuota, saldo_cuota, estado, cod_de_concepto
11....... PENSION .......1 ...........100 .............100 ................0 .............C ...........1
11....... PENSION .......2 ...........100 .............100 ................0 .............C ...........1
11....... PENSION .......3 ...........100 ..............50 ................50 ............P ...........1
11....... PENSION .......4 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......5 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......n ...........100 ...............0 ................100 ...........D ...........1

creo que se podria hacer con tres updates desde el cliente pero lo que quisiera es si se podria hacer un procedimiento almacenado donde solo envio el parametro del monto cobrado para que se procese en el servidor.

Gracias por sus comentarios y su ayuda.

Cañones
31-12-2011, 02:48:55
En cuanto a usar un SP para esto me parece correcto ya que optimizas el uso de la red con el servidor.
Y el servidor es.....?
Saludos.

Casimiro Notevi
31-12-2011, 14:34:18
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración.

guachalla
31-12-2011, 15:31:29
Gracias por sus comentarios, el servidor es Firebird 2.0, gracias

guachalla
02-01-2012, 02:27:49
Ya cree el SP siguiente:

CREATE PROCEDURE ACT_COBRANZ(
COD INTEGER,
MONTO NUMERIC(12, 2),
CODCON INTEGER)
AS
DECLARE VARIABLE MONTOX NUMERIC(12, 2);
DECLARE VARIABLE ESTADOX CHAR(1);
DECLARE VARIABLE CODX INTEGER;
DECLARE VARIABLE CODCONX INTEGER;
DECLARE VARIABLE NCUX SMALLINT;
DECLARE VARIABLE PRIMERPAGO SMALLINT;
DECLARE VARIABLE CUOTAX SMALLINT;
DECLARE VARIABLE DEUDOR CHAR(1);
DECLARE VARIABLE CUOTAACT SMALLINT;
DECLARE VARIABLE DEUDA_BSX NUMERIC(12, 2);
DECLARE VARIABLE DEUDA_ACT NUMERIC(12, 2);
BEGIN
CODCONX = CODCON;
CODX = COD;
MONTOX = MONTO;
CUOTAX = 0;
DEUDOR = 'D';
CUOTAACT = 0;

WHILE (MONTOX>0)DO
BEGIN
FOR SELECT CNU,ESTADO,DEUDA_BS FROM COBRANZ
WHERE (COBRANZ.CODIGO=:CODX AND COBRANZ.OC =:CODCONX)
INTO :CUOTAX,:ESTADOX,:DEUDA_BSX DO
BEGIN
IF (ESTADOX=DEUDOR) THEN
CUOTAACT=CUOTAX;
DEUDA_ACT=DEUDA_BSX;

IF (MONTOX>=DEUDA_ACT) THEN
BEGIN
UPDATE COBRANZ SET PAGO_BS =PAGO_BS+:DEUDA_ACT,DEUDA_BS=0,ESTADO='C'
WHERE OC=:CODCONX AND CODIGO=:CODX AND CNU=:CUOTAX;
MONTOX = MONTOX - DEUDA_ACT;
END
else
BEGIN
UPDATE COBRANZ SET PAGO_BS =PAGO_BS+:MONTOX,DEUDA_BS=CARGO_BS-:MONTOX,ESTADO='D'
WHERE OC=:CODCONX AND CODIGO=:CODX AND CNU=:CUOTAX;
MONTOX = 0;
END
END
END

END;


sin embargo a veces sale un mensaje de conflicto de bloqueo en el primer UPDATE COBRANZ que estara mal? les agradezco su tiempo y ayuda