存储过程out参数返回null

时间:2013-12-02 17:04:18

标签: java stored-procedures jdbc callable-statement

我有一个存储过程,我用标准语法调用它(我说的是,但我以前从未调用过程)。

存储过程在通过Toad或SQLDeveloper调用时,会返回正确的值(这是一个数字)。存储过程从一个表中提取数据并将其插入另一个表中。该程序确实有效,并且在我调用它时工作,它只是没有返回正确的值。

但是,当我使用下面的代码时,使用getInt时我得到0(相当于null):

    String testCallable = "{call PKG_RING_EDIT_CORE_TABLES.move_core_to_preload(?,?)}";
    cstmt = con.prepareCall(testCallable);
    cstmt.setInt(1, 196);
    cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.NUMBER);

    Integer rows = cstmt.executeUpdate();

    System.out.println("Rows affected " + rows);

    Integer resultingId = cstmt.getInt(2);

    System.out.println("Pulled record from core table. New pre_record_load_id = " + resultingId);

如果有人能给我任何关于为什么返回null的指导,那么我将不胜感激。我很欣赏它可能很难看到程序代码(它很长,所以不发布),但任何指导都很棒。

感谢。

修改

以下是程序声明:

procedure move_core_to_preload (p_encounter_id_i_nr in encounters.encounter_id%type
  , p_pre_rec_ld_id_o_nr out pre_record_load.pre_record_load_id%type)

以下是从proecure返回值的部分:

  p_pre_rec_ld_id_o_nr := lv_PRE_RECORD_LOAD_ID_nr;  -- pass out PK id for inserted record

0 个答案:

没有答案