Que sabes de GNU/Linux?

miércoles, 7 de enero de 2009

Ejemplo - Stored Procedure en Sybase

/*
Ejemplo Cursores en Sybase
Funcion: Este script permite realizar la cancelacion de las deudas de un cliente
recorriendo las deudas y cancelando las mismas hasta que el monto abonado total
de cliente llegue a tener 0.
*/
/*Tabla de deudas de cliente - relacion deuda cliente*/
SELECT
DROP TABLE #cli_deuda
go
CREATE TABLE #cli_deuda(id_deuda INTEGER,deuda NUMERIC(17,2) )
go
INSERT INTO #cli_deuda(id_deuda,deuda)
SELECT 1,25.99
UNION
SELECT 2,120.99
UNION
SELECT 3,130.99
UNION
SELECT 4,150.99
go

if object_id('sgl_cancela_deuda') >0 DROP PROC sgl_cancela_deuda
go
CREATE PROC sgl_cancela_deuda
@importe_total NUMERIC(17,2) = NULL
AS
DECLARE @status INTEGER
DECLARE @id_deuda_c INTEGER
DECLARE @deuda_c NUMERIC(17,2)
DECLARE @error INTEGER
DECLARE @adeuda NUMERIC(17,2)

SELECT @status = 0

/*El select que recuperara los datos*/
declare deudas cursor for
SELECT id_deuda,deuda
FROM #cli_deuda


open deudas
select @error = @@error

if @error !=0 begin
return @status
end

/*recuperar una fila a la ves del cursor*/
fetch deudas into @id_deuda_c,@deuda_c

if @@sqlstatus = 2
begin
close deudas
deallocate cursor deudas
return @status
END

/*recorrer todas las filas*/
while @@sqlstatus<>2
begin

if @@sqlstatus = 1
begin
close deudas
deallocate cursor deudas
return @status
end

/*Proceso general del cursor aqui va el script
que sea necesatio ejecutar para c/u de las filas*/
/*Sin importe total para cancelar deudas*/
if @importe_total = 0 Goto Salir

if @importe_total >= @deuda_c
Begin
/*se paga el importe total*/
SELECT @adeuda = 0
SELECT @importe_total = @importe_total - @deuda_c
end
Else
Begin
SELECT @adeuda = @deuda_c - @importe_total
SELECT @importe_total = 0
End

print "Adeuda:%1!, para el id: %2!,total %3! ",@adeuda,@id_deuda_c,@importe_total

/*Recuperams la proxima fila*/
fetch deudas into @id_deuda_c,@deuda_c
select @error= @@error
end

Salir:
close deudas
deallocate cursor deudas

RETURN @status

go
--EXEC sgl_cancela_deuda @importe_total= 428.96 --> cancelacion justa
--EXEC sgl_cancela_deuda @importe_total= 50.96 --> cancela 1 y otra descuenta

No hay comentarios:

Publicar un comentario