Я пытаюсь извлечь данные из таблицы Oracle. Столбец определен как char (40) и содержит расширенные значения ASCII. В настоящее время в SQL * Plus расширенные символы отображаются в виде перевернутого вопросительного знака. Мне нужно иметь возможность извлечь символы ASCII, которые имеют десятичное значение> 128 и отображаются в расширенной или 8-битной схеме кодирования.
- токовый выход
выберите myfield из Mytable;
b@¿pmxJ¿¿¿.¿¿¿P9¿¿¿¿¿+¿¿w) ¿@ Y @ B¿¿¿
- десятичные значения
Тип = 96 Лен = 40:
98,64,189,112,109,120,74,156,27,231,167,46,224,28,130,183,80,57,202,232,150,239,144,43,169,1,186,119,41,254,64,89,64,12,19,8,66,194,136,210
- База данных символов
SQL> select * from NLS_DATABASE_PARAMETERS;
ПАРАМЕТР ЗНАЧЕНИЕ
------------------------------ ----------------- -----------------------
NLS_CSMIG_SCHEMA_VERSION 5
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS.,
NLS_CHARACTERSET US7ASCII
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
ПАРАМЕТР ЗНАЧЕНИЕ
------------------------------ ----------------- -----------------------
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT. DD-MON-RR ЧЧ.MI.SSXFF AM
NLS_TIME_TZ_FORMAT ЧЧ.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR ЧЧ.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET UTF8
NLS_RDBMS_VERSION 10.2.0.3.0
У меня нет большого опыта работы с Oracle. Любая помощь будет принята с благодарностью!
Спасибо,
Бреннан
Мне удалось извлечь данные в десятичном формате и обработать их в функции .Net без проблем. Оператор SQL немного запутан. Я пытаюсь написать функцию, чтобы помочь в запросе. У меня проблемы с созданием функции.
текущий оператор SQL:
select DECRYPTDATA(
ASCII(SUBSTR(ACTIONCD,1,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,2,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,3,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,4,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,5,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,6,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,7,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,8,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,9,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,10,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,11,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,12,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,13,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,14,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,15,1)) || ',' ||
ASCII(SUBSTR(ACTIONCD,16,1)), '1' )
from ORDERACTIONS where KEYNUM = 1
Я хотел бы сделать быструю функцию для возврата этой строки.
Ниже приведена функция, которая не будет компилироваться. Есть предложения?
create or replace function ASCIITODEC(p_actioncd VARCHAR2)
return VARCHAR2 is
begin
return ASCII(SUBSTR(p_actioncd,1,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,2,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,3,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,4,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,5,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,6,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,7,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,8,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,9,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,10,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,11,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,12,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,13,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,14,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,15,1)) || ',' ||
ASCII(SUBSTR(p_actioncd,16,1)) )
end ASCIITODEC;
/
Спасибо,
Бреннан