数据库触发器 、包

触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。

功能:

1 、 允许 / 限制对表的修改

2 、 自动生成派生列,比如自增字段

3 、 强制数据一致性

4 、 提供审计和日志记录

5 、 防止无效的事务处理

6 、 启用复杂的业务逻辑

开始 :

create trigger biufer_employees_department_id

  before insert or update

  of department_id

  on employees

  referencing old as old_value

     new as new_value

  for each row

  when (new_value.department_id<>80 )

begin

  :new_value.commission_pct :=0;

end;

/

触发器的组成部分:

1 、 触发器名称

2 、 触发语句

3 、 触发器限制

4 、 触发操作

1 、 触发器名称

create trigger biufer_employees_department_id

命名习惯:

biufer ( before insert update for each row )

employees 表名

department_id 列名

2 、 触发语句

比如:

表或视图上的 DML 语句; DDL 语句,数据库关闭或启动 ,startup shutdown 等等

before insert or update

of department_id

on employees

referencing old as old_value

new as new_value

for each row

说明:

( 1 )、 无论是否规定了 department_id ,对 employees 表进行 insert 的时候

( 2 )、 对 employees 表的 department_id 列进行 update 的时候

3 、 触发器限制

when (new_value.department_id<>80 )

限制不是必须的。此例表示如果列 department_id 不等于 80 的时候,触发器就会执行。其中的 new_value 是代表跟新之后的值。

4 、 触发操作

是触发器的主体

begin

:new_value.commission_pct :=0;

end;

主体很简单,就是将更新后的 commission_pct 列置为 0

触发:

insert into employees
(employee_id,last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct ) 
values( 12345,’Chen’,’Donny’, sysdate, 12, ‘[email protected]’,60,10000,.25);

select commission_pct from employees where employee_id=12345;

触发器不会通知用户,便改变了用户的输入值。

触发器类型:

1 、 语句触发器

2 、 行触发器

3 、 INSTEAD OF 触发器

4 、 系统条件触发器

5 、 用户事件触发器

包 :是一组相关过程、函数、变量、常量和游标等PL/SQL程序设计元素的组合,它具有面向对象程序设计语言的特点,是对这些PL/SQL 程序设计元素的封装。包类似于C++和JAVA语言中的类,其中变量相当于类中的成员变量,过程和函数相当于类方法。

把相关的模块归类成为包,可使开发人员利用面向对象的方法进行存储过程的开发,从而提高系统性能。

一个包由两个分开的部分组成:

包定义(PACKAGE):包定义部分声明包内数据类型、变量、常量、游标、子程序和异常错误处理等元素,这些元素为包的公有元素。

包主体(PACKAGE BODY):包主体则是包定义部分的具体实现,它定义了包定义部分所声明的游标和子程序,在包主体中还可以声明包的私有元素。 包定义和包主体分开编译,并作为两部分分开的对象存放在数据库字典中。

包定义的语法如下:

CREATE [OR REPLACE] PACKAGE package_name {IS | AS}

[公有数据类型定义[公有数据类型定义]…] [公有游标声明[公有游标声明]…] [公有变量、常量声明[公有变量、常量声明]…] [公有子程序声明[公有子程序声明]…]

END [package_name];

包体定义的语法如下:

CREATE [OR REPLACE] PACKAGE BODY package_name {IS | AS}

[私有数据类型定义[私有数据类型定义]…] [私有变量、常量声明[私有变量、常量声明]…] [私有子程序声明和定义[私有子程序声明和定义]…] [公有子程序定义[公有子程序定义]…] BEGIN PL/SQL 语句

END [package_name];

PL/SQL 允许对包内子程序和本地子程序进行重载。所谓重载时指两个或多个子程序有相同的名称,但拥有不同的参数变量、参数顺序或参数数据类型。

使用 DROP PACKAGE 命令对不需要的包进行删除。

时间: 2024-10-03 14:24:12

数据库触发器 、包的相关文章

如何编写jsp文件?何添加数据库jar包?如何把class文件与jsp文件联系起来?

一.如何添加数据库jar包? 1.首先进入当前的工作空间,例如:(我的工作空间是javaWeb) F:\javaWeb\Web\WebContent\WEB-INF\lib 然后进入到lib目录下,把jar包放到lib目录下. 2.然后右键项目:构建路径--配置构建路径--库--添加外部包--选择你要添加的jar包 二.如何创建与编写jsp文件? 1.创建jsp文件:在项目中右键WebContent,选择jsp File, 2.编写jsp文件: a. 首先我们要将jsp源码中的charset,p

数据库触发器详讲

一:触发器的概念: 数据库触发器是一个与表相关联的,存储的plsql语句. 作用:每当一个特定的数据操作语句,(insert,update,delete)在指定的表发出时,Oracle自动地执行触发器中定义的语句序列 第一个触发器:每当成功插入新员工后   自动打印“插入新员工成功” create trigger 触发器名字(saynewemp) after (执行操作之后) insert on 操作的表(emp) declare begin dbms_output.put_line('成功插入

更新数据库触发器

//复制优惠券表解钩 Use HSHDBNew SELECT * INTO TempExistCoupon FROM DiscountActivityPager WHERE 1=2 --update触发器 Create TRIGGER tri_update   ON  DiscountActivityPager           AFTER update  as begin  if update(UDSateID) and (select top 1 UDSateID  from Discou

Oracle数据库程序包全局变量的应用

1 前言  在程序实现过程中,经常用遇到一些全局变量或常数.在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患<存于前台程序变量,可跟踪内存变量获得>.  本文主要论述将全局变量或常数存取程序包的优点和实现方法.   2 优点  2.1 执行效率比存储于临时表高,不需要频率存取临时表  2.2 将全局变量藏于最后防线<数据库>,安全性较高  2.3 在视图中可以调用程序包的变量,实现动态视图   3

为什么在加载数据库驱动包的时候有用的是Class.forName( ),却没有调用newInstance( )?

在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法. 通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类. 通常编码过程中,在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作.因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象. 有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调

从11.2.0.2开始,数据库补丁包是一个完整安装包(转)

从11.2.0.2开始,数据库补丁包是一个完整安装包.也就是说:比如要打11.2.0.2的补丁包,直接用11.2.0.2包来安装就可以了,不需要像10G一样先安装数据库软件再来打补丁包. 如果已经安装了11.2.0.1的用户也可以像10G一样打补丁包,也可以把11.2.0.2安装到新目录,安装好以后,再把老的数据库数据迁移过去.oracle说的“In-Place Upgrade与Out-of-Place Upgrade” 还有下载补丁包的时候要注意一点是,分7个包,每个包包含不同的应用系统: I

Centos6.9安装Myql数据库RPM包

Centos6.9安装Myql数据库RPM包 1.进入/usr/src目录 [[email protected] nginx-1.12.1]# cd /usr/src/ [[email protected] src]# ls debug kernels nginx-1.12.1 nginx-1.12.1.tar.gz 2.下载Myql5.7.19的rpm包 [[email protected]****src]#wget https://cdn.mysql.com//Downloads/MySQL

9x8hk安装Centos 7.2 装19908836661数据库的包

Centos 7.2 装Apache.PHP.Mysql.Mysql数据库的包.VSFTP配置 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成.由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用.两者的不同,在于CentOS

【赵强老师】利用数据库触发器实现数据的同步

一.什么是触发器 数据库触发器是一个与表相关联的,存储的PL/SQL 语句.每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列. 触发器的应用场景如下: 复杂的安全性检查 数据的确认 数据库审计 数据的备份和审计 二.创建Oracle触发器的语法 CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPDATE