[Java JDBC] Sử dụng CallableStatement để gọi Stored Procedure có IN parameter

Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách sử dụng CallableStatement để gọi Stored Procedure có IN parameter


Đã test với Java 8 và Oracle database 19c

pom.xml
XML:
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>8</version>
    <scope>system</scope>
    <systemPath>path.to/ojdbc8.jar</systemPath>
</dependency>

1. JDBC CallableStatement
1.1 PL/SQL stored procedure để insert một dòng mới.

SQL:
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 Sử dụng JDBC để gọi stored procedure ở trên.

StoreProcedureInParameter.java
Java:
package com.mkyong.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, "mkyong");
            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();
        }

    }
}

Download Source Code
$ git clone https://github.com/mkyong/java-jdbc.git


Cám ơn các bạn đã theo dõi. Hẹn gặp lại các bạn trong các bài viết sau :D

Bài viết tham khảo tại: https://mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-in-parameter-example/
 

Bình luận