Operadores en PL/SQL

Pl/SQL maneja diferentes clases de operadores para hacer infinidad de tareas, tenemos:

  • operador de asignación
  • operadores aritméticos
  • operador de concatenación
  • operadores de comparación
  • operadores lógicos

Operador de asignación en PL/SQL

Asignamos valores a variables y constantes con el operador dos puntos igual (:=)

Operador Descripción Uso
:= Asignación de valor edad := 100

En este ejemplo asignaremos a la variable lv_edad el valor de 100 para luego mostrar su valor en pantalla :

DECLARE
   lv_edad NUMBER(3);
BEGIN
   lv_edad:= 100; --asignamos el valor 100 a la variable lv_edad
   DBMS_OUTPUT.PUT_LINE(lv_edad);
END;

Salida:

100

Statement processed.

Operadores aritméticos

PL/SQL hace uso de los operadores aritméticos para hacer operaciones matemáticas entre dos o más valores.

Operador Descripción Uso
+ Suma 20 + 20 = 40
- Resta 20 – 9 = 11
* Mutiplicación 10 * 10 = 100
/ División 100 / 5 = 20
:= Asignación de valor edad := 100
BEGIN
   DBMS_OUTPUT.PUT_LINE( 20 + 20); -- operador de suma
   DBMS_OUTPUT.PUT_LINE( 20 - 9); -- operador de resta
   DBMS_OUTPUT.PUT_LINE( 10 * 10); -- operador de multiplicación
   DBMS_OUTPUT.PUT_LINE( 100 / 5); -- operador de división
   DBMS_OUTPUT.PUT_LINE( 2 ** 3); -- potenciación (dos elevado a la tres)
END;

Salida:

40

11

100

20

8

Statement processed.

Operador de concatenación

Este operador nos ayuda a juntar dos cadenas de caracteres, muy útil si queremos unir dos variables de tipo VARCHAR2, el operador es la doble pleca ( || )

Supongamos que queremos unir las variables lv_nombres y lv_apellidos para poder mostrar por pantalla el nombre completo de un estudiante

El siguiente ejemplo arrojaría un error porque no podemos simplemente colocar dos variables juntas para mostrarlas por pantalla:

DECLARE
   lv_nombres VARCHAR2(30):= 'Juan Andrés';
   lv_apellidos VARCHAR2(30):= 'Gonzalez';
BEGIN
   DBMS_OUTPUT.PUT_LINE(lv_nombres lv_apellidos);
END;

Salida:

ORA-06550: line 5, column 37:

PLS-00103: Encountered the symbol "LV_APELLIDOS" when expecting one of the following:

. ( ) , * @ % & = - + < /> at in is mod remainder not rem => <> or != or ~= >= <= <> and or like like2

like4 likec as between from using || multiset member submultiset The symbol "." was substituted for "LV_APELLIDOS" to continue.

Statement processed.

Ahora hacemos uso del operador de concatenación ( || ), sin embargo, de la siguiente forma mostraría pegadas ambas variables a la hora de mostrar por pantalla:

DECLARE
   lv_nombres VARCHAR2(30):= 'Juan Andrés';
   lv_apellidos VARCHAR2(30):= 'Gonzalez';
BEGIN
   DBMS_OUTPUT.PUT_LINE(lv_nombres||lv_apellidos);
END;

Salida:

Juan AndrésGonzalez

Statement processed.

De la siguiente forma mostramos el mensaje con un mejor formato que sea más legible. Vamos a colocar primero el apellido, posteriormente una coma(,) y por último el nombre del estudiante:

DECLARE
   lv_nombres VARCHAR2(30):= 'Juan Andrés';
   lv_apellidos VARCHAR2(30):= 'Gonzalez';
BEGIN
   DBMS_OUTPUT.PUT_LINE(lv_apellidos||', '||lv_nombres);
END;

Salida:

Gonzalez, Juan Andrés

Statement processed.

Operadores de comparación

