Está en la página 1de 135

TALLER INTERNACIONAL INTRODUCCIÓN A

ORACLE PL/SQL

Instructor: Ing. Rodrigo Franti Alfaro Pinto


Nacionalidad Chileno

Material de ESTUDIANTE
MATERIAL ELABORADO POR INSTRUCTOR INTERNACIONAL Ing. Rodrigo Franti Alfaro Pinto, para
ser impartido en El Salvador a través de J.V. IRAHETA RAMIREZ Y COMPAÑÍA ( WEBCOMMSERVICE).

Este material es de USO EXCLUSIVO para participantes de cursos de WEBCOMMSERVICE y se


encuentra registrado en INSAFORP como material de apoyo para fines didácticos de aprendizaje.

Queda estrictamente prohibida la reproducción TOTAL O PARCIAL (por cualquier medio) de los
materiales y complementos proporcionados al asistente de este curso para Usos comerciales o para
Beneficio Económico ya sea propio o de terceros.

Este material esta destinado exclusivamente para aprendizaje y conocimientos del participante que ha
asistido a este taller.
Sobre mí
● Más de 14 años en el mundo TI.
● Ingeniero Civil en Computación, Universidad de Chile.
● MBA, Universitat Politècnica de València (UPV).
● Promover el crecimiento económico de las pymes utilizando una
solida infraestructura de tecnología de la información que las ayude
a crear ventajas competitivas.
● Viajero, soñador y desarrollador de software amante de C.
● Fundador de Netstream, empresa chilena de consultoría IT con
presencia en Perú, Bolivia, Colombia y Venezuela.
● Hoy me dedico a dar charlas y cursos por latinoamerica.
● http://rodrigoalfaropinto.com
Agenda día 01

• Instalación de Oracle 12c.


• Diseño de bases de datos relacionales.
• Elementos de Oracle SQL.
• Consulta de datos.
• Ejercicios.
Archivos necesarios

• https://bit.ly/2spiGxj
Instalación Oracle 12c

• Pre requisitos:
● Java 8
● Windows Server 2012 R2
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle 12c
Instalación Oracle
12c
Diseño de bases de datos
relacionales
• El modelo de datos relacional debe cumplir dos objetivos:
● El sistema debe presentar los datos en forma de tablas.
● Acepte el modelo de lenguaje “set at time”, el usuario realiza
una pregunta o “query” y el motor devuelve todas las
coincidencias.
Diseño de bases de datos
relacionales

• SQL (Structured Query Language)


Diseño de bases de datos relacionales
• SQL Permite:
● Definición de datos.
● Recuperación de datos.
● Manipulación de datos.
● Control de acceso.
● Compartición de datos.
● Integridad de datos.
Diseño de bases de datos relacionales
Buenas practicas
Diseño de bases de datos
relacionales
• Cada tabla tiene un nombre que la identifica unívocamente.
• Cada tabla debe tener:
● Clave primaria.
● Clave secundaria para entablar relaciones padre-hijo.
Diseño de bases de datos
relacionales
• Integridad de datos se refiere a la corrección y complejidad de
los datos en un motor de base de datos. La integridad de una
base de datos se modifica cuando se utilizan las sentencias
INSERT, DELETE o UPDATE.
Diseño de bases de datos
relacionales
• Para preservar la consistencia de los datos se deben tomar en
cuenta lo siguiente:

● Datos requeridos, No permitir valores NULL.


● Validez, cada columna tiene un dominio o conjunto de
valores legales.
● Integridad de la entidad,Clave primaria única por cada
Administración
• Tipos de indices:
● Indice compuesto, indice sobre varios nombres de columnas.
● Indice único, no contiene valores duplicados.
● Indice agrupado, puede diseñarse un indice por tabla, esto
almacenará los registros de la tabla en orden físico de
acuerdo con la clave de agrupado.
Administración
• Una de las desventajas de los índices:

• Espacio en disco, por más pequeña que sea la tabla puede


ocupar una cantidad de espacio considerable en disco. Una
tabla con muchos registros significa que el índice tendrá
muchas entradas. O sea, si la tabla tiene muchos indices, el
espacio total del disco utilizando por los indices podría exceder
el tamaño mismo de la tabla.
Administración
• En Oracle 12c hay un concepto nuevo para la administración de
integridad datos en las tablas.
● Insert
● Delete
● Update
● Merge, se utiliza para seleccionar filas de una o más fuentes para
actualizar o insertar en una tabla o vista. Puede especificar
condiciones para determinar si desea actualizar o insertar en la
tabla o vista de destino.
Administración
Administración
Administración
Administración
Ejercicio
• Según lo aprendido, diseñar un modelo relacional en Oracle 12c para un sistema
de gestión educativo.
• Debe contemplar las siguientes tablas:
● Curso.
● Clase.
● Alumno.
● Matricula.
● Profesores.
● Horario.
● Evaluación.
• Completar con registros para eventuales cruces de datos.
Elementos de Oracle SQL
• Oracle SQL es un conjunto de tecnologías, SQL-92 estandar de la ANSI
(American National Standard Institue) y la ISO (International Standards
Organization) y tiene las siguientes categorías de sentencias:
DDL (Data Definition Language), para crear, alterar o borrar objetos de la
base de datos. Los comandos son: CREATE, ALTER y DROP.
DML (Data Modification Language), para manipular esquemas. Los
comandos son: SELECT, INSERT, UPDATE, DELETE y MERGE.
Elementos de Oracle SQL

TCL (Transaction Control Language), utilizadas para confirmar o restaurar


transacciones de bases de datos. Los comandos son: COMMIT y
ROLLBACK.
DCL (Data Control Language), utilizadas en el control de acceso a los
datos. Los comandos son: GRANT y REVOKE.
Elementos de Oracle SQL
• Tipos de datos
● Literales, términos literal y constante son sinonimos en Oracle y ambos
se refieren a valores fijos. Por ejemplo, 500 es un literal númerico y ‘100’
es un literal carácter.
● Texto, literal de tipo carácter introducido entre comillas simples, Oracle
define el texto como CHAR, con longitud máxima de 4.000 bytes.
● Números, Oracle permite números positivos, negativos y en notación
cientifica. NUMBER, FLOAT.
Elementos de Oracle SQL
● Enteros, Oracle permite números enteros hasta un máximo de 38
digitos.
● Intervalos, Oracle permite intervalos literales que especifican periodos
de tiempo como diferencias en términos de años y meses (YEAR TO
MONTH)
Elementos de Oracle SQL

• Comentarios

• /*
• Comentario bloque
• */

• /*Comentario línea*/
Elementos Oracle SQL
● Pseudocolumnas, Se comportan como las columnas de una tabla,
pero no se almacenan en las tablas. Son pseudocolumnas en Oracle
CURRVAL, NEXTVAL,LEVEL,ROWNUM.
● Esquemas, Oracle organiza logicamente, no fisicamente objetos
relacionados dentro de un esquela todos los elementos de una
aplicación (tablas, objetos, etc.). En Oracle el concepto es esquema de
datos asociado a usuario de base de datos. Usuario y esquema
poseen el mismo nombre.
Elementos de Oracle SQL
• En Oracle, las instrucciones crean tablas y clusteres también
pueden utilizar tipos de datos ANSI y de productos IBM SQL/DS y
DB2. Oracle reconoce estos datos y los registra según regla de
conversión.
Elementos de Oracle SQL
Elementos de Oracle SQL

• En Oracle es posible especificar explícitamente conversiones


de tipos de datos mediante funciones SQL de conversión.
Elementos de Oracle SQL
Consultas SQL
● SELECT
● INSERT
● UPDATE
● DELETE
● TRUNCATE
● LOCK TABLE
● MERGE
Consultas SQL ● CREATE
● ALTER
● DROP
● ASSOCIATE
● TRUNCATE
● COMMENT
● COMMIT
● ROLLBACK
● SAVEPOINT
● SET TRANSACTION
Consultas SQL
Consultas SQL
Consultas SQL
Consultas SQL

Ejemplo Select con columna calculada


Ejercicios
• Utilizando la base de datos creada para un sistema educativo, realizar
las siguientes consultas utilizando lo aprendido:
● Obtener todos los cursos ofrecidos sin valores duplicados.
● Visualizar sin duplicados los cursos y cantidad de alumnos por cada
curso.
● Visualizar los cursos por cada profesor.
● Cuantificar la cantidad de matriculas por curso.
● Visualizar los horarios de cada curso.
Ejercicios
• Utilizar SQL*Plus utilizando el usuario HR y pwd: HR
● Construir una consulta SQL que devuelva TRUE si en la tabla de empleados el número
de departamento no es 5 ni 15.
● Construir una consulta SQL que devuelva los salarios de los empleados cuyo nombre
comience con S.
● Construir una consulta SQL que devuelva las características de los empleados con
salarios entere 2.000 y 3.000.
● Listar las características de los empleados que no tienen comisiones.
● Construir una consulta SQL que devuelva las características de los empleados
contratados antes del 25 de mayo de 1994 que ganan más de 1.000 USD al mes.
● Construir una consulta SQL que devuelva el salario medio de los empleados, calcular
una desviación típica de la calidad de la media y calcular salarios máximo y mínimo
Muchas gracias

• Bibliografía

• Administración básica de bases de datos con Oracle 12c SQL, María


Pérez Marqués, Alfaomega, 2016, págs: 1-121.
Agenda día 02

• PL/SQL.
• Triggers.
• Ejercicios.

55
PL/SQL
▶ PL/SQL ofrece varias ventajas sobre otros lenguajes de programación. Algunas de sus
ventajas son:
▶ • Estrecha integración con SQL.
▶ • Alto rendimiento.
▶ • Alta productividad.
▶ • Portabilidad.
▶ • Escalabilidad.
▶ • Capacidad de administración.
▶ • Soporte para Programación Orientada a Objetos.

56
PL/SQL

▶ • PL/SQL permite usar toda la manipulación de datos SQL, control de cursor y transacción
instrucciones de control y todas las funciones de SQL, operadores y pseudocolumnas.
▶ • PL/SQL es totalmente compatible con los tipos de datos SQL. No necesita convertir tipos de
datos PL/SQL y SQL. Por ejemplo, si el programa PL/SQL recupera un valor de una columna del
tipo SQL VARCHAR2, puede almacena ese valor en una variable PL/SQL del tipo VARCHAR2.
▶ •PL/SQL permite ejecutar una consulta SQL y procesar las filas del conjunto de resultados una a
hora especifica.

57
PL/SQL

▶ PL / SQL permite enviar un bloque de declaraciones a la base de datos, reduciendo


significativamente el tráfico entre la aplicación y la base de datos.
▶ Variables de enlace
▶ Cuando inserta una instrucción SQL INSERT, UPDATE, DELETE, MERGE o SELECT
directamente en PL/SQL, el compilador convierte las variables WHERE y VALUES en
variables de enlace. Oracle puede reutilizar estas declaraciones SQL siempre igual, lo
que mejora el rendimiento.

58
PL/SQL
▶ Subprogramas, SP o Procedimientos almacenados
▶ Los subprogramas PL/SQL se almacenan en forma ejecutable y pueden invocarse
repetidamente.
▶ Debido a que los subprogramas almacenados se ejecutan en el servidor de la base de
datos, una sola invocación puede comenzar un gran trabajo.
▶ Esta división del trabajo reduce el tráfico de la red y mejora los tiempos de respuesta.
▶ Los subprogramas almacenados se almacenan en caché y se comparten entre los usuarios,
lo que reduce los requisitos de memoria y la sobrecarga.

59
PL/SQL

▶ Optimizador
▶ El compilador PL / SQL tiene un optimizador que puede
reorganizar el código para una mejor performance en el
motor de base de datos.

60
PL/SQL

▶ Portabilidad
▶ PL/SQL es un lenguaje portátil y estándar para el
desarrollo de Oracle.
▶ Puede ejecutar aplicaciones PL/SQL en cualquier
sistema operativo y plataforma donde Oracle se
ejecuta.

61
PL/SQL

▶ Escalabilidad

▶ Los subprogramas almacenados PL/SQL aumentan la


escalabilidad centralizando el procesamiento de
aplicaciones en el servidor de la base de datos, lo que
permite miles de conexiones concurrentes en un solo
nodo.
▶ Para mayor escalabilidad se puede usar Oracle
Connection Manager para multiplexar la red
▶ conexiones.

62
PL/SQL

▶ Componentes de PL/SQL

● Manejo de errores (handler)


● Bloques
● Variables y constantes
● Subprogramas
● Paquetes
● Disparadores (trigger)
● Entrada y salida
● Abstracción de datos
● Declaraciones de control
● Compilación condicional
● Procesamiento de un conjunto de resultados de consulta una fila a la vez

63
PL/SQL

▶ Manejo de errores (handler)

▶ PL/SQL facilita la detección y el manejo de errores.


▶ Cuando se produce un error PL/SQL genera una
excepción.
▶ La ejecución normal se detiene y transferencias de
control a la parte de manejo de excepciones del bloque
PL/SQL.
▶ No es necesario verificar cada operación para asegurar
que tuvo éxito, como en un programa C.

64
PL/SQL

▶ Bloque

▶ La unidad básica de un programa fuente PL/SQL es el


bloque, que se relaciona con grupos declaraciones y
declaraciones.
▶ Un bloque PL / SQL se define mediante las palabras
clave DECLARE, BEGIN, EXCEPTION y END.
▶ Estas palabras clave dividen el bloque en una parte
declarativa, una parte ejecutable y una parte de
manejo de excepciones.

65
PL/SQL

▶ Las declaraciones son locales al bloque y dejan de


existir cuando el bloque finaliza ejecución, ayudando a
evitar espacios de nombres desordenados para variables
y subprogramas.
▶ Los bloques se pueden anidar, puede aparecer otro
bloque donde se permite una declaración ejecutable.
▶ Puede enviar un bloque a una herramienta interactiva
(como SQL * Plus o Enterprise Manager) o incrustar en
un programa Oracle Precompiler o OCI.
▶ La herramienta interactiva o programa ejecuta el
bloque una vez. El bloque no está almacenado en la
base de datos, por esta razón se llama bloque anónimo
(incluso si tiene una etiqueta).

66
PL/SQL

▶ Se compila un bloque anónimo cada vez que se carga en


la memoria, y su compilación tiene tres etapas:

● Comprobación de la sintaxis, se comprueba la sintaxis


PL/SQL y se genera un árbol de análisis sintáctico.
● Comprobación semántica, es la comprobación de tipos y
procesamiento posterior en el árbol de análisis
sintáctico.
● Generación de código

67
PL/SQL

▶ Tipos de expresiones:
● Aritméticas : + - * /
● Comparaciones : = != > > >= <=
● Concatenación de caracteres ⏐⏐
▶ Tipos de variables:
● Escalares. Definidos por el lenguaje VARCHAR2, DATE,
LOB, LONG, NUMBER, etc.
● Compuestos:
●Definidos por el usuario
●Registros

●Tablas y matrices. Pueden almacenar registros y escalares

68
PL/SQL

69
PL/SQL

Estructura básica de un bloque

70
PL/SQL

71
Funciones de Transformación

▶To_char (<valor>,<formato>):
Transforma valor al tipo CHAR,
según el formato opcional
▶To_number (<valor>,<formato>):
Transforma valor al tipo NUMBER,
según el formato opcional
▶To_date (<valor>,<formato>):
Transforma valor al tipo DATE,
según el formato opcional
Funciones de Texto

▶ length(<valor>): Retorna el tamaño en caracteres


de valor
▶ upper (<valor>): Transforma valor en mayúsculas
▶ lower(<valor>): Transforma valor en minúsculas
▶ trim(<valor>): Elimina los espacios en blanco a la
derecha e izquierda de valor
▶ ltrim(<valor>): Elimina los espacios en blanco a la
izquierda de valor
▶ rtrim(<valor>): Elimina los espacios en blanco a la
derecha de valor
Funciones de valores simples

▶ ABS(n)= Devuelve el valor absoluto de (n)


▶ CEIL(n)=Obtiene el valor entero inmediatamente superior o igual
a "n“
▶ FLOOT(n) = Devuelve el valor entero inmediatamente inferior o
igual a "n“
▶ MOD (m, n)= Devuelve el resto resultante de dividir "m" entre "n“
▶ NVL (valor, expresión)= Sustituye un valor nulo por otro valor.
▶ POWER (m, exponente)= Calcula la potencia de un numero
▶ ROUND (numero [, m])= Redondea números con el numero de
dígitos de precisión indicados
▶ TRUNC (numero, [m])= Trunca números para que tengan una
cierta cantidad de dígitos de precisión.
Funciones de fechas

▶SYSDATE= Devuelve la fecha y hora del


sistema.
▶ADD_MONTHS (fecha, n)= Devuelve la
fecha "fecha" incrementada en "n"
meses
▶MONTHS_BETWEEN (fecha1,
fecha2)= Devuelve la diferencia en
meses entre las fechas "fecha1" y
"fecha2“
Conceptos Claves, Cursor
implícito y Cursor explicito
▶ Son utilizados para gestionar los resultados de una
sentencia SELECT
▶ En el fondo, un cursor permite gestionar un conjunto de
registros, recorriendo dicho conjunto y con acceso a sus
datos
▶ Específicamente:
▶ Cursor Implícito: No es necesario declararlo. La operación
SELECT INTO es un ejemplo
▶ Cursor Explícito: Se necesita declararlo en el código
Cursor Implícito

▶ Un cursor implícito es aquel que devuelve una


única fila como dato. La sentencia SELECT –
INTO es un ejemplo de cursor implícito
▶ El cursor implícito debe retornar siempre una
fila o registro. Si esa condición no se cumple,
se producirá un error (excepción)
▶ Las excepciones que se pueden producir son:
▶ NO DATA FOUND: No se encontró fila o registro que
satisfaga el SELECT utilizado
▶ TOO MANY ROWS: El SELECT devuelve más de una
fila o registro
Ejemplo cursor implícito
Ejemplo error cursor
implícito

El cursor devuelve más


de una fila (TOO MANY
ROWS)
Cursor Explícito

▶ Un cursor explícito puede devolver cero o más filas.


▶ Generalmente, un cursor explícito pasa por las
siguientes etapas:
▶ Declaración (CURSOR)
▶ Apertura (OPEN)
▶ Extracción (FETCH)
▶ Cierre (CLOSE)
Sintaxis

▶ Para declarar un cursor:


▶ Simple:
▶ CURSOR <nombre_cursor> IS <instrucción select>
▶ Con parámetros:
▶ CURSOR <nombre_cursor> (param1 tipo1, param2 tipo2, ……,
param n tipo n) IS <instrucción select>
Sintaxis

▶ Para abrir un cursor:


▶ Simple:
▶ OPEN nombre_cursor;
▶ Con parámetros:
▶ OPEN nombre_cursor (valor1, valor2, …., valor n);
Sintaxis

▶ Para extraer datos de un cursor:


▶ Con variables:
▶ FETCH nombre_cursor INTO lista_variables;
▶ Con registro PL/SQL:
▶ FETCH nombre_cursor INTO registro_PL/SQL;
Sintaxis

▶ Para cerrar un cursor:


▶ CLOSE nombre_cursor;
Atributos Cursores
▶ Con los atributos de los cursores se
permite reconocer el estado de un cursor
▶ %NOTFOUND: Devuelve verdadero cuando
el cursor no retorna un registro
▶ %FOUND: Devuelve verdadero cuando el
cursor retorna un registro
▶ %ISOPEN: Devuelve verdadero mientras el
cursor esté abierto
▶ %ROWCOUNT: Devuelve la cantidad de
registros que se ha recuperado hasta el
momento
Ejemplo Cursor Explícito
Consideraciones

▶ Cuando un cursor está cerrado, no puede retornar registros y


en general, los atributos tampoco pueden ser utilizados
(excepto %ISOPEN)
▶ No se puede cerrar un cursor que ya está cerrado
▶ Es conveniente consultar el resultado de una extracción
mediante los atributos del cursor (%NOTFOUND, %FOUND)
▶ Al terminar de usar un cursor, es recomendable cerrarlo para
liberar espacio de memoria y dejarlo disponible para el SGBD
Otras formas de cursores
explícitos
▶ Se puede utilizar una estructura de ciclo FOR, para recorrer el
resultado de un cursor
▶ De la forma anterior, se ejecutan implícitamente las
instrucciones OPEN, FETCH y CLOSE
▶ Uno de los puntos en contra respecto a esta modalidad, es que
el cursor no tiene nombre, y por lo tanto, su resultado no puede
ser capturado por una aplicación externa a Oracle para el uso
de sus datos (ej. .NET, Java)
Ejemplo de otras formas de
cursores explícitos
Ejemplo de otras formas de
cursores explícitos
Conceptos Claves, Cursores
de actualización
▶ Los cursores de actualización se utilizan para actualizar
los valores de los datos que son utilizados por el propio
cursor
▶ Se debe considerar que los registros actualizados son
bloqueados mientras dura la actualización
▶ En la declaración del cursor se agrega FOR UPDATE
▶ En la sentencia Update se agrega en la condición
CURRENT OF «nombre_cursor»
Ejemplo Cursor de Actualización
Variables de Cursores
Referenciales
▶ Las variables de cursores referenciales son punteros a un área de trabajo de la BD
de Oracle donde se almacena el resultado de una selección de múltiples registros
▶ Una de sus potencialidades, es que la consulta asociada al cursor de la variable
puede ser modificada en tiempo de ejecución
▶ Reconoceremos dos tipos:
▶ Restrictivos (fuertemente tipeado)
▶ No Restrictivos (débilmente tipeado)
Cursores referenciales restrictivos

▶ Son aquellos que en su


declaración se restringe
la estructura del
resultado extraído
Cursores referenciales no restrictivos
▶ Son aquellos que en su declaración no se restringe la
estructura del resultado extraído
Sys_Refcursor

▶ Desde la versión 9i de
Oracle no es necesario
declarar un tipo Ref
Cursor. Se puede
declarar la variable
directamente con el
tipo Sys_RefCursor
Conceptos Claves,
Excepciones
▶ Las excepciones se generan cuando se producen condiciones de errores
▶ Cuando ocurre en la ejecución del código, el control de dicha ejecución
se traspasa a la sección de manejo de excepciones del bloque
▶ Toda excepción se propagará hasta que sea capturada
▶ Si la excepción es capturada, la ejecución del código no volverá al
punto donde se produjo el error
• En particular, las excepciones predefinidas son aquellas que ya están incorporadas y no necesitan ser declaradas
Ejemplo de Excepción
Sintaxis
Declare
…..
Begin
…..
EXCEPTION
WHEN nombre_exception THEN
…..
WHEN nombre_exception THEN
…..
End;
Ejemplo de Uso

▶ Si se detecta el
manejador de
excepción apropiado,
se ejecutará el código
asociado, de lo
contrario se ejecutará
el código asociado al
manejador OTHERS
(siempre debe ser el
último declarado)
Ejemplo de excepciones
predefinidas
▶ A continuación una lista de las mas utilizadas:
▶ Zero_Divide: Cuando existe una división por cero
▶ Too_Many_Rows: Cuando se devuelve mas de una fila
▶ No_Data_Found: Cuando no se devuelven datos
▶ Value_Error: Error aritmético, conversión o truncamiento
▶ Rowtye_mismatch: Tipos incompatibles
▶ Cursor_already_open: El cursor se encuentra tiempo
Conceptos Claves, Excepciones
definidas por usuario

▶ Las excepciones se generan cuando se producen condiciones de errores


▶ Cuando ocurre en la ejecución del código, el control de dicha ejecución se
traspasa a la sección de manejo de excepciones del bloque
▶ Toda excepción se propagará hasta que sea capturada
▶ Si la excepción es capturada, la ejecución del código no volverá al punto donde
se produjo el error
▶ En particular, las excepciones predefinidas son aquellas que deben ser
declaradas. Se «lanzan» con la sentencia RAISE
Conceptos Claves , Excepciones
definidas por usuario

▶ Se declaran como cualquier otra variable


▶ Se aplican las mismas reglas de alcance que para las variables
(son «visibles» dentro del bloque donde son declaradas . También
son visibles para los bloques internos que son declarados dentro
del bloque principal)
▶ La sentencia RAISE lanza la excepción dentro del ámbito de
alcance de dicha excepción
Ejemplo Excepción
predefinida por usuario
Funciones predefinidas para excepciones

▶Con las funciones SQLCode y SQLErrm es posible obtener el


código de error que se ha producido y el mensaje asociado,
respectivamente
▶Cuando no se produce error, SQLCode devuelve el valor 0
(cero)
▶Son útiles cuando se necesita aclarar cual es el error
producido
Ejemplo de SQLCode y SQLErrm
▶Nótese que SQLCode y SQLErrm no pueden ser utilizados
directamente. Su resultados deben ser pasados, por ejemplo, a
variables
Otro uso a SQLErrm
▶Ala función SQLErrm se le pasa un número negativo y devuelve el
mensaje de error asociado
Excepciones personalizadas
▶ Con Raise_Application_Error se pueden personalizar las
excepciones, es decir, dar un mensaje asociado al error que sea
propio y asociado al negocio que trata el código
▶ Sintáxis:
▶Raise_application_Error(num_error, mensaje)
▶Donde:
▶Num_error: Número Asociado, con un valor entre -20001 y -20999
▶Mensaje: Mensaje que se asocia al error
Ejemplo excepción personalizada
Pragma Exception Init

