Trong Cơ sở dữ liệu Oracle, JSON_VALUE()
hàm tìm một giá trị JSON vô hướng được chỉ định trong dữ liệu JSON và trả về nó dưới dạng giá trị SQL.
Cú pháp
Cú pháp như sau:
JSON_VALUE
( expr [ FORMAT JSON ], JSON_basic_path_expression
[ JSON_value_returning_clause ] [ JSON_value_on_error_clause ]
[ JSON_value_on_empty_clause ][ JSON_value_on_mismatch_clause ]
)
Ở đâu:
-
expr
là tài liệu JSON mà bạn muốn truy vấn -
JSON_basic_path_expression
là biểu thức đường dẫn SQL / JSON. Biểu thức đường dẫn này được sử dụng để đánh giáexpr
và tìm một giá trị JSON vô hướng phù hợp hoặc thỏa mãn biểu thức đường dẫn. -
JSON_query_returning_clause
chỉ định kiểu dữ liệu và định dạng của giá trị được trả về bởi hàm. -
JSON_query_on_error_clause
chỉ định giá trị được trả về khi một số lỗi nhất định xảy ra. -
JSON_query_on_empty_clause
chỉ định giá trị được trả về nếu không tìm thấy kết quả khớp nào khi dữ liệu JSON được đánh giá bằng cách sử dụng biểu thức đường dẫn SQL / JSON. -
JSON_value_on_mismatch_clause
có thể được sử dụng để chỉ định bỏ qua, lỗi hoặc null cho các trường hợp lỗi như dữ liệu bổ sung, dữ liệu bị thiếu và lỗi loại. Nó có thể được áp dụng chung hoặc theo từng trường hợp.
Xem tài liệu Oracle để biết giải thích chi tiết về các điều khoản tùy chọn.
Ví dụ
Dưới đây là một ví dụ để minh họa cách JSON_VALUE()
chức năng hoạt động:
SELECT
JSON_VALUE('{a:1, b:2, c:3}', '$.b')
FROM DUAL;
Kết quả:
2
Trong trường hợp này, tôi đã chỉ định $.b
để trả về giá trị vô hướng tại b
.
Dưới đây là một ví dụ về việc trả về một giá trị từ một mảng:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[2]')
FROM DUAL;
Kết quả:
c
Mảng dựa trên 0 và vì vậy $[2]
trả về phần tử mảng thứ ba.
Xử lý lỗi
Có ba mệnh đề mà bạn có thể sử dụng để chỉ định những gì sẽ trả lại bất cứ khi nào xảy ra một số loại lỗi nhất định. Các mệnh đề là:
-
NULL
ON
ERROR
- Trả về null khi xảy ra lỗi. Đây là mặc định. -
ERROR
ON
ERROR
- Trả về lỗi Oracle thích hợp khi xảy ra lỗi. -
DEFAULT
literal
ON
ERROR
- Trả vềliteral
khi xảy ra lỗi. Kiểu dữ liệu củaliteral
phải khớp với kiểu dữ liệu của giá trị mà hàm trả về.
Đây là một ví dụ:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' NULL ON ERROR) AS "r1",
JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Oops!' ON ERROR) AS "r2"
FROM DUAL;
Kết quả:
r1 r2 _______ ________ null Oops!
Đây là với ERROR ON ERROR
mệnh đề:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' ERROR ON ERROR)
FROM DUAL;
Kết quả:
Error report - ORA-40462: JSON_VALUE evaluated to no value
Các điều khoản lỗi ở trên dùng để xử lý các lỗi sau:
- Đối số đầu tiên không phải là dữ liệu JSON được định dạng tốt bằng cách sử dụng cú pháp JSON chặt chẽ hoặc lỏng lẻo
- Giá trị nonscalar được tìm thấy khi dữ liệu JSON được đánh giá bằng cách sử dụng biểu thức đường dẫn SQL / JSON
- Không tìm thấy kết quả phù hợp nào khi dữ liệu JSON được đánh giá bằng cách sử dụng biểu thức đường dẫn SQL / JSON. Bạn có thể ghi đè hành vi cho loại lỗi này bằng cách chỉ định
JSON_value_on_empty_clause
. - Kiểu dữ liệu giá trị trả về không đủ lớn để chứa giá trị trả về
Xử lý kết quả trống
Bạn cũng có thể sử dụng một mệnh đề để chỉ định giá trị được trả về nếu không tìm thấy kết quả phù hợp nào. Điều khoản này cho phép bạn chỉ định một kết quả khác cho loại lỗi này với kết quả được chỉ định với các điều khoản lỗi.
Các mệnh đề này là:
-
NULL
ON
EMPTY
- Trả về giá trị rỗng khi không tìm thấy kết quả phù hợp nào. -
ERROR
ON
EMPTY
- Trả về lỗi Oracle thích hợp khi không tìm thấy kết quả phù hợp nào. -
DEFAULT
literal
ON
EMPTY
- Trả vềliteral
khi không tìm thấy kết quả phù hợp. Kiểu dữ liệu củaliteral
phải khớp với kiểu dữ liệu của giá trị mà hàm này trả về.
Ví dụ:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Dang!' ON EMPTY)
FROM DUAL;
Kết quả:
Dang!
Nếu bạn bỏ qua mệnh đề này, thì mệnh đề lỗi sẽ xác định giá trị được trả về khi không tìm thấy kết quả phù hợp nào.