Oracle存儲過程是預編譯的PL/SQL代碼塊,存儲在數據庫中供應用程序調用。它們封裝了業務邏輯,減少網絡流量,提高性能並增強安全性。與匿名PL/SQL塊不同,存儲過程具有名稱、參數列表並永久存儲在數據字典中。
以下示例創建一個接收輸入參數並返回查詢結果的存儲過程:
CREATE OR REPLACE PROCEDURE TESTB(
PARA1 IN VARCHAR2,
PARA2 OUT VARCHAR2
) AS
BEGIN
SELECT column_name INTO PARA2
FROM TESTTB
WHERE I_ID = PARA1;
END TESTB;
關鍵點:使用OUT參數返回值,INTO子句將查詢結果賦值給輸出變量。
使用JDBC的CallableStatement調用存儲過程:
String url = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";
Connection conn = DriverManager.getConnection(url, "hyq", "hyq");
CallableStatement proc = conn.prepareCall("{call HYQ.TESTB(?,?)}");
proc.setString(1, "100");
proc.registerOutParameter(2, Types.VARCHAR);
proc.execute();
String result = proc.getString(2);
System.out.println("結果: " + result);
注意:proc.getString(2)中的索引必須與存儲過程參數聲明順序一致。若OUT參數在第一位則用getString(1),第三位用getString(3)。可通過增加OUT參數實現多返回值。
try-with-resources自動關閉資源(JDK 7+)SQLException和其他異常