oracle存储过程的作用有:1、简化复杂的操作,降低总体开发成本;2、增加数据独立性;3、可以有效降低错误出现的几率,提高安全性;4、提高性能。
本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。
Oracle存储过程在实际数据库开发过程当中会经常使用到,作为一个数据库开发者必备的技能,它有着SQL语句不可替代的作用。所谓存储过程,就是一段存储在数据库中执行某块业务功能的程序模块。它是由一段或者多段的PL/SQL代码块或者SQL语句组成的一系列代码块。
存储过程的作用(优点):
简化复杂的操作,降低总体开发成本。
存储过程把实际执行的业务逻辑PL/SQL块和多条SQL语句封装到存储过程当中,其它开发者只需要调用写好的过程,获取想要的结果,不需要重新理解业务。把业务抽取出来由专门的人来编写。
增加数据独立性。
它的作用和视图的作用类似,假如表的基础数据发生变化,我们只需要修改过程当中的代码,而不需要修改调用程序。使得用户程序不需要直接面对基础数据进行编写代码。使得代码内聚程度更高,耦合度更低。
提高安全性。
使用存储过程有效降低了错误出现的几率。如果不使用存储过程要实现某项操作可能需要执行多条单独的SQL语句,而过多的执行步骤很可能造成更高的出现错误几率。
提高性能。
实际开发过程中,一个业务模块功能的开发可能需要用到多个SQL语句,多个PL/SQL程序块才能解决问题。把它编写进过程,Oracle只需要一次编译,以后随时可以调用。如果不使用过程,直接把许多SQL语句写进程序当中,需要多次编译,而且需要多次连接数据库,大大的降低了性能。
创建Oracle存储过程语法:
create [or replace] procedure 过程名
( p1 in|out datatype,
p2 in|out datatype,
...
pn in|out datatype
) is
....--声明部分
begin
....--过程体
end;
语法解析:
1、procedure 关键字是创建存储过程的命令。
2、create [or replace] :如果存储过程已经存在则覆盖替代原有的过程。
3、in|out :存储过程具有入参和出参两种参数选择,in表示的是入参,out表示的是出参,在使用过程的时候,入参必须得有对应的变量传入,出参得有对应的变量接收。
4、datatype表示出入参变量对应的数据类型。
5、is后面跟着的是过程当中使用到的声明变量。
6、begin...end 中间编写的就是存储过程的具体操作。
例子1、创建一个存储过程计算学生某一个课程中成绩在班中的排名,使用存储过程进行计算,返回对应的排名,代码如下:
create or replace procedure sp_score_pm(
p_in_stuid in varchar2,--学号
p_in_courseid in varchar2, --课程ID
p_out_pm out number--排名
)
is
ls_score number:=0;
ls_pm number:=0;
begin
--获取该学生的成绩
select t.score into ls_score from score t
where t.stuid = p_in_stuid
and t.courseid = p_in_courseid;
--获取成绩比该学生高的人数
select count(1) into ls_pm from score t
where t.courseid = p_in_courseid
and t.score>ls_score;
--得到该学生的成绩排名
p_out_pm:=ls_pm+1;
exception
when no_data_found then
dbms_output.put_line('该学生的课程:'||p_in_courseid|| '的成绩在成绩表中找不到');
end;
通过上面的代码,我们可以直接在SQL窗口执行编译,编译成功后,我们就可以调用存储过程来获取学生对应的课程成绩排名了,存储过程需要出入参赋值,因此我们可以通过PL/SQL语句块进行测试,代码如下:
declare
ls_pm number;--排名
begin
--SC201801001
sp_score_pm('SC201801001','R20180101',ls_pm);
dbms_output.put_line('学号:SC201801001,课程号:R20180101 的成绩排名是:'||ls_pm);
sp_score_pm('SC201801001','R20180102',ls_pm);
dbms_output.put_line('学号:SC201801001,课程号:R20180102 的成绩排名是:'||ls_pm);
--SC201801002
sp_score_pm('SC201801002','R20180101',ls_pm);
dbms_output.put_line('学号:SC201801002,课程号:R20180101 的成绩排名是:'||ls_pm);
sp_score_pm('SC201801002','R20180102',ls_pm);
dbms_output.put_line('学号:SC201801002,课程号:R20180102 的成绩排名是:'||ls_pm);
end;
结果如下:
推荐教程:《Oracle教程》
以上就是oracle存储过程的作用有哪些的详细内容,转载自php中文网
发表评论 取消回复