101 lines
3.1 KiB
SQL
101 lines
3.1 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,
|
|
docs.payment_processor
|
|
FROM parsed_markdown_files,
|
|
JSON_TABLE(data, '$.comercios[*]'
|
|
COLUMNS (
|
|
name VARCHAR2(4000) PATH '$.name',
|
|
category VARCHAR2(4000) PATH '$.category',
|
|
payment_processor VARCHAR2(20) PATH '$.payment_processor'
|
|
)) docs
|
|
ORDER BY category, name;
|
|
|
|
-- beneficios por nivel
|
|
SELECT docs.nivel,
|
|
docs.percentual_reintegro,
|
|
docs.monto_compra_minimo_gs,
|
|
docs.reintegro_maximo_gs
|
|
FROM parsed_markdown_files,
|
|
JSON_TABLE(data, '$.beneficios_por_nivel[*]'
|
|
COLUMNS (
|
|
nivel VARCHAR2(20) PATH '$.nivel',
|
|
percentual_reintegro NUMBER PATH '$.percentual_reintegro',
|
|
monto_compra_minimo_gs NUMBER PATH '$.monto_compra_minimo_gs',
|
|
reintegro_maximo_gs NUMBER PATH '$.reintegro_maximo_gs'
|
|
)) docs
|
|
ORDER BY 1;
|
|
|
|
-- Tabela de benefícios
|
|
SELECT nivel, percentual_reintegro || '%' AS pct,
|
|
TO_CHAR(monto_compra_minimo_gs, '999G999G999') AS monto_min,
|
|
TO_CHAR(reintegro_maximo_gs, '999G999G999') AS reint_max
|
|
FROM parsed_markdown_files t,
|
|
JSON_TABLE(t.data, '$.beneficios_por_nivel[*]'
|
|
COLUMNS (
|
|
nivel VARCHAR2(20) PATH '$.nivel',
|
|
percentual_reintegro NUMBER PATH '$.percentual_reintegro',
|
|
monto_compra_minimo_gs NUMBER PATH '$.monto_compra_minimo_gs',
|
|
reintegro_maximo_gs NUMBER PATH '$.reintegro_maximo_gs'
|
|
))
|
|
ORDER BY nivel DESC;
|
|
|
|
-- Comércios por categoria
|
|
SELECT category, payment_processor, COUNT(*) AS qtd
|
|
FROM parsed_markdown_files t,
|
|
JSON_TABLE(t.data, '$.comercios[*]'
|
|
COLUMNS (
|
|
category VARCHAR2(200) PATH '$.category',
|
|
payment_processor VARCHAR2(20) PATH '$.payment_processor'
|
|
))
|
|
GROUP BY category, payment_processor
|
|
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,
|
|
docs.data.cuotas.maximo_sin_intereses as max_sin_intereses,
|
|
docs.data.acreditacao_reintegro.prazo_dias_habiles as prazo_dias_habiles
|
|
FROM parsed_markdown_files docs;
|
|
|
|
|