【发布时间】:2025-12-30 18:35:06
【问题描述】:
编辑:虽然这个问题中的一些答案可能会帮助其他人解决不同的问题,但该解决方案实际上与数据库连接上的自动提交功能的一些错误有关!执行查询后强制提交会导致数据库反映更改,因此下面显示的代码是调用此类存储过程的正确方法
我正在尝试在 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 中运行该过程时,我看到了结果。我认为这可能是因为提交问题,但我建立的连接处于自动提交模式。
任何帮助将不胜感激!
【问题讨论】:
-
在 DB 中 orderID 设置为 VARCHAR 吗?
-
@PremGenError orderID 是数据库中的 VARCHAR2
-
尝试在参数周围加上引号,然后在第 2 行:storedProc.setString("1", "orderID");
-
@twoleggedhorse 这会导致
PLS-00707: unsupported construct or internal error [2603] -
@user2076524 如果从参数名称中删除引号,您是否仍然收到错误? storedProc.setString("1", orderID);
标签: java sql oracle stored-procedures jdbc