我正在尝试创建一个测试数据库(使用 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 当量。我一直在尝试类似的事情:
创建架构权限_工具;
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 打开数据库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)