在学习存储过程之前,建议先去了解,掌握PLSQL编程:https://blog.csdn.net/hexu_blog/article/details/103991799
一. 什么是存储过程?
在第一篇我们编写的PLSQL程序可以进行表的操作,判断,循环逻辑处理的工作,但无法重复调用.
可以理解之前的代码全部编写在了main方法中,是匿名程序,JAVA可以通过封装对象和方法来解决复用问题
PLSQL是将一个个PLSQL的业务处理过程存储起来进行重复调用,这些被存储起来的PLSQL程序称为存储过程
二 . 作用?
1 .在开发程序中,为了一个特定的业务功能,会向数据库进行多次连接关闭(连接和关闭是很消耗资源),需要对数据库进行多次I/O读写,性能比较低,如果把这些业务放到PLSQL中,在应用程序中只需要调用PLSQL就可以做到连接关闭一次数据库就可以实现我们的业务,可以大大提高效率。
2 .ORACLE官方给的建议,能够让数据库操作的不要放在程序中。在数据库中实现基本上不会出现错误,在程序中操作可能存在错误。
三. 语法
create or replace procedure 过程名称 [参数列表] IS
begin
end [过程名称];
1. 不带参数的, end后可以加上存储过程名称,也可以不加
--创建无参存储过程
create or replace procedure proc_print is
begin
dbms_output.put_line('hello,存储过程');
end proc_print ;
--调用存储过程,通过PLSQL方式调用
begin
proc_print;
end;
--通过exec调用,如果没有打印出结果,先执行打开输出开关: set serveroutput on
exec proc_print;
2 .带输入参数
--查询某个员工并打印名字,薪水
create or replace procedure proc_printNo(i_empno in emp.deptno%TYPE) as
--声明变量接收查询的数据
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
begin
select ename, sal into v_name, v_sal from emp where empno= i_empno;
--打印
dbms_output.put_line('名字:' || v_name || ',薪水:' || v_sal);
end;
--调用方式1
exec proc_printno(7369);
--调用方式2
declare
deptno number :=7369;
begin
proc_printNo(deptno);
end;
既有输入参数,也有输出参数
--查询员工基本信息,并输出薪水
create or replace procedure proc_emp_out_sal(i_empno in emp.empno%TYPE,o_sal out emp.sal%type) is
begin
select sal into o_sal from emp where empno=i_empno;
end;
--调用, 如果没有打印出结果,先执行打开输出开关: set serveroutput on
declare
sal emp.sal%TYPE;
empno number :=7369;
begin
proc_emp_out_sal(empno,sal);
--打印输出的内容
dbms_output.put_line(sal);
end;