20201208邹瑞
总结
子程序
子程序是已经命名的PL/SQL块,他们预编译后存储在数据库中,可以随时从任何数据库客户端和应用 程序中调用它们。命名的PL/SQL程序包括过程和函数。程序可以通过过程名和函数名对他们进行调 用,相当于Java中的方法,过程相当于就是没有返回值的方法。函数相当于有返回值的方法,过程和函 数都可以有自身的参数,在调用时为其传值。
相对以前学习过的PL/SQL块就是匿名PL/SQL块,子程序与匿名PL/SQL块一样,具有声明部分、可执行 部分、异常处理部分。声明部分包含类型、游标、常量、变量、异常的声明,这些声明项都是局部的, 在子程序运行结束将不复存在。可执行部分包括变量操作、流程控制操作、Oracle SQL的语句执行操 作,以及其他子程序的调用。异常处理部分包含异常处理程序,负责处理子程序运行中可执行部分出现 的异常。
子程序除了拥有PL/SQL块的优点外,还有:
- 模块化:子程序将程序分解为明确的,可管理的逻辑模块。程序包可以将若干个子程序放入同一个 包中,统一管理。
- 可重用性:子程序在创建并执行后,保存在服务器上,其他子程序或者客户端可以轻松的进行调 用。
- 安全性:用户可以设置权限,使得访问数据的唯一方式就是子程序,子程序是数据库对象,用户可 以为子程序授予适当的权限控制,限制用户对子程序的调用。这不仅可以让数据安全,而且还能保 证数据正确。
过程
过程是执行一系列PL/SQL操作的子程序,从根本上讲,过程就是命名的PL/SQL程序库,他可以拥有参 数,过程编译后存储在数据库中,然后由应用程序或者其他的PL/SQL块调用。创建过程的语法是
CREATE [OR REPLACE] PROCEDURE 过程名[(参数名 in/out 数据类型)]
{IS|AS}
--声明部分
BEGIN
--可执行部分
[EXCEPTION]
--异常处理部分
END [过程名];
- OR REPLACE 是可选的,表示如果当前用户下已经有同名的过程名,则覆盖旧的过程。过程名后 面括号中是过程的参数,过程的参数可有可无,如果过程存在参数,参数列表必须有小括号括起 来。如果过程没有参数,不能有小括号。
- IS或AS标志着PL/SQL块开始,IS和AS是等价的。在过程中没有关键字DECLARE。
- 如果过程中需要本地变量、常量等声明部分,可以在这里声明,方法与PL/SQL块中声明变量的方 法相同。
- 为了便于阅读交流和良好的编程风格,建议在END后面加上过程名
不带参数的过程
示例:EMP表中员工 ALLEN 在入职时劳动合同条款是每半年工资提升5%。为调用方便,请编写过程实 现该操作。
带参数的过程
示例:根据员工编号和工资增长率输出员工的工资。
过程的参数模式
调用程序是通过参数向过程传值的,过程中的形参接收调用者传递过来的参数,并且在过程中可以使 用。默认情况下,过程中的参数在过程中只能使用,不能对参数重新赋值。过程中参数传递共有三种模 式:分别是IN、OUT和IN OUT。参数的具体语法是:
参数名称 [IN|OUT|IN OUT] 数据类型
- IN:默认模式,表示参数只能由外界输入,不能在过程中对IN参数重新赋值。该参数可以有默认 值。
- OUT:该参数不能有默认值,该参数不能接收数据,在过程中对OUT参数进行赋值后,该值可以 被调用者捕获,调用者调用时对OUT参数只能使用变量作为参数,不能使用常量。
- IN OUT:该参数在过程中可以接收数据,也可以对参数赋值,赋值后的参数可以被调用者捕获, 调用者调用时对参数只能使用变量作为参数,不能使用常量。参数不能包含默认值。
默认参数
在参数定义同时用DEFAULT(或者赋值运算符)直接对参数进行初始化,即参数的默认值,当调 用者没有对该参数传值时,过程中就使用参数默认值。一个过程中可以有若干个默认值参数,但是 默认值参数只能放在参数列表的最后。
评论留言