Prva procedura koju ću opisati je procedura za brisanje. Ona je najjednostavnija i na njoj se mogu pokazati neke stvari koje će se kasnije stalno ponavljati.
Zadatak procedure za brisanje sloga u našoj tablici MP_VALUTA je
- prihvat podataka šifre valute koju želimo obrisati
- obrisati slog koji ima traženu šifru valute
- u pomoćnu varijablu zapisati upješnost izvršenja radnje
Evo kako bi ta procedura izgledala:
CREATE PROCEDURE dbo.mp_valuta_delete @valuta CHAR(3) AS SET NOCOUNT ON DECLARE @err INT SET @err = -1 DELETE FROM MP_VALUTA WHERE VALUTA = @valuta SET @err = @err + @@ERROR RETURN @err GO
Varijabla @valuta prihvaća vrijednost šifre valute koju želimo obrisati.
Svaka SQL naredba vraća poruku o broju zahvaćenih slogova. U procedurama je taj podatak suvišan, a često i smeta te se koristi SET NOCOUNT ON kako se te poruke ne bi javljale.
Varijabla @err je tipa INT i dodijeljena je inicijalna vrijednost -1.
Izvršava se naredba DELETE nad tablicom MP_VALUTA za slog gdje je VALUTA = @valuta.
Odmah nakon izvršavanja naredbe DELETE postoji redak: SET @err = @err + @@ERROR.
@@ERROR je sistemska varijabla samog MS SQL Servera u koju se zapisuje rezultat izvršavanja posljednje SQL naredebe. Ako nije došlo do greške, @@ERROR je 0, a ako je bila greška, zapisuje se broj te greške koji je uvijek neki broj veći od nule. Bitno je vrijednost preuzeti nakon samog izvođenja naredbe jer se vrijednost prepisuje s novom vrijednošću nakon izvršavanja ideuće naredbe.
Analogno tome, ako nije došlo do greške na kraju vrjednost lokalne varijable mora biti -1. U slučaju bilo kakve greške vrijednost je veća od -1.
Na kraju se vraća vrijednost varijable @err. To nije output varijabla nego tzv. return value.
Jako je korisna kada se procedura poziva iz neke druge procedure.
novi komentari