na MS SQLServer 2005 i 2008



Podobne dokumenty
Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Paweł Rajba

PODSTAWY BAZ DANYCH 13. PL/SQL

W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Administracja i programowanie pod Microsoft SQL Server 2000

Systemowe aspekty baz

Zaawansowane bazy danych i hurtownie danych semestr I

Administracja i programowanie pod Microsoft SQL Server 2000

Administracja i programowanie pod Microsoft SQL Server 2000

PL/SQL. Zaawansowane tematy PL/SQL

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Język PL/SQL Procedury i funkcje składowane

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Struktura bazy danych

Składowane procedury i funkcje

15. Funkcje i procedury składowane PL/SQL

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

BAZY DANYCH Cz III. Transakcje, Triggery

Systemowe aspekty baz danych

Oracle PL/SQL. Paweł Rajba.

Bloki anonimowe w PL/SQL

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Wykład 8. SQL praca z tabelami 5

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Procedury i funkcje składowane

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

SQL 4 Structured Query Lenguage

Microsoft SQL Server Podstawy T-SQL

Oracle PL/SQL. Paweł Rajba.

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Bazy danych. dr inż. Arkadiusz Mirakowski

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Administracja i programowanie pod Microsoft SQL Server 2000

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Pakiety podprogramów Dynamiczny SQL

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

Bazy danych. Polecenia SQL

Ćwiczenia 2 IBM DB2 Data Studio

Kursory. A. Pankowska 1

1. Wyzwalacze BD (ang. triggers)

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Obowiązuje od wersji

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Oracle11g: Wprowadzenie do SQL

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Oracle PL/SQL. Paweł Rajba.

Bazy danych i usługi sieciowe

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Bazy Danych i Usługi Sieciowe

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Elementy. języka SQL

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Spis treści. Przedmowa

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Programowanie obiektów

Microsoft SQL Server 2012 Krok po kroku

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

Język PL/SQL. Rozdział 4. Procedury i funkcje składowane

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła

Język SQL, zajęcia nr 1

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Oracle PL/SQL. Paweł Rajba.

Hurtownia Świętego Mikołaja projekt bazy danych

Wyzwalacze (triggery) Przykład

Relacyjne bazy danych. Podstawy SQL

Podprogramy. Rozdział 11 Procedury i funkcje składowane

Projektowanie systemów baz danych

BAZA DANYCH SIECI HOTELI

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

Transkrypt:

Wprowadzenie do programowania na MS SQLServer 2005 i 2008 Kalen Delaney, Inside MS SQL Server 2000, Wydawnictwo RM, 2001 Kalen Delaney, Inside MS SQL Server 2005, The storage engine, Microsoft Press, 2007 MS SQL Server 2005, 2008 Books Online: http://msdn.microsoft.com/en-us/library/ms130214.aspx Paweł Lenkiewicz, Administrowanie bazami danych na przykładzie Microsoft SQL Server 2005, Wyd.PJWSTK i materiały do zajęć 1

Pojęcie bazy danych W odróżnieniu od Oracle, jedna instalacja (instancja) serwera zawiera wiele baz danych. Bazy danych są przechowywane w plikach, które odpowiadają fizycznym plikom na dysku. Domyślnie przy tworzeniu bazy danych jest tworzony jeden plik dla danych oraz jeden dla dziennika (logu) transakcji. Bazy danych dzielą się na systemowe (master, model, tempdb, msdb) i użytkownika. Obiekty bazy danych są podzielone na schematy. Pełna referencja do obiektu na serwerze: bazadanych.schemat.obiekt (domyślny schemat dbo). 2

Struktura serwera w Object Explorer 3

Bazy systemowe Master podstawowa systemowa baza danych, zawierająca metadane np. informacje o kontach użytkowników, bazach danych i innych obiektach serwera. Korzystamy za pomocą odpowiednich narzędzi oraz procedur systemowych. Model jest szablonem bazy danych. Gdy tworzymy nową bazę danych użytkownika, jest ona kopią bazy model. Dzięki niej możemy uprościć tworzenie wielu identycznych baz danych. Jeżeli w bazie Model utworzymy tabele, procedury składowane i inne obiekty, to każda nowa baza danych będzie te obiekty zawierać. 4

Bazy systemowe Tempdb baza w której serwer trzyma informacje tymczasowe np. tabele i procedury tymczasowe użytkowników. Msdb przechowuje informacje na temat zaplanowanych zadań. Korzystamy za pomocą odpowiednich narzędzi oraz procedur systemowych. 5

SQL Server Management Studio graficzny interfejs Tworzenie do baz danych na serwerze i administrowanie bazami danych. Łatwiejsze niż z linii poleceń tworzenie i modyfikowanie tabel, procedur, wyzwalaczy, perspektyw, indeksów, typów danych, użytkowników, uprawnień. Wprowadzanie, wyświetlanie, import i eksport danych. 6

Widok projekt Można tworzyć nowe tabele i wprowadzać modyfikacje do istniejących tabel. 7

Tworzenie zapytania do bazy danych z paska narzędzi New Query - edytor tekstowy SQL a z menu Query -> Design Query in Editor edytor graficzny Aby wykonać zapytanie: z paska narzędzi Execute 8

Tworzenie wyzwalaczy Wyświetlony jest szablon, który należy wypełnić odpowiednim kodem SQL. 9

Tworzenie procedur składowanych 10

Projekty Tworzone skrypty można zapisywać lokalnie w plikach korzystając z podziału na projekty (Projects), które z kolei są grupowane w rozwiązania (Solutions) 11

SQL Server Books Online SQL Server Service Manager do uruchamiania i zatrzymywania serwera. 12

Data Transformation Services Import/Export Wizard Import i export danych do i ze źródeł OLE DB lub ODBC. Mogą być połączone z transformacjami danych za pomocą instrukcji SQL i procedur. 13

SQL W oprogramowaniu Microsoft SQL Server zaimplementowano język SQL w oparciu o standard SQL-92. Większość instrukcji omówionych w wykładzie "Systemy baz danych", działa również na serwerze SQL Server. Podstawowe różnice: Operatorem konkatenacji jest + a nie Nie ma typu VARCHAR2 jest VARCHAR Średnik jest opcjonalny. 14

CREATE TABLE Zamiast sekwencji jak w Oracle, jest właściwość IDENTITY dla kolumn. Np. CREATE TABLE Osoby (IdOsoby INT PRIMARY KEY IDENTITY, Imie VARCHAR(20), Nazwisko VARCHAR(30)); W tak utworzonej tabeli, wartości klucza głównego IdOsoby są generowane automatycznie. INSERT INTO Osoby VALUES ('Jan', 'Kowalski'); SELECT * FROM Osoby; 15

16

CREATE SCHEMA CREATE SCHEMA myschema; Dodanie nowej tabeli do schematu: CREATE TABLE myschema.mytable1(x int); Odwołanie do tabeli w schemacie: SELECT * FROM myschema.mytable; Usunięcie schematu (najpierw obiekty): DROP myschema.mytable; DROP myschema; Domyślny schemat dbo 17

Tabele tymczasowe Lokalne tabele tymczasowe - nazwa takiej tabeli ma postać #nazwa_tabeli. Jest ona widoczna tylko w sesji, w której została utworzona. Po zakończeniu sesji tabela jest usuwana. Globalne tabele tymczasowe różnią się tym, że są widoczne również spoza sesji, w której zostały utworzone. Nazwa takiej tabeli ma postać ##nazwa_tabeli. Po zakończeniu sesji wszystkich użytkowników korzystających z tabeli, jest ona usuwana. Tworzone w systemowej bazie tempdb Do tworzenia tabel tymczasowych używamy polecenia CREATE TABLE w sposób analogiczny do normalnych tabel. 18

Tabele tymczasowe Przykład CREATE TABLE #MyTempTable (cola INT PRIMARY KEY); INSERT INTO #MyTempTable VALUES (1); Można używać wszystkich deklaratywnych więzów spójności z wyjątkiem FOREIGN KEY. 19

Użycie dziennika transakcji dla tabel tymczasowych Operacje na tabelach tymczasowych są wpisywane do dziennika transakcji w bazie tempdb w sposób uproszczony, więc mogą zostać wycofane w razie potrzeby. Uproszczenie oznacza brak możliwości odtworzenia przy awarii ale jednocześnie istotnie zwiększoną wydajność operacji na nich (do 4 razy szybciej). 20

Transakcje BEGIN TRAN - rozpoczęcie transakcji COMMIT TRAN - zatwierdzenie transakcji ROLLBACK TRAN - wycofanie transakcji Domyślnie ustawiona jest opcja IMPLICIT_TRANSACTIONS na OFF. Przy takim ustawieniu, jeśli nie zastosujemy BEGIN TRAN, system traktuje każdą instrukcję DML jako osobną transakcję i zatwierdza ją (jak autocommit w Oracle). Aby to wyłączyć, należy użyć (wtedy BEGIN TRAN przestaje być konieczne): SET IMPLICIT_TRANSACTIONS ON Użytkownik powinien wtedy sam wykonać COMMIT lub ROLLBACK, inaczej system wycofa transakcję przy zamknięciu połączenia przez użytkownika. 21

TransactSQL, wsad (batch) TransactSQL połączenie możliwości SQL*Plus i PL/SQL Zmiana bazy danych: use baza_danych np. use pubs Wsad (batch) - ciąg instrukcji kierowany jako całość do wykonania przez serwer. W kodzie jest rozpoznawany koniec wsadu przez słowo kluczowe go (służy więc jako separator wsadów w skryptach). W edytorze wsad można wyróżnić przez podświetlenie myszką. Jego realizacja następuje przez naciśnięcie F5 (Execute). Nie ma odpowiednika bloku anonimowego w PL/SQL W Transact-SQL można, ale nie trzeba, kończyć każdej instrukcji średnikiem. Instrukcje mogą znajdować się jedna za drugą. Dla większej czytelności kodu zalecane jest jednak umieszczanie każdej instrukcji w oddzielnej linii i używanie wcięć. 22

Deklaracje zmiennych Zmienne użytkownika są zawsze poprzedzone znakiem @ i mają charakter lokalny dla wsadu: DECLARE @zmienna typdanych W jednej instrukcji DECLARE można deklarować wiele zmiennych. W odróżnieniu od PL/SQL, deklaracje mogą występować w dowolnym miejscu. DECLARE @Imie VARCHAR(9), @Nazwisko VARCHAR(20); Wszystkie zadeklarowane lokalnie zmienne są widoczne tylko w ramach wsadu. 23

Zmienne systemowe Zmienne systemowe oznaczone są dwoma znakami "@". Często używane zmienne systemowe: @@ERROR - numer ostatniego błędu @@FETCH_STATUS - czy kursor pobrał wiersz (0 gdy pobrał) @@IDENTITY - zawiera ostatnio wygenerowaną wartość IDENTITY (przydatne, gdy chcemy użyć ID wstawionego przez INSERT wiersza) @@ROWCOUNT - zwraca liczbę wierszy, na których operowała ostatnia instrukcja SQL @@VERSION - zwraca informację o wersji SQL Serwera 24

SELECT Odpowiednikiem konstrukcji w Oracle: SELECT wyrażenie INTO zmienna... FROM a zarazem konstrukcją umożliwiającą wykonanie przypisania wartości do zmiennej jest: SELECT @zmienna = wyrażenie [FROM.] Tej konstrukcji możemy użyć do przypisania pewnych wartości do zmiennych: SELECT @nazwisko = 'Kowalski', @imie = 'Jan'; 25

SELECT Ten sam efekt możemy uzyskać przy pomocy instrukcji SET, z tym że w jednej instrukcji można dokonać tylko jednego przypisania: SET @nazwisko = 'Kowalski ; SET @imie = 'Jan ; Możemy również przypisać zmiennym wartości zwrócone przez zapytanie SQL: SELECT @nazwisko = Nazwisko, @imie = Imie FROM Osoby WHERE IdOsoby = 1; Zapytanie powinno zwracać dokładnie jeden wiersz, jednak: gdy zapytanie zwróci więcej wierszy, do zmiennych zostaną przypisane wartości z ostatniego wiersza; gdy zapytanie nie zwróci żadnego wiersza, wtedy zmienna zachowuje swoją dotychczasową wartość (np. NULL). 26

PRINT wyrażenie 27

SELECT W następujący sposób można etykietować kolumny w celu wypisania wyniku zapytania: SELECT Ename AS Nazwisko FROM Emp; SELECT Ename Nazwisko FROM Emp; SELECT 'Nazwisko'=Ename FROM Emp; SELECT Nazwisko=Ename FROM Emp; 28

Instrukcja warunkowa IF warunek instrukcja lub blok [ELSE instrukcja lub blok] np.: IF @pensja > 0 BEGIN INSERT INTO Emp (Ename, Sal, Deptno) VALUES (@nazwisko, @pensja, @deptno); PRINT 'Wstawiono pracownika'; END ELSE PRINT 'Niepoprawna pensja'; 29

Instrukcja iteracji WHILE warunek instrukcja lub blok Istnieje możliwość wyjścia z pętli używając instrukcji BREAK. Instrukcja CONTINUE powoduje, że reszta instrukcji w pętli jest ignorowana i następuje wykonanie kolejnej iteracji: WHILE (SELECT AVG(Sal) FROM Emp) < 200 BEGIN UPDATE Emp SET Sal = Sal * 1.2; IF (SELECT MAX(Sal) FROM Emp) > 400 BREAK; ELSE CONTINUE; END; SELECT * FROM Emp; 30

Kursor DECLARE nazwa_kursora CURSOR FOR instrukcja_select OPEN nazwa_kursora Pobranie kolejnego wiersza (w Transact SQL nie istnieją zmienne typu wierszowego, więc trzeba wcześniej zadeklarować tyle zmiennych, ile zwróci wartości instrukcja SELECT kursora): FETCH NEXT FROM nazwa_kursora INTO zmienne Do sprawdzenia, czy instrukcja FETCH zwróciła wiersz, służy zmienna systemowa @@FETCH_STATUS WHILE @@FETCH_STATUS = 0. CLOSE nazwa_kursora DEALLOCATE nazwa_kursora 31

Przykład DECLARE kursor CURSOR FOR SELECT Ename, Sal FROM Emp WHERE Sal > 200; DECLARE @nazwisko VARCHAR(50), @pensja MONEY; PRINT 'Pracownicy o pensji wyższej niż 200:' ; OPEN kursor; FETCH NEXT FROM kursor INTO @nazwisko, @pensja; WHILE @@FETCH_STATUS = 0 BEGIN PRINT @nazwisko + ' ' + convert(varchar(50),@pensja); FETCH NEXT FROM kursor INTO @nazwisko, @pensja; END; CLOSE kursor; DEALLOCATE kursor; 32

Procedury CREATE PROC[EDURE] nazwa_procedury lista parametrów AS instrukcje Definiując listę parametrów podajemy nazwy poprzedzone znakiem "@" oraz typ danych i rozdzielamy specyfikacje parametrów przecinkami. Możemy podać wartość domyślną oraz określić, że jest to parametr wyjściowy OUTPUT Definicja parametru procedury ma postać: @nazwa_parametru typdanych [=wartość_domyślna] [OUTPUT] ALTER PROCEDURE pozwala powtórnie wprowadzić tekst procedury. 33

Przykład CREATE PROC pensja @Empno INT, @Nowe_zarobki DECIMAL(6,2) OUTPUT, @Procent INT = 20 AS BEGIN SELECT @Nowe_zarobki = Sal + Sal * @Procent /100 FROM Emp WHERE Empno = @Empno; UPDATE Emp SET Sal = @Nowe_zarobki WHERE Empno = @Empno; END; Wywołanie procedury: DECLARE @Nowe_zarobki DECIMAL(6,2); EXEC pensja 1, @Nowe_zarobki OUTPUT; PRINT @Nowe_zarobki; 34

35

RETURN w procedurze CREATE PROCEDURE Ilu_pracownikow AS BEGIN DECLARE @ile INT; SELECT @ile = COUNT(*) FROM Emp; RETURN @ile; END; Procedura zliczy wszystkie wiersze z tabeli Emp i zwróci wartość poprzez RETURN. Do wartości zwróconej w ten sposób możemy się odwołać w następujący sposób: DECLARE @zmienna int; EXEC @zmienna = Ilu_pracownikow; PRINT @zmienna; Stosuje się ją zwykle do przekazania stanu obliczeń wywołania procedury, np. czy i jaki wystąpił błąd. 36

SELECT w procedurze Inaczej niż w Oracle: USE scott CREATE PROC Display AS BEGIN SELECT * FROM Emp; SELECT * FROM Dept; END; GO EXEC Display; 37

38

Funkcje skalarne CREATE FUNCTION AveragePrice(@booktype varchar(12)) RETURNS money AS BEGIN DECLARE @av money; SELECT @av = avg(price) FROM titles WHERE type=@booktype; RETURN @av; END; SELECT title_id, price FROM titles WHERE price > dbo.averageprice('business') AND type = 'business' Wymagana jest nazwa schematu. 39

Funkcje tabelowe CREATE FUNCTION SalesByStore(@storid varchar(30)) RETURNS TABLE AS RETURN (SELECT title, qty FROM sales s,titles t WHERE s.stor_id=@storid AND t.title_id=s.title_id); GO SELECT * FROM SalesByStore('8042'); Nie jest wymagana nazwa schematu. Przypomina perspektywę z parametrami. 40

41

Wyzwalacze typu after i instead of Nie istnieją wyzwalacze ani typu before ani for each row Wyzwalacz jest zawsze uruchamiany dla całej instrukcji DML po jej wykonaniu. Odwołania do starych i nowych wartości modyfikowanych danych są możliwe dzięki wirtualnym tabelom o nazwach inserted i deleted, zawierających odpowiednio nowe i stare wartości. Aby się do nich odwołać, trzeba użyć instrukcji SELECT tak, jakby były to normalne tabele bazy danych. Modyfikacja danych bezpośrednio w tych tabelach nie jest możliwa. 42

CREATE TRIGGER CREATE TRIGGER nazwa_wyzwalacza ON tabela FOR [INSERT UPDATE DELETE] AS instrukcje Po słowie FOR (równoważnie AFTER) możemy napisać jedną, dwie lub wszystkie trzy nazwy (oddzielone przecinkami). ALTER TRIGGER pozwala powtórnie wprowadzić zmodyfikowany tekst wyzwalacza. 43

Przykład Poniższy wyzwalacz nie pozwoli usunąć wierszy z tabeli: SET IMPLICIT_TRANSACTIONS ON CREATE TRIGGER wyzw1 ON Emp FOR DELETE AS BEGIN PRINT 'ROLLBACK'; SELECT * FROM EMP; ROLLBACK; END; Wykonujemy kolejno: DELETE EMP; -- -- pusta tabela SELECT * FROM EMP; -- znowu pełna tabela W wyzwalaczu można używać COMMIT i ROLLBACK (w Oracle nie można). 44

Uwaga: ROLLBACK w wyzwalaczu kończy zarówno transakcję jak i aktualny wsad. 45

RAISERROR RAISERROR(message, severity, state) gdzie: message - dowolny tekst (komunikat błędu), severity - liczba z przedziału 0-25 (przy czym użytkownik może używać wartości z przedziału 0-18), state - liczba z przedziału 1-127 Wartości parametrów "severity" i "state" są przekazywane do aplikacji klienta, dzięki czemu różne błędy mogą być obsługiwane w różny sposób. Błędy severity>=20 powodują zamknięcie połączenia (sesji). 46

Przykład Gdy pracownik z zarobkami zero zostanie wprowadzony, wyzwalacz zgłosi błąd oraz wycofa całą aktualną transakcję: CREATE TRIGGER wyzw ON Emp FOR INSERT AS BEGIN DECLARE @sal DECIMAL(6,2); SET @sal=-1; SELECT @sal = sal FROM inserted WHERE sal=0; IF @sal = 0 BEGIN RAISERROR('Pensja nie może być zero!',1,2); END; END; ROLLBACK; -- porzucenie transakcji i wsadu 47

