Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So definieren Sie die Oracle-Paketprozedur in H2 zum Testen

Folgendes habe ich getan.

Frage #2: Um diese Frage zu beantworten, musste ich die native Abfrage wie folgt ändern

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

Frage #1: Um dies zu beantworten, sind drei Dinge erforderlich. Nachdem ich die native Abfrage wie oben geändert hatte, erhielt ich einen anderen Fehler:

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)

Es wurde nach einer Datenbank namens sch1 gesucht . Es scheint, als wäre das Muster, das zum Aufrufen einer gespeicherten Prozedur in H2 verwendet wird, database.schema.procedure_name . Da es mir egal ist, was diese Prozedur tatsächlich tut, konnte ich dies vortäuschen, indem ich eine Datenbank namens sch1 erstellte ein Schema namens STUDENT_PACKAGE und den Verfahrensnamen Set_Grades_To_A

Um die In-Memory-Datenbank zu erstellen, müssen Sie die folgende Eigenschaft spring.datasource.url setzen in der application.properties Datei.

  1. Erstellen Sie den sch1 Datenbank wie folgt 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 . Beachten Sie, dass der Datenbankname sch1 ist

  2. Erstellen Sie das STUDENT_PACKAGE Schema durch Hinzufügen dieses \\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE bis zum Ende der spring.datasource.url . Dadurch wird ein zweites Schema namens STUDENT_PACKAGE hinzugefügt . Die Eigenschaft sollte folgendermaßen aussehen: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. Erstellen Sie den Set_Grades_To_A gespeicherte Prozedur durch Hinzufügen zu Ihrem schema.sql CREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;