스터오 프로시저

원종서·2022년 2월 12일
1

JPA

목록 보기
11/13
DELIMITER //

CREATE PROCEDURE proc_mulitply (INOUT inParam INT, INOUT outParam INT)
BEGIN 
	SET outParam = inParam * 2;
END

//

입력 값을 두배로 증가시키는 proc_mulitply 스토어 프로시저.
첫번째 파라미터로 값을 입력 받고, 두번째 파라미터로 값을 반환한다.

JPA로 스토어 프로시저 호출.

 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 파라미타

Name 스토어 프로시저 사용

@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");

0개의 댓글