124 Bazy danych. Zaawansowane programowanie w T- SQL



Podobne dokumenty
Programowanie zaawansowane w T-SQL

252 Bazy danych. Praca z językiem XML

15. Funkcje i procedury składowane PL/SQL

Tworzenie zapytań do Microsoft SQL Server

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

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

Cele. Definiowanie wyzwalaczy

Microsoft SQL Server Podstawy T-SQL

Szkolenie autoryzowane. MS Tworzenie zapytań do Microsoft SQL Server Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje

Wyzwalacze. Bazy danych 201

Bezpieczeństwo aplikacji. Bazy danych 237

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

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

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

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

Relacyjne bazy danych. Podstawy SQL

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

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Oracle11g: Wprowadzenie do SQL

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów

Administracja i programowanie pod Microsoft SQL Server 2000

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

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

PL/SQL. Zaawansowane tematy PL/SQL

Aplikacje WWW - laboratorium

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

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

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

Ćwiczenia 2 IBM DB2 Data Studio

Bloki anonimowe w PL/SQL

Program szkoleniowy Efektywni50+ Moduł IV Podstawy relacyjnych baz danych i język SQL

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

XII. Warunek wielokrotnego wyboru switch... case

Kursory. A. Pankowska 1

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

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

SSK - Techniki Internetowe

SQL 4 Structured Query Lenguage

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Procedury i funkcje składowane

Transakcje. Bazy danych 155

Operacja PIVOT w języku SQL w środowisku Oracle

BAZY DANYCH Cz III. Transakcje, Triggery

INFORMATOR TECHNICZNY WONDERWARE. Ograniczenie wyświetlania listy zmiennych w przeglądarce zmiennych ActiveFactory

Paweł Rajba

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

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

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

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

Wykład 6. SQL praca z tabelami 3

PODSTAWY BAZ DANYCH 13. PL/SQL

Wyzwalacze (triggery) Przykład

Systemowe aspekty baz

Oracle PL/SQL. Paweł Rajba.

Administracja i programowanie pod Microsoft SQL Server 2000

Optymalizacja bazy danych. Bazy danych 265

Składowane procedury i funkcje

Język SQL, zajęcia nr 1

Systemy baz danych Prowadzący: Adam Czyszczoń. Systemy baz danych. 1. Import bazy z MS Access do MS SQL Server 2012:

STROJENIE PRZETWARZAŃ SAS

Program Zamiana towarów dla Subiekta GT.

Bazy danych. dr inż. Arkadiusz Mirakowski

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

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

na MS SQLServer 2005 i 2008

Relacyjne bazy danych. Podstawy SQL

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Struktura bazy danych

Programowanie w języku Python. Grażyna Koba

Program Dokumenty zbiorcze dla Subiekta GT.

Systemy GIS Tworzenie zapytań w bazach danych

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

Część 1: OLAP. Raport z zajęć laboratoryjnych w ramach przedmiotu Hurtownie i eksploracja danych

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Instrukcja warunkowa i złoŝona.

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

Deklarowanie kursora

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

SQL Server. Odtwarzanie baz danych.

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

Systemowe aspekty baz danych

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

ForPascal Interpreter języka Pascal

Ćwiczenie 3 funkcje agregujące

BAZY DANYCH laboratorium 2 tworzenie bazy danych, podstawy języka SQL

Oracle PL/SQL. Paweł Rajba.

INFORMATOR TECHNICZNY WONDERWARE. Odczytywanie danych z arkusza Excel za pomocą zapytań SQL do aplikacji InTouch

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

Bazy danych. Polecenia SQL

170 Bazy danych. Perspektywy

Spis treści. Przedmowa

Transkrypt:

124 Bazy danych Zaawansowane programowanie w T- SQL

Bazy danych 125 Przegląd zagadnień Skladnie T-SQL Obsluga bledów Podsumowanie Laboratorium Znajomość języka SQL, jakim posługuje się SZBD, jest bardzo waŝne, jeśli chcesz wydajnie pracować z bazami danych. Przed przystąpieniem do tego wykładu powinieneś znać podstawowe składnie SQL, takie jak SELECT czy INSERT. Nie będziemy poświęcać im tu miejsca, a jedynie wplatać je w nieco bardziej zaawansowane składnie.

126 Bazy danych Składnie T-SQL Instrukcje sterujace Kursory Skladnie specjalne Transact-SQL (T-SQL) to implementacja języka SQL w systemie Microsoft SQL Server. Język ten nieco róŝni się od standardu, ale większość podstawowych składni jest taka, jak w standardzie.

Bazy danych 127 Instrukcje sterujące Język T-SQL stale ewoluuje. Właściwie z języka zapytań stał się językiem programowania baz danych. Programiści tworzący oprogramowanie mogą się łatwo nauczyć języka T-SQL dzięki istniejącym analogiom z tradycyjnymi językami programowania strukturalnego. Jedymi z częściej uŝywanych składni są instrukcje sterujące. Instrukcja sterująca IF...ELSE daje moŝliwość warunkowego wykonywania bloków kodu. W implementacji T-SQL wygląda ona jak poniŝej. DECLARE @zmienna int SET @zmienna = 100 IF @zmienna > 100 PRINT 'Zmienna jest większa niŝ 100' ELSE BEGIN PRINT 'Zmienna jest mniejsza niŝ 100' SET @zmienna = 0 -- zerowanie zmiennej END Zwróć uwagę, Ŝe rolę klamrowych nawiasów w T-SQL pełni blok BEGIN...END. Jeśli blok po słowie IF lub ELSE składa się z wielu linii kodu, musisz uŝyć właśnie składni BEGIN...END. W T-SQL istnieje takŝe składnia CASE...END, która działa analogicznie do składni IF, jednak działa w zapytaniach typu SELECT na poziomie pojedynczego wiersza (umoŝliwia sprawdzanie wartości kolumny w kaŝdym rekordzie i wplatanie instrukcji sterującej w zapytanie wyszukujące dane). Kolejna składnia sterująca to pętla WHILE. W T-SQL wygląda to następująco. DECLARE @zmienna int SET @zmienna = 0 WHILE @zmienna < 10 BEGIN PRINT 'Iteracja nr ' + CAST(@zmienna AS varchar(2)) SET @zmienna = @zmienna + 1 END NaleŜy pamiętać, Ŝe pętla WHILE moŝe być wykonywana w nieskończoność, jeśli programista nie zapewni wyjścia z pętli. Kursory Kursor to zestawy rekordów umieszczane w pamięci i przechowujące wyniki zapytań typu SELECT. UmoŜliwiają zaawansowane formatowanie wyników wyszukiwania danych i przetwarzanie rekordów jeden po drugim (ale

128 Bazy danych w ściśle określonej kolejności determinowanej przez wynik zapytania, które stanowi definicję kursora). DECLARE Employee_Cursor CURSOR FOR SELECT LastName, FirstName FROM Northwind.dbo.Employees WHERE LastName like 'B%' OPEN Employee_Cursor FETCH NEXT FROM Employee_Cursor WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM Employee_Cursor END CLOSE Employee_Cursor DEALLOCATE Employee_Cursor Składnie specjalne Nowoczesne języki SQL obfitują w specjalne składnie, które znacznie rozszerzają funkcjonalność. Przykładem takiej składni moŝe być PIVOT. Składnia ta umoŝliwia stworzenie tabeli wynikowej z zapytania SELECT, w której na nagłówkach wierszy i kolumn znajdują się wartości z tabel źródłowych. 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

Bazy danych 129 PowyŜszy wynik obrazuje moŝliwości tej składni umoŝliwiając zbudowanie tabeli wyświetlającej ilość zamówień u wybranych producentów dokonanych przez pięciu pracowników (kaŝdy pracownik o określonym EmployeeID).

130 Bazy danych Obsługa błędów Gdzie wykrywac bledy? Metody wykrywania bledów W trakcie działania kodu SQL mogą wydarzyć się nieprzewidziane błędy. Błędy te mogą wynikać z róŝnych przyczyn. Mogą to być błędy wynikające z narzuconych w bazie danych ograniczeń 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.

Bazy danych 131 Gdzie wykrywać błędy? Błędy wykrywamy najczęściej w: transakcjach - po wykryciu błędu wycofujemy transakcję, procedurach składowanych - wykrywamy błędy powstałe głównie w wyniku niepoprawnych wartości parametrów przez uŝytkownika, triggerach - podobnie jak w transakcjach, po napotkaniu błędu wycofywana jest transakcja wywołująca trigger, blokach kodu SQL - wszelkie rozbudowane bloki kodu wymagają wykrywania błędów. Metody wykrywania błędów Jak moŝna wykrywać błędy? Metod na to jest wiele. Po pierwsze moŝna zastosować składnie sterujące, np. IF...ELSE, do sprawdzania wartości zmiennych jeszcze przed wystąpnieniem błędu. Druga metoda to wykorzystanie istniejących w SZBD funkcje wykrywające błędy. W systemie Microsoft SQL Server taką funkcją jest @@ERROR, która zwraca numer błędu napotkanego w ostatnio napotkanego błędu w bieŝącej sesji. 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Ŝszy fragment kodu obrazuje przykładową obsługę wyjątków przy pomocy składni TRY...CATCH (TRY - próbuj, CATCH - przechwyć i obsłuŝ). 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;

132 Bazy danych Podsumowanie Skladnie T-SQL Obsluga bledów Programowanie w języku zapytań to waŝna umiejętność. Powinni ją opanować zarówno programiści, jak i administratorzy. RóŜne języki SQL oferują róŝne składnie. Jednak reguły, jakimi powinien kierować się tworzący kod, są te same nizaleŝnie od SZBD. Bardzo często opanowanie w zaawansowanym stopniu składni jednego języka pozwala w przyszłości na łatwe opanowanie innego.

Bazy danych 133 Laboratorium KaŜdy producent SZBD w swoich systemach oferuje składnie, które rozszerzają standard ANSI SQL. W tym ćwiczeniu poznasz trzy składnie, które słuŝą do zaawansowanego wybierania danych i formatowania wyników zapytań SELECT. Obsługa błędów jest waŝnym aspektem programowania w kaŝdym języku - takŝe w języku T-SQL. System Microsoft SQL Server 2005 oferuje strukturalną obsługę wyjątków (błędów). W tym ćwiczeniu zobaczysz w działaniu składnię TRY...CATCH, która słuŝy do przechwytywania i obsługi błędów.

134 Bazy danych Krok 1 - Instrukcja sterująca CASE Zaloguj się do maszyny wirtualnej ZBD jako uŝytkownik Administrator z hasłem P@ssw0rd. Kliknij Start. Z grupy programów Microsoft SQL Server 2005 uruchom SQL Server Management Studio. W oknie logowania kliknij Connect. Kliknij w menu głównym programu Management Studio na File. Kliknij Open - File. Odszukaj plik C:\Labs\Lab05\Queries.sql i kliknij Open. Zaznacz kod, który wykonuje zapytanie SELECT z uŝyciem składni CASE (patrz kod poniŝej). USE AdventureWorks GO SELECT C.LastName, C.FirstName, CASE WHEN E.Gender = 'M' THEN 'male' ELSE 'female' END AS Gender FROM HumanResources.Employee E INNER JOIN Person.Contact C ON E.ContactID = C.ContactID Wciśnij F5, aby uruchomić zaznaczony fragment kodu. PowyŜsza składnia wybiera dane z tabel Person.Contact (nazwisko i imię pracownika) oraz HumanResources.Employee (płeć - jeśli w kolumnie Gender składnia CASE napotka wartość 'M', to zamienia ją w zestawie wynikowym na 'male' - męŝczyzna, jeśli napotka inną wartość, wypisze 'female' - kobieta). Składnia CASE jest instrukcją sterującą działającą na poziomie pojedynczego wiersza w zapytaniach SELECT. MoŜna jej uŝyć do zaawansowanego formatowania wyników zapytań SELECT. Krok 2 - Instrukcja PIVOT Zaznacz kod, który wykonuje zapytanie SELECT z opcją PIVOT (patrz kod poniŝej).

Bazy danych 135 SELECT VendorID, [164] AS Emp1, [198] AS Emp2 FROM (SELECT PurchaseOrderID, EmployeeID, VendorID FROM Purchasing.PurchaseOrderHeader) p PIVOT ( COUNT (PurchaseOrderID) FOR EmployeeID IN ( [164], [198]) ) AS pvt WHERE VendorID < 6 ORDER BY VendorID Wciśnij F5, aby uruchomić zaznaczony fragment kodu. PowyŜsza składnia wybiera z tabeli Purchasing.PurchaseOrderHeader informacje: ile zamówień na produkty producentów identyfikowanych przez kolumnę VendorID (ograniczono VendorID do wartości mniejszych od 6) zrealizowali pracownicy identyfikowani przez wartości 164 i 198 w kolumnie EmployeeID. Składnia PIVOT to odpowiednik kwerendy krzyŝowej z programu Microsoft Access. Dokonuje ona zamiany - wartości z rekordów stają się nagłówkami kolumn i wierszy, natomiast w wierszach pojawiają się agregacje - w powyŝszym przykładzie funkcja agregująca COUNT liczy ilość zrealizowanych przez danego pracownika zamówień. W Books Online znajdziesz takŝe opis składni UNPIVOT, która działa odwrotnie - pozwala przejść od zagregowanych wartości do pojedynczych rekordów (ale oczywiście wyniki nie będą takie same, jak przed wykonaniem składni PIVOT). Krok 3 - Stronicowane danych z uŝyciem funkcji rankingu Zaznacz kod, który wykonuje zapytanie SELECT z uŝyciem funkcji rankingu. SELECT T.Name FROM ( SELECT Name, ROW_NUMBER() OVER(ORDER BY DepartmentID) AS Number FROM HumanResources.Department ) AS T WHERE T.Number BETWEEN 3 AND 6 Wciśnij F5, aby uruchomić zaznaczony fragment kodu.

136 Bazy danych PowyŜsze zapytanie stanowi rozwiązanie problemu stronicowania danych. W tym wypadku wynikiem jest lista nazw działów (departamentów) z tabeli HumanResources.Department, przy czym wyświetlone zostają działy od trzeciego do szóstego (cztery działy - trzeci, czwarty, piąty i szósty) biorąc pod uwagę sortowanie według kolumny DepartmentID. Składnia zadziała tak samo nawet, gdy numeracja w tej kolumnie nie będzie ciągła. Składnia wykorzystuje 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ślić kryterium sortowania, stąd składnia ORDER BY). Funkcje rankingu (nazywane tak ze względu na zastosowanie) w systemie Microsoft SQL Server 2005: ROW_NUMBER, RANK, DENSE_RANK, NTILE. Ich opis znajdziesz w Books Online.

Bazy danych 137 Obsługa błędów Krok 1 - Tworzenie tabeli archiwizującej informacje o błędach Zaloguj się do maszyny wirtualnej ZBD jako uŝytkownik Administrator z hasłem P@ssw0rd. Kliknij Start. Z grupy programów Microsoft SQL Server 2005 uruchom SQL Server Management Studio. W oknie logowania kliknij Connect. Kliknij w menu głównym programu Management Studio na File. Kliknij Open - File. Odszukaj plik C:\Labs\Lab05\Errors.sql i kliknij Open. Zaznacz kod, który tworzy tabelę, w której będą zapisywane informacje o błędach (patrz kod poniŝej). USE AdventureWorks GO CREATE TABLE ErrorLog ( ErrorID int IDENTITY(1,1) PRIMARY KEY, ErrorNumber int NOT NULL, ErrorMessage nvarchar(200) NOT NULL, ErrorDate datetime DEFAULT GETDATE() ) GO Wciśnij F5, aby uruchomić zaznaczony fragment kodu. PowyŜszy kod tworzy tabelę ErrorLog, 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ść domyślna - bieŝąca data i czas - jest generowana przy pomocy funkcji systemowej GETDATE). Krok 2 - Przechwytywanie błędów Zaznacz kod, który implementuje obsługę błędów (patrz kod poniŝej). BEGIN TRY SELECT 1/0 END TRY BEGIN CATCH INSERT ErrorLog(ErrorNumber, ErrorMessage) SELECT ERROR_NUMBER(), ERROR_MESSAGE() END CATCH Wciśnij F5, aby uruchomić zaznaczony fragment kodu. PowyŜszy kod ilustruje działanie składni TRY...CATCH. W bloku TRY umieszczamy składnie, które mogą spowodować wystąpienie błędów, zaś

138 Bazy danych blok CATCH zapisuje obsługę błędów (w tym przypadku zapisanie informacji o błędzie do tabeli ErrorLog). Informacje na temat błędu są uzyskiwane przy uŝyciu funkcji ERROR_NUMBER (numer błędu) i ERROR_MESSAGE (komunikat błędu). Microsoft SQL Server 2005 dysponuje pokaźną listą funkcji systemowych do uzyskiwania informacji na temat występujących błędów. Poszukaj w Books Online opisów funkcji: ERROR_LINE, ERROR_SEVERITY i ERROR_PROCEDURE. Krok 3 - Przeglądanie informacji o wystąpieniu błędów Zaznacz kod, który wyświetla zawartość tabeli ErrorLog (patrz kod poniŝej). SELECT * FROM ErrorLog Wciśnij F5, aby uruchomić zaznaczony fragment kodu. Przykładowy wynik działania powyŝszego zapytania: ErrorID ErrorNumber ErrorMessage ErrorDate ----------- ----------- --------------------------------- ----------------------- 1 8134 Divide by zero error encountered. 2006-07-02 11:03:56.427 Zapytanie zwraca zawartość tabeli ErrorLog - czyli informacje o dotychczas zapisanych błędach.