gpt4 book ai didi

java - H2使用Oracle模式时是否支持PLSQL?

转载 作者:行者123 更新时间:2023-12-02 20:13:55 24 4
gpt4 key购买 nike

我正在尝试使用 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]

所以我的问题是:H2 支持 begin ... end; block 吗?如果是,上面的代码可能有什么问题?

谢谢。

最佳答案

不,H2 Oracle兼容模式并不意味着支持这样的PL/SQL。正如 H2 documentation 中所述,Oracle兼容模式带来以下效果:

  • For aliased columns, ResultSetMetaData.getColumnName() returns the alias name and getTableName() returns null.
  • When using unique indexes, multiple rows with NULL in all columns are allowed, however it is not allowed to have multiple rows with the same values otherwise.
  • Concatenating NULL with another value results in the other value.

关于java - H2使用Oracle模式时是否支持PLSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11986713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com