一、存储过程的定义:
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
简而言之,存储过程是是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中。一次编译,可多次调用。
二、存储过程的优点:
1、复用性高
存储过程创建编译好后,可调用任意次。
2、执行效率高
完成一项较为复杂的功能,需要多条sql,存储过程可以包含多条sql,且存储过程编译一次后,就会存到数据库,每次调用时都直接执行。而若单独执行大量sql,每次都需要先编译。
3、降低网络流量
存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的sql语句。一个需要数百行的SQL代码的操作由一条执行语句完成。
4、安全性高
完成某个特定功能的存储过程一般只有特定的用户可以使用,具有使用身份限制,更安全。
三、存储过程基本语法:
1、基本语法
CREATE [OR REPLACE] PROCEDURE procedure_nameIS [AS]声明部分BEGIN执行部分EXCEPTION异常处理部分END;
- CREATE [OR REPLACE] PROCEDURE procedure_name :
创建存储过程,若存在则覆盖它。 - IS [AS]
IS关键词表明后面将跟随一个PL/SQL体。 - BEGIN关键词表明PL/SQL体的开始。
- EXCEPTION
处理程序异常情况,非必须。 - END关键词
表明PL/SQL体的结束
2、无参存储过程
查询该公司所有员工的员工号及员工姓名
create or replace procedure pro_emp01iscursor cur_emp is select e.empno,e.empname from emp_zl e;beginfor rec_emp in cur_emp loopdbms_output.put_line(\'员工号:\'||rec_emp.empno||\'员工名称:\'||rec_emp.empname);end loop;EXCEPTIONwhen no_data_found thendbms_output.put_line(\'该公司没有一个员工\');end;
调用该存储过程:
beginpro_emp01;end;
输出结果:
3、带输入、输出参数的存储过程
根据输入的员工号查询员工姓名
create or replace procedure pro_emp02(in_empno in varchar2,out_empname out varchar2)isbeginselect e.empname into out_empname from emp_zl e where e.empno=in_empno;EXCEPTIONwhen no_data_found thendbms_output.put_line(\'该公司没有这一个员工\');end;
输入员工号
执行后返回员工姓名
4、注意事项:
- 存储过程参数不带取值范围,in表示传入,out表示输出,类型可以使用任意Oracle中的合法类型
- 变量带取值范围,后面接分号。