Oracle
 sql >> Database >  >> RDS >> Oracle

Come definire la procedura del pacchetto Oracle in H2 per il test

Ecco cosa ho fatto.

Domanda n. 2: Per rispondere a questa domanda ho dovuto modificare la query nativa come segue

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

Domanda n. 1: Tre cose sono coinvolte per rispondere a questo. Ora che avevo modificato la query nativa come sopra ho ricevuto un errore diverso:

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)

Stava cercando un database chiamato sch1 . Sembra che il modello utilizzato per chiamare una procedura memorizzata in H2 sia database.schema.procedure_name . Dal momento che non mi interessa cosa fa effettivamente quella procedura, sono stato in grado di falsificarlo creando un database chiamato sch1 uno schema chiamato STUDENT_PACKAGE e il nome della procedura Set_Grades_To_A

Per creare il database in memory, devi impostare la seguente proprietà spring.datasource.url in application.properties file.

  1. Crea il sch1 database come segue 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 . Notare che il nome del database è sch1

  2. Crea il STUDENT_PACKAGE schema aggiungendo questo \\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE alla fine del spring.datasource.url . Questo aggiunge un secondo schema chiamato STUDENT_PACKAGE . La proprietà dovrebbe essere simile a questa 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. Crea un Set_Grades_To_A stored procedure aggiungendo questo al tuo schema.sql CREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;