Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hàm JSON_VALUE () trong Oracle

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ủa literal 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ủa literal 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi:ORA-01704:chuỗi ký tự quá dài

  2. Hàm tổng hợp trong một khoảng thời gian nhất định

  3. Làm thế nào bạn có thể biết nếu một Gói, Thủ tục hoặc Hàm PL / SQL đang được sử dụng?

  4. Các bảng lịch sử vá lỗi trong Ứng dụng Oracle (11i / R12.1 / R12.2)

  5. Cách tìm bảng nơi thống kê bị khóa