Otra mejora importante en Oracle Database 23c es la posibilidad de escribir sentencias DELETE o UPDATE utilicen JOIN entre la tabla a actualizar o borrar y otras tablas de la base de datos.
Para probar la nueva funcionalidad, vamos a comenzar creando una tabla con 100 filas provenientes de la vista de diccionario de datos "ALL_OBJECTS":
CREATE TABLE MisObjetos AS SELECT OBJECT_ID, OWNER, OBJECT_NAME, CAST('Desconocido' AS VARCHAR2(128)) AS OBJECT_TYPE FROM ALL_OBJECTS ORDER BY 1 FETCH FIRST 100 ROWS ONLY;
SELECT DISTINCT mo.object_type FROM MisObjetos mo;
Usando JOIN en UPDATE
UPDATE MisObjetos mo SET mo.object_type = ao.object_type FROM ALL_OBJECTS ao WHERE mo.OBJECT_ID = ao.OBJECT_ID;
100 filas actualizadas.
SELECT mo.object_type, COUNT(*) FROM MisObjetos mo GROUP BY mo.object_type;
Usando JOIN en DELETE
DELETE MisObjetos mo FROM ALL_OBJECTS ao WHERE mo.OBJECT_ID = ao.OBJECT_ID AND ao.object_type = 'TABLE';
8 filas eliminado
SELECT mo.object_type, COUNT(*) FROM MisObjetos mo GROUP BY mo.object_type;
Sintaxis ANSI
UPDATE MisObjetos mo SET mo.object_type = ao.object_type FROM ALL_OBJECTS aoJOIN ALL_USERS au ON au.USERNAME = ao.OWNER WHERE mo.OBJECT_ID =ao.OBJECT_ID;
Conclusión
Oracle Database 23c permite escribir sentencias UPDATE y DELETE que utilizan JOIN entre tablas (pero sin usar la sintaxis ANSI) usando la cláusula WHERE para establecer la relación entre la tabla a ser actualizada o borrada y la tabla que deseamos unir.
Si desean conocer más sobre Oracle 23c, es recomendable que vean estos artículos en este blog como punto de partida:
- Oracle Database 23c Free - Developer Edition.
- Instalando Oracle Database 23c (Free Developer Edition) en Oracle Cloud.
Adicionalmente, pueden consultar todos los artículos relacionados a Oracle Database 23c agrupados en en el tag Database 23c.
No hay comentarios.:
Publicar un comentario