powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция преобразования строки в ASCII код
11 сообщений из 11, страница 1 из 1
Функция преобразования строки в ASCII код
    #39875077
Miko_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день!

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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;



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


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

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

и еще вопрос по SQL-Навигатору - не пойму как в debugger-е передать строку "Привет!" для отладки этой функции?
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875081
Alexander_Ttl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miko_v, вместо
TMP:= TMP || ASCIISTR(SUBSTR(CODE, LENGTH(CODE), 1));
нужно
TMP:= TMP || ASCIISTR(SUBSTR(CODE, loop_counter, 1));
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875096
Miko_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander_Ttl,

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

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

возвращает

"!"
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875100
Alexander_Ttl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miko_v, перекомпилировать не забыл? ))
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875106
Miko_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander_Ttl,

специально сделал
Код: sql
1.
DROP FUNCTION CHAR_TO_ASCIISTR;



потом создал заново - все равно не работает так как нужно.
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875109
Alexander_Ttl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И там другую функцию нужно использовать, не ASCIISTR, а что-нибудь вроде
TMP:= TMP || '\'||ASCII(SUBSTR(CODE, loop_counter, 1));
ну и использовать ключевые слова в названиях переменных - моветон, даже если код компилируется при этом
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875116
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придумайте какую-то более реальную задачу для тренировки.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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> 
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875158
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miko_vAlexander_Ttl,

специально сделал
Код: sql
1.
DROP FUNCTION CHAR_TO_ASCIISTR;



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

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$ 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!
...
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875203
Miko_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander_Ttl,

Cупер! так работает! Большое спасибо за подсказки!
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875206
Miko_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm, Vadim Lejnin

- тоже большое спасибо! Все получилось :)
...
Рейтинг: 0 / 0
Функция преобразования строки в ASCII код
    #39875226
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_Ttlиспользовать ключевые слова в названиях переменных - моветонОгласите весь список!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция преобразования строки в ASCII код
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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