0% encontró este documento útil (0 votos)
10 vistas

Plsql Material (1)

El documento proporciona una guía completa sobre PL/SQL, cubriendo temas como bloques, creación de unidades de programa, manejo de excepciones, cursores y paquetes. Se detalla la estructura y sintaxis de cada elemento, así como las reglas de alcance y tipos de datos. Además, se discuten las ventajas y desventajas de las excepciones y la sobrecarga de operadores, junto con ejemplos de su implementación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
10 vistas

Plsql Material (1)

El documento proporciona una guía completa sobre PL/SQL, cubriendo temas como bloques, creación de unidades de programa, manejo de excepciones, cursores y paquetes. Se detalla la estructura y sintaxis de cada elemento, así como las reglas de alcance y tipos de datos. Además, se discuten las ventajas y desventajas de las excepciones y la sobrecarga de operadores, junto con ejemplos de su implementación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 89

PL/SQL

Base de datos II M á s t e r. C a r l o s
Sección: 1700 Ordóñez
Contenido
✔ Bloques

✔ Creación de Program Units


✔ Variables y Constantes
✔ Tipos de Datos
✔ Parámetros

✔ 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:

FUNCTION nombre (parámetros)


RETURN tipo
IS
--
declaraciones]
BEGIN
--
sentencias
[EXCEPTION
Creación de Program
Units
✔ Para
crear en la base de datos un
procedimiento o función
almacenado se debe prefijar con:

CREATE [OR REPLACE] texto

✔ 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

✔ FETCH cursor INTO


variable,..,variable
Tipos de Datos
✔ Eltipo de dato de una
variable o constante puede
ser:
✔un tipo escalar

✔un tipo predefinido

✔el tipo de otra variable o columna de


una tabla, registro o cursor (%type)
✔el tipo de la fila de una tabla, un
Tipos de Datos
Parámetros
✔ Lossubprogramas se pasan
información mediante
parámetros
✔ Lasintaxis para definir un
parámetro es
parameter_name [IN|OUT|IN OUT] tipo [(:=|
DEFAULT) expression]
✔ Los parámetros pueden pasarse
✔ posicionalmente
Estructuras de
Control
Estructuras de
Control
✔ IF-THEN

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

WHILE condicion LOOP


sequencia_de_sentenci
as;
E N D LOOP;
Estructuras de
Control
✔ FOR-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:

✔ permite agrupar el manejo de errores y


manejarlo separadamente
✔ legibilidad de programas

✔ robustez y confiabilidad

✔ Desventajas:

✔ capturan sólo errores de ejecución


Manejo de
Excepciones
Manejo de Excepciones
✔ Una excepción de usuario se
declara:
excepcion
EXCEPTION;
✔ Luego se dispara
con:
RAISE excepcion;
Manejo de Excepciones
✔ Para
definir el resto de las
excepciones se utiliza la
excepcion OTHERS
✔ Paraasociar una excepción de
usuario con un error de Oracle se
declarar:
debe

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

✔ Sidicho manejador no maneja


la excepión, la excepción se
propaga
Manejo de Excepciones
EXCEPTIO
N
W H E N nombre_exception1
THEN
sequencia_de_sentencias1;
W H E N nombre_exception1
THEN
sequencia_de_sentencias2;
.....
Manejo de Excepciones
✔ Enun manejador de
excepciones es posible utilizar
las funciones:
✔ SQLCODE: código del error

✔ SQLERRM: mensaje del error


Manejo de Cursores
✔ Hay dos tipos de cursores

✔Implícitos: sentencias de
manipulación de SQL

✔ Explícitos:proceso individual de filas


en consultas que devuelven m á s de
una fila.
Manejo de Cursores
✔ Un cursor se declara por medio
de
CURSOR
nombre[(parametros)] I
sentencia_select; S
donde un parámetro tiene la
forma: nombre [IN] tipo [{:=|
DEFAULT}expr]
Manejo de Cursores

✔ Uncursor se maneja mediante


las operaciones:
✔ OPEN: abre el cursor y guarda
memoria
✔ FETCH: recupera la siguiente fila
del cursor
✔ CLOSE: cierra el cursor
Manejo de Cursores
✔Y mediante los atributos:
✔ %FOUND:TRUE si el último
FETCH recupero filas y FALSE
sino
✔ %NOTFOUND: opuesto de
%FOUND
✔ %ISOPEN: TRUE si el cursor esta
abierto y FALSE sino
✔ %ROWCOUNT: cantidad de filas
Manejo de Cursores
✔ Cuando se abre un cursor se
ejecuta la consulta y se identifica
el conjunto de filas resultado.
✔ Para consultas definidas con
FOR UPDATE se lockean las
filas involucradas
✔ Uncursor mantiene
consistencia de lectura al
momento en que se abre
✔ Los parámetros se pasan al
Manejo de Cursores

✔ Elfetch recupera las filas de la


consulta de a una por vez y
asigna el resultado en las
variables indicadas

✔ Cerrar un cursor
implica deshabilitarlo.
Manejo de Cursores
✔ Es posible simplificar la
codificación utilizando un FOR
de cursores

✔ La sintaxis es la siguiente:

FOR variable IN cursor


LOOP
sequencia_de_sentenci
Manejo de Cursores
✔ FOR de cursores declara
implícitamente la variable
de tipo cursor
%ROWTYPE;
✔ Automáticamente:

✔abre el cursor

✔en cada paso asigna la fila


actual a la variable
Packages
✔ Un paquete (package) es un objeto
de la base de datos que agrupa
tipos, objetos y subprogramas
PL/SQL lógicamente relacionados.
✔ Tienen dos partes:
✔ Especificación(specification):interfase con
las aplicaciones
✔ Cuerpo (body): implementa la
especificación
Packages

✔ Ventajas:

✔ modularidad

✔ diseño de aplicaciones m á s fácil

✔ ocultamiento de información

✔ mayor funcionalidad
Packages
✔ Los paquetes no pueden ser:
✔ invocados

✔ anidados

✔ parametrizados

✔ Loque se invoca, parametriza o


anida son los procedimientos y
funciones que contiene
Packages
✔ Especificación

CREATE PACKAGE nombre A S


--declaraciones de objetos y
tipo públicos
--especificaciones de subprogramas
E N D [nombre]
Packages
✔ Cuerpo

CREATE PACKAGE BO DY nombre


AS
--declaraciones de objetos y
tipos privados
--cuerpos de subprogramas
[BEGIN
--sentencia de inicialización]
Packages
✔ La especificación
mantiene declaraciones
públicas, visibles a las
aplicaciones
✔ Los objetos
declarados en la
especificación son
públicos:

Packages
✔ Elcuerpo mantiene
declaraciones privadas y
detalles de
implementación,ocultas a las
aplicaciones
✔ Es opcional: si el paquete solo
define tipos y objetos es
innecesario
✔ Contiene un bloque de
Packages
✔ La especificación y el
cuerpo son objetos
diferentes en la base de
datos
✔ E s posible alterar e
incluso borrar el cuerpo
de un paquete sin alterar
la especificación
✔ Las aplicaciones que
Packages
✔ Losobjetos declarados en la
especificación son públicos (public):
pueden ser accedidos desde
cualquier aplicación
✔ Losobjetos declarados en el
cuerpo son privados (private): sólo
pueden ser accedidos por otras
componentes del cuerpo del
paquete
Packages
✔ Para referenciar tipos, objetos y
subprogramas de un paquete se
prefijan con el nombre del
paquete y un punto:

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

✔ Los contenidos del paquete


S TA N DA R D son visibles
directamente
✔ Por lo tanto, no es necesario prefijar
a la componente con S TA N DA R D
✔ Sise redefine alguna
componente a nivel local, esto
sobreescribe al comportamiento
del paquete S TA N DA R D
Packages
✔ Existenvarios paquetes
predefinidos por Oracle:
✔ DBMS_STANDARD

✔ 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:

CREATE PACKAGE nombre


AS
/*especificación del cursor/*
C U R S O R nombre RETURN
tipo_dato;
...
Cursores empaquetados
✔ Paraimplementar el cursor en
el cuerpo del paquete:
 C R E AT E PA C K A G E n o m b re A S
 /*cuerpo del cursor/*
 C U R S O R n o m b re R E T U R N tipo_dato I S
sentencia_select;
 ...
 E N D nombre;
Sobrecarga de Operadores
✔ PL/SQLpermite tener varios
procedimientos o funciones con el
mismo nombre al mismo nivel
✔ Estose denomina sobrecarga de
operadores (overloading)
✔ Al mismo nivel significa
✔ como procedimientos o funciones
hermanos dentro del área de
declaraciones del bloque
Sobrecarga de Operadores
✔ PL/SQL determina cual de ellos
ejecutar de acuerdo al tipo de
los parámetros
✔ procedimiento p

✔ procedure p(a number) is......end;

✔ procedure p(a varchar2) is......end;


Sobrecarga de Operadores
✔ Lasobrecarga se puede realizar a
nivel de tipos diferentes, pero no
de tipos del mismo conjunto (ej:
N U M B E R y FLOAT)

✔ 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:

TYPE nombre_tipo IS TABLE


OF tipo_dato
[NOT NULL] IN D E X BY
BINARY INTEGER;

donde tipo_dato puede ser


Estructuras de
Datos
✔ Para referenciar un elemento de
una tabla PL/SQL se debe
acceder por el índice usando la
sintaxis:
variable_de_tipo_tabla
(posición);
Estructuras de
✔ E Datos
s posible asignar una tabla a
otra:

variable_de_tipo_tabla1:=variable_de_tip
o_ta bla2;

✔ También es posible asignar un


valor a una posición determinada
de la tabla:
Estructuras de
Datos
✔ Una tabla tiene los siguientes
atributos:
✔ EXISTS(n): devuelve TRUE si el n-
ésimo elemento de la tabla existe.
✔ COUNT: devuelve la cantidad de
elementos de la tabla
✔ FIRST: devuelve el primer
elemento de la tabla (aquel con
menor índice)
Estructuras de
Datosdevuelve el número de índice
✔ PRIOR(n):
del elemento previo al n-ésimo elemento
✔ NEXT(n): devuelve el número de índice
del elemento posterior al n-ésimo
elemento
✔ DELETE: borra elementos de 3 formas:
✔ DELETE: borra todos los elementos de la tabla
✔ DELETE(n): borra el n-ésimo elemento

✔ DELETE(m,n): borra todos los elementos en el


Estructuras de
Datos
✔ Para aplicar un atributo a una
tabla, se utiliza la notacion:

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

✔las variables son dinámicas no estan


Estructuras de
Datos
✔ Las variables de cursor
son
como punteros: guardan la
dirección de memoria de un
cursor
✔ Unavariable de cursor tiene tipo
REF C U R S O R
✔ Están disponibles en cualquier
máquina PL/SQL, ya sea un
cliente o servidor
Estructuras de
✔ S e Datos
utilizan para pasar
resultados
de consultas entre el servidor y
diferentes aplicaciones cliente
✔ Unárea de trabajo permanece
accesible mientras haya una variable
de cursor apuntando hacia ella
✔ No hay limitaciones de uso entre
clientes y servidor
Estructuras de
Datos
✔ Para declarar un tipo REF
C U R S O R se utiliza la sintaxis:

TYPE nombre IS REF C U R S O R


[RETURN
tipo]

donde tipo representa un tipo


registro
Estructuras de
✔ Si
Datos
se declara un tipo de retorno el
tipo es fuerte (strong), en otro caso
es débil (weak)
✔ Untipo fuerte da mayor
seguridad y un tipo débil da
mayor flexibilidad
✔ Sise producen errores de tipos se
dispara la excepción
INVALID_CURSOR
Estructuras de
Datos
✔ Es posible manipular una variable
de tipo cursor con las sentencias:
✔ OPEN cursor FOR sentencia

✔ FETCH cursor INTO variable,..,variable


CLOSE cursor
✔A una variable de tipo cursor no
se le pueden pasar parámetros
Estructuras de
Datos
✔ Es posible manipular una variable
de tipo cursor con las sentencias:
✔ OPEN cursor FOR sentencia

✔ FETCH cursor INTO variable,..,variable

✔ CLOSE cursor

✔A una variable de tipo cursor no


se le pueden pasar parámetros
Triggers de la Base
de datos
✔ Untrigger es un bloque
PL/SQL asociado con una
tabla
✔ Oracleejecuta automáticamente
un trigger cuando se realiza una
operación SQ L específica en la
tabla
✔ Untrigger es un objeto
almacenado por lo que debe ser
Triggers de la Base
de datos
✔ La
sintaxis de la sentencia
CREATE TRIGGER es:
Triggers de la Base
de datos
✔ BEFORE: indica que el trigger
se dispara antes de ser
realizada la operación
✔ AFTER:indica que el trigger se
dispara después de realizada la
operación
✔ La
operación puede ser
DELETE,INSERT o
UPDATE
Triggers de la Base
de datos
✔ Para referenciar a los valores
nuevos de la fila que está siendo
modifi cada o insertada se
utiliza:NEW.columna
✔ Para referenciar a los valores viejos
de la fila que está siendo
modifi cada o borrada se
utiliza :OLD.columna
✔ Tanto N E W como O L D se pueden
Triggers de la Base
de datos
✔ Un trigger puede ser disparado:
✔ una vez para toda la sentencia (default)

✔ una vez para cada fila involucrada en la


sentencia (FOR EACH ROW)
✔ OLD y N E W se utilizan en triggers de
fila
✔ Esposible pedir que el trigger se
dispare solo cuando se cumple una
Triggers de la Base
de datos
✔ Aplicaciones de triggers:
✔ Auditoría sofisticada

✔ Validaciones no estructurales

✔ Derivación automática de valores


de columnas
✔ Seguridad m á s compleja

✔ Tablas replicadas

También podría gustarte