Oracle

Operadores relacionales en PL/SQL

Por : Jhons_1101
2017-06-09
Tags :
Los operadores relacionales, nos permitirán comparar expresiones dentro de un bloque de código PL/SQL, esta comparación tiene un orden de prioridad predefinido y que tendrá que respetarse para conseguir los resultados esperados. La siguiente tabla ilustra los operadores relacionales de PL/SQL.En donde se resalta su conformación, veremos con una serie de ejemplos el uso de cada uno de ellos.

Tipo de operador Operadores
Operador de asignación := (dos puntos + igual)
Operadores aritméticos + (suma)
- (resta)
* (multiplicación)
/ (división)
** (exponente)
Operadores relacionales o de comparación = (igual a)
<> (distinto de)
< (menor que)
> (mayor que)
>= (mayor o igual a)
<= (menor o igual a)
Operadores lógicos AND (y lógico)
NOT (negacion)
OR (o lógico)
Operador de concatenación ||

El orden de prioridad se verá afectado por el uso o no de parentesis (), estos nos ayudarán a determinar la prioridad que necesitamos y ayudará a la comprensión de nuestro bloque de sentencias.

Veamos la tabla de prioridad...
compartir en facebook compartir en Google compartir en Twitter compartir en Blogger compartir como código embebido compartir la url

Operador Operación
**, NOT Exponenciación, negación lógica
+, - Identidad, negación
*, / Multiplicación, división
+, -, || Suma, resta, concatenación
=, !=, <, >, <=, >=, IS NULL, LIKE, BETWEEN, IN Comparación
AND Conjunción
OR Disyunción


Operadores de Comparación

Los operadores de comparación, enfrenta una expresión con otra; el resultado es siempre TRUE, FALSE, o NULL. Normalmente, se utilizarán operadores de comparación en las claúsulas WHERE de una sentencia SQL, y en las sentencias de control condicional.


Operador IS NULL

El operador IS NULL, devuelve el valor booleano TRUE, si el operando es nulo, o FALSE si no lo es. Es muy importante utilizar siempre este operador cuando evaluemos si una expresión en nula, ya que la utilización de una comparación normal, nos daría un valor erróneo.

Revisemos este ejemplo...



DECLARE
   dummy   NUMBER;
BEGIN
    IF dummy = NULL THEN
        DBMS_OUTPUT.PUT_LINE('no es correcto usar este método');
    END IF;
          
    --En lugar de esto, debemos escribir…
    IF dummy IS NULL THEN
        DBMS_OUTPUT.PUT_LINE('Esta NULO');
    END IF;
	
	-- Salida:Esta NULO
END;


Operador LIKE



El operador LIKE se utiliza para comparar un valor alfanumérico con un patrón. Recordemos que oracle distingue entre mayúsculas y minúsculas. LIKE devuelve el valor booleano TRUE, si se produce un ‘match’ (coincidencia) con el patrón, y FALSE si no es así.

Los patrones que podemos ‘matchear’ con el operador LIKE, pueden incluir dos caracteres especiales llamados wildcards (comodines). El ‘underscore’ (_), y el tanto por ciento (%). El primero nos permitirá que el match devuelva TRUE para un solo carácter cualquiera, mientras que el segundo nos lo permitirá para varios.

Algo confuso verdad... Esperemos que este ejemplo dé claridad.


DECLARE 
    nombre varchar2(40) := 'juan';
    apellido varchar2(40) := 'rodríguez';
BEGIN 
    IF nombre LIKE 'J_AN' THEN
        DBMS_OUTPUT.PUT_LINE('Nombre:match=J_AN');
    ELSIF nombre LIKE 'j_an' THEN
        DBMS_OUTPUT.PUT_LINE('Nombre:match=j_an');
    END IF;
    
    IF apellido LIKE 'rodr%ez' THEN
        DBMS_OUTPUT.PUT_LINE('Apellido:match=rodr%ez');
    END IF;
  
  DBMS_OUTPUT.PUT_LINE(nombre||' '||apellido); 
END;



Debemos de ver que en el primer IF no entra al ser ORACLE sensible a mayúsculas y minúsculas al igual que la tíldes... Si ponemos 'rodri%ez' en vez de 'rodr%ez', veremos que no entra en el condicional y por ende no nos mostrará el correspondiente DBMS_OUTPUT.

Operador BETWEEN


El operador BETWEEN, testea si un valor se encuentra en un rango especificado. Su significado literal es ‘mayor o igual al valor menor, y menor o igual al valor mayor’.
Se puede usar en un condicional IF, CASE o una sentencia WHERE.


BEGIN
   IF 2 BETWEEN 1 AND 5 THEN
        DBMS_OUTPUT.PUT_LINE('Existe en el rango especificado');
   END IF;
END;



SELECT CASE
         WHEN COD_CUENTA_MEDICA BETWEEN 1050 AND 1100 THEN 'ENTRE 1050-1100'
         ELSE 'ELSE CASE'
      END
         AS ejemplo_case_select
 FROM IPS_FACTURA_MEDICA
 ORDER BY COD_CUENTA_MEDICA ASC;



SELECT * FROM IPS_FACTURA_MEDICA
WHERE COD_CUENTA_MEDICA BETWEEN 1050 AND 1100;



Muy práctico para cuando se requiera manejar rango de fechas, horas o sencillamente rango de valores.


Operador IN


El operador IN, comprueba si un valor pertenece a un conjunto. El significado literal sería ‘igual a cualquier miembro de…’.
Su uso debe de ir dentro de una clausula WHERE o CASE.


SELECT 
    COD_FACTURA_MEDICA, COD_CUENTA_MEDICA,CASE 
    WHEN COD_ESTADO_FACTURA = 1 THEN 'Ingresada'      
    WHEN COD_ESTADO_FACTURA = 2 THEN 'Autorizada'      
    WHEN COD_ESTADO_FACTURA IN (3,4)  THEN 'Devolución'                                                 
    END   AS ESTADO_FACTURA
FROM IPS_FACTURA_MEDICA;



SELECT 
    COD_FACTURA_MEDICA, COD_CUENTA_MEDICA
FROM IPS_FACTURA_MEDICA
WHERE COD_ESTADO_FACTURA IN (3,4);


Operador de Concatenación


El operador de concatenación son las dos barras verticales (||), el cual añade un string o variable con otra.
Si ambos operandos son del tipo CHAR, el operador de concatenación devuelve un valor CHAR… en cualquier otro caso devolverá un valor tipo VARCHAR2. Esto es importante saberlo, si deseamos asignar un valor compuesto por el operador de concatenación a una variable declarada de tipo CHAR.


DECLARE
   texto1 CHAR(10);
   texto2 CHAR(10);
   texto3 CHAR(20);
BEGIN
   texto1 := 'hola';
   texto2 := 'mundo';
   texto3 := texto1||''||texto2;
   DBMS_OUTPUT.PUT_LINE(texto3);
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)

9vsY7l4





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.....