powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Простая функция, компилируются, но не работает
6 сообщений из 6, страница 1 из 1
Простая функция, компилируются, но не работает
    #38214823
Полено
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
create or replace 
FUNCTION tCYR_TO_HTML_ASCII(IN_STR IN VARCHAR2) RETURN VARCHAR2
AS
result varchar2(2000);
t varchar2(255);
BEGIN
result:='';
for i in 1..length(in_str)
loop

SELECT u into t  
 FROM 
 (  select '%D0%B0' as u, 'а' as c from dual
union select '%D0%B1' as u, 'б' as c from dual
union select '%D0%B2' as u, 'в' as c from dual
union select '%D0%B3' as u, 'г' as c from dual
union select '%D0%B4' as u, 'д' as c from dual
union select '%D0%B5' as u, 'е' as c from dual
union select '%D1%91' as u, 'ё' as c from dual
union select '%D0%B6' as u, 'ж' as c from dual
union select '%D0%B7' as u, 'з' as c from dual
union select '%D0%B8' as u, 'и' as c from dual
union select '%D0%B9' as u, 'й' as c from dual
union select '%D0%BA' as u, 'к' as c from dual
union select '%D0%BB' as u, 'л' as c from dual
union select '%D0%BC' as u, 'м' as c from dual
union select '%D0%BD' as u, 'н' as c from dual
union select '%D0%BE' as u, 'о' as c from dual
union select '%D0%BF' as u, 'п' as c from dual
union select '%D1%80' as u, 'р' as c from dual
union select '%D1%81' as u, 'с' as c from dual
union select '%D1%82' as u, 'т' as c from dual
union select '%D1%83' as u, 'у' as c from dual
union select '%D1%84' as u, 'ф' as c from dual
union select '%D1%85' as u, 'х' as c from dual
union select '%D1%86' as u, 'ц' as c from dual
union select '%D1%87' as u, 'ч' as c from dual
union select '%D1%88' as u, 'ш' as c from dual
union select '%D1%89' as u, 'щ' as c from dual
union select '%D1%8A' as u, 'ъ' as c from dual
union select '%D1%8C' as u, 'ь' as c from dual
union select '%D1%8D' as u, 'э' as c from dual
union select '%D1%8E' as u, 'ю' as c from dual
union select '%D1%8F' as u, 'я' as c from dual
union select '%D0%90' as u, 'А' as c from dual
union select '%D0%91' as u, 'Б' as c from dual
union select '%D0%92' as u, 'В' as c from dual
union select '%D0%93' as u, 'Г' as c from dual
union select '%D0%94' as u, 'Д' as c from dual
union select '%D0%95' as u, 'Е' as c from dual
union select '%D0%81' as u, 'Ё' as c from dual
union select '%D0%96' as u, 'Ж' as c from dual
union select '%D0%97' as u, 'З' as c from dual
union select '%D0%98' as u, 'И' as c from dual
union select '%D0%99' as u, 'Й' as c from dual
union select '%D0%9A' as u, 'К' as c from dual
union select '%D0%9B' as u, 'Л' as c from dual
union select '%D0%9C' as u, 'М' as c from dual
union select '%D0%9D' as u, 'Н' as c from dual
union select '%D0%9E' as u, 'О' as c from dual
union select '%D0%9F' as u, 'П' as c from dual
union select '%D0%A0' as u, 'Р' as c from dual
union select '%D0%A1' as u, 'С' as c from dual
union select '%D0%A2' as u, 'Т' as c from dual
union select '%D0%A3' as u, 'У' as c from dual
union select '%D0%A4' as u, 'Ф' as c from dual
union select '%D0%A5' as u, 'Х' as c from dual
union select '%D0%A6' as u, 'Ц' as c from dual
union select '%D0%A7' as u, 'Ч' as c from dual
union select '%D0%A8' as u, 'Ш' as c from dual
union select '%D0%A9' as u, 'Щ' as c from dual
union select '%D0%AA' as u, 'Ъ' as c from dual
union select '%D0%AC' as u, 'Ь' as c from dual
union select '%D0%AD' as u, 'Э' as c from dual
union select '%D0%AE' as u, 'Ю' as c from dual
UNION SELECT '%D0%AF' AS U, 'Я' AS C FROM DUAL
) where c=substr(in_str,i,1); 

result:=result||t;
end loop;
return result;

end;



select tCYR_TO_HTML_ASCII('Ведомость дефектов') t from dual

возвращает NULL
...
Рейтинг: 0 / 0
Простая функция, компилируются, но не работает
    #38215193
Cepega88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну во первых null потому, что происходит ошибка (no_data_found). нет символа пробел. она выходит если запустить функцию в plsql. И ещё такой способ не очень производительный. на вскидку можно использовать массив
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
CREATE OR REPLACE Function Tcyr_To_Html_Ascii1(In_Str In Varchar2)
  Return Varchar2 As
  Result Varchar2(2000);
  Type Charset Is Table Of Varchar2(6) Index By Varchar2(2);
  Char_Table Charset;
