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数据库中的触发器可以以上述类型划分,根据不同的场景,我们可以使用特定的触发器来完成对数据库的管理。


数据运维技术 » Oracle数据库中各种触发器类型介绍(oracle触发器类型)