프로시저
DELIMITER //
CREATE PROCEDURE proc_multiply (INOUT inParam INT, INOUT outParam INT)
BEGIN
SET outParam = inParam * 2;
END //
순서 기반 파라미터 호출
StoredProcedureQuery spq = em.createStoredProcedureQuery("proc_multiply");
spq.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
spq.registerStoredProcedureParameter(2, Integer.class, ParameterMode.OUT);
spq.setParameter(1, 100);
spq.execute();
Integer outputParameterValue = (Integer) spq.getOutputParameterValue(2);
System.out.println(outputParameterValue); // 결과: 200
이름 기반 파라미터 사용
StoredProcedureQuery spq = em.createStoredProcedureQuery("proc_multiply");
spq.registerStoredProcedureParameter("inParam", Integer.class, ParameterMode.IN);
spq.registerStoredProcedureParameter("outParam", Integer.class, ParameterMode.OUT);
spq.setParameter("inParam", 100);
spq.execute();
Integer outputParameterValue = (Integer) spq.getOutputParameterValue("outParam");
System.out.println(outputParameterValue); // 결과: 200
Named 스토어드 프로시저 사용
@NamedStoredProcedureQuery(
name = "multiply",
procedureName = "proc_multiply",
parameters = {
@StoredProcedureParameter(name = "inParam", mode = ParameterMode.IN, type = Integer.class),
@StoredProcedureParameter(name = "outParam", mode = ParameterMode.OUT, type = Integer.class)
})
@Entity
public class Member {...}
//사용
StoredProcedureQuery spq = em.createStoredProcedureQuery("multiply");
spq.setParameter("inParam", 100);
spq.execute();
Integer outputParameterValue = (Integer) spq.getOutputParameterValue("outParam");
System.out.println(outputParameterValue); // 결과: 200
728x90
'JVM > JPA' 카테고리의 다른 글
스프링 데이터 JPA (0) | 2023.07.02 |
---|---|
객체지향 쿼리 심화 (0) | 2023.06.30 |
네이티브 SQL (0) | 2023.06.30 |
QueryDSL (0) | 2023.06.28 |
JPQL 다형성 쿼리, 사용자 정의 함수, Named 쿼리 (0) | 2023.06.28 |