2011-12-14 86 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; 
} 
';