返回顶部
首页 > 资讯 > 数据库 >Oracle触发器和程序包的基本介绍
  • 817
分享到

Oracle触发器和程序包的基本介绍

Oracle触发器Oracle程序包 2022-07-05 16:07:16 817人浏览 薄情痞子
摘要

目录一、触发器的概念1、触发器的基本概念2、触发器的分类二、触发器的创建1、DML触发器的创建3、系统触发器4、触发器的禁用和启用5、触发器的查看和删除三、程序包1、程序包的创建2、程序包的删除四、总结一、触发器的概念

一、触发器的概念

1、触发器的基本概念

触发器本身是一段程序代码,类似于存储过程和函数,但是与存储过程和函数不同的是,存储过程和函数创建后保存在oracle数据库中,如果要执行需要用户调用才可以。触发器创建完成后,以独立的对象存储在oracle数据库中,根据事先定义的触发事件来决定是否执行,只要发生这些触发事件,触发器就会自动执行。另外,触发器不能接收参数。
触发器通常由触发器头部和触发体两部分组成,可以具体细分为如下几方面。
1、作用对象:包括数据表、视图、数据库和模式。
2、触发事件:指可以引起触发器执行的事件。例如,DML语句中对数据表或者视图执行数据操作的insert、update、delete语句;DDL语句中执行创建、修改或者删除的cretae、alter、drop语句以及数据库系统的事件,包括oracle系统启动或者退出、异常错误等。
3、触发条件:由when子句指定的一个逻辑表达式,当触发事件发生时,如果该逻辑表达式的值为true时,触发器就会自动执行。
4、触发事件:指触发器指令执行是在触发事件发生之前,还是在触发事件发生之后。
5、触发级别或者触发频率:分为语句级和行级触发器。语句级触发器是默认的,指触发事件发生后,触发器只执行一次;行级触发器指触发事件每作用于一个记录,触发器就执行一次。

2、触发器的分类

根据触发器的使用范围不同,可以把触发器分为3种:DML触发器、instead of触发器和系统触发器。
1、dml触发器
在执行dml语句时触发,可以定义为insert、update、delete操作,也可以定义在操作之前或者之后触发,也可以指定为行级触发或者语句级触发。
2、instead of触发器
它也被称为替代触发器,它是oracle专门为视图设计的一种触发器。在oracle数据库中,一般不能直接对两个以上的表建立的视图进行一般的触发器操作,如果必须修改,就使用替代触发器。
3、系统触发器
在oracle数据库的系统事件发生时进行触发,例如系统启动或者退出、异常错误等,这种系统触发器称为数据库触发器;或者发生ddl语句时触发,例如执行创建、修改或者删除的create、alter、drop语句等,这种触发器称为模式触发器。

二、触发器的创建

基本语法

create or replace trigger<触发器名><触发时间><触发事件>on<表名>|<视图名>|<数据库名>|<模式名>
[for each row]
[when<条件表达式>]
begin
<pl/sql语句>
end

其中的参数说明如下:
1、or replace为可选参数,如果数据库中已经存在要创建的触发器,则先把原先的触发器删除,再重新建立触发器,或者说覆盖原先的触发器。
2、触发时间包含before和after两种,before指触发器是在触发事件发生之前执行,after指触发器在触发事件发生之后执行。
3、触发事件,例如insert,update,delete,create,alter,drop等。
4、<pl/sql语句>是要执行的触发器操作。

1、DML触发器的创建

dml触发器在执行dml语句时触发,可以分为insert、update和delete操作,可以定义在操作之前或者之后触发,也可以指定为行级触发或者语句级触发。
1、语句级dml触发器的创建
它是默认的dml触发器的创建,不使用for each row子句。语句触发器所对应的dml语句影响表中符合条件的所有行,但触发器只执行一次,并且不再使用when条件语句。

1、创建触发器,当对student表进行添加记录、更新记录和删除记录的时候,判断是否是工作时间段,如果不是工作时间段,不允许执行。

create or replace trigger tri_detect
	before insert or update or delete 	--定义触发时间和触发事件
	on student
begin
	if to_char<sysdate,'HH24:MI'> not between '09:00' and '17:00';	--给出判断条件的工作时间
		or to_char<sysdate,'DY','nls_date_lancuage=american'> in <'sat','sun'> then
			raise_application_error<-20005,'不是正常的工作时间,不能执行dml操作'>;	--不符合条件,给出提示信息
	end if;
end;

2、在数据表student上创建触发器,当在该表上插入、删除或者更新的时候,记录操作日志

create or replace trigger tri_log
after insert or delete or update on student 	--定义触发事件和触发时间
declare
	var_user varchar2<20>;
	var_action varchar2<20>;	--定义局部变量
begin
	select distinct user into var_user from all_users;	--获取用户
	if inserting then	--判断是否是“插入”
		insert into stu_log values<var_user,'插入',sysdate>;
	elsif deleting the	--判断是否是“删除”
		insert into stu_log values<var_user,'删除',sysdate>;
	else	--判断是否是“更新”
		insert into stu_log values<var_user,'更新',sysdate>;
	end if;
end;

2、INSTEAD OF触发器的创建

在创建之前先创建一个视图,视图关联数据表,student、teacher。

create view test_view as
select s.id,s.name,t.id,t.name
from student s,teacher t
where s.id=t.sid;

这个时候我们向视图中插入数据会报错,我们只有通过创建instead of触发器来实现。

1、创建instead of 触发器已实现修改视图test_view中的内容

create or replace trigger tri_view
	instead of insert
	on test_view
	for each row
declare
	var_row dept%rowtype;
begin
	select * into var_row from student where id=:new.id;
	if sql%found then
		insert into student<id,name,class> values <:new.id,:new.name,:new.class>;
	end if;
exception
	when no_data_found then
		insert into student<id,name> values<:new.id,:new.name>;
		insert into teacher<id,name,sid> values<:new.id,:new.name,:new.sid>;
end;

3、系统触发器

1、当登录或者退出的时候,向日志表中添加数据

create or replace trigger user_login
	after loGon on database	--登录触发
begin
	insert into user_log<user_name,login_date> values <ora_login_user,systimestamp>;
end user_login;

4、触发器的禁用和启用

在oracle数据库中,触发器可以修改他的状态,使其有效或者无效,即启用或者禁用
语法格式如下。
alter trigger 触发器名称 [disable | enable]
参数说明:disable是触发器禁用参数,既使触发器处于无效状态;enable是触发器启用参数,即使触发器处于有效状态。
例如下面禁用触发器
alter trigger tri_ddl disable;

5、触发器的查看和删除

想查看所有的触发器信息,可以使用数据字典user_triggers,这个数据字典有很多字段可以查看所有触发器的名称、类型、表名、拥有者等信息。

select trigger_name,trigger_type,table_name from user_triggers;

删除触发器

drop trigger 触发器名称

三、程序包

1、程序包的创建

程序包由包规范和包体两部分组成,因此程序包的创建也分为两部分,分别为包规范的创建和包体的创建。
1、包规范的创建
包规范提供应用程序的接口,在包规范中声明程序包中可以使用的变量、数据类型、存储过程、函数、异常等。不过函数和过程只包括原型信息,即只有头部的声明,不包括任何实现的代码,其实现代码在包体中定义。以下是语法格式。

create or replace package 程序包名称
isias
类型声明 | 变量声明 | 异常声明 | 过程声明 | 函数声明
end [程序包名称]

2、包体的创建
在包体中包含规范中声明的过程和函数的实现代码,此外,还可以声明其他没有在包规范中声明的变量、类型、过程、函数,但他们只能在包中使用,不能被其他应用程序调用。下面就是语法格式

create or replace package body 程序包名称
isias
[<内部变量声明>]
[过程体]
[函数体]
end [程序包名称]

2、程序包的删除

删除包括两步,先删除程序包体,再删除包规范。语法如下

drop package body 程序包名称
drop package 程序包名称

四、总结

这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。

文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

到此这篇关于Oracle触发器和程序包的文章就介绍到这了,更多相关Oracle触发器和程序包内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle触发器和程序包的基本介绍

本文链接: https://lsjlt.com/news/33206.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle触发器和程序包的基本介绍
    目录一、触发器的概念1、触发器的基本概念2、触发器的分类二、触发器的创建1、DML触发器的创建3、系统触发器4、触发器的禁用和启用5、触发器的查看和删除三、程序包1、程序包的创建2、程序包的删除四、总结一、触发器的概念 ...
    99+
    2022-07-05
    Oracle触发器 Oracle程序包
  • Oracle触发器和程序包如何创建
    今天小编给大家分享一下Oracle触发器和程序包如何创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、触发器的概念1、触...
    99+
    2023-07-02
  • MySQL触发器的使用和优缺点介绍
    目录前言1. 触发器概述2. 触发器的创建2.1 创建触发器语法2.2 代码举例3. 查看、删除触发器3.1 查看触发器3.2 删除触发器4. 触发器的优缺点4.1 优点4.2 缺点...
    99+
    2024-04-02
  • java基本数据类型和包装类介绍
    这篇文章主要介绍“java基本数据类型和包装类介绍”,在日常操作中,相信很多人在java基本数据类型和包装类介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java基本数据类型和包装类介绍”的疑惑有所帮助!...
    99+
    2023-06-03
  • MySQL中触发器和游标的介绍与使用
    触发器简介 触发器是和表关联的特殊的存储过程,可以在插入,删除或修改表中的数据时触发执行,比数据库本身标准的功能有更精细和更复杂的数据控制能力。 触发器的优点: 安全性:可以...
    99+
    2024-04-02
  • 关于Java程序执行基本流程介绍
    下面由Java学习教程栏目给大家介绍Java程序执行基本流程,希望对需要的朋友有所帮助!让我们来看看Java程序执行流程:例如hellojava.java文件,代码如下:  public class hellojava   {   publ...
    99+
    2020-09-30
    java教程 Java
  • zabbix的安装和基本介绍
    这篇文章主要讲解了“zabbix的安装和基本介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“zabbix的安装和基本介绍”吧!系统版本CentOS Lin...
    99+
    2024-04-02
  • 小程序【云开发】模式基本介绍 | 云开发项目初始化
    文章目录 云开发核心技术简介云开发项目目录结构云开发控制台的功能云开发的环境和配额云开发项目的初始化 云开发核心技术简介 云开发主要包含三大核心技术: 云数据库: 提供在小程序端直...
    99+
    2023-09-21
    小程序
  • Shell AWK编程的基本介绍和使用详解
    目录1、AWK介绍(1)AWK概述(2)printf格式化输出(3)printf命令说明2、AWK的基本使用(1)AWK命令说明(2)AWK命令使用1、AWK介绍 (1)AWK概述 AWK是一种处理文本文件的语言,是一个...
    99+
    2022-06-08
    Shell AWK使用 Shell AWK基本介绍
  • 基于spyder的python教程(spyder的基本介绍)
    Spyder是一个基于Python的科学计算集成开发环境(IDE),提供了编辑、运行、调试和测试Python程序的功能。它是一个开源...
    99+
    2023-09-22
    python
  • 基于Docker封装的开发包工具介绍
    本篇内容介绍了“基于Docker封装的开发包工具介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基于 Docker1.12+ (Docke...
    99+
    2023-06-04
  • Mysql中的触发器定义及语法介绍
    目录1.定义:2.语法:3.删除触发器4.查询触发器5.触发器类型OLD和NEW的使用1.定义:   触发器和存储过程相似,都是嵌入到 mysql 中的一段程序。触发器是由事件来触发某个操作。当数据库执行这些事件时,就会...
    99+
    2022-06-23
    mysql触发器
  • 介绍GitLab流程的基本概念和工作原理
    GitLab是一种基于网络的Git存储库管理工具。它支持一系列功能,包括合并请求、问题跟踪、自动构建和持续集成等。在开发团队中,GitLab通常用来管理源代码。本文将介绍GitLab流程的基本概念和工作原理。GitLab流程简介GitLab...
    99+
    2023-10-22
  • 如何将Python脚本打包成exe应用程序介绍
    目录前言安装Pyinstaller将脚本打包成exe应用程序进阶:消除命令窗口、自定义图标总结前言 我们有时候会编写Python脚本来辅助我们执行一些重复的操作。但是这些脚本在实际使...
    99+
    2024-04-02
  • Hiebernate的基本配置和映射类型介绍
    本篇内容介绍了“Hiebernate的基本配置和映射类型介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!<!--标准的XML文件的起...
    99+
    2023-06-17
  • Python中缓存lru_cache的基本介绍和讲解
    目录一、前言二、举例说明三、lru_cache 用法1.参数详解2. lru_cache不支持可变参数四、lru_cache 与redis的区别五、总结一、前言 我们经常谈论的缓存一...
    99+
    2024-04-02
  • 物业小程序开发的基本功能包括什么
    这篇文章将为大家详细讲解有关物业小程序开发包括什么基本功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。物业小程序开发的基本功能包括:社区公告。物业公司可以在后台发布物业公告。每次发出新通知时,当前社区的...
    99+
    2023-06-27
  • Oracle的基本操作-数据字典和动态性能视图的介绍
    三、数据字典和动态性能视图的介绍1. 数据库的数据字典 (1) DBA_   全库所有的某种对象的数据字典      ...
    99+
    2024-04-02
  • Python的基本类型介绍和可变不可变
    Python的基本类型介绍 前言   做python有一段时间了,从工作开始就在不断地学习和积累。但是有时候用到一些技术点,甚至是基础知识的时候,总是会遗忘。所以,从今天开始,就在这里记录下来,不仅可以分享给大家,而且还可以帮助我来复习。...
    99+
    2023-01-30
    类型 Python
  • C++中标准线程库的基本使用介绍
    目录1.创建线程异步执行2.通过使用互斥锁防止线程冲突3.采用信号量控制线程的运行4.通过promise实现进程间通信总结Qt的封装程度比较高的线程类用多了,发现C++标准库里面的线...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作