在 oracle JPA () 中检索光标

Posted

技术标签:

【中文标题】在 oracle JPA () 中检索光标【英文标题】:Retrieve cursor in oracle JPA () 【发布时间】:2014-12-08 19:17:09 【问题描述】:

我无法使用 JPA @StoredProcedureQuery 或 @StoredNamedProcedureQuery 从 oracle 中的过程中检索数据

PL/SQL

create or replace procedure p_get_plazas_activas(
p_c_resultado out pkg_zas_response.t_response
)
 IS

BEGIN

   IF p_c_resultado%ISOPEN THEN
        CLOSE p_c_resultado;
        END IF;
    OPEN p_c_resultado FOR

      select distinct pl.PLZ_S_ID_PLAZA,  pl.PLZ_S_PLAZA
        from  escaneo.pre_plazas pl, escaneo.pre_cos c
        where pl.PLZ_S_ID_PLAZA = c.COS_S_ID_PLAZA
        and   pl.PLZ_S_PROVEEDOR is null 
        and   pl.PLZ_N_STATUS = 1
        and   c.COS_N_ACTIVO = 1;  

end p_get_plazas_activas; 

然后在java中

StoredProcedureQuery spq = em.createStoredProcedureQuery("p_get_plazas_activas");
List results = spq.getResultList();

我得到下一个错误

Internal Exception: java.sql.SQLException: ORA-06550: linea 1, columna 7:
PLS-00306: wrong number or types of arguments in call to 'P_GET_PLAZAS_ACTIVAS'
ORA-06550: linea 1, columna 7:
PL/SQL: Statement ignored
Error Code: 6550
Call: BEGIN escaneo.p_get_plazas_activas(?); END;
    bind => [1 parameter bound]
Query: ResultSetMappingQuery()

我也试过

spq.registeterStoredProcedureparameter(1, void.class, ParameterMode.INOUT)

一些建议??

【问题讨论】:

【参考方案1】:

你没有注册输出参数:

 spq.registerStoredProcedureParameter(1, Integer.class, ParameterMode.OUT)
 //                                      ^^^^^^^^^^^^^
 //                             or whatever type is relevant here

您稍后使用以下方法检索到输出:

 int count = (Integer)spq.getOutputParameterValue(1);
 //^          ^^^^^^^
 // or whatever type is relevant to you

【讨论】:

以上是关于在 oracle JPA () 中检索光标的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库----光标

打印 Oracle Pl/sql 光标

光标检索在 plpgsql 函数中创建的表中已删除的行

从光标检索联系人时出错

ORACLE 存储过程光标运行缓慢

如何在oracle plsql中提取和打印函数外的光标值