Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java+hibernate调用返回sys\u refcursor的oracle函数_Java_Hibernate_Jpa_Oracle10g - Fatal编程技术网

如何使用java+hibernate调用返回sys\u refcursor的oracle函数

如何使用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、

调用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:

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