Files
itti_adb/lab/json/01_convert_md_to_json.sql
Fernando Melo 440b1cfadb add labs
2026-05-27 19:51:52 -03:00

112 lines
2.8 KiB
SQL

set serveroutput on
set long 999999
set linesize 200
set pagesize 5000
/* --------------------------------
CREATE COLLECTION TABLE
-------------------------------- */
DROP TABLE IF EXISTS parsed_markdown_files;
CREATE JSON COLLECTION TABLE IF NOT EXISTS parsed_markdown_files;
/* --------------------------------
CONVERT MD TO JSON
-------------------------------- */
exec CONVERT_MDFILES_TO_JSON
/* --------------------------------
CONSULTAS
-------------------------------- */
-- json collection
SELECT json_serialize(data returning clob pretty) AS json_data
FROM parsed_markdown_files;
-- merchants
SELECT docs.category,
docs.name
FROM parsed_markdown_files,
JSON_TABLE(data, '$.comercios[*]'
COLUMNS (
name VARCHAR2(4000) PATH '$.name',
category VARCHAR2(4000) PATH '$.category'
)) docs
ORDER BY category, name;
-- beneficios por nivel
SELECT docs.nivel,
docs.percentual_reintegro,
docs.reintegro_maximo_gs
FROM parsed_markdown_files,
JSON_TABLE(data, '$.beneficios_por_nivel[*]'
COLUMNS (
nivel VARCHAR2(100) PATH '$.nivel',
percentual_reintegro NUMBER PATH '$.percentual_reintegro',
reintegro_maximo_gs NUMBER PATH '$.reintegro_maximo_gs'
)) docs
ORDER BY 1;
-- Comércios por categoria
SELECT category, COUNT(*) AS qtd
FROM parsed_markdown_files t,
JSON_TABLE(t.data, '$.comercios[*]'
COLUMNS (
category VARCHAR2(200) PATH '$.category'
))
GROUP BY category
ORDER BY qtd DESC;
-- JSON Dot-Notation
SELECT
docs.data.promocao.titulo.string() as titulo,
docs.data.promocao.vigencia.data_inicio || ' a ' || docs.data.promocao.vigencia.data_fim as vigencia,
docs.data.medios_pago.rede as rede,
docs.data.medios_pago.qr_permitido as qr_permitido
FROM parsed_markdown_files docs;
/* --------------------------------
DUALITY VIEW
-------------------------------- */
-- convert
DECLARE
schema_sql clob;
BEGIN
schema_sql := dbms_json_duality.infer_and_generate_schema(
json('{"tableNames" : [ "PARSED_MARKDOWN_FILES" ],
"viewNames" : [ "T" ],
"useFlexFields" : false,
"updatability" : true,
"sourceSchema" : "APP_USER"}')
);
execute immediate schema_sql;
dbms_json_duality.import(table_name => 'PARSED_MARKDOWN_FILES', view_name => 'T');
execute immediate 'rename T TO V_PARSED_MARKDOWN_FILES';
END;
/
SELECT * FROM T_ROOT;
SELECT * FROM T_BENEFICIOS_POR_NIVEL;
SELECT * FROM T_COMERCIOS;