Oracle数据库(十二)——触发器上

触发器——保证数据的正确性

什么是触发器

触发器和存储过程比较类似,它由PL/SQL编写并存储在数据库中,它可以调用存储过程,但触发器的调用和存储过程的不一样,它只能由数据库的特定事件来触发

特定事件主要有:

  • 用户在指定的表或视图做DML操作
    • INSERT
    • UPDATE
    • DELECTE
  • 用户做DDL操作
    • CREATE
    • ALTER
    • DROP
  • 数据库事件
    • LOGON/LOGOFF 用户的登录注销
    • STARTUP/SHUTDOWN 数据库的打开关闭
    • ERRORS 特定错误消息

触发器的作用

  • 自动生成自增长字段
  • 执行更复杂的业务逻辑
  • 防止无意义的数据操作
  • 提供审计
  • 允许或限制修改某些表
  • 实现完整性规则
  • 保证数据的同步复制

触发器的类型

  • 数据操纵语言(DML)触发器。
  • 数据定义语言(DDL)触发器

  • 符合触发器

  • INSTEAD OF触发器。
  • 用户和系统事件触发器

触发器的语法

--DML触发器的主要语法
CREATE [ OR REPLACE ] TRIGGER [schema.] trigger
{BEFORE | AFTER | INSTEAD OF} --触发类型,前触发,后触发,替换类型 
    {DELETE | INSERT | UPDATE --表示触发的事件
        [OF column [, column ]...] --触发条件具体到的某列
    }
    [ OR {DELETE | INSERT | UPDATE 
          [OF column [, column ]...]        
         }
    ]...
{ON [schema. ]table | [schema. ] view}
    [FOR EACH ROW ] --表示行级触发器,省略则为语句级触发器
    [FOLLOWS [ schema.] trigger [,[ schema. ] trigger ]...]--触发器执行的顺序
    [ENABLE | DISABLE] --设置触发器是否为可用状态
    [WHEN (condition)]
    trigger_body
--DDL和数据库事件触发器语法如下:
CREATE [ OR REPLACE ] TRIGGER [schema.] trigger
{ BEFOR | AFTER}
{ ddl_event [OR ddl_event]... --DDL事件,用or连接
| database_event [OR database_event]...
}
ON { [schema.] SCHEMA
  | DATABASE
}
    [FOLLOWS [ schema.] trigger [,[ schema. ] trigger ]...]--触发器执行的顺序
    [ENABLE | DISABLE] --设置触发器是否为可用状态
    [WHEN (condition)]
    trigger_body
DDL事件简介
ALTER修改对象
ANALYSE分析统计信息
AUDIT/NOAUDIT启用或取消审计
COMMENT注解列或表的含义
CREATE创建对象
DROP删除对象
GRANT授权操作
RENAME修改对象名称
REVOKE取消权限
TRUNCATE删除行记录

触发器由三部分组成。它们分别是触发事件或语句,触发器限制,触发器动作。

使用SQL*PLUS操作触发器

创建触发器

创建触发器的首要条件是要有相关的权限。用户模式下如果想在自己的对象上创建触发器,则必须具有CREATE TRIGGER系统权限,如果想在其他用户上创建触发器,则需要有CREATE ANY TRIGGER权限,如果在数据库上创建触发器。则需要有ADMINISTER DATABASE TRIGGER系统权限。

--一个简单的触发器
CREATE TRIGGER FIRST_TGR
    AFTER DELETE
    ON PRODUCTINFO  --触发器作用的表
        BEGIN
    IF DELETING THEN 
        DBMS_OUTPUT.put_line('删除数据操作! ');
    END IF;
        END;
查看触发器
--查看触发器的名称。执行如下脚本:
SELECT OBJECT_NAME FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TRIGGER'
--查看触发器内容,有了触发器名称就可以查看其具体内容
SELECT * FROM USER_SOURCE WHERE NAME = 'FIRST_TGR' ORDER BY LINE;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值