在Oracle的h2中创建函数

时间:2011-12-14 08:29:51

标签: java database oracle function h2

我在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“创建ALIAS HTS.TEST AS [] $$       String nextPrime(String value){       return null“       SQL语句“CREATE ALIAS HTS.TEST AS [] $$”中的语法错误       String nextPrime(String value){       返回null“[42000-162]

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

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

3 个答案:

答案 0 :(得分:7)

使用'作为转义序列而不是$$。如果你想使用转义序列使用$$。所以代码看起来像:

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

答案 1 :(得分:2)

我无法重现这个问题。你是怎么做这个陈述的?可能你用一个只发送部分查询的工具来运行语句?或者可能在'$$'之前有一个'特殊字符'(某种unicode空间)?我试过这个:

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

你可以在H2控制台再试一次吗?

答案 2 :(得分:1)

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

如果没有,那就是一个错误。归档。

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

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