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

Funkcje: Tworzenie funkcji – funkcje skalarne w SQL cz. II

Jak wspomniałem w pierwszej części tego artykułu, SQL poza zwykłymi kwerendami jak prawie każdy język programowania umożliwia również tworzenie funkcji. Przyjrzyjmy się więc jak je napisać…

Funkcje skalarne, którymi zajmiemy się w tej części tego wpisu zazwyczaj są tak zbudowane, że zwracają pojedynczą wartość. Ważne jest jednak to, że konstrukcji takiej można używać we wszystkich zapytaniach SQL w których dopuszczalne jest użycie wyrażeń skalarnych.

Przy budowie funkcji skalarnych należy zwrócić szczególną uwagę na:

  • nazwę (nie może ona zawierać znaków specjalnych, polskich liter oraz spacji czy tak zwanych znaków białych),
  • blok BEGIN ... END, który musi zostać umieszczony w ciele funkcji,
  • parametry, przy wywoływaniu funkcji muszą zostać podane wszystkie jej parametry (argumenty) nawet te domyślne.

Po zapoznaniu się z teorią, najlepiej prześledzić wszystko w praktyce. Napiszmy więc  funkcję skalarną w SQL.

Uwaga: Omawiany materiał działa na bazach danych firmy Microsoft.

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

Przykład

GO

CREATE FUNCTION nazwaFunkcji
(@zmienna AS VARCHAR(200)) RETURNS VARCHAR(200)
AS

BEGIN

DECLARE @imie AS VARCHAR(200)
SET @imie = ''
SELECT @imie = @imie + Imie + ', ' FROM dbo.pracownicy WHERE Stanowisko = @zmienna;

RETURN @imie;

END

GO

Powyższą funkcję możemy uruchomić takim kodem:

SELECT dbo.nazwaFunkcji(Stanowisko) FROM pracownicy;

Rezultat:

Jan, Jakub
Adam
Jan, Jakub
Michał

Jak widać, funkcja dla każdego wiersza, zwróciła nam informacje o imionach pracowników, zajmujących dane stanowisko.

Jak to działa?

Uruchamiając zapytanie:

SELECT dbo.nazwaFunkcji(Stanowisko) FROM pracownicy;

„Przechodziliśmy” po wszystkich wierszach z tabeli pracownicy, podając do funkcji nazwaFunkcji() dane z kolumny Stanowisko. W funkcji tej znowu przechodziliśmy, tym razem po całej tabeli pracownicy tak aby odczytać imiona pracowników zajmujących dane stanowisko. Informacje te były zapisywane do zmiennej @imie, którą na końcu zwróciliśmy.

Jak widać została zwrócona jedna wartość (zmienna @imie) czyli zgodnie z tym co napisałem na początku nasza funkcja skalarna zwróciła pojedynczą daną.

Usuwanie funkcji

Funkcje możemy skasować za pomocą takiego kodu:

IF OBJECT_ID('dbo.nazwaFunkcji') IF NOT NULL --jeżeli funkcja istnieje
     DROP FUNCTION dbo.nazwaFunkcji; --kasowanie

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

Odpowiedz

Twój adres e-mail nie zostanie opublikowany.

Pin It on Pinterest