Мы используем Oracle 12.2 и имеем следующую структуру таблицы:
create table myData
(
id number,
json_data varchar2(4000),
CONSTRAINT checkJson CHECK (json_data IS JSON STRICT WITH UNIQUE KEYS),
CONSTRAINT checkJson_F1 CHECK (json_exists(json_data, '$.FIELD1')),
CONSTRAINT checkJson_F2 CHECK (json_exists(json_data, '$.FIELD2'))
);
Мы используем ограничения (checkJson_F1, checkJson_F2), чтобы гарантировать, что вставки / обновления возможны только при наличии FIELD1 и FIELD2:
insert into myData(id, json_data) values(1, '{"FIELD1" : "abc", "FIELD2" : "def"}'); -- OK
insert into myData(id, json_data) values(2, '{"FIELD1" : "abc"}'); -- Error
Есть ли способ проверить наличие несуществующих объектов, например, я хочу ограничить, чтобы следующая вставка генерировала ошибку:
insert into myData(id, json_data) values(1, '{"FIELD1" : "abc", "FIELD2" : "def", "FIELD3" : "def"}');
Другими словами: я хочу проверить ограничениегде я могу ограничить объекты, которые могут храниться в JSON-столбце.Мой псевдокод будет выглядеть так:
CONSTRAINT checkJson_FX CHECK (json_getObjects(json_data, '$.*') in ("FIELD1", "FIELD2"))