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:
-
exprlà tài liệu JSON mà bạn muốn truy vấn -
JSON_basic_path_expressionlà biểu thức đường dẫn SQL / JSON. Biểu thức đường dẫn này được sử dụng để đánh giáexprvà 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_clausechỉ đị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_clausechỉ định giá trị được trả về khi một số lỗi nhất định xảy ra. -
JSON_query_on_empty_clausechỉ đị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_clausecó 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à:
-
NULLONERROR- Trả về null khi xảy ra lỗi. Đây là mặc định. -
ERRORONERROR- Trả về lỗi Oracle thích hợp khi xảy ra lỗi. -
DEFAULTliteralONERROR- Trả vềliteralkhi xảy ra lỗi. Kiểu dữ liệu củaliteralphả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à:
-
NULLONEMPTY- Trả về giá trị rỗng khi không tìm thấy kết quả phù hợp nào. -
ERRORONEMPTY- Trả về lỗi Oracle thích hợp khi không tìm thấy kết quả phù hợp nào. -
DEFAULTliteralONEMPTY- Trả vềliteralkhi không tìm thấy kết quả phù hợp. Kiểu dữ liệu củaliteralphả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.