如何使用java+hibernate调用返回sys\u refcursor的oracle函数
调用oracle函数时出现问题, 函数看起来像贝娄 创建或替换函数获取\u端口\u输出\u选择 pi_id_pout_order IN PORT_OUT_order.id_pout_order%类型 返回系统参考光标 是 lc\u游标系统\u参考游标; 开始 打开lc_光标,以便 选择ID\u POUT\u ORDER、ID\u LEC\u USER、ID\u POUT\u LEC、ID\u SERVICE\u REC、POUT\u TN、ID\u IPTN、POUT\u LEC\u OCN、POUT\u LEC\u SPID、POUT\u ALI\u CODE、, LEC_联系人姓名、LEC_联系人姓名、LEC_联系人姓名、LEC_联系人姓名、LEC_联系人电子邮件、, 客户名称,客户账户,客户名称,客户名称, SVC_ADDR_STR、SVC_ADDR_NUM、SVC_ADDR_CITY、SVC_ADDR_STATE、SVC_ADDR_ZIP、, 支付日期、支付日、支付日、支付日、电子邮件发送日期、V邮件发送日期、身份证支付状态、客户类型、授权名称、身份证主订单 从港口开出 其中ID\u POUT\u ORDER=pi\u ID\u POUT\u ORDER ID_POUT_状态<95; 返回lc_游标;如何使用java+hibernate调用返回sys\u refcursor的oracle函数,java,hibernate,jpa,oracle10g,Java,Hibernate,Jpa,Oracle10g,调用oracle函数时出现问题, 函数看起来像贝娄 创建或替换函数获取\u端口\u输出\u选择 pi_id_pout_order IN PORT_OUT_order.id_pout_order%类型 返回系统参考光标 是 lc\u游标系统\u参考游标; 开始 打开lc_光标,以便 选择ID\u POUT\u ORDER、ID\u LEC\u USER、ID\u POUT\u LEC、ID\u SERVICE\u REC、POUT\u TN、ID\u IPTN、POUT\u LEC\u OCN、
结束 这是如何在Java类中获得结果的方法,希望您可以使用以下示例将其移植到Hibernate: Oracle安装程序: 爪哇: 注意:这假设您正在使用Oracle的驱动程序连接到数据库 输出:
ORA-22905:无法访问非嵌套表项22905中的行。00000-无法访问非嵌套表项中的行*原因:尝试访问在分析时类型未知或不是嵌套表类型的项的行*操作:使用强制转换将该项强制转换为嵌套表类型错误,位于第5行第14列。执行此操作时,请选择get_port_out_select2004 from DUAL,以获取结果正如上面提到的,这意味着错误在Java而不是oracle的某个地方。我只想更新这个问题,我到现在为止都在尝试什么,请添加您得到的所有错误
CREATE FUNCTION get_ref_cursor RETURN SYS_REFCURSOR
IS
out_cursor SYS_REFCURSOR;
BEGIN
OPEN out_cursor FOR
SELECT 123 AS col1 FROM DUAL UNION ALL
SELECT 456 FROM DUAL UNION ALL
SELECT 789 FROM DUAL;
RETURN out_cursor;
END;
/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
public class GetRefCursorFromFunction
{
public static void main( final String[] args ){
try{
Class.forName( "oracle.jdbc.OracleDriver" );
Connection con = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl",
"USERNAME",
"PASSWORD"
);
OracleCallableStatement st =
(OracleCallableStatement) con.prepareCall( "BEGIN :1 := get_Ref_Cursor(); END;" );
st.registerOutParameter( 1, OracleTypes.CURSOR );
System.out.println( st.execute() );
ResultSet rs = st.getCursor( 1 );
while ( rs.next() )
{
System.out.println( rs.getInt( 1 ) );
}
st.close();
con.close();
} catch (ClassNotFoundException | SQLException ex) {
System.out.println( ex.getMessage() );
ex.printStackTrace();
}
}
}
123
456
789