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ủaliteral
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.