Plsql Material (1)
Plsql Material (1)
Base de datos II M á s t e r. C a r l o s
Sección: 1700 Ordóñez
Contenido
✔ Bloques
✔ Estructuras de Control
✔ Manejo de Excepciones
✔ Manejo de Cursores
Contenido
✔ Packages
✔ Cursores Empaquetados
✔ Sobrecarga de Operadores
✔ Estructura de Datos
✔ Triggers de la Base de
Datos
Bloques
✔ PL/SQL es un lenguaje
estructurado por bloques
✔ Un bloque permite agrupar
lógicamente declaraciones,
sentencias y excepciones
✔ Un bloque puede ser:
✔ anónimo
✔ procedimiento
Bloques
✔ Se puede anidar subloques en:
✔área de sentencias
✔área de excepciones
✔ Definición
de subprogramas
locales en área de
declaraciones
Bloques
✔ Bloque anónimo
[DECL ARE
--
declaraciones]
BEGIN
--
sentencias
[EXCEPTION
Bloques
✔ Procedimiento:
PROCEDURE nombre
(parámetros) IS
--
declaraciones]
BEGIN
--sentencias
[EXCEPTION
--
Bloques
✔ Función:
✔ Para
ver los errores en
SQL*Plus utilizar S H O W
ERRORS
Variables y Constantes
✔ PL/SQLpermite declarar
variables y constantes
✔ Estasdeben ser
declaradas antes de ser
referenciadas
✔ Lasvariables y constantes
se declaran en el área de
declaraciones de un bloque
Variables y Constantes
✔ Reglas de alcance:
✔ Una variable o constante declarada
en un bloque puede ser referenciada
solamente en ese bloque y s u s sub-
bloques
✔Un procedimiento o función declarado
en un bloque puede ser invocado
solamente en ese bloque y s u s sub-
bloques
Variables y Constantes
✔ Para declarar una constante
la sintaxis es:
constant_name CONSTANT
tipo_dato [NOT NULL](:=|
DEFAULT) expression;
✔ Para declarar una variable la
sintaxis es:
variable_name tipo_dato [[NOT
NULL] (:=|DEFAULT) expression);
Variables y Constantes
✔ Haydiferentes formas de
asignar valor a una variable:
✔ asignación directa : =
✔ SELECT.....INTO variable,..,variable
IF condicion THEN
sequencia_de_sentenci
as;
E N D IF;
Estructuras de
Control
✔ IF-THEN-ELSE
IF condicion THEN
sequencia_de_sentencia
s1;
ELSE
sequencia_de_sentencia
s2; E N D IF;
Estructuras de
Control
✔ IF-THEN-ELSIF
IF condicion THEN
sequencia_de_sentencia
s1;
ELSIF
sequencia_de_sentencia
s2; ELSE
sequencia_de_sentencia
Estructuras de
Control
✔ LOOP
<etiqueta
> LOOP
sequencia_de_sentenci
as; E N D LOOP;
<etiqueta>
Estructuras de
Control
✔ EXIT
EXIT [etiqueta];
✔ EXIT-
WHEN
EXIT [etiqueta] W H E N
condición;
Estructuras de
Control
✔ WHILE-LOOP
FOR contador IN
[REVERSE] min..max
LOOP
sequencia_de_sentenci
as; E N D LOOP;
Estructuras de
Control
✔ GOTO
GOTO label;
✔ NULL
NULL;
Manejo de Excepciones
✔ EnPL/SQL un error o advertencia se
llama excepcion (exception)
✔ Pueden ser definidas internamente o
por el usuario
✔ Cuando se produce un error una
excepcion es disparada (raised)
✔ Laejecución se detiene y el control se
transfiere al área de excepciones del
bloque
Manejo de Excepciones
✔ Paramanejar excepciones se
escriben rutinas separadas
llamadas manejadores (handlers)
de excepciones.
✔ Formade un manejador
de excepciones:
W H E N excepcion,[excepcion]
THEN
sequencia_de_sentencias;
Manejo de Excepciones
✔ Ventajas:
✔ robustez y confiabilidad
✔ Desventajas:
PRAGMA EXCEPTION_INIT
(nombre,nro_error_Oracl
Manejo de Excepciones
✔ En el PL/SQL de la base de datos,
para producir una excepción a ser
capturada por una aplicación se
debe usar:
RAISE_APPLICATION_ERROR(nro_erro
r, mensaje[,TRUE|FALSE] );
donde nro_error está entre -2 0 0 0 0 y
-2 0 9 9 9
Manejo de Excepciones
✔ Cuandose dispara una
excpeción en un bloque es
capturada por el manejador de
excepciones de ese bloque
✔Implícitos: sentencias de
manipulación de SQL
✔ Cerrar un cursor
implica deshabilitarlo.
Manejo de Cursores
✔ Es posible simplificar la
codificación utilizando un FOR
de cursores
✔ La sintaxis es la siguiente:
✔abre el cursor
✔ Ventajas:
✔ modularidad
✔ ocultamiento de información
✔ mayor funcionalidad
Packages
✔ Los paquetes no pueden ser:
✔ invocados
✔ anidados
✔ parametrizados
nombre_paquete.nombre_tipo
nombre_paquete.nombre_obj
eto
Packages
✔ Existe
un paquete denominado
standard que define el ambiente
PL/SQL
✔ Estepaquete declara tipos,objetos y
subprogramas que están
automáticamente disponibles a
cualquier programa PL/SQL
✔ Por
ejemplo, se define en este
paquete la función A BS (valor
absoluto)
Packages
✔ DBMS_SQL
✔ DBMS_ALERT
✔ DBMS_OUTPUT
✔ DBMS_PIPE
Cursores empaquetados
✔ Es posible separar la
especificación de un cursor de su
implementación en un paquete
✔ Deesta manera, es posible
cambiar la implementación del
cursor sin cambiar su interfase
✔ Estoda mayor flexibiliad a
las aplicaciones
Cursores empaquetados
✔ Paradeclarar un cursor en
la especificación:
✔ Enel paquete S TA N DA R D
existen operaciones
sobreargadas (ej: TO_CHAR)
Estructuras de
Datos
✔ PL/SQL permite la construcción
de tipos definidos por el usuario
por medio del constructor TYPE
✔ El
nuevo tipo declarado pasa a ser
un tipo m á s del lenguaje
✔ Esposible declarar variables de
ese tipo de la misma forma en que
se declara una variable de un tipo
escalar.
Estructuras de
Datos
✔ La declaración de tipos se
realiza
en la zona de declaraciones,
previamente a la declaración de
variable
✔ PL/SQL
provee tres constructores
de nuevos tipos:
✔ TABLE
✔ RECORD
Estructuras de
Datos
✔ Losobjetos de tipo TABLE
se denominan tablas PL/SQL
✔ Estan
compuestas de filas y
poseen una clave primaria
✔ Noes posibe manipularlas a traves
de sentencias SQL. S e acceden como
arreglos a través de la clave primaria
Estructuras de
✔ UnaDatos
tabla es una colección
ordenada de elementos del mismo
tipo
✔ Cada elemento posee un índice
numérico que indica su posesión
exacta en la tabla
✔ No poseen tamaño fijo, cota inferior
ni superior
✔ No requieren que las posiciones
Estructuras de
Datos
✔ Para declarar un tipo tabla, la
sintaxis es:
variable_de_tipo_tabla1:=variable_de_tip
o_ta bla2;
variable_de_tipo_tabla.atributo
✔ Si
se accede por un índice a
un elemento no definido se
produce la excepcion
NO_DATA_FOUND
Estructuras de
Datos
✔ Un registro es una colección de
objetos de diferentes tipos
agrupados bajo un mismo
nombre
✔ Dos formas de definir variables de
tipo registro:
✔ implícitamente a traves de % R O W T Y P E
✔ explícitamente mediante la
declaración de un tipo R E C O R D por
Estructuras de
Datos
✔ Para declarar un tipo registro se
utiliza la sintaxis:
TYPE nombre_tipo IS
RECORD
(campo[,campo....]);
donde campo tiene la
forma
nombre tipo_dato[[NOT NULL]
(:=| DEFAULT) expr
Estructuras de
✔ E Datos
s posible construir registros
anidados: un campo puede ser
a su vez un registro
✔ Parareferenciar un campo
de registros se utiliza la
sintaxis:
variable_de_tipo_registro.nombre_ca
mp o
Estructuras de
✔ SDatos
e puede asignar un registro a
otro:
variable_de_tipo_registro1:=variable_de_tipo_regi
stro
2;
✔ Se
puede asignar un valor a un
campo determinado del registro:
Estructuras de
✔ S e Datos
pueden declarar variables de
cursor
✔ Estas variables, como los cursores,
apuntan a la fila actual del área de
trabajo asociada
✔ Diferencia con los cursores:
✔los cursores son estáticos
✔ CLOSE cursor
✔ Validaciones no estructurales
✔ Tablas replicadas