PL/SQL子程序 分为 过程,方法等。他们的创建是放在缓冲区的,所以定义,执行后不能得到保存,重复使用。这样就为什么会有了存储过程 和 存储函数了。这两种今后学习。恩,™是进过编译后存放在工作区的。额,继续过程 和 方法。
一如既往,首先来看他们的定义
过程 | 函数 |
procedure 过程名(参数1,参数2.....) is 变量声明 begin 可执行部分 exception 异常处理部分 end; | function 函数名(参数1,参数2.....)return 数据类型 is 变量声明 begin 可执行部分 return语句。 exception 异常处理部分 end; |
从上面可以看出他们至少有三个区别:
1. 关键字不同 过程为 procedure 函数为 function ,废话,但是procedure会写嚒,罗嗦
2.函数是可以有返回值的,注意到了嚒,return 数据类型。
3.正因为第二点,才有了第三点,函数在可执行部分至少有一条return 语句。
如何使用,结合PL/SQL程序块执行模式:
declare
......
begin
.......
end;
将上面定义放到declare部分,就可以用起来了。为什么不赶紧试试。
码农们更多的使用到的可能是 存储型的 过程和函数吧。那不妨接下来讲讲他们?
上面提到存储过程和存储函数他们是在创建后,经过系统编译存放在oracle数据库工作区中的,所以一次编译,随时运行。在建立之后就能随时调用了,当然你必须得保证编译通过了。也正是这个原因,所以存储过程函数一旦新建后,不能修改,那怎么做呢,只能删掉重新建立了呗。
存储过程的部分有三:一声明部分、二执行部分、三异常处理部分(面试官最喜欢问的)
create or replace procedure 存储过程名(参数1,参数2......)
[authid current_user|definer] --访问控制, 选择有二,当前用户 和所有用户
as -- as 和游标进行区别 is
声明部分;
begin
执行部分;
exception
异常部分;
end;
来点DBA知识,
A 授权 用户执行:grant execute on 存储过程名 to 用户名;
B 执行存储过程:execute 过程名(实际参数);
C 删除过程: drop 存储过程名;
存储函数 类似,他们不同点,能够想到吧,想想子程序 过程和函数区别。
create or replace function 存储函数名(参数1,参数2......) return 返回值
[authid current_user|definer] --访问控制, 选择有二,当前用户 和所有用户
as -- as 和游标进行区别 is
声明部分;
begin
执行部分;
return 表达式;
exception
异常部分;
end;
看出来不同点了吧,看出来了吧。不说了。