【发布时间】:2018-10-26 16:53:41
【问题描述】:
我在从 Java 调用 PLSQL 时遇到了很大的麻烦。 这是我的代码:
static final String PLSQL = "{call DBK_PDG_METADATI_CEDOLINO.dbp_main(?,?,?,?,?,?,?,?,?)}";
Connection conn = DataSourceUtils.getConnection(jdbcTemplate.getDataSource());
CallableStatement cs = conn.prepareCall(PLSQL);
for (Cedolino item : items) {
LOG.info("################# ELABORAZIONE CEDOLINO " + item.getTestata().getAnagrafica().getCodFiscaleAmministrato() + " #################");
cedolini.getCedolino().add(item);
setParametersForPlSql(cs, item);
try{
cs.execute();
}catch(SQLException e){
LOG.info(e.toString());
}
}
cs.close();
conn.close();
private void setParametersForPlSql(CallableStatement cs, Cedolino ced){
try {
cs.setInt("tipo_lancio", 1);
cs.setString("iscr", ced.getTestata().getTrattamento().getIscrizione().trim());
cs.setString("rts", ced.getTestata().getDpt().trim());
cs.setString("codfisc", ced.getTestata().getAnagrafica().getCodFiscaleAmministrato().trim());
cs.setString("lingua", this.lingua);
cs.setString("file_name", null);
cs.setString("dir_spec", null);
cs.setString("stato_elab", "S");
cs.setString("descr_elab", null);
} catch (SQLException e) {
e.printStackTrace();
}
}
除了cs.execute,这段代码运行良好,这给了我这个错误
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'DBP_MAIN'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我检查了一千次,参数和类型和数字完全匹配。数据库连接也很好,因为我先做了一些缓存,它可以工作。
已经尝试删除DBK_PDG_METADATI_CEDOLINO,但没有任何必要。
你能帮我弄清楚吗?
【问题讨论】:
-
如果您使用位置占位符 (
?),您应该使用基于索引的设置器(尽管我不能 100% 确定 Oracle 在这种情况下是否允许以任何方式命名)。