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

Sådan defineres Oracle Package Procedure i H2 til test

Her er, hvad jeg gjorde.

Spørgsmål #2: For at besvare dette spørgsmål var jeg nødt til at ændre den oprindelige forespørgsel som følger

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

Spørgsmål 1: Tre ting er involveret for at besvare dette. Nu hvor jeg havde ændret den oprindelige forespørgsel som ovenfor, fik jeg en anden fejl:

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)

Den ledte efter en database kaldet sch1 . Det ser ud til, at mønsteret, der bruges til at kalde en lagret procedure i H2, er database.schema.procedure_name . Da jeg er ligeglad med, hvad den procedure faktisk gør, var jeg i stand til at forfalske dette ved at oprette en database kaldet sch1 et skema kaldet STUDENT_PACKAGE og procedurenavnet Set_Grades_To_A

For at oprette databasen i hukommelsen skal du indstille følgende egenskab spring.datasource.url i application.properties fil.

  1. Opret sch1 database som følger 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 . Bemærk databasenavnet er sch1

  2. Opret STUDENT_PACKAGE skema ved at tilføje denne \\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE til slutningen af ​​spring.datasource.url . Dette tilføjer et andet skema kaldet STUDENT_PACKAGE . Egenskaben skal se sådan ud 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. Opret en Set_Grades_To_A lagret procedure ved at tilføje dette til din schema.sql CREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;



  1. EF Core til Mysql tabelbinding

  2. MySQL:Kolonne 'column_name', hvor klausulen er tvetydig

  3. Sæt brugerdefineret type i dvale for at undgå 'Forårsaget af:java.sql.SQLEundtagelse:Stream er allerede blevet lukket'

  4. T-sql - afgør om værdien er heltal