Considerando o seguinte o script de criação da storedProcedure, podemos observar a nomenclatura e parâmetros descritos.
CREATE OR REPLACE FUNCTION somar(
IN primeiro double precision,
IN segundo double precision,
OUT soma double precision)
RETURNS double precision AS
$BODY$
BEGIN
soma = primeiro + segundo;
END;
$BODY$
LANGUAGE plpgsql
Para executarmos essa storedProcedure no código Java, precisamos declarar o nome e os parâmetros declarados na storeProcedure.
StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery(
"somar"
);
storedProcedure.registerStoredProcedureParameter(
"primeiro",Double.class,ParameterMode.IN
);
storedProcedure.registerStoredProcedureParameter(
"segundo",Double.class,ParameterMode.IN
);
storedProcedure.registerStoredProcedureParameter(
"resposta",Double.class,ParameterMode.OUT
);
storedProcedure.setParameter("primeiro",3.6);
storedProcedure.setParameter("segundo",6.9);
storedProcedure.execute();
Double resposta = (Double) storedProcedure.getOutputParameterValue(
"resposta"
);
System.out.println("A soma foi: " + resposta);
Podemos, também, criar uma storedProcedure nomeada com a anotação @NamedStoredProcedureQuery
.
@NamedStoredProcedureQuery(name="Procedure.somar", procedureName="somar",
parameters = {
@StoredProcedureParameter(name="primeiro", mode=ParameterMode.IN, type=Double.class),
@StoredProcedureParameter(name="segundo", mode=ParameterMode.IN, type=Double.class),
@StoredProcedureParameter(name="soma", mode=ParameterMode.OUT, type=Double.class)
}
)