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