ITA-101 Bazy Danych
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
Wersja 1.0
Programowanie zaawansowane
w T-SQL
Spis treści
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 2/13
Informacje o module
Opis modułu
Programowanie w języku zapytao to ważna umiejętnośd. Powinni ją
opanowad zarówno programiści, jak i administratorzy. Różne dialekty języka
SQL oferują różne składnie, jednak reguły, jakimi powinien kierowad się
tworzący kod, są te same niezależnie od SZBD. Bardzo często opanowanie w
zaawansowanym stopniu składni jednego języka pozwala w przyszłości na
łatwe opanowanie innego. W module tym znajdziesz informację na temat
zaawansowanego programowania w T-SQL.
Cel modułu
Celem modułu jest zapoznanie czytelnika z zaawansowanymi elementami
języka T-SQL, takimi jak instrukcje sterujące, kursory, obsługa błędów itp.
Uzyskane kompetencje
Po zrealizowaniu modułu będziesz:
potrafił użyd instrukcji sterujących w języku T-SQL
rozumiał sposób działania i funkcjonowania kursorów
wiedział, w jaki sposób działa obsługa błędów
Wymagania wstępne
Przed przystąpieniem do pracy z tym modułem powinieneś:
potrafid stworzyd bazę danych wraz z jej podstawowymi obiektami
(patrz Moduł 4)
potrafid napisad podstawowe instrukcje w języku T-SQL DCL i T-SQL
DDL (patrz Moduł 6)
potrafid pisad zapytania w języku T-SQL DML (patrz Moduł 7)
rozumied podstawową składnię języka T-SQL
Mapa zależności modułu
Zgodnie z mapą zależności przedstawioną na Rys. 1, przed przystąpieniem
do realizacji tego modułu należy zapoznad się z materiałem zawartym
w Module 3, Module 5 i Module 6.
Moduł 8
Dodatek
Moduł 1
Moduł 2
Moduł 3
Moduł 4
Moduł 5
Moduł 6
Moduł 7
Moduł 9
Moduł 10
Moduł 11
Moduł 12
Moduł 13
Rys. 1 Mapa zależności modułu
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 3/13
Przygotowanie teoretyczne
Przykładowy problem
Podczas wytwarzania bazy danych wiąże ze sobą grupę osób do której należą projektant bazy
danych, administrator systemu zarządzania bazą danych, administrator bazy danych oraz
programista bazy danych. Bardzo ważne jest żeby wszyscy biorący udział w wytwarzaniu systemu
bazodanowego współdziałali ze sobą na różnych etapach. Najwięcej wspólnego z programowaniem
w T-SQL ma programista bazy danych. To od niego w dużej mierze zależy czy wytworzone przez
niego funkcje, procedury składowane, wyzwalacze i inne element programistyczne będą działały we
właściwy sposób. To on odpowiedzialny jest za przygotowanie odpowiednich elementów
programowych, które następnie będzie wykorzystywał projektant aplikacji i programista aplikacji
dostępowej. A zatem również od niego w pewnym stopniu zależy bezpieczeostwo danych
gromadzonych w bazie. Zatem powinien on dysponowad odpowiednią wiedzą i posiadad pewne
umiejętności z zakresu zaawansowanego programowania w języku T-SQL. Zatem znajomośd tego
języka oraz dobre nawyki wynikające z praktyki programowania są bardzo ważne. Podstawowymi
składowymi języka T-SQL są instrukcje sterujące, kursory i obsługa błędów.
Podstawy teoretyczne
Język T-SQL stale ewoluuje. Właściwie z języka zapytao stał się językiem programowania baz
danych. Programiści tworzący oprogramowanie mogą łatwo nauczyd się języka T-SQL dzięki
istniejącym analogiom do tradycyjnych języków programowania proceduralnego. Jednymi z częściej
używanych konstrukcji są instrukcje sterujące.
Instrukcje sterujące
Instrukcja sterująca
IF...ELSE
daje możliwośd warunkowego wykonywania bloków kodu. W
implementacji T-SQL wygląda ona jak poniżej:
IF warunek_logiczny
{ wyrażenie_sql | wyrażenie_blokowe }
ELSE
{ wyrażenie_sql | wyrażenie_blokowe }
Należy zwrócid uwagę, że jeśli blok po słowie IF lub ELSE składa się z wielu linii kodu, musisz użyd
właśnie składni
BEGIN...END
. Wówczas:
IF warunek_logiczny
BEGIN
wyrażenie_sql | wyrażenie_blokowe
END
ELSE
BEGIN
wyrażenie_sql | wyrażenie_blokowe
END
Poniższy kod przedstawia przykładowe użycie instrukcji sterującej
IF...ELSE.
IF @zmienna > 100
PRINT 'Zmienna jest większa niż 100'
ELSE
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 4/13
BEGIN
PRINT 'Zmienna jest mniejsza niż 100'
SET @zmienna = 0 -- zerowanie zmiennej
END
Kolejna instrukcja sterująca to pętla
WHILE
. W T-SQL wygląda ona następująco:
WHILE wyrażenie_logiczne
{ wyrażenie_sql | wyrażenie_blokowe }
[BREAK]
{ wyrażenie_sql | wyrażenie_blokowe }
[CONTINUE]
{ wyrażenie_sql | wyrażenie_blokowe }
Wyrażenie logiczne zwraca wartośd TRUE lub FALSE. Podobnie jak w przypadku instrukcji sterującej
IF...ELSE
jeśli wyrażenie SQL składa się z wielu linii kodu, musisz użyd właśnie składni
BEGIN...END
. W instrukcji WHILE występują dwa istotne argumenty:
BREAKE
powoduje wyjście z pętli WHILE.
CONTINUE
powoduje ponowne uruchomienie instrukcji
WHILE
Poniższy kod przedstawia przykładowe użycie instrukcji sterującej
WHILE.
DECLARE @zmienna int
SET @zmienna = 0
WHILE @zmienna < 10
BEGIN
PRINT 'Iteracja nr ' + CAST(@zmienna AS varchar(2))
SET @zmienna = @zmienna + 1
END
Należy pamiętad, że pętla WHILE może byd wykonywana w nieskooczonośd, jeśli programista nie
zapewni wyjścia z pętli.
Kursory
Kursor to obiekt, który umożliwia poruszanie się po wynikach zapytania rekord po rekordzie.
Umożliwia on przetwarzanie rekordów jeden po drugim co daje możliwośd zaawansowanego
formatowania wyników wyszukiwania danych (ale w ściśle określonej kolejności, determinowanej
przez wynik zapytania użytego w definicji kursora)
Implementacja kursora w języku T-SQL wygląda następująco:
DECLARE nazwa_kursora CURSOR [ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR wyrażenie_select
[ FOR UPDATE [ OF nazwa_kolumny [ ,...n ] ] ]
[;]
Poniższy kod przedstawia przykładowe użycie kursora
.
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM Northwind.dbo.Employees
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 5/13
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ładnia specjalna
Nowoczesne języki SQL obfitują w specjalne składnie, które znacznie rozszerzają funkcjonalnośd.
Przykładem takiej składni może byd
PIVOT
. Składnia ta umożliwia stworzenie tabeli wynikowej z
zapytania
SELECT
, w której w nagłówkach wierszy i kolumn znajdują się wartości z tabel
źródłowych.
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;
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śd zamówieo u wybranych producentów, dokonanych przez pięciu pracowników (każdy
pracownik o określonym EmployeeID).
Obsługa błędów
W trakcie działania kodu SQL mogą wydarzyd się nieprzewidziane błędy. Błędy te mogą wynikad z
różnych przyczyn. Mogą to byd błędy wynikające z narzuconych w bazie danych ograniczeo lub na
przykład 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.
Błędy wykrywamy najczęściej w:
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 6/13
transakcjach – po wykryciu błędu wycofujemy transakcję
procedurach składowanych – wykrywamy błędy powstałe głównie w wyniku niepoprawnych
wartości parametrów podanych przez użytkownika
wyzwalaczach – 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
Metod pozwalających na wykrycie błędów jest wiele. Można zastosowad instrukcje sterujące, np.
IF...ELSE
, do sprawdzania wartości zmiennych, by w ten sposób zapobiegad wystąpieniu błędów.
Druga metoda to wykorzystanie istniejących w Systemie Zarządzania Bazą Danych funkcji
wykrywających błędy. W systemie Microsoft SQL Server taką funkcją jest
@@ERROR
, która zwraca
numer ostatnio napotkanego błędu w bieżącej sesji.
Aktualnie istnieją także inne, można by rzec 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żej
pokazano składnię
TRY...CATCH
(ang. try – próbuj, catch – przechwyd).
BEGINE TRY
{ wyrażenie_sql | wyrażenie_blokowe }
END TRY
BEGIN CATCH
{ wyrażenie_sql | wyrażenie_blokowe }
END CATCH
jeśli wyrażenie SQL składa się z wielu linii kodu, podobnie jak w przypadku instrukcji sterujących
IF…ELSE
i
WHILE
musisz użyd składni
BEGIN...END
.
Przykładowe rozwiązanie
Przykładowe użycie instrukcji sterującej
Rozważmy przykład w którym średnia cena produktu jest mniejsza od 100 zł. Jeżeli maksymalna
cena jest większa od 300 zł wówczas pętla
WHILE
kasuje tą wartośd a następnie podwaja ją. Pętla ta
wykonuje się do momentu aż maksymalna cena jest większa od 300 zł. Po spełnieniu warunku
wychodzimy z pętli i wyświetlamy komunikat.
USE AdventureWorks;
GO
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < 100
BEGIN
UPDATE Production.Product
SET ListPrice = ListPrice * 2
SELECT MAX(ListPrice) FROM Production.Product
IF (SELECT MAX(ListPrice) FROM Production.Product) > 300
BREAK
ELSE
CONTINUE
END
PRINT 'Wyświetlony komunikat po wyjściu z pętli';
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 7/13
Przykładowe użycie TRY…CATCH
Poniższy fragment kodu obrazuje przykładową obsługę wyjątków przy pomocy składni
TRY...CATCH
. W celu pokazania obsługi błędów dokonujemy dzielenia przez zero, które jest
niewykonalny. Wówczas
TRY
zwraca wyjątek, który jest przechwytywany przez
CATCH
. W bloku
CATCH
po przechwyceniu wyjątku, wyświetlany jest odpowiedni komunikat zdefiniowany prze
programiste.
BEGIN TRY
-- generujemy błąd
SELECT 1/0;
END TRY
BEGIN CATCH
-- obsługujemy błąd
RAISERROR('Nie dzielimy przez zero',16,1)
END CATCH;
Porady praktyczne
Funkcja wykrywania błędów
@@error
zwraca:
o wartośd
0
jeżeli nie napotka błędu w wyniku wykonania wyrażenie T-SQL.
o Numer błędu jeżeli napotka błąd w wyniku wykonania wyrażenia T-SQL.
Na poniższym przykładzie pokazano użycie funkcji
@@error
do sprawdzenia naruszenia
ograniczenia, które może dojśd w sytuacji modyfikacji danych.
UPDATE EmployeePayHistory
SET PayFrequency = 4
WHERE EmployeeID = 1;
IF @@ERROR = 547
PRINT 'naruszone ograniczenie.';
GO
Informacje na temat błędu mogą byd uzyskiwane przy użyciu funkcji
ERROR_NUMBER
(numer
błędu) i
ERROR_MESSAGE
(komunikat błędu).
SQL Server udostępnia trzy rodzaje programowalnych obiektów: funkcje, procedury
składowane i wyzwalacze. W celu poprawnego pisania elementów programowalnych należy
znad zaawansowane elementy języka T-SQL. Zamiast wykonywania pojedynczego polecenia
lub komendy, obiekty te umożliwiają tworzenie bogatej logiki programistycznej, które
zawierają pętle, kontrole przepływu, podejmowania decyzji i rozwidlenia.
Zdolnośd do uruchamiania transakcji i przeznaczenie ich do pozostawienia lub wycofania nie
wystarczy do efektywnego radzenia sobie z problemem. W tym przypadku niezbędnym
składnikiem jest zdolnośd do programowanego wykrywania i obsłużenia błędów.
Wewnątrz bloku
CATCH
możemy ustalid co spowodowało błąd i przekazad informacje o
błędzie użynając systemu obsługi błędów języka T-SQL. Najczęściej używanymi takimi
funkcjami są
ERROR_NUMBER
i
ERROR_MESSAGE
. Zwracają one numer błędu i tekst opisu błędu.
Używając funkcji
ERROR_NUMBER
i
ERROR_MESSAGE
w bloku instrukcji
CATCH
możemy
zdecydowad, czy potrzeba użyd
ROLLBACK
do cofnięcia naszej transakcji.
Uwagi dla studenta
Jesteś przygotowany do realizacji laboratorium jeśli:
rozumiesz, co oznacza instrukcja sterująca
rozumiesz zasadę działania kursorów
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 8/13
umiesz zdefiniowad prostą pętlę
umiesz podad przykład obsługi błędów
Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że
rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego
w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów.
Dodatkowe źródła informacji
1. Kalen Delaney, Microsoft SQL Server 2005: Rozwiązania praktyczne krok po kroku, Microsoft
Press, 2006
W książce autor w przystępny i zrozumiały sposób przedstawia podstawowe
mechanizmy zaawansowanego programowania w języku T-SQL. Książka polecana
szczególnie dla osób początkujących.
2. Edward Whalen, Microsoft SQL Server 2005 Administrator’s Companion, Microsoft Press, 2006
W książce autor pokazał zaawansowane mechanizmy projektowania w języku T-
SQL, które mogą zostad wykorzystane do programowania w bazach danych takich
obiektów jak funkcje, procedury składowane, wyzwalacze i transakcje. Pozycja
szczególnie polecana dla osób chcących poszerzyd swoją wiedze na temat
programowania baz danych.
3. Deren Bieniek, Randy Dyess, Mike Hotek, Javier Loria, Adam Machanic, Antonio Soto, Adolfo
Wiernik, SQL Server 2005 Implemantacja i obsuga, APN Promise, Warsyawa 2006
W książce tej podobnie jak w powyższej pozycji przedstawiono elementy
zaawansowanego programowania w języku T-SQL. Pokazano praktyczne
zastosowanie zaawansowanych mechanizmów T-SQL. Książka polecana dla osób
początkujących jak również chcących poszerzyd swoją wiedzę.
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 9/13
Laboratorium podstawowe
Problem 1 (czas realizacji 30 minut)
Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że
firma National Insurance zarządzająca systemem prac dyplomowych na twoim wydziale planuje
rozszerzenie systemu na skalę uczelnianą. Zadanie, jakie przed Tobą stoi, to stworzenie
zaawansowanego mechanizmu wybierania danych z twojej bazie danych oraz przedstawienie tych
danych w odpowiedniej formie.
Zadanie
Tok postępowania
1. Nawiązywanie
połączenia z SQL
Server 2008
Uruchom maszynę wirtualną BD2008.
— Jako nazwę użytkownika podaj Administrator.
— Jako hasło podaj P@ssw0rd.
Jeśli nie masz zdefiniowanej maszyny wirtualnej w MS Virtual PC,
dodaj nową maszynę używając wirtualnego dysku twardego z pliku
D:\VirtualPC\Dydaktyka\BD2008.vhd.
Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom
SQL Server Management Studio.
W oknie logowania kliknij Connect.
2. Instrukcja
sterująca CASE
Z menu głównego wybierz File -> Open -> File.
Odszukaj pliku C:\Labs\Lab06\Case.sql.
Zaznacz i uruchom kod ze skryptu Case.sql. Wynik działania pokazano
na Rys. 2.
USE PraceDyplomowe
GO
SELECT
C.Nazwisko, C.Imie,
CASE
WHEN E.ID_Ocena = '2' THEN 'trzy'
ELSE 'inna'
END AS Gender
FROM Ocena E
INNER JOIN Osoba C
ON E.ID_Ocena = C.ID_Osoby
GO
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 10/13
Rys. 2 Wynik działania skryptu z użyciem instrukcji CASE
3. Stronicowanie
danych
Z menu głównego wybierz File -> Open -> File.
Odszukaj pliku C:\Labs\Lab06\Stronicowanie.sql
Zaznacz i uruchom kod ze skryptu Stronicowanie.sql. Wynik działania
pokazano na Rys. 3.
USE PraceDyplomowe
GO
SELECT T.Nazwisko
FROM (
SELECT
Nazwisko,
ROW_NUMBER() OVER(ORDER BY ID_Stopnian) AS Pozytywna
FROM Osoba
) AS T
WHERE T.Pozytywna BETWEEN 2 AND 6
GO
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 11/13
Rys. 3 Wynik stronicowania danych
Powyższe zapytanie stanowi rozwiązanie problemu stronicowania
danych. W tym wypadku wynikiem jest lista osób z tabeli Osoby, przy
czym wyświetlone zostają nazwiska osób, które z pracy otrzymały
ocenę pomiędzy 3 a 5, biorąc pod uwagę sortowanie według kolumny
ID_Stopnian.
Zapytanie zadziała tak samo, nawet gdy numeracja w tej kolumnie nie
będzie ciągła. Wykorzystuje ono podzapytanie, w którym dla każdego
wiersza generowana jest liczba porządkowa za pomocą funkcji
ROW_NUMBER (funkcja ta musi przed generowaniem wartości
określid kryterium sortowania, stąd klauzula ORDER BY).
Problem 2 (czas realizacji 15 minut)
Kolejne zadanie jakie związane jest z rozbudową systemu prac dyplomowych jakie przed Tobą stoi
to oprogramowanie obsługi błędów (przechwytywanie i obsługa) z użyciem zaawansowanych
mechanizmów jakimi dysponuje SQL Server.
Zadanie
Tok postępowania
1. Nawiązywanie
połączenia z SQL
Server 2008
Uruchom maszynę wirtualną BD2008.
— Jako nazwę użytkownika podaj Administrator.
— Jako hasło podaj P@ssw0rd.
Jeśli nie masz zdefiniowanej maszyny wirtualnej w MS Virtual PC,
dodaj nową maszynę używając wirtualnego dysku twardego z pliku
D:\VirtualPC\Dydaktyka\BD2008.vhd.
Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom
SQL Server Management Studio.
W oknie logowania kliknij Connect.
2. Tworzenie
tabeli archiwizacji
błędów
Z menu głównego wybierz File -> Open -> File.
Odszukaj pliku C:\Labs\Lab09\Errors.sql
Zaznacz i uruchom kod ze skryptu Errors.sql, który tworzy tabele, w
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 12/13
której będą zapisywane informacje o błędach. Wynik działania pokazano
na Rys. 2.
-- (1) Ustawiamy się na baze danych PraceDyplomowe
USE PraceDyplomowe
GO
-- (2) Tworzymy tabele w ktorej bedzie przechowywana informacja o
-- bledach
CREATE TABLE TabelaBledow
(
ErrorID int IDENTITY(1,1) PRIMARY KEY,
ErrorNumber int NOT NULL,
ErrorMessage nvarchar(200) NOT NULL,
ErrorDate datetime DEFAULT GETDATE()
)
GO
Powyższy kod tworzy tabelę TabelaBledow, która będzie zawierała
informacje o występujących błędach. W kolumnie ErrorNumber
zapisany zostanie numer błędu, w kolumnie ErrorMessage –
komunikat błędu, zaś w kolumnie ErrorDate – data i godzina
wystąpienia błędu (wartośd domyślna – bieżąca data i czas – jest
generowana przy pomocy funkcji systemowej GETDATE).
3. Przechwytywa
nie błędów
Zaznacz i uruchom (F5) poniższy fragment kodu:
-- (3) Implementacja obslugi przechwytywania bledow
BEGIN TRY
SELECT 1/0
END TRY
BEGIN CATCH
INSERT TabelaBledow(ErrorNumber, ErrorMessage)
SELECT ERROR_NUMBER(), ERROR_MESSAGE()
END CATCH
GO
4. Przeglądanie
informacji o
wystąpieniu błędu
Zaznacz i uruchom (F5) poniższy fragment kodu:
-- (4) Wyswietlenie zawartosci tabeli bledow
SELECT * FROM TabelaBledow
GO
Wynik działania pokazano na Rysunku 4.
Rys. 4 Informacja o błędzie
Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski
Moduł 8
ITA-101 Bazy danych
Programowanie zaawansowane w T-SQL
Strona 13/13
Laboratorium rozszerzone
Zadanie 1 (czas realizacji 90 min)
Jesteś administratorem w firmie National Insurance. Właśnie dowiedziałeś się od swojego szefa, że
firma zarządzająca bazą AdventureWorks planuje rozszerzenie i modernizacje systemu w celu
spełnienia pewnych standardów. W związku z modernizacją systemu bazodanowego
najprawdopodobniej ulegną zmianie pewne metody wybierania danych. Wydaje się zasadne
stworzenie bardziej wyrafinowanych metod wybierania danych w oparciu o zaawansowane
konstrukcje języka T-SQL. Prawdopodobnie również w związku z wejściem na wyższy poziom
programowania w T-SQL będziesz musiał wprowadzid strukturalną obsługę błędów.
Zadanie, jakie przed Toba stoi, to:
1. Podjęcie decyzji, które zapytania w bazie danych pozostaną bez zmian, które stare proste
zapytania zostaną zmodyfikowane i zastąpione czymś bardziej złożonym wykorzystując
zaawansowane możliwości języka T-SQL, a które będą musiały zostad całkowicie usunięte.
2. Zaplanowanie struktury obsługi błędów dla zapytao istniejących w systemie bazodanowym?