ITA 101 Modul 09

background image

ITA-101 Bazy Danych

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

Wersja 1.0

Procedury składowane i wyzwalacze

Spis treści

Procedury składowane i wyzwalacze .................................................................................................. 1

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

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

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

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

Przykładowe rozwiązanie ............................................................................................................ 8

Porady praktyczne .................................................................................................................... 13

Uwagi dla studenta ................................................................................................................... 14

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

Laboratorium podstawowe ............................................................................................................... 15

Problem 1 (czas realizacji 10 min) ............................................................................................. 15

Problem 2 (czas realizacji 10 min) ............................................................................................. 16

Problem 3 (czas realizacji 15 min) ............................................................................................. 17

Problem 4 (czas realizacji 10 min) ............................................................................................. 18

Laboratorium rozszerzone ................................................................................................................ 21

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 2/21

Informacje o module

Opis modułu

W module zostanie zaprezentowany sposób działania oraz podstawy
tworzenia procedur składowanych. Dowiesz na czym polega różnica
pomiędzy zwykłym zapytaniem T-SQL a procedurą składowaną oraz co to
jest kompilacja i rekompilacja procedury. Zostanie wprowadzony również
specjalny rodzaj procedury składowanej – wyzwalacz.

Cel modułu

Celem modułu jest zapoznanie czytelnika z procedurami składowanymi oraz
wyzwalaczami w środowisku bazodanowym Microsoft SQL Server 2008 oraz
zaprezentowanie jak wykorzystad je w przykładowym projekcie.

Uzyskane kompetencje

Po zrealizowaniu modułu będziesz:

wiedział, jak napisad własną procedurę składowaną

umiał rozbudowywad gotowe procedury składowane

umiał tworzyd proste wyzwalacze

umiał zarządzad wyzwalaczami

umiał wykorzystywad wyzwalacze do optymalizacji i automatyzacji
działania SQL Server 2008

Wymagania wstępne

Przed przystąpieniem do pracy z tym modułem powinieneś:

potrafid samodzielnie stworzyd bazę danych wraz z jej obiektami
(patrz moduł 4)

znad podstawową składnię języka T-SQL

umied napisad własne zapytania w języku T-SQL (patrz moduł 6 i 7)

znad zaawansowane mechanizmy języka T-SQL (patrz moduł 9)

wiedzied na czym polega bezpieczeostwo w bazach danych (patrz
moduł 11)

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, 5, 6, 8, 10.

Moduł 9

Dodatek

Moduł 1

Moduł 2

Moduł 3

Moduł 4

Moduł 5

Moduł 6

Moduł 7

Moduł 8

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ł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 3/21

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. W SQL Server 2008 dostępny jest szereg systemowych procedur
składowanych. Oczywiście programista bazy danych może korzystad z ich również pisząc swoje
własne tzw. procedury składowane użytkownika. Kolejnym zadaniem jakie stoi przed programista i
administratorem bazy danych jest stworzenie odpowiednich liczby wyzwalaczy, które są pewnym
rodzajem procedur składowanych, które są wywoływane niejawnie. Należy pamiętad iż, procedury
składowane, które mogą byd wykorzystane przez programistę aplikacji dostępowej do bazy danych
powodują kolejną warstwę powodującą separację użytkownika koocowego od fizycznych danych
oraz powodują maskowanie fizycznej struktury bazy. Zatem bardzo ważne jest przemyślane i
odpowiednie stworzenie zbioru procedur składowanych.

Podstawy teoretyczne

Procedury składowane
Procedura składowana (ang. stored procedure) jest nazwanym zbiorem poleceo w języku SQL, który
jest przechowywany na serwerze w SZBD (System Zarządzania Bazą Danych) i jest kompilowany
przy pierwszym wykonaniu. Procedury wnoszą do środowiska serwera baz danych przetwarzanie
warunkowe i możliwości programistyczne.

W SZBD wykonanie dowolnego fragmentu kodu języka SQL wiąże się z pewnym ciągiem procesów –
począwszy od sprawdzenia składni aż po kompilację i wykonanie.

Proces wykonywania zapytania przez SQL Server

Poniżej zostało przedstawione, w jaki sposób odbywa się proces wykonania pojedynczego
zapytania w języku T-SQL w Microsoft SQL Server 2008:

1. Sprawdzenie i rozdzielenie kodu na fragmenty (często nazywane symbolami interpretowane

przez SZBD. Proces ten nazywamy analizą leksykalną.

2. Sprawdzenie kodu pod względem poprawności składni (kontrola poprawności semantycznej

– czyli czy kod nie odwołuje się do nieistniejących obiektów lub używa nieistniejących
poleceo oraz kontrola poprawności syntaktycznej – czy użyta składnia jest poprawna).

3. Standaryzacja wyodrębnionej części kodu, tzn. SZBD zapisuje go w jednoznacznej postaci

(usuwając niepotrzebne znaczniki).

4. Optymalizacja – każde zapytanie może posiadad wiele przygotowanych tzw. planów

wykonania (ang. execution plan). MS SQL Server posiada wewnętrzny proces zwany
Optymalizatorem Zapytao, który wybiera optymalny sposób dostępu do danych, tzn. taki
plan wykonania zapytania, w którym serwer będzie skanował (przeszukiwał) najmniejszą
ilośd stron danych (o fizycznej strukturze danych w MS SQL Server możesz przeczytad w
module 6). Na optymalizację szczególny wpływ mają struktura indeksów oraz sposób łączenia
tabel.

5. Kompilacja zapytania wg optymalnego planu wykonania i wykonanie skompilowanego

zapytania.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 4/21

6. Zwrócenie wyniku działania zapytania do klienta.

Proces wykonywania procedury składowanej

Wykonywanie procedur składowanych odbywa się inaczej niż wykonywanie pojedynczych zapytao
SQL. Poniżej prezentujemy schemat utworzenia i pierwszego wykonania procedury na przykładzie
MS SQL Server:

1. Tworzenie definicji procedury składowanej – tzn. wykonanie polecenie

CREATE PROCEDURE

.

2. Sprawdzanie kodu procedury pod względem syntaktyki.
3. Zapisanie nazwy procedury i jej kodu (tzw. ciało) do odpowiednich widoków systemowych

bazy danych (

sysobjects

oraz

syscomments

).

4. Wywołanie procedury składowanej przez użytkownika z odpowiednimi parametrami

używając polecenia EXEC.

5. Właściwe wykonanie procedury – optymalizacja planu wykonania i kompilacja.
6. Skompilowany optymalny plan wykonania jest zapisywany w tzw. buforze (z ang. cache'u

procedur.

Na Rys. 2 pokazano schemat tworzenia i wykonania procedury składowanej w środowisku SQL
Server 2008.

Rys. 2 Tworzenie i wykonanie procedury składowanej w SQL Server 2008

Rekompilacja procedur składowanych

Czasami zachodzi potrzeba ponownej kompilacji procedury składowanej. Dzieje się tak, gdy
wydajnośd skompilowanej procedury gwałtownie spada (może tak byd z wielu powodów, np.
zmiany struktury indeksów lub zapisania dużej ilości rekordów), gdy istnieje potrzeba kompilacji
procedury przy każdym jej wykonaniu (powody mogą byd te same, co w pierwszej sytuacji) lub gdy
zmianie ulega kod samej procedury (gdy użyjemy polecenia ALTER PROCEDURE).

Rekompilacji, czyli ponownej kompilacji procedury, można dokonad na dwa sposoby:

W definicji procedury dodając klauzulę

WITH RECOMPILE

.

Używając specjalnej systemowej procedury rekompilującej (w MS SQL Server jest to
procedura

sp_recompile

).

Tworzenie procedur składowanych

Do tworzenia procedur składowanych używamy polecenia języka SQL CREATE PROCEDURE (lub
CREATE PROC):

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 5/21

CREATE { PROC | PROCEDURE } [nazwa_schematu.] nazwa_procedury
[ { @parametr typ_danych }
[ WITH <opcje_procedury> [ ,...n ] ]
[ FOR REPLICATION ]
AS { <wyrażenie_sql> [;][ ...n ] }
[;]

<opcja_procedury> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE_AS_Clause ]

<wyrażenie_sql > ::=
{ [ BEGIN ] wyrażenie [ END ] }

W definicji procedury składowanej określamy:

nazwę procedury;

nazwy,

typy danych,

kierunek działania parametrów procedury;

ciało procedury – czyli kod wykonywany przez procedurę;

opcjonalnie deklarujemy, czy procedura ma byd przy każdym wykonaniu rekompilowana.

Poniżej podano przykład utworzenia prostej procedury składowanej nie zawierającej żadnych
parametrów:

CREATE PROCEDURE p_pracownicy
AS
SELECT imie, nazwisko
FROM Osoby

Wywołanie procedury składowanej

Do wywołania procedury składowanej służy polecenie

EXECUTE

(lub

EXEC

):

[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH RECOMPILE ]
}
[;]

Przykładowo dla utworzonej wcześniej procedury składowanej

p_pracownicy

wywołanie

procedury będzie wyglądało w następujący sposób.

EXEC p_pracownicy
GO

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 6/21

Parametry procedur składowanych

Procedury składowane mogą przyjmowad parametry wywołania. Ilośd i typ danych, które należy
podad przy wywołaniu procedury składowanej, określamy w trakcie tworzenia procedury (używając
polecenia

CREATE PROCEDURE

). W zależności od tego, czy parametry będą potrzebne do wykonania

procedury, czy też mają byd one przez procedurę zwrócone, wyróżniamy dwa rodzaje parametrów:
wejściowe (

INPUT

) oraz wyjściowe (

OUTPUT

).

Możliwe jest też zdefiniowanie w procedurze parametru przejściowego (będącego jednocześnie
wejściowym i wyjściowym), czyli parametru, którego wartośd podajemy przy wywołaniu procedury,
a procedura podczas działania może zmienid wartośd parametru i zwrócid nową wartośd.

CREATE PROCEDURE p_pracownicy
@nazwisko varchar(40)='Smith'
AS
SELECT imie, nazwisko
FROM Osoby
WHERE nazwisko=@nazwisko
GO

Zalety i wady procedur składowanych

Procedury składowane dzięki temu, że są zapisane na serwerze oraz dzięki skompilowanemu
planowi wykonania przechowywanemu w buforze procedur posiadają dwie zasadnicze zalety:

zwiększają wydajnośd bazy danych

ograniczają ruch w sieci (przesyłane są tylko nazwy procedur i wartości parametrów)

Ponadto procedury składowane mają kilka zalet z punktu widzenia programistów aplikacji
bazodanowych:

Zapewniają jedną logikę biznesową dla wszystkich aplikacji klienckich.

Przesłaniają szczegóły tabel w bazie danych (przezroczystośd struktury dla zwykłego
użytkownika aplikacji).

Umożliwiają modyfikację danych bez bezpośredniego dostępu do tabel bazy danych.

Dostarczają mechanizmów bezpieczeostwa (można nadawad uprawnienia do wykonywania
procedur poszczególnym użytkownikom bazy danych).

Umożliwiają programowania modularne (procedura zostaje zapisana w bazie danych, skąd
można ją wielokrotnie wywoływad; procedurę może pisad osoba wyspecjalizowana w bazach
danych – programista aplikacji jedynie ją wywoła).

Zapewniają szybsze wykonanie (jeśli wymagane jest wykonanie dużej liczby zapytao
procedury składowane są szybsze, ponieważ wykonują się na serwerze, są optymalizowane i
umieszczane w pamięci przy pierwszym wykonaniu).

Zmniejszają ruch sieciowy (jeśli zachodzi potrzeba wykonania wielu zapytao w T-SQL na raz,
można je zastąpid wywołaniem jednej procedury składowanej).

Jeśli w ogóle można mówid o wadach procedur składowanych, to w zasadzie można wspomnied o
kilku aspektach:

Następstwem rekompilacji czasem jest zmniejszenie wydajności procedury (czyli
administrator baz danych musi wiedzied, kiedy przeprowadzid rekompilację).

W przypadku zagnieżdżania procedur składowanych należy pamiętad o tym, że zmienia się
kontekst wykonania (procedura zagnieżdżana wykonuje się z uprawnieniami innej
procedury).

Wreszcie, aby tworzyd dobre (tzn. poprawnie działające) procedury składowane niezbędne
jest poznanie zaawansowanych mechanizmów języka SZBD (np. T-SQL) takich jak:
operowanie zmiennymi, funkcje i procedury systemowe, obsługa błędów.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 7/21

Wyzwalacze
Wyzwalacz (ang. trigger) jest specjalnym rodzajem procedury składowanej. W przeciwieostwie do
zwykłej procedury składowanej wyzwalacz nie może zostad jawnie wywołany.

Wyzwalacz jest wywoływany w reakcji na określone akcje. Akcje te to wykonanie przez użytkownika
określonego polecenia SQL (I

NSERT

,

UPDATE

,

DELETE

) na danej tabeli, dla której został określony

wyzwalacz.

Tworzenie wyzwalaczy

Wyzwalacze tworzymy używając polecenia CREATE TRIGGER. W definicji wyzwalacza określamy:

nazwę wyzwalacza;

dla jakiej tabeli tworzymy wyzwalacz;

na jakie akcje wyzwalacz będzie reagował;

jakiego typu wyzwalacz tworzymy;

ciało wyzwalacza (odpowiednik ciała procedury składowanej) - czyli kod wykonywany przez
wyzwalacz.

W SQL Server 2008 istnieją trzy rodzaje wyzwalaczy:

1. Triggery obsługujące operacje DML (ang. Data Manipulation Language), czyli

INSERT,

UPDATE

oraz

DELETE

wykonywane na tabeli lub widoku.

CREATE TRIGGER [ nazwa_schematu . ]nazwa_wyzwalacza
ON { table | view }
[ WITH <dml_opcje_wyzwalacza> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS { wyrazenie_sql [ ; ] [ ,...n ] }

<dml_opcje_wyzwalacza> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]

2. Wyzwalacze obsługujące operacje DDL (ang. Data Definition Language) czyli

CREATE

,

ALTER

,

DROP

oraz pewne procedury składowane, które wykonują operacje DDL.

CREATE TRIGGER nazwa_wyzwalacza
ON { ALL SERVER | DATABASE }
[ WITH <ddl_opcje_wyzwalacza> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { wyrażenie_sql [ ; ] [ ,...n ] }

<ddl_opcje_wyzwalacza> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]

3. Wyzwalacze obsługujące zdarzenie logowania (

LOGON

), który jest wywoływany, kiedy

ustalana jest sesja logującego się użytkownika.

CREATE TRIGGER nazwa_wyzwalacza
ON ALL SERVER
[ WITH <opcje_wyzwalacza_logon > [ ,...n ] ]

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 8/21

{ FOR | AFTER } LOGON
AS { wyrażenie_sql [ ; ] [ ,...n ] }


< opcje_wyzwalacza_logon > ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]

Zastosowanie wyzwalaczy

Wyzwalacze znajdują wiele zastosowao w bazach danych. Przede wszystkim stosujemy wyzwalacze
wszędzie tam, gdzie w inny sposób nie da się weryfikowad integralności danych, a zwłaszcza ich
zgodności z regułami logiki biznesowej. Na przykład chcemy, by w pewnej kolumnie tabeli
wstawiane były tylko wartości unikalne, ale jednocześnie zezwalamy na wstawienie wartości

NULL

.

Jedynym rozwiązaniem jest użycie wyzwalacza, który sprawdzi, czy wstawiana właśnie wartośd już
w danym polu wystąpiła, a jeżeli użytkownik wstawia wartośd

NULL

, to wyzwalacz mu na to pozwoli

(tego efektu nie można osiągnąd innymi metodami, np. używając indeksów, ustawiając właściwośd
unikalności kolumny lub używając kryteriów sprawdzających dane wstawiane w kolumnę).

Drugie zastosowanie to wszelkiego typu automatyzacja zadao administracyjnych w bazie danych
(wszelkiego rodzaju "przypominacze", obsługa nietypowych działao czy chociażby wysyłanie
wiadomości przez email lub pager).

Wreszcie z uwagi na pewne cechy wyzwalacze pozwalają na określony typ przetwarzania
transakcyjnego.

Przykładowe rozwiązanie

Tworzenie i uruchomienie procedury składowanej
W cel utworzenia nowej procedury składowanej należy z paska narzędziowego wybrad

New Query

. i

wpisad kod procedury. Przykładowo:

CREATE PROCEDURE dbo.getAllCustomers
AS
BEGIN

SELECT [CustomerID], [CompanyName]
FROM [Northwind].[dbo].[Customers]

END

Następnie należy wykonad skrypt klikając F5 lub wybierając z paska narzędziowego Execute. Jeśli
procedura składowana została utworzona poprawnie powinieneś otrzymad komunikat:
"Command(s) completed successfully" oraz zauważyd, że została dodana nowa procedura
składowana

w

Object

Explorer,

w

gałęzi

Databases->Northwind->Programmability-

>StoredProcedures co pokazano na Rysunku 3.

Jeśli procedury nie widad w wyżej wymienionej gałęzi proszę ją odświeżyd. Jeśli procedura jest już
utworzona, a mimo to zażądano kolejnego jej utworzenia to otrzymamy następujący komunikat:
„There is already an object named

‘getAllCustomers’

in the databases”

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 9/21

Rys. 3 Tworzenie nowej procedury

Aby uruchomid procedurę składowaną wystarczy użyd polecenia EXECUTE (lub krócej EXEC). Można
także kliknąd prawym klawiszem myszki na procedurze i wybrad "Execute Stored Procedure..." co
wywoła okienko, w którym można przekazad do procedury jakieś parametry. Na Rysunku 4 widad,
że rozwijane menu udostępnia także inne opcje takie jak modyfikacja lub usunięcie.

Rys. 4 Wywołanie procedury

Inne metody tworzenia procedur składowanych
Inną metoda tworzenia procedury składowanej jest skorzystanie z gotowego schematu procedury.
W tym celu kliknij prawym przyciskiem myszy na gałęzi "Stored Procedures" i wybierz "New
StoredProcedure..." – uzyskasz w ten sposób gotowy schemat procedury składowanej co pokazno
na Rysunku 5.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 10/21

Rys. 5 Tworzenie nowej procedury według wzorca

