编辑:虽然此问题中的某些答案可能帮助其他人解决不同的问题,但实际上解决方案与数据库连接的自动提交功能存在一些错误有关!在执行查询后强制提交会导致数据库反映更改,因此下面显示的代码是调用此类型存储过程的正确方法。
我正在尝试调用Oracle数据库中的一个简单存储过程。
该过程如下所示:
procedure clear_orderProcDtlByOrdId(p_order_id in order_header.order_id%type,
p_transaction_id in sl_order_processing_dtl.transaction_id%type DEFAULT NULL,
p_item_action_id in sl_order_processing_dtl.item_action_id%type DEFAULT NULL )
...
我遇到的有问题的Java代码如下:
try
{
CallableStatement storedProc = conn.prepareCall("{call PKG_PI_FRAUD.clear_orderProcDtlByOrdId(?)}");
storedProc.setString(1, orderID);
storedProc.execute();
}
catch (SQLException e)
{
e.printStackTrace();
}
我没有收到任何错误信息,但是数据库中没有反映出任何变化。当我在SQL Developer上运行该过程时,我可以看到结果。我认为这可能是提交问题,但我建立的连接处于自动提交模式。
非常感谢您的帮助!
PLS-00707: 不支持的结构或内部错误 [2603]
。 - aerosconn
和storedProc
都没有使用 try-with-resources 自动关闭,也没有在 finally 块中显式调用close()
方法来关闭。 - Awan Biru