You are on page 1of 9

Witaj, Agnieszka AM

 Lekcje  Edux Kurs (SBD) Lekcje

 Następny
Język proceduralny - wiadomości ogólne. 
Język
Poprzedni rozdział
proceduralny
rozdział 
Język proceduralny (ang. procedural language) – język programowania umożliwiający tworzenie oprogramowania w postaci programu głównego oraz
wielu procedur (lub podprogramów), z których każda realizuje określoną funkcję i może być wywoływana wielokrotnie przez program główny. (Cyt.
Wikipedia).

Zapoznając się z językiem SQL poznawaliśmy sposoby wykonywania pojedynczych instrukcji tego języka. Jednak w praktyce na ogół istnieje
konieczność jednoczesnego wykonania większej liczby instrukcji, przekazania wyników pomiędzy tymi instrukcjami, sprawdzenia warunków ich
wykonania i uzależnienia od uzyskanych wyników dalszego postępowania z danymi. Składnia „czystego” SQL nie umożliwia wykonywania tak
zaawansowanych operacji.

Serwery baz danych oferują rozszerzenie języka SQL o konstrukcje typowe dla nieobiektowych języków programowania. Rozszerzenie to jest
zdefiniowane w standardzie języka SQL już od wersji z roku 1999 i nosi nazwę SQL/PSM. Producenci serwerów baz danych implementują jednak
własne rozwiązania i tak, Microsoft SQL Server oferuje język Transact-SQL (T-SQL), ORACLE posiada swój PL/SQL a IBM w bazie danych DB2
implementuje język SQL/PL.

Każdy z tych języków wprowadza takie rozwiązania jak zmienne, instrukcje warunkowe, instrukcje pętli, możliwość tworzenia procedur i funkcji oraz
inne charakterystyczne tylko dla środowisk baz danych (np. kursory, wyzwalacze). Wszystkie te konstrukcje stanowią uzupełnienie języka SQL, który
z definicji jest ich pozbawiony. Polecenia języka SQL mogą być elementami struktur języków proceduralnych.

Po stronie serwera bazy danych powinny być wykonywane wszystkie operacje związane ze składowaniem danych, centralną kontrolą spójności i
bezpieczeństwa danych. Znaczna część tych zadań może zostać zrealizowana wprost przez polecenia języka SQL, ale ich możliwości są mocno
ograniczone. Języki proceduralne pozwalają rozszerzyć te zadania, a pojedyncze instrukcje łączyć w większe struktury, które mogą być
przechowywane jako obiekty bazy danych:

procedury składowane

wyzwalacze

Procedury składowane to zwyczajowa nazwa procedur tworzonych i przechowywanych po stronie serwera bazy danych. Przymiotnik „składowane” ma
zaakcentować właśnie tą ich cechę.

Język proceduralny - uwagi dotyczące zasad użycia.

Przystępując do nauki języków proceduralnych w bazach danych, należy pamiętać, że stanowią one uzupełnienie języka SQL a nie jego ekwiwalent.
Serwery baz danych najsprawniej wykonują polecenia języka SQL, zatem zawsze priorytetowym rozwiązaniem powinno być to, które wykorzystuje w
celu dokonania operacji na danych "czysty" SQL. Użycie instrukcji języka proceduralnego powinno pojawiać się dopiero wówczas, gdy pewne operacje
w SQL są niemożliwe do wykonania, z uwagi na naturalne ograniczenia tego języka. Również nie wszystkie konstrukcje języków proceduralnych są
jednakowo wydajne. Wskazówki dotyczące tych kwestii będą umieszczane w dalszej części wykładów.

Język proceduralny..

Język T-SQL - wiadomości ogólne

Jako pierwszy zostanie omówiony język Transact SQL (T-SQL) implementowany przez serwer firmy Microsoft. Język ten został stworzony przez
firmę SYBASE i wbudowany do serwerów tej firmy, później prawa do jego wykorzystania kupiła firma Microsoft. Obecnie jest wbudowywany w
kolejnych wersjach serwera MS SQL i wraz z nim rozwijany. W dalszej części wykładu będzie zasadniczo omawiana wersja MS SQL Server 2012.

T-SQL
posiada dość prostą składnię, niemniej umożliwiającą realizację
wszystkich niezbędnych zadań po stronie serwera bazy danych. Kod
wykonywany jest bezpośrednio na serwerze.

