FACULTAD DE CIENCIAS FÍSICAS Y MATEMÁTICA
CARRERA DE INGENIERÍA INFORMÁTICA
BASES DE DATOS III
TEMA:
OPERADORES Y ESTRUCTURAS DE CONTROL EN ORACLE 11G R2
ESTUDIANTE:
Michael Ponce Cevallos
SEMESTRE:
Sexto
DOCENTE:
Ing. Jorge Gordillo
QUITO - ECUADOR
2019-2019
CONTENIDO
INTRODUCCIÓN ....................................................................................................................................... 3
1. OBJETIVOS ........................................................................................................................................ 4
1.1. Objetivo general .......................................................................................................................... 4
1.2. Objetivos específicos: .................................................................................................................. 4
2. MARCO TEÓRICO............................................................................................................................ 4
2.1 Operadores ......................................................................................................................................... 4
2.2 Bloques pl/sql ................................................................................................................................... 10
2.3 ESTRUCTURAS DE CONTROL ................................................................................................. 11
3. CONCLUSIONES ............................................................................................................................. 18
Bibliografía................................................................................................................................................... 19
INTRODUCCIÓN
El trabajo realizado hasta ahora con la base de datos se ha hecho de forma interactiva: el
usuario introducía una orden (en SQL) y Oracle proporcionaba una respuesta. Esta forma de
trabajar no resulta operativa en un entorno de producción. Para superar estas limitaciones, Oracle
incorpora un gestor PL/SQL en el servidor de la BD.
Este lenguaje incorpora todas las características propias de los lenguajes de tercera
generación tales como: manejo de variables, estructura modular (procedimientos y funciones),
estructuras de control (bifurcaciones, bucles y demás estructuras), control de excepciones, y una
total integración en el entorno Oracle
De entre todas estas características el siguiente documento se encargará de explicar de
forma clara, el uso de los operadores y estructuras de control PL/SQL.
Operadores y estructuras de control en Oracle 11g R2 Página 3
1. OBJETIVOS
1.1. Objetivo general
Explicar el uso de los operadores y las estructuras de control en PL/SQL
1.2. Objetivos específicos:
Indicar los operadores de control usados en PL/SQL
Explicar el uso de la estructura condicional IF.
Explicar el uso de la estructura condicional CASE.
Explicar el uso del bucle FOR.
Explicar el uso del bucle WHILE.
Explicar el uso del bucle LOOP.
Explicar el uso de la estructura GOTO.
2. MARCO TEÓRICO
2.1 Operadores
Los operadores son símbolos que permiten realizar operaciones matemáticas, concatenar cadenas,
hacer comparaciones.
Oracle reconoce de 4 tipos de operadores:
Relacionales (o de comparación)
Aritméticos
Concatenación
Lógicos
Los operadores relacionales (o de comparación)
Nos permiten comparar dos expresiones, que pueden ser variables, valores de campos, etc.
Los operadores relacionales comparan valores del mismo tipo.
Se emplean para comprobar si un campo cumple con una condición.
Operadores y estructuras de control en Oracle 11g R2 Página 4
Ejemplo:
select * from libros
where autor='Borges';
Utilizamos el operador relacional de igualdad.
Los operadores relacionales vinculan un campo con un valor para que Oracle compare cada
registro (el campo especificado) con el valor dado.
Los operadores relacionales son los siguientes:
:= asignación
= igual
<> distinto
> mayor
< menor
>= mayor o igual
<= menor o igual
Podemos comparar valores numéricos.
Ejemplo:
Mostrar los títulos y precios de los libros cuyo precio sea mayor a 20 pesos:
select título, precio
from libros
where precio>20;
Otros operadores relacionales
is null
Operadores y estructuras de control en Oracle 11g R2 Página 5
Para recuperar los registros que contengan el valor "null" en algún campo, no podemos utilizar
los operadores relacionales vistos anteriormente: = (igual) y <> (distinto); debemos utilizar los
operadores "is null" (es igual a null) y "is not null" (no es null).
Ejemplo:
Mostrar los libros que contienen valor nulo en el campo "editorial":
select * from libros
where editorial is null;
Recuerde que los valores nulos no se muestran, aparece el campo vacío.
between
Trabaja con intervalos de valores.
Ejemplo:
Podemos especificar un intervalo de valores de tipo fecha con "between":
select * from libros
where edicion between '01/05/2000' and '01/05/2007';
"between" significa "entre". Trabaja con intervalo de valores.
Este operador no tiene en cuenta los valores "null".
Si agregamos el operador "not" antes de "between" el resultado se invierte, es decir, se recuperan
los registros que están fuera del intervalo especificado.
Ejemplo:
Mostrar los libros cuyo precio NO se encuentre entre 20 y 30, es decir, los menores a 20 y
mayores a 30:
select * from libros
where precio not between 20 and 30;
in
Operadores y estructuras de control en Oracle 11g R2 Página 6
Se utiliza "in" para averiguar si el valor de un campo está incluido en una lista de valores
especificada.
Ejemplo:
Averiguar si el valor del campo autor está incluido en la lista de valores especificada (en este
caso, 2 cadenas).
select * from libros
where autor in('Borges','Paenza');
Para recuperar los libros cuyo autor no sea 'Paenza' ni 'Borges'.
select * from libros
where autor not in ('Borges','Paenza');
Empleando "in" averiguamos si el valor del campo está incluido en la lista de valores
especificada; con "not" antecediendo la condición, invertimos el resultado, es decir, recuperamos
los valores que no se encuentran (no coinciden) con la lista de valores. Los valores "null" no se
consideran.
Operadores aritméticos (columnas calculadas)
Permiten realizar cálculos con valores numéricos.
Son: multiplicación (*), división (/), suma (+), resta (-) y exponente (**).
Es posible obtener salidas en las cuales una columna sea el resultado de un cálculo y no un
campo de una tabla.
Ejemplo:
Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la
sentencia los siguientes cálculos:
select titulo,precio,precio-(precio*0.1)
from libros;
También podemos actualizar los datos empleando operadores aritméticos:
Operadores y estructuras de control en Oracle 11g R2 Página 7
update libros set precio=precio-(precio*0.1);
Concatenación
Para concatenar cadenas de caracteres existe el operador de concatenación ||.
Ejemplo:
Para concatenar el título y el autor de cada libro usamos el operador de concatenación ("||").
select título||'-'||autor
from libros;
Si se desea separar los campos se concatena además un guion.
Oracle puede convertir automáticamente valores numéricos a cadenas para una concatenación.
Ejemplo:
Mostrar el título y precio de cada libro concatenado con el operador "||".
select titulo||' $'||precio
from libros;
Operadores lógicos
Los operadores lógicos se usan para combinar condiciones.
Podemos establecer más de una condición con la cláusula "where", para ello es necesario los
operadores lógicos.
Son los siguientes:
and significa "y",
or significa "y/o",
not significa "no", invierte el resultado
() paréntesis
Ejemplo:
Mostrar todos los libros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20 pesos.
Operadores y estructuras de control en Oracle 11g R2 Página 8
select * from libros
where (autor='Borges') and
(precio<=20);
Mostrar los libros cuyo autor sea "Borges" y/o cuya editorial sea "Planeta":
select * from libros
where autor='Borges' or
editorial='Planeta';
Mostrar los libros que NO cumplan la condición dada, por ejemplo, aquellos cuya editorial NO
sea "Planeta":
select *from libros
where not editorial='Planeta';
El operador "not" invierte el resultado de la condición a la cual antecede.
Los registros recuperados en una sentencia en la cual aparece el operador "not", no cumplen con
la condición a la cual afecta el "NOT".
Los paréntesis se usan para encerrar condiciones, para que se evalúen como una sola expresión.
Cuando explicitamos varias condiciones con diferentes operadores lógicos (combinamos "and",
"or") permite establecer el orden de prioridad de la evaluación; además permite diferenciar las
expresiones más claramente.
Ejemplo:
Las siguientes expresiones devuelven un resultado diferente:
select * from libros
where (autor='Borges') or
(editorial='Paidos' and precio<20);
select *from libros
where (autor='Borges' or editorial='Paidos') and
(precio<20);
Si bien los paréntesis no son obligatorios en todos los casos, se recomienda utilizarlos para evitar
confusiones.
Operadores y estructuras de control en Oracle 11g R2 Página 9
El orden de prioridad de los operadores lógicos es el siguiente: "not" se aplica antes que "and" y
"and" antes que "or", si no se especifica un orden de evaluación mediante el uso de paréntesis. El
orden en el que se evalúan los operadores con igual nivel de precedencia es indefinido, por ello se
recomienda usar los paréntesis.
2.2 Bloques pl/sql
Un programa de PL/SQL está compuesto por bloques. Un programa está compuesto como
mínimo de un bloque.
Los bloques de PL/SQL pueden ser de los siguientes tipos:
Bloques anónimos
Subprogramas
Estructura de un Bloque
Los bloques PL/SQL presentan una estructura específica compuesta de tres partes bien
diferenciadas:
La sección declarativa en donde se declaran todas las constantes y variables que se van a utilizar
en la ejecución del bloque.
La sección de ejecución que incluye las instrucciones a ejecutar en el bloque PL/SQL.
La sección de excepciones en donde se definen los manejadores de errores que soportará el
bloque PL/SQL.
Cada una de las partes anteriores se delimita por una palabra reservada, de modo que un bloque
PL/SQL se puede representar así:
[ declare | is | as ]
/*Parte declarativa*/
begin
/*Parte de ejecucion*/
Operadores y estructuras de control en Oracle 11g R2 Página 10
[ exception ]
/*Parte de excepciones*/
end;
Únicamente la sección de ejecución es obligatoria, que quedaría delimitada entre las cláusulas
BEGIN y END. Veamos un ejemplo de bloque PL/SQL muy genérico. Se trata de un bloque
anónimos, es decir no lo identifica ningún nombre. Los bloques anónimos identifican su parte
declarativa con la palabra reservada DECLARE.
DECLARE
/*Parte declarativa*/
nombre_variable DATE;
BEGIN
/*Parte de ejecucion
* Este código asigna el valor de la columna "nombre_columna"
* a la variable identificada por "nombre_variable"
*/
SELECT SYSDATE
INTO nombre_variable
FROM DUAL;
EXCEPTION
/*Parte de excepciones*/
WHEN OTHERS THEN
dbms_output.put_line('Se ha producido un error');
END;
2.3 ESTRUCTURAS DE CONTROL
Permiten controlar el comportamiento del bloque a medida que este se ejecuta. Estas estructuras
incluyen las órdenes condicionales y los bucles.
Permiten elegir la forma en que se van a ejecutar las diferentes instrucciones.
Estas estructuras, junto con las variables, son las que dotan al lenguaje PL/SQL de su poder y
flexibilidad.
Los posibles son:
o Secuencial: las instrucciones se ejecutan una detrás de otra.
Operadores y estructuras de control en Oracle 11g R2 Página 11
o Alternativa: las instrucciones se ejecutan en función de una condición.
o Repetitiva: las instrucciones se ejecutan varias veces en función de una condición.
Se tienen las siguientes estructuras de control:
IF…THEN…ELSE…END IF
CASE…WHEN…END CASE
LOOP…END LOOP
WHILE…LOOP…END LOOP
FOR…LOOP…END LOOP
GOTO
NULL
IF
Permite ejecutar instrucciones en función de una condición
Su sintaxis se muestra a continuación:
IF (expresion) THEN
-- Instrucciones
ELSIF (expresion) THEN
-- Instrucciones
ELSE
-- Instrucciones
END IF;
Un aspecto a tener en cuenta es que la instrucción condicional anidada es ELSIF y no "ELSEIF".
Los operadores más utilizados en las condiciones son los mismos que en SQL.
Ejemplo:
Si se trata del cliente número 10, se actualiza; en caso contrario, la transacción se anula.
if Vnumcli=10 then
update clientes set nomcli=’Torres’ where numcli=Vnumcli;
commit;
else
rollback;
end if;
CASE
Operadores y estructuras de control en Oracle 11g R2 Página 12
Permite una ejecución condicional, al igual que la instrucción IF. Sin embargo, la instrucción
CASE se adapta especialmente bien a las condiciones que implican numerosas opciones
diferentes. Proporciona una presentación que hace que el código se lea mejor y, por tanto,
disminuye el riesgo de cometer errores. Además, el uso de CASE puede mejorar el rendimiento
durante la ejecución.
Sintaxis:
[<<Etiqueta>>]
case elemento_de_seleccion
when valor1 then instrucciones1;
when valor2 then instrucciones2;
…….
[else instrucciones;]
end case [etiqueta];
[<<etiqueta>>]
case
when condicion1 then instrucciones1;
when condicion2 then instrucciones2;
…….
[else instrucciones;]
end case [etiqueta];
La condición ELSE es opcional y solo se ejecuta si ninguna de las condiciones WHEN anteriores
se ejecuta. Si no se define la condición de ELSE, PL/SQL añade implícitamente la siguiente
condición ELSE; ELSE RAISE CASE_NOT_FOUND, (lo que genera una excepción).
La instrucción CASE puede presentar dos formas. En la primera de ellas, el valor que debe
comprobarse sigue inmediatamente a CASE y se hace una comprobación de igualdad con cada
valor que sigue a las instrucciones EHEN, para determinar si hay que ejecutar o no las
instrucciones PL/SQL asociadas. En su segunda forma., cada instrucción WHEN va seguida de
una condición y, cuando esta condición es verdadera, se ejecutan las instrucciones PL/SQL
asociadas.
Operadores y estructuras de control en Oracle 11g R2 Página 13
En cualquier caso, las instrucciones WHEN se evalúan de forma secuencial y solo se ejecuta la
primera que es verdadera.
Ejemplo
declare
grado char(1);
begin
grado:=’B’;
case grado
when ‘A’ then dbms_output.put_line(‘Excelente’);
when ‘B’ then dbms_output.put_line(‘Bueno’);
when ‘C’ then dbms_output.put_line(‘Regular’);
end case;
exception
when case_not_found then
dbms_output.put_line(‘Condicion fuera del case’);
end;
/
En el siguiente ejemplo se evalúa la condición de cada clausula WHEN, para saber si es necesario
ejecutar o no las instrucciones que siguen a la palabra clave THEN.
declare
provincia number:=32;
comunidad varchar2(40);
begin
case provincia
when provincia in (02,13,16,19,45)
then comunidad:=’Castilla-LaMancha’;
when provincia in (04,11,14,18,21,23,29,41)
then comunidad:=’Andalucia’;
when provincial in (15,27,32,36)
then comunidad:=’Galicia’;
end case;
end;
/
Este último ejemplo demuestra la posibilidad de anidar las instrucciones CASE. Con este tipo de
anidamiento, hay que tener en cuenta los problemas de claridad del código.
set serveroutput on
declare
provincia number:=32;
Operadores y estructuras de control en Oracle 11g R2 Página 14
comunidad varchar2(80);
nomprov varchar2(80);
begin
case provincia
when provincia in (02,13,16,19,45)
then comunidad:=’Castilla-LaMancha’;
when provincia in (04,11,14,18,21,23,29,41)
then comunidad:=’Andalucia’;
when provincia in (15,27,32,36)
then comunidad:=’Galicia’;
case provincia
when 32 then nomprov;=’Orense’;
when 36 then nomprov;=’Pontavedra’;
when 27 then nomprov;=’Lugo’;
when 15 then nomprov:=’La Coruña’;
else nomprov:=’Fuera de la comunidad’;
end case;
end case;
end;
/
LOOP
El bucle LOOP, se repite tantas veces como sea necesario hasta que se fuerza su salida con la
instrucción EXIT o mediante la evaluación de una condición. Su sintaxis es la siguiente
Sintaxis
LOOP
-- Instrucciones
IF (expresion) THEN
-- Instrucciones
EXIT;
END IF;
END LOOP;
LOOP
-- Instrucciones
[EXIT [WHEN condicion]];
END LOOP;
Ejemplo:
loop
Operadores y estructuras de control en Oracle 11g R2 Página 15
insert into expediente
…….
if var1>50 then
exit;
end if;
end loop;
loop
insert into expediente
…….
exit when var1>50;
end loop;
Este bucle ejecutara una inserción en la tabla expediente hasta que el valor de la variable var1 sea
superior a 50.
WHILE
La entrada en el bucle tiene lugar si la condición es verdadera.
A continuación, se ejecutan las instrucciones mientras la condición siga siendo verdadera.
El bucle WHILE, se repite mientras que se cumpla la condición.
Sintaxis
[<<etiqueta>>]
WHILE (condicion) LOOP
Instrucciones
……
END LOOP [etiqueta];
La condición es una combinación de expresiones relacionadas mediante los operadores <, >, =,
!=, AND, OR, LIKE, etc.
Ejemplo
Creación de 11 clientes consecutivos:
x:=200;
while x<=210 loop
Operadores y estructuras de control en Oracle 11g R2 Página 16
insert into clientes (numcli) values (x);
x:=x+1;
end loop
commit;
FOR
El bucle FOR, se repite tanta vez como le indiquemos en los identificadores inicio y final.
Sintaxis
FOR contador IN [REVERSE] inicio..final LOOP
-- Instrucciones
END LOOP;
En el caso de especificar REVERSE el bucle se recorre en sentido inverso.
Ejemplo
for v_conta in 1..50 loop
insert into expediente
…….
end loop;
La variable que se utiliza como índice del bucle (contador) no es necesaria declararla
previamente en la sección DECLARE del bloque, se declara implícitamente cuando se asocia a
un bucle FOR y Oracle la gestiona con un tipo de dato BINARY_INTEGER.
GOTO
PL/SQL dispone de la sentencia GOTO. La sentencia GOTO desvía el flujo de ejecución a una
determinada etiqueta.
En PL/SQL las etiquetas se indican del siguiente modo: << etiqueta >>
Sintaxis
GOTO etiqueta;
Ejemplo:
Operadores y estructuras de control en Oracle 11g R2 Página 17
declare
flag number;
begin
flag :=1 ;
if (flag = 1) then
goto paso2;
end if;
<<paso1>>
dbms_output.put_line('ejecucion de paso 1');
<<paso2>>
dbms_output.put_line('ejecucion de paso 2');
end;
NULL
Permite introducirla en un bloque cuando no se quiere ejecutar operación alguna, pero es
necesario completar la sintaxis de una instrucción de control. Puede ser muy útil cuando se está
diseñando un programa en el que se empiezan a escribir las estructuras de control que se van a
utilizar, pero no se conoce aún el contenido de lo que tendrá que evaluar cada fase de la misma.
Ejemplo
if valor > 1 then
else
null;
end if;
3. CONCLUSIONES
En PL/SQL el uso de los operadores y las estructuras de control es muy importante para el
buen manejo y la administración de una base de datos
Las estructuras de control nos permiten la toma de decisiones cuando se tienen 2 o más
casos.
El bucle While nos da la facilidad al momento de tener que realizar varias repeticiones de
las operaciones que necesitemos.
Operadores y estructuras de control en Oracle 11g R2 Página 18
Bibliografía
http://www.oracleya.com.ar/index.php?inicio=25
http://www.devjoker.com/contenidos/catss/61/Operadores-en-PLSQL.aspx
http://www.devjoker.com/contenidos/catss/33/Estructuras-de-control-en-PLSQL.aspx
http://es.slideshare.net/XxkokoxX10/sesion06d-estructuras-de-control-oracle
http://www.friccio.com/articulos/Taller_Oracle_PLSQL_22112010.pdf
https://books.google.com.ec/books?id=dGm6ppeU1-
oC&pg=PT243&lpg=PT243&dq=estructuras+de+control+en+oracle+11g&source=bl&ots=Q2jDFjcHKp&sig
=iLaf2cw26tZ5DHAQUqZ2bGI1Pno&hl=es&sa=X&ved=0ahUKEwjGmq_8oI7KAhVHNiYKHYMVCaMQ6AEII
DAB#v=onepage&q&f=false
https://books.google.com.ec/books?id=1XbTQs1hQhQC&pg=PA19&lpg=PA19&dq=estructuras+de+contr
ol+en+oracle+11g&source=bl&ots=9j1Q_NBgW4&sig=6NDOu3D6via0WoXHQrkBa2L_UaU&hl=es&sa=X&
ved=0ahUKEwjGmq_8oI7KAhVHNiYKHYMVCaMQ6AEILzAE#v=onepage&q=estructuras%20de%20control
%20en%20oracle%2011g&f=false
https://elbauldelprogramador.com/introduccion-plsql/
Operadores y estructuras de control en Oracle 11g R2 Página 19