Wybrane funkcje wbudowane CONVERT(typ_danych, wyrażenie [, styl]) - dokonuje konwersji typów danych (styl jest używany przy konwersji do daty, typów walutowych itp.) GETDATE() - zwraca aktualną datę systemową LEFT(napis, ile_znaków) - zwraca określoną liczbę znaków napisu rozpoczynając od lewej LEN(napis) - zwraca długość napisu REPLACE(napis, wzorzec, napis_do_zamiany) - wyszukuje i zamienia fragment napisu RIGHT(napis, ile_znaków) - zwraca określoną liczbę znaków napisu rozpoczynając od prawej SUBSTRING(napis, od, do) - zwraca określoną część napisu 48

Wybrane procedury systemowe Można ich używać z poziomu każdej bazy danych - operują na bazach i tabelach systemowych. Do ich wykonania nie jest wymagane użycie polecenia EXEC Przy pomocy procedur systemowych możemy łatwo wyciągnąć informację z tabel systemowych. Sp_tables - tabele bazy danych Sp_help nazwa_obiektu - informacje na temat obiektu (np. tabeli, perspektywy, procedury) Sp_helptext nazwa_obiektu - tekst obiektu (np. procedury) Sp_helpdb nazwa_bazy - informacje na temat bazy danych Sp_helpindex nazwa_tabeli - indeksy założone na tabeli Sp_helpconstraint nazwa_tabeli więzy spójności na tabeli Sp_spaceused nazwa_obiektu - ilość miejsca zajętego przez obiekt 49

Sp_tables 50

Sp_help Emp 51

Schematy zawierające perspektywy systemowe (w każdej bazie danych) sys sys.all_objects, sys.objects, sys.system_objects sys.tables, sys.views, sys.schemas, sys.columns INFORMATION_SCHEMA (zgodne z SQL 92) 52

Niektóre rozszerzenia wprowadzone w wersji 2005 v v v v v v v v Wprowadzenie schematów i tworzenie obiektów bazodanowych w ramach schematów. Obiekty (ich metody).net dostępne w kodzie Transact SQL tak jak Java dostępna na serwerze Oracle. Bezpośrednia obsługa zleceń HTTP na serwerze bazy danych. Zapytania rekurencyjne WITH Operator PIVOT (zapytanie krzyżowe). Wyzwalacze dla instrukcji DDL Obsługa wyjątków (TRY CATCH ) Nowy typ danych XML odpowiednik XMLType w Oracle. 53

Rozszerzenia w wersji 2008 v v v Typy danych: DATE (sama data) TIME (sam czas) FILESTREAM (LOBy przechowywane w systemie plików) HIERARCHY ID węzeł w hierarchii GEOMETRY (typ obiektów geometrycznych) GEOGRAPHY (typ obiektów geograficznych) Specyfikacja kolumny jako SPARSE (zoptymalizowane przechowywanie NULL) Instrukcja MERGE USING ON WHEN MATCHED WHEN NOT MATCHED (połączenie INSERT, DELETE i UPDATE na docelowej tabeli w oparciu o porównanie jej z inną tabelą) 54

Przykład MERGE 55

Rozszerzenia w wersji 2008 c.d. Klauzula WHERE w CREATE INDEX filtr. Typ tabelowy, parametr tabelowy Najpierw definiujemy typ tabelowy: CREATE TYPE mytabletype AS TABLE( id INT, name NVARCHAR(100), qty INT) Następnie procedurę: CREATE PROCEDURE myproc(@tvp mytabletype READONLY) AS UPDATE Inventory SET qty += s.qty FROM Inventory AS i INNER JOIN @tp AS s ON i.id=s.id INSERT wielowierszowy INSERT INTO contacts VALUES ( John Doe, 123-456-7890 ), ( Jane Smith, 6667-090-2222 ); 56