毕业设计(论文)
文献综述
题 目 Oracle存储过程
原理及应用
专 业 计算机科学与技术
班 级 07级计科 1 班
学 生 宋 龙
指导教师 王 家 伟
重庆交通大学
2011年
ORACLE存储过程原理及应用
摘要
计算机技术的飞速发展,推动了整个社会的信息化进程,促进了信息技术的进步,催生了量的信息系统,尤其是各种管理软件。而管理软件离不开对大量数据的处理,这就要依赖于数据库管理系统。Oracle 是当前世界上使用最为广泛的数据库管理系统之一,由于Oracle 拥有强大的数据管理能力和较好的数据保密性,以及出众的技术优势。Oracle 得到了大规模的应用,它经常作为大型管理软件的后台数据库。程序可以通过相应的软件接口对数据库进行操作,因为大型系统的业务规则一般都比较复杂,需要进行多个库表的操作,逻辑比较复杂,如果单纯使用SQL 语句进行数据库操作,应用程序代码会非常冗长,网络传输的负担会加重,系统响应速度也较慢,一旦业务规则发生变化,需要进行大量的代码修改工作,尤其是对于非常复杂的数据库操作,作量会成倍增长,与此相应的系统调试的工作量也很大。这非常不利于系统的维护和使用,同时造成了系统客户端的工作量的加大,而服务器强大的处理能力又被闲置。针对这种弊端,几乎所有的大型系统都使用存储过程来进行数据库操作。采用这种数据库操作模式,可以把应用程序和数据库操作相对独立开来,分别管理。
计算机技术的飞速发展,推动了整个社会的信息化进程,促进了信息技术的进步,催生了量的信息系统,尤其是各种管理软件。而管理软件离不开对大量数据的处理,这就要依赖于数据库管理系统。Oracle 是当前世界上使用最为广泛的数据库管理系统之一,由于Oracle 拥有强大的数据管理能力和较好的数据保密性,以及出众的技术优势。Oracle 得到了大规模的应用,它经常作为大型管理软件的后台数据库。程序可以通过相应的软件接口对数据库进行操作,因为大型系统的业务规则一般都比较复杂,需要进行多个库表的操作,逻辑比较复杂,如果单纯使用SQL 语句进行数据库操作,应用程序代码会非常冗长,网络传输的负担会加重,系统响应速度也较慢,一旦业务规则发生变化,需要进行大量的代码修改工作,尤其是对于非常复杂的数据库操作,作量会成倍增长,与此相应的系统调试的工作量也很大。这非常不利于系统的维护和使用,同时造成了系统客户端的工作量的加大,而服务器强大的处理能力又被闲置。针对这种弊端,几乎所有的大型系统都使用存储过程来进行数据库操作。采用这种数据库操作模式,可以把应用程序和数据库操作相对独立开来,分别管理。
关键字:信息技术, Oracle, 数据管理, 存储过程, 数据保密, 数据库, 数据库技术, 数据库系统
引言
在Oracle 中,复杂的业务规则和应用逻辑可作为过程(procedure)存储。存储过程是一组SQL 和PL/SQL 语句,它允许我们把加强业务规则的代码从应用移动到数据库中。结果是,代码只存储了一次,却可以被多个应用使用。因为Oracle 支持存储过程,应用中的代码可以变得更紧凑一致和更易于维护。使用存储过程可以极大地提高数据访问效率,提升整个应用系统的性能。针对一些比较复杂的业务规则的处理,可以放在数据库中由服务器执行。在客户服务器或三级应用中,把复杂应用的处理,从应用转移到数据库服务器,可以明显提高性能。另外,因为数据代码被存储在数据库中且为静态,可以从重复使用数据库中的相同查询获益。系统全局区中的共享SQL 区(shared SQL Area)储存可执行命令执行后的分析版本。从而当一个过程被再次执行时,它将能够利用上一次执行的分析操作来提高过程的执行性能。基于这些原因,应用开发的效果也从中受益。为了创建一个过程
对象, 必须拥有CREATE PROCEDURE 系统权限(为角RESOURECE 的一部分)。如果此过程对象在另一用户的领域中,则必须拥有CREATE ANY PROCEDURE 系统权限。因为存储过程往往与一些数据库表有关联,所以要保证存储过程的正常使用,这些过程对象的所有者必须对这些表拥有一定的操作权限,而执行这些过程对象的用户并不需要在其所基于的表上具有特权。这样的用户,仅需在此过程对象上具有EXECUTE 权限即可。
1 存储过程简介
存储过程是SQL 语句和可选控制流语句的预编译集合,以一个名称存储作为一个单元处理. 与传统意义上SQL 规范中的SQL 语言不同,oracle游标的使用它是由SQL 语句和流控制语句共同组成的一个过程序,通过所设置的参数,调用其它过程,并返回状态值给调用者以指示操作的成功或失败,并能够在远程数据库中运行. 此外,存储过程经过数据库编译和优化后存储在数据库服务器中,用以被客户程序执行调用.
2 存储过程的优点
1) 提高系统效率[2 ] . 对于客户端来说, 只要调用已在服务器中存放的存储过程, 并通过网络发送该过程名和少量入口参数, 数据库服务器就可以执行该过程, 在执行完成后只返回结果集数据给客户端应用程序, 而无需再在网上传送大量的命令和中间结果数据, 这可以降低网络负担, 并且又可以充分利用服务器的高性能来提高运算速度.
2) 提高系统可维护性. 因为修改存储过程通常比修改所部署的组件中的硬编码SQL 语句要容易. 并且存储过程和组件一样能够作到一次编写多次调用, 修改与程序的其他部分独立.
3) 增强系统的安全性. 当创建了存储过程之后,可以将执行该过程的权限授予其它用户,从而使得他可以执行特定的数据库操作,而不能访问其它模式对象(例如表) . 例如,你可以将执行过程(更新表) 的权限授予其它用户,但不授予它们直接访问该表的权限.
4) 减少网络负荷. 当客户端发出执行存储过程的请求时,只有执行存储过程的命令在内部网络上传送,当它们到达数据库服务器时,运行存储过程,客户端在网上只接收返回结果或状态信息,使得客户机与服务器的通讯量降至最小,大大减少了网络负荷.
3 存储过程的使用
3.1 存储过程的使用前提
在Oracle 中,复杂的业务规则和应用逻辑可作为过程(procedure)存储。存储过程是一组SQL 和PL/SQL 语句,它允许我们把加强业务规则的代码从应用移动到数据库中。结果是,
代码只存储了一次,却可以被多个应用使用。因为Oracle 支持存储过程,应用中的代码可以变得更紧凑一致和更易于维护。使用存储过程可以极大地提高数据访问效率,提升整个应用系统的性能。针对一些比较复杂的业务规则的处理,可以放在数据库中由服务器执行。在客户服务器或三级应用中,把复杂应用的处理,从应用转移到数据库服务器,可以明显提高性能。另外,因为数据代码被存储在数据库中且为静态,可以从重复使用数据库中的相同查询获益。系统全局区中的共享SQL 区(shared SQL Area)储存可执行命令执行后的分析版本。从而当一个过程被再次执行时,它将能够利用上一次执行的分析操作来提高过程的执行性能。基于这些原因,应用开发的效果也从中受益。为了创建一个过程对象, 必须拥有CREATE
PROCEDURE 系统权限(为角RESOURECE 的一部分)。如果过程对象在另一用户的
领域中,则必须拥有CREATE ANY PROCEDURE 系统权限。因为存储过程往往与一些数据库表有关联,所以要保证存储过程的正常使用,这些过程对象的所有者必须对这些表拥有一定的操作权限,而执行这些过程对象的用户并不需要在其所基于的表上具有特权。这样的用户,仅需
在此过程对象上具有EXECUTE 权限即可.
3.2 存储过程的使用技巧
用来执行过程的语法取决于调用这个过程的环境,如果是在命令窗口下,可以通过使用execute 命令加上存储过程的名称来执行,当然,过程所需要的输入参数必须赋上相应的值,如果有输出参数的话,还得先定义相应的变量,用于得到过程的输出结果,所有的参数都必须跟在过程名后并用括号圈起来,如同下面所示的例子(pro_test 为存储过程名):
execute pro_test(‘test’);
如果一个过程内调用了其他的过程,则无须execute 命令,即:pro_test(‘test’);
如果要执行另外一个用户拥有的过程,就得给这个过程创建一个同义词,或者在这个过程的前面加上所有者的名称。当执行远程过程时,必须制定数据库链接名称。数据库链接的名称必须在过程名称之后和变量之前指定(REMOTE_DB 为远程数据库链接的名称),如下所示:
execute pro_test@REMOTE_DB(‘test’);
为了对远程过程的调用更加方便,我们通常给远程过程创建一个同义词,这样能够避免因为远程数据库链接的名称发生变化而必须修改所有远程数据库链接名称。创建了同义词以后,
用户就可以使用此同义词名称来引用远程过程。如果远程过程调用涉及远端数据库中的更新操作,为了能正常调用远程过程,必须安装分布式选项。否则,用户就有可能不能调用远程过程,这势必给系统开发带来极大的不便。
过程的创建语法是:create [or replace]procedure[user.]
[(argument[IN|OUT|IN OUT]datatype[,argument[IN|OUT|
IN OUT]datatype ]···)]
{IS|AS}{block |external program};
过程写好后,一定要在SQLPLUS 中进行编译,而且只有编译成功后,才能被执行,即使编译成功了,还要进行相关的功能测试,确保过程执行后,能完成预定的各项任务,所有这些就涉及过程的调试。过程在SQLPLUS 环境中进行调试时,通过show errors 显示与最近创建的过程对象相关的所有错误。此命令将检查数据字典视图USER_ERRORS,以寻对过程对象的最近编译相关的错误。命令show errors 将显示每个错误的行和列号及具体的错误信息。为了查看与过去创建的过程对象相关的错误,可以直接查询USER_ERRORS。对USER_ERRORS 的查询不是公用的。因为这样的一个查询,可能意味着在两个或多个过程中存在错误。
除了命令show errors 提供的调试信息外,还可以使用DBMS_OUTPUT 包。当数据库中安装有过程选项时,就可以建立DBMS_OUTPUT。为了使用DBMS_OUTPUT,必须首先发布命令
set serveroutput on 在执行欲调试的过程对象之前。DBMS_OUTPUT 允许在包中使用3 个调试函数:PUT 把多个输出放在同一行中;PUT_LINE 把每个输出分别放在单独行中;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论