Oracle触发器介绍 行级触发器

发表于:2009-12-23 10:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  本章介绍行级触发器机制。大部分例子以INSERT触发器给出,行级触发器可从insert update delete语句触发。

  1、介绍

  触发器是存储在数据库已编译的存储过程,使用的语言是PL/SQL,用编写存储过程一样的方式编写和编译触发器。下面在SQL*PLUS会话中创建和示例一 个简单的Insert行级触发器。这个触发器调用DBMS_OUTPUT在每插入一行数据时打印“executing temp_air”

  SQL> set feedback off
  SQL> CREATE TABLE temp (N NUMBER);
  SQL> CREATE OR REPLACE TRIGGER temp_air
  2  AFTER INSERT ON TEMP
  3  FOR EACH ROW
  4  BEGIN
  5  dbms_output.put_line('executing temp_air');
  6  END;
  7   /
  8   SQL> INSERT INTO temp VALUES (1);      -- insert 1 row
  executing temp_air
  SQL> INSERT INTO temp SELECT * FROM temp;  -- insert 1 row
  executing temp_air
  SQL> INSERT INTO temp SELECT * FROM temp;  -- inserts 2 rows
  executing temp_air
  executing temp_air
  SQL>

  尽管第三个Insert语句是一条SQL语句,但插入TEMP表中两条记录。许多insert语句插入一条记录,但可以用一条语句插入许多行。

  2、行级触发器语法:

  CREATE OR REPLACE TRIGGER trigger_name
  AFTER|BEFORE INSERT|UPDATE|DELETE ON table_name
  FOR EACH ROW
  [WHEN (Boolean expression)]
  DECLARE
  Local declarations
  BEGIN
  Trigger Body written PL/SQL
  END;

  ·Trigger_name

  用触发器名来确定表名和触发器类型。PL/SQL运行时错误将产生一个PL/SQL错误信息,涉及触发器名和行数。下面Oracle错误显示了在students表上的AFTER-INSERT行触发器的第5行有一个被0除错误。

  ORA-01476: divisor is equal to zero
  ORA-06512: at "SCOTT.STUDENTS_AIR", line 5
  ORA-04088: error during execution of trigger
  'SCOTT.STUDENTS_AIR'

  行记数从关键字DECLARE行开始,如果没有DECLARE部分,BEGIN语句是第一行。触发器名称存储在USER_TRIGGERS表的TRIGGER_NAME。触发器名一般由表名、触发器类型、触发事件,语法如下:

  trigger_name = table_name_[A|B] [I|U|D] [R|S]

  trigger_name 最长30个字符,所以有时不得不使用表名缩写。常表名一般要有一个规则的缩写。这样可以减少故障分析处理时间。

  [A|B]        表示是AFTER 或 BEFORE 触发器类型

  [I|U|D]      表示触发事件,可能是 insert ,update 或者delete

  [R|S]        表示行级(row)或语句级(statement)触发器类型。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号