2011-12-14 18 views
1

私はh2に変換する必要があるoracleに以下の関数を持っています。誰でも助けてくれますか?私はこれを行うには見当がつかない: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]

これは翻訳を行う正しい方法ですか、何ができますか?

エイリアス(テスト用のもの)を作成して実行できました。今すぐunpack:infoのエイリアスを作成する必要があります。誰かが私が構文などの原因になるのを助けることができますか?関数はh2のエイリアスとしてどのように見えますか?

答えて

2

問題を再現できません。どのように正確にステートメントを実行しましたか?クエリーの一部しか送信しないツールでこの文を実行している可能性がありますか?あるいは、おそらく '$$'の直前に '特殊文字'(ある種のユニコードスペース)がありますか?私はこれを試しました:

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

あなたはH2コンソールでこれをもう一度試してもよろしいですか?

+0

+1エラーメッセージに最後の '}' + '$$ 'が含まれていないことは奇妙です。 –

+1

これは、H2データベースエンジンが実際に完全な文を取得しなかったため、最初のセミコロン(「ヌル」の後ろ)までしか見つかりませんでした。なぜこれが起こったのかわからない、私はそれがスクリプトを実行するツールに関連していると思う。 –

+0

私は同意します。ツールはおそらく ';'でクエリを分割して、 ';'を使ってステートメントを終了させるOracleのようなデータベースで動作するように設定しました。 @bladepit:あなたのツールの設定を確認してください。 –

1

これは正常に動作するはずですが、構文エラーにより、ご使用のバージョンのH2がこれをサポートしていないことが示唆されます。最新バージョンを使用していますか?

そうでなければ、バグです。ファイルしてください。

は回避策として、JARにそれをコンパイルし、Javaで関数を記述し、クラスパスにJARを追加して、例えばhttp://www.h2database.com/html/features.html#user_defined_functionsを参照してくださいCREATE ALIAS HTS.TEST FOR "...package.Type...";

でそれを使用しています。

+0

jeah im am used version 1.3.162ウェブサイトの最新バージョン。私はあなたの記事の最後の部分で何を意味するのか分かりません。私は単純な関数でクラスを作成し、クラスパスに追加する必要がありますか? – bladepit

+0

はい。例については、http://www.h2database.com/html/features.html#user_defined_functionsを参照してください。 –

5

'$$の代わりにエスケープされたシーケンスとして'を使用してください。その間に、エスケープシーケンスを使用する場合は、$$を使用します。コードは次のようになります。

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

私は繰り返し修飾子についてエラーが出ているので、 'public static'を含める必要はないと思います。 –

関連する問題