ZSBD PL/SQL CZĘŚĆ 3 Wykład 5 Prowadzący: dr Paweł Drozda.

Slides:



Advertisements
Podobne prezentacje
Indeksy w bazie danych Oracle
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Wykład 3 Prowadzący: dr Paweł Drozda
Skrypty, procedury przechowywane i wyzwalane
Prowadzący: mgr inż. Elżbieta Majka
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Język SQL Część II.
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
MS Access 2003 Kwerendy Paweł Górczyński.
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
ODE Informacje wstępne. Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja -
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 7: Relacje i ograniczenia integralnościowe Język definiowania danych - DDL (Data Definition.
Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
Kurs Pascala – spis treści
Metody autoryzacji użytkowników wymaga integracji z systemem operacyjnym nie wymaga logowania mała pewność mechanizmu wymaga logowania duża pewność mechanizmu.
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
Język definicji danych (Data Definition Language)
C++ wykład 2 ( ) Klasy i obiekty.
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
Funkcje znakowe ASCII(znak IN VARCHAR2) RETURN INTEGER
ASCII(znak IN VARCHAR2) RETURN INTEGER zwraca wartość numeryczną kod ascii znaku CHAR(n Integer)zwraca znak odpowiadający kodowi n CONCAT(tekst1, tekst2)zwraca.
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Programowanie zorientowane obiektowo 1 Programowanie zorientowane obiektowo (object-oriented programming) jest to metodologia programowania bazująca na.
Ogólne jednostki programowe 1
Wykład 2 Wojciech Pieprzyca
Wykład 8 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Wykład 2 struktura programu elementy języka typy zmienne
Wykład 4 Obiektowość w obiektowo-relacyjnych bazach danych na przykładzie Oracle.
Język SQL (Structured Query Language) DDL (Data Definition Language)
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
Bazy Danych II prowadzący: mgr inż. Leszek Siwik
SQL – Structured Query Language (3)
Programowanie strukturalne i obiektowe
Administracja serwerem bazy danych Oracle 11g Zarządzanie obiekami bazy danych Wykład nr 4 Michał Szkopiński.
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
Procedury i funkcje.
PL/SQL Zajęcia nr II PL/SQL(2) M. Rakowski - WSISiZ.
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
SQL - Structured Query Language
Inicjalizacja i sprzątanie
Programowanie baz danych
Komendy SQL do pracy z tabelami i bazami
PL/SQL – dalsza wędrówka
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Systemy Baz Danych Wykład III
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Autor: Damian Urbańczyk
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Komendy SQL do pracy z danymi
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Wykład 3 Prowadzący: dr Paweł Drozda. Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie Uprawnienia –
Bazy Danych Wprowadzenie
Pakiety numeryczne Skrypty, funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Oracle Data Modeler (4.1) Tworzenie modelu danych – specyfikacja wymagań informacyjnych (na dane) Tworzenie modelu procesów – specyfikacja wymagań funkcyjnych.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Oracle Data Modeler (4.1). Aplikacja Wymagania biznesowe Tworzenie systemu informacyjnego Procesy Informacje Analiza Projektowanie Browser: Hollywood.
1 Procedury i funkcje CREATE PROCEDURE nazwa ([proc_parameter[,...]]) [characteristic...] routine_body CREATE FUNCTION nazwa ([func_parameter[,...]]) RETURNS.
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Widoki (views) - Perspektywy:
DDL język definiowania danych
Programowanie Obiektowe – Wykład 2
Strukturalny język zapytań SQL - historia
Zapis prezentacji:

ZSBD PL/SQL CZĘŚĆ 3 Wykład 5 Prowadzący: dr Paweł Drozda

Program wykładu dr P. Drozda Pakiety Wyzwalacze

Pakiety dr P. Drozda Obiekt logiczny schematu bazy danych grupujący logicznie powiązane elementy PL/SQL – typy, zmienne, podprogramy (procedury, funkcje) Skład pakietu: Specyfikacja Zawartość/ciało Specyfikacja zawiera deklaracje typów, zmiennych, stałych, kursorów podprogramów, do których można się odwoływać z zewnątrz pakietu (zadeklarowane elementy są publiczne) Zawartość zawiera instrukcje dla kursorów i podprogramów zadeklarowanych w specyfikacji oraz może definiować dodatkowe elementy niewidoczne na zewnątrz Pozwala wiele elementów załadować na raz

Zalety pakietów dr P. Drozda Zgrupowane logicznie powiązane elementy w jednym miejscu Ukrycie informacji Z zewnątrz widoczna specyfikacja Konstrukcje w zawartości niedostępne do wglądu Kompilacja oddzielnie specyfikacji i zawartości Trwałość danych publicznych – zmienne, kursory – przez całą sesję użytkownika Lepsza wydajność – cały pakiet wczytywany jest raz dla wszystkich użytkowników Przeciążanie procedur, funkcji

Elementy deklaracji pakietów dr P. Drozda Specyfikacja Zmienna; Procedura A deklaracja; Funkcja B deklaracja; … Zawartość Zmienna1; Procedura C deklaracja … Procedura A deklaracja BEGIN …; END; Funkcja B deklaracja BEGIN … END; Publiczny Prywatny

Widoczność elementów w pakietach dr P. Drozda Zmienna widoczna wszędzie Zmienna1 widoczna tylko w obrębie Zawartości Zmienna2 widoczna tylko w procedurze A Procedura C widoczna tylko wewnątrz Zawartości – może być wykorzystana w procedurze A i funkcji C Specyfikacja Zmienna; Procedura A deklaracja; Funkcja B deklaracja; … Zawartość Zmienna1; Procedura C deklaracja … Procedura A deklaracja BEGIN Zmienna2; …; END; Funkcja B deklaracja BEGIN … END;

Tworzenie pakietów – składnia dr P. Drozda CREATE [OR REPLACE] PACKAGE nazwa AS|IS deklaracja typów publicznych; deklaracja zmiennych; specyfikacja podprogramów; END [nazwa]; CREATE [OR REPLACE] PACKAGE BODY nazwa AS|IS odpowiednie deklaracje, tworzenie zawartości podprogramów; Zmienne domyślnie inicjowane na NULL Wszystkie elementy zadeklarowane widoczne są dla użytkowników mających prawa dostępu do pakietu

Przykład – tworzenie pakietu dr P. Drozda CREATE OR REPLACE PACKAGE pracownicy IS numer NUMBER:= 111; CURSOR nazwisko IS SELECT last_name FROM employees; PROCEDURE nazwisko (id number); FUNCTION zarobki (id number) RETURN NUMBER; END pracownicy;

Przykład ciąg dalszy dr P. Drozda CREATE PACKAGE BODY Pracownicy IS Jakaszmienna VARCHAR2(2); PROCEDURE nazwisko (id number) IS name employees.last_name%TYPE; BEGIN SELECT last_name INTO name FROM employees WHERE employee_id = id; DBMS_OUTPUT.PUT_LINE(last_name); END nazwisko; … END Pracownicy;

Przykład pakietu bez zawartości dr P. Drozda CREATE PACKAGE stale IS km2mile CONSTANTNUMBER := ; mile2km CONSTANTNUMBER := ; jard2metr CONSTANTNUMBER := ; metr2jard CONSTANTNUMBER := ; END stale; CREATE OR REPLACE FUNCTION zamiana(km NUMBER) RETURN NUMBER IS BEGIN RETURN (km*stale.km2mile); END;

Wywołanie elementów pakietu dr P. Drozda Z linii komend EXECUTE nazwapakietu.nazwaElementu; EXECUTE Pracownicy.nazwisko(100); Gdy ze schematu innego użytkownika EXECUTE HR.Pracownicy.nazwisko(100); Wewnątrz bloku Tak samo jak wywołanie normalne elementów – tylko poprzedzone nazwą pakietu do którego należą; gdy pakiet z innego schematu – dodatkowo na początku nazwa schematu

Przeglądanie, usuwanie pakietów dr P. Drozda Informacje o pakietach znajdują się w user_source SELECT text FROM user_source WHERE type=PACKAGE | PACKAGE BODY; DROP PACKAGE nazwa; DROP PACKAGE BODY nazwa;

Reguły tworzenia pakietów dr P. Drozda Specyfikacja pakietu tworzona przed zawartością Odwołanie w podprogramie do innego elementu (np. w procedurze do funkcji) możliwe tylko, gdy ta funkcja została wcześniej zadeklarowana (jeśli publiczna – nie ma problemu, jeśli prywatna trzeba pilnować) Umieszczanie w specyfikacji tylko niezbędnych elementów (widocznych dla wszystkich)

Przeciążanie podprogramów dr P. Drozda Możliwość zadeklarowania procedury/funkcji z tą samą nazwą więcej niż raz Konieczność rozróżnienia za pomocą parametrów (ich liczby, rodzin typów lub kolejności) Możliwość nadpisania lokalnych podprogramów, z pakietu Nie można przeciążać: Gdy parametry są w tej samej rodzinie typów (np. NUMBER i DECIMAL) Gdy są podtypami tej samej rodziny (VARCHAR i STRING są podtypami VARCHAR2) Gdy funkcje różnią się tylko zwracanym typem

Przykład przeciążania dr P. Drozda CREATE OR REPLACE PACKAGE dept IS PROCEDURE add_dept(id NUMBER, name VARCHAR2 :=edu, location VARCHAR); PROCEDURE add_dept(name VARCHAR2); END dept;

Pakiet wbudowany STANDARD dr P. Drozda Zawiera najczęściej wykorzystywane funkcje (np. ROUND, TO_CHAR, NVL, LENGTH, etc.) Funkcje wywoływane bez konieczności poprzedzania nazwą pakietu Gdy jakaś funkcja zostanie przeciążona – konieczność odwołania poprzez nazwę pakietu

Blok inicjalizacyjny pakietu dr P. Drozda Na koniec zawartości można dodać blok wykonywany raz Uruchomiany raz w momencie ładowania pakietu do sesji użytkownika Służy do dokładniejszej inicjalizacji elementów pakietu Przykład: CREATE PACKAGE inic IS kasa NUMBER; … CREATE PACKAGE BODY inic IS … BEGIN SELECT salary INTO kasa FROM employees WHERE employee_id =120; END inic;

Wyzwalacze dr P. Drozda Bloki składowane w bazie, które są uruchomiane w momencie wystąpienia jakiegoś zdarzenia Wyzwalacze definiowane są na perspektywie, tabeli, schemacie użytkownika bądź na całej bazie Możliwości uruchomienia wyzwalacza: Wystąpienie DML (INSERT, UPDATE, DELETE) Wystąpienie DDL (CREATE, ALTER, DROP) Wystąpienie operacji na bazie danych takich jak SERVERERROR, LOGON, LOGOFF, SHUTDOWN, STURTUP

Wyzwalacze dla DML dr P. Drozda Możliwe instrukcje wywołujące wyzwalacz: INSERT UPDATE [OF kolumna] DELETE Może być więcej niż jedna instrukcja INSERT OR DELETE INSERT OR UPDATE OR DELETE Zawartość wyzwalacza określa jakie akcje zostaną podjęte w momencie użycia wyzwalacza (może być blokiem, odwołaniem do procedur)

Tworzenie wyzwalacza – składnia dr P. Drozda CREATE TRIGGER nazwa BEFORE | AFTER | INSTEAD OF INSERT | UPDATE | DELETE ON nazwaObiektu [REFERENCING OLD AS old /NEW AS new] [FOR EACH ROW WHEN (condition)] [DECLARE] BEGIN … END;

Wyzwalacz przykład dr P. Drozda CREATE OR REPLACE TRIGGER godziny BEFORE INSERT ON employees BEGIN IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR (TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '08:00' AND '18:00') THEN RAISE_APPLICATION_ERROR(-20500,nie można nic wstawić przecież nie pracujesz'); END IF; END;

Odpalenie wyzwalacza raz/wiele dr P. Drozda Gdy zapytanie operuje na jednym wierszu – trigger odpalany raz (obojętnie czy z opcją każdego wiersza czy bez opcji) np. INSERT INTO departments(department_id) VALUES (3); Gdy zapytanie dotyczy wielu wierszy – z opcją FOR EACH ROW wyzwalacz odpalany wiele razy, bez opcji – tylko raz UPDATE employees SET salary=salary*1.2 WHERE department_id=50;

Przykład – różne instrukcje DML dr P. Drozda CREATE TRIGGER godziny BEFORE INSERT OR UPDATE OR DELETE ON employees BEGIN IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR (TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '08:00' AND '18:00') THEN IF INSERTING THEN RAISE_APPLICATION_ERROR(-20500,nic nie wstawic'); ELSE IF DELETING THEN RAISE_APPLICATION_ERROR(-20502,nie wyrzucaj'); ELSEIF UPDATING THEN RAISE_APPLICATION_ERROR(-20503,zostalo zmodyfikowane wczoraj); END IF; END;

Wyzwalacz wierszowy - przykład dr P. Drozda CREATE TRIGGER widelki BEFORE INSERT OR UPDATE OF salary ON employees FOR EACH ROW BEGIN IF NOT (:NEW.job_id IN (AD_PRES,AD_VP)) AND :NEW.SALARY >15000 THEN RAISE APPLICATION_ERROR(-20202, za dużo chcesz zarabiać); END;

Przykład z opcją WHEN dr P. Drozda CREATE TRIGGER zarobki BEFORE INSERT OR UPDATE OF salary ON employees FOR EACH ROW WHEN (NEW.job_id = SA_REP) BEGIN IF INSERTING THEN :NEW.commission_pct := 0; ELSEIF :OLD.commission_pct THEN :NEW.commission_pct := 0; ELSE :NEW.commission_pct :=:OLD.commission_pct +0.05; END;