当前位置: 首页 > 知识库问答 >
问题:

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

严峰
2023-03-14

我正在尝试使用H2内存数据库为java应用程序编写一些功能测试。因为我们使用Oracle作为生产数据库,所以一些代码是用PL/SQL编写的。所以我打开了Oracle兼容模式,现在我的url看起来像这样:jdbc:h2:mem:test;模式=Oracle

我遇到问题的实际应用程序代码如下所示(注意,序列和表都是在调用之前创建的):

CallableStatement = con.prepareCall(
    " begin insert into profiles(" + PROFILE_FIELDS + ") " +
    " values (sq_profiles.nextval, ?, ?, ?, ?, ?) " + 
    " returning profile_id into ?; end;");

它失败了,错误与我为测试begin而编写的示例代码相同。。。结束 行为:

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。。。结束 H2支持的块?如果是,上面的代码可能有什么问题?

谢谢


共有1个答案

呼延宪
2023-03-14

不,H2 Oracle兼容模式并不意味着支持这样的PL/SQL。正如H2文档中所述,Oracle兼容性模式带来以下好处:

  • 对于有别名的列,ResultSetMetaData.getColnName()返回别名,getTableName()返回null。
  • 使用唯一索引时,允许所有列中具有NULL的多行,但是不允许具有相同值的多行。
  • 将NULL与另一个值连接会导致另一个值。
 类似资料:
  • nosql数据库具有无模式属性,因此我们可以向节点或关系添加任何字段/属性。但是如果我使用Spring数据作为框架,我必须预先定义节点和关系对象的字段。Spring数据Neo4j似乎不支持动态插入字段...是真的吗?

  • 问题内容: 我有一个定义元素和属性默认值的架构。我正在尝试使用基于该架构的JAXB解析文档,但是JAXB没有设置默认值。关于如何使JAXB接受模式中的默认值的任何想法? example.xsd: example1.xml TestParser.java RootElement.java ChildEl.java 问题答案: 元素默认值 要获取element属性的默认值,您需要对其进行如下注释: 属

  • 从python语言的API文档中,我找不到任何关于graph x的东西,这是否意味着它还不支持,如果现在不支持,它会支持吗?

  • 我在查阅Spring Data Elasticsearch store的文档时,遇到了以下问题: 有关反应性支持的更多详细信息,请参阅特定于存储的留档。 虽然我已经在elasticsearch商店留档中,但我没有找到任何关于反应性支持的进一步信息。我在哪里可以找到关于这方面的进一步信息?

  • 问题内容: 我搜索了Google,发现了一些矛盾之处。xlwt是否支持xlsx文件(MS Office 2007)。我听说xlwt 0.7.4支持xlsx文件。有谁尝试过使用xlwt 0.7.4编写xlsx文件 这个问题的目的是,如果我需要安装,我没有安装库的权限,我需要提供更多详细信息。我需要用python编写xlsx文件,所以如果有人做过类似的事情将有助于提供更好的信息 我已经查看了这个Wik

  • 相机是否支持HDR模式的采集