W bazie danych Oracle DECOMPOSE()
funkcja zwraca wynik zastosowania jednej z dekompozycji Unicode do swojego argumentu ciągu. Rozkład jest określony przez drugi (opcjonalny) argument.
Jest to przeciwieństwo COMPOSE()
funkcja.
Składnia
Składnia wygląda tak:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
Gdzie oba argumenty mogą być dowolnymi CHAR
, VARCHAR2
, NCHAR
lub NVARCHAR2
typy danych lub typ, który można niejawnie przekonwertować na VARCHAR2
lub NVARCHAR2
.
Odnośnie (opcjonalnego) drugiego argumentu:
CANONICAL
powoduje rozkład kanoniczny, zgodnie z opisem w definicji standardu Unicode D68, i zwraca ciąg w postaci normalizacji NFD.COMPATIBILITY
powoduje rozkład zgodności, zgodnie z opisem w definicji standardu Unicode D65, i zwraca ciąg w postaci normalizacji NFKD.
Domyślnym zachowaniem jest zastosowanie rozkładu kanonicznego.
Przykład
Oto przykład:
SELECT DECOMPOSE('ã') FROM DUAL;
Wynik:
ã
Jednak poniższy przykład jest lepszą demonstracją:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;
Wynik:
a\0303
Tutaj użyliśmy ASCIISTR()
aby zwrócić wersję ASCII wyniku DECOMPOSE()
w zestawie znaków bazy danych.
Oto, co się stanie, jeśli użyjemy ASCIISTR()
bez DECOMPOSE()
:
SELECT ASCIISTR('ã') FROM DUAL;
Wynik:
\00E3
Znaki inne niż Unicode
Jeśli zestaw znaków argumentu nie jest jednym z zestawów znaków Unicode, argument jest zwracany w postaci niezmienionej.
Przykład:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;
Wynik:
a
Argument zerowy
Jeśli argument jest null
, wynik to null
:
SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;
Wynik:
null
Domyślnie SQLcl i SQL*Plus zwracają spację za każdym razem, gdy w wyniku SELECT
wystąpi wartość null oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Nieprawidłowa liczba argumentów
Wywołanie DECOMPOSE()
bez żadnych argumentów powoduje błąd:
SELECT DECOMPOSE()
FROM DUAL;
Wynik:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Przekazywanie zbyt wielu argumentów również skutkuje błędem:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;
Wynik:
Error report - ORA-12702: invalid NLS parameter string used in SQL function