我正在测试一个 Spring Boot 应用程序,该应用程序将数据读取/写入 Oracle DB。该 Oracle DB 具有 Oracle 包以及这些包中的过程。在某些时候,Spring Boot应用程序通过实体存储库调用此过程,如下所示
@Repository
public interface StudentRepository extends JpaRepository<Student, String> {
@Modifying
@Query(value = "begin sch1.STUDENT_PACKAGE.Set_Grades_To_A('A'); end;", nativeQuery = true)
public void setStudentGradeToA();
}
因此,它使用本机查询来调用过程Set_GradesToA
in the STUDENT_PACKAGE
包的sch1
schema.
我目前正在测试 Spring Boot 应用程序的功能NOT它与Oracle数据库之间的集成。因此,我决定暂时使用内存数据库(H2)(带有Oracle兼容性选项)来替代Oracle DB。但是我怎样才能伪造这些java包程序呢?
我尝试在 schema.sql (或 data.sql)中创建别名,如下所示:
CREATE SCHEMA if not exists sch1;
CREATE ALIAS sch1.STUDENT_PACKAGE AS $$ void Set_Grades_To_A(String s) { new String(s); } $$;
我真的不在乎里面有什么Set_Grades_To_A
procedure 我关心的是如何定义它。
当我按照上面的方式创建别名时,我仍然收到语法错误。
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "BEGIN SCH1[*].STUDENT_PACKAGE.Set_Grades_To_A('A'); END; "; SQL statement:
begin sch1.STUDENT_PACKAGE.Set_Grades_To_A('A'); end; [42000-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)
at org.h2.message.DbException.getSyntaxError(DbException.java:203)
我想我有两个问题:
如何在模式 sch1 中伪造 Oracle 包内的存储过程?
为什么我会收到上面的语法错误?