探索Oracle数据库触发器类型(oracle触发器类型)

  Oracle数据库触发器是发生在数据库中指定情况时,由软件自动执行的一组记录的SQL语句,它可以保护数据库的完整性,创建更丰富的应用程序,使数据库更加安全。Oracle数据库支持两种触发器类型:表级(row_level)触发器和级联(statement_level)触发器,他们都可以有效满足Oracle数据库的触发器要求。

  表级(row_level)触发器被称为表触发器,它可以随着每一行数据发生改变时,执行语句操作。表触发器用于在数据库表层次跟踪这个变化的机制,主要有两种触发器:

(1)BEFORE触发器:BEFORE触发器可以在更新表之前,执行指定的SQL语句操作,在下面的语句中,在购买产品的记录保存在customers表之前,会检查要购买的产品的价格是否在指定的范围之内,语句如下所示:

CREATE OR REPLACE TRIGGER check_price

BEFORE INSERT OR UPDATE ON customers

FOR EACH ROW

DECLARE

price NUMBER;

BEGIN

SELECT product_price

INTO price

FROM products

WHERE product_name = :NEW.product_name;

IF price NOT BETWEEN 500 AND 10000

THEN

RAISE_APPLICATION_ERROR (-20000,

‘Invalid price for this product’);

END IF;

END;

/

(2)AFTER触发器:AFTER触发器可以在更新表之后,执行指定的SQL语句操作。如果某表的product_name字段值改变,AFTER触发器会记录这种改变,同时负责记录日志。语句如下所示:

CREATE OR REPLACE TRIGGER log_product_name

AFTER UPDATE OF product_name

ON customers

FOR EACH ROW

BEGIN

INSERT INTO product_name_log

VALUES (:NEW.product_name, SYSDATE);

END;

/

  语句级(statement_level)触发器可以在更新表数据后执行指定的SQL语句,语句级触发器仅会按照整条语句执行1次。例如当我们想要更新几条记录,例如以下语句:

UPDATE customers SET product_name = ‘iPad Pro’

WHERE customer_id BETWEEN 1 AND 3

  语句级触发器会检查目标表的数据是否有变化,并根据需要触发指定语句。如果要求条件被满足,该语句将会被执行。因此,我们可以利用语句级触发器,应用于审计,可以记录哪条语句是由谁执行的、什么时候执行的,如下所示:

CREATE OR REPLACE TRIGGER audit_statement

AFTER UPDATE

ON customers

BEGIN

INSERT INTO statement_log

VALUES (user, SYSDATE);

END;

/

  当然,Oracle数据库还提供更多的触发器支持,比如说跨表触发器或者跨数据库触发器。利用以上两种触发器类型,可以有效满足Oracle数据库的触发器要求,以调整在每一次数据库更新时所需要做出的响应,从而使得Oracle数据库更加安全、高效。


数据运维技术 » 探索Oracle数据库触发器类型(oracle触发器类型)