L’écriture de ce blog est le résultat du fait qu’il m’a fallu du temps pour comprendre comment configurer le paramètre OUT en appelant les procédures stockées à l’aide de Spring JPA.
Considérez la procédure stockée suivante :
CREATE OR REPLACE
PROCEDURE in_only (inParam IN VARCHAR2) AS
BEGIN
DBMS_OUTPUT.PUT_LINE('in_only');
END in_only;
/
CREATE OR REPLACE
PROCEDURE in_and_out (inParam IN VARCHAR2, outParam OUT VARCHAR2) AS
BEGIN
outParam := 'Done outParam , and this is my inParam ' || inParam;
END in_and_out;
/
Ici, nous avons deux procédures :
- dans seulement: prend un paramètre d’entrée (inParam) mais ne renvoie pas de valeur
- dedans et dehors: prend un paramètre d’entrée (inParam) et renvoie une valeur (outParam)
Nous pouvons ensuite appeler les procédures stockées à l’aide de l’implémentation du référentiel Spring Data JPA comme ci-dessous :
@Repository
public interface MytableRepository extends JpaRepository<Mytable, String> {
@Procedure(procedureName = "in_only")
void inOnly(@Param("inParam") String inParam);
@Procedure(procedureName = "in_and_out", outputParameterName = "outParam")
String inAndOut(@Param("inParam") String inParam);
}
Points clés
- procedureName : doit correspondre au nom de la procédure stockée créée.
- Définissez le paramètre IN à l’aide de @Param.
- Définissez le paramètre OUT à l’aide de outputParameterName = » ».
- @Param et outputParameterName : doivent correspondre au nom du paramètre dans la procédure Stored.
- Les types de retour doivent correspondre, donc in_only est void et in_and_out renvoie String.
Essai
@SpringBootTest
public class WebApplicationTests {
@Test
public void contextLoads() {
}
@Autowired
private MytableRepository repo;
@Test
public void inOnlyTest() {
String inParam = "Hi Im an inputParam";
repo.inOnly(inParam);
}
@Test
public void inAndOutTest() {
String inParam = "From inputParam";
String outParam = repo.inAndOut(inParam);
System.out.println(outParam);
}
}
Sortir
2021-10-31 13:43:21 DEBUG org.hibernate.SQL - {call in_and_out(?,?)}
Hibernate: {call in_and_out(?,?)}
Done outParam , and this is my inParam From inputParam
2021-10-31 13:43:22 DEBUG org.hibernate.SQL - {call in_only(?)}
Hibernate: {call in_only(?)}