112 lines
2.8 KiB
SQL
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;
|