add labs
This commit is contained in:
111
lab/json/01_convert_md_to_json.sql
Normal file
111
lab/json/01_convert_md_to_json.sql
Normal file
@@ -0,0 +1,111 @@
|
||||
|
||||
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;
|
||||
Reference in New Issue
Block a user