Je dois écrire une procédure stockée, où vous donnez le mois, et un numéro de carte de crédit, et il calcule 1% pour chaque transaction effectuée dans les 10 premiers jours du mois, 2% pour transactions entre 10 et 20, et 3% pour les transactions supérieures à 20. Et je dois utiliser des curseurs.aide, procédures stockées et curseurs
j'ai écrit ce code, mais je reçois des erreurs lorsque je tente d'exécuter le precedure
create procedure cardP
/* month ex 1,3,5 etc*/
@minas int,
@cardNo bigint
as
/* creating the cursor*/
DECLARE sinallages CURSOR
FOR SELECT cc_number,day([DateTime]),charged_amount FROM transactions
where [email protected] and month([DateTime])[email protected]
/* declaring local variables*/
declare @poso int,@karta bigint,@mera int,@pos float,@pos2 float,@pos3 float,
@count int,@counter int
open sinallages
set @count=(select count(cc_number) from transactions where [email protected] and month([DateTime])[email protected])
/* get 1st row*/
fetch sinallages into @karta,@mera,@poso
while (/*@@sqlstatus != 2*/@counter<@count)
begin
if day(@mera)<=10
set @pos [email protected]+ @poso * 0.01
else
if day(@mera)>10 and day(@mera)<=20
set @pos2 [email protected]+ @poso * 0.02
else
if day(@mera) > 20
set @pos3 [email protected]+ @poso * 0.03
fetch sinallages into @karta,@mera,@poso
set @[email protected]+1
end
close sinallages
return
quand j'appelle la procédure que je reçois
EXEC ACDRP @minas = 5, @cardNo = 4929569752542450
Msg 16915, Level 16, State 1, Procedure cardP, Line 20
A cursor with the name 'sinallages' already exists.
Msg 16922, Level 16, State 1, Procedure cardP, Line 31
extraction de curseur: conversion implicite de dat de type de données etime à int n'est pas autorisé. Merci :) Je libère maintenant le curseur à la fin de la procédure stockée et supprime le jour(). Maintenant, je veux imprimer le pos + pos2 + pos3. J'utilise print pos + pos2 + pos3 mais ça n'imprime rien. pourquoi donc ??
................
set @[email protected]+1
end
print @[email protected][email protected]
close sinallages
return
DEALLOCATE sinallages;
il semble que hte variables po, pos2, pos3 sont laissés nuls ??
Je réalise que c'est un devoir et que vous devez utiliser le curseur, mais vous devez comprendre que les curseurs ne sont pas quelque chose que vous voudrez normalement écrire dans le code de production.Personnellement, je ne penserais pas du tout à enseigner des curseurs, sauf dans une classe avancée de personnes qui ont l'intention d'être des dbas. S'il vous plaît consulter ce lien: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM
Je tiens également à souligner que float est un mauvais choix si vous voulez une précision mathématique. Vous pourriez, pour votre propre apprentissage, essayer de réécrire ceci en utilisant une déclaration de cas au lieu d'un curseur. – HLGEM