Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Funkcje: Procedury składowane cz. IV

Procedury składowane to pewnego rodzaju funkcje tablicowe z tym wyjątkiem, że przy procedurach składowanych mamy większe możliwości operacji na danych. Oczywiście wszystko tak jak zwykłe funkcje zapisujemy bezpośrednio na serwerze bazodanowym, a następnie możemy ich użyć na przykład z poziomu jakiejś aplikacji korzystającej z bazy danych.

Procedury składowane mogą między innymi modyfikować dane w tabelach i co najważniejsze sprawdzać poprawność przesyłanych wartości. Oznacza to, że na przykład procedura składowana dodająca nowy wiersz w jakiejś tabeli automatycznie po stronie serwera SQL sprawdzi czy dane, które chcemy zapisać są poprawne czyli czy spełniają wcześniej ustalone kryteria.

Stosowanie procedur składowanych zwiększa również wydajność aplikacji. Należy tutaj zwrócić uwagę iż po stronie klienta, przesyłana jest tylko nazwa danej procedury wraz z danymi, a nie na przykład całe zapytanie SQL. Ważne jest również to, że wszystko wykonywane jest bezpośrednio na serwerze bazodanowym, a więc nie musimy po kilka razy przesyłać jakiś informacji.

Tabela pracownicy, na której uruchomimy przykładowe zapytanie:

IDImieNazwiskoData_urodzeniaStanowiskoData_zatrudnienia
1JanKowalski1984-12-23Programista1999-12-09
2AdamAdamiak1991-08-08Menadżer2011-01-31
3JakubKowalik1990-03-16Programista2010-01-04
4MichałJakubiak1981-05-02Projektant1998-09-22

Procedury składowane tworzymy bardzo podobnie jak zwykłe funkcje, które zostały opisane w poprzednich częściach tego artykułu.

Napiszmy przykładową procedurę składowaną, która będzie dodawała nowy wiersz do tabeli pracownicy. Musimy tutaj zwrócić uwagę między innymi na to, żeby żadne z pól nie było puste:

GO
CREATE PROC dbo.dodaj_dane

@imie VARCHAR(200) = NULL,
@nazwisko VARCHAR(200) = NULL,
@dataUrodzenia DATE = NULL,
@stanowisko VARCHAR(200) = NULL,
@dataZatrudnienia DATE = NULL

AS

DECLARE @blad AS NVARCHAR(500);

IF @imie IS NULL OR @nazwisko IS NULL OR @dataUrodzenia IS NULL OR 
@stanowisko IS NULL OR @dataZatrudnienia IS NULL
BEGIN
     SET @blad = 'Błędne dane!';
     RAISERROR(@blad, 16,1);
     RETURN;
END

INSERT INTO pracownicy(Imie, Nazwisko, Data_urodzenia, Stanowisko, Data_zatrudnienia)
VALUES (@imie, @nazwisko, @dataUrodzenia, @stanowisko, @dataZatrudnienia);

GO

Kod ten podobnie jak zwykłe funkcje uruchamiamy w taki sposób (możemy to również zrobić z poziomu aplikacji klienckiej):

EXEC dbo.dodaj_dane @imie = 'Jan', @nazwisko = 'Kowalski', 
@dataUrodzenia = '1991-08-08', @stanowisko = 'Programista', 
@dataZatrudnienia = '2001-11-11'
GO

Po uruchomieniu powyższego kodu otrzymamy informację, że 1 wiersz został dodany.

Tabela pracownicy wygląda więc tak:

IDImieNazwiskoData_urodzeniaStanowiskoData_zatrudnienia
1JanKowalski1984-12-23Programista1999-12-09
2AdamAdamiak1991-08-08Menadżer2011-01-31
3JakubKowalik1990-03-16Programista2010-01-04
4MichałJakubiak1981-05-02Projektant1998-09-22
5JanKowalski1991-08-08Programista2001-11-11

Jak widać na końcu pojawił się nowy wiersz.

Oczywiście w procedurze składowanej możemy umieścić również zapytania typu SELECT oraz DELETE.

Ogólna struktura procedury składowanej w SQL

GO
CREATE PROC nazwaProcedury

--//Argumenty które przyjmuje np.:
@imie VARCHAR(200) = NULL,
@nazwisko VARCHAR(200) = NULL,
--//@nazwaZmiennej typDanych = NULL - Opcjonalnie możemy od razu zainicjować zmienne

AS

--//Deklarowane jakieś inne zmienne (wewnętrzne)
DECLARE @blad AS NVARCHAR(500);
--//@nazwaZmiennej AS typDanych

--//Sprawdzamy poprawność wprowadzonych danych np.:
IF @imie IS NULL OR @nazwisko IS NULL
BEGIN
     --//Jeżeli dane są nie poprawne wyświetlamy komunikat o błędzie
     SET @blad = 'Błędne dane!'; --//Ustawiamy komunikat
     RAISERROR(@blad, 16,1);
     RETURN; --//Kończymy działanie procedury
END

--//Dowolne zapytanie SQL, operujące na danych przekazanych jako argumenty
INSERT INTO pracownicy(Imie, Nazwisko)
VALUES (@imie, @nazwisko);

GO

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , ,

Dodaj komentarz

Komentarze (2)

  • ja pisze:

    „Procedury to pewnego rodzaju funkcje SQL”??? To co to są funkcje SQL? Masło maślane, merytorycznie przeciętnie (że niby brak konieczności przesłaniea skryptu SQL ma być znaczącą optymalizacją), błędy gramatyczne też się pojawiają…

    • lukas124 pisze:

      Fakt w tym pierwszym zdaniu jest drobna nieścisłość merytoryczna, zaraz poprawię ;-) A co do optymalizacji to nigdzie nie napisałem, że brak konieczności przesyłania całego zapytania znacznie przyspiesza ogólne działanie aplikacji klienckiej. Na pewno na to ma wpływ brak konieczności przesyłania danych po kilka razy (zwłaszcza przy wolnym łączu internetowym) proszę czytać dokładniej ;) A co do błędów gramatycznych to niestety pomimo wielu moich starań i tak zawsze gdzieś się będą pojawiać, jak jakieś znajduję to poprawiam.

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest