日期:2014-05-17 浏览次数:20987 次
create or replace package TaskByTime is
type mycursor is ref cursor;
procedure ProTaskByTime(ret_cursor out mycursor);
end TaskByTime;
create or replace package body TaskByTime is
procedure ProTaskByTime(ret_cursor out mycursor) is
begin
open ret_cursor for select * from emp;
end ProTaskByTime;
end TaskByTime;
declare
rec emp%rowtype;
cur TaskByTime.mycursor;
begin
TaskByTime.ProTaskByTime(cur);
loop
fetch cur into rec;
exit when cur%notfound;
dbms_output.put_line(rec.ename);
end loop;
end;
------解决方案--------------------
你刚才写的返回游标的就是返回结果集的例子,还有这种,但这种是用在程序中调用的
create or replace procedure p_c
as
begin
execute immediate 'select * from emp';
end;
/
------解决方案--------------------
CREATE OR REPLACE PACKAGE BODY mypack IS
PROCEDURE myproc(
outcursor IN OUT mycursor
)
IS
BEGIN
OPEN outcursor FOR
SELECT * FROM Student WHERE ROWNUM<10;
RETURN;
END myproc;
END;
public void callProcForResult(){
try {
cs = conn.prepareCall("{call mypack.myproc(?)}");
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.execute();
ResultSet rs = (ResultSet)cs.getObject(1);
while(rs!=null && rs.next()){
System.out.println(new StringBuilder("ID:").append(rs.getInt(1)).append("\t Name:").append(rs.getString(2))
.append("\t Phone:").append(rs.getString(6)).append("\t Address:").append(rs.getString(7)).toString());
}
} catch (SQLException e) {
e.printStackTrace();
}
}
------解决方案--------------------
例如从永久表中返回结果集:
USE pubs
GO
CREATE PROCEDURE ap_CreateResultFromPermtable
AS
SELECT au_iname FROM authors
GO
例如从局部变量中创建结果集:
USE pubs
GO
CREATE PROCEDURE ap_CreateResultFromVariable
AS
DECLARE @au_iname char(20)
SELECT @au_iname = au_iname FROM authors
WHERE au_id = ‘172-32-1176’
SELECT @au_id
GO