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