为什么使用存储过程?
存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
存储过程的定义:
存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。
优 点:
1. 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。
简单示例:
1 sql 语句创建一个用户信息表 stu
1 CREATE TABLE stu 2 3 ( 4 5 id VARCHAR2(4), 6 7 name VARCHAR2(15), 8 9 gender VARCHAR2(15), 10 11 birthday VARCHAR2(30) 12 13 );
2.sql 语句创建一个存储过程add_stu
1 create or replace procedure add_stu 2 ( 3 sid stu.stuid%type, 4 sname stu.stuname%type, 5 sgender stu.gender%type, 6 sbirth stu.birthday%type 7 ) 8 as 9 begin 10 --插入数据 11 insert into stu(stuid,stuname,gender,birthday) 12 values(sid,sname,sgender,sbirth); 13 end;
表有了,存储过程有了,那么什么时候调用呢,又是如何调用的呢?
3.sql*plus 调用存储过程
1 declare 2 t_id stu.stuid%type := '005'; 3 t_name stu.stuname%type := '测试'; 4 t_gender stu.gender%type := '女'; 5 t_birth stu.birthday%type := ''; 6 begin 7 add_stu(t_id,t_name,t_gender,t_birth); 8 dbms_output.put_line('用户'||t_name||'成功添加'); 9 end; 10 /
4.查看结果
过程执行成功:
表中已填入数据
用 exec add_stu('006','测试1','男','03-1月-10');
或者 execute add_stu('006','测试1','男','03-1月-10');
结果和上面的一样。
存储过程本质上就是对业务关系复杂的 sql 语句的封装。sql 语句以程序块的形式被封装在了数据库中了。写好了以后,无论是 java,还是 .net ,抑或其他开发语言,可以像使用 sql 语句那样随意调用。这就是数据库开发。