PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3-...

37
www.iplacex.cl PROGRAMACIÓN DE BASE DE DATOS UNIDAD Nº I INTRODUCCIÓN A PL/SQL

Transcript of PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3-...

Page 1: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

PROGRAMACIÓN DE BASE DE DATOS UNIDAD Nº I INTRODUCCIÓN A PL/SQL

Page 2: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

2

Desarrollo

Aspectos Generales de PL/SQL

PL/SQL (Procedural Language/SQL) es un lenguaje de programación y manipulación de

datos que proporciona Oracle.

Provee una manera muy cómoda de relacionar los conceptos de Bases de Datos y

manejarlos mediante ciertas estructuras de control.

Es una Extensión Procedimental del SQL combinando la potencialidad y flexibilidad de

SQL con la de un lenguaje 3GL:

• SQL es un Lenguaje de Consulta de Cuarta Generación (4GL) para Base

de Datos Relacionales que describe lo que se debe hacer pero no como

hacerlo.

• Los Lenguajes de Tercera Generación (3GL) tienen estructuras

procedimentales para expresar como efectuar las operaciones.

Proporciona una estructura de bloque para escribir el código ejecutable, permitiendo que

su mantención sea fácil.

Proporciona todo lo que está disponible en un lenguaje procedimental 3GL como son:

• Variables, constantes y tipos.

• Estructuras de control como sentencias condicionales.

• Unidad de programa Reusable que se escribe una vez y ejecutado

muchas veces.

Permite construir las unidades de programas de la Base de Datos Oracle como son:

Procedimientos, Funciones, Triggers, Package y Scripts.

SEMANA 1

Page 3: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

3

Beneficios de PL/SQL

Integración de lenguaje procedimental con SQL: la ventaja más importante de

PL/SQL es la integración de las construcciones de procedimiento con SQL. SQL

es un lenguaje no procedimental. Cuando se ejecuta un comando SQL, el

comando le dice al servidor de base de datos qué hacer. Sin embargo, no se

puede especificar cómo hacerlo. PL/SQL integra sentencias de control e

instrucciones condicionales.

Mejora el rendimiento: sin PL/SQL no se podría combinar lógicamente sentencias

SQL como una unidad. Las sentencias SQL se envían de una en una a la base

de datos. Esto se traduce en una llamada a la base de datos para cada sentencia

de SQL, lo que aumenta el tráfico de red y la reducción del rendimiento (

especialmente en un modelo cliente / servidor).

Con PL / SQL, se pueden combinar todas estas sentencias SQL en una sola

unidad de programa. La aplicación puede enviar todo el bloque a la base de datos

en lugar de enviar las sentencias SQL de una en una. Esto reduce

significativamente el número de llamadas de base de datos.

Desarrollo de Programas Modulares: la unidad básica en un programa PL/SQL

es un bloque, por lo tanto todos los programas PL/SQL contienen bloques los que

pueden estar en secuencia o anidados en otros bloques. El desarrollo de

programas modularizados tienen la ventaja de que:

• Se pueden agrupar lógicamente sentencias relacionadas dentro de

bloques.

• Se pueden anidar bloques dentro de bloques grandes para construir

programas poderosos.

• Se pueden mantener fácilmente y optimizar el código.

Integración con herramientas de Oracle: el motor de PL/SQL está integrado en las

herramientas de Oracle como Oracle Forms, Reports de Oracle entre otras. Al

utilizar estas herramientas, el motor de PL/SQL localmente procesa las sentencias

procedimentales; sólo las sentencias SQL se ejecutan en la base de datos.

Portabilidad: un programa PL/SQL se puede ejecutar en cualquier Servidor Oracle

independiente del Sistema Operativo y la Plataforma.

Page 4: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

4

Manejo de errores: PL/SQL permite manejar errores o excepciones de manera

eficiente. Se pueden definir bloques separados para tratar las excepciones. Las

excepciones pueden ser definidas por el usuario o propios de Oracle

(predefinidas).

Estructura de un Bloque PL/SQL

PL/SQL es un lenguaje estructurado en bloques, por lo tanto la unidad básica de

codificación en los programas PL/SQL son bloques lógicos.

Mejoran el rendimiento, pues se envían los bloques completos al servidor para ser

procesados en lugar de enviar cada sentencia SQL. Los bloques pueden contener otros

sub-bloques dentro de ellos con las mismas características. Un bloque (o sub-bloque)

permite agrupar en forma lógica un grupo de sentencias. Se pueden efectuar declaración

de variables que sólo son validas en los bloques donde fueron definidas.

Los bloques PL/SQL presentan una estructura específica de tres partes bien definidas

una sección de Declaración, una sección de Ejecución y otra de manejo de Excepciones.

Page 5: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

5

Sección de Declaración(opcional): comienza con la palabra DECLARE y termina

cuando comienza la sección de Ejecución. Contiene declaración de todas las

variables, constantes, cursores y excepciones definidas por el usuario que serán

referenciadas en las secciones de ejecución y excepción.

Sección de Ejecución (obligatorio): comienza con la palabra BEGIN y finaliza con

END. Observe que END finaliza con ; (punto y coma). La sección ejecutable de

un bloque PL/SQL contiene sentencias SQL que recuperan datos desde la Base

de Datos y sentencias PL/SQL para manipular los datos. Un bloque PL/SQL puede

estar formado por más de un bloque PL/SQL.

Sección de Excepciones (opcional): La sección de excepciones está dentro de la

sección de ejecución. Esta sección comienza con la palabra EXCEPTION y

especifica las acciones a realizar cuando una condición anormal y de error surge

en la sección de Ejecución.

Page 6: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

6

Tipos de Bloques PL/SQL

o Bloques Anónimos (Anonymous Blocks): Son bloques sin nombre, no se

almacenan en la base de datos y por lo tanto se compilan cada vez que son

ejecutados.

o Subprogramas: Son bloques PL/SQL con nombre y que pueden ser almacenados

en la Base de Datos:

Procedimientos (Procedures): son bloques PL/SQL que ejecutan una

secuencia de acciones. Una vez compilados quedan en la Base de Datos

y pueden ser utilizados por múltiples aplicaciones. Se compilan cada vez

que son ejecutados.

Funciones (Functions): son bloques PL/SQL que tienen las mismas

características de un procedimiento almacenado. La diferencia radica en

que debe retornar un valor. Las funciones y procedimientos se pueden

agrupar en estructuras llamadas Paquetes (Packages).

Paquetes (Packages): es una estructura PL/SQL que permite almacenar

en forma conjunta una serie de objetos relacionados. Dentro de un paquete

se pueden incluir procedimientos, funciones, cursores, tipos y variables.

Disparadores (Triggres): es un bloque PL/SQL que se ejecuta cuando

ocurre un evento particular sobre la tabla al que está asociado.

Page 7: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

7

Mostrando la Salida de un Bloque PL/SQL

Activar la salida en SQL Developer.

Para mostrar la salida de un bloque PL/SQL, primero se debe activar la visualización del

Package DBMS_OUTPUT (de Oracle) haciendo click en el botón Ver de SQL Developer.

que se ejecuten.

Segundo, elegir la opción Salida de DBMS (ventana 2) y se abrirá la ventana como la

que se muestra en número 3.

1

2

Page 8: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

8

En esta ventana se debe dar click en Activar DBMS_OUTPUT para conexión lo que hará

que aparezca la ventana 4.

En esta ventana se debe seleccionar base de datos en la cual se desea trabajar. Al

hacerlo se activará la ventana 5 en donde se visualizarán todas las salidas de los bloques

PL/SQL

Una vez activa la salida del bloque PL/SQL, se debe utilizar el package de Oracle

DBMS_OUTPUT y su procedimiento PUT_LINE en el bloque PL/SQL como se muestra

en ventana 6. De esta manera, el bloque obtiene el primer nombre del empleado con

identificación 100 y lo almacena en la variable v_fname. Posteriormente el bloque

muestra el mensaje El primer nombre del empleado 100 es concatenado con el valor

almacenado en la variable v_fname que es Steven.

3

4

Activar DBMS_OUTPUT para la conexión

5

Page 9: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

9

Usar en el bloque PL/SQL el package predefinido de Oracle y su procedimiento:

DBMS_OUTPUT.PUT_LINE

Por lo tanto al ejecutar el bloque PL/SQL la salida será el resultado que se muestra en

ventana 7.

6

7

Page 10: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

10

Otra opción para mostrar la salida de un bloque PL/SQL, es utilizar el comando SET

SERVEROUPUT ON el que se activará la visualización del DBMS_OUTPUT (como se

muestra en ventana 1). A continuación se escribe el bloque PL/SQL usando el package

de Oracle DBMS_OUTPUT y su procedimiento PUT_LINE.

Por lo tanto al ejecutar el bloque PL/SQL la salida será el resultado que se muestra en

