アクセラレータ

10549 ワード

DELIMITER //

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

//
proc multiplyストレージ・プロシージャは、入力値を2倍にします.
1番目のパラメータの値を入力し、2番目のパラメータの値を返します.
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 Storeプロシージャの使用
@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");