'

PL/SQL

Понравилась презентация – покажи это...





Слайд 0

PL/SQL


Слайд 1

Триггер блок PL/SQL, выполняемый неявно каждый раз, когда происходит конкретное событие


Слайд 2

DML-события, которые происходят при выполнении инструкций INSERT, UPDATE или DELETE. DDL-события, которые происходят при выполнении инструкций CREATE, ALTER или DROP. Другие события уровня базы данных.


Слайд 3

CREATE [OR REPLACE] TRIGGER имя_триггера {BEFORE | AFTER | INSTEAD OF } событие_триггера [OR событие_2 [OR событие_3]] ON {таблица_или_представление | NESTED TABLE столбец_вложенной_таблицы OF представление} [REFERENCING [OLD AS старая][NEW AS новая] [PARENT AS родитель] ] [FOR EACH ROW ][WHEN условие_триггера]


Слайд 4

DML-события


Слайд 5

CREATE [OR REPLACE] TRIGGER имя_триггера {BEFORE | AFTER} событие_триггера ON [DATABASE | схема] [WHEN условие_триггера]   тело_триггера;   END имя_триггера;


Слайд 6

DDL-события


Слайд 7

DDL-события


Слайд 8


Слайд 9

CREATE OR REPLACE TRIGGER secure_emp BEFORE INSERT ON emp BEGIN IF (TO_CHAR (sysdate,'DY') IN ('SAT','SUN')) OR (TO_CHAR(sysdate,'HH24') NOT BETWEEN '08' AND '18') THEN RAISE_APPLICATION ERROR (-20500, ‘It is not working time. Be funny') ; END IF; END;


Слайд 10

Псевдополя :new :old


Слайд 11

CREATE OR REPLACE TRIGGER history_values AFTER DELETE OR INSERT OR UPDATE ON tab1 FOR EACH ROW BEGIN INSERT INTO history_tab (user_name, timestamp, id, old_val1, new_val1, old_val2, new_val2) VALUES (USER, SYSDATE, :old.id, :old.val1, :new.val1, :old.val2, :new.val2); END;


Слайд 12

CREATE OR REPLACE TRIGGER history_values AFTER DELETE OR INSERT OR UPDATE ON tab1 REFERENCING OLD AS OLDR NEW AS NEWR FOR EACH ROW BEGIN INSERT INTO history_tab (user_name, timestamp, id, old_val1, new_val1, old_val2, new_val2) VALUES (USER, SYSDATE, oldr.id, oldr.val1, newr.val1, oldr.val2,newr.val2); END;


Слайд 13

CREATE OR REPLACE TRIGGER derive_commission_pct BEFORE INSERT OR UPDATE OF sal ON emp FOR EACH ROW WHEN (new.job = 'SALESMAN') BEGIN IF INSERTING THEN :new.comm := 0; ELSE /* UPDATE of salary */ IF :old.comm IS NULL THEN :new.comm := 0 ; ELSE :new.comm := :old.comm * (:new.sal/:old.sal); END IF; END IF; END;


Слайд 14

Порядок выполнения триггеров Триггер BEFORE уровня инструкций. Для каждой строки, обрабатываемой инструкцией. Триггер BEFORE уровня строки. Сама инструкция, запускающая триггер. Триггер AFTER уровня строки. Триггер AFTER уровня инструкций.


Слайд 15

Если внутри триггера возникает сбой, и это исключение не обрабатывается явно, то все действия, выполненные в связи с исходной SQL-командой, отменяются, включая действия, выполненные сработавшими триггерами.


Слайд 16

Виды коллекций Ассоциативные массивы(индексные таблицы) Вложенные таблицы Массивы переменной длины


Слайд 17

Массив переменной длины TYPE имя_типа IS {VARRAY|VARYING ARRAY} (предельный размер) OF тип_элемента [NOT NULL];


Слайд 18

Declare TYPE int_varray ID VARRAY (3) of INTEGER; varray_integer INT_VARRAY :=int_varray(); BEGIN FOR I in 1..3 LOOP Varray_integer.EXTEND; Varray_integer(i):=I; END LOOP


Слайд 19

Определение массивов переменной длины как объектных типов CREATE OR REPLACE TYPE имя_типа AS VARRAY|VARYNG ARRAY (предельный_размер) OF тип_элемента [NOT NULL]


Слайд 20

Определение массивов переменной длины в таблицах CREATE OR REPLACE TYPE address_varray AS VARRAY (3); CREATE TABLE addresses (address_id integer not null, Street_address address_varray not null, Constraint address_pk PRIMARY KEY (address_id));


Слайд 21

Insert into addresses Values (1, address_varray(‘Minsk’,’Brovki str.’,’6’));


Слайд 22

Select column_value FROM THE ( select cast(street_address as varray_nested_table) From addresses Where address_id=1)


Слайд 23

Вложенные таблицы CREATE OR REPLACE TYPE имя_типа AS TABLE OF тип_элемента [NOT NULL]


Слайд 24

Ассоциативные массивы CREATE OR REPLACE TYPE имя_типа AS TABLE OF тип_элемента [NOT NULL] INDEX BY[PLS_INTEGER|BINARY_INTEGER|VARCHAR2(размер)]


Слайд 25


Слайд 26


×

HTML:





Ссылка: