Usando JSON no Oracle Database 12c

Usando JSON no Oracle Database 12c

Manipulação de Dados JSON no Oracle Database 12c: Um Guia Prático

O JavaScript Object Notation (JSON) é um formato leve e de fácil leitura para a serialização de dados estruturados. Usado amplamente para troca de informações entre sistemas, o JSON é independente de linguagem de programação, adotando um formato compacto que segue a estrutura de pares atributo-valor. Desde sua criação por Douglas Crockford em 2000, o JSON se tornou um padrão de referência, definido nos documentos RFC 7159 e ECMA-404.

Com o Oracle Database 12c, o suporte nativo a dados JSON traz uma poderosa integração entre a flexibilidade desse formato e as funcionalidades robustas dos bancos de dados relacionais, como transações, indexação, consultas declarativas e visualizações. Essa compatibilidade foi introduzida a partir da versão 12.1.0.2, permitindo aos desenvolvedores manipular dados JSON diretamente dentro de suas bases de dados.

No JSON, um valor pode assumir várias formas, como objeto, array, número, string ou até mesmo os literais false, null ou true, tornando-o extremamente versátil para diversas aplicações.

Neste post, iremos criar e manipular informações em formato JSON, explorando seus principais usos e como integrá-lo de forma eficaz no Oracle Database 12c.

Pré-Requisitos

Neste Lab iremos criar e manipular informações em formato JSON, sendo necessário:

  • Oracle Database 12.1.0.2 ou superior.

 

Descrição

Criando uma tabela relacional com uma coluna JSON e incluindo uma restrição de verificação ‘is json’ para garantir que a coluna contenha apenas dados JSON:

create table cep_json (
codigo number not null,
cep varchar2(2000),
constraint cep_json_pk primary key (codigo),
constraint cep_json_check_json check (cep is json)
);

 

Verificando a tabela criada, conclui-se que nenhum tipo de dados novo foi adicionado ao Oracle para o JSON, sendo utilizado um tipo já existente VARCHAR2:

select * from user_json_columns;
TABLE_NAME COLUMN_NAME FORMAT DATA_TYPE
---------- ----------- ------ ---------
CEP_JSON   CEP         TEXT   VARCHAR2

Para este artigo utiliza-se JSON contendo informações sobre os CEPs da Avenida T-63, os dados foram obtidos por meio da API ViaCep, disponível no site https://viacep.com.br/, a consulta foi realizada utilizando a seguinte chave de busca:

https://viacep.com.br/ws/GO/Goiania/Avenida+t+63/json/

A informação obtida foi inserida na tabela cep_json:

insert into cep_json (codigo, cep) values (1,
'{
"cep": "74280-230",
"logradouro": "Avenida T 63",
"complemento": "de 1370 a 1954 - lado par",
"bairro": "Nova Suiça",
"localidade": "Goiânia",
"uf": "GO",
"unidade": "",
"ibge": "5208707",
"gia": ""
}');

Ao inserir os dados fora do formato JSON obtemos a seguinte mensagem de erro:

Erro a partir da linha : 1 no comando –
insert into cep_json (codigo, cep) values (11,'”cep”: “74823-345”,’)
Relatório de erros –
ORA-02290: restrição de verificação (SYS.CEP_JSON_CHECK_JSON) violada

Para consultar os dados armazenados na tabela cep_json, temos duas opções de consulta, a forma tradicional ou o formato Dot-Notation:

select * from cep_json;
CODIGO CEP
---------- -----------------------
1 "{
"cep": "74280-230",
"logradouro": "Avenida T 63",
"complemento": "de 1370 a 1954 - lado par",
"bairro": "Nova Suiça",
"localidade": "Goiânia",
"uf": "GO",
"unidade": "",
"ibge": "5208707",
"gia": ""
}"

select j.cep.cep, j.cep.logradouro, j.cep.bairro from cep_json j;

CEP LOGRADOURO BAIRRO
——— ———— ———
74280-230 Avenida T 63 Nova Suíça
74335-102 Avenida T 63 Anhanguera

Nas consultas utilizando o JSON, é possível utilizar condições SQL para filtrar as informações desejadas:

  • IS JSON e IS NOT JSON – Para testar se os dados são ou não do tipo JSON.
  • JSON_EXISTS – Para testar existência de um valor especifico dentro dos dados JSON.
select * from cep_json where cep is json;

Para procurar a existência do atributo “complemento” na coluna CEP e valor “Setor Bueno” no atributo “bairro”, utilizaremos a condição JSON_EXISTS:

select * from cep_json where json_exists(cep,'$[*].complemento');
select * from cep_json where json_exists(cep,'$?(@.bairro == "Setor Bueno")');
select * from cep_json where json_exists(cep,'$?(@.bairro like "%Bueno")');

