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:
- Consultar o objeto JSON.
- Converter o objeto JSON em uma estrutura de dados manipulável (por exemplo, em um objeto ou array em sua linguagem de programação).
- Modificar os valores que deseja alterar.
- Converter a estrutura de dados de volta em um objeto JSON.
- Atualizar o objeto JSON na tabela.
Espero que isso ajude a esclarecer as coisas!