表结构(保存邮编与地址信息):
create table T_zipCode ( zipcode varchar2(6) not null primary key, address varchar2(100) not null );
要求:建立一个存储过程,该存储过程需要有一个输入参数和一个输出参数,输入参数为查询条件(与address列模糊查询),输出参数为结果集游标。
本人刚学习Oracle,尝试几次均告失败,肯请各位大牛帮助。
CREATE OR REPLACE PACKAGE ZIP_PACKAGE AS
TYPE ZIPCODE_CURSOR_TYPE IS REF T_ZIPCODE;
END ZIP_PACKAGE;
CREATE OR REPLACE PROCEDURE
SP_FMS_COM_GetZipCodeRows(PARAM_ADDRESS IN VARCHAR2, ZIP_CODE_CURSOR OUT ZIP_PACKAGE.ZIPCODE_CURSOR_TYPE) IS
strSQL varchar2(1024);
BEGIN
strSQL := 'SELECT ZIPCODE, ADDRESS FROM T_ZIPCODE WHERE ADDRESS LIKE ''%:PARAM_ADDRESS%''';
OPEN ZIP_CODE_CURSOR FOR strSQL USING PARAM_ADDRESS;
END SP_FMS_COM_GetZipCodeRows;
第一步:建立一个游标
CREATE OR REPLACE PACKAGE TYPES AS
TYPE BJ _CURSOR IS REF CURSOR;
END;
第二步:创建存储过程
CREATE OR REPLACE PROCEDURE BJ_TEST_PROC
(
V_TEMP OUT TYPES.BJ_CURSOR,
PID IN VARCHAR
)
AS
BEGIN
OPEN V_TEMP FOR SELECT NAME FROM TEST WHERE ID = PID;
END BJ_TEST_PROC;
//存储过程要用到的表
create table TEST
(
ID VARCHAR2(10),
NAME VARCHAR2(10)
)
调用就不用说了
这东西网上介绍挺多吧。
JDBC那边编码很固定,没啥好说的。Oracle这边,好像光用存储过程还不行,还得创建一个package来声明一个自定义游标。
你的Package定义好像有问题。我这边创建你的Package的时候报错。
[code="sql"]TYPE ZIPCODE_CURSOR_TYPE IS REF T_ZIPCODE;[/code]
上面是不是应该写成:
[code="sql"]TYPE ZIPCODE_CURSOR_TYPE IS REF CURSOR;[/code]
我很长时间没写过Oracle Package了,所以也不太确定。你试一下。
先确定你的存储过程在sqlplus里面运行没有问题,再用JDBC来连接。