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



Podobne dokumenty
Struktura bazy danych

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

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

Obowiązuje od wersji

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Właściwości transakcji

BAZY DANYCH Cz III. Transakcje, Triggery

Wykład 8. SQL praca z tabelami 5

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

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

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

SQL 4 Structured Query Lenguage

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

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

Microsoft SQL Server. Tradycyjna architektura klientserwer. Przeniesienie części logiki na serwer. Programowanie Transact SQL

Bazy danych 10. SQL Widoki

Język SQL, zajęcia nr 1

Bazy danych i usługi sieciowe

Składowane procedury i funkcje

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

Transakcje inf. podstawowe

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

Administracja i programowanie pod Microsoft SQL Server 2000

SQL Server Łukasz Łysik 21 października 2008

Bloki anonimowe w PL/SQL

15. Funkcje i procedury składowane PL/SQL

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

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

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

Bazy Danych i Usługi Sieciowe

Wykład 5. SQL praca z tabelami 2

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

Wykład 05 Bazy danych

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Wprowadzenie do projektowania i wykorzystania baz danych. Katarzyna Klessa

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

Bazy danych 9. SQL Klucze obce Transakcje

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

Wyzwalacze (triggery) Przykład

Bazy danych. dr inż. Arkadiusz Mirakowski

PODSTAWY BAZ DANYCH 13. PL/SQL

na MS SQLServer 2005 i 2008

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

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

Tadeusz Pankowski

Struktura drzewa w MySQL. Michał Tyszczenko

Ćwiczenia 2 IBM DB2 Data Studio

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Bazy danych - Materiały do laboratoriów VIII

Hurtownia Świętego Mikołaja projekt bazy danych

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

BAZA DANYCH SIECI HOTELI

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Bazy danych 7. SQL podstawy

Microsoft SQL Server Podstawy T-SQL

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Bartosz Jachnik - Kino

Administracja i programowanie pod Microsoft SQL Server 2000

Bazy danych 8. Procedury składowane i kursory. P. F. Góra

124 Bazy danych. Zaawansowane programowanie w T- SQL

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

BAZY DANYCH. Transakcje. opracowanie: Michał Lech

a) ile wynosiła populacja najbardziej i najmniej ludnego z województw (oraz jakie były ich nazwy)

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

Programowanie zaawansowane w T-SQL

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

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

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

Paweł Rajba

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

Systemowe aspekty baz

Plan ćwiczenia. Rozdział 17. zarządzania współbieżnością. Dostęp współbieżny a dostęp spójny. Spójność bazy danych

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

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

Pakiety podprogramów Dynamiczny SQL

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

Bazy danych 9. Klucze obce Transakcje

Bazy danych 9. Klucze obce Transakcje. P. F. Góra

Modelowanie wymiarów

Procedury i funkcje składowane

Technologie baz danych WYKŁAD 7: Wyjątki

Transakcje jednocześnie ACID

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

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

Multimedialne bazy danych - laboratorium

Cele. Definiowanie wyzwalaczy

Aspekty aktywne baz danych

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

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

Bazy danych i usługi sieciowe

Transkrypt:

Obsługa błędów w SQL i transakcje Zacznijmy od najprostszego przykładu: CREATE PROCEDURE podziel1 Obsługa błędów w SQL Powyższa procedura w większości przypadków zadziała prawidłowo, lecz na przykład poniższe wywołanie: EXEC podziel1 1, 0 jak można się spodziewać zakończy się błędem. Jakim? Najprostszy i najłatwiejszy ale nie zawsze dla programisty sposób obsługi błędów, to pilnowanie aby te błędy nie wystąpiły już na etapie programowania, na przykład: CREATE PROCEDURE podziel2 IF @dzielnik = 0 SELECT Dzielenie przez ZERO! W przypadku bardziej skomplikowanych programów najwłaściwszym sposobem jest oczywiście przewidzenie wszystkich tych miejsc w kodzie, w których mogą wystąpić problemy, i wykonanie wcześniejszych walidacji. Niestety nie zawsze jest to możliwe i co wtedy? Zmodyfikujmy więc procedurę podziel2 w następujący sposób: CREATE PROCEDURE podziel3

IF @dzielnik = 0 RAISERROR Dzielenie przez ZERO!,14,1 Na pierwszy rzut oka procedura ta niewiele się różni od procedury podziel1, zwłaszcza w przypadku dzielenia przez zero, za wyjątkiem w części zrozumiałego dla polskojęzycznego użytkownika komunikatu. Polecanie RAISERROR mianowicie powoduje wygenerowanie komunikatu błędu, który na przykład może być dalej obsłużony w bloku TRY... CATCH, na przykład w poniższej procedurze: CREATE PROCEDURE podziel i pomnoz @a float, @b float TRY tu może wystąpić błąd EXEC podziel3 @a, @b ale równie dobrze podziel1 TRY CATCH PRINT ERROR MESSAGE ERROR MESSAGE zwraca komunikat ostatniego błędu PRINT... ale się tym nie przejmujemy i liczymy dalej... CATCH TRY tu może wystąpić błąd EXEC podziel3 @b, @a ale równie dobrze podziel1 TRY CATCH PRINT ERROR MESSAGE PRINT... ale się tym nie przejmujemy i dzielimy dalej... CATCH SELECT @a * @b Zadanie 1. Co robi poniższa procedura przykład z pomocy? Przy okazji proszę zwrócić uwagę na trzeci sposób zwracania wyniku przez procedurę! CREATE PROCEDURE TimeDelay hh mm ss @DelayLength char8 = 00:00:00

DECLARE @ReturnInfo varchar255 IF ISDATE 2000-01-01 + @DelayLength +.000 = 0 SELECT @ReturnInfo = Invalid time + @DelayLength +,hh:mm:ss, submitted. This PRINT statement is for testing, not use in production. PRINT @ReturnInfo RETURN1 WAITFOR DELAY @DelayLength SELECT @ReturnInfo = A total time of + @DelayLength +, hh:mm:ss, has elapsed! + Your time is up. This PRINT statement is for testing, not use in production. PRINT @ReturnInfo Poniżej przykład jej wywołania: EXEC TimeDelay hh mm ss 00:00:05 Zadanie 2. Zmodyfikować procedurę z zadania 1 używając blok TRY... CATCH tak, aby nie korzystać z funkcji ISDATE.... Transakcje UWAGA: Kolejne przykłady należy wykonywać w dwóch oknach query. Dobry refleks jest wskazany! Zanim przystąpimy do doświadczeń zdefiniujmy pomocnicze procedury pisz i czytaj oraz tabelę konta ze zdefiniowanymi dwoma kontami jak poniżej: CREATE TABLE konta saldo float, nazwa varchar10 PRIMARY KEY NOT NULL CREATE PROCEDURE czytaj @nazwa varchar10, @saldo float OUTPUT SELECT@saldo = saldo FROMkonta WHERE@nazwa = nazwa CREATE PROCEDURE pisz @nazwa varchar10, @kwota float IF EXISTS SELECT saldo FROM konta WHERE @nazwa = nazwa UPDATE konta SET saldo = @kwota WHERE @nazwa = nazwa INSERT kontanazwa, saldo VALUES@nazwa, @kwota

Na koniec dodajemy dane kont: EXEC pisz A, 100 EXEC pisz B, 150 Rozpatrzmy teraz pierwsze dwa zestawy instrukcji: LEVEL REPEATABLE READ LEVEL REPEATABLE READ TRAN SET @przelew = 50 SET @saldoa = @saldoa - @przelew WAITFOR DELAY 00:00:05 EXECczytaj B, @saldob OUTPUT SET@saldoB = @saldob + 50 EXEC pisz B, @saldob TRAN WAITFOR DELAY 00:00:03 SET @przelew = @saldoa * 0.1 SET @saldoa = @saldoa - @przelew EXEC czytaj B, @saldob OUTPUT WAITFOR DELAY 00:00:05 SET @saldob = @saldob + @przelew EXEC pisz B, @saldob Zadanie 3. Z jakimi konfliktami mamy do czynienia w powyższym przykładzie? Co należy zrobić, aby co najmniej jedna z transakcji zadziałała prawidłowo? Poniżej kolejny zestaw instrukcji: LEVEL READ UNCOMMITTED DECLARE @licznik int LEVEL READ UNCOMMITTED DECLARE @licznik int SET @licznik = 12 TRAN WHILE @licznik > 0 SELECT @saldoa WAITFOR DELAY 00:00:01 SET @licznik = @licznik - 1 SET @licznik = 6 TRAN WHILE @licznik > 0 WAITFOR DELAY 00:00:02 SET @saldoa = @saldoa - 10 SET @licznik = @licznik - 1

Zadanie 4. Przeprowadzić serię eksperymentów zarówno dla pierwszego jak i drugiego zestawu instrukcji. Zadanie 5. Zaproponować przykład ilustrujący zakleszczenie. Wskazówka: Wykorzystać poziom izolacji: READ COMMITTED. Na zakończenie przykładowa obsługa błędów w transakcji: TRAN TRY INSERT kontanazwa, saldo VALUES A, 100 TRY CATCH SELECT ERROR NUMBER ErrorNumber, ERROR SEVERITY ErrorSeverity, ERROR STATE ErrorState, ERROR PROCEDURE ErrorProcedure, ERROR LINE ErrorLine, ERROR MESSAGE ErrorMessage IF @@TRANCOUNT > 0 ROLLBACK TRAN CATCH IF @@TRANCOUNT > 0