子程序
- 定义
已经命名的PL/SQL块,预编译在内存中,
提高代码的运行效率,封装可以重复调用,方便维护。
- 分类
过程
Procedural 执行PL/SQL块的
函数
function 执行PL/SQL块的返回值 return
- 组成
创建部分
create procedural/function 命名;
执行部分
begin ... end;
异常部分(可选)
exception when 异常类型 then 异常处理;
- 优点
提高代码的运行效率,可以重复调用,方便维护
过程(Procedure)
in 输入参数(默认)
out 输出参数
in out 输入,输出参数
备注:当指定参数数据类型时,不能指定该参数类型的长度(number,scott.dept.deptno%type可以)。
语法
create [or replace] Procedure 过程名字 (变量名1 in out 变量类型1 default null,变量名2 in/out 变量类型2,...);
as||is
变量名称1 变量类型1;
变量名称2 变量类型2;
...
begin
//代码执行部分
exception when 异常类型 then 异常处理
end
调用:
a.
SQL>set serveroutput on
SQL>**exec** procedure_name;(有参数时要带括号)
b.
SQL>set serveroutput on
SQL>**call** procedure_name();
c.
declare
begin
procedure_name;(有参数时要带括号)
end;
函数(Procedure)
有返回值的子程序 return
语法
create [or replace] function 函数名字(变量名1,变量类型1,...)
return 返回类型(必须返回值)
as
--定义变量
...
begin
--执行的代码
...
return 返回值;
exception when 异常类型 then 异常处理;
end
调用
a.
declare
v1 varchar2(100);
begin
--v1:=get_user;
--v1:=get_user();
dbms_output.put_line(get_user());
end;
b.
select get_user from dual;
- 函数调用是有限制的,只能作为表达式的一部分调用。
- 在SQL语句中调用的函数只能带有输入参数,其他的不行,且只能使用SQL所支持的标准数据类型,而不能使用PL/SQL中的特有数据类型(boolean,table,record等)。
子程序的其他特征
删除函数:
drop function 函数名;
删除过程:
drop Procedure 过程名;
授予其他用户执行子程序的权限:
grant execute on 子程序名 to 用户名;
过程和函数都是对象,它们在定义的时候名字不能相同