PROGRAMACIÓN DE BASE DE DATOScursos.iplacex.cl/CED/PBD3008/S1/ME_1.pdf · 2018. 7. 17. · 13 3-...
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/1.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/2.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/3.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/4.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/5.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/6.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/7.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/8.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/9.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/10.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/11.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/12.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/13.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/14.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/15.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/16.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/17.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/18.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/19.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/20.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/21.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/22.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/23.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/24.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/25.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/26.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/27.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/28.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/29.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/30.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/31.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/32.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/33.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/34.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/35.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/36.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022071300/608e126d1ba28518130e9792/html5/thumbnails/37.jpg)
www.iplacex.cl
37