• HOME
  • CATEGORY
  • ABOUT ME
All Articles

  • HOME
  • CATEGORY
  • ABOUT ME

Oracle-Trigger-1

2022-02-28

触发器的简介

触发器类似过程和函数,都具有程序主题部分 (声明段\可执行段\异常处理段),但是与手工调用过程或函数不同的是,所有触发器都是依靠事件执行的, 例如:当对于某一张表执行更新操作 (INSERT, UPDATE, DELETE) 时,都可能引起触发器的执行。同时过程或函数都是显示调用的,所以其是可以接收参数的,但触发器由于采用的是隐式调用 (一触即发某类操作时调用),所以是不能够接收参数的。

在 Oracle 之中触发器主要分为: DML 触发器, INSTEAD-OF (替代) 触发器, DDL 触发器,系统或数据库时间触发器。所有的触发器都可以使用如下的基本语法进行创建。

触发器创建语法

CREATE [OR REPLACE] TRIGGER 触发器名称
[BEFORE | AFTER]   -> 触发时间
[INSETEAD OF]
[INSERT | UPDATE | UPDATE OF 列名称 [,列名称,...] |DELETE]   ->触发事件
ON [表名称 | 视图 | DATABASE | SCHEMA]	->触发对象
[REFERENCING [OLD AS 标记] [NEW AS 标记] [parent AS 标记]]
[FOR EACH ROW]	 ->触发频率
[FLLOWS 触发器名称]
[DISABLE]
[WHEN 触发条件]   ->触发条件
[DECLARE]	->触发操作(程序主体)
	[程序声明部分;]
[PRAGMA AUTONOMOUS_TRANSACTION;]
BEGIN
	程序代码部分;
END [触发器名称];
/

触发器说明

在编写触发器过程之中应该注意以下几点:

1、触发器不接受任何的参数,并且只能是在产生了某一触发时间之后才会自动调用;

2、针对于一张数据表的触发器,最多只能有12个;

BEFORE INSERT , BEFORE INSERT FOR EACH ROW , AFTER INSERT , AFTER INSERT FOR EACH ROW ,
BEFORE UPDATE , BEFORE UPDATE FOR EACH ROW , AFTER UPDATE , AFTER UPDATE FOR EACH ROW ,
BEFORE DELETE , BEFORE DELETE FOR EACH ROW , AFTER DELETE, AFTER DELETE FRO EACH ROW

3、同一种类型触发器,只能够定义一次;

4、一个触发器最大为32K,所以如果要编写的代码较多,可以通过过程或函数调用完成;

5、默认情况下,触发器之中是不能使用事务处理操作,或者采用自治事务进行处理;

6、在一张数据表之中,如果定义过多的触发器,则会造成DML性能的下降;

触发器的管理

查看触发器

所有的数据库对象一定会在数据字典之中进行查询,对于触发器,用户同样可以使用三个数据字典查看信息:

USER_TRIGGERS 、 ALL_TRIGGERS 、 DBA_TRIGGERS

禁用/启用触发器

当触发器创建之后的默认状态为启用,如果要修改触发器的操作状态,可以使用如下的语法操作。

ALTER TRIGGER 触发器名称  [DISABLE | ENABLE];

在修改触发器时提供了两种触发器的操作状态:

ENABLE(有效状态):当触发事件发生时,处于有效状态的数据库触发器将被触发;
DISABLE(无效状态):当触发事件发生时,处于无效状态的数据库触发器TRIGGER将不被触发,相当于触发器不存在。

禁用/启用一张表的全部触发器

ALTER TABLE [SCHEMA.] 表名 [ENABLE |DISABLE] ALL TRIGGERS;

删除触发器

DROP TRIGGER 触发器名称;
赏

谢谢你请我吃糖果

支付宝
微信
  • Oracle
  • Trigger
  • SQL

扫一扫,分享到微信

微信分享二维码
Oracle-Trigger-DML-1
VIEW-TRANSFER-PARAMETERS-1
© 2025 Sevattal
这里只是一个微不足道的计算机从业者
  • All Articles

tag:

  • Ansible
  • JMeter
  • CRM
  • Mail
  • Conda
  • Corosync-Pacemaker-CRM
  • DM Database
  • Scrapy
  • Cloud
  • ASM
  • Mysql
  • Linux
  • Elasticsearch
  • FFmpeg
  • Hexo
  • RabbitMQ
  • SpringBoot
  • Spring
  • Maven
  • Kubernetes
  • Lightroom
  • Crontab
  • DRBD
  • LVM
  • Nginx
  • NTP
  • OpenSSH
  • SSH
  • NetworkCard
  • Supervisor
  • Swap
  • TinyProxy
  • GCC
  • VNC
  • Oracle
  • MongDB
  • MinIO
  • Mysql-Lock
  • Restore
  • MysqlDump
  • Procedure
  • HTML
  • XtraBackup
  • Nacos
  • Neo4j
  • Netty
  • NAT
  • Route
  • ACL
  • EIGRP
  • Cisco
  • OSPF
  • HUAWEI
  • Switch
  • STP
  • VLAN
  • VTP
  • Nmap
  • OpenFeign
  • Sentinel
  • Backup
  • EXP
  • RMAN
  • DG
  • FlashBack
  • Job
  • Oracle-Inspection
  • Oracle-Name
  • Oracle RAC
  • RAC
  • Trigger
  • Postgres
  • Postgres-Copy
  • Flask-SQLalchemy
  • PGPool-II
  • Postgres+PGPool-II
  • Rancher
  • Redis
  • Redis-Copy
  • Redis-Cluster
  • Redis-Memory
  • Redis-RDB
  • Redis-AOF
  • Redis-Sentinel
  • Interview
  • SNMP
  • Spring Security
  • Bus
  • Config
  • Consul
  • GateWay
  • Eureka
  • Sleuth
  • Stream
  • Zookeeper
  • Tomcat
  • VMware
  • ShareDisk
  • Video-Clip
  • Hystrix
  • Ribbon
  • Regedit
  • USB
  • Yaml
  • Zabbix

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true