在Oracle 11g中,我有一個表survey
,其屬性爲id
,title
和message
。下面的存儲過程根據提供的ID獲取單個記錄,並將其存儲在提供的OUT參數中。如何在java中引用表%rowtype的oracle pl/sql out參數
create or replace procedure get_survey(arg_id number, obj_survey out survey%rowtype) is
begin
select * into obj_survey from survey where id = arg_id;
end get_survey;
我需要從Java調用這個存儲過程,我知道我可以用CallableStatement
開始,但我怎麼通過從Java考慮它必須是survey%rowtype
類型的OUT參數?我知道我可以使用光標,但我認爲這不是一個好習慣,因爲我只檢索一行。另外,我需要從OUT參數創建一個Survey對象(POJO),並從方法中返回它。這裏有多遠我在代碼中已經得到了目前:
public Survey getSurvey(int id) throws SQLException {
CallableStatement stmt = conn.prepareCall("begin get_survey(?, ?); end;");
stmt.setInt(1, id);
stmt.registerOutParameter(2, OracleTypes.[okay what do i put here?]); // not sure about this line either
stmt.execute();
// get the out parameter, convert it to a Survey object type and return it
}
我是否認爲儘管使用遊標將保留在Oracle端存儲所有邏輯的目標,但是直接從JDBC執行SQL會更快嗎? –
在JDBC中直接執行SQL更快是正確的 –