0

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

当通过 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
4

0 回答 0