【发布时间】:2018-06-28 12:40:26
【问题描述】:
我有这个对 PL/SQL 函数的调用
FUNCTION F_IsDemandeDeLitFromHosp(i_NoMvtHosp IN MVTHOSP.NOMVTHOSP%TYPE
)RETURN BOOLEAN
IS
v_Found NUMBER := 0;
BEGIN
BEGIN
SELECT COUNT(1) INTO v_Found
FROM ICSF.T_DEMANDE_LIT D, MVTUS U, MVTHOSP H
WHERE H.NOMVTHOSP = i_NoMvtHosp
AND H.NOMVTHOSP = U.NOMVTHOSP
AND U.NOMVTUS = D.NOMVTUS
AND U.RANG <> '0000000000'
AND H.RANG = '0000100000'
AND NVL (D.ETAT, ' ') <> 'X'
AND NVL (U.ETAT, ' ') <> 'X'
AND NVL (H.ETAT, ' ') <> 'X'
AND ROWNUM = 1;
EXCEPTION
WHEN OTHERS THEN
RETURN FALSE;
END;
IF v_Found > 0 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END F_IsDemandeDeLitFromHosp;
我尝试编写一个服务来获取布尔值作为回报。 i_NoMvtHosp 是 CHAR(10 BYTE),这是我的函数的调用:
@Override
public DemandeDeLitFromHospit isDemandeDelitFromHosp(String noMvtHosp) {
final ProcedureRequest request = new ProcedureRequest(PK.GET_IS_DEMANDE_DE_LIT_FROM_HOSP.getPackageName(), PK.GET_IS_DEMANDE_DE_LIT_FROM_HOSP.getMethodeName());
request.addInParam("i_NoMvtHosp", noMvtHosp);
DemandeDeLitFromHospit demande = new DemandeDeLitFromHospit();
demande.setIsDemandeDeLitFromHosp((Boolean)callFunction(request, new CallableStatementCallback<Boolean>() {
public Boolean doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
cs.execute();
return Boolean.valueOf(cs.getResultSet().toString());
}
}));
return demande;
}
我遇到了这个错误:
org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; Type de colonne non valide: 1111; nested exception is java.sql.SQLException: Type de colonne non valide: 1111
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1032)
at fr.mckesson.framework.persistence.plsql.AbstractProcedureDao.callFunction(AbstractProcedureDao.java:317)
at fr.mckesson.business.venue.clinique.evenement.dao.implementation.DemandeLitDAO.isDemandeDelitFromHosp(DemandeLitDAO.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
我哪里错了?
【问题讨论】:
-
类型 1111 是
java.sql.Types.OTHER,某处的类型推断出了点问题。此外,我强烈建议您设置您的语言环境配置,以便收到英文错误消息。它使搜索类似问题变得更加容易(对于阅读您的问题的人来说可能更清楚)。 -
您能否编辑您的问题以包含您的
AbstractProcedureDao.callFunction方法的正文?我看不到您在 Java 代码中的哪个位置指定了函数返回的对象类型。 (顺便说一句,我不相信cs.getResultSet()在您的CallableStatementCallback中会起作用,因为您的函数不会返回结果集,但这还没有引起问题,因为您的代码没有到达它。 )
标签: spring oracle stored-procedures jdbc plsql