Begin
  Char_Table('Ё') := '%D0%81';
  Char_Table('А') := '%D0%90';
  Char_Table('Б') := '%D0%91';
  Char_Table('В') := '%D0%92';
  Char_Table('Г') := '%D0%93';
  Char_Table('Д') := '%D0%94';
  Char_Table('Е') := '%D0%95';
  Char_Table('Ж') := '%D0%96';
  Char_Table('З') := '%D0%97';
  Char_Table('И') := '%D0%98';
  Char_Table('Й') := '%D0%99';
  Char_Table('К') := '%D0%9A';
  Char_Table('Л') := '%D0%9B';
  Char_Table('М') := '%D0%9C';
  Char_Table('Н') := '%D0%9D';
  Char_Table('О') := '%D0%9E';
  Char_Table('П') := '%D0%9F';
  Char_Table('Р') := '%D0%A0';
  Char_Table('С') := '%D0%A1';
  Char_Table('Т') := '%D0%A2';
  Char_Table('У') := '%D0%A3';
  Char_Table('Ф') := '%D0%A4';
  Char_Table('Х') := '%D0%A5';
  Char_Table('Ц') := '%D0%A6';
  Char_Table('Ч') := '%D0%A7';
  Char_Table('Ш') := '%D0%A8';
  Char_Table('Щ') := '%D0%A9';
  Char_Table('Ъ') := '%D0%AA';
  Char_Table('Ь') := '%D0%AC';
  Char_Table('Э') := '%D0%AD';
  Char_Table('Ю') := '%D0%AE';
  Char_Table('Я') := '%D0%AF';
  Char_Table('а') := '%D0%B0';
  Char_Table('б') := '%D0%B1';
  Char_Table('в') := '%D0%B2';
  Char_Table('г') := '%D0%B3';
  Char_Table('д') := '%D0%B4';
  Char_Table('е') := '%D0%B5';
  Char_Table('ж') := '%D0%B6';
  Char_Table('з') := '%D0%B7';
  Char_Table('и') := '%D0%B8';
  Char_Table('й') := '%D0%B9';
  Char_Table('к') := '%D0%BA';
  Char_Table('л') := '%D0%BB';
  Char_Table('м') := '%D0%BC';
  Char_Table('н') := '%D0%BD';
  Char_Table('о') := '%D0%BE';
  Char_Table('п') := '%D0%BF';
  Char_Table('р') := '%D1%80';
  Char_Table('с') := '%D1%81';
  Char_Table('т') := '%D1%82';
  Char_Table('у') := '%D1%83';
  Char_Table('ф') := '%D1%84';
  Char_Table('х') := '%D1%85';
  Char_Table('ц') := '%D1%86';
  Char_Table('ч') := '%D1%87';
  Char_Table('ш') := '%D1%88';
  Char_Table('щ') := '%D1%89';
  Char_Table('ъ') := '%D1%8A';
  Char_Table('ь') := '%D1%8C';
  Char_Table('э') := '%D1%8D';
  Char_Table('ю') := '%D1%8E';
  Char_Table('я') := '%D1%8F';
  Char_Table('ё') := '%D1%91';

  Result := '';
  For i In 1 .. Length(In_Str) Loop
    Result := Result || Char_Table(Substr(In_Str, i, 1));
  
  End Loop;
  Return Result;
Exception
  When No_Data_Found Then
    Return 'no exists char';
End;


Пробовал запускать вашу и свою фунцию 10000 раз и получил что то вроде 11 сек против 0,2 сек.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
Declare
 i Pls_Integer;
begin
  For i In 1.. 10000 Loop
  :result := tcyr_to_html_ascii1(in_str => :in_str);
  End Loop;
end;
...
Рейтинг: 0 / 0
Простая функция, компилируются, но не работает
    #38215314
non-apexoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем вам нужна такая функция? Похоже, для того, что называют 'url utf-8 encoding'. Для этого не нужно изобретать велосипед:
Код: plsql
1.
2.
3.
4.
5.
6.
declare
  l_url varchar2(100);
begin
  l_url:= utl_url.escape(url=>'http://www.somesite/АБВ', url_charset =>'AL32UTF8');
  dbms_output.put_line(l_url);
end;


Почитать подробней можно здесь.
...
Рейтинг: 0 / 0
Простая функция, компилируются, но не работает
    #38215358
Полено
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
non-apexoidЗачем вам нужна такая функция? Похоже, для того, что называют 'url utf-8 encoding'. Для этого не нужно изобретать велосипед:
Код: plsql
1.
2.
3.
4.
5.
6.
declare
  l_url varchar2(100);
begin
  l_url:= utl_url.escape(url=>'http://www.somesite/АБВ', url_charset =>'AL32UTF8');
  dbms_output.put_line(l_url);
end;


Почитать подробней можно здесь.

Почти что, ф-ция нужна для кодирования имен файлов при скачивании с помощью

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
 owa_util.mime_header( nvl(v_mime,'application/octet'), FALSE );
 

 htp.p('Content-Disposition: attachment; filename='||v_file_name);
                  
                owa_util.http_header_close;
             
               wpg_docload.download_file( Lob_loc );



При этом если в v_file_name будет кирилица то IE превращает в набор UTF, в других браузерах все нормально.
Если использовать utl_url.escape(url=>'http://www.somesite/АБВ', url_charset =>'AL32UTF8'); то пробелы записываются как %20
...
Рейтинг: 0 / 0
Простая функция, компилируются, но не работает
    #38215398
non-apexoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и должно быть. А вас это не устраивает?
...
Рейтинг: 0 / 0
Простая функция, компилируются, но не работает
    #38215534
Полено
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
non-apexoidТак и должно быть. А вас это не устраивает?
Боюсь пользователей не устроит.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Простая функция, компилируются, но не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]