Po
stronie serwera bazy danych powinny być wykonywane wszystkie operacje
związane ze składowaniem danych, centralną kontrolą spójności i
bezpieczeństwa danych. Znaczna część tych zadań może zostać zrealizowana
wprost przez polecenia języka SQL. T-SQL pozwala
rozszerzyć te zadania, a pojedyncze instrukcje łączyć w większe
struktury, które mogą być przechowywane jako obiekty bazy danych:

procedury składowane

wyzwalacze 
Pytania kontrolne

1. W relacyjnej bazie danych istnieje możliwość przechowania danych poza tabelą

Prawda
 Następny
Język rozdział
Fałsz  Poprzedni
proceduralny
rozdział 
Sprawdź odpowiedź

2. Składnia "czystego" języka SQL nie przewiduje deklarowania zmiennych.

Fałsz

Prawda

Sprawdź odpowiedź

3. Użycie poleceń języka SQL zawsze powninno mieć wyższy priorytet, niż użycie języka proceduralnego.

Prawda

Fałsz

Sprawdź odpowiedź

2021 © PJATK


Witaj, Agnieszka AM

 Lekcje  Edux Kurs (SBD) Lekcje

 pisane z Następny
Blok
Zgodnie z wymogami standardu języka SQL, wszystkie słowa kluczowe, nazwy obiektów i zmiennych są Not Case Sensitive – mogą być
rozdział
 Poprzedni
dowolnym użyciem małych i dużych liter. Dotyczy to zarówno składni SQL jak i T-SQL. Jednak ten stan może zostaćanonimowy
zmieniony przez zmianę ustawień
serwera.
rozdział 

Pod pojęciem bloku anonimowego przyjęło sie rozumieć pewien zestaw instrukcji (poleceń) języka SQL i/lub T-SQl, które są wspólnie wykonywane.
Nazwa ta ma pełne uzasadnienie w ORACLE, gdzie konstrukcja bloku jest ściśle określona. Konstrukcja bloku anonimowego w T-SQL jest bardzo
prosta (może nawet za prosta – pozwalająca na nieporządne pisanie kodu) i w zasadzie nie sformalizowana. Jako blok może zostać potraktowana
niemal każda pojedyncza instrukcja. Instrukcje mogą być pisane w jednej linii, linie mogą być łamane w dowolnym miejscu bez użycia jakiegokolwiek
znacznika. Jednak zdecydowanie zaleca się wprowadzanie pewnego porządku – umieszczanie kolejnych linii jedna pod drugą, kończenie poleceń
średnikami (choć MS SQL Server tego nie wymaga), stosowanie wcięć.

W T-SQL każdy blok powinien być kończony słowem GO, będącym poleceniem wykonania instrukcji zawartych w bloku. W praktyce słowo GO jest na
ogół pomijane. Management studio uzupełnia nim (niejawnie) każdy blok, jeśli zostało ono pominięte. Jawne wprowadzanie GO staje się istotne, gdy
chcemy uruchomić kilka kolejnych, niezależnych od siebie programów (bolków).

Blok może (ale nie musi!) być wyróżniany słowami BEGIN (otwarecie bloku) i END (zamknięcie bloku). Bloki mogą być zagnieżdżane. Jeżeli zostanie
użyte słowo BEGIN otwierające blok, musi on zostać zamknięty słowem END.

Każda zadeklarowana lokalnie zmienna „żyje” do wystąpienia najbliższego wystąpienia słowa GO.

Pojęcie bloku anonimowego

Odczytanie wyników działania instrukcji

Wynik działania instrukcji SELECT jest wypisywany na pulpit aplikacji MS Management Studio w postaci zestawu odczytanych rekordów (Result set).

W przypadku poprawnego wykonania instrukcji DML wyświetlany jest komunikat o liczbie zmodyfikowanych wierszy np. (5 row(s) affected).
Komunikat ten jest też przekazywany do aplikacji. Może zostać wyłączony poleceniem SET NOCOUNT ON (i ponownie włączony SET NOCOUNT
OFF).

Poleceniem wypisania wyniku działania wyrażenia jest PRINT, np.

PRINT 'Ala ma ' + Cast(2+2 As Varchar) + ' koty.'

Identyczny efekt da zastąpienie słowa PRINT przez SELECT. Jednak PRINT pozwala tylko wypisać wartości na pulpit, podczas
gdy SELECT umożliwia też inne operacje.

Komentarze

Część kodu nie przeznaczona do wykonywania (wyłączona), nazywana jest komentarzem. W trakcie wykonywania programu będzie ona ignorowana
przez interpreter. W obu środowiskach (ORACLE i MS SQL) komentarz oznaczany jest jednakowo.

Komentarz blokowy, dowolna liczba linii, pomiędzy nawiasami:

/* te wiersze są zakomentowane

i nie będą brane pod uwagę w trakcie

wykonywania programu*/

Komentarz jednoliniowy – do końca linii:

-- a to są zakomentowane dwa pojedyncze wiersze,

-- one też zostaną pominięte

SELECT * FROM emp; --polecenie odczytania danych

Blok anonimowy T-SQL



Podstawową
konstrukcją programistyczną w językach proceduralnych baz danych jest
tzw. blok anonimowy. Pojęcie bloku anonimowego jest sformalizowane w
języku ORACLE Pl/SQL, w MS SQL Server nazwa ta jest pominięta. Pod

pojęciem bloku anonimowego należy rozumieć szereg instrukcji języka


proceduralnego wraz z instrukcjami SQL, które są tworzone bezpośrednio w
środowiskach developerskich (Management Studio, Sqldeveloper, SQL+), a
następnie wykonywane przez interpreter serwera bazy danych, ale nie są
zapisywane jako obiekty bazy danych (procedury, funkcje, wyzwalacze). Następny
Blok 
Instrukcjami zdefiniowanymi i wykonywanymi w ramach bloku anonimowego  Poprzedni rozdział
mogą być deklaracje zmiennych i kursorów, instrukcje podstawienia anonimowy
rozdział 
wartości na zmienne, instrukcje warunkowe i instrukcje pętli, polecenia
języka SQL. Tego
typu programy mogą być zapisywane w postaci skryptów – plików
tekstowych zawierających kod możliwy do ponownego (wielokrotnego)
użycia.

Blok anonimowy

1. Które z poniższych poleceń ma NIEprawidłową składnię w T-SQL

SELECT 1;

SELECT 1 FROM emp;

PRINT 1;

PRINT 1 FROM emp;

Sprawdź odpowiedź

Pytania kontrolne

2. Jakie słowo kluczowe otwiera (inicjuje) blok anonimowy w T-SQL?

GO

OPEN

BEGIN

Nie jest wymagane formalne otwarcie bloku.

Sprawdź odpowiedź

3. Liczba słów BEGIN i END użytych w składni dowolnie rozbudowanych poleceń musi być identyczna.

Tak

Nie

Sprawdź odpowiedź

4. Czy instrukcja: --SELECT * FROM emp; zostanie wykonana?

Tak

NIe

Sprawdź odpowiedź

2021 © PJATK


Witaj, Agnieszka AM

 Lekcje  Edux Kurs (SBD) Lekcje

 Następny
Pojęcie zmiennej  Zmienne Poprzedni rozdział
rozdział 
Zmienna jest jednym z podstawowych elementów niezbędnych przy programowaniu kodu. Pojęcie zmiennej pojawia się w niemal każdym języku
programowania. Rolą zmiennej jest przechowywanie wartości (danych) określonego typu. Deklaracja zmiennej to przekazanie do serwera bazy
danych informacji o konieczności zarezerwowania w pamięci RAM obszaru o rozmiarze odpowiadającym typowi deklarowanej zmiennej. Nazwa
zmiennej to jednocześnie jej identyfikator (musi być unikalna w obszarze swojego działania), jak też pośrednio wskaźnik do miejsca jej
przechowywania w pamięci.

W języku T-SQL użycie każdej zmiennej musi zostać poprzedzone jej deklaracją. Nazwa każdej zmiennej musi rozpoczynać się znakiem @. i może
zawierać litery, cyfry i znaki podkreślenia. Litery alfabetów narodowych są w zasadzie akceptowane, ale sugeruję unikanie takich rozwiązań.

W celu zadeklarowania zmiennej używana jest instrukcja DECLARE a po niej nazwa zmiennej i jej typ.

Typy zmiennych – takie same jak w przypadku poleceń języka SQL w poleceniach tworzenia tabel – zostaną wymienione na końcu wykładu. Można w
uproszczeniu przyjąć, że mamy do czynienia z typami napisowymi (Char,Varchar), liczbami stałoprzecinkowymi (Inetger), zmiennoprzecinkowymi
(Decimal, Money), daty i czasu (Date, Time, Datetime).

Deklaracja zmiennych w T-SQL

Przykład 1

Deklaracja pojedynczej zmiennej:

DECLARE @nazwisko Varchar(30);

W pojedynczej instrukcji DECLARE można zadeklarować wiele zmiennych:

Przykład 2

Deklaracja wielu zmiennych w jednej instrukcji:

DECLARE @nazwisko Varchar(30), @imie Varchar(20),

@Data_urodzenia Date;

Instrukcja DECLARE może pojawiać się wielokrotnie, w dowolnym miejscu kodu. Jedynym wymogiem jest, aby deklaracja zmiennej poprzedzała jej
użycie (odwołanie się do niej).

Naddawanie wartości zmiennym

Każda zadeklarowana zmienna otrzymuje domyślną wartość NULL, bez względu na typ danych. Aby ten stan zmienić, należy zmienną zainicjować,
czyli nadać jej wartość znaczącą (mówimy potocznie "podstawić wartość na zmienną"). nadanie początkowej wartości zmiennej może nastąpić wraz z
jej deklaracją.

Przykład 1

DECLARE @Cena Money = 1500

,@Kupujacy Varchar(30) = 'PJWSTK'

,@Data_sprzedazy Date = Getdate();

W powyższym przykładzie wszystkim zmiennym w trakcie ich deklarowania zostaną nadane wartości początkowe, które w dalszym procesie
wykonywania obliczeń mogą zostać zmienione.

Wartość podstawiana na zmienną w trakcie jej deklaracji może być wynikiem wykonania instrukcji SELECT

Przykład 2

DECLARE @Ile Int = (SELECT COUNT(1) FROM EMP);

Wartości zmiennym nie muszą być nadawane wraz z ich deklaracją. Ale należy pamiętać, że próba użycia w dowolnym wyrażeniu niezainicjowanej
zmiennej, czyli mającej wartość NULL, zwróci NULL jako wartość całego wyrażenia. 

Zmienne systemowe
Zmienne systemowe

Nazwy zmiennych systemowych w T-SQL zaczynają się od podwójnego znaku @. Nie należy ich deklarować, są one Read Only. Służą do przekazania
(odczytania z nich) istotnych informacji przechowywanych lub wyliczanych przez serwer bazy danych. Kilka najczęściej używanych:

@@Version - zwraca informację o wersji używanego serwera bazy danych,


 Następny
 Zmienne Poprzedni rozdział
@@Identity – ostatnio wygenerowana wartość w autonumerowanej kolumnie, rozdział 

@@Error – numer ostatniego błędu,

@@Rowcount – liczba rekordów, na których operowała ostatnia instrukcja SQL; w przypadku SELECT – liczba zwracanych przez instrukcję
rekordów,

@@Fetch_status – zwraca informację o podstawieniu rekordu w ostatniej instrukcji FETCH kursora (0 sukces, rekord podstawiony, -1 porażka,
rekord niepodstawiony).

Wyświetlenie (odczyt) wartości zmiennych systemowych odbywa się przy użyciu instrukcji PRINT lub SELECT – tak jak w przypadku każdej
zmiennej.

Zmienne

Pytania kontrolne

1. Która z poniższych deklaracji zmiennych jest prawidłowa w T-SQL

DECLARE @Ala Int;

DECLARE @Ala;

DECLARE Ala Int;

DECLARE @Ala Varchar;

Sprawdź odpowiedź

2. Które z poniższych instrukcji nie podstawi na zmienną żadnej wartości? Zakładamy, że zmienna @Ala typu Varchar(10) została wcześniej prawidłowo
zadeklarowana i wcześniej nie została zainicjowana.

SET @Ala = 10;

SET @Ala = 'Ala ' + 'makota';

SET @Ala = 'Ala madziesięć kotów';

SET @Ala = @Ala;

Sprawdź odpowiedź

3. Jaką wartość zwróci następująca sekwencja poleceń:


INSERT INTO dept (deptno, dname, loc) VALUES (50, 'BANDITS', 'Denver');

Print @@Rowcount;

Aktualną iczbę rekordów w tabeli dept (np. 5)

OK

50, 'BANDITS', 'Denver'

Zbiór pusty

