Ich muss eine gespeicherte Prozedur schreiben, wo Sie den Monat angeben, und eine Kreditkartennummer, und es berechnet 1% für jede Transaktion in den ersten 10 Tagen des Monats, 2% für Transaktionen zwischen 10 und 20, und 3% für Transaktionen über 20. Und ich muss Cursor verwenden.Hilfe, gespeicherte Prozeduren und Cursor
ich diesen Code geschrieben, aber ich erhalte einige Fehler, wenn ich versuche, die 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
, wenn ich das Verfahren i
EXEC cardP @minas = 5, erhalten rufen zu laufen @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
Cursor Fetch: implizite Konvertierung von Datentyp dat etime to int ist nicht erlaubt.
danke :) ich jetzt die Zuordnung der Cursor am Ende der gespeicherten Prozedur und entfernt den Tag(). Jetzt möchte ich die pos + pos2 + pos3 ausdrucken. Ich benutze print pos + pos2 + pos3 aber es druckt nichts. Warum das ??
................
set @[email protected]+1
end
print @[email protected][email protected]
close sinallages
return
DEALLOCATE sinallages;
es scheint, wie hte Variablen po, pos2, pos3 null sind links ??
Ich weiß, dies ist Hausaufgaben und Sie müssen den Cursor verwenden, aber Sie sollten verstehen, dass Cursor nicht etwas sind, das Sie normalerweise in Produktionscode schreiben möchten.Persönlich würde ich nicht in Erwägung ziehen, Cursor überhaupt zu unterrichten, außer in einer fortgeschrittenen Klasse von Leuten, die dbas sein wollen. Bitte überprüfen Sie diesen Link: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM
Ich möchte auch darauf hinweisen, dass Float eine schlechte Wahl ist, wenn Sie mathematische Genauigkeit wollen. Sie könnten dies zu Ihrem eigenen Lernzweck versuchen, indem Sie eine Fallanweisung anstelle eines Cursors neu schreiben. – HLGEM