Oracle 12 c эквивалент C# Encoding.ASCII.GetBytes - PullRequest
2 голосов
/ 10 июля 2020

Я пытаюсь использовать c функцию C# Encoding.ASCII.GetBytes в Oracle 12 c. Я почти там, но не могу понять, почему я получаю следующие результаты:

Oracle

declare
  l_string                varchar2(4000) := 'Test';
begin
  dbms_output.put_line(utl_raw.cast_to_raw(l_string));
end;

Результат:

54657374

C#

internal static string ConvertTest()
{
    var inputString = "Test";
    Console.WriteLine(BitConverter.ToString(Encoding.ASCII.GetBytes(inputString)));
}

Результат:

54-65-73-74

Кажется, я почти у цели, но я не могу понять, почему C# имеет '-' между каждым байтом, а Oracle нет.

Есть ли функция Oracle для репликации вывод из C#?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Мне кажется, я гнался не за то!

utl_raw.cast_to_raw эквивалентно Encoding.ASCII.GetBytes (). Это BitConverter.ToString, который фактически вставляет '-' между каждым байтом.

Спасибо за вашу помощь!

0 голосов
/ 11 июля 2020

utl_raw.cast_to_raw не ставит '-' между байтовым кодом каждого символа. Я не думаю, что есть прямой способ получить серию байтовых кодов в ожидаемом формате.

Одно решение может заключаться в том, чтобы вы oop проходили через каждый символ и добавляли '-' после каждой итерации.

Пример кода -

declare
  l_string                varchar2(4000) := 'Test';
  l_result                varchar2(4000) := '';
begin
  for idx in 1 .. length(l_string)
  loop
     l_result := l_result || utl_raw.cast_to_raw(SUBSTR(l_string,idx,1));
     if idx != length(l_string) then
         l_result := l_result || '-';
     end if;
  end loop;
  dbms_output.put_line(l_result);
end;
...