Oracle数据库中各种触发器类型介绍(oracle触发器类型)
Oracle数据库中触发器可以分为不同类型,每类触发器都具有特定的功能,在不同的场景使用特定类型的触发器可以有助于管理Oracle数据库。
首先介绍一下条件语句触发器(Condition Statement Trigger),这种触发器可以帮助实现表中数据的条件控制、以及数据完整性等,它的语法如下:
CREATE OR REPLACE TRIGGER trg_cond_stmt
BEFORE UPDATE ON TABLE1
FOR EACH ROW
DECLARE
v_status VARCHAR(10);
BEGIN
SELECT status INTO v_status
FROM TABLE2 WHERE ID = :NEW.ID;
IF v_status != ‘Active’
THEN
RAISE_APPLICATION_ERROR(‘You can not update inactive status.’);
END IF;
END;
其次,还有序列触发器(Sequence Trigger),这种触发器可以帮助自动生成表字段中的主键序列,它的语法如下:
CREATE OR REPLACE TRIGGER trg_seq_stmt
BEFORE INSERT ON EMP
FOR EACH ROW
BEGIN
SELECT emp_seq.NEXTVAL
INTO :NEW.EMPID FROM DUAL;
END;
接下来是行触发器(Row Trigger),这种触发器在每行更新或插入数据时会被触发,它的语法如下:
CREATE OR REPLACE TRIGGER bis_tr
BEFORE INSERT OR UPDATE
ON suppliers
FOR EACH ROW
BEGIN
IF INSERTING THEN
:NEW.s_date := SYSDATE;
:NEW.modified_by := USER;
ELSIF UPDATING THEN
IF :NEW.s_name :OLD.s_name THEN
:NEW.s_date := SYSDATE;
END IF;
:NEW.modified_by := USER;
END IF;
END;
最后是流触发器(Stream Trigger),这种触发器可以用于捕获在数据库中发生的流事件,以获得高效执行,它的语法如下:
CREATE OR REPLACE TRIGGER trg_stream
AFTER LOGON ON DATABASE
DECLARE
v_usr VARCHAR2(100);
BEGIN
SELECT USER INTO v_usr FROM DUAL;
IF v_usr != ‘SCOTT’
THEN
DBMS_OUTPUT.PUT_LINE(‘Unauthorized user login!’);
RAISE_APPLICATION_ERROR(-20001, ‘Access Denied!’);
END IF;
END;
因此,Oracle数据库中的触发器可以以上述类型划分,根据不同的场景,我们可以使用特定的触发器来完成对数据库的管理。