在 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 () 中检索光标的主要内容,如果未能解决你的问题,请参考以下文章