JDBC CallableStatement –ストアドプロシージャのINパラメーターの例
INパラメータを受け入れるストアドプロシージャを呼び出すJDBCCallableStatementの例。
Java8およびOracleデータベース19cでテスト済み
pom.xml
com.oracle ojdbc 8 system path.to/ojdbc8.jar
1. JDBC CallableStatement
1.1 A PL/SQL stored procedure to insert a row.
CREATE OR REPLACE PROCEDURE insert_employee(
p_name IN EMPLOYEE.NAME%TYPE,
p_salary IN EMPLOYEE.SALARY%TYPE,
p_date IN EMPLOYEE.CREATED_DATE%TYPE)
AS
BEGIN
INSERT INTO EMPLOYEE ("NAME", "SALARY", "CREATED_DATE") VALUES (p_name, p_salary, p_date);
COMMIT;
END;
1.2 JDBC example to call above stored procedure.
StoreProcedureInParameter.java
package com.example.jdbc.callablestatement;
import java.math.BigDecimal;
import java.sql.*;
import java.time.LocalDateTime;
public class StoreProcedureInParameter {
public static void main(String[] args) {
String createSP = "CREATE OR REPLACE PROCEDURE insert_employee( "
+ " p_name IN EMPLOYEE.NAME%TYPE, "
+ " p_salary IN EMPLOYEE.SALARY%TYPE, "
+ " p_date IN EMPLOYEE.CREATED_DATE%TYPE) "
+ " AS "
+ " BEGIN "
+ " INSERT INTO EMPLOYEE (\"NAME\", \"SALARY\", \"CREATED_DATE\") VALUES (p_name, p_salary, p_date); "
+ " COMMIT; "
+ " END; ";
String runSP = "{ call insert_employee(?,?,?) }";
try (Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "system", "Password123");
Statement statement = conn.createStatement();
CallableStatement callableStatement = conn.prepareCall(runSP)) {
// create or replace stored procedure
statement.execute(createSP);
//----------------------------------
callableStatement.setString(1, "example");
callableStatement.setBigDecimal(2, new BigDecimal("99.99"));
callableStatement.setTimestamp(3, Timestamp.valueOf(LocalDateTime.now()));
// Run insertEmployee() SP
callableStatement.executeUpdate();
} catch (SQLException e) {
System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
ソースコードをダウンロード
$ git clone https://github.com/example/java-jdbc.git