我正在尝试使用 H2 内存数据库为我们的 java 应用程序编写一些功能测试。因为我们使用 Oracle 作为我们的生产数据库,所以一些代码是用 PL/SQL 编写的。所以我打开了 Oracle 兼容模式,现在我的 url 看起来像这样:jdbc:h2:mem:test;MODE=Oracle
.
我遇到问题的实际应用程序代码如下所示(注意,在调用之前已经创建了序列和表):
CallableStatement = con.prepareCall(
" begin insert into profiles(" + PROFILE_FIELDS + ") " +
" values (sq_profiles.nextval, ?, ?, ?, ?, ?) " +
" returning profile_id into ?; end;");
它失败并出现与我为测试行为而编写的示例代码相同的错误:begin ... end;
Connection con = connectionProvider.getConnection()
con.prepareStatement("CREATE TABLE test (id INT NOT NULL)").execute()
con.prepareStatement("INSERT INTO test SELECT 1 FROM dual").execute()
con.prepareStatement("BEGIN INSERT INTO test SELECT 2 FROM dual; END;").execute()
我得到的错误:
Syntax error in SQL statement "BEGIN INSERT[*] INTO TEST SELECT 2 FROM DUAL; END; "; SQL statement:
BEGIN INSERT INTO test SELECT 2 FROM dual; END; [42000-167]
所以我的问题是:begin ... end;
H2 支持块吗?如果是,上面的代码可能有什么问题?
谢谢。