例如:function get_clip_types return ref_cursor is rc ref_cursor; begin open rc for select a.fstlvl_type_id , b.sndlvl_type_id , a.fstlvl_desc , b.sndlvl_desc from epgd_fstlvl_types a,epgd_sndlvl_types b where a.fstlvl_type_id = b.fstlvl_type_id order by a.fstlvl_order , b.sndlvl_order; return rc; exception when others then if rc%isopen then close rc; end if; return rc; end;
to TechnoFantasy(www.applevb.com): 你的方法能够返回记录集,可是我现在的情况是要用java来写存储过程,不知道你用过这种方法没有,把java程序load进oracle以后,需要一个oracle的存储过程来调用java程序的方法,如果这个oracle的存储过程返回ref_cursor的话,我的java存储过程是用什么类型的返回值就不太清楚了另外:我想问问使用java程序写的存储过程与一般使用PL/SQL和用java/jdbc来访问数据库的性能比较,不知哪位赐教
谁能给个简单的例子看看,我会非常感激的
拜托各位大虾
is
rc ref_cursor;
begin
open rc for select a.fstlvl_type_id , b.sndlvl_type_id ,
a.fstlvl_desc , b.sndlvl_desc
from epgd_fstlvl_types a,epgd_sndlvl_types b
where a.fstlvl_type_id = b.fstlvl_type_id
order by a.fstlvl_order , b.sndlvl_order;
return rc;
exception
when others then
if rc%isopen then
close rc;
end if;
return rc;
end;
你的方法能够返回记录集,可是我现在的情况是要用java来写存储过程,不知道你用过这种方法没有,把java程序load进oracle以后,需要一个oracle的存储过程来调用java程序的方法,如果这个oracle的存储过程返回ref_cursor的话,我的java存储过程是用什么类型的返回值就不太清楚了另外:我想问问使用java程序写的存储过程与一般使用PL/SQL和用java/jdbc来访问数据库的性能比较,不知哪位赐教
理论上应该如此,只是现在能找到的资料都没有涉及到这种问题,例子只是使用像String这样简单的数据类型来做,苦于没有这样的例子。没有办法
了,只好慢慢学习吧,赫赫~~~~~~~~~~~~~~~
sqlj是什么?是sql 支持的一种java语句吗?不懂?
gz
据我所知,oracle8i好像不能从Java存储过程中返回一个cursor(ResultSet).
stmt2.execute("CREATE OR REPLACE FUNCTION func_squareInt " +
"(field1 IN INTEGER) RETURN INTEGER IS " +
"BEGIN return field1 * field1; " +
"END func_squareInt;");
stmt2.close();// Native Oracle SQL is commented out here
// sql = "BEGIN ? := func_squareInt(?); END;";// This is the correct syntax specified by JDBC
sql = "{ ? = call func_squareInt(?)}";
CallableStatement cstmt2 = conn.prepareCall(sql);cstmt2.registerOutParameter(1, Types.INTEGER);
for (int i = 0; i < 5; i++) {
cstmt2.setInt(2, i);
cstmt2.execute();
System.out.println(i + " " + cstmt2.getInt(1) +
" " + cstmt2.getInt(2));
}
cstmt2.close();