首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Java 調用 Oracle 帶 OUT 參數存儲過程完整實戰

     編輯:Oracle 資料庫基礎

存儲過程通過 OUT 參數返回標量值是最常見交互模式。本文提供標準 PL/SQL 定義、完整 Java 調用代碼、參數註冊映射規則、資源管理模板,可直接複製落地。

一、存儲過程定義

CREATE OR REPLACE PROCEDURE testb (
  para1 IN  VARCHAR2,
  para2 OUT VARCHAR2
) AS
BEGIN
  SELECT col_name INTO para2 FROM testtb WHERE i_id = para1;
END testb;

二、Java 調用完整代碼

package com.example.proc;

import java.sql.*;

public class CallProcWithOutParam {
  public static void main(String[] args) {
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url    = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    String user   = "scott";
    String pwd    = "tiger";

    Connection conn = null;
    CallableStatement proc = null;
    try {
      Class.forName(driver);
      conn = DriverManager.getConnection(url, user, pwd);

      // {call schema.proc(?,?)}  占位符順序 = 參數定義順序
      proc = conn.prepareCall("{ call testb(?, ?) }");
      proc.setString(1, "100");                    // IN 參數
      proc.registerOutParameter(2, Types.VARCHAR); // OUT 參數註冊,索引=位置
      proc.execute();

      String result = proc.getString(2);           // 獲取 OUT 值
      System.out.println("返回結果 = " + result);

    } catch (SQLException | ClassNotFoundException e) {
      e.printStackTrace();
    } finally {
      closeQuietly(proc);
      closeQuietly(conn);
    }
  }

  static void closeQuietly(AutoCloseable c) {
    if (c != null) try { c.close(); } catch (Exception ignored) {}
  }
}

三、核心規則速記

  1. 索引 = 參數位置:registerOutParameter(2, ...) 對應第 2 個參數;若 OUT 在第 1 位則用 1,第 3 位用 3。
  2. 類型映射:Types.VARCHAR/INTEGER/DATE/TIMESTAMP/NUMERIC 對應 Oracle VARCHAR2/NUMBER/DATE/TIMESTAMP/NUMBER。
  3. 多 OUT 參數:依次 registerOutParameter(n, type),getString(n) 獲取。
  4. 資源關閉順序:Statement → Connection(或用 try-with-resources JDK 7+)。

四、進階:返回 REF CURSOR(結果集)參見下一篇

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