Java:在oracle数据库中调用存储过程

aer*_*ros 8 java sql oracle stored-procedures jdbc

编辑:虽然这个问题的一些答案可以帮助其他人解决不同的问题,但解决方案实际上与数据库连接上的自动提交功能有关!在执行查询后强制提交导致数据库反映更改,因此下面显示的代码是调用此类型的存储过程的正确方法

我试图在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 )
...
Run Code Online (Sandbox Code Playgroud)

我遇到问题的java代码看起来像这样

    try 
    {
        CallableStatement storedProc = conn.prepareCall("{call PKG_PI_FRAUD.clear_orderProcDtlByOrdId(?)}");
        storedProc.setString(1, orderID);
        storedProc.execute();
    } 
    catch (SQLException e) 
    {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

我根本没有收到任何错误,但没有反映数据库更改.当我在SQL Developer中运行该过程时,我看到了结果.我认为这可能是因为提交问题,但我建立的连接处于自动提交模式.

任何帮助,将不胜感激!

aer*_*ros 3

虽然这个问题中的一些答案可能会帮助其他人解决不同的问题,但该解决方案实际上与数据库连接上的自动提交功能的一些错误有关!执行查询后强制提交会导致数据库反映更改,因此问题中显示的代码是调用此类存储过程的正确方法!