PL/SQL对象

共有6种常用的PL/SQL对象类型:过程、函数、程序包、程序包主体、触发器和类型主体。

上述所有PL/SQL对象都是存储在数据字典内的模式对象。过程和函数通常是用于执行重复指令的子程序。程序包是过程和函数的集合,结合在一起方便管理。触发器时无法打包的对象类型,与表相关联,在针对表执行任何适当的DML时运行。

1.过程与函数

过程是一个执行某些动作的代码块。我们可以为过程定义许多参数。在调用过程时,这些参数会被替换成指定的实际参数。参数可以为IN型(用于将数据传入过程)、OUT型(由过程进行更改,执行代码后从过程中传出新值)以及IN-OUT型(一个变量实现上述两种用途)。在过程内部,我们可以定义任意数量的变量,与参数不同的是,这些变量对于过程来说是私有的。要运行一个过程,既可以在PL/SQL程序块内部调用这个过程,也可以使用交互式的EXECUTE命令。
函数(function)与过程的概念相似,但并不具有OUT型实参,并且无法使用EXECUTE命令来调用。函数通过RETURN语句返回一个值。
函数能够完成的工作,过程同样可以完成。作为较小的代码块,函数通常用于比较简单的操作,并且可以被多次使用。过程通常用于将代码分为若干模块,并且可以包含较长且复杂的进程。

2.程序包

为了将相关联的过程与函数集合在一起,编程人员创建了程序包。程序包(package)由规范和主体这两个对象组成。程序包规范列出了程序包中的各种函数与过程以及他们的调用规范(也就是形参及其数据类型),此外还定义了程序包中所有过程与函数都可以访问的常量与变量。程序包主体包含实现这个程序包的PL/SQL代码,也就是创建过程与函数的代码。如下所示,使用create package命令可以创建一个程序包规范:
create or replace package numbers as  function odd_even(v1 number) return varchar2;
procedure ins_ints(v1 in number);
end numbers;
接下来,使用create or replace package body语句 创建单独的函数与过程,从而可以创建程序包主体。
oracle数据库具有几百个标准的PL/SQL程序包。这些补充的程序包一般在创建数据库时创建。如果希望调用程序包中的过程,那么必须在过程名前面加上程序包的名称。例如,执行下面的命令能够运行NUMBERS程序包中的ODD_EVEN过程:
exec numbers.odd_even(5);
程序包必须存在于与用户关联的模式中,否则,必须在程序包名之前加上模式名。用户需要拥有程序包上的EXECUTE权限。

3.数据库触发器

数据库触发器是一种特殊的PL/SQL对象,因为我们无法手动调用这种对象。在完成某个特殊的动作或出现某种特殊情况时(也就是发生触发事件时),就会自动运行(激发)一个触发器。触发事件可能有很多。对于其中很多触发事件来说,可以将触发器配置为在事件之前或之后激发。此外,我们还可以为相同的触发事件定义before触发器和after触发器。对于插入、更新或删除记录时激发的DML触发器来说,我们可以配置受到影响的每条记录都被激发一次,或者执行每条语句时都被激发一次。
所有触发器都有一个共同的特性,即激发触发事件的用户完全不能控制触发器的执行,甚至可能不了解所激发的触发器。这种特性使得触发器非常适用于审核用户动作和实施安全。
触发器具有广泛的应用,包括:
1.审核用户的动作:触发器能够捕获与指定动作和用户相关的完整信息,并且能够写入某个审核表。
2.执行复杂的编辑:某条记录上的一个动作可能需要其他表上的许多关联动作。触发器可以自动执行这些动作。
3.安全性:触发器可以检查时间、用户的IP地址、用户运行的程序以及限制用户会话的其他因素。
4.实施复杂的约束:对于一个表上的约束来说,某个动作可能毫无问题,但是对于其他的表来说,必须根据这些表的内容来验证该动作。
注意:我们只能通过触发事件来运行触发器。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值