Saltar al contenido

Aprende a Usar la Cláusula IN en tus PL-SQL Procedures en Oracle

PL-SQL Procedures en OracleSaber usar eficientemente la cláusula IN te permitirá reducir la cantidad de código que escribas y además tener un código más legible que sea entendible por cualquier desarrollador en tus PL-SQL Procedures en Oracle.

La cláusula IN permite agrupar en un solo lugar dos o más códigos que hacen referencia a un mismo tipo de dato, eliminando así la cláusula OR en las condiciones del WHERE, del IF, del CASE, del WHILE, entre otros en tus PL-SQL Procedures en Oracle.

Revisemos algunos ejemplos prácticos que te permitan entender mejor como usar la cláusula IN en tus PL-SQL Procedures en Oracle.

Ejemplo #1: Supone que debes construir una condición en un IF donde una variable puede tomar varios valores diferentes, veamos la forma tradicional y la forma usando el IN:

Forma Tradicional.

/* PL-SQL Procedures en Oracle */

If lst_estado_civil = ‘SOLTERO’ or lst_estado_civil = ‘SEPARADO’ or lst_estado_civil = ‘VIUDO’ then

<acción a realizar>

End if;

En este ejemplo de PL-SQL Procedures en Oracle se está usando el OR para separar cada valor que puede tomar la variable lst_estado_civil.

Forma usando el IN.

/* PL-SQL Procedures en Oracle */

If lst_estado_civil IN (‘SOLTERO’, ‘SEPARADO’, ‘VIUDO’) then

<acción a realizar>

End if;

En este ejemplo de PL-SQL Procedures en Oracle se reemplaza el OR por un IN agrupando los distintos valores dentro de un paréntesis, lo que resulta ser más eficiente y ordenado.

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”

¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

Ejemplo #2: Veamos cómo se usa el IN en una consulta SELECT.

Forma Tradicional.

/* PL-SQL Procedures en Oracle */

Select emp.nombre_emp, emp.rut, emp.dv from t_empleado emp

where emp.id_estado_civil = 1  -– SOLTERO

or emp.estado_civil = 3  -– SEPARADO

or emp.estado_civil = 4;  -– VIUDO

En este ejemplo de PL-SQL Procedures en Oracle se está usando un OR para cada valor del campo emp.estado_civil.

Forma usando el IN.

/* PL-SQL Procedures en Oracle */

Select emp.nombre_emp, emp.rut, emp.dv from t_empleado emp where emp.id_estado_civil IN (   1, — SOLTERO

3, — SEPARADO

4 — VIUDO

);

En este ejemplo se usa el IN para reemplazar el OR en tus PL-SQL Procedures en Oracle.

En un SELECT también puedes hacer esto:

/* PL-SQL Procedures en Oracle */

Select emp.nombre_emp, emp.rut, emp.dv from t_empleado emp where emp.id_estado_civil IN (select civ.id_estado_civil from t_estado_civil civ where civ.nom_estado_civil <> ‘CASADO’);

En este ejemplo se usa el IN obteniendo los id_estado_civil desde otra consulta Select en tus PL-SQL Procedures en Oracle.

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 Procedures en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Procedures 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

5 comentarios en «Aprende a Usar la Cláusula IN en tus PL-SQL Procedures en Oracle»

  1. Por favor quisiera saber como usar el not in, ya que mi procedimiento se trata de recibir un parametro y verificar si no esta en una tabla…si eso pasa entonces lo inserta sino no hace nada o que devuelva un mensaje diciendo tal parametro ya existe…por favor es urgenteee

    1. Hola Nury, gracias por comunicarte, para lo que quieres hacer talvez no necesitas usar el NOT IN, solo debes hacer un SELECT para buscar el parámetro en tu tabla y si no lo encuentras lo insertas, mira este ejemplo:

      procedure tu_proceso(pin_tu_parametro in number, pst_mensaje out varchar2) is
      begin
      begin
      select tu_id
      into lin_tu_id
      from tu_tabla
      where tu_campo = pin_tu_parametro;
      exception
      when no_data_found then
      lin_tu_id:= null;
      end;
      if lin_tu_id is null then
      insert into tu_tabla(tu_campo, …) values(tu_parametro, …);
      else
      pst_mensaje:= ‘Parámetro ya existe’;
      end if;
      end tu_proceso;

      La solución es mas simple de lo que pensabas, espero te sirva.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle

      PD: ¿Ya obtuviste mi reporte gratuito de “Cómo Construir un Select Eficiente en Oracle en Solo 7 Pasos”?, suscríbete aquí:
      https://dominatuspackagesen0racle.com/blog

  2. Hola quisiera saber si me pudieras ayudar.
    hago una consulta, y el resultado lo concateno, en una variable tipo varchar, para enviarlo como parametro en el IN,
    la variable tiene este formato

    SELECT LISTAGG (A.TRANSACCIONID,’,’) WITHIN GROUP (ORDER BY A.TRANSACCIONID) INTO LISTA
    FROM TRANSACCION A
    INNER JOIN CONTRATO B ON B.CONTRATOID = A.CONTRATOID
    WHERE A.NOMBRE LIKE ‘%_INY’
    AND A.CONTRATOID IN (CONTRATO);
    dbms_output.Put_line(LIST_TRANS_INY);

    OPEN cINY FOR
    SELECT A.NOMBRE
    FROM TRANSACCION A
    INNER JOIN CONTRATO B ON B.CONTRATOID = A.CONTRATOID
    –WHERE A.NOMBRE LIKE ‘%_INY’
    –WHERE A.CONTRATOID IN (23)
    WHERE A.TRANSACCIONID IN (LISTA)
    ORDER BY A.TRANSACCIONID;

    PERO CUANDO LO EJECIUTO ME DICE QUE EL NUMERO NO ES VALIDO, SI LISTA TIENE MAS DE UN NUMERO EJ (LISTA= 12,54,25,4) PERO SI SOLO TIENE UNO, LO EJECUTA SIN PROBLEMA.

    GRACIAS!!! URGENTE 🙁

    1. Hola Samantha, gracias por comunicarte, no puedes usar una cadena de texto para colocar valores en un in, lo que debes hacer es colocar tu primera query dentro del in de la segunda query, algo como lo siguiente:

      WHERE A.TRANSACCIONID IN (SELECT distinct A.TRANSACCIONID
      FROM TRANSACCION A
      INNER JOIN CONTRATO B ON B.CONTRATOID = A.CONTRATOID
      WHERE A.NOMBRE LIKE ‘%_INY’
      AND A.CONTRATOID IN (CONTRATO) )

      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.

  3. Hola

    queria saber como se haria para recibir como parametro una coleccion o un arreglo en un procedimiento almacenado q contenga los valores q pasaria a un IN en un query.

    de antemano muchas gracias por la ayuda.

    Saludos!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.