存储过程运行良好。我在SQL Navigator中测试了它,每次都运行正常。
这是我得到的异常堆栈:
private class GetStandardReportExtrasSPV2{
int nAreaLevel;
int nAssignment;
int nUserRole;
int nAcisNum = 0;
String strAreaMenu;
String strLDO = null;
private SimpleJdbcCall procGetReportExtras;
public GetStandardReportExtrasSPV2(DataSource ds, int nUserRole, String strAreaMenu,
int nAssignment, int nAreaLevel, String strLDO, int nAcisNum) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
jdbcTemplate.setResultsMapCaseInsensitive(true);
this.procGetReportExtras =
new SimpleJdbcCall(jdbcTemplate)
.withCatalogName("PKG_RPT_STE_DATA")
.withProcedureName("GetCoreReportExtras")
.returningResultSet("CURREPORTLIST",
ParameterizedBeanPropertyRowMapper.newInstance(Report.class));
}
public List<Report> getReportsList() {
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("PNASSIGNMENT", new Integer(nAssignment));
params.put("PNUSERROLE", new Integer(nUserRole));
params.put("PSAREAMENU", strAreaMenu);
params.put("PNAREALEVEL", new Integer(nAreaLevel));
params.put("PSLDO", strLDO);
params.put("PNACISNUMBER", new Integer(nAcisNum));
if (nAcisNum > 0)
params.put(ACIS_NUMBER, nAcisNum);
SqlParameterSource in = new MapSqlParameterSource().addValues(params);
Map m = procGetReportExtras.execute(in);
return (List) m.get("CURREPORTLIST");
}
}
这是Oracle存储过程:
PROCEDURE GetCoreReportExtras
( pnAssignment IN NUMBER,
pnUserRole in NUMBER,
psAreaMenu in VARCHAR2,
pnAreaLevel in NUMBER,
curReportList OUT outcur,
psLDO in VARCHAR2 default 'none',
pnAcisNumber in NUMBER default 0) IS
BEGIN
--start working through roles...
IF substr(psAreaMenu,1,1) <> '7' and pnAssignment > 74999 --CAM Area of some sort
THEN
-- these users never get an HBDC or QBR...
--NOTHING WILL BE RETURNED
open curReportList for
SELECT FILE_NAME, NULL AS DISPLAY_TEXT
FROM CORE_REPORT_NAME
WHERE STATIC_REPORT_TYPE = 'XXXXXXXX';
ELSE -- Non-CAM, Non-GPO...Check traditional Sales first...
IF substr(psAreaMenu,1,1) = '7' THEN --Sales Assignment of some sort
-- retrieve the HBDC File Name for these sales users...
open curReportList for
SELECT FILE_NAME, 'Anemia Worksheet Link' AS DISPLAY_TEXT
FROM CORE_REPORT_NAME
WHERE STATIC_REPORT_TYPE = 'HBDCANEMIA'
UNION
SELECT FILE_NAME, 'HBDC Bone Metabolism Worksheet Link' AS DISPLAY_TEXT
FROM CORE_REPORT_NAME
WHERE STATIC_REPORT_TYPE = 'HBDC_BONE';
-- sales-perspective users don't see a QBR...
--NOTHING IS RETURNED FOR QBR
ELSE -- Callpoint or Top-SDO Assignment
IF pnUserRole = 11 THEN --TOP SDO
-- These users don't see HBDC...
--NOTHING IS RETURNED FOR HBDC
-- but they do get the QBR...
open curReportList for
SELECT FILE_NAME, 'CIDO Report Selection' AS DISPLAY_TEXT
FROM CORE_REPORT_NAME
WHERE STATIC_REPORT_TYPE = 'QBR'
and SHORT_NAME = psAreaMenu;
--ELSE -- Some form of Callpoint
-- these perspectives don't get QBR or HBDC
--NOTHING WILL BE RETURNED
END IF;
END IF;
END IF;
END GetCoreReportExtras;
有什么线索告诉我为什么我会得到这个例外吗?
我从它所在的包含类中取出了代码,它工作得很好。
org.springframework.jdbc.core.SimpleJdbcCall类是一个多线程,可重用的对象,表示对存储过程或存储函数的调用。 它提供元数据处理,以简化访问基本存储过程/函数所需的代码。 您需要提供的只是过程/函数的名称以及执行调用时包含参数的映射。 提供的参数的名称将与创建存储过程时声明的in和out参数匹配。 Class 声明 (Class Declaration) 以
org.springframework.jdbc.core.SimpleJdbcCall类是一个多线程,可重用的对象,表示对存储过程或存储函数的调用。 它提供元数据处理,以简化访问基本存储过程/函数所需的代码。 您需要提供的只是过程/函数的名称以及执行调用时包含参数的映射。 提供的参数的名称将与创建存储过程时声明的in和out参数匹配。 Class 声明 (Class Declaration) 以
从升级Spring框架之后 无法确定正确的调用签名-“我的存储过程名称”没有过程/函数/签名 例外情况。然后我进行了调试,发现如果存储过程位于同义词后面,则无法找到它。对于旧的Spring版本,这不是问题。那么他们改变了什么?我现在能做什么?我阅读了有关从数据源检索原始Oracle连接并激活同义词标志的内容:https://docs.oracle.com/cd/E11882_01/appdev.1
如何测试使用JdbcTemplate和SimpleJDBCall的repository类,如下所示 这就是我尝试过的 下面是测试代码和存储库代码,我使用的是Spring Boot最新版本junit5和mockito。我已经尝试了下面的解决方案,但可以让它工作 带Spring JdbcTemplate的SimpleJDBCall的Mockito 下面是存储库代码@repository public
我有一个使用SimpleJDBCCall调用DB过程的DAO函数。但是,我无法读取存储过程返回的CLOB数据。当我尝试对返回的CLOB值(result.get(“out_rtn_xml”))执行.toString()时,我只在字符串中得到以下内容:oracle.sql.CLOB@f762282a 下面是代码片段。
我想用SimpleJdbcCall执行带有动态参数的存储过程。在SQL服务器SP中,我总共有6个可选参数,其中我必须能够通过任何参数或不通过任何参数。我的SP在MS Studio中执行得很好。但不是通过SimpleJdbcCall。我尝试了很多方法,其中之一是使用NamedBding。但是它会给“=”附近的输入语法错误,如下所示。 日志: 2019-01-31 18:14:49DEBUG Simp