Outra forma de pesquisar um valor nos dados JSON é utilizando a função JSON_TEXTCONTAINS, porém, este recurso só estará disponível ativando o índice de contexto, caso contrário receberá a seguinte mensagem de erro:

ERRO na linha 1:
ORA-40467: JSON_TEXTCONTAINS() não pode ser avaliado sem um índice de contexto ativado por JSON

Para a criação do index de contexto:

create index idx_json_cep_01
on cep_json (cep)
indextype is CTXSYS.CONTEXT
parameters ('SECTION GROUP CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT)');

Para consultar o valor “Bueno” na coluna CEP, no atributo “bairro” dos dados JSON:

select * from cep_json where json_textcontains(cep,'$.bairro','Bueno');

Para consultar o valor “Bueno” na coluna CEP, por todos os atributos existentes nos dados JSON.

select * from cep_json where json_textcontains(cep,'$','Bueno');
select * from cep_json where json_textcontains(cep,'$','74%');

Conclui-se que o banco de dados Oracle 12c facilita a utilização e manipulação de dados no formato JSON, dessa forma, torna-se versátil o armazenamento de dados de terceiros, pois viabiliza o armazenamento e a recuperação de um objeto JSON, utilizando apenas uma tabela simples com duas ou mais colunas.


Referências

Documentação relacionada a Dot Nation: https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adjsn/simple-dot-notation-access-to-json-data.html#GUID-7249417B-A337-4854-8040-192D5CEFD576

JSON in Oracle Database: https://docs.oracle.com/database/121/ADXDB/json.htm#ADXDB6246

Introducing JSON: https://www.json.org/

RFC 7159: https://tools.ietf.org/html/rfc7159

ECMA-404: https://www.ecma-international.org/publications/standards/Ecma-404.htm

COMENTÁRIOS

Política de Privacidade e Termos de Uso de Dados - Dataunique Tecnologia da Informação LTDA

A Dataunique Tecnologia da Informação LTDA, empresa devidamente registrada sob o CNPJ 15.179.495/0001-35, compromete-se a proteger a privacidade e segurança dos dados pessoais de seus usuários. Esta política descreve como coletamos, usamos, compartilhamos e protegemos as informações pessoais fornecidas por você.

1. Informações Coletadas

1.1. A Dataunique coleta informações fornecidas voluntariamente por você, como nome, endereço, e-mail, número de telefone, entre outras, durante o cadastro ou utilização de nossos serviços.

1.2. Dados de acesso e utilização de nossos serviços, como endereço IP, tipo de navegador, páginas visitadas e tempo de permanência, podem ser automaticamente registrados para melhorar a qualidade dos serviços oferecidos.

2. Uso de Informações

2.1. As informações coletadas são utilizadas para fornecer, manter, proteger e melhorar nossos serviços, bem como para desenvolver novos serviços.

2.2. Podemos utilizar seus dados para personalizar conteúdos, oferecer suporte ao cliente, enviar atualizações, newsletters e informações sobre novos produtos ou serviços.

3. Compartilhamento de Informações

3.1. A Dataunique não compartilha informações pessoais com terceiros, exceto quando necessário para cumprir obrigações legais, proteger nossos direitos ou em situações autorizadas por você.

4. Segurança de Dados

4.1. Utilizamos medidas de segurança adequadas para proteger suas informações contra acessos não autorizados, alterações, divulgação ou destruição não autorizada.

5. Cookies e Tecnologias Semelhantes

5.1. Utilizamos cookies e tecnologias semelhantes para melhorar a experiência do usuário, analisar o tráfego e personalizar conteúdos.

6. Seus Direitos

6.1. Você tem o direito de acessar, corrigir ou excluir suas informações pessoais. Para exercer esses direitos ou esclarecer dúvidas, entre em contato com nosso Encarregado de Proteção de Dados (DPO) através do e-mail [email protected].

7. Alterações na Política de Privacidade

7.1. Reservamo-nos o direito de alterar esta política a qualquer momento, e as alterações serão comunicadas por meio de nossos canais de comunicação.

Ao utilizar nossos serviços, você concorda com os termos desta Política de Privacidade. Recomendamos a leitura regular desta política para se manter informado sobre como tratamos seus dados pessoais.

Dados de Contato:

  • Endereço: Rua T30, 2515, Quadra 99 Lote 11/14, Sala 1404 e 1405, Edif Walk Bueno Business Edif e Lifestyle, SET BUENO, Goiânia – GO, 74215-060.
  • Telefone: (62) 99906-0584
  • Fax/Mensageiro Online: (62) 3223-2257
  • E-mail: [email protected]

Data de vigência: [Data de atualização da política]

Atenciosamente,

Dataunique Tecnologia da Informação LTDA