Transakcje inf. podstawowe

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

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

BAZY DANYCH Cz III. Transakcje, Triggery

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

Systemowe aspekty baz

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

Cele. Definiowanie wyzwalaczy

Struktura bazy danych

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

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

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

Lab.8: Podstawy języka SQL.

Ćwiczenia 2 IBM DB2 Data Studio

Składowane procedury i funkcje

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

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

Podzapytania do tabel W miejscu w którym możemy użyć nazwy tabeli, możemy użyć podzapytania

Systemowe aspekty baz danych

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

SQL 4 Structured Query Lenguage

Aspekty aktywne baz danych

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

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

Baza danych Northwind. Baza danych firmy sprzedającej artykuły spożywcze Informacje o towarach, dostawcach, klientach, zamówieniach klientów itp.

Programowanie baz danych Transact SQL, procedury składowane, wyzwalacze. Procedury składowane (stored procedures) definiowane przez użytkownika

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

Administracja i programowanie pod Microsoft SQL Server 2000

BAZA DANYCH SIECI HOTELI

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

Wykład 8. SQL praca z tabelami 5

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

Bazy danych 10. SQL Widoki

PL/SQL. Zaawansowane tematy PL/SQL

Hurtownia Świętego Mikołaja projekt bazy danych

PODSTAWY BAZ DANYCH 13. PL/SQL

10. Wybierz nazwy produktów oraz inf. o stanie magazynu dla produktów dostarczanych przez firmę.tokyo Traders.

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

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

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

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

Obowiązuje od wersji

Elementy. języka SQL

na MS SQLServer 2005 i 2008

Pakiety podprogramów Dynamiczny SQL

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

Wyzwalacze (triggery) Przykład

Bazy danych 6. Klucze obce. P. F. Góra

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Bazy Danych i Usługi Sieciowe

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Nowe technologie baz danych

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

Bloki anonimowe w PL/SQL

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

Plan. ! Podzapytania (subqueries) ! Podzapytania do tabel. ! Podzapytanie jako wyrażenie. ! Podzapytania skorelowane. ! operatory IN, NOT IN

SQL Server Łukasz Łysik 21 października 2008

Zbiór pytań nr 2. 1 Tabela DEPARTMENTS ma następującą strukturę:

Wykład 05 Bazy danych

Bazy danych i usługi sieciowe

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

Relacyjne bazy danych. Podstawy SQL

15. Funkcje i procedury składowane PL/SQL

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

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

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

Wykład 5. SQL praca z tabelami 2

Procedury i funkcje składowane

1. Wyzwalacze BD (ang. triggers)

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

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

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

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

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Język SQL, zajęcia nr 1

Wyzwalacze. Bazy danych 201

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

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Administracja i programowanie pod Microsoft SQL Server 2000

Administracja i programowanie pod Microsoft SQL Server 2000

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

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.

Zaawansowane bazy danych i hurtownie danych semestr I

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

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Bazy danych. dr inż. Arkadiusz Mirakowski

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

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

Administracja i programowanie pod Microsoft SQL Server 2000

Relacyjne bazy danych. Podstawy SQL

Bartosz Jachnik - Kino

SQL Server. Odtwarzanie baz danych.

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

Język T-SQL część III programowanie bazy danych

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

Bazy danych Ćwiczenia projektowe

Transkrypt:

Transakcje inf. podstawowe! Rozpoczęcie transakcji " Explicit " Autocommit! Zakończenie transakcji " COMMIT " ROLLBACK " Implicit BEGIN TRANSACTION UPDATE savings... UPDATE checking... COMMIT TRANSACTION

Transakcje BEGIN TRANSACTION UPDATE savings SET amount = (amount - 100) WHERE custid = 78910 <Rollback transaction if if error> UPDATE checking SET amount = (amount + 100) WHERE custid = 78910 <Rollback transaction if if error> COMMIT TRANSACTION

Zmienne! DECLARE deklaruje zmienną! SET lub SELECT - nadaje wartość DECLARE @vlastname char(20), @vfirstname varchar(11) SET @vlastname = 'Dodsworth' SELECT @vfirstname = FirstName FROM Northwind..Employees WHERE LastName = @vlastname PRINT @vfirstname + ' ' + @vlastname GO

Instrukcje warunkowe, pętle " BEGIN END blocks " IF ELSE blocks " WHILE constructs " CASE expression IF IF USER_NAME() <> <> 'dbo' BEGIN RAISERROR('Must be be sysadmin to to Perform Operation', 10, 10, 1) 1) RETURN END END ELSE ELSE DBCC DBCC CHECKDB(Northwind)

Dynamiczne konstruowanie poleceń! EXECUTE + string zawierający polecenie DECLARE @dbname varchar(30), @tblname varchar(30) SET SET @dbname = 'Northwind' SET SET @tblname = 'Products' EXECUTE ('USE ' + @dbname + ' SELECT * FROM '+ '+ @tblname)

Procedury

Procedury (Stored Procedures)! Definiowanie procedur! Zalety

Stored Procedures - zalety! Umożliwiają definiowanie logiki aplikacji! Ułatwiają zarządzanie uprawnieniami! Poprawiają wydajność

Definiowanie procedur! Stored Procedure to skompilowna kolekcja poleceń Transact-SQL! Procedury: " mogą zawierać polecenia które manipulują danymi " mogą przyjmować dane w postaci parametrów " mogą zwracać wartość " mogą zwracać wartości w postaci parametrów

Tworzenie procedur! Polecenie CREATE PROCEDURE USE Northwind GO CREATE PROC dbo.overdueorders AS SELECT * FROM dbo.orders WHERE RequiredDate < GETDATE() AND ShippedDate IS Null GO! mogą być zagnieżdżone (do 32 poziomów)! sp_help pokazuje inf. o procedurze

Wykonanie procedury! Wykonanie EXEC OverdueOrders! Wykonanie w ramach polecenia INSERT INSERT INTO Customers EXEC EmployeeCustomer

Modyfikacja i usuwanie USE USE Northwind Northwind GO GO ALTER ALTER PROC PROC dbo.overdueorders AS AS SELECT SELECT CONVERT(char(8), CONVERT(char(8), RequiredDate, RequiredDate, 1) 1) RequiredDate, RequiredDate, CONVERT(char(8), CONVERT(char(8), OrderDate, OrderDate, 1) 1) OrderDate, OrderDate, OrderID, OrderID, CustomerID, CustomerID, EmployeeID EmployeeID FROM FROM Orders Orders WHERE WHERE RequiredDate RequiredDate < GETDATE() GETDATE() AND AND ShippedDate ShippedDate IS IS Null Null ORDER ORDER BY BY RequiredDate RequiredDate GO GO " usuwanie DROP PROC... " sp_depends pokazuje obiekty zależne

Procedury - parametry CREATE CREATE PROCEDURE PROCEDURE dbo.[year dbo.[year to to Year Year Sales] Sales] @BeginningDate @BeginningDate DateTime, DateTime, @EndingDate @EndingDate DateTime DateTime AS AS IF IF @BeginningDate @BeginningDate IS IS NULL NULL OR OR @EndingDate @EndingDate IS IS NULL NULL BEGIN BEGIN RAISERROR('NULL RAISERROR('NULL values values are are not not allowed', allowed', 14, 14, 1) 1) RETURN RETURN END END SELECT SELECT O.ShippedDate, O.ShippedDate, O.OrderID, O.OrderID, OS.Subtotal, OS.Subtotal, DATENAME(yy,ShippedDate) AS AS Year Year FROM FROM ORDERS ORDERS O INNER INNER JOIN JOIN [Order [Order Subtotals] Subtotals] OS OS ON ON O.OrderID O.OrderID = OS.OrderID OS.OrderID WHERE WHERE O.ShippedDate O.ShippedDate BETWEEN BETWEEN @BeginningDate @BeginningDate AND AND @EndingDate @EndingDate GO GO

Wywołanie procedury! Passing Values by Parameter Name EXEC EXEC AddCustomer @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. Str. 57', 57', @City @City = 'Berlin', @PostalCode = '12209', @Country = 'Germany', @Phone = '030-0074321'! Passing Values by Position EXEC EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. Str. 57', 57', 'Berlin', NULL, NULL, '12209', 'Germany', '030-0074321'

Parametry wyjściowe Creating Stored Procedure Executing Stored Procedure Results of of Stored Procedure CREATE PROCEDURE dbo.mathtutor @m1 @m1 smallint, @m2 @m2 smallint, @result smallint OUTPUT AS AS SET SET @result = @m1* @m2 @m2 GO GO DECLARE @answer smallint EXECUTE MathTutor 5,6, @answer OUTPUT SELECT 'The result is: is: ', ', @answer The The result is: is: 30 30

Funkcje

Funkcje! Funkcje skalarne " Podobne do funkcji wbudowanych " Zwracają pojedynczą wartość! Multi-Statement Table-valued Functions " zawartość jak w przypadku stored procedures " odwołanie jak do widoku! In-line Table-valued Functions " podobne do widoków z parametrami

Funkcje! Tworzenie funkcji USE USE Northwind Northwind CREATE CREATE FUNCTION FUNCTION fn_newregion fn_newregion (@myinput (@myinput nvarchar(30)) nvarchar(30)) RETURNS RETURNS nvarchar(30) nvarchar(30) BEGIN BEGIN IF IF @myinput @myinput IS IS NULL NULL SET SET @myinput @myinput = 'Not 'Not Applicable' Applicable' RETURN RETURN @myinput @myinput END END

Funkcje! Modyfikacja funkcji ALTER ALTER FUNCTION FUNCTION dbo.fn_newregion dbo.fn_newregion <New <New function function content> content> " Uwaga: uprawnienia pozostają! Usunięcie funkcji DROP DROP FUNCTION FUNCTION dbo.fn_newregion dbo.fn_newregion

Scalar User-defined Function! Tworzenie USE USE Northwind Northwind CREATE CREATE FUNCTION FUNCTION fn_dateformat fn_dateformat (@indate (@indate datetime, datetime, @separator @separator char(1)) char(1)) RETURNS RETURNS Nchar(20) Nchar(20) AS AS BEGIN BEGIN RETURN RETURN CONVERT(Nvarchar(20), datepart(mm,@indate)) + @separator @separator + CONVERT(Nvarchar(20), datepart(dd, datepart(dd, @indate)) @indate)) + @separator @separator + CONVERT(Nvarchar(20), datepart(yy, datepart(yy, @indate)) @indate)) END END! Wywołanie SELECT SELECT dbo.fn_dateformat(getdate(), ':') ':')

Multi-Statement Table-valued Function! BEGIN and END nawiasy ograniczające! RETURNS określa definicję tabeli która ma być zwrócona

Multi-Statement Table-valued Function! Tworzenie USE USE Northwind Northwind GO GO CREATE CREATE FUNCTION FUNCTION fn_employees fn_employees (@length (@length nvarchar(9)) nvarchar(9)) RETURNS RETURNS @fn_employees @fn_employees table table (EmployeeID (EmployeeID int int PRIMARY PRIMARY KEY KEY NOT NOT NULL, NULL, [Employee [Employee Name] Name] nvarchar(61) nvarchar(61) NOT NOT NULL) NULL) AS AS BEGIN BEGIN IF IF @length @length = 'ShortName' 'ShortName' INSERT INSERT @fn_employees @fn_employees SELECT SELECT EmployeeID, EmployeeID, LastName LastName FROM FROM Employees Employees ELSE ELSE IF IF @length @length = 'LongName' 'LongName' INSERT INSERT @fn_employees @fn_employees SELECT SELECT EmployeeID, EmployeeID, (FirstName (FirstName + ' ' + LastName) LastName) FROM FROM Employees Employees RETURN RETURN END END! Wywołanie SELECT SELECT * FROM FROM dbo.fn_employees('longname') Or Or SELECT SELECT * FROM FROM dbo.fn_employees('shortname')

In-Line Table-valued Function! Treść funkcji stanowi polecenie SELECT! Nie używa nawiasów BEGIN END! RETURN specyfikuje zwracaną tablicę! Format (schemat) zwracanej tablicy jest określony przez format zbioru wynikowego

In-Line Table-valued Function! Tworzenie USE USE Northwind Northwind GO GO CREATE CREATE FUNCTION FUNCTION fn_customernamesinregion ( @RegionParameter @RegionParameter nvarchar(30) nvarchar(30) ) RETURNS RETURNS table table AS AS RETURN RETURN ( SELECT SELECT CustomerID, CustomerID, CompanyName CompanyName FROM FROM Northwind.dbo.Customers WHERE WHERE Region Region = @RegionParameter @RegionParameter )! Wywołanie SELECT SELECT * FROM FROM fn_customernamesinregion(n'wa')

Trigery

Triggery - wprowadzenie! Trigger to procedura specjalnego typu! Trigger: " jest związany z tabelą " jest wywoływany automatycznie nie można go wywołać w sposób bezpośredni " jest częścią transakcji która go wywołała

Użycie trigerów! Automatyczne wykonywanie operacji na powiązanych tabelach! Zapewnienie warunków integralności! Obsługa błędów! Obsługa zdenormalizowanych danych

Trigery Use Use Northwind GO GO CREATE TRIGGER Empl_Delete ON ON Employees FOR FOR DELETE AS AS IF IF (SELECT COUNT(*) FROM FROM Deleted) > 1 BEGIN RAISERROR( 'You 'You cannot delete more more than than one one employee at at a time.', 16, 16, 1) 1) ROLLBACK TRANSACTION END END

Modyfikacja i usuwanie USE USE Northwind GO GO ALTER TRIGGER Empl_Delete ON ON Employees FOR FOR DELETE AS AS IF IF (SELECT COUNT(*) FROM FROM Deleted) > 6 BEGIN RAISERROR( 'You 'You cannot delete more more than than six six employees at at a time.', 16, 16, 1) 1) ROLLBACK TRANSACTION END END

Trigery! INSERT Trigger! DELETE Trigger! UPDATE Trigger! INSTEAD OF Trigger

Triggers - przykłady! Zapewnienie integralności danych! Business Rules

Zapewnienie integralności danych CREATE CREATE TRIGGER TRIGGER BackOrderList_Delete ON ON Products Products FOR FOR UPDATE UPDATE AS AS IF IF (SELECT (SELECT BO.ProductID BO.ProductID FROM FROM BackOrders BackOrders AS AS BO BO JOIN JOIN Inserted Inserted AS AS I ON ON BO.ProductID BO.ProductID = I.Product_ID I.Product_ID ) > 0 BEGIN BEGIN DELETE DELETE BO BO FROM FROM BackOrders BackOrders AS AS BO BO INNER INNER JOIN JOIN Inserted Inserted AS AS I ON ON BO.ProductID BO.ProductID = I.ProductID I.ProductID END END Products ProductID UnitsInStock 1 15 15 2 15 10 Updated 10 3 65 65 4 20 20 Trigger Deletes Row BackOrders ProductID UnitsOnOrder 1 15 15 12 12 10 10 3 65 65 2 15

Business Rules Products with Outstanding Orders Cannot Be Deleted Products IF IF (Select (Select Count Count (*) (*) FROM FROM [Order [Order Details] Details] INNER INNER JOIN JOIN deleted deleted ON ON [Order [Order Details].ProductID = deleted.productid ) > 0 ROLLBACK ROLLBACK TRANSACTION TRANSACTION DELETE statement executed on Product table ProductID UnitsInStock 1 15 15 2 10 0 10 3 65 65 4 20 20 Trigger code checks the Order Details table Order Details OrderID ProductID UnitPrice Quantity Discount 10522 10523 10524 10525 10 10 2 41 41 7 31.00 19.00 9.65 9.65 30.00 7 9 24 24 Transaction rolled back 0.2 0.2 0.15 0.15 0.0 0.0 'Transaction 'Transaction cannot cannot be be processed' processed' 'This 'This product product has has order order history' history'