ITA 101 Modul 08

background image

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

Programowanie zaawansowane w T-SQL ........................................................................................... 1

Informacje o module ........................................................................................................................... 2

Przygotowanie teoretyczne ................................................................................................................. 3

Przykładowy problem ................................................................................................................. 3

Podstawy teoretyczne ................................................................................................................. 3

Przykładowe rozwiązanie ............................................................................................................ 6

Porady praktyczne ...................................................................................................................... 7

Uwagi dla studenta ..................................................................................................................... 7

Dodatkowe źródła informacji ...................................................................................................... 8

Laboratorium podstawowe ................................................................................................................. 9

Problem 1 (czas realizacji 30 minut) ............................................................................................ 9

Problem 2 (czas realizacji 15 minut) .......................................................................................... 11

Laboratorium rozszerzone ................................................................................................................ 13

Zadanie 1 (czas realizacji 90 min) .............................................................................................. 13

background image

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

background image

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

background image

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

background image

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:

background image

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';

background image

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

background image

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ę.

background image

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

background image

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

background image

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

background image

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

background image

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?


Wyszukiwarka

Podobne podstrony:
ITA 101 Modul 03
ITA 101 Modul 02
ITA 101 Modul 06
ITA 101 Modul 13
ITA 101 Modul 11
ITA 101 Modul 04
ITA 101 Modul 09
ITA 101 Modul Dodatek A
ITA 101 Modul 07
ITA 101 Modul 10
ITA 101 Modul 12
ITA 101 Modul 01
ITA 101 Modul 05
ITA 101 Modul 02 v2

więcej podobnych podstron