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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

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

Wyzwalacze (triggery) Przykład

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

SQL 4 Structured Query Lenguage

Składowane procedury i funkcje

Systemowe aspekty baz

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

Systemowe aspekty baz danych

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

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

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

Cele. Definiowanie wyzwalaczy

BAZY DANYCH Cz III. Transakcje, Triggery

Administracja i programowanie pod Microsoft SQL Server 2000

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

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

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

Bazy danych 10. SQL Widoki

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

PODSTAWY BAZ DANYCH 13. PL/SQL

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

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

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

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

Kursory. A. Pankowska 1

Paweł Rajba

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

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

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

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

BAZA DANYCH SIECI HOTELI

Bazy Danych i Usługi Sieciowe

Procedury i funkcje składowane

15. Funkcje i procedury składowane PL/SQL

Administracja i programowanie pod Microsoft SQL Server 2000

Bazy danych i usługi sieciowe

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Hurtownia Świętego Mikołaja projekt bazy danych

Aspekty aktywne baz danych

Zaawansowane bazy danych i hurtownie danych semestr I

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

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

Przykładowa baza danych BIBLIOTEKA

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Wykład 8. SQL praca z tabelami 5

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

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

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

PL/SQL. Zaawansowane tematy PL/SQL

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

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

Oracle11g: Wprowadzenie do SQL

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

Oracle PL/SQL. Paweł Rajba.

Microsoft SQL Server Podstawy T-SQL

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

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

1. Wyzwalacze BD (ang. triggers)

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Oracle PL/SQL. Paweł Rajba.

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

Paweł Rajba

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

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

Elementy. języka SQL

Administracja i programowanie pod Microsoft SQL Server 2000

Relacyjne bazy danych. Podstawy SQL

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

Internetowe bazy danych

Imię i Nazwisko Data Ocena. Laboratorium 7

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

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

Tworzenie aplikacji bazodanowych w delphi dla dużych baz danych FRAMEWORK IMPET

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

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

Relacyjne bazy danych a XML

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

PHP: bazy danych, SQL, AJAX i JSON

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

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

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

na MS SQLServer 2005 i 2008

Ćwiczenia 2 IBM DB2 Data Studio

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

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

SQL (ang. Structured Query Language)

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań,

SQL :: Data Definition Language

Systemy GIS Tworzenie zapytań w bazach danych

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Transkrypt:

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

Programowanie SZBD (DBMS) Procedury serwera Procedury składowane Funkcje Standardowe SP Triggery Rozszerzone SP Parametryzowane widoki Zwracające liczby (skalary) Rozszerzone SP

Procedury składowane Procedury definiowane w języku podobnym do SQL i wykonywane przez SZBD Pozwalają na prześmiesznie wykonania zasobożernych procesów, np. złożonych aktualizacji tysięcy dokumentów Systemowe procedery składowane pozwalają na konfigurację SZBD i ustawianie opcji niedostępnych poprzez zapytania SQL, np. wyświetlanie wersji MySQL: SELECT VERSION();

Procedury składowane składnia podstawowa MS SQL Server CREATE PROCEDURE ProcedureName [@parametername ParameterType [OUTPUT], ] AS procedurecode EXECUTE PROCEDURE ProcedureName [@variablename Value, ] Może być użytych wiele argumentów różnych typów Procedura może zwrócić wiele wartości poprzez parametr OUTPUT

Przykładowa procedura MS SQL Server CREATE PROCEDURE CalculateOrderCount @country varchar(100) AS DECLARE @customer varchar(100) DECLARE custom CURSOR LOCAL FOR SELECT CustomerId FROM Customers WHERE country=@country OPEN custom FETCH NEXT FROM custom INTO @customer WHILE @@FETCH_STATUS=0 BEGIN UPDATE Customers SET OrderCount=(SELECT COUNT(*) FROM Orders WHERE CustomerId=@customer) WHERE CustomerId=@customer FETCH NEXT FROM custom INTO @customer END CLOSE custom DEALLOCATE custom

Przykładowa procedura MySQL DELIMITER // CREATE PROCEDURE country_hos(in con CHAR(20)) BEGIN SELECT Name, HeadOfState FROM Country WHERE Continent = con; END // DELIMITER ; CALL country_hos('europe');

