Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Функция преобразования строки в ASCII код  [new]
Miko_v
Member

Откуда:
Сообщений: 35
Всем добрый день!

Пытаюсь написать функцию, которая преобразовывает строку "Привет!" в "\041F\0440\0438\0432\0435\0442!"

CREATE OR REPLACE FUNCTION CHAR_TO_ASCIISTR(CODE IN VARCHAR2) RETURN VARCHAR2
IS
TMP	VARCHAR2 (32767);
BEGIN
	FOR loop_counter IN 1 .. LENGTH(CODE)
        LOOP
		TMP:= TMP || ASCIISTR(SUBSTR(CODE, LENGTH(CODE), 1));
        END LOOP;
	RETURN(TMP);
END CHAR_TO_ASCIISTR;


Но при её вызове из запроса:
SELECT CHAR_TO_ASCIISTR('Привет!') FROM dual;

возвращает вот что:
!!!!!!!

Прошу вашей помощи, что я делаю не так?
Если что, сильно не пинайте, с Oracle и PL/SQL только начинаю знакомиться.

и еще вопрос по SQL-Навигатору - не пойму как в debugger-е передать строку "Привет!" для отладки этой функции?
11 окт 19, 11:54    [21991995]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
Alexander_Ttl
Member

Откуда: Новосибирск
Сообщений: 158
Miko_v, вместо
TMP:= TMP || ASCIISTR(SUBSTR(CODE, LENGTH(CODE), 1));
нужно
TMP:= TMP || ASCIISTR(SUBSTR(CODE, loop_counter, 1));
11 окт 19, 11:58    [21992001]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
Miko_v
Member

Откуда:
Сообщений: 35
Alexander_Ttl,

Спасибо за подсказку, поправил, только функция все равно вместо

"\041F\0440\0438\0432\0435\0442!"

возвращает

"!"
11 окт 19, 12:10    [21992021]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
Alexander_Ttl
Member

Откуда: Новосибирск
Сообщений: 158
Miko_v, перекомпилировать не забыл? ))
11 окт 19, 12:15    [21992025]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
Miko_v
Member

Откуда:
Сообщений: 35
Alexander_Ttl,

специально сделал
DROP FUNCTION CHAR_TO_ASCIISTR;


потом создал заново - все равно не работает так как нужно.
11 окт 19, 12:21    [21992032]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
Alexander_Ttl
Member

Откуда: Новосибирск
Сообщений: 158
И там другую функцию нужно использовать, не ASCIISTR, а что-нибудь вроде
TMP:= TMP || '\'||ASCII(SUBSTR(CODE, loop_counter, 1));
ну и использовать ключевые слова в названиях переменных - моветон, даже если код компилируется при этом
11 окт 19, 12:23    [21992036]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1637
Придумайте какую-то более реальную задачу для тренировки.

Connected to Oracle Database 18c Express Edition Release 18.0.0.0.0 
Connected as system@//192.168.1.201:1522/XE

SQL> select ASCIISTR('Привет!') from dual;

ASCIISTR('ПРИВЕТ!')
-------------------------------
\041F\0440\0438\0432\0435\0442!

SQL> 
11 окт 19, 12:29    [21992044]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7126
Miko_v
Alexander_Ttl,

специально сделал
DROP FUNCTION CHAR_TO_ASCIISTR;


потом создал заново - все равно не работает так как нужно.


NLS настроено?
ну и версия ...

$ export NLS_LANG=.UTF8
$ sqlplus /
...
SQL*Plus: Release 11.2.0.4.0 Production on Fri Oct 11 13:14:25 2019
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select ASCIISTR('Привет!') from dual;

ASCIISTR('ПРИВЕТ!')
--------------------------------------------------------------------------------
\041F\0440\0438\0432\0435\0442!
...
11 окт 19, 13:16    [21992093]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
Miko_v
Member

Откуда:
Сообщений: 35
Alexander_Ttl,

Cупер! так работает! Большое спасибо за подсказки!
11 окт 19, 14:02    [21992144]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
Miko_v
Member

Откуда:
Сообщений: 35
dmdmdm, Vadim Lejnin

- тоже большое спасибо! Все получилось :)
11 окт 19, 14:04    [21992149]     Ответить | Цитировать Сообщить модератору
 Re: Функция преобразования строки в ASCII код  [new]
-2-
Member

Откуда:
Сообщений: 15330
Alexander_Ttl
использовать ключевые слова в названиях переменных - моветон
Огласите весь список!
11 окт 19, 14:24    [21992171]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить