sql >> Base de Datos >  >> RDS >> Oracle

Cómo definir el procedimiento de paquete de Oracle en H2 para pruebas

Esto es lo que hice.

Pregunta n.º 2: Para responder a esta pregunta, tuve que cambiar la consulta nativa de la siguiente manera

@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();
}

Pregunta n.º 1: Tres cosas están involucradas para responder a esto. Ahora que había cambiado la consulta nativa como se indicó anteriormente, recibí un error diferente:

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)

Estaba buscando una base de datos llamada sch1 . Parece que el patrón utilizado para llamar a un procedimiento almacenado en H2 es database.schema.procedure_name . Como no me importa lo que realmente haga ese procedimiento, pude falsificarlo creando una base de datos llamada sch1 un esquema llamado STUDENT_PACKAGE y el nombre del procedimiento Set_Grades_To_A

Para crear la base de datos en memoria, debe establecer la siguiente propiedad spring.datasource.url en application.properties archivo.

  1. Crea el sch1 base de datos de la siguiente manera . Observe que el nombre de la base de datos es sch1

  2. Crea el STUDENT_PACKAGE esquema agregando este \\;CREAR ESQUEMA SI NO EXISTE STUDENT_PACKAGE hasta el final de spring.datasource.url . Esto agrega un segundo esquema llamado STUDENT_PACKAGE . La propiedad debería tener este aspecto spring.datasource.url=jdbc:h2:mem:sch1;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=Oracle;INIT=CREAR ESQUEMA SI NO EXISTE first_schema\\;CREAR ESQUEMA SI NO EXISTE STUDENT_PACKAGE

  3. Cree un Set_Grades_To_A procedimiento almacenado agregando esto a su schema.sql CREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;