S t a n d a r d o w e Procedury składowane vs przetwarzanie zapytań Zapytanie SQL #1 Wynik #1 Klient Zapytanie SQL #2 SZBD Wynik #2 P r o c. s kł a d o w a n a Klient EXEC PROCEDURE Wynik procedury Przy pomocy procedur składowanych w znaczący sposób możemy ograniczyć przesyłanie danych przez siec SZBD Przetwarzanie procedury

Logika po stronie bazy danych za i przeciw Funkcje baz danych oraz procedury składowane: Pozwalają na tworzenie sparametryzowanych widoków oraz skomplikowanego przetwarzania po stronie serwera Bardzo wydajne przetwarzanie zredukowany narzut wymiany informacji pomiędzy klientem a serwerem Plany wykonania przygotowane przez serwer są szybsze niż plany ad hoc (podczas wysyłania zapytań) Niestety istnieją różne standardy dla różnych dostawców (T-SQL, PL/SQL) bardzo ograniczona przenośność funkcji i procedur składowanych

Problemy do rozważenia Wydajność przetwarzania czy możemy przesunąć w czasie wykonanie? Przenośność rozwiązań: Procedury składowane Funkcje definiowane przez użytkownika EJB Określenie kosztów każdego z rozwiązań wg wymagań must do

Triggery (wyzwalacze) Procedury wykonywane po modyfikacji lub zamiast modyfikacji bazy danych Dzielimy je na: triggery INSERT, triggery UPDATE i triggery DELETE Stąd możemy zdefiniować np. trigery AFTER INSERT dla tabeli Zamówień, czyli po każdej instrukcji INSERT system bazodanowy będzie wywoływał tą procedurę UWAGA: jeśli więcej niż jeden rekord jest objęty instrukcją grupy CRUD to trigger będzie aktywowany tylko raz dla całej grupy rekordów objętych tą instrukcją

Triggery - uwagi Możliwości triggerów zależą od konkretnej implementacji SQL W niektórych implementacjach (np. T-SQL) triggery możemy definiować dla widoków. Stąd widok jest traktowany jako tabela i możemy określić co się stanie, gdy wstawimy rekord do widoku Trigger może powodować modyfikacje innych tabel, lub nawet tej, z której został wywołany co może powodować koleje wywoływania triggerów przez SZBD

Triggery - składnia CREATE TRIGGER TriggerName ON TableName {AFTER INSTEAD OF} {INSERT,UPDATE,DELETE} AS TriggerCode Trigger AFTER zostaną wywołane po określonego działania, np. po wstawieniu rekordu do tabeli. Triggery INSTEAD OF jak nazwa wskazuje zostna wywołane zamiast konkretnego działania, np. wstawiania rekordu do tabeli czy widoku, dla których zostały zdefiniowane.

Triggery przykład MS SQL Server CREATE TRIGGER InsertOrder ON Orders AFTER INSERT AS DECLARE @customer varchar(100) SET @customer=(select CustomerId FROM inserted) UPDATE Customers SET OrderCount=OrderCount+1 WHERE CustomerId=@customer Przykład zakłada, że jedna instrukcja INSERT wstawia jedno zamówienie do tabeli W ogólności można wstawić w jednym zapytaniu wiele rekordów przez INSERT SELECT Trigger zostanie uruchomiony dla każdego wiersza po jego wstawieniu w bazie danych Oracle

Triggery przykład MySQL mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); Query OK, 0 rows affected (0.03 sec) mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount; Query OK, 0 rows affected (0.01 sec) mysql> SET @sum = 0; mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,- 100.00); mysql> SELECT @sum AS 'Total amount inserted'; +-----------------------+ Total amount inserted +-----------------------+ 1852.48 +-----------------------+

Triggery przykład MySQL mysql> delimiter // mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END;// mysql> delimiter ;

Ograniczenia programisty Wskazówki: W pierwszej kolejności spróbuj użyć integralności referencji, zdefiniuj klucze główne, klucze obce i ograniczenia CHECK Jeśli jest to konieczne użyj triggerów, aby wymusić bardziej skomplikowane zasady Triggery mogą wycofać całą transakcję (ROLLBACK), jednak nie jest to zalecane, aby wycofywać takie transakcje, a szczególnie jeśli używamy triggerów AFTER

