由此可见编写存储过程可以提高查询和存储的效率。
以下以oracle为例,做一些简单的存储过程编写,利用navicat作为编辑器,这与PL/SQL中某些语句输入方式不太相同。
首先列出表的一些信息:用户(模式):MEDIVH,表名:admin
创建的sql语句:
<span style="font-size:14px;">/* Navicat Oracle Data Transfer Oracle Client Version : 10.2.0.5.0 Source Server : medivh Source Server Version : 100200 Source Host : 192.168.1.103:1521 Source Schema : MEDIVH Target Server Type : ORACLE Target Server Version : 100200 File Encoding : 65001 Date: 2014-07-22 09:47:46 */ -- ---------------------------- -- Table structure for admin -- ---------------------------- DROP TABLE "MEDIVH"."admin"; CREATE TABLE "MEDIVH"."admin" ( "username" VARCHAR2(24 BYTE) NULL , "pwd" VARCHAR2(64 BYTE) NULL , "id" NUMBER(24) NULL ) LOGGING NOCOMPRESS NOCACHE ; -- ---------------------------- -- Records of admin -- ---------------------------- INSERT INTO "MEDIVH"."admin" VALUES ('LISI', '834C3D60D84E11303F54A7DABAACB567', '2'); INSERT INTO "MEDIVH"."admin" VALUES ('W', 'O', '11'); INSERT INTO "MEDIVH"."admin" VALUES ('zhangsan', 'wow', '3'); INSERT INTO "MEDIVH"."admin" VALUES ('MEDIVH', '834C3D60D84E11303F54A7DABAACB567', '1'); INSERT INTO "MEDIVH"."admin" VALUES ('2', '2', '2');</span>
1)无返回值的存储过程(多用于插入)
<span style="font-size:14px;">CREATE OR REPLACE PROCEDURE "TEST_PROP" AS BEGIN INSERT INTO "admin" VALUES ('W','O',2); COMMIT; END; </span>
2)返回单个数据值的存储结构
<span style="font-size:14px;">CREATE OR REPLACE PROCEDURE "FIRST_PROC"(TEMP_USERNAME IN VARCHAR2,TEMP_ID OUT NUMBER) IS NUM NUMBER; BEGIN SELECT MEDIVH."admin"."id" ID INTO NUM FROM MEDIVH."admin" WHERE MEDIVH."admin"."username" = TEMP_USERNAME; TEMP_ID := NUM; END;</span>
运行此过程会弹出输入框,输入数据库中已有数据的相关字段即可出现结果。
3)多组返回结果
首先创建自己的一个包,用来定义返回类型集,
在其他中选择包,新建包:
<span style="font-size:14px;">CREATE OR REPLACE PACKAGE MY_PACKAGE AS TYPE MY_CURSOR IS REF CURSOR; END;</span>
--------------------------------------
JAVA中调用,
使用CallableStatement对象。
CallableStatement 对象为所有的DBMS 提供了一种以标准形式调用已储存过程的方法。
示例:
<span style="font-size:14px;"> CallableStatement proc=null; proc=connection.prepareCall("{call first_proc(?,?)}");//connection = DriverManager.getConnection(oracleUrlToConnect,"xxxx", "xxxx"); proc.setString(1, "medivh"); proc.registerOutParameter(2, Types.NUMERIC); </span>