Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment définir la procédure de package Oracle dans H2 pour les tests

Voici ce que j'ai fait.

Question 2 : Pour répondre à cette question, j'ai dû modifier la requête native comme suit

@Repository
public interface StudentRepository extends JpaRepository<Student, String> {

@Modifying
@Query(value = "call sch1.STUDENT_PACKAGE.Set_Grades_To_A('A')", nativeQuery = true)
public void setStudentGradeToA();
}

Question 1 : Trois choses sont impliquées pour répondre à cela. Maintenant que j'avais changé la requête native comme ci-dessus, j'ai eu une erreur différente :

Caused by: org.h2.jdbc.JdbcSQLException: Database "sch1" not found; SQL statement:
call sch1.STUDENT_PACKAGE.Set_Grades_To_A('A') [90013-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)

Il cherchait une base de données appelée sch1 . Il semble que le modèle utilisé pour appeler une procédure stockée dans H2 soit database.schema.procedure_name . Comme je me fiche de ce que fait réellement cette procédure, j'ai pu simuler cela en créant une base de données appelée sch1 un schéma appelé STUDENT_PACKAGE et le nom de la procédure Set_Grades_To_A

Pour créer la base de données en mémoire, vous devez définir la propriété suivante spring.datasource.url dans application.properties fichier.

  1. Créez le sch1 base de données comme suit spring.datasource.url=jdbc:h2:mem:sch1;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=Oracle;INIT=CREATE SCHEMA IF NOT EXISTS first_schema . Notez que le nom de la base de données est sch1

  2. Créez le STUDENT_PACKAGE schema en ajoutant ce \\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE à la fin du spring.datasource.url . Cela ajoute un deuxième schéma appelé STUDENT_PACKAGE . La propriété doit ressembler à ceci spring.datasource.url=jdbc:h2:mem:sch1;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=Oracle;INIT=CREATE SCHEMA IF NOT EXISTS first_schema\\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE

  3. Créez un Set_Grades_To_A procédure stockée en ajoutant ceci à votre schema.sql CREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;