存储过程是Oracle开发者在数据转换或查询报表时经常使用的方式之一。它就是想编程语言一样一旦运行成功,就可以被用户随时调用,这种方式极大的节省了用户的时间,也提高了程序的执行效率。存储过程在数据库开发中使用比较频繁,它有着普通SQL语句不可替代的作用。所谓存储过程,就是一段存储在数据库中执行某种功能的程序。其中包含一条或多条SQL语句,但是它的定义方式和PL/SQL中的块、包等有所区别。存储过程可以通俗地理解为是存储在数据库服务器中的封装了一段或多段SQL语句的PL/SQL代码块。在数据库中有一些是系统默认的存储过程,那么可以直接通过存储过程的名称进行调用。另外,存储过程还可以在编程语言中调用,如Java、C#等。
存储过程的作用
存储过程编写相对复杂,但还是有很多人在用存储过程,因为它有着一系列的优点:
- 简化复杂的操作。存储过程可以把需要执行的多条SQL语句封装到一个独立单元中,用户只需调用这个单元就能达到目的。这样就实现了一人编写多人调用。
- 增加数据独立性。与视图的效果相似,利用存储过程可以把数据库基础数据和程序(或用户)隔离开来,当基础数据的结构发生变化时,可以修改存储过程,这样对程序来说基础数据的变化是不可见的,也就不需要修改程序代码了。
- 提高安全性。使用存储过程有效降低了错误出现的几率。如果不使用存储过程要实现某项操作可能需要执行多条单独的SQL语句,而过多的执行步骤很可能造成更高的出现错误几率。
- 提高性能。完成一项复杂的功能可能需要多条SQL语句,同时SQL每次执行都需要编译,而存储过程可以包含多条SQL语句,而且创建后只需要编译一次,以后就可以直接调用。
存储过程的语法
存储过程的创建和视图相比稍微复杂,但也有固定模式。
create or replace procedure procedure_name [parameter-name in datatype := default expression,......] { IS | AS} BODY;
其中,各项参数的含义:
or replace :表示如果指定的过程存在,则覆盖同名的存储过程。
procedure_name :创建存储过程的名称
parameter_name:表示存储过程中的参数名称
IN datatype := default expression :表示输入参数的数据类型和默认值
IS|AS :连接词
BODY :表示函数体,是存储过程的具体操作部分,通常在begin...end中。