Proc. dentro de Proc.

04/08/2004 - 16:21 por Chente | Informe spam
Que tal compañeros, gracias por leer.

Esta es la situación, tengo un procedimiento que me calcula la prima de una
fianza, es la siguiente:


/***************************************/
CREATE PROCEDURE [Fianza_Calcular_Prima]
@afianzadora smallint,
@importe money,
@concepto tinyint
AS

declare @tarifa money
declare @primamin money

if @concepto = 0 -- Daños y perjuicios
begin
select @tarifa = (afdptarifa/100), @primamin = afdpprimamin from
ctafianzadora where afclave = @afianzadora
if (@importe * @tarifa) < @primamin
select (@primamin + (@primamin * afportar/100) + afdpgtosexp) as Prima
from ctafianzadora where afclave = @afianzadora
else
select ((@importe * @tarifa)+ ((@importe * @tarifa)* afportar/100) +
afdpgtosexp) as Prima from ctafianzadora where afclave = @afianzadora
end
else if @concepto = 1 -- Reparacion del daño
select (afctafija * (1 + afporder/100) + afgtosexp) *
(floor(@importe/afprimaxcmonto) + 1)
as Prima
from CTAFIANZADORA
where afclave = @afianzadora
else -- Obligaciones Procesales / Libertad Provisional / Sanciones
Pecuniarias
if @importe <= (select aftopelc from CTAFIANZADORA where afclave @afianzadora)
select afcarmin * (1 + afporder/100) + afgtosexplc as prima from
CTAFIANZADORA
where afclave = @afianzadora
else
select (@importe * afportar/100) * (1 + afporder/100) + afgtosexplc as
Prima from CTAFIANZADORA
where afclave = @afianzadora
GO
/***************************************/


Ahora bien, a mi gustaria poder mandarlo llamar desdes otro procedimiento
almacenado y que me devuelva la prima, por ejemplo.


Declare @prima money

set @prima = Fianza_Calcular_Prima 5, 34000, 1

select @prima

esto es solo un ejemplo, en realidad es mas complejo pero lo que quiero es
la luz solamente, y de ahi yo me sigo, espero que alguien me ayude, no se si
tenga que convertirlo en una función.



Saludos.


Vicente López.
 

Leer las respuestas

#1 Gustavo Larriera [MVP SQL]
04/08/2004 - 16:50 | Informe spam
Hola Chente,

puedes hacer lo siguiente: define en el sproc un parámetro declarado como
OUTPUT, dentro del sproc asigna el resultado de tu cálculo a dicho
parámetro.

CREATE PROCEDURE [Fianza_Calcular_Prima]
@afianzadora smallint,
@importe money,
@concepto tinyint,
@primaResultado money OUTPUT
AS

En el sproc que llama al Fianza_Calcular_Prima deberás hacer algo como esto:

DECLARE @unaVariable MONEY
EXEC Fianza_Calcular_Prima 7, 12500, 3, @unaVariable OUTPUT


También puedes considerar el convertir el sproc a función.

Espero te sirva de ayuda
gux

Gustavo Larriera
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Chente" <foro[@]ausa.com.mx> wrote in message
news:OgJ%
Que tal compañeros, gracias por leer.

Esta es la situación, tengo un procedimiento que me calcula la prima de


una
fianza, es la siguiente:


/***************************************/
CREATE PROCEDURE [Fianza_Calcular_Prima]
@afianzadora smallint,
@importe money,
@concepto tinyint
AS

declare @tarifa money
declare @primamin money

if @concepto = 0 -- Daños y perjuicios
begin
select @tarifa = (afdptarifa/100), @primamin = afdpprimamin from
ctafianzadora where afclave = @afianzadora
if (@importe * @tarifa) < @primamin
select (@primamin + (@primamin * afportar/100) + afdpgtosexp) as Prima
from ctafianzadora where afclave = @afianzadora
else
select ((@importe * @tarifa)+ ((@importe * @tarifa)* afportar/100) +
afdpgtosexp) as Prima from ctafianzadora where afclave = @afianzadora
end
else if @concepto = 1 -- Reparacion del daño
select (afctafija * (1 + afporder/100) + afgtosexp) *
(floor(@importe/afprimaxcmonto) + 1)
as Prima
from CTAFIANZADORA
where afclave = @afianzadora
else -- Obligaciones Procesales / Libertad Provisional /


Sanciones
Pecuniarias
if @importe <= (select aftopelc from CTAFIANZADORA where afclave > @afianzadora)
select afcarmin * (1 + afporder/100) + afgtosexplc as prima from
CTAFIANZADORA
where afclave = @afianzadora
else
select (@importe * afportar/100) * (1 + afporder/100) + afgtosexplc as
Prima from CTAFIANZADORA
where afclave = @afianzadora
GO
/***************************************/


Ahora bien, a mi gustaria poder mandarlo llamar desdes otro procedimiento
almacenado y que me devuelva la prima, por ejemplo.


Declare @prima money

set @prima = Fianza_Calcular_Prima 5, 34000, 1

select @prima

esto es solo un ejemplo, en realidad es mas complejo pero lo que quiero es
la luz solamente, y de ahi yo me sigo, espero que alguien me ayude, no se


si
tenga que convertirlo en una función.



Saludos.


Vicente López.


Preguntas similares