DELIMITER //
CREATE PROCEDURE proc_mulitply (INOUT inParam INT, INOUT outParam INT)
BEGIN
SET outParam = inParam * 2;
END
//
입력 값을 두배로 증가시키는 proc_mulitply 스토어 프로시저.
첫번째 파라미터로 값을 입력 받고, 두번째 파라미터로 값을 반환한다.
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); // 2
-----------
spq.registerStoredProcedureParameter("inParam",Integer.class , ParameterMode.IN);
spq.registerStoredProcedureParameter("outParam", Integer.class, ParameterMode.OUT);
spq.setParameter("inParam", 100);
spq.execute();
Integer outParam = (Integer) spq.getOutputParameterValue("outParam");
registerStoredProcedureParameter() 에는 파라미터 (순서, 이름) , 타입, 파라미터 모드를 입력하면 된다.
파라미터 모드
public enum ParameterMode { IN, // inout 파라미타 INOUT, // input, output 파라미타 OUT, //output 파라미타 REF_CURSOR // cursor 파라미타
@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 spq2 = em.createNamedStoredProcedureQuery("multiply");
spq2.setParameter("inParam", 100);
spq2.execute();
Integer outParam = (Integer) spq2.getOutputParameterValue("outParam");