《PL/SQL 语言开发参考手册》之七:SUB PROGRAM
《PL/SQL 语言开发参考手册》之七:SUB PROGRAM
《PL/SQL 语言开发参考手册》下载地址
1、SUB-PROGRAM
1)匿名块 不存在于数据库中,每次运行,数据库都要再编译,再运行,不能在其他块中相互调用
2)带名块 储存在数据库中,可以在任何需要的地方调用,可以做到代码重用(procedure(程序)、function(函数)、 package(包)、trigger(触发器))
2、存储过程(PROCEDURE)
创建过程:
1)[OR REPLACE]:如果数据库中存在这个名字就先 DROP 再创建(覆盖)
2)[(arg_name[{IN|OUT|IN OUT}]TYPE,arg_name[{IN|OUT|IN OUT}]TYPE)] 参数列表;
其格式:(参数名1 {IN|OUT|IN OUT} 类型,参数名2 {IN|OUT|IN OUT} 类型 , ...)
3){IS|AS} 关键字,二者必须要选择其一。
参数列表:
1)IN 模式:表示该参数不能被过程赋值(只能位于等号右边),只能由调用者在调用时输入值;
2)OUT 模式:表示该参数只能被过程赋值(只能位于等号左边),调用者不用传递参数值;
3)IN OUT 模式:表示该类型既能被过程赋值也能被调用者传值;
4)参数缺省为 IN 模式
PROCEDURE_BODY
1)过程主体是一个拥有声明,执行和异常处理的完整的 PL/SQL 块
2)声明部分在 IS 或 AS 关键字与 BEGIN 关键字之间
3)执行部分在 BEGIN 和 EXCEPTION 之间
4)异常处理在 EXCEPTION 和 END 之间
3、存储过程例子
4、调用 PROCEDURE 的例子
1)匿名块可以调;
2)其他 PROCDEURE 可以调用;
例:
注:此时 v_var1 等于 7
5、指定实参的模式
1)位置标示法:调用时添入所有参数,实参与形参按顺序一一对应;
2)名字标示法:调用时给出形参名字,并给出实参
注:
a、两种方法可以混用,但混用时第一个参数必须通过位置来指定。
b、名字标记法对于参数很多的时候可提高程序的可读性
6、使用缺省参数
1)形参可以指明缺省值
2)位置标记法时,所有的缺省值都放在最后面,使用名字标示法则无所谓
3)如果使用的缺省值,尽量将缺省值放在参数表的末尾
7、函数(Function)与过程(Procedure)的区别
函数在所有的地方都与过程相似,都有名字,都有统一的形式:声明,执行与异常处理
都可以存储在数据库中,也都可以声明在无名块的内部,函数可以看做是过程的一种特殊情况。
差别:
1)过程调用本身是一个 PL/SQL 语句(可以在命令行中通过 exec 语句直接调用);
2)函数调用是表达式的一部分;
8、函数的声明
注:
1)没有返回语句的函数将是一个错误;
2)在函数的主体内部,return 语句用来将控制通过一个数值返回给调用环境
3)在一个函数的主体中,可以使用多个 RETURN 返回语句
9、删除过程与函数
10、子程序
1)位置:
a、Store subprogram 通过 CREATE OR REPLACE 命令创建,以编译后的形式存放在数据库中
b、本地子程序 没有 CREATE OR REPLACE 关键字,不由 CREATE FUNCTION 开头
子程序的定义放在无名块的声明部分且本地子程序只能是本地调用,其他块不能调用
2)例: