【问题标题】:Create Function in h2 from Oracle从 Oracle 在 h2 中创建函数
【发布时间】:2012-01-20 01:07:20
【问题描述】:

我在 oracle 中有以下函数,我必须将其转换为 h2。任何人都可以帮助我。我不知道这样做:

create or replace function unpack_info (p_trackchar table.ordchar%type) 
 return varchar2 is
l_res varchar2(8);
begin
select decode(bitand(to_number(ascii(p_trackchar)),1),1,'1','0') ||
  decode(bitand(to_number(ascii(p_trackchar)),2),2,'1','0') ||
  decode(bitand(to_number(ascii(p_trackchar)),4),4,'1','0') ||
  decode(bitand(to_number(ascii(p_trackchar)),8),8,'1','0') ||
  decode(bitand(to_number(ascii(p_trackchar)),16),16,'1','0') ||
  decode(bitand(to_number(ascii(p_trackchar)),32),32,'1','0') ||
  decode(bitand(to_number(ascii(p_trackchar)),64),64,'1','0') into l_res
from dual;
return l_res;
end;

我已尝试先做一些基础知识,但无法创建此函数:

CREATE ALIAS HTS.TEST AS $$
String nextPrime(String value){
 return null;
}
$$;

我收到此错误:

错误:SQL Befehl 中的语法 Fehler "CREATE ALIAS HTS.TEST AS []$$ 字符串 nextPrime(字符串值){ 返回空" SQL 语句中的语法错误“CREATE ALIAS HTS.TEST AS []$$ 字符串 nextPrime(字符串值){ 返回 null" [42000-162]

这是进行翻译的正确方法还是我能做什么?

我创建了一个别名(测试别名)并且可以执行它。现在 O 必须为 unpack:info 创建别名。有人可以帮我解决语法等问题。函数在 h2 中如何作为别名?

【问题讨论】:

    标签: java database oracle function h2


    【解决方案1】:

    使用 ' 作为转义序列而不是 $$。如果要使用转义序列,请在两者之间使用 $$。所以代码看起来像:

    CREATE ALIAS HTS.TEST AS '
    public static String nextPrime(String value){
     return null;
    }
    ';
    

    【讨论】:

    【解决方案2】:

    我无法重现该问题。您究竟是如何执行该声明的?可能您使用仅发送部分查询的工具运行语句?或者可能在'$$'之前有一个'特殊字符'(某种unicode空间)?我试过这个:

    create schema hts;
    CREATE ALIAS HTS.TEST AS $$
    String nextPrime(String value){
        return null;
    }
    $$;
    

    您能在 H2 控制台中再试一次吗?

    【讨论】:

    • +1 奇怪的是错误消息不包含最后一个} + $$。
    • 原因是:H2 数据库引擎实际上并没有得到完整的语句,它只得到了第一个分号(在'null'之后)。为什么会这样我不知道,我认为它与运行脚本的工具有关。
    • 我同意。该工具可能配置为在; 处拆分查询,以使其与Oracle 等使用; 来终止语句的数据库一起运行。 @bladepit:检查工具的设置。
    • 好的,我使用了 squirresql ......但是使用 h2 控制台它可以工作。现在我已经创建了一个函数,但是我怎么能在 sql 中使用这个函数呢?
    【解决方案3】:

    这应该可以,但语法错误表明您的 H2 版本不支持此功能。您使用的是最新版本吗?

    如果不是,那是一个错误。归档。

    作为一种解决方法,用 Java 编写函数,将其编译为 JAR,将 JAR 添加到类路径并与 CREATE ALIAS HTS.TEST FOR "...package.Type..."; 一起使用

    有关示例,请参阅 http://www.h2database.com/html/features.html#user_defined_functions。

    【讨论】:

    • jeah 我正在使用网站上的最新版本 1.3.162。我不明白你在帖子最后一部分的意思。我应该简单地使用该函数创建一个类,然后将其添加到类路径中吗?
    • 是的。有关示例,请参见 h2database.com/html/features.html#user_defined_functions。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2016-08-09
    • 1970-01-01
    • 2020-01-25
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多