CREATEORREPLACE PACKAGE TESTPACKAGE AS
TYPE Test_CURSOR IS REF CURSOR;end TESTPACKAGE;
2. 建立存储过程,存储过程为:
createorreplaceprocedure TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR,lowerNum innumeric,higherNum innumeric) isbeginOPEN p_CURSOR FORselect * from ( select row_.*, rownum rownum_ from (select id,title,status from HYQTEST) row_ where rownum <= higherNum)
where rownum_ >lowerNum;end TESTC;
使用plsql测试:
declare
lowerNum integer;
higherNum integer;
id varchar2(10);
title varchar2(500);
status numeric;
c testpackage.Test_CURSOR;
rownum_ integer;
begin
lowerNum:=1;
higherNum:=10;
TESTC(c,lowerNum,higherNum);
LOOP
FETCH c INTO id,title,status,rownum_;
EXIT WHEN c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('=行号='||rownum_||'=='||id||'==='||title||'===='||status||'==');
ENDLOOP;
CLOSE c;
end;
-------------------------------------------------------------------------------------
CREATEOR REPLACE TYPE USERSEQID_ARRAY IS VARRAY(50000) OF NUMBER(9)
CREATEOR REPLACE TYPE USERNAME_ARRAY AS VARRAY(32) of varchar(32)
CREATEOR REPLACE TYPE USERPWD_ARRAY AS VARRAY(50000) of varchar(60)
四、java调用输出参数为自定义数组的存储过程:
1. 输出参数为自定义数组的存储过程make_logincard_pro:
proceduremake_logincard_pro(
p_cardsuitcode in varchar,
p_userseqidArr out USERSEQID_ARRAY ,
p_usernameArr out USERNAME_ARRAY
)ISv_addedtimedate:= sysdate;
BEGINFOR ii IN1 .. 10LOOPIF p_userseqidArr IS NULL THEN
p_userseqidArr := USERSEQID_ARRAY(ii);
ELSE
p_userseqidArr.EXTEND; --超过数组定义大小(50000)将抛出异常
p_userseqidArr(ii) := ii;
ENDIF;
IF p_usernameArr IS NULL THEN
p_usernameArr := USERSEQID_ARRAY(ii || 'TT');
ELSE
p_usernameArr.EXTEND; --超过数组定义大小(32)将抛出异常
p_usernameArr(ii) := ii || 'TT';
ENDIF;
ENDLOOPEND make_logincard_pro ;
一、没有返回值的储存过程:1.创建一个表:CREATE TABLE B_ID(I_ID VARCHAR2(30),I_NAME VARCHAR2(30));2.插入数据:INSERT INTO B_ID VALUES('1001','TESTING');3. 创建储存过程:CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VAR