Oracle数据库应用教程之过程、函数和程序包

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle数据库应用教程之过程、函数和程 序包
路漫漫其悠远
少壮不努力,老大徒悲伤
7.1 子 程 序
以前我们写的PL/SQL语句程序都是瞬时的,都没有命名。 其缺点是:在每次执行的时候都要被编译,并且不能被存储 在数据库中,其他PL/SQL块也无法调用它们。现在我们把命 名的PL/SQL块叫做子程序,它们存储在数据库中,可以为它 们指定参数,可以在数据库客户端和应用程序中调用。命名 的PL/SQL程序包括存储过程和函数。程序包是存储过程和函 数的集合。
PL/SQL 过程已成功完成。
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81
【例7.3】 在匿名块中调用过程multiplication。 SQL> begin
2 multiplication; 3 end; 4/ 程序运行结果同上。
7.1.1 过程 1.过程的创建和执行
过程可使用create procedure语句创建,语法如下: create or replace procedure [<方案名>.]<存储过程名>
[parameter list] {Is|as} [local_declarations]; Begin executable statements
参数的书写格式为:[(参数1 IN | OUT | IN OUT参数类 型, 参数2 IN | OUT | IN OUT参数类型,…)]。参数IN模式是 默认模式。如果未指定参数的模式,则认为该参数是IN参 数。对于OUT和IN OUT参数,必须明确指定,并且这两种 类型的参数在返回到调用环境之前必须先赋值。IN参数可 以在调用时赋默认值,而OUT参数和IN OUT参数不可以。
1) 创建不带参数的过程。 【例7.1】 创建一个过程multiplication,用来实现九 九乘法表。
SQL> create or replace procedure multiplication
2 as
3
i integer;
4
j integer;
5 begin
ห้องสมุดไป่ตู้
6
dbms_output.put_line('print
13
end loop;
14
dbms_output.put_line('');
15 end loop;
16 end;
17 /
过程已创建。
出现编译错误的时候可以用show error或者desc
user_errors来调试。
2) 执行过程 创建过程的时候并不会执行过程,必须在这之后调用过 程来执行。执行过程的方法有两种:一种是在SQL提示符下, 使用execute语句来执行过程;另一种是在匿名块中调用。 execute执行过程的语法如下:
print multiplication
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45
multiplication ');
7
for i in 1..9 loop
8
for j in 1..9 loop
9
if i>=j then
10
dbms_output.put(to_char(j)||'*'||
11
to_char(i)||'='||to_char(i*j)||' ');
12
end if;
execute procedure_name (parameters_list);
【例7.2】 执行multiplication过程。
SQL> set serverout on --将SQL*Plus的输出打开
SQL> execute multiplication --执行过程
multiplication用execute命令。
[exception] [Exception_handlers]
End [procedure_name];
保留字Is前面的过程定义称为过程头。 过程头包括过程 名和具有数据类型的参数列表。过程体包括声明部分、执行 部分和异常处理部分。过程体从保留字Is之后开始。其中, 声明部分和异常处理部分是可选的; 执行部分至少包含一 条语句。这里的Is|as就相当于declare声明部分,除了拥有前 面的一个过程声明语句外,其他和以前的匿名PL/SQL块一 样。其中,replace表示在创建存储过程中,如果已经存在同 名的存储过程,则重新创建;如果没有此关键词,则当数据 库中有同名的过程时会报错“ORA-00955号错误:名称已被 现有对象占用”。必须将同名的过程删除后才能创建。
2.创建带参数的过程 调用程序通过参数可向被调用子程序传递值。在上述语 法[parameter list] 中,参数的具体形式如下: <参数1,[方式1]<数据类型1>, <参数2,[方式2]<数据类型2>, … 参数方式有以下三种: (1) IN表示接受值为默认值。 (2) OUT表示将值返回给子程序的调用程序。 (3) IN OUT表示接受值并返回已更新的值。
子程序结构与PL/SQL匿名块的相同点在于都由声明、执 行、异常三大部分构成,不同之处在于,PL/SQL匿名块的声 明可选,而子程序的声明则是必需的。
子程序的优点如下: (1) 模块化:通过子程序可以将程序分解为可管理的、 明确的逻辑模块。 (2) 可重用性:子程序在创建并执行后,就可以在任何 应用程序中使用。 (3) 可维护性:子程序可以简化维护操作。 (4) 安全性:用户可以设置权限,保护子程序中的数据, 只能让用户提供的过程和函数访问数据。这不仅可以让数据 更加安全,同时可保证正确性。 子程序有两种类型:过程和函数。其中,过程用于执行 某项操作;函数用于执行某项操作并返回值。
相关文档
最新文档