Создать функцию в h2 из Oracle - PullRequest
1 голос
/ 14 декабря 2011

У меня в оракуле есть следующая функция, которую я должен перевести в 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.AS [] $$ String nextPrime (String value) {return null "[42000-162]

Это правильный способ сделать перевод или что я могу сделать?

Я создал псевдоним (тестовый) и мог его выполнить.Теперь нужно создать псевдоним для распаковки: информация.Может ли кто-нибудь помочь мне объяснить синтаксис и т. Д. Как функция выглядит как псевдоним в h2?

Ответы [ 3 ]

7 голосов
/ 14 января 2012

Используйте 'как экранированную последовательность вместо $$.Если вы хотите использовать escape-последовательность, используйте $$.поэтому код будет выглядеть так:

CREATE ALIAS HTS.TEST AS '
public static String nextPrime(String value){
 return null;
}
';
2 голосов
/ 14 декабря 2011

Я не могу воспроизвести проблему.Как именно вы запустили заявление?Возможно, вы запускаете оператор с помощью инструмента, который отправил только часть запроса?Или, возможно, перед «$$» есть «специальный символ» (какой-то юникод-пробел)?Я попробовал это:

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

Не могли бы вы попробовать это снова в консоли H2?

1 голос
/ 14 декабря 2011

Это должно работать, но синтаксическая ошибка предполагает, что ваша версия H2 не поддерживает это. Вы используете последнюю версию?

Если нет, то это ошибка. Подайте его.

В качестве обходного пути, напишите функцию на Java, скомпилируйте ее в JAR, добавьте JAR в путь к классам и используйте ее с CREATE ALIAS HTS.TEST FOR "...package.Type...";

См. http://www.h2database.com/html/features.html#user_defined_functions для примера.

...