我有一个存储过程,我使用标准语法调用它(我这么说,但我以前从未调用过一个过程)。
当通过 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