Sprawdź odpowiedź

4. Jaką wartość zwróci następująca sekwencja poleceń:



DECLARE @Ala Int, @Ela Int = 10;

SET @Ela = @Ala;


@ @

Print @Ela;

10

10
 Następny
Błąd? Nie, tu wszystko jest składniowo poprawne.  Zmienne Poprzedni rozdział
rozdział 
Sprawdź odpowiedź

2021 © PJATK


Witaj, Agnieszka AM

 Lekcje  Edux Kurs (SBD) Lekcje

Proste  Następny
Pod pojęciem programu będziemy rozumieli sekwencję poleceń języka SQL i T-SQL. W obu rodzajach poleceń mogą być wykorzystywane zmienne,
 programy Poprzedni rozdział
zarówno lokalne, deklarowane przez programistę, jak też omówione wcześniej zmienne systemowe. Instrukcjami SQL które mogą się pojawić jako
w T-SQL
składniki programów, są wszystkie składniowo poprawne polecenia DQL, DML, DDL i DQL. Mogą w nich być używane zmienne do przekazywania 
rozdział

wartości, na których instrukcje operują. Podstawienie pojedynczej wartości odczytanej ze źródła danych na pojedynczą, wcześniej zadeklarowaną
zmienną, przedstawia poniższy przykład:

Przykład 1

DECLARE @Ilu Int, @Info Varchar(64);

SELECT @Ilu = COUNT(1)

FROM EMP;

Print 'W tabeli EMP zapisanych jest ' + Cast(@Ilu AS Varchar) + ' pracowników';

W T-SQL należy pamiętać o konieczności dokonywania jawnej konwersji danych na typ napisowych przy konkatenacji (funkcje Cast i Convert).

W jednej instrukcji SELECT można dokonać podstawienia kilku wartości na wcześniej zadeklarowane zmienne.

Przykład 2

DECLARE @Ilu Int, @Budzet Money, @Info Varchar(30);

SELECT @Ilu = COUNT(1), @Budzet = SUM(sal)

FROM EMP;

Print 'W tabeli EMP zapisanych jest ' + Cast(@Ilu AS Varchar) + ' pracowników i zarabiają łącznie '
+ Cast(@Budzet As Varchar);

UWAGA

Jeżeli instrukcja SELECT zwróci więcej niż jeden wiersz, podstawienie wartości na pojedyncze zmienne (tak jak w powyższych przykładach)
POWIEDZIE SIĘ, a na zmienne zostaną podstawione wartości odczytane z ostatniego wiersza źródła danych.

Przykład 3:

W tym przykładzie usuniemy dział o podanej nazwie, ustawiając wartość Deptno pracowników tego działu na NULL. W komunikacie wyświetlimy liczbę
zmodyfikowanych rekordów.

DECLARE @Deptno Int, @Info Varchar(50), @Ile Int;

SELECT @Deptno = Deptno

FROM DEPT

WHERE DNAME = 'OPERATIONS';

UPDATE EMP SET DEPTNO = NULL WHERE DEPTNO = @Deptno;

SET @Ile = @@ROWCOUNT;

DELETE FROM DEPT WHERE DEPTNO = @Deptno;

Print 'Usunięto Departament OPERATIONS i zmodyfikowano wartość Deptno w rekordach '


+ Cast(@Ile AS Varchar) + ' pracowników';

Proste programy w T-SQL

Pytania kontrolne

1. Jaki będzie wynik wykonania poniższej sekwencji poleceń w środowisku MS SQL Server?
CREATE TABLE X (X1 Int);
INSERT INTO X (X1) VALUES (10), (20), (30);
DECLARE @X Int;
SELECT @X = X1 FROM X;
PRINT @X;

0
10

20

30

Zbiór pusty (NULL)


Proste  Następny
Sprawdź odpowiedź  programy Poprzedni rozdział
w T-SQL rozdział 

2. Uzasadnieniem wyniku poprzedniego zadania jest fakt, że:

Jeżeli instrukcja SELECT odczytuje dane z więcej niż jednego rekordu, na zmienną jest podstawiana jest największa odczytana wartość

Jeżeli instrukcja SELECT odczytuje dane z więcej niż jednego rekordu, na zmienną jest podstawiana jest wartość z ostatniego odczytanego rekordu

Sprawdź odpowiedź

2021 © PJATK

You might also like