gpt4 book ai didi

java - H2 数据库和函数在不同的模式中

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:52 27 4
gpt4 key购买 nike

我正在尝试创建一个测试数据库(使用 H2 数据库)。我在生产环境中使用 Oracle,h2 中有 oracle 兼容模式似乎不错。

但是我在翻译 oracle 构造时遇到了问题:

create or replace PACKAGE permission_tools IS
FUNCTION get_role_access_level(
p_role_id IN NUMBER,
p_permiss IN VARCHAR2)
RETURN NUMBER;
END permission_tools;

我正在用它打电话:

select permission_tools.get_access_level(?, ?) from dual;

相当于 H2。我一直在尝试类似的东西:

创建架构 PERMISSION_TOOLS;

CREATE ALIAS PERMISSION_TOOLS.GET_ACCESS_LEVEL as $$
String nextPrime(String value) {
return new BigInteger(value).nextProbablePrime().toString();
}
$$;

但这给了我编译错误:

org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "

CREATE ALIAS PERMISSION_TOOLS.[*]GET_ACCESS_LEVEL AS
String nextPrime(String value) {
return new BigInteger(value).nextProbablePrime().toString();
}
"; expected "FOR"; SQL statement:


CREATE ALIAS PERMISSION_TOOLS.GET_ACCESS_LEVEL as $$
String nextPrime(String value) {
return new BigInteger(value).nextProbablePrime().toString();
}
$$ [42001-131]

这并没有提供任何关于这里正在发生的线索。

感谢任何帮助。

最佳答案

H2 不支持包。您可以做的是使用不同的名称创建函数,例如:PERMISSION_TOOLS_GET_ACCESS_LEVEL。缺点是您还需要更改查询。或者,您创建一个架构 PERMISSION_TOOLS 和其中的方法:

create schema PERMISSION_TOOLS;
CREATE ALIAS PERMISSION_TOOLS.GET_ACCESS_LEVEL as $$
String nextPrime(String value) {
return new BigInteger(value).nextProbablePrime().toString();
}
$$;
select permission_tools.get_access_level(1) from dual;

请注意,这在 H2 版本 1.2.131(根据您收到的错误消息代码,这是您正在使用的版本)中尚不可用。原因是“模式中的功能”最近才实现(在版本 1.2.135 中)。其实我建议升级到1.2.138版本,因为在早期版本中修复了与此功能相关的错误。创建该方法的缺点是特殊模式:如果您确实在 PUBLIC 以外的模式中创建此类函数,则无法使用旧版本的 H2 打开数据库。

关于java - H2 数据库和函数在不同的模式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3212347/

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