Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
use AdventureWorksLT2008
go
create procedure prc_desconto
@p_nome_country as nvarchar(50)
as
begin
create table ##tabela_locacaotemp (
SalesOrderID int,
desconto VARCHAR(5),
calculo int,
SubTotal float,
TaxAmt float,
Freight float,
TotalDue float
);
begin
declare @v_SalesOrderId as int
declare @v_SubTotal as float
declare @v_TaxAmt as float
declare @v_Freight as float
declare @v_TotalDue as float
declare @v_CountryRegion as nvarchar(50)
declare @v_calculo int
declare c_descontos insensitive cursor for
select soh.SalesOrderID, soh.SubTotal, soh.TaxAmt, soh.Freight, soh.TotalDue, a.CountryRegion
from SalesLT.SalesOrderHeader soh, SalesLT.Address a
where a.AddressID = soh.ShipToAddressID
open c_descontos
fetch from c_descontos
into @v_salesOrderId, @v_subTotal, @v_TaxAmt, @v_freight, @v_TotalDue, @v_countryRegion
while @@FETCH_STATUS = 0
begin
set @v_calculo = 0
if @v_CountryRegion = 'Canada'
begin
if @v_SubTotal < 700
begin
set v_SubTotal = v_SubTotal * 0.95;
set v_TaxAmt = v_SubTotal * 0.08;
set @v_calculo = 5
end
else
begin
if @v_subTotal < 1000
begin
set v_SubTotal = v_SubTotal * 0.9;
set v_TaxAmt = v_SubTotal * 0.08;
set @v_calculo = 10
end
else
begin
set v_SubTotal = v_SubTotal * 0.85;
set v_TaxAmt = v_SubTotal * 0.08;
set @v_calculo = 15
end
end
insert into ##tabela_locacaotemp (SalesOrderID, desconto, calculo, SubTotal, TaxAmt, Freight, TotalDue) VALUES (@v_SalesOrderID, 'Sim', @v_calculo, @v_SubTotal, @v_TaxAmt, @v_Freight, @v_TotalDue)
end
else
insert into ##tabela_locacaotemp(SalesOrderID, Desconto, calculo, SubTotal, TaxAmt, Freight, TotalDue) VALUES (@v_SalesOrderId, 'Não', @v_calculo, @v_SubTotal, @v_TaxAmt, @v_Freight, @v_TotalDue)
fetch next from c_descontos INTO @v_SalesOrderID, @v_SubTotal, @v_TaxAmt, @v_Freight, @v_TotalDue, @v_CountryRegion;
end
close c_descontos
deallocate c_descontos
select * from ##tabela_locacaotemp
end
end
Carregando comentários...