灵活掌握Oracle触发器类型实现数据更新(oracle触发器类型)
Oracle触发器是灵活的,能够实现对数据库表格中数据的更新。它有两种类型:row-level和statement-level触发器。前者会响应表格上每一行数据及其相关的更改,而后者仅响应用户在表格上执行的DDL语句,而无论其所影响的数据行的数目。
为了更有效地掌握这两类触发器,可以通过构建实际的示例来详细说明。以下是一个row-level触发器的示例,用于实现更改表格“EMPLOYEES”中某一列(JOB_ID)时自动将类别“Clerk”替换为“Keeper”:
CREATE OR REPLACE TRIGGER employee_trg
BEFORE UPDATE OF job_id ON EMPLOYEES
FOR EACH ROW
BEGIN
IF :NEW.JOB_ID = ‘CLERK’
THEN
:NEW.JOB_ID := ‘KEEPER’;
END IF;
END;
另一种statement-level触发器的示例,它实现将表格“EMPLOYEES”中两列工资(SALARY)同时加薪10%:
CREATE OR REPLACE TRIGGER employee_trg2
BEFORE UPDATE OF salary ON EMPLOYEES
FOR EACH STATEMENT
BEGIN
UPDATE EMPLOYEES SET salary = salary *1.1;
END;
值得注意的是,上述两个触发器分别在不同的数据库操作上触发,即前者响应每一行数据,而后者响应用户在表格上执行的单条SQL语句,无论它影响几行数据。
此外,可以在触发器程序代码中包含条件判断,以限制触发器调用范围,如下示例:
CREATE OR REPLACE TRIGGER employee_trg
BEFORE UPDATE OF job_id ON EMPLOYEES
FOR EACH ROW
BEGIN
IF :NEW.JOB_ID = ‘CLERK’ and :OLD.JOB_ID != ‘KEEPER’
THEN
:NEW.JOB_ID := ‘KEEPER’;
END IF;
END;
通过包含的条件判断,使得此触发器仅在新的JOB_ID值等于“Clerk”,且旧的JOB_ID值不为“Keeper”时,此触发器才会被调用。
通过灵活地使用row-level和statment-level触发器,可以实现对表格中数据的更新,实现更加高效的操作,并实现自动更新。