Zaawansowane
programowanie
w T-SQL
Przegląd zagadnień
Składnie T-SQL
Obsługa błędów
Podsumowanie
Laboratorium
Składnie T-SQL
Transact-SQL (T-SQL) to implementacja języka SQL w
systemie Microsoft SQL Server. Język ten nieco różni się
od standardu, ale większość podstawowych definicji jest
taka, jak w standardzie.
T-SQL - z języka zapytań stał się językiem
programowania baz danych.
Instrukcje sterujące
Jednymi z częściej używanych składni są instrukcje
sterujące.
Instrukcja sterująca IF...ELSE daje możliwość warunkowego
wykonywania bloków kodu. W implementacji T-SQL wygląda
ona jak poniżej.
DECLARE @zmienna int
SET @zmienna = 100
IF @zmienna > 100
PRINT 'Zmienna jest większa niż 100‘
ELSE
BEGIN
PRINT 'Zmienna jest mniejsza niż 100'
SET @zmienna = 0 -- zerowanie zmiennej
END
Instrukcje sterujące
Kolejna składnia sterująca to pętla WHILE. W T-SQL
wygląda to następująco.
DECLARE @zmienna int
SET @zmienna = 0
WHILE @zmienna < 10
BEGIN
PRINT 'Iteracja nr ' + CAST(@zmienna AS
varchar(2))
SET @zmienna = @zmienna + 1
END
Kursory
Kursor to zestawy rekordów umieszczanych w pamięci i
przechowujących wyniki zapytań typu SELECT.
Umożliwiają zaawansowane formatowanie wyników
wyszukiwania danych i przetwarzanie rekordów jeden po
drugim
(ale
w
ściśle
określonej
kolejności
determinowanej przez wynik zapytania, które stanowi
definicję kursora).
Kursory
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM Northwind.dbo.Employees
WHERE LastName like 'B%'
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
Składnie specjalne
Nowoczesne języki SQL obfitują w specjalne składnie,
które znacznie rozszerzają jego funkcjonalność.
Przykładem takiej składni może być PIVOT.
Składnia ta umożliwia stworzenie tabeli wynikowej z
zapytania SELECT, w której na nagłówkach wierszy
i kolumn znajdują się wartości z tabel źródłowych.
Składnie specjalne
USE AdventureWorks
GO
SELECT VendorID, [164] AS Emp1, [198] AS Emp2,
[223] AS Emp3, [231] AS Emp4, [233] AS Emp5
FROM
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [164], [198], [223], [231], [233] )
) AS pvt
ORDER BY VendorID;
Składnie specjalne
-- Przykładowy wynik
VendorID Emp1 Emp2 Emp3 Emp4 Emp5
1 4 3 5 4 4
2 4 1 5 5 5
3 4 3 5 4 4
4 4 2 5 5 4
5 5 1 5 5 5
Powyższy wynik obrazuje możliwości tej składni
umożliwiając zbudowanie tabeli wyświetlającej ilość
zamówień u wybranych producentów dokonanych
przez pięciu pracowników (każdy pracownik o
określonym EmployeeID).
Obsługa błędów - Gdzie wykrywać błędy?
W trakcie działania kodu SQL mogą wydarzyć się
nieprzewidziane błędy.
Mogą to być błędy wynikające:
z narzuconych w bazie danych ograniczeń,
błędy wynikające z prób wykonania niedozwolonych
operacji.
Wykrycie tych błędów i odpowiednia na nie reakcja to
zadanie dla programisty baz danych.
Obsługa błędów - Gdzie wykrywać błędy?
Błędy wykrywamy najczęściej w:
transakcjach - po wykryciu błędu wycofujemy transakcję,
procedurach składowanych - wykrywamy błędy powstałe
głównie w wyniku niepoprawnych wartości parametrów przez
użytkownika,
triggerach - podobnie jak w transakcjach, po napotkaniu
błędu wycofywana jest transakcja wywołująca trigger,
blokach kodu SQL - wszelkie rozbudowane bloki kodu
wymagają wykrywania błędów.
Obsługa błędów
Metody wykrywania błędów
Jak można wykrywać błędy? Metod na to jest wiele.
Po pierwsze można zastosować składnie sterujące, np.
IF...ELSE, do sprawdzania wartości zmiennych jeszcze
przed wystąpieniem błędu.
Druga metoda to wykorzystanie istniejących w SZBD funkcji
wykrywających błędy.
W systemie Microsoft SQL Server taką funkcją jest
@@ERROR, która zwraca numer błędu napotkanego w
ostatnio napotkanego błędu w bieżącej sesji.
Obsługa błędów
Metody wykrywania błędów
Aktualnie istnieją także inne, lepsze metody wykrywania
i obsługi błędów.
Chodzi o strukturalną obsługę wyjątków.
Jako wyjątek rozumiemy błąd, który wymaga obsługi.
Poniższy fragment kodu obrazuje przykładową obsługę
wyjątków przy pomocy składni TRY...CATCH (TRY - próbuj,
CATCH - przechwyć i obsłuż).
Podsumowanie
Składnie T-SQL
Obsługa błędów
Programowanie w języku zapytań to ważna umiejętność.
Powinni ją opanować zarówno programiści, jak i
administratorzy. Różne języki SQL oferują różne składnie.
Jednak reguły, jakimi powinien kierować się tworzący kod, są
te same nizależnie od SZBD. Bardzo często opanowanie w
zaawansowanym stopniu składni jednego języka pozwala w
przyszłości na łatwe opanowanie innego.
Laboratorium
Instrukcja sterująca CASE
Instrukcja PIVOT
Stronicowane danych z użyciem funkcji rankingu
Obsługa błędów