Olá, amantes de tecnologia! Vamos misturar um pouco de JSON, Oracle e PHP hoje?

Criando a tabela

Vamos começar criando uma tabela simples no Oracle 19c para armazenar nosso JSON.

CREATE TABLE pessoas (
    id NUMBER GENERATED BY DEFAULT AS IDENTITY,
    dados CLOB CHECK (dados IS JSON),
    CONSTRAINT pessoas_pk PRIMARY KEY (id)
);

Esse comando SQL cria uma tabela chamada ‘pessoas’ com duas colunas: ‘id’, que é a chave primária auto incrementada, e ‘dados’, que é onde armazenaremos nosso JSON.

Inserindo dados JSON

Vamos inserir algum dado JSON.

<?php
$person_json = json_encode([
    'nome' => 'José',
    'idade' => 32,
    'cidade' => 'São Paulo'
]);

$query = 'INSERT INTO pessoas (dados) VALUES (:dados)';
$compiled = oci_parse($connection, $query);

oci_bind_by_name($compiled, ':dados', $person_json);
oci_execute($compiled);
?>

Esse código cria um JSON com informações de uma pessoa e insere na nossa tabela.

Consultando e atualizando dados

Para consultar os dados, podemos usar o JSON_VALUE do Oracle.

<?php
$query = 'SELECT JSON_VALUE(dados, \'$.nome\') as nome FROM pessoas WHERE id = :id';
$compiled = oci_parse($connection, $query);

$id = 1;
oci_bind_by_name($compiled, ':id', $id);
oci_execute($compiled);

$row = oci_fetch_array($compiled, OCI_ASSOC+OCI_RETURN_NULLS);
echo $row['NOME'];
?>

Para atualizar, nós temos que pegar todo o objeto JSON, alterar o que precisamos e depois atualizar todo o campo JSON.

<?php
$query = 'SELECT dados FROM pessoas WHERE id = :id';
$compiled = oci_parse($connection, $query);

$id = 1;
oci_bind_by_name($compiled, ':id', $id);
oci_execute($compiled);

$row = oci_fetch_array($compiled, OCI_ASSOC+OCI_RETURN_NULLS);
$person_json = json_decode($row['DADOS'], true);

$person_json['idade'] = 33;

$update_query = 'UPDATE pessoas SET dados = :dados WHERE id = :id';
$compiled = oci_parse($connection, $update_query);
oci_bind_by_name($compiled, ':dados', json_encode($person_json));
oci_bind_by_name($compiled, ':id', $id);
oci_execute($compiled);
?>

Este código busca o JSON, decodifica para um array, atualiza a idade, codifica novamente para JSON e atualiza o campo na tabela.

E aí está! Com isso, você pode começar a armazenar e manipular dados JSON no Oracle 19c usando PHP 7.2. Boa sorte na sua jornada com JSON!

Inserindo dados JSON

Para inserir dados, você pode usar um comando INSERT como este:

INSERT INTO pessoas (dados) 
VALUES ('{"nome": "José", "idade": 32, "cidade": "São Paulo"}');
COMMIT;

Aqui, estamos inserindo um registro com o campo dados contendo um objeto JSON.

Consultando dados JSON

Para consultar os dados, você pode usar a função JSON_VALUE. Aqui está um exemplo de como consultar o nome de uma pessoa com um id específico:

SELECT JSON_VALUE(dados, '$.nome') AS nome
FROM pessoas
WHERE id = 1;

Esse comando retornará o nome da pessoa com o ID 1.

Atualizando dados JSON

A atualização de dados JSON é um pouco mais complicada porque o Oracle 19c não tem uma função nativa para modificar valores em um objeto JSON. Em vez disso, você precisa extrair o objeto JSON, modificá-lo e depois atualizá-lo na tabela. No entanto, isso não pode ser feito diretamente no SQL*Plus.

Em um contexto de aplicação, você faria isso em várias etapas, provavelmente em um bloco de código PL/SQL ou em sua linguagem de programação preferida, como mostrado no exemplo anterior com PHP.

Nesse caso, é recomendado fazer o seguinte:

  1. Consultar o objeto JSON.
  2. Converter o objeto JSON em uma estrutura de dados manipulável (por exemplo, em um objeto ou array em sua linguagem de programação).
  3. Modificar os valores que deseja alterar.
  4. Converter a estrutura de dados de volta em um objeto JSON.
  5. Atualizar o objeto JSON na tabela.

Espero que isso ajude a esclarecer as coisas!

Sobre o autor

Pós graduado em Gestão de Projetos em Tecnologia da Informação pela UNIASSELVI.
Esposo e Pai, curto atividades ao ar livre (Bike, SUP, Natação, Caminhar, Brincar no campo)

Atua com Banco de Dados Oracle desde de 2007. Atualmente é DBA Senior na FLUIDATA Serviços em Banco de dados (www.fluidata.com.br)

Principais atividade Banco de dados:

Implementação, migração, gerenciamento e suporte a produtos Oracle (8i, 9i, 10g, 11g, 12c, 18c, 19c RAC), multiplataforma;
Implementação, migração, gerenciamento e suporte a produtos Microsoft SQL Server (2008 - 2019);
Implementação, migração, gerenciamento e suporte a produtos PostgreSQL (9.3 - 14);
Monitoramento de ambientes 24×7;
Backup e Recovery;
Performance e Tuning;
Alta disponibilidade (HA);
EM database/grid/cloud control;
Conversão de databases;
Standby database / Oracle Data Guard;

Certificações:

Oracle Cloud Infrastructure 2019 Certified Architect AssociateOracle Cloud Infrastructure 2019 Certified Architect Associate
Oracle Database 12c Administrator Certified ProfessionalOracle Database 12c Administrator Certified Professional
Exadata Database Machine Models X2-2 and X2-8 Technology Support SpecialistExadata Database Machine Models X2-2 and X2-8 Technology Support Specialist
Oracle Database 11g Support SpecialistOracle Database 11g Support Specialist
OCP 11g - Oracle Certified Professional AdministratorOCP 11g - Oracle Certified Professional Administrator
OPN Certified Specialist 10g - PartnerNetwork Certified SpecialistOPN Certified Specialist 10g - PartnerNetwork Certified Specialist
Oracle Database 10g Real Applications Clusters AdministratorCertified ExpertOracle Database 10g Real Applications Clusters AdministratorCertified Expert
Oracle Database 10g: Managing Oracle on Linux Certified ExpertOracle Database 10g: Managing Oracle on Linux Certified Expert
OCP 10g - Oracle Certified Professional AdministratorOCP 10g - Oracle Certified Professional Administrator

Principais atividades DEVOPS:

PHP
ASP.net
C#
Docker
Golang
C++
Delphi
Python
HTML5
JavaScript

Você também pode gostar: