2007/06/23

Call Stored Procedure

不同資料庫的Stored Procedure的呼叫方式應該是大同小異,至少透過JDBC來呼叫更應該如此吧?! 但是,我只在Oracle 9.2上試過,所以,以下的方法只保證在Oracle 9.2下執行是正確的。
假設目前有stored procedure - gpv(empId, password)
它的功能是傳入員工編號 (empId),傳回加密的密碼,並且,當執行成功時,會傳回0,失敗時會傳回錯誤代碼,傳回值的型別是整數,那麼程式該怎麼寫?

con = pool.getConnection(); // 由Connection Pool取得Connection
sql = "{ ? = call gpv(?, ?) }"; // sql statement,詳見說明A
cstmt = con.prepareCall(sql); // cstmt的型別是CallableStatement
cstmt.registerOutParameter(1, Types.INTEGER); // 說明B
cstmt.setString(2, emp_id); // 說明C
cstmt.registerOutParameter(3, Types.LONGVARCHAR);
cstmt.execute(); // 執行
ret = cstmt.getInteger(1);
pwd = cstmt.getString(3).trim(); //說明D

  • 說明A:這是呼叫stored procedure的途述,如上是當有傳回值時,如果沒有傳回值要寫成{ call gpv(?, ?) }
  • 說明B:如果參數將會傳回值的話,必須註冊。
  • 說明C:當參數只傳入不傳出時,如此設定。
  • 說明D:傳回值是第一個參數,傳回的參數是第三個參數。
[轉貼自 - 史帝芬心得筆記]

沒有留言:

NGINX SSL/設定檔案

#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #...