Trong Cơ sở dữ liệu Oracle, DECOMPOSE()
hàm trả về kết quả của việc áp dụng một trong các phép phân tách Unicode cho đối số chuỗi của nó. Sự phân tách được xác định bởi đối số thứ hai (tùy chọn).
Nó đối lập với COMPOSE()
chức năng.
Cú pháp
Cú pháp như sau:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
Trong đó cả hai đối số có thể là bất kỳ CHAR
nào , VARCHAR2
, NCHAR
hoặc NVARCHAR2
kiểu dữ liệu hoặc kiểu có thể được chuyển đổi hoàn toàn thành VARCHAR2
hoặc NVARCHAR2
.
Về đối số thứ hai (tùy chọn):
-
CANONICAL
dẫn đến sự phân tách hợp quy, như được mô tả trong định nghĩa Tiêu chuẩn Unicode D68 và trả về một chuỗi ở dạng chuẩn hóa NFD. -
COMPATIBILITY
dẫn đến phân rã khả năng tương thích, như được mô tả trong định nghĩa Tiêu chuẩn Unicode D65 và trả về một chuỗi ở dạng chuẩn hóa NFKD.
Hành vi mặc định là áp dụng phân tách hợp quy.
Ví dụ
Đây là một ví dụ:
SELECT DECOMPOSE('ã') FROM DUAL;
Kết quả:
ã
Tuy nhiên, ví dụ sau là một minh chứng tốt hơn:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;
Kết quả:
a\0303
Ở đây, chúng tôi đã sử dụng ASCIISTR()
để trả về phiên bản ASCII của kết quả DECOMPOSE()
trong bộ ký tự cơ sở dữ liệu.
Đây là những gì sẽ xảy ra nếu chúng tôi sử dụng ASCIISTR()
không có DECOMPOSE()
:
SELECT ASCIISTR('ã') FROM DUAL;
Kết quả:
\00E3
Các ký tự không phải Unicode
Nếu bộ ký tự của đối số không phải là một trong các bộ ký tự Unicode, thì đối số được trả về không được sửa đổi.
Ví dụ:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;
Kết quả:
a
Đối số rỗng
Nếu đối số là null
, kết quả là null
:
SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;
Kết quả:
null
Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào giá trị null xảy ra do một SELECT
trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL
để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null
nên được trả lại.
Số lượng đối số không hợp lệ
Đang gọi DECOMPOSE()
mà không có bất kỳ đối số nào dẫn đến lỗi:
SELECT DECOMPOSE()
FROM DUAL;
Kết quả:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Và việc chuyển quá nhiều đối số cũng dẫn đến lỗi:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;
Kết quả:
Error report - ORA-12702: invalid NLS parameter string used in SQL function