Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Oracle PLSql 4
1. PL/SQL – Triggers
I Trigger non sono sottoprogrammi invocati esplicitamente,
ma vengono eseguiti in seguito al verificarsi di eventi.
2. Esempio
Si supponga di voler tenere traccia dei cambiamenti nella tabella books e di
avere una tabella book_hist:
CREATE TABLE books_hist
( isbn VARCHAR2(13) NOT NULL,
action CHAR(1) NOT NULL,
datestamp DATE NOT NULL,
oracle_user VARCHAR2(30) NOT NULL,
real_user VARCHAR2(60),
old_title VARCHAR2(200),
old_summary VARCHAR2(2000),
old_author VARCHAR2(200),
old_date_published DATE,
old_page_count NUMBER,
new_title VARCHAR2(200),
new_summary VARCHAR2(2000),
new_author VARCHAR2(200),
new_date_published DATE,
new_page_count NUMBER,
CONSTRAINT action_ck CHECK (action IN ('I', 'D', 'U')));
3. Esempio TriggerCREATE OR REPLACE TRIGGER book_hist_trg
AFTER INSERT OR UPDATE OR DELETE
ON books
FOR EACH ROW
DECLARE
l_action CHAR(1);
BEGIN
IF :NEW.isbn != :OLD.isbn THEN
exc.myraise(exc.cannot_change_unique_id_cd);
END IF;
IF INSERTING THEN
l_action := 'I';
ELSIF UPDATING THEN
l_action := 'U';
ELSIF DELETING THEN
l_action := 'D';
END IF;
INSERT INTO books_hist
(isbn, action, datestamp, oracle_user, real_user,
old_title, old_summary, old_author,old_date_published,old_page_count,
new_title, new_summary, new_author, new_date_published,new_page_count)
VALUES(:NEW.isbn, l_action, SYSDATE, USER, NULL,:OLD.title, :OLD.summary,
:OLD.author,:OLD.date_published, :OLD.page_count,:NEW.title,
:NEW.summary, :NEW.author,36 :NEW.date_published,:NEW.page_count);
END;
4. Eventi dei Trigger
I trigger quindi entrano in azione Prima o Dopo (BEFORE o AFTER)
uno o più dei seguenti eventi che si possono verificare INSERT,
DELETE, UPDATE. L’evento può essere relativo a un’intera tabella o a
una o più colonne.
UPDATE OF column1_name OR UPDATE OF column2_name ON Tabella
Inoltre il trigger può essere applicato per ogni riga o al verificarsi di una condizione WHEN
[ FOR EACH ROW [ WHEN condition ] ]
5. Data Dictionary
USER_SOURCE
SQL> describe user_source
Nome Nullo? Tipe
----------------------------------------- --------
----------------------------
NAME
VARCHAR2(30)
TYPE
VARCHAR2(12)
LINE NUMBER
TEXT
VARCHAR2(4000)
6. Data Dictionary
SQL> describe user_triggers
Nome Nullo? Tipe
----------------------------------------- -------- ----------------------------
TRIGGER_NAME VARCHAR2(30)
TRIGGER_TYPE VARCHAR2(16)
TRIGGERING_EVENT VARCHAR2(227)
TABLE_OWNER VARCHAR2(30)
BASE_OBJECT_TYPE VARCHAR2(16)
TABLE_NAME VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
REFERENCING_NAMES VARCHAR2(128)
WHEN_CLAUSE VARCHAR2(4000)
STATUS VARCHAR2(8)
DESCRIPTION VARCHAR2(4000)
ACTION_TYPE VARCHAR2(11)
TRIGGER_BODY LONG
7. Data Dictionary
SQL> describe user_triggers
Nome Nullo? Tipe
----------------------------------------- -------- ----------------------------
TRIGGER_NAME VARCHAR2(30)
TRIGGER_TYPE VARCHAR2(16)
TRIGGERING_EVENT VARCHAR2(227)
TABLE_OWNER VARCHAR2(30)
BASE_OBJECT_TYPE VARCHAR2(16)
TABLE_NAME VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
REFERENCING_NAMES VARCHAR2(128)
WHEN_CLAUSE VARCHAR2(4000)
STATUS VARCHAR2(8)
DESCRIPTION VARCHAR2(4000)
ACTION_TYPE VARCHAR2(11)
TRIGGER_BODY LONG