lunes, 26 de septiembre de 2022

¿Qué mejoras puede incluir Oracle 23c?

La semana pasada se realizó el evento anual del Grupo de Usuarios Oracle de Alemania, y en el mismo Gerald Venzl (Oracle Database Senior Director) presentó las novedades que probablemente se incorporarán a Oracle 23c. Las mismas fueron mencionadas en twitter por Phillip Salvisberg y a continuación voy a comentarlas. Hay que tener en cuenta que no esta confirmado que ninguna de ella sea parte de la versión 23c, pero confiemos en que la mayoría de ellas sea implementada!

Oracle Database 23c será la nueva version "Long Term Release" con soporte mas allá del año 2028, y se encuentra comenzando el período de Beta Testing, esperando sea liberada a fines del primer trimestre de 2023, seguramente en Oracle Cloud, para estar disponible durante el año para ser utilizada on-premise.

Privilegios a Nivel de Esquema

Ahora será posible otorgar privilegios directamente a un esquema, en vez de tener que hacerlo individualmente a cada objeto perteneciente al mismo. Por ejemplo:

GRANT SELECT ANY TABLE ON SCHEMA Ventas TO DW;

Anotaciones

Esta característica, soportada en tablas, vistas, columnas, indices, unidades de PL/SQL, vistas materializadas y dominios, permite documentar nuestro modelo de datos usando tanto texto libre (similar a comentarios) como pares Clave-Valor (esto puede ser realmente útil).

Imagen gentileza de Philip Salvisberg

Soporte de 4096 Columnas por Tabla

No parece ser algo critico, pero en algunos escenarios puede ser necesario tener semejante numero de columnas en una tabla. Oracle 23c podría ofrecer la posibilidad de tener hasta 4096 columnas por tabla configurando la base de datos de la siguiente manera:

ALTER SYSTEM SET MAX_COLUMNS = EXTENDED;

JSON Schema

En Oracle 23c sería posible definir un esquema JSON y usarlo para validar el contenido de un documento JSON.
Imagen gentileza de Philip Salvisberg

Tipo de Datos Boolean

Oracle 23c incluiría un tipo de datos Boolean en su motor SQL. El mismo puede ser empleado al definir columnas. Acepta como valores TRUE y FALSE y tendría conversiones implícitas (por ejemplo 0 = FALSE y 1 = TRUE o 't' = TRUE.

Ejemplo:
CREATE TABLE Cliente (ID NUMBER(10), NOMBRE VARCHAR2(100), ACTIVO BOOLEAN);

Y luego podemos consultarlo de la siguiente forma (sin necesidad de compararlo con TRUE):
SELECT * FROM Cliente WHERE ACTIVO;

UPDATE con JOIN

Se puede hacer JOIN en sentencias UPDATE para filtrar datos u obtener valores a utilizarse en el UPDATE:
UPDATE Articulo a SET a.Precio = a.Precio * 1.2
FROM Categoria c
WHERE c.ID_Categoria = a.ID_Categoria AND c.ID_Rubro = 3

Table Value Constructor

Este operador forma parte del estándar ISO SQL, el cual ya esta implementado en otros motores de base de datos como ser SQL Server. El mismo permite emular (construir) una tabla utilizando valores fijos.

Imagen gentileza de Philip Salvisberg

IF [NOT] EXISTS para Crear o Eliminar Objetos

Se puede usar esta sintaxis para evitar errores al momento de querer crear o eliminar un objeto para evitar errores.

Ejemplos:
CREATE TABLE IF NOT EXISTS Clientes (ID NUMBER(10), NOMBRE VARCHAR2(100));
DROP TABLE IF EXISTS Clientes;

SQL Domains

Oracle 23c va a permitir definir "dominios" y guardarlos en la base de datos, para utilizarlos al crear tablas. Un dominio incluye la definición de un valor por defecto, de una restricción de tipo CHECK y opciones de Display y Sort.


Imagen gentileza de Philip Salvisberg

GROUP BY y HAVING por Alias o Posición

Esta opción facilita la escritura de sentencias SQL y evita problemas al realizar cambios a columnas calculadas que son utilizadas para agrupar en GROUP BY.

Ejemplo:

SELECT SUBSTR(ProductCode,5,2) AS Category, COUNT(*) AS Qty
FROM Product P
GROUP BY Category
HAVING Qty > 5;

Mejoras a la cláusula RETURNING

En Oracle 23c será posible usar la clausula RETURNING en sentencias MERGE, y también se podrá usar los valores previos (no solo los nuevos) en sentencias UPDATE anteponiendo la palabra clave OLD o NEW delante del nombre de columna deseado.

Imagen gentileza de Philip Salvisberg

SELECT sin FROM

Cuando necesitemos consultar el valor de una expresión que no proviene de una tabla, ya no será necesario usar DUAL para cumplir con el formato SELECT ... FROM. Oracle 23c permitirá la ejecución de sentencias SELECT sin la clausula FROM, como vemos en este ejemplo:
SELECT SYSDATE, 1+2;

Mejoras a Mensajes de Error

Muchos mensajes de error fueron expandidos para dar información mas exacta sobre el problema.

Imagen gentileza de Philip Salvisberg


Rol de Desarrollador (DEVELOPER)

Mediante la ejecución del procedimiento DBMS_DEVELOPER_ADMIN.GRANT_PRIVS podemos otorgar en forma rápida y sencilla todo los privilegios necesarios para que in usuario pueda desarrollar.

Este rol incluye 23 permisos de sistema y 5 permisos de objeto.

Stored Procedures de JavaScript

Oracle Database incluye la funcionalidad de MLE (Multi Language Engine) y en Oracle 23c es posible crear procedimientos almacenados escritos en JavaScript.
Imagen gentileza de Philip Salvisberg


No hay comentarios.:

Publicar un comentario