首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Java 呼叫 Oracle 預存程序與函數完整範例

     編輯:Oracle 資料庫相關知識

使用 JDBC CallableStatement 呼叫 Oracle 預存函數/程序,需正確註冊輸出參數型別、設定輸入參數、執行並取得回傳值。本文涵蓋無參、IN、OUT、IN OUT 四種參數模式的完整範例。

核心 API 流程

  1. Connection.prepareCall("{? = call func_name(?)}"):大括號語法,? 為佔位符,函數回傳值佔第一個 ?。
  2. cs.registerOutParameter(index, Types.VARCHAR):註冊 OUT/IN OUT 參數與回傳值的 SQL 型別。
  3. cs.setString(index, value):設定 IN/IN OUT 參數值。
  4. cs.execute():執行。
  5. cs.getString(index) / getInt() 等:取得 OUT 參數與回傳值。

四種參數模式完整程式碼

CallableStatement cs;
try {
  // 1. 無參函數,回傳 VARCHAR
  cs = conn.prepareCall("{? = call myfunc}");
  cs.registerOutParameter(1, Types.VARCHAR);
  cs.execute();
  String ret = cs.getString(1);

  // 2. 一個 IN 參數函數
  cs = conn.prepareCall("{? = call myfuncin(?)}");
  cs.registerOutParameter(1, Types.VARCHAR);
  cs.setString(2, "a string");
  cs.execute();
  ret = cs.getString(1);

  // 3. 一個 OUT 參數函數
  cs = conn.prepareCall("{? = call myfuncout(?)}");
  cs.registerOutParameter(1, Types.VARCHAR); // 回傳值
  cs.registerOutParameter(2, Types.VARCHAR); // OUT 參數
  cs.execute();
  ret = cs.getString(1);
  String outParam = cs.getString(2);

  // 4. 一個 IN OUT 參數函數
  cs = conn.prepareCall("{? = call myfuncinout(?)}");
  cs.registerOutParameter(1, Types.VARCHAR);
  cs.registerOutParameter(2, Types.VARCHAR);
  cs.setString(2, "a string"); // 設定 IN OUT 初始值
  cs.execute();
  ret = cs.getString(1);
  outParam = cs.getString(2); // 取得修改後的值
} catch (SQLException e) {
  e.printStackTrace();
}

關鍵注意事項

  • 參數索引從 1 開始,函數回傳值永遠是索引 1。
  • registerOutParameter 必須在 execute() 前呼叫。
  • IN OUT 參數需先 setXxx 設定初始值,執行後再 getXxx 取得新值。
  • 型別對應:Oracle VARCHAR2 → Types.VARCHAR,NUMBER → Types.NUMERIC/DECIMAL,DATE → Types.TIMESTAMP。
  • 呼叫程序 (PROCEDURE) 時語法:{call proc_name(?, ?)},無回傳值佔位符。

掌握 CallableStatement 標準模式,即可安全高效地從 Java 整合 Oracle 預存邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved