精通 Oracle 触发器类型的知识点(oracle触发器类型)

Oracle触发器是一种更改数据库表结构的关键概念,它允许开发人员指定要在表结构上插入,修改或删除表中的某些行时要发生的动作。 Oracle triggers是一种特定的程序,以简单的查询或程序语言提供变量和流程控制,这称为PL / SQL或触发器体。 Oracle Trigger有四种不同类型:

第一,定义型触发器(DML)开始运行,当某种数据库操作(DML)执行时,就会触发它。它可以在特定的表行上运行,也可以在特定的表列中执行,取决于操作语句是要完成的特定操作类型。例如,下面的触发器将在更新表的“lastUpdated”列时,自动更新该表中的“updatedBy”列:

“`sql

create or replace trigger TG_UPDATE

before update on lastUpdated

for each row

begin

UPDATE UpdatedBy SET value = :new.lastUpdated;

END;


第二,行级触发器会在每次SQL语句(可以是DML或DDL)被执行时触发,并且执行操作和表行有关。它可以使用FOR EACH ROW子句,以便在每行受到影响时触发它:

```sql
create or replace trigger TG_ROWLEVEL
after update on table
for each row
begin
UPDATE UpdatedBy SET value = :new.updated;
END;

第三,声明性触发器与DML触发器基本相同,但是它们在触发时,触发的动作不会受到事务的影响。该触发器的触发动作在事务中,而不是事务之外。例如:

“`sql

create or replace trigger TG_DECLARATIVE

after update on table

for each row

declarative

begin

declare

status integer not null;

begin

UPDATE UpdatedBy SET value = :new.updated;

status := 0;

case status

when 0 then

Commit;

when 1 then

Rollback;

end case;

end;

END;


最后,DDL触发器会在更改表结构时触发,典型的应用示例是一个安全策略,它要求所有具有更改表结构的权限的用户必须是某些组织的特定成员。例如:

```sql
create or replace trigger TG_DDL
after ddl on table
begin
if (SYS_CONTEXT('USERENV','ROLE') not in ('GROUP_A','GROUP_B','GROUP_C'))
then
raise_application_error(-20999, 'You have to be a member of Group A, B or C to change table structure.');
end if;
END;

总体而言,Oracle triggerns可以说在独特的情况下提高了数据库表结构更改机制的可控性,且在大多数情况下可提供更好的安全性。精通Oracle触发器有助于开发人员正确使用每种类型的触发器。


数据运维技术 » 精通 Oracle 触发器类型的知识点(oracle触发器类型)