Como su nombre lo indica estos operadores nos permitirán hacer comparaciones entre dos variables, son usados cuando queremos saber si dos valores son iguales, diferentes, mayores, menores, etc. Vamos con una tabla mostrando los operadores de comparación que tiene PL/SQL.

Operador Descripción
= Igual que
> Mayor que
< Menor que
<> Diferente que
!= Diferente que
>= Mayor o igual que
<= Menor o igual que

Si bien al verlos puestos en una tabla es difícil visualizar su uso tendremos una sección más adelante llamada Condicionales en las que mostraremos todos estos operadores, sin embargo, podemos adelantar un pequeño ejemplo de uno de sus usos.

En este ejemplo vamos a evaluar la edad de una persona, si la variable lv_edad es mayor o igual que 18, es decir, si es mayor de edad, mostraremos un mensaje en el que le permitiremos entrar a la discoteca, por el contrario, si es menor que 18, prohibiremos la entrada del sujeto. Prueba asignar a la variable lv_edad un valor menor que 18 para que veas la diferencia:

DECLARE
   lv_nombres VARCHAR2(30):= 'Juan Andrés Gonzalez';
   lv_edad NUMBER(2):= '18';
BEGIN
   IF lv_edad >= 18 THEN -- acá estamos comparando si la lv_edad es mayor o igual que 18 lo dejaremos pasar a la disco
      DBMS_OUTPUT.PUT_LINE(lv_nombres||', '||'Bienvenido a la disco, puedes pasar');
   ELSE -- si lv_edad es menor que 18 lo mandamos a su casa a juagar a Play
      DBMS_OUTPUT.PUT_LINE(lv_nombres||', '||'Usted es menor de edad, vaya a su casa a jugar a la Play');
   END IF;
END;

Salida:

Juan Andrés Gonzalez, Bienvenido a la disco, puedes pasar

Statement processed.

Operadores lógicos

Los operadores lógicos van de la mano con las condiciones, estos operadores trabajan con valores lógicos y a su vez retornan resultados también lógicos recuerda que vamos a explicar a profundidad más adelante, sin embargo mostraremos una tabla con los tres operadores lógicos de PL/SQL.

Operador Descripción Retorno
AND Operador y Verdadero si ambos son verdaderos
OR Operador O Verdadero si cualquiera de los elementos es verdadero
NOT Operador No Cambia el valor de Falso a Verdadero y viceversa

Podrías ver lo anterior de la siguiente forma:

  • IF (1 = 1) AND (2 = 2) = Verdadero
  • IF (1 = 1) AND (2 = 3) = Falso
  • IF (1 = 1) OR (2 = 3) = Falso
  • IF NOT (2 = 3) = Verdadero

Vamos a hacer una aplicación que evalue que tan buen hijo eres, si comes todos tus vegetales (lv_comer_todos_los_vegetales BOOLEAN:= TRUE;) y (AND) haces la tarea (lv_hacer_la_tarea BOOLEAN := TRUE; ) la aplicación dirá por pantalla que eres un gran hijo. Prueba cambiar todas las combinaciones de TRUE y FALSE en la sección de declaraciones (DECLARE) para que veas lo que obtienes

DECLARE
   lv_hacer_la_tarea BOOLEAN := TRUE;
   lv_comer_todos_los_vegetales BOOLEAN:= TRUE;
BEGIN
   IF lv_hacer_la_tarea = TRUE AND lv_comer_todos_los_vegetales = TRUE THEN
      DBMS_OUTPUT.PUT_LINE('Eres un gran hijo');
   ELSIF (lv_hacer_la_tarea = TRUE AND lv_comer_todos_los_vegetales = FALSE) OR (lv_hacer_la_tarea = FALSE AND lv_comer_todos_los_vegetales = TRUE) THEN
      DBMS_OUTPUT.PUT_LINE('Eres buen hijo');
   ELSIF lv_hacer_la_tarea = FALSE AND lv_comer_todos_los_vegetales = FALSE THEN
      DBMS_OUTPUT.PUT_LINE('Eres muy mal hijo, debes comer vegetales y hacer la tarea');
   END IF;
END;  

Salida:

Eres un gran hijo

Statement processed.