Di Oracle Database, DECOMPOSE()
fungsi mengembalikan hasil penerapan salah satu dekomposisi Unicode ke argumen stringnya. Dekomposisi ditentukan oleh argumen (opsional) kedua.
Ini kebalikan dari COMPOSE()
fungsi.
Sintaks
Sintaksnya seperti ini:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
Di mana kedua argumen dapat berupa salah satu dari CHAR
, VARCHAR2
, NCHAR
, atau NVARCHAR2
tipe data, atau tipe yang dapat dikonversi secara implisit menjadi VARCHAR2
atau NVARCHAR2
.
Mengenai argumen kedua (opsional):
CANONICAL
menghasilkan dekomposisi kanonik, seperti yang dijelaskan dalam definisi Standar Unicode D68, dan mengembalikan string dalam bentuk normalisasi NFD.COMPATIBILITY
menghasilkan dekomposisi kompatibilitas, seperti yang dijelaskan dalam definisi Standar Unicode D65, dan mengembalikan string dalam bentuk normalisasi NFKD.
Perilaku default adalah menerapkan dekomposisi kanonik.
Contoh
Ini contohnya:
SELECT DECOMPOSE('ã') FROM DUAL;
Hasil:
ã
Namun, contoh berikut adalah demonstrasi yang lebih baik:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;
Hasil:
a\0303
Di sini, kami menggunakan ASCIISTR()
untuk mengembalikan versi ASCII dari hasil DECOMPOSE()
dalam kumpulan karakter basis data.
Inilah yang terjadi jika kita menggunakan ASCIISTR()
tanpa DECOMPOSE()
:
SELECT ASCIISTR('ã') FROM DUAL;
Hasil:
\00E3
Karakter Non Unicode
Jika kumpulan karakter argumen bukan salah satu kumpulan karakter Unicode, argumen dikembalikan tanpa dimodifikasi.
Contoh:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;
Hasil:
a
Argumen Null
Jika argumennya null
, hasilnya null
:
SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;
Hasil:
null
Secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali nilai nol muncul sebagai akibat dari SELECT
SQL pernyataan.
Namun, Anda dapat menggunakan SET NULL
untuk menentukan string berbeda yang akan dikembalikan. Di sini saya menetapkan bahwa string null
harus dikembalikan.
Jumlah Argumen Tidak Valid
Memanggil DECOMPOSE()
tanpa argumen apa pun menghasilkan kesalahan:
SELECT DECOMPOSE()
FROM DUAL;
Hasil:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Dan meneruskan terlalu banyak argumen juga menghasilkan kesalahan:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;
Hasil:
Error report - ORA-12702: invalid NLS parameter string used in SQL function