Oracle 19c introduce algunas mejoras significativas en el manejo de datos en formato JSON. En este artículo en particular voy a explicar el funcionamiento de la función JSON_SERIALIZE.
La misma nos permite convertir un documento JSON, cualquiera sea su formato (BLOB, RAW, CLOB) en texto
La sintaxis de la función es la siguiente:
JSON_SERIALIZE (target_expr [ json_query_returning_clause ] [ PRETTY ]
[ ASCII ] [ TRUNCATE ] [ json_query_on_error_clause ])
- La cláusula "RETURNING" así como las opciones “PRETTY”, “ASCII” y “TRUNCATE” se comportan igual a lo visto en la función JSON_MERGEPATCH.
- La función JSON_SERIALIZE permite el uso de la clausula “ON ERROR” para definir que comportamiento tomar en caso de que encuentre un error al ejecutarse.
- Al igual que la función “TREAT(… AS JSON)” y "JSON_ MERGEPATCH", es una función SQL que no puede emplearse en forma directa en PL/SQL.
Ejemplos de Uso:
Primero, vamos a crear una tabla conteniendo algunos documentos JSON sencillos en una columna BLOB:
CREATE TABLE BLOBJSON (
ID NUMBER(10) NOT NULL,
Datos BLOB,
CONSTRAINT PK_BLOBJSON PRIMARY KEY (ID),
CONSTRAINT CK_BLOBJSON_DatosJSON CHECK(Datos IS JSON)
);
INSERT INTO BLOBJSON VALUES (1, '{"marca":"Ford", "modelo":"Mustang", "cantidad":3}');
INSERT INTO BLOBJSON VALUES (2, '{"marca":"Chevrolet", "modelo":"Camaro", "cantidad":5}');
INSERT INTO BLOBJSON VALUES (3, '{"marca":"Dodge", "modelo":"Charger", "cantidad":1}');
--
COMMIT;
Si queremos consultar los datos, no podemos hacerlo ya que se encuentran en formato binario:
Si los datos no son muy grandes, se puede usar la función "UTL_RAW.cast_to_varchar2"para realizar la conversion:
SELECT UTL_RAW.cast_to_varchar2(Datos) AS data2 FROM BLOBJSON;
Otra opción es utilizar la función JSON_QUERY para ver el contenido:
SELECT JSON_QUERY(Datos, '$') AS data FROM BLOBJSON;
O directamente utilizar la nueva función (en este caso, adicionalmente estamos filtrando la consulta para ver solo un registro):
SELECT JSON_SERIALIZE(d.Datos PRETTY) AS data
FROM BLOBJSON d
WHERE d.datos.marca = 'Dodge';
No hay comentarios.:
Publicar un comentario