触发器定义:触发器是当特定事件出现时自动执行的代码块。
触发器与过程的区别:过程是由用户或应用程序甚至是触发器显式调用的,而触发器是由Oracle根据发生的事件而隐式激活的,它不能被直接调用执行。
触发器的类型及其运行时机:
Oracle触发器分为DML触发器、模式(DDL或用户事件)触发器和
数据库级触发器。
1:DML触发器:当DML语句在表中发生时执行。DML语句包括以下3种类型:
a.语句级触发器:无论受触发语句影响的行数是多少,都只激活一次。
b.行级触发器:每当触发器语句影响表时就会激活行级触发器,行级触发器在被修改的每一行上执行一次。
c.INSTEAD OF触发器:允许用户修改不能使用DML语句修改的视图。INSTEAD OF触发器只可用于视图,不可用于表。
2:模式(DDL或用户事件)触发器:在
数据库模式中执行DDL语句时激活。
3:数据库(系统事件)触发器:在发生LOGOFF(退出)、LOGON(登录)、STARTUP(打开)、SHUTDOWN(关闭)数据库和SERVERERROR(生成错误消息)等系统事件时执行。
数据库对象(同义词,序列,视图,索引)
同义词的定义:是现有对象的一个别名。
同义词的作用:
1:简化SQL语句。2:隐藏对象的名称和所有者。3:提供对对象的公共访问。
同义词的两种类型:
1:公有同义词。CREATE public synonym emp_syn FOR SCOTT.emp;
2:私有同义词。CREATE synonym emp FOR SCOTT.emp;
公有的同义词只能建立在超级用户下定义。
序列是用来生成唯一、连续的整数的数据库对象。
在表中使用序列:
1.创建序列:
CREATE SEQUENCE sequence_name [START WITH startnum] [INCREMENT BY step];
2.创建表时使用序列:
CREATE TABLE table_name ( uid smallint not null, ...);
3.插入数据时使用序列:
INSERT INTO table_name VALUES(sequence_name.NEXTVAL, ...);
视图是从若干基本表和(或)其他视图构造出来的虚表。
视图和表的区别是:创建一个视图时,只是把其视图的定义存放在数据字典中,而不存储视图对应的数据,而表会存储对应的数据。
视图的目的和作用:筛选表中数据,简化查询语句,对表起到保护作用。
注:加WITH READ ONLY 选项可使视图不允许DML操作