ORACLE Sekwencje Sekwencje - przykład Sekwencje
Transkrypt
ORACLE Sekwencje Sekwencje - przykład Sekwencje
Sekwencje ORACLE (Wykład 4) CREATE SEQUENCE nazwa_sekwencji ś Sekwencje Tworzenie pakietów Wyzwalacze ś ć ś ś Sekwencje - przykład CREATE SEQUENCE sekw_2 INCREMENT BY 2 START WITH 100 MAXVALUE 120 CYCLE; ć [ INCREMENT BY warto | START WITH warto | {MAXVALUE warto | NOMAXVALUE} | {MINVALUE warto | NOMINVALUE } | {CYCLE | NOCYCLE } ] ć ć Sekwencje - przykład BEGIN FOR i IN 1..5 LOOP INSERT INTO komunikat(nr) VALUES(sekw_2.NEXTVAL); END LOOP; END; Sekwencje Sekwencje • Mog by u ywane: ą ALTER SEQUENCE nazwa_sekwencji ć Ŝ – w klauzuli SET polecenia UPDATE – najbardziej zewn trznym podzapytaniu – w listach warto ci polecenia INSERT ę ś ś ć [ INCREMENT BY warto | {MAXVALUE warto | NOMAXVALUE} | {MINVALUE warto | NOMINVALUE } | {CYCLE | NOCYCLE } ] ś ś ć ć • Nie mog by u ywane: ą ć Ŝ – w podzapytaniach – w poleceniu SELECT z klauzulami ORDER BY, GROUP BY, CONNECT BY, HAVING – z kwantyfikatorem DISTINCT 1 Synonimy Synonimy - przyklad CREATE [PUBLIC] SYNONYM nazwa_synonimu FOR obiekt; CREATE PUBLIC SYNONYM s_ksiazka FOR ksiazka; Synonimy prywatne: tworzone dla okre lonej grupy u ytkowników ś Ŝ Synonimy publiczne: tworzone dla wszystkich u ytkowników RENAME stara_nazwa TO nowa_nazwa; Ŝ Pakiety Specyfikacja pakietu Baza danych Aplikacja Pakiet Specyfikacja Ciało pakietu Tworzenie ciała pakietu CREATE [ OR REPLACE ] PACKAGE BODY nazwa_pakietu AS deklaracje prywatne definicje podprogramów [ BEGIN instrukcje inicjalizuj ce pakietu] END; ą CREATE [OR REPLACE] PACKAGE nazwa_pakietu AS deklaracje publiczne specyfikacje podprogramów END; Pakiety - przykład CREATE OR REPLACE PACKAGE pak_zamowienia AS PROCEDURE usun_zamowienie (v_id zamowienie.id_zamowienia%TYPE); PROCEDURE dodaj_pozycje (v_id zamowienie.id_zamowienia%TYPE, v_isbn ksiazka.isbn%TYPE, v_ilosc zamowiona_ksiazka.ilosc%TYPE); END; 2 Pakiety - przykład CREATE PACKAGE BODY pak_zamowienia AS PROCEDURE usun_zamowienie (v_id zamowienie.id_zamowienia%TYPE) IS BEGIN DELETE FROM zamowiona_ksiazka WHERE id_zamowienia = v_id; DELETE FROM zamowienie WHERE id_zamowienia = v_id; END; Pakiety - przykład PROCEDURE dodaj_pozycje (v_id zamowienie.id_zamowienia%TYPE, v_isbn ksiazka.isbn%TYPE, v_ilosc zamowiona_ksiazka.ilosc%TYPE); IS BEGIN INSERT INTO zamowiona_ksiazka VALUES(v_id, v_isbn, SYSDATE, v_ilosc); END; END; -- koniec pakietu Pakiety - przykład Pakiety - zalety korzystania EXECUTE pak_zamowienia.usun_zamownienie(5); • Poprawa zarz dzania procedurami i funkcjami • Poprawa bezpiecze stwa (uprawnienia do pakietu!) • Poprawa efektywno ci ą ń EXECUTE pak_zamowienia.dodaj_pozycje(,,,); ś Pakiety wbudowane DBMS_ALERT DBMS_OUTPUT DBMS_PIPE UTL_FILE UTL_HTTP DBMS_SQL DBMS_DEBUG DBMS_DDL DBMS _RANDOM DBMS_SESSION SET SERVEROUTPUT ON Tworzenie wyzwalaczy CREATE OR REPLACE TRIGGER nazwa_wyzwalacza { BEFORE | AFTER | INSTEAD OF } { DELETE | INSERT | UPDATE [ OF kolumna, [, kolumna ] … ] } [ OR { DELETE | INSERT | UPDATE [ OF kolumna, [, kolumna ] … ] } ] ON tabela [ FOR EACH ROW [ WHEN (warunek) ] ] blok pl/sql 3 Stare i nowe warto ci wierszy Modyfikowanie warto ci INSERT new UPDATE new, old BEFORE Mo na zmienia warto ci “new” DELETE old AFTER Nie mo na zmienia warto ci “new” ć Ŝ Ŝ ś ć ś :identyfikator.kolumna Tworzenie wyzwalaczy przykład CREATE OR REPLACE TRIGGER trig_wydawca BEFORE UPDATE OF id_wydawcy ON wydawca FOR EACH ROW BEGIN UPDATE ksiazka SET wydawca = :new.id_wydawcy WHERE wydawca = :old.id_wydawcy; END; Wyzwalacz INSTEAD OF CREATE VIEW p_wydawcy AS SELECT isbn, tytul, nazwa FROM ksiazka, wydawca WHERE ksiazka.wydawca=wydawca.id_wydawcy; Tworzenie wyzwalaczy przykład UPDATE wadawca SET id_wydawcy = 4 WHERE id_wydawcy = 5; Wyzwalacz INSTEAD OF CREATE OR REPLACE TRIGGER trig_wydawcy INSTEAD OF INSERT ON p_wydawcy DECLARE v_id_wydawcy wydawca.id_wydawcy%TYPE; BEGIN SELECT id_wydawcy INTO v_id_wydawcy FROM wydawca WHERE nazwa = :new.nazwa; INSERT INTO ksiazka (isbn, tytul, wydawca) VALUES (:new.isbn,:new.tytul,v_id_wydawcy); END; 4 Wł czanie i wył czanie wyzwalaczy Rodzaje wyzwalaczy • Wyzwalacze reaguj ce ą ALTER TRIGGER nazwa_wyzwalacza { ENABLE | DISABLE} – na instrukcje DML: BEFORE, AFTER (operuj na tabelach) – INSTEAD OF (operuj na perspektywach) ą ą • Wyzwalacze przeprowadzaj ce akcje po wykonaniu polecenia, które aktywizuje wyzwalacz ą ALTER TRIGGER nazwa_wyzw ENABLE; ALTER TRIGGER nazwa_wyzw DISABLE; Wyzwalacze systemowe BEFORE LOGON BEFORE CREATE BEFORE ALTER BEFORE DROP BEFORE AUDIT BEFORE NOAUDIT BEFORE DDL BEFORE GRANT BEFORE RENAME BEFORE REVOKE AFTER LOGON AFTER CREATE AFTER ALTER AFTER DROP AFTER AUDIT AFTER NOAUDIT AFTER DDL AFTER GRANT AFTER RENAME AFTER REVOKE Wykrywanie rodzaju instrukcji DML Polecenie-1 DML Wyzwalacz Polecenie-2 DML INSERTING UPDATING DELETING Wyzwalacze systemowe CREATE OR REPLACE TRIGGER trig_logowanie AFTER LOGON ON SCHEMA BEGIN INSERT INTO komunikat(str1) VALUES(‘zalogowano sie’ || SYSDATE); END; Wykrywanie rodzaju instrukcji DML CREATE OR REPLACE TRIGGER trig_ceny BEFORE INSERT OR UPDATE OF cena ON ksiazka FOR EACH ROW WHEN (new.cena < 100) DECLARE v_akcja VARCHAR2(20); ….. 5 Przykład - cd. BEGIN IF :new.cena > :old.cena*1.1 THEN :new.cena := :old.cena*1.1; END IF; IF INSERTING THEN v_akcja := ‘wstawiono wiersz’; ELSE v_akcja := ‘zaktualizowano wiersz’; END IF; INSERT INTO komunikat VALUES(‘ksiazka’, SYSDATE, v_akcja); END; Usuwanie obiektów bazy danych DROP SEQUENCE nazwa_sekwencji; DROP [PUBLIC] SYNONYM nazwa_synonimu; DROP PACKAGE nazwa_pakietu; DROP TRIGGER nazwa_wyzwalacza; 6