2011-12-14 92 views
1

我在oracle中有以下功能,我必须将其转换为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; 
} 
$$; 

我得到这个错误:

Error: Syntax Fehler in SQL Befehl "CREATE ALIAS HTS.TEST AS []$$ String nextPrime(String value){ return null" Syntax error in SQL statement "CREATE ALIAS HTS.TEST AS []$$ String nextPrime(String value){ return null" [42000-162]

这是做翻译的正确方法还是我该怎么办?

我已经创建了一个别名(测试者)并且可以执行它。现在,O必须创建解压缩的别名:info。有人可以帮助我的语法等因素如何函数看起来像h2中的别名?

回答

2

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

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

你可以试试H2控制台吗?

+0

+1奇怪的是,错误信息不包含最后一个`}`+`$$`。 – 2011-12-14 10:38:46

1

这应该工作,但语法错误表明您的H2版本不支持这一点。你使用的是最新版本吗?

如果没有,这是一个错误。归档它。

作为一种变通方法,编写函数在Java中,它编译成一个JAR,将JAR添加到类路径,并与CREATE ALIAS HTS.TEST FOR "...package.Type...";

使用它,请参阅http://www.h2database.com/html/features.html#user_defined_functions的一个例子。

+0

jeah我正在使用版本1.3.162网站上的最新版本。我不会在你的帖子的最后部分展示你的意思。我应该简单地使用该函数创建一个类,然后将其添加到类路径中? – bladepit 2011-12-14 09:36:51

+0

是的。有关示例,请参见http://www.h2database.com/html/features.html#user_defined_functions。 – 2011-12-14 10:37:40

5

使用'作为转义序列而不是$$。如果您想使用转义序列,请使用$$。所以代码将如下所示:

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