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

Hàm JSON_QUERY () trong Oracle

Trong Cơ sở dữ liệu Oracle, JSON_QUERY() hàm chọn và trả về một hoặc nhiều giá trị từ dữ liệu JSON và trả về các giá trị đó.

Bạn có thể sử dụng hàm để truy xuất các đoạn của tài liệu JSON.

Cú pháp

Cú pháp như sau:

JSON_QUERY
  ( expr [ FORMAT JSON ], JSON_basic_path_expression
    [ JSON_query_returning_clause ] [ JSON_query_wrapper_clause ]
    [ JSON_query_on_error_clause ] [ JSON_query_on_empty_clause ]
  )

Ở đâu:

  • expr là tài liệu JSON mà bạn muốn truy vấn
  • JSON_basic_path_expression là đường dẫn SQL / JSON mà bạn muốn trả về từ tài liệu JSON đó. Hàm sử dụng biểu thức đường dẫn để đánh giá expr và tìm một hoặc nhiều giá trị JSON phù hợp hoặc thỏa mãn biểu thức đường dẫn. Biểu thức đường dẫn phải là một ký tự văn bản.
  • JSON_query_returning_clause chỉ định kiểu dữ liệu và định dạng của chuỗi ký tự được trả về bởi hàm.
  • JSON_query_wrapper_clause kiểm soát xem hàm có bao bọc các giá trị được trả về trong trình bao bọc mảng hay không (dấu ngoặc vuông ([] )).
  • 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.

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_QUERY() chức năng hoạt động:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$')
FROM DUAL;

Kết quả:

{"a":1,"b":2,"c":3}

Việc sử dụng chính ký hiệu đô la sẽ trả về toàn bộ chuỗi dữ liệu JSON.

Với Wrapper

Bạn có thể sử dụng WITH WRAPPER mệnh đề bao bọc kết quả trong một trình bao bọc mảng:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$' WITH WRAPPER)
FROM DUAL;

Kết quả:

[{"a":1,"b":2,"c":3}]

Bạn phải chỉ định mệnh đề này nếu biểu thức đường dẫn khớp với một giá trị vô hướng đơn (giá trị không phải là đối tượng JSON hoặc mảng JSON) hoặc nhiều giá trị thuộc bất kỳ loại nào.

Ví dụ:việc trả về giá trị vô hướng sau phải được thực hiện với WITH WRAPPER mệnh đề:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$.b' WITH WRAPPER)
FROM DUAL;

Kết quả:

[2]

Bỏ qua WITH WRAPPER mệnh đề khi trả về giá trị vô hướng dẫn đến giá trị null được trả về:

SET NULL 'null';
SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$.b')
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 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.

Với Trình gói có Điều kiện

Ngoài ra, bạn có thể sử dụng WITH CONDITIONAL WRAPPER mệnh đề chỉ bao gồm trình bao bọc mảng nếu biểu thức đường dẫn khớp với một giá trị vô hướng đơn hoặc nhiều giá trị thuộc bất kỳ kiểu nào. Nếu biểu thức đường dẫn khớp với một đối tượng JSON hoặc mảng JSON, thì trình bao bọc mảng sẽ bị bỏ qua:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$' WITH CONDITIONAL WRAPPER) AS "r1",
    JSON_QUERY('{a:1, b:2, c:3}', '$.b' WITH CONDITIONAL WRAPPER) AS "r2"
FROM DUAL;

Kết quả:

                    r1     r2 
______________________ ______ 
{"a":1,"b":2,"c":3}    [2]   

Trong trường hợp này, chỉ giá trị vô hướng mới được áp dụng trình bao bọc mảng.

Chỉ cần nói rõ, đây là với một trình bao bọc vô điều kiện:

SELECT 
    JSON_QUERY('{a:1, b:2, c:3}', '$' WITH UNCONDITIONAL WRAPPER) AS "r1",
    JSON_QUERY('{a:1, b:2, c:3}', '$.b' WITH UNCONDITIONAL WRAPPER) AS "r2"
FROM DUAL;

Kết quả:

                      r1     r2 
________________________ ______ 
[{"a":1,"b":2,"c":3}]    [2]   

Lần này cả hai kết quả đều được áp dụng trình bao bọc.

Lưu ý rằng WITH UNCONDITIONAL WRAPPER tương đương với WITH WRAPPER .

Xử lý lỗi

Có năm mệnh đề mà bạn có thể sử dụng để chỉ định nội dung sẽ trả về 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.
  • EMPTY ON ERROR - Việc chỉ định điều khoản này tương đương với việc chỉ định EMPTY ARRAY ON ERROR .
  • EMPTY ARRAY ON ERROR - Trả về một mảng JSON trống ([] ) khi xảy ra lỗi.
  • EMPTY OBJECT ON ERROR - Trả về một đối tượng JSON trống ({} ) khi xảy ra lỗi.

Đây là một ví dụ:

SELECT 
    JSON_QUERY('["a", "b", "c"]', '$[3]' NULL ON ERROR) AS "r1",
    JSON_QUERY('["a", "b", "c"]', '$[3]' EMPTY ON ERROR) AS "r2",
    JSON_QUERY('["a", "b", "c"]', '$[3]' EMPTY OBJECT ON ERROR) AS "r3"
FROM DUAL;

Kết quả:

     r1    r2    r3 
_______ _____ _____ 
null    []    {}   

Đây là với ERROR ON ERROR mệnh đề:

SELECT 
    JSON_QUERY('["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 này 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
  • 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_query_on_empty_clause .
  • Kiểu dữ liệu giá trị trả về không đủ lớn để chứa chuỗi ký tự trả về
  • Hàm đối sánh với một giá trị vô hướng duy nhất hoặc nhiều giá trị thuộc bất kỳ loại nào và một mệnh đề trình bao bọc không được chỉ định

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.
  • EMPTY ON EMPTY - Việc chỉ định điều khoản này tương đương với việc chỉ định EMPTY ARRAY ON EMPTY .
  • EMPTY ARRAY ON EMPTY - Trả về một mảng JSON trống ([] ) khi không tìm thấy kết quả phù hợp nào.
  • EMPTY OBJECT ON EMPTY - Trả về một đối tượng JSON trống ({} ) khi không tìm thấy kết quả phù hợp nào.

Ví dụ:

SELECT 
    JSON_QUERY('["a", "b", "c"]', '$[3]' EMPTY ON EMPTY)
FROM DUAL;

Kết quả:

[]

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. Cơ sở dữ liệu Oracle BLOB sang InputStream trong Java?

  2. Nhận CHIỀU DÀI CỦA NGUYÊN LIỆU DÀI

  3. Cách tạo tệp cuộn chỉ lệnh sql oracle

  4. Cách kết nối cơ sở dữ liệu Oracle từ PHP

  5. Mức lương tối đa thứ n trong Oracle