在Oracle的h2中创建函数

bla*_*pit 2 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;
Run Code Online (Sandbox Code Playgroud)

我曾尝试先做一些基础知识但是这个函数的创建不起作用:

CREATE ALIAS HTS.TEST AS $$
String nextPrime(String value){
 return null;
}
$$;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误:SQL Befehl中的语法Fehler"CREATE ALIAS HTS.TEST AS [ ] $$ String nextPrime(String value){return null"SQL语句中的语法错误"CREATE ALIAS HTS.TEST AS [ ] $$ String nextPrime(String value) {return null"[42000-162]

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

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

Tho*_*ler 7

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

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

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

  • 原因是:H2 数据库引擎实际上并未获取完整的语句,它只获取到第一个分号(“null”之后)。为什么会发生这种情况我不知道,我认为这与运行脚本的工具有关。 (2认同)

小智 7

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

CREATE ALIAS HTS.TEST AS '
public static String nextPrime(String value){
 return null;
}
';
Run Code Online (Sandbox Code Playgroud)