7. PLSQL--程序包和触发器

1.11 程序包(package)

1.11.1包的组成

包由两部分组成,分别为包的声明部分和包的实现部分
1.包的声明部分
在这里插入图片描述

2.包的实现部分
在这里插入图片描述

1.11.2.包的作用

使用包将程序分组归类
使用私有方法隐藏逻辑----》隐藏函数,在程序包中存在,但是只能由包的内部成员才能调用。 被调用函数,一定要写在调用函数的前面
在这里插入图片描述在这里插入图片描述

在上面的例子中,我们将与圆相关的计算功能放入到一个包中,这样我们就通过包实现程序的分类
1.包的私有方法
在包的实现部分中存在三个函数,而在包的声明部分只存在一个函数,存放在包实现部分,但未在包声明部分出现的函数或过程我们称之为包都私有函数/过程
私有函数/过程只能被包内的其他函数过程调用,否则报错。

1.12触发器

数据库触发器是存储在数据库中的命名pl/sql语句块,当触发事件发生时他们会隐含地执行。

1.12.1触发事件分类

DML语句----》最常用的触发器
DDL触发器/ 系统事件 /用户事件
1.简单的DML触发器
其中由DML于触发的触发器我们称之为简单DML触发器
1)触发器的语法
CREATE [OR REPLACE] TIGGER 触发器名
【 before (触发器之前) | alter (触发器之后)】
【insert (插入)| update (更新)| delete(删除)】
ON 表名(监视的是哪个表的dml)
【for each row (标识为行级触发器),默认是语句触发器(就触发一次)】
When 触发条件
BEGIN
执行部分
ENDS
在这里插入图片描述

-------》在存储过程和函数的变量声明,是写在is后面,begin前面
-------》触发器的变量声明,是需要自己写declare 【变量名】 ,begin的前面
-------》BEFORE & ALTER 触发器在触发事件之前执行,还是之后执行
-------》FOR EACH ROW 表是行级触发器
2 DML触发器的分类
1)语句前触发器
在这里插入图片描述

调用过程,需要在写入到新的begin 和end之间,将对于的dml语句写入其中
2)行前触发器
在这里插入图片描述

3)语句后触发器
在这里插入图片描述

4)行后触发器
在这里插入图片描述

3.在触发器引用更改的记录
在行级触发器中,可以使用NEW和 OLD 关键字,引用改变的记录
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4.DML触发器的综合应用
1)利用触发器实现自增列
在这里插入图片描述
在这里插入图片描述

插入数据
2)利用触发器监视工资列修改
首先建立表
在这里插入图片描述

然后建立触发器,自治事务是一个独立的事务,负责记录所有dml语句操作,不管是rollback/commit,都会记录在自治事务中
在这里插入图片描述

修改数据
在这里插入图片描述

查看结果
5. DML替代触发器
在复杂的视图中,不可以进行DML操作,此时我们使用替代触发器实现相同的目的
1)创建复杂视图
复杂视图,数据来自多张表,包括分组语句/group by 等
在这里插入图片描述

----》对视图进行DML操作
-----》不可以对复杂视图解析DML,此处引发报错
在这里插入图片描述

2)创建替代触发器
在这里插入图片描述

替代之后就可以删除对应的语句,而且不报错
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值