我想使用Select操作从Oracle 12c数据库PL / SQL中获取数据。 我有3个返回数据的选项。 1.使用Sys_RefCursor
口气部分
Procedure Get_Data(
o_Cursor In Out SYS_REFCURSOR,i_Row_Id In Number
)
Is
Begin
Open o_Cursor For
Select * From My_Table Where Row_Id = i_Row_Id;
End;
Java部分
CallableStatement cs = conn.prepareCall("{call My_Package_Name.Get_Data(?,?)}");
cs.registerOutParameter(1,OracleTypes.CURSOR);
cs.setInt(2,data.get("row_id").getasInt());
cs.execute();
rs = (ResultSet)cs.getObject(1);
但是,在这种情况下,我不知道Oracle Procedure本身是否隐式关闭Cursor。
当我使用
Close o_cursor
程序结束时并没有达到我想要的结果。
-
使用自定义Apex Json,因为我使用了Oracle 12c,它支持Json格式,因此 我可以使用自定义Json返回我的resultSet行
Select * Into rt From My_Table t Where t.Row_Id = 1; json.Push('row_id',rt.Row_Id); json.Push('row_name',rt.Row_Name); Return json.to_string();
并在Java中将其读取为字符串
-
我可以使用
TYPE CUSTOMER_REC IS RECORD ( CUST_NO NUMber,CUST_CODE VARCHAR2 (50),CUST_NAME VARCHAR2 (500) );
以CUSTOMER_REC格式返回我的选择结果集,并以 Java将其读取为
cs.registerOutParameter(1,OracleTypes.STRUCT,"typeName");
有人可以详细说明每个部分,在这种情况下哪个更好用(性能角度),哪个是旧方法? Sys_RefCursor是否被Oracle Environment隐式关闭?