Tôi có bảng "EvMetadata" với cột "Siêu dữ liệu" có ràng buộc kiểm tra "IS JSON". Lưu ý rằng bảng và các cột của nó được tạo bằng DOUBLE QUOTES theo thiết kế.Vấn đề truy vấn JSON Oracle 12c với ký hiệu dấu chấm và dấu ngoặc kép
Làm theo SQL hoạt động ở nơi tôi không chỉ định bất kỳ công việc JSON nào được thực hiện bởi Oracle.
select
m."Metadata"
from "EvMetadata" m
Như bạn có thể thấy bên dưới, cột Siêu dữ liệu chỉ hiển thị nội dung của nó, đó là dữ liệu JSON.
Tuy nhiên, tôi nhận được lỗi nếu tôi đã phát hành một truy vấn json như sau.
select
m."Metadata"."FileName"
from "EvMetadata" m
Tôi vừa thêm "Tên tệp" bằng ký hiệu chấm. Như bạn có thể thấy ở trên, "Tên tệp" là trường json hợp lệ. Vậy tại sao lỗi?
Lỗi là
ORA-00.904: "M" "Metadata" "FileName": định danh hợp lệ 00904. 00000 - "% s: định danh hợp lệ".. * Nguyên nhân: * Hành động: Lỗi tại dòng : 2 Cột: 3
Đây có phải là lỗi với hỗ trợ truy vấn JSON của Oracle sử dụng ký hiệu dấu chấm trong một trường hợp cụ thể mà đối tượng cơ sở dữ liệu được khai báo với dấu ngoặc kép không? Lý do tôi nghi ngờ rằng có thể đúng là truy vấn tương đương sau đây, không sử dụng ký pháp chấm, hoạt động.
select
JSON_VALUE(m."Metadata", '$.FileName')
from "EvMetadata" m
Tôi thực sự phải đối mặt với cùng một vấn đề và không tìm thấy bất kỳ câu trả lời có liên quan nào sau giờ tìm kiếm trên web. Hy vọng một tiền thưởng sẽ mang lại sự chú ý đầy đủ ở đó. – ffarquet
Điều gì xảy ra nếu bạn chạy phép chiếu ký hiệu chấm mà không có dấu ngoặc kép? 'chọn m.Metadata.FileName từ" EvMetadata "m' Tôi chỉ thấy dấu chấm công việc mà không có dấu ngoặc kép xung quanh các trường và tôi tưởng tượng rằng các dấu ngoặc kép yêu cầu hỗn hợp là phức tạp thực hiện. – leroyJr
Trong trường hợp của tôi, tôi đã thử cả hai với cùng một vấn đề. Tôi đoán Oracle đối xử với họ theo cùng một cách. Báo giá chỉ có để đảm bảo xử lý chính xác các ký tự đặc biệt. – ffarquet