Oracle

Operadores lógicos en PL/SQL

Por : Jhons_1101
2017-06-09
Tags :
Los operadores lógicos AND, OR y NOT siguen la lógica de tres estados (And, Or, Not). En donde AND y OR son operadores binarios y NOT es un operador unario.

Normalmente se utilizan para realizar comparaciones de datos o evaluar condiciones. Además el operador unario (NOT) se puede utilizar para realizar una negación lógica de una variable, constante o valor. Debemos de tener cuidado con el operando NULL, ya que potencialmente puede dar un valor indefinido. Valor, que si se usa en una comparación puede afectar el resultado, Se recomienda usar la función de Oracle NVL(). – La veremos más adelante.

Registro X Y x AND y x OR y NOT x NOT y
1 TRUE TRUE TRUE TRUE FALSE FALSE
2 TRUE FALSE FALSE TRUE FALSE TRUE
3 TRUE NULL NULL TRUE FALSE NULL
4 FALSE TRUE FALSE TRUE TRUE FALSE
5 FALSE FALSE FALSE FALSE TRUE TRUE
6 FALSE NULL FALSE NULL TRUE NULL
7 NULL TRUE NULL TRUE NULL FALSE
8 NULL FALSE FALSE NULL NULL TRUE
9 NULL NULL NULL NULL NULL NULL

Explicando un poco esta tabla, Entenderemos el funcionamiento de la tabla de verdad y el resultado que arroja, esto es muy importante para no desvariar y estar preguntándonos porqué el resultado que arroja, no es el coincidente con el que estamos esperando.

Comparaciones de la tabla de verdad con valores esperados TRUE. Si evaluamos una variable X, con un variable Y. tendremos:
compartir en facebook compartir en Google compartir en Twitter compartir en Blogger compartir como código embebido compartir la url

Registro 1


1 TRUE TRUE TRUE TRUE FALSE FALSE

  • En la primera comparación si X es igual a TRUE y Y es igual a TRUE, el resultado será TRUE (Por Qué Las Dos Expresiones Son Verdaderas).
  • En la segunda comparación, Si X es TRUE y Y es TRUE, Al ser el operador lógico OR, Evalúa que al menos una de las dos cumpla la condición y al ser las dos TRUE, el resultado será TRUE.
  • En la tercera comparación, Está negando X, así que el resultado es FALSE.
  • En la cuarta comparación, Está negando Y, así que el resultado será FALSE

  • Registro 2


    2 TRUE FALSE FALSE TRUE FALSE TRUE

  • En la primera comparación si X es igual a TRUE y Y es igual a FALSE, el resultado será FALSE (Por Qué una de las Expresiones es falsa, y se requiere que las dos sean verdaderas).
  • En la segunda comparación, Si X es TRUE y Y es FALSE, Al ser el operador lógico OR, Evalúa que al menos una de las dos cumpla la condición y al ser X igual a TRUE, el resultado será TRUE.
  • En la tercera comparación, Está negando X, así que el resultado es FALSE.
  • En la cuarta comparación, Está negando Y, así que el resultado será TRUE

  • Registro 3


    3 TRUE NULL NULL TRUE FALSE NULL

  • En la primera comparación si X es igual a TRUE y Y es igual a NULL, el resultado será NULL (Ya Qué el comparar un valor con un NULL, el valor será NULL o en ocasiones indeterminado, Se recomienda no hacer este tipo de comparaciones, ya que se puede alterar el resultado. Úsese en su lugar la función interna NVL()).
  • En la segunda comparación, Si X es TRUE y Y es NULL, Al ser el operador lógico OR, Evalúa que al menos una de las dos cumpla la condición y al ser X igual a TRUE, el resultado será TRUE.
  • En la tercera comparación, Está negando X, así que el resultado es FALSE.
  • En la cuarta comparación, Está negando Y, así que el resultado será NULL (Ya que negar un valor NULL no es posible).

  • Registro 4


    4 FALSE TRUE FALSE TRUE TRUE FALSE

  • En la primera comparación si X es igual a FALSE y Y es igual a TRUE, el resultado será FALSE (Ya Qué las dos deben de ser verdaderas).
  • En la segunda comparación, Si X es FALSE y Y es TRUE, Al ser el operador lógico OR, Evalúa que al menos una de las dos cumpla la condición y al ser Y igual a TRUE, el resultado será TRUE.
  • En la tercera comparación, Está negando X, así que el resultado es TRUE.
  • En la cuarta comparación, Está negando Y, así que el resultado será FALSE.

  • Registro 5


    5 FALSE FALSE FALSE FALSE TRUE TRUE

  • En la primera comparación si X es igual a FALSE y Y es igual a FALSE, el resultado será FALSE (Ya Qué las dos deben de ser verdaderas).
  • En la segunda comparación, Si X es FALSE y Y es FALSE, Al ser el operador lógico OR, Evalúa que al menos una de las dos cumpla la condición y al ser Y igual a FALSE y X igual a FALSE, el resultado será FALSE (Al menos debe haber una verdadera).
  • En la tercera comparación, Está negando X, así que el resultado es TRUE.
  • En la cuarta comparación, Está negando Y, así que el resultado será TRUE.

  • Registro 6


    6 FALSE NULL FALSE NULL TRUE NULL

  • En la primera comparación si X es igual a FALSE y Y es igual a NULL, el resultado será FALSE (Ya Qué las dos deben de ser verdaderas).
  • En la segunda comparación, Si X es FALSE y Y es NULL, Al ser el operador lógico OR, Evalúa que al menos una de las dos cumpla la condición y al ser Y igual a NULL y X igual a FALSE, el resultado será NULL (ya que predomina el NULL por encima del FALSE que devuelve la validación).
  • En la tercera comparación, Está negando X, así que el resultado es TRUE.
  • En la cuarta comparación, Está negando Y, así que el resultado será NULL. (ya que no se puede negar un NULL).

  • Registro 7


    7 NULL TRUE NULL TRUE NULL FALSE

  • En la primera comparación si X es igual a NULL y Y es igual a TRUE, el resultado será FALSE (Ya Qué las dos deben de ser verdaderas).
  • En la segunda comparación, Si X es NULL y Y es TRUE, Al ser el operador lógico OR, Evalúa que al menos una de las dos cumpla la condición y al ser Y igual a TRUE y X igual a NULL, el resultado será TRUE (ya que la variable Y es TRUE).
  • En la tercera comparación, Está negando X, así que el resultado es NULL. (ya que no se puede negar un NULL).
  • En la cuarta comparación, Está negando Y, así que el resultado será FALSE.

  • Registro 8


    8 NULL FALSE FALSE NULL NULL TRUE

  • En la primera comparación si X es igual a NULL y Y es igual a FALSE, el resultado será FALSE (Ya Qué las dos deben de ser verdaderas).
  • En la segunda comparación, Si X es NULL y Y es FALSE, Al ser el operador lógico OR, Evalúa que al menos una de las dos cumpla la condición y al ser Y igual a FALSE y X igual a NULL, el resultado será NULL (ya que predomina el NULL por encima del FALSE que devuelve la validación).
  • En la tercera comparación, Está negando X, así que el resultado es NULL. (ya que no se puede negar un NULL).
  • En la cuarta comparación, Está negando Y, así que el resultado será TRUE.

  • Registro 9


    9 NULL NULL NULL NULL NULL NULL

  • En la primera comparación si X es igual a NULL y Y es igual a NULL, el resultado será NULL (Ya qué no se puede comparar un NULL).
  • En la segunda comparación, Si X es NULL y Y es NULL, Al ser el operador lógico OR, Evalúa que al menos una de las dos cumpla la condición y al ser Y igual a NULL y X igual a NULL, el resultado será NULL (Ya qué no se puede comparar un NULL).
  • En la tercera comparación, Está negando X, así que el resultado es NULL. (ya que no se puede negar un NULL).
  • En la cuarta comparación, Está negando Y, así que el resultado será NULL. (ya que no se puede negar un NULL).

  • Importante

    NOT NULL devuelve NULL, porque los nulos son indeterminados. Tenga cuidado de evitar resultados inesperados en expresiones que impliquen valores nulos.

    Manejo de valores nulos en comparaciones y estados condicionales


    Al trabajar con valores nulos, puede evitar algunos errores comunes teniendo en cuenta las siguientes reglas:
  • Las comparaciones con nulos siempre dan NULL.
  • Aplicar el operador lógico NOT a un nulo el resultado será NULL.
  • En declaraciones de control, si la condición produce NULL, su secuencia asociada de sentencias no se ejecuta.
  • Si la expresión se aplica en una instrucción CASE evaluando un NULL, no se puede emparejar utilizando WHEN NULL. En este caso, necesitará utilizar la sintaxis, se debe de manejar WHEN expresión IS NULL.

  • 
    DECLARE 
      a NUMBER := NULL; 
      b NUMBER := NULL; 
    BEGIN 
      IF a = b THEN 
       -- Devuelve NULL, no entra.! 
       -- Esto no se va a ejecutar 
       DBMS_OUTPUT.PUT_LINE('a = b'); 
      ELSIF a != b THEN 
       -- Devuelve NULL, no entra.! 
       -- Esto no se va a ejecutar 
       DBMS_OUTPUT.PUT_LINE('a != b'); 
      ELSE 
       -– como todas las validaciones no se cumplen, entra por aqui.! Ya 
       -- que todo valor NULL que se compare, devolverá NULL 
       DBMS_OUTPUT.PUT_LINE(' No se puede saber si dos NULL son iguales'); 
      END IF; 
    END;
    
    

    Para el manejo de NULOS, utilice la función NVL() de Oracle. Para más información siga este enlace… https://ora.u440.com/conversion/nvl.html


    NULL y el operador NOT


    Recuerde que aplicar el operador lógico NOT a un NULL produce NULL. PL/SQL trata cualquier cadena de longitud cero como un nulo. Esto incluye valores devueltos por funciones de carácter y expresiones BOOLEANOS. Debes utilizar el operador IS NULL para comprobar si las cadenas están nulas.
    Para el manejo del operador de concatenación. Este ignora los operandos nulos. Sólo mostrando como salida los demás operando que contengan información.

    
    DECLARE 
      cadena VARCHAR2(10) := NULL; 
      frutas VARCHAR2(50); 
    BEGIN 
      IF cadena IS NULL THEN 
       frutas := 'Pera' || NULL || NULL || 'Mora'; 
      END IF;
      
      DBMS_OUTPUT.PUT_LINE(frutas); 
      // La salida será: ‘PeraMora’ 
    END;
    
    






    Si este contenido te fue útil, no olvides compartirlo en redes sociales, Considéralo. Puede ser la manera de agradecer!


    Agrega tu comentario...

    Puedes utilizar etiquetas <pre></pre>, <p></p>, <div></div>, + (Nombre usuario, para responderle a alguien)

    xe2hdqE





    Este post no tiene comentarios, sé el primero en hacerlo
    Esta entrada no cuenta con imágenes adjuntas

    Unete al grupo de whatsApp +57 316 392 6456

    Sigue el grupo en facebook

    Siguenos.....