创建具有相同名称但不具有相同签名的别名

时间:2014-01-31 16:18:42

标签: java h2

为了在我们的Junit测试中使用H2数据库而不是调用Oracle,我阻止在H2上创建别名以模拟某些Oracle兼容性:

  • 我首先声明了to_char的别名,用于日期到字符的转换:工作正常

    create alias TO_CHAR as $$ java.lang.String toChar(java.util.Date date, String format) throws Exception{ ... }$$;

  • 然后我尝试为to_char声明一个别名,用于数字到字符的转换:现在h2不接受它: create alias TO_CHAR as $$ java.lang.String toChar(java.lang.Number value){ ... }$$;

它被拒绝,并显示以下错误消息:

  

org.h2.jdbc.JdbcSQLException:函数别名“TO_CHAR”已存在; SQL语句:   创建别名TO_CHAR为$$

     

java.lang.String toChar(java.lang.Number value){       return java.lang.String .valueOf(value);   } $$

我还尝试在1个块中声明2个函数,如:

  

将别名TO_CHAR创建为$$

     

java.lang.String toChar(int value){   ...    }

     

java.lang.String toChar(java.util.Date date,String format)抛出   例外{      ...       }    $$;

在这种情况下,没有错误,但只考虑声明的firest方法。

那么,有没有办法声明2个具有相同名称但签名不同的别名?

1 个答案:

答案 0 :(得分:2)

至于TO_CHAR, H2 support it now,自version 1.3.175 (2013-01-18)

H2确实支持function overloading。但是,存在一个限制,因为不支持声明诸如源代码之类的功能。

您需要按如下方式声明方法:

CREATE ALIAS YOUR_METHOD FOR "acme.Function.yourMethod";

此限制在User Defined Functions下记录如下:

方法重载

如果类已经编译并包含在类路径中,则可以将多个方法绑定到SQL函数。每个Java方法必须具有不同数量的参数。将函数声明为源代码时,不支持方法重载。