ストアド プロシージャがあり、標準の構文を使用して呼び出しています (そう言いますが、これまでプロシージャを呼び出したことはありません)。
ストアド プロシージャは、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)
手順から値を返すセクションは次のとおりです。
p_pre_rec_ld_id_o_nr := lv_PRE_RECORD_LOAD_ID_nr; -- pass out PK id for inserted record