昨天由于时间仓促,现在接着写oracle学习笔记。算了一下我现在已经学习了3种数据库。和oracle最接近的就是sqlserver了。下面就接着昨天的来写一下存储过程。
相对于直接使用SQL语句,在应用程序中直接调用存储过程有以下好处:
(1)减少网络通信量。调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条的调用SQL语句要高得多。
(2)执行速度更快。有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。
(3)更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。
(4) 布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。下面就来写一个存储过程
CREATE OR REPLACE PROCEDURE getBookPrice(booknum in VARCHAR2,bookprice out NUMBER) --参数的数据类型不能指定长度 AS BEGIN SELECT PRICE INTO bookprice FROM book WHERE bookno=booknum; DBMS_OUTPUT.PUT_LINE(bookprice); END;
set serveroutput on;
exec getBookPrice('b008');
使用jdbc也是可以执行存储过程的,代码如下所示
package bao1; import java.sql.*; public class Test { public static void main(String args[]) throws Exception{ OracleConnection conn=new OracleConnection(); CallableStatement cst=conn.getConnection().prepareCall("{call getBookPrice(?,?) }"); cst.setString(1, "b008"); cst.registerOutParameter(2, Types.VARCHAR); cst.execute(); System.out.println(cst.getString(2)); conn.release(); } }
下面来写一下删除存储过程的语句
drop procedure getBookPrice;