1、作用
a、在开发中,为了一个特定的业务功能,会向数据库进行多次连接关闭(连接和关闭是很耗资源),需要对数据库进行多次I/O读写,性能比较低。如果把这些业务放入
存储过程中,就可以做到连接关闭一次数据库就可以实现业务,可以大大的提高效率。
b、Oracle官方建议,能够让数据库操作的不要放在程序中,在数据库中实现基本上不会出现错误,在程序中操作可能会存在错误。(如果在数据库中操作,可以有一定
的日志恢复功能。)
2、语法
CREATE OR REPLACE PROCEDURE 存储过程名称[(参数列表)] IS
BEGIN
END 存储过程名称;
根据参数的类型,可以分为3类
a、不带参数
b、带输入参数
c、带输入输出参数(返回值)
3、无参存储
create or replace procedure p_hello as --声明变量 begin dbms_output.put_line('Hello World!'); end p_hello ;
调用 在plsql中可以直接在begin end中直接写存储过程名,或者在命令窗口中执行 exec 存储过程名;。
注意:
a、is和as是可以相互用的
b、过程中没有declare关键字,declare用在语句块中
4、带输入参数存储
create or replace procedure p_queryName(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 p_queryName;
5、带输入输出参数存储
create or replace procedure p_querySalOut(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; dbms_output.put_line('名称:'||v_name||'薪水:'||v_sal); end p_querySalOut;
调用
declare --声明变量接受存储过程中的输出参数 v_sal emp.sal%type; begin p_querySalOut(7839,v_sal); dbms_output.put_line(v_sal); end;