Si aprendes a usar la cláusula MINUS de la sentencia SELECT podrás adquirir una técnica que te permitirá analizar datos de forma más eficiente en tus PL-SQL Packages en Oracle, ya que MINUS es una de las herramientas analíticas que entrega Oracle para el análisis de gran cantidad de datos.
La cláusula MINUS permite comparar los resultados de dos querys en tus PL-SQL Packages en Oracle entregando como resultado las filas de la primera query que no encuentran su homologo en la segunda query. Esto es muy útil cuando necesitas buscar problemas de inconsistencias entre datos resumidos y datos detallados en tus PL-SQL Packages en Oracle, estas inconsistencias suelen ocurrir generalmente en los reportes o en modelos de datos que tienen una tabla de encabezado y otra de detalle.
Revisemos un ejemplo para que entiendas mejor como se debe usar la cláusula MINUS en tus PL-SQL Packages en Oracle.
Ejemplo #1: Supone que debes validar la consistencia entre dos tablas una de resumen y otra de detalles, porque una de las tablas tiene más filas que la otra y quieres saber cuáles son los registros que no están en la otra tabla, veamos cómo se debe hacer esta validación:
/* PL-SQL Packages en Oracle */
Select enc.id_empleado from t_movi_pers_enc enc where enc.id_departamento = pin_id_departamento;
Resultado de la consulta:
Id_empleado
101
102
211
212
301
305
309
Esta consulta en PL-SQL Packages en Oracle entrega todos los id_empleado que están en la tabla de encabezado de los movimientos de personal.
TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
/* PL-SQL Packages en Oracle */
Select distinct det.id_empleado from t_movi_pers_det where det.id_departamento = pin_id_departamento;
Resultado de la consulta:
Id_empleado
101
102
212
301
309
Esta consulta en PL-SQL Packages en Oracle entrega todos los id_empleado que están en la tabla de detalles de los movimientos de personal.
A simple vista es fácil identificar los id_empleado que no están en el detalle, pero cuando se trata de miles de registros necesitas una herramienta que te ayude a identificarlos de forma más rápida y eficiente en tus PL-SQL Packages en Oracle. Veamos cómo se usa el MINUS para identificar los registros que faltan:
/* PL-SQL Packages en Oracle */
Select enc.id_empleado from t_movi_pers_enc enc where enc.id_departamento = pin_id_departamento
Minus
Select distinct det.id_empleado from t_movi_pers_det where det.id_departamento = pin_id_departamento;
Resultado de la consulta:
211
305
Esta consulta detecta de inmediato los id_empleado que faltan en la tabla detalle. Para que el MINUS funcione en tus PL-SQL Packages en Oracle las querys a comparar deben tener los campos seleccionados en el mismo orden y deben ser del mismo tipo.
Te propongo que pruebes de inmediato este ejemplo en tu Base de Datos con tus propios PL-SQL Procedures en Oracle y PL-SQL Function en Oracle, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica en tus PL-SQL Packages en Oracle.
Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de PL-SQL Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.
Saludos
Roberto Vicencio – Escritor del Reporte:
“Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
Hola,
Quisisera saber la diferencia del minus respecto a otras estrategias con las que se obtengan los mismos resultados, por ejemplo una join con (+) o también con un “not in”.
Supongo que una de las diferencias será el rendimiento, ¿pero hay casos en que sólo se pueda utilizar un minus o sea muy recomendable frente a as otras estrategias ?
Saludos.
Hola Manel, gracias por comunicarte y muy buena tu pregunta, como lo indico en el artículo el minus es recomiendable usarlo para comparar grandes cantidades de registros para detectar inconsistencias, ahora como tu lo indicas tambien se pueden obtener los mismos datos con un ‘Not In’ pero el costo de performance es muy alto, con outer join vas a obtener los registros consistentes y los inconsistentes, minus solo te entrega los inconsistentes, pero si tu cantidad de registros es baja puedes usar la técnica que mas te acomode.
PD: Si por algun motivo te perdiste el seminario sobre ‘SELECT de Múltiples Tablas’, ahora puedes ver la grabación en diferido la que estará disponible SOLO por unos días, tengo una oferta especial para ti, puedes acceder desde aquí:
https://dominatuspackagesen0racle.com/v/seminario-smt
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Felicitaciones por tu artículo de plsql muy claro y con ejemplo puntual, lo que quisiera saber previamente llevar dos hojas de calculo para después comparar las en el plsql , como lo importó si tengo si las dos hojas de excel son versión 2007 en
Xlsx.
Para luego hacer la comparación con la sentencia utilizando minus.
Gracias por anticipado
Hola Elias, gracias por comunicarte y por tu comentario, hay varias formas para importar datos desde planillas excel a una tabla de Oracle, aqui te indico un par de ejemplos, puedes convertir tu archivo excel a formato CSV (delimitado por comas) y luego leerlo desde Oracle con la librería utl_file, tambien puedes crear tu mismo las instrucciones insert en el archivo excel y luego las ejecutas en la Base de Datos Oracle, gracias.
PD: Ya obtuviste mi reporte gratuito sobre “Como Construir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aún no lo has hecho puedes obtenerlo desde aquí:
https://dominatuspackagesen0racle.com
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Estimado,
le estoy inmensamente agradecido, por la ilustración de este operador de conjuntos.
despejada toda duda al respecto.
Exitos siga adelante!!….
Hola Samuel, gracias por comunicarte y por tu comentario, me da mucho gusto que esta información te sea de utilidad, ya obtuviste mi libro-reporte gratuito sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aún no lo tienes puedes obtenerlo desde aquí: https://dominatuspackagesen0racle.com/
PD: Si te ha gustado este blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar esta información, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.