java - H2 删除并创建别名 to_char 不起作用

标签 java oracle junit h2

我一直在尝试运行一些单元测试,这些单元测试使用适用于我们的 oracle 数据库的 to_char 函数,但对于我们的 h2 内存数据库测试似乎不起作用。 我尝试删除别名 to_char 并覆盖它以获得有效的别名,但是当我尝试删除别名 to_char 并创建它时,它似乎不起作用。

DROP alias if exists TO_CHAR;
CREATE alias TO_CHAR FOR "package.TEST.toChar";

结果:“org.h2.jdbc.JdbcSQLException:函数别名“TO_CHAR”已存在;SQL 语句:”

DROP alias TO_CHAR;
CREATE alias TO_CHAR FOR "package.TEST.toChar";

结果:“org.h2.jdbc.JdbcSQLException:未找到函数别名“TO_CHAR”;SQL 语句:”。

还尝试使用直接 SQL 脚本,如下所示,但不起作用:

DROP alias if exists TO_CHAR;
CREATE alias TO_CHAR as '
public static String toChar(String date, String pattern) throws Exception {
        pattern = pattern.replaceAll("YY","yy");
        pattern = pattern.replaceAll("DD","dd");
        pattern = pattern.replaceAll("HH24|hh24","HH");
        pattern = pattern.replaceAll("HH?!24|hh?!24","KK");
        pattern = pattern.replaceAll("MON|mon","MMM");
        pattern = pattern.replaceAll("MI|mi","mm");
        pattern = pattern.replaceAll("SS|ss","ss");
        pattern = pattern.replaceAll("AM|PM","aa");
        pattern = pattern.replaceAll("T","");
        SimpleDateFormat sm = new SimpleDateFormat(pattern);
        java.util.Date dt;
        if(date.length() > 10)dt = java.sql.Timestamp.valueOf(date);
        else
            dt = java.sql.Date.valueOf(date);
        return sm.format(dt);
    }';

我认为这可能是缺乏权限,但它不适用于 user="sa",还查找了,他们可能不允许覆盖 to_char 函数,因为有人说他们不允许覆盖某些函数: http://h2-database.66688.n3.nabble.com/trunc-alias-is-read-only-and-avoids-emulating-Oracle-trunc-function-td4025947.html

有谁知道我在这里缺少什么或者是否无法覆盖它?

最佳答案

如果您确实想使用自己的实现重新定义该函数,则需要将 ;BUILTIN_ALIAS_OVERRIDE=1 添加到您的数据库 URL。

关于java - H2 删除并创建别名 to_char 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58309099/

相关文章:

java - 正则表达式捕获其间重复组数量未知的文本

c# - ORA-12705 : Cannot access NLS data files or invalid environment specified

sql - 让 Oracle 将 OR 连接谓词转换为 UNION ALL 操作

java - 终止期间线程延迟

java - Dagger 2 场注入(inject)在 Android 中不起作用

oracle 表未锁定

maven - 在maven中,如何为不同的junit测试类运行单独的配置

java - 如何在SonarQube 6.7中分析单元测试文件?

java - Junit 和 EasyMock 理解澄清

java - 将 application.properties 传递给 Logback 自定义过滤器