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:
CANONICALpowoduje rozkład kanoniczny, zgodnie z opisem w definicji standardu Unicode D68, i zwraca ciąg w postaci normalizacji NFD.COMPATIBILITYpowoduje 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