Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja DECOMPOSE() w Oracle

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przeliterować rok podczas formatowania daty w Oracle

  2. Jak debugować ORA-01775:zapętlenie łańcucha synonimów?

  3. Obsługa wielu języków w 11i/R12

  4. Jak wymusić przypadek pascala dzięki obsłudze Oracle Entity Framework?

  5. Java - Jak wywołać procedurę wyroczni z niestandardowymi typami?