三、 PL/SQL程序单元
1、无论是单独的过程/函数,还是包中的过程/函数,都统称为子程序。
2、过程
1) 异常处理部分是可选的。
2) 过程名应该用动词,因为过程通常是执行某种动作。过程并不一定具有参数。当创建的过程没有参数,就不需要使用圆括号。当调用过程时,空括号是可选的。如:PROCEDURE insert_temp IS
BEGIN
INSERT INTO temp(n) VALUES(0);
END insert_temp;
则调用时,可以采用insert_temp;或者insert_temp();
3) 尽管将过程名追加到END子句后是可选的,但强烈推荐这么做;常见的过程样式是IS、BEGIN、EXCEPTION和END对齐。这些关键字作用域内的全部代码都要进行缩进。这样有助于程序的可读性。
3、函数
1) 函数不是动作者,而是状态的计算值,所以该用名词对函数进行命名
2) 参数是可选的,但是RETURN语句是必须的。如果函数返回值类型与某变量类型相同,则该变量与函数调用之间是可以互换的。
4、包
1) 最基本的包规范语法是:
CREATE PACKAGE package_name IS
Type definition for records, index_by tables,varrys, nested tables
Constants
Exceptions
Global variable declarations
PROCEDURE procedure_name_1(parameters & types);
PROCEDURE procedure_name_2(parameters & types);
FUNCTION function_name_1(parameters &types) RETURN type;
END package_name;
2) 包规范中可以声明数据类型(如,记录类型)、数据声明(如,记录)和异常。在包规范中声明的所有数据对象都是全局的。所以在包规范中声明的变量应当只是那些作用域是全局的变量。包体中的PROCEDURE语句必须与相应包规范中的PROCEDURE语句相匹配,包括子程序名称、参数名称、参数模式和参数类型等。同样适用于FUNCTION子程序。
5、参数与模式
IN(默认), IN OUT, OUT
IN表明子程序只能将该参数作为一个变量来使用,它是只读
IN OUT参数只能是变量类型,不允许为文字或常量
OUT参数只能是变量类型,不允许为文字或常量。在子程序中,一个OUT模式参数的初始值为NULL
默认参数语法:
PROCEDURE name
(argument mode datatype :=a_default_value);
PROCEDURE name
(argument mode datatype default a_default_values);
6、%TYPE
该语法用于声明一个变量,该变量的类型是从数据库表中某列的类型派生而来的
Variable_name table_name.column.name%TYPE;
7、重载
可以重载包中的过程或函数。在同一包中,只有当参数描述不同时才会对子程序进行重载。Oracle必须能够确定调用的是哪个过程。