ventana 2.

1

2

Page 11: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

11

Uso de Variables

Con PL / SQL, puede declarar variables y luego usarlos usadas en las sentencias SQL y

sentencias procedurales del bloque PL/SQL.

Las variables se utilizan principalmente para el almacenamiento de datos y la

manipulación de los valores almacenados.

En la declaración de PL/SQL del ejemplo, la sentencia recupera el first_name y

department_id de la tabla EMPLOYEES. Si se tiene que manipular el first_name o

department_id entonces se debe almacenar el valor recuperado. Las variables se utilizan

para almacenar temporalmente el valor y poder utilizarlos para el procesamiento y la

manipulación de los datos. Las variables pueden almacenar cualquier objeto PL / SQL,

tales como variables, tipos, cursores y subprogramas.

La reutilización es otra ventaja de la declaración de variables. Después de que se

declaran las variables, se pueden utilizar varias veces en una aplicación haciendo

referencia a ellas varias veces en diferentes declaraciones.

Page 12: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

12

Requisitos para los Nombres de Variables:

Manejo de Variables en PL/SQL:

Page 13: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

13

Declarar e Inicializar Variables PL/SQL

Se deben declarar todos los identificadores de variables PL/SQL en la sección de

declaración antes de hacer referencia de ellas en el bloque PL/SQL. Existe la opción de

asignar un valor inicial a una variable (como se muestra en el ejemplo). No es necesario

asignar un valor a una variable cuando se declara. Si se hace referencia otras variables

en una declaración, se deben haber declarado con anterioridad.

Sintaxis:

identificador [CONSTANT] tipo_dato [NOT NULL] [:= | DEFAULT expr ];

Donde:

• identificador: es el nombre de la variable.

• CONSTANT: indica que el valor de la variable no puede ser modificado. Las

variables constantes deben ser inicializadas.

• tipo_dato: indica que la variable es del tipo escalar, compuesto o del tipo LOB.

• NOT NULL: indica que la variable debe contener un valor. Una variable NOT

NULL debe ser inicializada con algún valor.

• expr: es cualquier expresión PL/SQL que puede ser una expresión literal, otra

variable ó incluso una expresión que utiliza una función.

Ejemplo:

DECLARE

v_Minombre VARCHAR2(20);

BEGIN DBMS_OUTPUT.PUT_LINE('Mi nombre es: ' || v_minombre);

v_Minombre := 'Juan';

DBMS_OUTPUT.PUT_LINE('Mi nombre es: ' || v_minombre);

END;

Page 14: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

14

Ejemplo:

DECLARE

v_Minombre VARCHAR2(20):= 'Juan';

BEGIN

v_Minombre:= 'Roberto';

DBMS_OUTPUT.PUT_LINE('Mi nombre es: ' || v_minombre);

END;

En el primer ejemplo, el bloque inicialmente sólo muestra el mensaje Mi nombre es ya

que la variable v_Minombre no fue inicializada con valor en la sección de Declaración de

variables (posee valor NULL). La segunda vez, además de mostrar el mensaje Mi nombre

es muestra el valor asignado a la variable v_Minombre (Juan) en la sección de Ejecución.

El bloque del segundo ejemplo, muestra para la variable Minombre el valor Roberto, ya

que a pesar de haber sido inicializa en la sección de Declaración de variables con el valor

Juan en la sección de Ejecución antes de mostrar el mensaje se le modifica el valor a

Roberto.

Page 15: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

15

Consideraciones para Declarar e Inicializar Variables PL/SQL:

Tipos de Variables

Cada variable PL/SQL tiene un tipo de datos, que especifica un formato de

almacenamiento, restricciones y un rango de valores válidos:

• Tipos de datos escalares: los tipos de datos escalares tienen un solo valor. El

valor depende del tipo de datos de la variable. PL / SQL también permite variables

booleanas.

• Tipos de datos LOB: los tipos de datos LOB tienen valores llamados localizadores

que especifican la ubicación de los objetos grandes (como imágenes gráficas )

que se almacenan fuera de la tabla.

Page 16: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

16

Tipos de Datos Escalares

• Tienen un tipo de dato que especifica el formato de almacenamiento y rango válido

de valores.

• Pueden ser clasificados en cuatro categorías: Caracter, Número, Fecha, y

Booleano.

Page 17: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

17

Variables Tipos de Datos LOB

Lobs (largo objetos) es el medio para almacenar cantidad de datos grande. Se pueden

almacenar bloques de datos (como imágenes de gráficos, videos y formatos de música)

por sobre los 4GB:

• CLOB (caracter largo objeto): Usado para almacenar grandes bloques de datos

caracteres en la Base de Datos.

• BLOB (binar largo objeto): Almacena objetos de estructuras binarias en la Base

de Datos. La Base de Datos no interpreta el dato. Las aplicaciones externas que

usa este dato debe interpretar el dato.

• BFILE (binar fila): Almacena archivos binarios grandes. A diferencia de otros

Lobs, BFILES no están almacenados en la Base de Datos, ellos están fuera de la

Base de Datos. Sólo un puntero para el BFILE es almacenado en la Base de

Datos.

• NCLOB (nacional lenguaje caracter largo objeto): Es usado para almacenar

bloques de datos que tienen que ver con lenguaje.

Page 18: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

18

Unidades Léxicas en un Bloque PL/SQL

Las unidades léxicas son los componentes básicos de cualquier bloque PL/SQL. Incluyen

letras, números, tabulaciones, espacios, saltos de línea y símbolos.

Se pueden clasificar como:

Identificadores: Son empleados para nombrar objetos de programas en PL/SQL.

Son utilizados para nombrar unidades dentro de un programa PL/SQL que

incluyen: Constantes, Cursores, Variables, Subprogramas, Excepciones y

Paquetes.

Delimitadores: es un símbolo simple o compuesto que tiene una función especial

en PL/SQL. Estos pueden ser: Operadores Aritméticos, Operadores Lógicos y

Operadores Relacionales.

Literales: valor asignado a una variable en forma explícita o textual.

Comentarios: texto de aclaración o documentación que se incluye en el bloque.

Page 19: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

19

Los delimitadores son símbolos simples o compuestos que tienen un significado especial

en el PL/ SQL.

Page 20: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

20

Un literal es cualquier valor textual que se asignado a una variable. Es un valor explícito

de tipo numérico, caracter, fecha o booleano.

Los valores de caracteres y fechas deben ir entre comillas simples.

Un comentario es una explicación que se incluye en el código y que no es interpretada

por el compilador.

Page 21: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

21

Sentencias SQL en Bloques PL/SQL

Para recuperar datos desde la Base de Datos se debe utilizar la sentencia SELECT.

Sintaxis:

Page 22: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

22

Ejemplo:

El bloque PL/SQL anterior ahora obtiene el primer nombre del empleado 200 y se

almacena en la variable v_fname para posteriormente mostrarlo.

Ejemplo:

El bloque PL/SQL, obtiene el primer nombre de los empleados con identificación mayor

a 200. Esto visualiza el error ORA-01422 ya que la sentencia retorna más de una fila y

una sentencia SELECT con cláusula INTO debe retornar una fila. La opción es utilizar

una comparación que asegure el retorno de una fila o utilizar un cursor explícito.

Page 23: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

23

Ejemplo:

En el bloque PL/SQL, se obtiene la sumatoria de los salarios de todos los empleados

que trabajan en el departamento 60.

Page 24: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

24

Control del Flujo de Ejecución

Se puede cambiar la ejecución lógica de las sentencias dentro de un bloque PL/SQL a

través de Estructuras de Control. Una estructura de control consta de un punto de

entrada y uno de salida.

Las Estructuras de Selección: verifican cierta condición, después ejecutan cierta

secuencia de expresiones dependiendo si la condición resultó ser verdadera o

falsa. Una condición es cualquier variable o expresión que retorna un valor

booleano (TRUE, FALSE o NULL).

Expresiones CASE: retornan un resultado basado en una o más alternativas.

Sentencias CASE: evalúan una condición y realiza una acción.

Las Estructuras de Iteración: ejecutan una secuencia de sentencias

repetidamente mientras la condición permanezca verdadera.

Page 25: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

25

Sentencia IF

La estructura de control de PL/SQL IF es similar a la estructura IF de otros lenguajes

procedurales. Permiten realizar acciones de forma selectiva basado en la evaluación de

condiciones.

Donde:

• condición: es una variable o expresión booleana que retorna TRUE, FALSE o

NULL.

• THEN: Asocia la expresión Booleana con la secuencia de instrucciones que

continúan.

• sentencias: puede ser una o más sentencias PL/SQL o SQL. Las sentencias son

ejecutadas sólo si la condición es evaluada como TRUE.

• ELSIF: Es una palabra que introduce condiciones adicionales si la primera

condición retorna FALSE o NULL.

• ELSE: Introduce la cláusula por defecto que es ejecutada sólo si ninguno de las

condiciones anteriores es TRUE.

• END IF: Marca el fin de una sentencia IF.

Page 26: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

26

Sentencia IF Simple:

En el bloque PL/SQL del primer ejemplo, la variable v_mi_edad es inicializada en 31. La

condición de la sentencia IF retorna FALSE, porque v_mi_edad no es menor que 11 por

lo tanto el control nunca alcanza la cláusula THEN sino que la ejecución del bloque

continúa después del END IF.

En el bloque del segundo ejemplo, la condición usa el operador AND por lo tanto, por lo

tanto la condición completa es evaluada como TRUE sólo si ambas condiciones son

evaluadas como TRUE. Por lo tanto en este caso como ambas condiciones son

verdaderas (TRUE) el control alcanza la cláusula THEN y el bloque muestra el mensaje

Yo soy un niño que se llama Luis.

Page 27: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

27

Sentencia IF THEN ELSE:

Ejemplo:

En el bloque PL/SQL, se obtiene el salario mínimo entre todos lo empleados el que se

visualiza una vez obtenido. Posteriormente se ejecuta la condición de la sentencia IF la

que retorna FALSE porque v_salario_min no es mayor a 3000 por lo tanto el control pasa

a la cláusula ELSE y se mostrará el mensaje Por lo tanto debe ser aumentado.

Sentencia IF THEN ELSIF ELSE:

Ejemplo:

En el ejemplo, se valida el salario máximo obtenido desde tabla employees. Las

cláusulas son evaluadas una a una hasta que alguna de ellas retorne TRUE. Si todas la

condiciones son FALSE o NULL se ejecutarán las sentencias de la cláusula ELSE (si

existe). En el ejemplo, el salario máximo es 24100 por lo tanto el bloque mostrará el

mensaje Salario máximo es mayor a 20000 de la cláusula ELSE.

Page 28: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

28

En el ejemplo, se valida el salario máximo obtenido desde tabla employees. Las

cláusulas son evaluadas una a una hasta que alguna de ellas retorne TRUE. Si todas la

condiciones son FALSE o NULL se ejecutarán las sentencias de la cláusula ELSE (si

existe). En el ejemplo, el salario máximo es 24100 por lo tanto el bloque mostrará el

mensaje Salario máximo es mayor a 20000 de la cláusula ELSE.

Page 29: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

29

Expresiones CASE

Una expresión CASE retorna un resultado basado en una o más alternativas. Para

devolver el resultado, la expresión CASE utiliza un selector, que es una expresión cuyo

valor se utiliza para devolver una de varias alternativas. El selector es seguido por una

más cláusulas WHEN que se comprueban

secuencialmente. El valor del selector determina qué resultado se devuelve. Si el valor

del selector es igual al valor de una expresión de la cláusula WHEN, la cláusula WHEN

se ejecuta y que se retorna el resultado.

Sintaxis:

Donde:

• Para retornar el resultado, la expresión CASE usa un selector y una expresión

cuyo valor es usado para retornar uno de las diferentes alternativas.

• El selector es seguido de una o más cláusulas WHEN que son chequeadas

secuencialmente.

• El valor del selector determina que resultado se retorna.

• Si el valor del selector es igual al valor de la expresión de la cláusula WHEN ésta

es ejecutada y el resultado correspondiente es retornado.

Page 30: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

30

• Las cláusulas WHEN contiene condiciones de búsqueda que devuelven un valor

Booelano.

Ejemplo:

En el bloque del ejemplo, el selector v_calidad determina el valor que la variable

v_valoracion tendrá. En este caso, será el valor ‘Excelente’, ya que la variable calidad se

ha inicializa en ‘A’.

Page 31: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

31

Sentencias CASE

Ejemplo:

En el ejemplo, el bloque obtiene el salario promedio entre todos los empleados. La

sentencia CASE evalúa el valor del salario promedio obtenido para actualizar el salario

a los empleados que corresponda según la condición dada.

Diferencias entre CASE

Page 32: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

32

Controles de Iteración (Bucles)

Los Bucles repiten una sentencia o secuencia de sentencias múltiples

veces.

Son usados principalmente para ejecutar sentencias en forma

repetitiva hasta que se cumpla una condición de salida.

PL/SQL ofrece varias facilidades para estructurar bucles y poder repetir una instrucción