Procedury składowane, triggery i funkcje Pozwalają na najbardziej efektywne przetwarzanie w szczególności tam, gdzie zależy nam na czasie wykonania Można ich używać w wielu zastosowaniach i zapewnić spójne przetwarzanie Triggery mogą pomóc w wykonywaniu tych samych działań na bazie danych niezależnie z jakiej aplikacji użytkownika została wysłana instrukcja grupy CRUD

Plany wykonania Nasuwa się myśl, że rozwiązanie wybrane przez optymalizator nie musi być wcale rozwiązaniem optymalnym. Jeśli na przykład bardzo dobrze znamy bazę danych, może się zdarzyć, że będziemy w stanie przygotować lepszy plan zapytania. Przed wykonaniem można się przyjrzeć planowi wykonania zapytania (EXPLAIN PLAN). Jest to swego rodzaju symulacja która pokazuje w jaki sposób silnik bazy danych będzie wykonywał zapytanie na bazie. Z planu wykonania zapytania można odczytać jakie indeksy będą użyte, które tabele będą w całości skanowane, jaka będzie kolejność wykonania zapytania, itp. Jeśli to samo zapytanie lub podobne do procedury składowanej będzie wywołane ad hoc to SZBD może użyć gotowego planu wykonania SZBD może przetrzymywać plany wykonania dla SP, które pozwolą na dalsze zmniejszanie czasu wykonania poprzez caching najlepszych przewidywanych metod dostępu do danych oraz wykonywania żądanych operacji

Plany wykonania różnych dostawców Funkcja planu wykonania jest w różny sposób obsługiwana przez różnych producentów: MS SQL Server dostarcza narzędzia Query Analyzer W Oracle jest to polecenie EXPLAIN PLAN. Użytkownicy frontendu Oraclowego Toad mogą w łatwy sposób analizować plan wykonania każdego zapytania (poprzez naciśnięcie Ctrl+E) Baza hurtowni danych Teradata ma bardzo mocno rozbudowany mechanizm optymalizacji zapytań Generalnie wystarczy umieścić słowo EXPLAIN przed poleceniem SQL i optymalizator wypisze na ekranie dokładny przebieg wykonania zapytania SQL

Plan wykonania baza h2 Server EXPLAIN select w.kod_woj, w.nazwa, count (*) as liczba_miast from woj w join miasta m on m.kod_woj=w.kod_woj group by w.kod_woj, w.nazwa having count (w.kod_woj) > 2; SELECT W.KOD_WOJ, W.NAZWA, COUNT(*) AS LICZBA_MIAST FROM PUBLIC.WOJ W /* PUBLIC.WOJ.tableScan */ INNER JOIN PUBLIC.MIASTA M /* PUBLIC.CONSTRAINT_INDEX_8: KOD_WOJ = W.KOD_WOJ AND KOD_WOJ = W.KOD_WOJ */ ON 1=1 WHERE M.KOD_WOJ = W.KOD_WOJ GROUP BY W.KOD_WOJ, W.NAZWA HAVING COUNT(W.KOD_WOJ) > 2

Czego nie dowiemy się z planu zapytania? Plany zapytań: Nie informują o założonych blokadach Nie pozwolą na zbadanie statystyk oczekiwania na dostępność obiektów Nie stwierdzają, czy dane znajdują się w pamięci podręcznej czy nie Nie porównują rzeczywistego kosztu wykonania z estymowanym kosztem W niektórych sytuacjach pewne operacje mogą być niewidoczne w planie zapytania

Normalna praca SZBD Nowoczesne DBMS działają nieprzerwanie Oferują wbudowane funkcje wykonywania regularnie różnych działań, np. co godzinę Tak więc procedury składowane mogą być wykonywane automatycznie - na przykład każdej nocy, aby przenosić tymczasowe dane między systemami, usuwać nieaktualne informacje itp. W MS SQL Server 2000 program SQL Server Agent jest usługą odpowiedzialną za zarządzanie zadaniami

Pytania?