Oracle 12c и JSON немножечко...

добавлено: 05 окт 17
понравилось:0
просмотров: 430
комментов: 0

теги:

Автор: Myp3_u_K

немного про JSON и ORACLE 12
create table info_user_v (
  id number primary key -- иднтификатор уникальный
, name varchar2(50) -- наименование 
, json_data varchar2(4000) -- данные JSON 
);


в oracle 12 есть специальное ограничение, чтобы добавлять в поле только данные json формата, и чтобы исключить ошибки со структурой JSON
добавим его к нашей таблице
alter table info_user_v add constraint c_1_json_data check(json_data is json);



заполним таблицу тестовыми данными
в качестве json используем следующую информацию об объекте
{
"title":"book",
"name":"Island",
"autor":{ 
  "firstname":"Robert",
  "firstname":"Stivenson" 
  }
}

insert into info_user_v(id, name, json_data)
values
(1, 'item1', '{
"title":"book",
"name":"Island",
"autor":{ 
  "firstname":"Robert",
  "lastname":"Stivenson" 
  }
}');

insert into info_user_v (id, name, json_data)
values
(2, 'item2', '{
"title":"new book",
"name":"Game of trones",
"autor":{ 
  "firstname":"Robert",
  "lastname":"BArateon" 
  }
}');
commit;

попробуем извлечь данные из наших таблиц
select id, json_value(json_data,'$.title') from info_user_v

1 book
2 new book

select id, json_value(json_data,'$.autor.firstname')
, json_value(json_data,'$.autor.lastname') from info_user_v where json_value(json_data,'$.title') like 'bo%'

1 Robert Stivenson

еще один способ
select id,tt.*  from info_user_v
, JSON_TABLE(json_data,'$.autor'  COLUMNS(firstname varchar2(50 char) path '$.firstname')) tt;

select id,tt.*  from info_user_v
, JSON_TABLE(json_data,'$'  COLUMNS(title varchar2(50 char) path '$.title')) tt where tt.title = 'book'

1 book

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии