Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como definir o procedimento do pacote Oracle no H2 para teste


Aqui está o que eu fiz.

Pergunta nº 2: Para responder a essa pergunta eu tive que alterar a consulta nativa da seguinte forma
@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();
}

Pergunta nº 1: Três coisas estão envolvidas para responder a isso. Agora que alterei a consulta nativa como acima, recebi um erro 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)

Ele estava procurando por um banco de dados chamado sch1 . Parece que o padrão usado para chamar um procedimento armazenado em H2 é database.schema.procedure_name . Como não me importo com o que esse procedimento realmente faz, consegui fingir isso criando um banco de dados chamado sch1 um esquema chamado STUDENT_PACKAGE e o nome do procedimento Set_Grades_To_A

Para criar o banco de dados na memória, você deve definir a seguinte propriedade spring.datasource.url em application.properties Arquivo.

  1. Crie o sch1 banco de dados da seguinte forma 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 . Observe que o nome do banco de dados é sch1

  2. Crie o STUDENT_PACKAGE esquema adicionando este \\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE até o final do spring.datasource.url . Isso adiciona um segundo esquema chamado STUDENT_PACKAGE . A propriedade deve ficar assim 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. Crie um Set_Grades_To_A procedimento armazenado adicionando isso ao seu schema.sql CREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;