我在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中如何看作别名?
答案 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。