Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zdefiniować procedurę Oracle Package w H2 do testowania?

Oto, co zrobiłem.

Pytanie nr 2: Aby odpowiedzieć na to pytanie, musiałem zmienić natywne zapytanie w następujący sposób

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

Pytanie nr 1: Aby odpowiedzieć na to pytanie, potrzebne są trzy rzeczy. Teraz, gdy zmieniłem zapytanie natywne, jak powyżej, pojawił się inny błąd:

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)

Szukał bazy danych o nazwie sch1 . Wygląda na to, że wzorzec używany do wywoływania procedury składowanej w H2 to database.schema.procedure_name . Ponieważ nie obchodzi mnie, co właściwie robi ta procedura, mogłem to sfałszować, tworząc bazę danych o nazwie sch1 schemat o nazwie STUDENT_PACKAGE i nazwę procedury Set_Grades_To_A

Aby utworzyć bazę danych w pamięci, musisz ustawić następującą właściwość spring.datasource.url w application.properties plik.

  1. Utwórz sch1 bazę danych w następujący sposób 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 . Zauważ, że nazwa bazy danych to sch1

  2. Utwórz STUDENT_PACKAGE schemat, dodając ten \\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE na końcu spring.datasource.url . To dodaje drugi schemat o nazwie STUDENT_PACKAGE . Właściwość powinna wyglądać tak 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. Utwórz Set_Grades_To_A procedura składowana, dodając ją do schema.sql CREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw do z CTE

  2. Procedura składowana w Oracle podająca błąd PLS-00428

  3. Jak przypisać licznik na podstawie warunku

  4. Jak wyodrębnić podciąg z ciągu w Oracle/SQLite?

  5. Jak przywrócić stary plsql?