lunes, 16 de septiembre de 2019

SQL Developer 19.2.1 - Nuevo Release Disponible




El pasado jueves 12/09 Oracle liberó la version 19.2.1 de Oracle SQL Developer, herramienta de desarrollo gratuita de Oracle. La misma ya está disponible para ser descargada aquí. Junto con SQL Developer, también está disponible SQLCl.

Esta versión soluciona un par de bugs detectados en la version 19.2.0, los cuales son detallados en este link.

La documentación oficial ya fue actualizada a la versión 19.2, y puede ser consultada aquí.

Para consultas y dudas, recomendamos usar el foro de SQL Developer en Oracle Community, donde se puede consultar el thread correspondiente al anuncio de esta versión.

lunes, 9 de septiembre de 2019

Oracle presenta un plan de estudios gratuito de Oracle APEX


Oracle lanzó en el año 2017 un plan de estudios gratuitos de APEX, el cual puede ser utilizado por educadores y profesores universitarios  de todo el mundo para facilitar la difusión de APEX como herramienta de desarrollo. Este material puede ser utilizado en forma directa, traducido a cualquier idioma o editado para ajustarlo a las necesidades de capacitación de cualquier docente que quiera enseñar APEX

La versión 19.1 de este plan de estudio, liberada en el día de hoy por Oracle, consta de 16 lecciones completas, con presentaciones de PowerPoint, prácticas en formato PDF y todos los scripts SQL necesarios junto con los archivos fuente de los laboratorios prácticos en formato Microsoft, los cuales pueden ser traducidos.

Los laboratorios prácticos se pueden realizar utilizando cualquier instancia de Oracle APEX 19.1, incluida la instancia gratuita para evaluación (https://apex.oracle.com) o una instancia local. El paquete incluye una guía adicional para ayudarlo a comenzar a usar APEX en Oracle Autonomous Database.

Este contenido está disponible con una licencia de uso permisivo Creative Commons Attribution 4.0 International Public License y Universal Permissive License (UPL) Versión 1.0.

Para descargar el mismo, puede acceder directamente desde la página del Plan de Estudios de Oracle APEX. Para obtener más información, visite el sitio apex.oracle.com/en/learn/education.

lunes, 2 de septiembre de 2019

Nuevo Artículo publicado en OTN: Instalación y configuración de Oracle ODBC Gateway 12c-18c-19c en Windows

Hoy publicaron en OTN en Español mi segundo artículo "Instalación y configuración de Oracle ODBC Gateway 12c-18c-19c en Windows".



El mismo describe paso a paso la instalación y configuración del Gateway ODBC, el cual permite acceder a distintos tipos de datos externos (desde bases de datos SQL Server o PostgreSQL a archivos Excel) desde una base de datos Oracle


miércoles, 28 de agosto de 2019

Oracle 19c - Otras Mejoras en el manejo de JSON

Soporte GeoJSON

Oracle 19c permite usar “JSON_VALUE” para devolver objetos de tipo “SDO_GOMETRY” a partir de documentos JSON que poseen información en formato GeoJSON. La sintaxis es la siguiente:

SELECT JSON_VALUE(data, '$.features[0].geometry'
                  RETURNING SDO_GEOMETRY
                  ERROR ON ERROR)
FROM json_documents;

Y da como resultado:

JSON_VALUE(DATA,'$.FEATURES[0].GEOMETRY'RETURNINGSDO_GEOMETRYERRORONERROR)(SDO_GTYPE, SDO_SRID, SDO_
----------------------------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(-.15380859, 51.5053234, NULL), NULL, NULL)

Y se pueden crear índices en los mismos

CREATE INDEX json_documents_geo_idx
  ON json_documents (JSON_VALUE(data, '$.features[0].geometry'
                     RETURNING SDO_GEOMETRY))
  INDEXTYPE IS MDSYS.SPATIAL_INDEX;

Mapeo JSON / SQL Object Type

Oracle 19c permite usar “JSON_VALUE” para devolver objetos de tipo SQL definido por el usuario, a partir de documentos JSON:

Ejemplo:

CREATE TABLE DocumentoJSON ( 
      ID_DocumentoJSON NUMBER(10) NOT NULL, 
      Datos CLOB, 
      CONSTRAINT PK_DocumentoJSON PRIMARY KEY (ID_DocumentoJSON),
      CONSTRAINT CK_DocumentoJSON_DatosJSON CHECK(Datos IS JSON)
);
INSERT INTO DocumentoJSON 
 VALUES (1, '{"marca":"Ford", "modelo":"Mustang", "cantidad":3}');
INSERT INTO DocumentoJSON 
 VALUES (2, '{"marca":"Chevrolet", "modelo":"Camaro", "cantidad":5}');
INSERT INTO DocumentoJSON 
 VALUES (3, '{"marca":"Dodge", "modelo":"Charger", "cantidad":1}');
--
COMMIT;
--
CREATE OR REPLACE TYPE ut_Auto AS OBJECT (
  MARCA VARCHAR2(100),
  MODELO VARCHAR2(100),
  CANTIDAD NUMBER(5));
/
--
SELECT JSON_VALUE(Datos, '$' RETURNING ut_Auto) AS Auto
FROM DocumentoJSON
WHERE ID_DocumentoJSON = 1;

El resultado que obtendremos es:

AUTO(MARCA, MODELO, CANTIDAD)
-----------------------------------------------------------------------
UT_AUTO(FORD, MUSTANG,3)


La cláusula "ON MISMATCH" permite generar un error, devolver el mismo o devolver nulo cuando alguno de los elementos del documento JSON no coincide con la estructura del objeto. La sintaxis de la misma es:

JSON_value_on_mismatch ( ( IGNORE | ERROR | NULL ) 
    ON MISMATCH  [  ( (MISSING DATA) | (EXTRA DATA) | (TYPE ERROR) )  ]
  )...

Se puede realizar este mismo tipo de operación con tablas (NESTED TABLES). Y se puede realizar la operación inversa, convertir un objeto SQL en JSON.

Cláusula SQL NESTED

Cuando usamos la función JSON_TABLE, Oracle internamente realiza un INNER JOIN entre la tabla origen y el resultado de la función. Por lo tanto, si una fila de la tabla no posee datos JSON, la misma no es visualizada.

Una forma de solucionar el problema hasta Oracle 19c era realizar un LEFT JOIN, como vemos en el siguiente ejemplo:

SELECT j.id, jt.marca, jt.modelo
FROM   DocumentoJSON j LEFT OUTER JOIN JSON_TABLE(j.Datos, '$'
         COLUMNS (marca    VARCHAR2(50 CHAR)  PATH marca,
                  modelo   VARCHAR2(50 CHAR)  PATH modelo)) jt ON 1=1;

Esto puede reemplazarse en Oracle 19c por la más legible cláusula “NESTED”:

SELECT j.id, jt.marca, jt.modelo
FROM   DocumentoJSON j NESTED datos
         COLUMNS (marca    VARCHAR2(50 CHAR)  PATH marca,
                  modelo   VARCHAR2(50 CHAR)  PATH modelo) jt;

lunes, 26 de agosto de 2019

Oracle 19c - Mejoras en el uso de JSON_TABLE en Vistas Materializadas



Oracle 18c permite usar “JSON_TABLE” en vistas materializadas con la opción de refresco “ON STATEMENT”.

Oracle 19c permite que estas vistas sean utilizadas por consultas que ejecuten funciones “JSON_VALUE” o “JSON_EXISTS” utilizando la funcionalidad de Query Rewrite, lo cual no era posible previamente.



Para esto, la vista debe cumplir con algunas condiciones en particular:

  • La vista materializada debe crearse con “REFRESH FAST ON STATEMENT” e incluir el ROWID o la clave primaria.
  • La vista materializada solo puede ser un JOIN entre la tabla maestra y "JSON_TABLE".
  • Solo las columnas de "JSON_TABLE" definidas como “ERROR ON ERROR NULL ON EMPTY” se consideran para reescribir.
  • La funcionalidad admite notación de puntos, llamadas a "JSON_VALUE" y "JSON_EXISTS", que pueden reescribirse con llamadas a JSON_TABLE y, por lo tanto, son aplicables para una re-escritura para usar la vista materializada.