oracle存储过程

1、语法结构

create [or replaceprocedure 过程名  --or replace 如果存储过程已经存在则覆盖替代原有的过程

( p1 
in
|
out 
datatype,           ----入参和出参两种参数
  
p2 
in
|
out 
datatype,          ---datatype表示出入参变量对应的数据类型
  
...
  
pn 
in
|
out 
datatype   
     

is 
     
    
....
--过程当中使用到的声明变量  
    
begin
     
    
....
--存储过程的具体操作  
    
end;  
2、例子:调用存储过程来获取学生对应的课程成绩排名
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
;   3、优点

1、降低总体开发成本。存储过程把执行的业务逻辑PL/SQL块和多条SQL语句封装到存储过程,只需要调用写好的过程,获取想要的结果 。

2、增加数据的独立性。它的作用和视图的作用类似,假如表的基础数据发生变化,我们只需要修改过程当中的代码,而不需要修改调用程序。 

3、提高性能。 一个功能的开发可能需要多个SQL语句,多个PL/SQL程序块 ,使用存储过程,Oracle只需一次编译,随时可以调用。 如果直接把许多SQL语句写进程序当中,需要多次编译,多次连接数据库。