o secuencia de instrucciones varias veces. Los loops se utilizan principalmente para

ejecutar instrucciones de forma repetida hasta que se alcanza una condición de salida.

Es obligatorio tener una condición de salida en un loop, de lo contrario, es infinito.

Las construcciones de loop o bucle son el segundo tipo de estructura de control. PL/SQL

proporciona los siguientes tipos de loops:

• Loop Básico que realiza acciones repetitivas sin condiciones generales.

• FOR loops que realizan acciones iterativas basadas en un recuento.

• WHILE loops que realizan acciones iterativos basados en una condición.

El comando EXIT se puede utilizar para terminar loops. Un loop básico debe tener una

salida.

Loop Básico

La forma más simple de una sentencia LOOP es el Loop Básico, que encierra una serie

de declaraciones entre las palabras reservadas LOOP y END LOOP . Cada vez que el

flujo de ejecución llega a la instrucción END LOOP se devuelve el control a la sentencia

LOOP correspondiente. Un loop básico permite la ejecución de sus sentencias al menos

una vez, incluso si la condición de salida ya se cumple al entrar en el loop .

Sin la instrucción EXIT, el loop sería infinito . Se puede usar la sentencia EXIT para

terminar el loop. El control pasa a la siguiente sentencia después de la sentencia END

LOOP. Si a la sentencia EXIT se agrega una Condición WHEN significa que el LOOP se

ejecutará hasta que se cumpla la condición. Un loop básico puede contener múltiples

sentencias EXIT, pero se recomienda que sólo tener un punto de salida.

Page 33: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

33

Sintaxis:

Donde:

• sentencia: pueden ser uno o más sentencias PL/SQL o SQL.

• condición: es una variable Booleana o expresión.

Ejemplo:

El bloque PL/SQL del ejemplo inserta nuevas filas a la tabla locations. La inserción de

nuevas filas se efectuará 3 veces ya que el LOOP es controlado a través de la variable

contador. Cuando esta variable sea mayor a 3 el control pasará a la sentencia que

continúa después del END LOOP, en este caso se acaba el bloque PL/SQL.

Page 34: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

34

WHILE Loop

Se puede utilizar el WHILE Loop para repetir una secuencia de sentencias hasta que la

condición de control no sea verdadera. La condición se evalúa al inicio de cada iteración.

El ciclo termina cuando la condición es FALSE o NULL. Si la condición es FALSE o NULL

en el inicio del loop, no se realizan más iteraciones. Por lo tanto, es posible que ninguna

de las instrucciones dentro del loop se ejecuta.

Sintaxis:

Donde:

• condición: es una variable Booleana o expresión.

• sentencia: pueden ser uno o más sentencias PL/SQL o SQL.

Ejemplo:

La condición ahora es evaluada al comienzo de cada iteración a través de la variable

contador. Cuando esta variable sea mayor a 3 el control pasará a la sentencia que

continúa después del END LOOP.

Page 35: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

35

FOR Loop

FOR Loop tiene la misma estructura general que el Loop básico. Además, tienen una

instrucción de control antes de la palabra clave LOOP para establecer el número de

iteraciones que realiza PL/SQL.

Las iteraciones se efectúan un número finito y conocido de veces. El contador es

declarado implícitamente y sólo pude ser usado dentro del loop.

La sintaxis ‘límite_inferior .. límite_superior’ es obligatoria. Pueden ser literales, variables

o expresiones pero que deben ser números enteros.

Sintaxis:

Donde:

• contador: es un entero declarado implícitamente (sólo involucra al loop y

posteriormente se elimina) cuyo valor incrementa o disminuya de manera

automática en uno en cada iteración del loop hasta que se alcanza el

límite_inferiror o límite_superior.

• REVERSE: causa que el contador disminuya con cada iteración desde el

límite_superior al límite_inferior.

• límite_inferior: específica el valor inferior del contador.

• límite_superior: especifica el valor superior del contador.

Page 36: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

36

Ejemplo:

En el bloque ahora el ciclo iterativo se maneja con FOR LOOP. La variable i es declara

implícitamente para ser usada en el loop y su valor irá desde el límite inferior (1) al límite

superior (3) que indica la cantidad de iteraciones del loop. Una vez que se haya llegado

al valor_máximo del loop el control pasará a la sentencia que continúa después del END

LOOP.

Pautas para Loops

Page 37: PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3- ELSE: introduce la clausula por defecto que es ejecutada solo si ninguna de las otras

www.iplacex.cl

37