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

Hàm JSON_TABLE () trong Oracle

Trong Cơ sở dữ liệu Oracle, JSON_TABLE() hàm tạo một dạng xem quan hệ của dữ liệu JSON. Nó cho phép bạn trình bày các giá trị trong tài liệu JSON ở định dạng bảng - dưới dạng hàng và cột.

Cú pháp

Cú pháp như sau:

JSON_TABLE
  ( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
    [ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ] 
    JSON_columns_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.
  • 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ả phù hợp nào.
  • JSON_columns_clause xác định các cột trong bảng quan hệ ảo do hàm trả về.

JSON_TABLE() chỉ có thể được sử dụng trong FROM mệnh đề của một SELECT tuyên bố.

Ví dụ

Dưới đây là một ví dụ để chứng minh cách nó hoạt động:

SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c));

Kết quả:

   A    B    C 
____ ____ ____ 
1    2    3    

Đây là nó với nhiều dữ liệu hơn một chút:

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]', 
    '$[*]' 
    COLUMNS(a, b, c)
    );

Kết quả:

   A    B    C 
____ ____ ____ 
1    2    3    
4    5    6    
7    8    9   

Ít cột hơn

Đây là điều sẽ xảy ra nếu chúng tôi giảm số lượng cột được chỉ định trong COLUMNS mệnh đề:

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]', 
    '$[*]' 
    COLUMNS(a, b)
    );

Kết quả:

   A    B 
____ ____ 
1    2    
4    5    
7    8    

Chúng ta có thể đạt được kết quả tương tự bằng cách chỉ định các cột đã chọn trong SELECT danh sách:

SELECT a, b
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]', 
    '$[*]' 
    COLUMNS(a, b, c)
    );

Kết quả:

   A    B 
____ ____ 
1    2    
4    5    
7    8    

Chọn hàng cụ thể

Chúng ta có thể sử dụng các mệnh đề như WHERE để chỉ chọn những hàng đáp ứng một tiêu chí nhất định:

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]', 
    '$[*]' 
    COLUMNS(a, b, c)
    )
WHERE b = 5;

Kết quả:

   A    B    C 
____ ____ ____ 
4    5    6    

Xử lý lỗi

Chúng ta có thể sử dụng các mệnh đề sau để xử lý lỗi:

  • NULL ON ERROR
    • Nếu đầu vào không phải là JSON định dạng tốt, sẽ không có thêm hàng nào được trả về từ thời điểm phát hiện lỗi.
    • Nếu không tìm thấy kết quả phù hợp nào khi biểu thức đường dẫn hàng được đánh giá, thì không có hàng nào được trả về.
    • Đặt hành vi lỗi mặc định cho tất cả các biểu thức cột thành NULL ON ERROR
  • ERROR ON ERROR
    • Nếu đầu vào không phải là JSON định dạng tốt, thì sẽ xảy ra lỗi.
    • Nếu không tìm thấy kết quả phù hợp nào khi biểu thức đường dẫn hàng được đánh giá, lỗi sẽ xuất hiện
    • Đặt hành vi lỗi mặc định cho tất cả các biểu thức cột thành ERROR ON ERROR

Dưới đây là ví dụ về NULL ON ERROR :

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]', 
    '$[*]'
    NULL ON ERROR
    COLUMNS(a, b, c)
    );

Kết quả:

   A    B    C 
____ ____ ____ 
1    2    3    
4    5    6    

Kể từ JSON_TABLE() chức năng hỗ trợ đánh giá luồng, các hàng có thể được trả lại trước khi gặp phải phần đầu vào có lỗi. Đó chính xác là những gì chúng ta có thể thấy với ví dụ này - chúng ta có hai hàng đầu tiên, nhưng không phải hàng thứ ba (do phần đó của JSON không được JSON định dạng tốt).

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

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]', 
    '$[*]'
    ERROR ON ERROR
    COLUMNS(a, b, c)
    );

Kết quả:

Error report -
ORA-40441: JSON syntax error

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ề.

Xem tài liệu Oracle để biết thêm thông tin về JSON_TABLE() chức năng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng kép trong Oracle là gì?

  2. Oracle REGEXP_LIKE và ranh giới từ

  3. Cách thực hiện một thủ tục với thủ tục DBMS_SCHEDULER.CREATE_JOB

  4. Cách sử dụng hàm NVL () trong Oracle

  5. lỗi:ORA-65096:tên người dùng hoặc vai trò thông thường không hợp lệ trong oracle