Procedury składowane a polisy
W SQL Server 2008 wprowadzono politykę opartą o Management Framework dla silnika SQL, dzięki
której zarządzanie serwerem będzie bardziej zautomatyzowane w oparciu o pewne reguły, a nie
skrypty.

Zadaniem DMF jest umożliwienie administratorowi zarządzania serwerami za pomocą
definiowanych przez administratora reguł. W SQL Server 2008 mamy gotowe szablony reguł oparte
o najlepsze praktyki zaimplementowane w narzędziu

Best Practices Analyzer

, używanym przez

administratorów z poprzednimi wersjami systemu SQL Server.

Korzystając z mechanizmu polis możemy stworzyd restrykcje dla procedur składowanych o postaci:
brak możliwości definiowania przez programistę bazy danych procedur składowanych z prefiksem
‘sp_’. Restrykcję tą wprowadzimy na bazie danych Biblioteka.

W ramach

Object Explore

rozwijamy zakładkę

Menagement

a następnie

Policy Menagement

. W

pierwszym kroku należy dodad warunki jakie będą dołączone do polisy.

Jako pierwszy stwórzmy warunek, który będzie pilnował żeby nazwa procedury składowanej była
inna niż

‘sp_’

. Konfigurację tego warunku pokazano na Rysunku 6.

Następnie należy stworzyd warunek, dotyczący bazy danych na którym polisa, którą za chwilę
założymy będzie działała. Konfigurację tego warunku pokazano na Rysunku 7.

Jak już mamy stworzone warunki to w kolejnym kroku należy wystawid polisę i dodad do niej
wcześniej stworzone warunki. Konfiguracje wystawiania polisy pokazano na Rysunku 8.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 11/21

Rys. 6 Stworzenie warunku na procedurę składowaną

Rys. 7 Stworzenie warunku na bazę danych

Rys. 8 Założenie polisy

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 12/21

Teraz kiedy mamy wystawiona polisę chcąc ją przetestowad należy klikną prawym przyciskiem na
bazie danych

Biblioteka

i wybrad

New Query

. Następnie wpisujemy kod pustej systemowej

procedury składowanej

CREATE PROCEDURE sp_testowa
AS
GO

Zauwazmy, ze wystapił błąd. Procedura nie została utworzona gdyż zadziałała restrykcja DMF co
pokazano na Rysunku 9.

Rys. 9 Błąd procedury i zadziałanie polisy

Tworzenie wyzwalacza
Stwórzmy wyzwalacz, którego zadaniem będzie nie dopuścid do zalogowania wskazanego przez nas
użytkownika. W tym celu na początku należy dodad użytkownika

zbd_user

i kojarzymy go z bazą

danych

AdventureWorks

. Następnie tworzymy odpowiedni wyzwalacz, który nie pozwoli

użytkownikowi zalogowad się do Microsoft SQL Server Management Studio. W tym celu, klikamy
prawym przyciskiem myszy na bazę

AdventureWorks

i z menu kontekstowego wybieramy

New

Query

. W oknie edycji zapytania wpisujemy następujący kod:

USE AdventureWorks
GO

CREATE TRIGGER trgRestrictUser
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS

BEGIN

IF (ORIGINAL_LOGIN()= 'zbd_user' AND APP_NAME() = 'Microsoft SQL
Server Management Studio')

ROLLBACK;
END

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 13/21

Aby przetestowad działanie utworzonego wyzwalacza uruchamiamy drugą instancję MS SQL Server
Management Studio. W oknie

Connect to Server Authentication

wybieramy

SQL Server

Authentication

, Login:

zbd_user

, Password:

user

. Zatwierdzamy klikając

Connect

. Wybierając

Connect pokazuje się błąd logowania co pokazano na Rysunku 10.

Rys. 10 Bład logowania

Porady praktyczne

Procedury składowane

W MS SQL Server przy kontroli poprawności kodu procedury w trakcie jej tworzenia serwer
nie sprawdza, czy istnieją obiekty (tabele, widoki), do których procedura się odwołuje.
Sprawdzenie to następuje dopiero przy wykonaniu procedury (w przypadku odwołania do
nieistniejącego obiektu procedura zgłosi błąd).

Rekompilacja procedury składowanej nie oznacza utworzenia procedury na nowo. Oznacza
utworzenie nowego planu wykonania i zapisanie go do bufora procedury na miejsce
poprzednio skompilowanego planu tej samej procedury.

Systemowe procedury składowane w systemie Microsoft SQL Server 2008 są
przechowywane w bazie

master

, zaś w ich nazwach pojawia się prefiks

‘sp_’

Zgodnie z dobra praktyka programowania baz danych procedury składowane użytkownika w
SQL Server 2008 nie powinny zaczynad się od prefiksu

‘sp_’

. Prefiksem tym obarczone są

systemowe procedury składowane. W sytuacji kiedy kompilator zobaczy procedurę
składowaną o takiej nazwie będzie jej szukał w procedurach systemowych jako tych, które
już są skompilowane a ich wynik zapamiętany w cachu procedury. Dopiero kiedy jej tam nie
znajdzie stwierdzi że jest to procedura użytkownika i zacznie ją kompilowad według
poznanego schematu. Spowoduje to wydłużenie czasu wykonania procedury składowanej.

Stworzenie polisy, która nie pozwoli programiście utworzyd procedury składowanej
zaczynającej się od prefiksu

‘sp_’

spowoduje, że pierwsza próba stworzenia procedury o

takiej nazwie pociągnie za sobą koniecznośd uruchomienia sprawdzenia polisy a zatem czas
nieznacznie się wydłuży. Kolejne wykonanie próby stworzenia procedury niezgodnej z polisa
spowoduje natychmiastowe wyświetlenie komunikatu o naruszeniu restrykcji.

Wyzwalacze

Wyzwalacze mogą byd tworzone bezpośrednio w MS SQL Server 2008 Database Engine za
pomocą zwykłych zapytao napisanych w języku T-SQL lub poprzez specjalne metody w
Microsoft .NET Framework Common Language Runtime (CLR), a następnie po utworzeniu
importowane do instancji serwera bazodanowego. MS SQL Server 2008 pozwala na
tworzenie wielu wyzwalaczy dla specyficznego zdarzenia. Do tworzenia wyzwalaczy
potrzebne są specjalne uprawnienia w bazie danych.

Następujące instrukcje języka T-SQL nie są dozwolone w wyzwalaczach DML:

ALTER

DATABASE

,

LOAD DATABASE

,

RESTORE DATABASE

,

CREATE DATABASE

,

LOAD LOG

,

RESTORE

LOG

,

DROP DATABASE

i

RECONFGURE

. Dodatkowo powyższe instrukcje nie mogą byd użyte

wewnątrz ciała wyzwalacza DML.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 14/21

Uwagi dla studenta

Jesteś przygotowany do realizacji laboratorium jeśli:

rozumiesz, co to jest procedura składowana oraz wyzwalacz

rozumiesz zasadę działania procedur składowanych i wyzwalaczy

znasz składnię zaawansowanego języka Transact-SQL

umiesz dodawad użytkowników do SQL Server

rozumiesz różnicę pomiędzy różnymi rodzajami wyzwalaczy

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. 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 obszernie przedstawiono zagadnienia związane z programowaniem baz
danych. Szczegółowo omówiono zagadnienia dotyczące procedur składowanych i
wyzwalaczy. Omówiono w niej implementacje procedur składowanych oraz w jaki
sposób przyznawad do nich uprawnienia. Pokazano implementacje wyzwalaczy
(DML i DDL). Książka szczególnie polecana ze względu na dużą zawartośd dwiczeo
laboratoryjnych.

2. Kalen Delaney, Podstawy baz danych krok po kroku, APN Promise, 2006

Bardzo dobra książka dla osób początkujących. Pokazano w niej praktyczne
zastosowanie wyzwalaczy i procedur składowanych. Książka oprócz teorii
obdarzona dużą liczbą przykładów.

3. Dusan Petkovic, Microsoft SQL Server 2008: A Beginner's Guide, McGraw-Hill, 2008

Pozycja napisana w sposób prosty. Wprowadza w SQL Server 2008 w sposób szybki
i łatwy. Osoba początkująca w SQL Server 2008 znajdzie w niej podstawy z każdego
tematu dotyczącego serwera bazodanowego. W prosty sposób dowiesz się jak
należy tworzyd proste procedury składowane bez parametrów i z parametrami oraz
poznasz jak należy stworzyd wyzwalacz i w jakiej sytuacji go zastosowad. Pozycja
szczególnie polecana dla osób początkujących jak i zaawansowanych.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 15/21

Laboratorium podstawowe

Problem 1 (czas realizacji 10 min)

Jesteś programistą bazodanowym 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ą. Pierwsze zadanie, jakie przed Tobą
analiza procedur składowanych już istniejących.

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. Informacja o
bazie danych

Z menu głównego wybierz File -> Open -> File.

Odszukaj plik C:\Labs\Lab09\ProcedurySystemowe.sql i kliknij Open.

Zaznacz i uruchom (F5) poniższy fragment kodu, który wywołuje
procedurę systemową sp_helpdb:

-- (1) Ustawiamy sie na baze danych PraceDyplomowe

USE PraceDyplomowe
GO

-- (2) Wywolanie procedury systemowej sp_helpdb

EXEC sp_helpdb PraceDyplomowe

Procedura sp_helpdb zwraca informacje o wybranej bazie danych
(rozmiar, listę plików i informacje o nich).

3. Informacje o
obiektach bazy
danych

Zaznacz i uruchom (F5) poniższy fragment kodu, który wywołuje
procedurę systemową sp_help:

-- (3) Wywolanie procedury systemowej sp_help

EXEC sp_help dbo.Prace

Procedura sp_help zwraca informacje o wybranym obiekcie bazy
danych.

Czy w tabeli dbo.Prace jest jakakolwiek kolumna typu bit?

4. Informacje o
indeksach tabeli

Zaznacz kod, który wywołuje procedurę systemową sp_helpindex.

-- (4) Wywolanie procedury systemowej sp_helpindex

EXEC sp_helpindex dbo.Prace

Wciśnij F5, aby uruchomid zaznaczony fragment kodu.

Procedura sp_helpindex zwraca listę i opis indeksów założonych na
kolumnach w wybranej tabeli.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 16/21


Czy w tabeli dbo.Prace jest nałożony jakiś indeks?

Problem 2 (czas realizacji 10 min)

Po dokonaniu analizy procedur już istniejących, kolejne zadanie jakie przed Toba zostało
postawione to zdefiniowanie procedur składowanych dla nowych użytkowników oraz modyfikacja
już istniejących procedur składowanych. W pierwszej kolejności powinieneś zająd się procedurami
składowanymi bez parametrów.

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. Utworzenie
procedury
składowanej

Kliknij w menu głównym programu Management Studio na File.

Kliknij Open -> File.

Odszukaj plik C:\Labs\Lab10\Procedura_bez_parametrow.sql i kliknij
Open.

Zaznacz kod, który wywołuje procedurę składowaną Promotorzy (patrz
kod poniżej).

-- (1) Ustawiamy sie na baze danych PraceDyplomowe

USE PraceDyplomowe
GO

-- (2) Tworzymy procedure skladowana uzytkownika

CREATE PROCEDURE Promotorzy
AS
BEGIN
SELECT [Nazwisko], [Imie]
FROM Promotor
END

Innym sposobem stworzenia procedury składowanej jest kliknięcie
prawym przyciskiem myszy na gałęzi "Stored Procedures" i wybranie
"New StoredProcedure..." – uzyskasz w ten sposób gotowy schemat
procedury składowanej.

Wciśnij F5, aby uruchomid zaznaczony fragment kodu.

Jeśli procedura składowana została utworzona poprawnie, powinieneś
otrzymad komunikat "Command(s) completed successfully" oraz
zauważyd, że została dodana nowa procedura składowana w Object
Explorer
, w gałęzi Databases -> PraceDyplomowe -> Programmability
-> StoredProcedures. Jeśli procedury nie widad w w/w gałęzi, odśwież
ją. Jeśli procedura jest już utworzona, a mimo to zażądano kolejnego

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 17/21

jej utworzenia, to otrzymamy następujący komunikat: „There is
already object name ‘Promotorzy’ in the database”.

3. Uruchomie-
nie procedury
składowanej

Zaznacz kod, który wywołuje procedurę Promotorzy.

-- (3) Wywolujemy procedure skladowana Promotorzy

EXEC Promotorzy
GO

Innym sposobem na wywołanie procedury składowanej jest kliknięcie
prawym przyciskiem myszy na procedurze Promotorzy i wybierz
Execute Stored Procedure..." co wywoła okienko, w którym można
przekazad do procedury jakieś parametry.

Wciśnij F5, aby uruchomid zaznaczony fragment kodu.

Problem 3 (czas realizacji 15 min)

Kolejne zadanie jakie powinieneś wykonad to zdefiniowanie procedur składowanych dla nowych
użytkowników oraz modyfikacja już istniejących procedur składowanych z parametrami

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. Utworzenie
procedury
składowanej

Kliknij w menu głównym programu Management Studio na File.

Kliknij Open -> File.

Odszukaj plik C:\Labs\Lab10\Procedura_z_parametrami.sql i kliknij
Open.

Zaznacz kod, który wywołuje procedurę składowaną Promotorzy (patrz
kod poniżej).

-- (1) Ustawiamy sie na baze danych PraceDyplomowe

USE PraceDyplomowe
GO

-- (2) Tworzymy procedure skladowana użytkownika z parametrem

CREATE PROCEDURE dbo.Promotorzy
@Nazwisko VARCHAR(30)
AS
BEGIN
SELECT *
FROM [PraceDyplomowe].[dbo].[Osoba]
WHERE [PraceDyplomowe].[dbo].[Osoba].[nazwisko] = @Nazwisko
END

Wciśnij F5, aby uruchomid zaznaczony fragment kodu.

Jeśli procedura składowana została utworzona poprawnie powinieneś
otrzymad komunikat "Command(s) completed successfully" oraz

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 18/21

zauważyd, że została dodana nowa procedura składowana w Object
Explorer
, w gałęzi Databases->PraceDyplomowe->Programmability-
>StoredProcedures

3. Uruchomie-
nie procedury
składowanej

Zaznacz kod, który wywołuje procedurę Promotorzy. Wciśnij F5, aby
uruchomid zaznaczony fragment kodu

-- (3) Wywolujemy procedure skladowana z parametrem

EXEC Promotorzy @Nazwisko='Kowalski'

GO


Lub kilknij prawym przyciskiem myszy na procedurze Promotorzy i
wybierz Execute Stored Procedure..." co wywoła okienko w którym
można przekazad do procedury jakieś parametry. Co pokazano na
Rysunku 11.

Rys. 11 Wywołanie procedury składowanej z parametrem

Problem 4 (czas realizacji 10 min)

Po zdefiniowaniu procedur składowanych wynikających z zmian jakie zachodzą w firmie w której
pracujesz kolejnym etapem jest stworzenie odpowiedniej liczby wyzwalaczy. Jednym z wyzwalaczy
jest zaimplementowania warunku, że każdy opiekun może mied maksymalnie 10 dyplomantów.

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. Utworzenie
procedury
składowanej

Kliknij w menu głównym programu Management Studio na File.

Kliknij Open -> File.

Odszukaj plik C:\Labs\Lab10\Wyzwalacz_1.sql i kliknij Open.

Zaznacz i uruchom (F5) poniższy fragment kodu:

-- (1) Ustawiamy się na baze danych PraceDyplomowe

USE PraceDyplomowe
GO

-- (2) przygotujmy tabele do testowania wyzwalaczy

SELECT ID_Osoby, Nazwisko, Imie, Nr_Indeksu, ID_Stopnian

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 19/21

INTO Osoba_kopi
FROM Osoba
GO

Zaznacz i uruchom (F5) fragment kodu oznaczonego w komentarzu (3).
Wynik pokazano na Rys. :

-- (3) zobaczmy, co znajduje sie w tabeli
SELECT * FROM Osoba_kopi
GO

Rys. 12

Następnie stwórz

Wyzwalacz

, którego zadaniem będzie przechwycenie

wykonywanego zapytania i wyświetlenie zdefiniowanej przez nas
informacji.

W obrębie okna Object Explorer wybieramy Osoba -> Triggers.

Wciskamy prawy przycisk myszy i wybieramy New Trigger.

Wpisujemy poniższy kod:

-- (4) Tworzymy nowy wyzwalacz

CREATE TRIGGER Ocenay
ON Osoba
AFTER INSERT, UPDATE
AS
DECLARE @username as varchar(30)
SELECT @username = SYSTEM_USER
PRINT 'Uzytkownik '+ @username + ' zmienil zawartosc tabeli
Osoba!!!'
GO

W celu zobaczenia działania wyzwalacza wywołujemy następujące
zapytanie:

-- (5) Sprawdzamy dzialanie wyzwalacza

UPDATE Osoba
SET [Nazwisko] = 'Nowak'
WHERE ID_Osoby=1
GO

Jeśli wyzwalacz zadziałał poprawnie, w oknie Messages powinien
pojawid się komunikat o tresci przedstawionej na Rysunku 13.

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 20/21

Rys.133

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 9

ITA-101 Bazy danych

Procedury składowane i wyzwalacze

Strona 21/21

Laboratorium rozszerzone

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 oraz
spełnienia standardów bezpieczeostwa dostęp do obiektów bazy danych powinien odbywad się
poprzez procedury składowane. W wyniku tego częśd procedur składowanych powinna zostad
zmodyfikowana i przekompilowana, częśd powinna zostad napisana od początku, a częśd powinna
zostad usunięta. Kolejnym pojawiającym się problemem jest kwestia spójności zmodyfikowanej
bazy danych. W tym celu powinny zostad zmodyfikowane, utworzone lub usunięte wyzwalacze
służące do zaimplementowania pewnych warunków.

Zadanie, jakie przed Tobą stoi, to:

1. Podjęcie decyzji, jakie nowe procedury składowane i wyzwalacze powinny zostad utworzone

w celu poprawienia bezpieczeostwa bazy danych.

2. Podjęcie decyzji, które procedury składowane w bazie danych pozostaną bez zmian, a które

zostaną zmodyfikowane lub usunięte.

3. Podjęcie decyzji, które wyzwalacze w bazie danych pozostaną bez zmian, a które zostaną

zmodyfikowane lub usunięte.


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 Dodatek A
ITA 101 Modul 08
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