Si sabes cómo y cuándo utilizar correctamente la cláusula EXISTS dentro de tus consultas SELECT podrás resolver problemas referentes a inconsistencias de datos que ocurran en tus PL-SQL Packages en Oracle. Estas inconsistencias se pueden deber a que en una query de tus PL-SQL Packages en Oracle se muestran registros que no corresponden debido a que ya se muestran en otra query.
La cláusula EXISTS siempre evalúa una subconsulta en tus PL-SQL Packages en Oracle y devuelve un valor lógico el cual es verdadero (TRUE) si la subconsulta puesta dentro del EXISTS retorna filas y en caso contrario, es decir, la subconsulta no devuelve filas se devuelve un valor falso (FALSE). En el SELECT la cláusula EXISTS se puede consultar de forma positiva colocando solo la palabra EXISTS o de forma negativa agregando la palabra NOT quedando la consulta en tus PL-SQL Packages en Oracle como NOT EXISTS.
Puedes pensar que EXISTS es muy similar a la cláusula IN pero EXISTS es mucho más rápida. Para entender mejor como se debe trabajar con la cláusula EXISTS en tus PL-SQL Packages en Oracle veamos un ejemplo práctico.
Ejemplo #1: Supone que tienes una consulta por departamento a la tabla de empleados la que está mostrando filas que no corresponden debido a que algunos empleados se encuentran en proceso de evaluación.
/* PL-SQL Packages en Oracle */
Select emp.rut, emp.dv, emp.nombre_emp
from t_empleado emp
where emp.id_departamento = pin_id_departamento
and ind_estado = 9; — 9= ascendidos
Este ejemplo trae todos los empleados de un departamento en particular que tengan el estado de ascendido, pero no se deben mostrar empleados que están en evaluación, para solucionar este problema en tus PL-SQL Packages en Oracle se debe usar la cláusula EXISTS, veamos cómo se debe hacer:
TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
/* PL-SQL Packages en Oracle */
Select emp.rut, emp.dv, emp.nombre_emp
from t_empleado emp
where emp.id_departamento = pin_id_departamento
and ind_estado = 9 — 9= ascendidos
and NOT EXISTS (select 1 from t_evaluacion eva where eva.id_empleado =
emp.id_empleado );
En este ejemplo de PL-SQL Packages en Oracle se modifica la misma query anterior incluyendo la cláusula NOT EXISTS para que en la consulta no se incluyan los empleados que están en proceso de evaluación. Nota que en la subconsulta de PL-SQL Packages en Oracle no es necesario seleccionar un campo para el Select, es suficiente con poner un texto, número o null, además fíjate que a la subconsulta en la condición del Where se está pasando como parámetro el id_empleado de la tabla t_empleado (emp.id_empleado).
Te propongo que pruebes de inmediato este ejemplo en tu Base de Datos con tus propias tablas, 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 tu post me aclaro unas dudas, muchas gracias por compartirlo. Sin embargo entre mi “Query arsenal” xD no utilizo mucho el exists, porque ocupo el Count, El in o Not In. Sin embargo me llama la atención que comentas que es rapido. Es mas rapido que hacer un query con las 2 tablas relacionadas desde el from de la query directamente???
Hola Miguel, gracias por comunicarte, me da mucho gusto ver que el libro te sea útil, el exists es mas rápido que usar un in pero no reemplaza al join que usas para unir 2 o mas tablas y obtener sus datos.
PD: Ya pudiste ver mi libro reporte sobre ‘Cómo Crear un SELECT Eficiente en ORACLE en Solo 7 Pasos’, si aun no lo tienes en tus manos puedes obtenerlo gratis desde aquí: https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Hola,
Gracias por compartir tu conocimeinto, en lo particular estoy buscando alternativas para quitar los IN y NOT IN
Para remplazar los in prefiero hacer un join que es mas rapido,
Hola Islas, gracias por comunicarte, el reemplazo natural de los IN es usar el EXISTS que es mucho mas rápido, pero si puedes usar join es mucho mejor, si quieres ver mas alternativas para mejorar tus select te recomiendo ver mi guía sobre “Cómo Crear SELECT Eficientes en ORACLE en Solo 7 Pasos”, si aun no la tienes en tus manos puedes obtenerla gratis desde aquí: https://dominatuspackagesen0racle.com/cmrz
PD: Si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/cmbl/ con tus amigos o personas que también les pueda interesar ver esta información, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.