*存储过程*
*概念:*
之前我们编写的plsql程序可以进行表的操作,判断、循环逻辑处理的工作,但无法重复调用。
可以理解之前的代码全部编写在了main方法中,是匿名程序,java可以通过封装对象和方法来解决复用问题。
Plsql是将一个个plsql的业务员处理过程存储起来进行复用,这些被存储起来的plsql程序称之为存储过程。
*存储过程作用:*
\1. 在开发程序中,为了一个特定的业务功能,会向数据库进行多次连接关闭(连接关闭是很消费数据库资源的),需要对数据库进行多次i/o读写,性能比较低,如果把这些业务放到plsql中,在应用程序中只需要调用plsql就可以做到连接关闭一次数据库就可以实现我们的业务,可以大大提高效率。
\2. Oracle官方给的建议:能够让数据库操作的不要放在程序中。在数据库中实现基本上不会出现错误,在程序中操作可能会存在错误,(如果在数据库中操作数据,可以有一定的日志恢复等功能)
*语法*
Create or replace procedure 过程名称[(参数列表)] is Begin End [过程名称]
根据参数的类型,我们将其分为3类讲解:
不带参数的
带有输入参数的
带输入输出参数(返回值)的
*不带参数的存储过程:*
*小案例(热身)* *打印输出:hello world*
create or replace procedure p_hello is begin dbms_output.put_line(‘hello world‘); end p_hello;
调用存储过程:
begin p_hello; end;
我们刚才创建的存储过程:
注意:* **
第一个问题:is 和 as是可以互相使用的,用哪个关键字是没有关系的
第二个问题:过程中没有declare关键字,declare用在语句块中
*带有输入参数的存储过程*
【示例】查询并打印某个员工(如7839号员工)的姓名和薪水-存储过程:要求,调用的时候传入员工编号,自动控制台打印。
create or replace procedure p_querynameandsal(i_empno in emp.empno%type) as --声明变量 v_name emp.ename%type; v_sal emp.sal%type; begin --查询emp表中某个员工的姓名和薪水并赋值给变量 select ename,sal into v_name,v_sal from emp where empno=i_empno; dbms_output.put_line(v_name||‘-‘||v_sal); end; --end 后面的存储过程名字必须和前面声明的名字保持一致,要不就不要写
执行:
begin p_querynameandsal(7839); end;
执行结果:KING-5000
*带输入输出参数的存储过程*
小案例;查询7839号员工的薪水,并将薪水结果返回并且输出。
create or replace procedure p_querysal_out(i_empno in emp.empno%type,o_sal out emp.sal%type) as begin --查询emp表中某个员工的薪水并将查询返回 select sal into o_sal from emp where empno=i_empno; end; --end 后面的存储过程名字必须和前面声明的名字保持一致,要不就不要写
执行 该存储过程 :
declare --声明变量接收存储过程中的输出参数 v_sal emp.sal%type; begin p_querysal_out(7839,v_sal); dbms_output.put_line(‘薪水:‘||v_sal); end;
* 执行结果:
薪水:5000
oracle储存过程--存储过程
标签:RoCE 表的操作 img 无法 world 过程 功能 编写 查询
查看更多关于oracle储存过程--存储过程的详细内容...