▶ Para controlar una excepción, es necesario que ésta tenga un nombre


(ej. Zero_Divide)
▶ No todas las excepciones tienen nombre, por lo que sólo nos queda
controlarlos con OTHERS
▶ Pragma es una directiva que corre en tiempo de compilación
▶ Con Exception_Init se asocia un número de excepción con un
nombre. Así puede ser controlado en la sección de manejo de
excepciones del bloque
Ejemplo Pragma Exception Init
Conceptos Claves

▶Los subprogramas son otro tipo de bloques PL/SQL


▶Se diferencian de los bloques anónimos porque llevan
nombre, se almacenan en la base de datos y algunos
pueden usar parámetros
Procedimientos Almacenados

▶ Los procedimientos almacenados son utilizados para


que realicen cierta operatoria pero que no devuelven
resultados al que invocó dicho procedimiento
▶ Sintáxis:

Create [or Replace] Procedure «nombre_proc»


[(lista_parametros)] is
…..
End [«nombre_proc»];
Consideraciones
▶ Al ocupar «Or Replace», en el caso que el procedimiento almacenado
ya se encuentre en la BD, éste se reemplazará. En caso contrario,
arrojará un error en la compilación
▶ No es obligatorio agregar el nombre del procedimiento al finalizar su
código
▶ Un procedimiento almacenado posee las mismas secciones que un
bloque anónimo (declaraciones, ejecución y excepciones). La
diferencia es que la declaración «Create…Is» reemplaza a «Declare»
▶ Para eliminar un procedimiento almacenado se usa:
▶ Drop procedure «nombre_procedimiento»;
Ejemplo de procedimiento
almacenado

Procedimiento
Declarado
Ejemplo de procedimiento almacenado con
cursor explícito
Ejecución de un procedimiento almacenado

▶ Para ejecutar el procedimiento almacenado por código,


podemos usar un bloque anónimo
Parámetros para procedimientos almacenados
▶ Los procedimientos almacenados permiten el uso de
parámetros
▶ Cada parámetro se separa por una coma (,)

▶ Sintaxis:

▶«Nombre_param» |«tipo_param»| «tipo_dato»


|«opciones»|
▶Donde:
▶ Nombre_param: Nombre dado al parámetro
▶ Tipo_param: Define el tipo de parámetro
▶ Tipo_dato: Tipo de dato dado al parámetro
▶ Opciones: Se puede utilizar para dar un valor por defecto al parámetro
Tipos de Parámetros
▶ Losparámetros pueden ser de entrada (IN), de salida (OUT), o
ambos (IN OUT)
▶ Parámetros IN: Son aquellos de sólo lectura que se utilizan para
ingresar valores al procedimiento. Por defecto, en el caso que no se
especifique el tipo de parámetro, éste se asume como de entrada
▶ Parámetros OUT: Son aquellos de escritura en donde el
procedimiento le asigna un valor para ser utilizado posteriormente
por el bloque que lo haya invocado
▶ Parámetros IN OUT: Son aquellos que poseen todas las
características de los dos tipos anteriores
Ejemplo de uso de parámetro
de entrada

▶ Dado el siguiente procedimiento

• Se puede utilizar de la siguiente forma:


Ejemplo de uso de parámetro
de salida

▶ Dado el siguiente procedimiento

• Se puede utilizar de la siguiente forma:


Asignación de valores a los Parámetros

▶ Para asignar valores a los parámetros estudiaremos dos


notaciones:
▶ Posicional: Los valores son asignados en el mismo orden en
que los parámetros se encuentran declarados
▶ Nominal: Los valores son asignados en cualquier orden
explicitando al parámetro al cual se le está asignando
Ejemplo de asignación de valores a parámetros
por notación posicional

▶ Dado el siguiente procedimiento

• La asignación de valores es de la siguiente forma forma:


Ejemplo de asignación de valores a parámetros
por notación nominal

▶ Dado el siguiente procedimiento

• La asignación de valores es de la siguiente forma forma:


Parámetros formales y actuales

▶ En la declaración de procedimientos que tienen


parámetros, a éstos se les conoce como parámetros
formales o ficticios
▶ La invocación de los procedimientos, consta de dos

partes, el nombre del procedimiento y la lista de


parámetros, los que también se conocen como
parámetros actuales
Ejercicio 01
● Desarrollar un PL/SQL que sea capaz de registrar a un
nuevo alumno.
● Desarrollar un PL/SQL que sea capaz de registrar
nuevos cursos al sistema.
● Desarrollar un PL/SQL que sea capaz de asignar
profesores a cursos.
● Desarrollar un PL/SQL que sea capaz de asignar
horarios a cursos por cada profesor.

126
TRIGGER
▶ Disparadores (Trigger)

▶ Un trigger define una acción que la base de datos siempre debería realizar
cuando ocurre algún tipo de acontecimiento que la afecta.
▶ Se utilizan para:
● Mantener la integridad referencial.
● Asegurar reglas de negocio complejas
● Auditar cambios en los datos.

▶ Para definir un trigger se debe:


● Especificar las condiciones bajo las que el trigger será ejecutado.
● Especificar las acciones que se realizarán cuando el trigger se ejecute.

127
TRIGGER
▶ Las acciones del trigger se definen mediante bloques de
▶ PL/SQL nominados con las secciones:

● Declarativa
● Ejecutable
● Manejo de excepciones

▶ Los triggers se almacenan en la BD (user_triggers) y


▶ están asociados a una tabla. Pueden afectar a n filas.
▶ Se ejecutan de manera implícita ante eventos (operación de inserción, modificación
o borrado)
▶ Se compilan cada vez que se activan

128
TRIGGER
▶ Eliminar un trigger
● DROP TRIGGER nombre_disparador;

▶ Activación/Desactivación
● ALTER TRIGGER nombre_disparador {DISABLE | ENABLE};
● ALTER TABLE nombre_tabla {ENABLE | DISABLE} ALL TRIGGERS;

▶ Ver errores de compilación


● SHOW ERRORS TRIGGER nombre_disparador;

129
TRIGGER
▶ Componentes de un trigger

▶ Nombre disparador
▶ Replace: Se utiliza para sobreescribir un disparador existente.
▶ Before/After/Instead of: Siguen las mismas normas de nomenclatura
que otros identificadores en la BD Instante de ejecución del disparador
con respecto al evento que lo desencadena
▶ Evento: Tipo de orden DML sobre una tabla que provoca la activación
del disparador INSERT | DELETE | UPDATE [OF <lista de columnas>]

130
TRIGGER

Ejemplo trigger

131
Ejercicio 02

▶ Utilizando la base de datos creada para un sistema educativo


realizaremos lo siguiente:

● Trigger para nuevos alumnos y lo debe asignar a un curso


automáticamente, puede ser curso por defecto.
● Trigger para notas de usuario, debe realizar una marca en el
libro de notas del curso.
● La marca debe ser R = Reprobado y A = Aprobado.

132
Ejercicio final
▶ Desarrollar PL/SQL y trigger según corresponda para resolver la
siguiente problemática en su modelo de sistema de gestión
educativa.
▶ El software debe resolver como asignar los horarios a los alumnos en
los diversos cursos y profesores y que estos últimos no tengan más
de 3 cursos por semana.
▶ El horario para la toma de cursos no debe permitir que un alumno
sin matricula activa pueda tomar clases.
▶ Mostrar a todos los alumnos que estén activos y aptos para
matricula las clases, horarios y profesores disponibles. La restricción
es que un alumno no puede tomar más de 1 curso con el mismo
profesor.
Ejercicio final HR

▶ Obtener el tiempo de los trabajadores cuyo salario sea


> 3000 usd
Muchas gracias

▶ Bibliografía

● Administración básica de bases de datos con Oracle 12c


SQL, María Pérez Marqués, Alfaomega, 2016, págs: 121-
242. https://we.tl/I5kG15m9YW
● Database PL/SQL Language Reference, Oracle, Oracle
Pubs, 2017, págs: 1-498.

135

También podría gustarte