pl/sql 包与触发器
来源:互联网 发布:淘宝卖烟丝的怎么搜索 编辑:程序博客网 时间:2024/05/16 06:50
pl/sql中包由两部分组成,
--规范(specification)
--包体(body)
包规范中含有包的相关信息,列出了可用的过程和函数名,具体实现在包体中,即如.h文件。所有人都对其中的信息有访问能力,
这些被称为公有对象。
包体重包含的过程和函数只能被自身访问,是私有的。即如.c或.cpp文件。
基本语法结构:
创建specification:
CREATE [OR REPLACE] PACKAGE package_name
{ IS | AS }
package_specification
END package_name;
创建body:
CREATE [OR REPLACE] PACKAGE BODY package_name
{ IS | AS }
package_body
END package_name;
注意:1.调用其中信息时需要在前面加上包名,以.分隔。
2.除非包规范成功编译,否则主题无法编译。
3.过程或函数可以重载,但是要求不仅仅在参数名称、参数模式上和返回类型上不同。
4.参数类型不能使用同一类型系列,如char与varchar。
5.数字类型不同时可以进行重载。如number、binary_number
触发器:是一种特殊过程。发生特定时间时执行。
触发器trigger与函数、过程的不同点:
1.没有参数列表
2.无is
3.被动调用
4.不能作为包的成员
5.禁止使用commit、rollback语句。
基本语法:
CREATE [OR REPLACE] TRIGGER trigger_name { BEFORE | AFTER } trigger_event
ON table_name
[ REFERENCING [ OLD AS old_name ] [ NEW AS new_name ] ]
[ FOLLOWS another_trigger ]
[ { ENABLE | DISABLE } ][ WHEN ( trigger_condition ) ]
[ FOR EACH ROW ]
[ DECLARE ]
BEGIN
trigger_body
END trigger_name;
简单分为before和after触发器
before触发器:发生在对数据的更改被持久化之前被触发。可以偷换对数据的更改。
after触发器:发生在对数据的更改被持久化之后触发。
又可以分为行级触发器与语句级触发器
语句级触发器:触发次数等于执行DML语句的次数。
行级触发器:触发次数等于被影响的行的次数。
3种关联标识符: :OLD、:NEW、:PARENT
:PARENT 用于对嵌套表定义的情况下引用嵌套表父表的当前记录行。
:OLD 关联正在处理的数据行在DML语句级其激活的触发器发挥作用之前的内容。
:NEW 关联在DML语句级其激活的触发器发挥作用之后将要变成的内容。
注意:
1.:new、:old只能用于行级触发器
2.不能再after触发器中更改:new的值
3.不能更改:old的值
4. 只有行级触发器中使用when子句,并且when子句中:new、:old记录不需要:
5.仅在主体中要:
触发器执行顺序:
before语句级触发器 -> before行级触发器 -> DML语句 -> after行级触发器 -> after语句级触发器
follows关键字用来处理同一级触发器的顺序问题,后加已定义的触发器。
ENABLE/DISABLE:声明触发器的状态,启用或禁止。
instead of 触发器
基本语法
CREATE [OR REPLACE] TRIGGER trigger_name INSTEAD OF trigger_event
ON view_name
[ REFERENCING [ OLD AS old_name ] [ NEW AS new_name ] ]
[ FOLLOWS another_trigger ]
[ { ENABLE | DISABLE } ][ WHEN ( trigger_condition ) ]
[ FOR EACH ROW ]
[ DECLARE ]
BEGIN
trigger_body
END trigger_name;
注意:
1.instead of 触发器仅能定义在视图上
2.必须是行级触发器,有没有for each row都是行级触发器
3.不能创建系统触发器
4.DML语句仅触发instead of触发器,不执行。
一般的视图是可以用来更新的,但是含有avg,sum等函数的视图无法用update更新,所以需要instead of触发器来进行。- pl/sql 包与触发器
- pl/sql基础 游标、过程、函数、包、触发器(系统触发器)
- Oracle PL/SQL存储过程,函数,包,触发器的使用
- oracle中pl/sql编程---存储过程,函数,触发器,包
- Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)
- Oracle pl/sql分类 -- 过程,函数,包,触发器
- Oracle PL/SQL存储过程,函数,包,触发器的使用
- pl/sql 触发器
- PL/SQL --> DML 触发器
- 8.PL/SQL触发器
- PL/SQL触发器
- 触发器 ORACLE PL/SQL
- ORACLE PL/SQL触发器
- PL/SQL(七):触发器
- PL-SQL 触发器
- PL/ SQL 触发器
- ORACLE PL/SQL:触发器
- ORACLE PL/SQL 触发器
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- mysql_python+DBUtils 操作数据库常见错误
- atoi函数
- 在adt bundle中自带的eclipse中没有NDK设置的解决方法?
- 近 100 个 Linux 常用命令大全
- pl/sql 包与触发器
- 例子
- Redis做数据延期处理管道修改
- unset_arr.php
- 广播的发送与接收
- 插入排序原理分析及Java实现
- Android中使用AsyncTask做下载进度条
- Nova Mitaka Release Notes 中文版
- 自定义View(一)