0
我一直在试图从java弹簧调用存储过程。基本上,这个存储过程只是将来自用户的输入插入到这个表中。从java弹簧mybatis存储过程调用不工作
这是我的存储过程:
create or replace PROCEDURE TEST_ADDFT
(
FID IN RAW
, K IN VARCHAR2
, V IN VARCHAR2
) AS
BEGIN
INSERT INTO
ITCM_FT (FT_ID, KEY_ID, VALUE)
VALUES (FID, (SELECT KEY_ID FROM ITCM_KEY_VALUES
WHERE UPPER(KEY)=UPPER(K)),V);
END TEST_ADDFT;
所以我已经设置了一切(我认为)是必要的。我也将存储过程放在数据库中(我为此使用了sqldeveloper)。
这里的服务实现:
@Transactional(readOnly = false, propagation = Propagation.REQUIRED,
rollbackFor = Exception.class)
public void addTest(final List<TestCost> tcData)
throws Exception {
try {
for (int i = 0; i < tcData.size(); i++) {
tcData.get(i).setFtId(Utils.generateUUID());
finalTestDao.addTest(tcData.get(i).getFtId(),
tcData.get(i).getKey(), tcData.get(i).getValue());
System.out.println("-=-=-=-=-= added?");
}
} catch (Exception e) {
Log.error("Add final test error", e);
}
}
这里是我的DAO:
void addTest(@Param("ftId") String ftId, @Param("key") String key,
@Param("value") String value);
DAO.xml:
<select id="addTest" parameterType="String" statementType="CALLABLE">
{
CALL TEST_ADDFT (
#{ftId, mode=IN, jdbcType=RAW},
#{key, mode=IN, jdbcType=VARCHAR2},
#{value, mode=IN, jdbcType=VARCHAR2}
)
}
</select>
我已经成立了一个POJO的TestCost对象和测试了使用sqldeveloper声明的过程。
我不明白的是为什么程序没有被调用。没有错误显示在控制台中,但来自服务实现(sysout语句)的第10行没有被执行。你们有什么想法吗?或者,也许我错过了一些配置?
感谢您的帮助!