Armazenamento e Manipulação de JSON no Banco de Dados Oracle 23c
Olá, leitores! Hoje eu vou falar sobre armazenamento e manipulação de JSON no banco de dados Oracle 23c. Se você não sabe o que é JSON, não se preocupe, eu vou explicar tudo com exemplos práticos e também as referências. Mas antes, vamos fazer uma piada para quebrar o gelo:
Qual é a diferença entre um banco de dados Oracle e um banco de dados JSON?
R: Um banco de dados Oracle é um banco de dados relacional, ou seja, ele armazena os dados em tabelas com colunas e linhas. Um banco de dados JSON é um banco de dados não relacional, ou seja, ele armazena os dados em documentos com pares de chave-valor. Mas a verdadeira diferença é que um banco de dados Oracle custa muito mais caro!
Hahaha, espero que você tenha gostado dessa piada. Agora vamos ao que interessa: como usar JSON no Oracle 23c?
JSON é a sigla para JavaScript Object Notation, que é um formato leve e fácil de ler e escrever para trocar dados entre aplicações. JSON é composto por objetos, que são coleções de pares de chave-valor, e arrays, que são listas ordenadas de valores. Por exemplo, este é um objeto JSON que representa uma pessoa:
{
"nome": "João",
"idade": 25,
"profissão": "programador",
"hobbies": ["futebol", "música", "leitura"]
}
Como você pode ver, JSON é muito parecido com o JavaScript, mas também pode ser usado em outras linguagens, como PL/SQL. PL/SQL é a linguagem procedural do Oracle, que permite criar blocos de código com variáveis, estruturas de controle, funções, procedimentos e pacotes. PL/SQL é muito útil para manipular os dados do banco de dados Oracle, incluindo os dados em formato JSON.
Mas como armazenar e manipular JSON no Oracle 23c? Existem duas formas principais: usando colunas binárias ou usando colunas relacionais.
Usando colunas binárias
Uma forma de armazenar JSON no Oracle 23c é usando colunas binárias do tipo BLOB (Binary Large Object) ou CLOB (Character Large Object). Essas colunas permitem armazenar qualquer tipo de dado binário ou textual, respectivamente, sem precisar definir uma estrutura prévia. Para indicar que uma coluna binária contém dados JSON, basta usar a cláusula IS JSON na definição da tabela. Por exemplo:
CREATE TABLE pessoas (
id NUMBER PRIMARY KEY,
dados CLOB CHECK (dados IS JSON)
);
Essa tabela cria uma coluna chamada dados do tipo CLOB que só aceita valores JSON. Para inserir um valor JSON nessa coluna, basta usar a função TO_CLOB. Por exemplo:
INSERT INTO pessoas (id, dados) VALUES (1, TO_CLOB('{
"nome": "João",
"idade": 25,
"profissão": "programador",
"hobbies": ["futebol", "música", "leitura"]
}'));
Para consultar os dados JSON armazenados em uma coluna binária, podemos usar as funções JSON_VALUE, JSON_QUERY e JSON_TABLE. Essas funções permitem extrair valores simples, objetos ou arrays, ou converter os dados JSON em uma tabela relacional, respectivamente. Por exemplo:
SELECT id, JSON_VALUE(dados, '$.nome') AS nome FROM pessoas;
Essa consulta retorna o id e o nome das pessoas armazenadas na tabela pessoas.
SELECT id, JSON_QUERY(dados, '$.hobbies') AS hobbies FROM pessoas;
Essa consulta retorna o id e os hobbies das pessoas armazenadas na tabela pessoas.
SELECT id, nome, hobby FROM pessoas,
JSON_TABLE(dados, '$'
COLUMNS (
nome VARCHAR2(50) PATH '$.nome',
NESTED PATH '$.hobbies[*]' COLUMNS (
hobby VARCHAR2(50) PATH '$'
)
));
Essa consulta retorna o id, o nome e cada hobby das pessoas armazenadas na tabela pessoas.
Usando colunas relacionais
Outra forma de armazenar JSON no Oracle 23c é usando colunas relacionais do tipo VARCHAR2 ou NVARCHAR2. Essas colunas permitem armazenar dados textuais com um tamanho máximo definido. Para indicar que uma coluna relacional contém dados JSON, basta usar a cláusula IS JSON na definição da tabela. Por exemplo:
CREATE TABLE produtos (
id NUMBER PRIMARY KEY,
dados VARCHAR2(4000) CHECK (dados IS JSON)
);
Essa tabela cria uma coluna chamada dados do tipo VARCHAR2 que só aceita valores JSON. Para inserir um valor JSON nessa coluna, basta usar uma string literal. Por exemplo:
INSERT INTO produtos (id, dados) VALUES (1, '{
"nome": "Notebook",
"preço": 3000,
"características": {
"marca": "Dell",
"modelo": "Inspiron",
"memória": "8 GB",
"processador": "Intel Core i5"
}
}');
Para consultar os dados JSON armazenados em uma coluna relacional, podemos usar as mesmas funções JSON_VALUE, JSON_QUERY e JSON_TABLE que usamos para as colunas binárias. Por exemplo:
SELECT id, JSON_VALUE(dados, '$.nome') AS nome FROM produtos;
Essa consulta retorna o id e o nome dos produtos armazenados na tabela produtos.
SELECT id, JSON_QUERY(dados, '$.características') AS características FROM produtos;
Essa consulta retorna o id e as características dos produtos armazenados na tabela produtos.
SELECT id, nome, marca, modelo FROM produtos,
JSON_TABLE(dados, '$'
COLUMNS (
nome VARCHAR2(50) PATH '$.nome',
marca VARCHAR2(50) PATH '$.características.marca',
modelo VARCHAR2(50) PATH '$.características.modelo'
));
Essa consulta retorna o id, o nome, a marca e o modelo dos produtos armazenados na tabela produtos.
Conclusão
Neste artigo, eu assumi o papel de um especialista PL/SQL e escrevi sobre armazenamento e manipulação de JSON no banco de dados Oracle 23c. Eu mostrei como usar colunas binárias ou relacionais para armazenar dados JSON e como usar funções para extrair ou converter esses dados. Espero que você tenha gostado e aprendido algo novo. Se você quiser saber mais sobre JSON no Oracle 23c, eu recomendo que você leia as referências abaixo.
Valeuuuu !
Referências