В Oracle Database, DECOMPOSE()
функцията връща резултата от прилагането на едно от декомпозиции на Unicode към неговия низ аргумент. Разлагането се определя от втория (незадължителен) аргумент.
Това е обратното на COMPOSE()
функция.
Синтаксис
Синтаксисът е така:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
Където и двата аргумента могат да бъдат всеки от CHAR
, VARCHAR2
, NCHAR
или NVARCHAR2
типове данни или тип, който може да бъде имплицитно преобразуван в VARCHAR2
или NVARCHAR2
.
Относно втория (незадължителен) аргумент:
CANONICAL
води до канонична декомпозиция, както е описано в стандартната дефиниция на Unicode D68, и връща низ във формата за нормализиране на NFD.COMPATIBILITY
води до разлагане на съвместимост, както е описано в стандартната дефиниция на Unicode D65, и връща низ във формата за нормализиране на NFKD.
Поведението по подразбиране е да се приложи каноничната декомпозиция.
Пример
Ето един пример:
SELECT DECOMPOSE('ã') FROM DUAL;
Резултат:
ã
Следният пример обаче е по-добра демонстрация:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;
Резултат:
a\0303
Тук използвахме ASCIISTR()
за да върнете ASCII версия на резултата от DECOMPOSE()
в набора от знаци на базата данни.
Ето какво се случва, ако използваме ASCIISTR()
без DECOMPOSE()
:
SELECT ASCIISTR('ã') FROM DUAL;
Резултат:
\00E3
Символи, които не са Unicode
Ако наборът от символи на аргумента не е един от наборите от символи на Unicode, аргументът се връща непроменен.
Пример:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;
Резултат:
a
Нулев аргумент
Ако аргументът е null
, резултатът е null
:
SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;
Резултат:
null
По подразбиране SQLcl и SQL*Plus връщат празно пространство, когато се появи нулева стойност в резултат на SQL SELECT
изявление.
Въпреки това, можете да използвате SET NULL
за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null
трябва да бъдат върнати.
Невалиден брой аргументи
Извикване на DECOMPOSE()
без никакви аргументи води до грешка:
SELECT DECOMPOSE()
FROM DUAL;
Резултат:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
И предаването на твърде много аргументи също води до грешка:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;
Резултат:
Error report - ORA-12702: invalid NLS parameter string used in SQL function