Académique Documents
Professionnel Documents
Culture Documents
Objetivo
Objetos y SQL
Objetos
Indices
Introduccin Procedimientos, funciones y paquetes Triggers
3
PL/SQL
Integridad
Garantizar que los datos cumplan con un conjunto de reglas del negocio preestablecidas por el diseador No admitir que ingresen datos invlidos a la base
Restriccin de Integridad
Mtodo declarativo que se utiliza para definir las reglas de integridad que deben cumplir los datos.
Tipos de restricciones
Tipos de restricciones
NOT NULL: no permite nulos para una columna. UNIQUE: no admite duplicados para una columna.
PRIMARY KEY: define una columna para identificar una fila. ( no admite duplicados ni nulos en la columna. )
FOREIGN KEY: define a una columna dependiente de otra ( comnmente una PRIMARY KEY ). Ambas ( la secundaria y la primaria ) pueden estar en tablas distintas. La tabla donde se define la columna primaria se denomina padre y la tabla dependiente hijo.
7
Tipos de restricciones
DELETE CASCADE: genera un borrado automtico de las filas hijo cuando se borra una fila padre.
CHECK: define reglas ms complejas expresadas con una condicin. Puede incluir cualquier expresin que se evale a TRUE o FALSE. ( inclusive un SELECT ).
Ventajas
Facilidad, no requieren de programacin. Centralizacin. Independencia, no pertenecen a ninguna aplicacin. Productividad, un cambio de regla slo significa cambiar una restriccin. Retroalimentacin inmediata. Flexibilidad, se pueden habilitar/deshabilitar dinmicamente.
9
Integridad y diccionario
dba_constraints user_constraints
dba_cons_columns
user_cons_columns
10
ndices
Objeto que contiene una entrada para cada valor que aparece en la o las columnas indexadas y provee un acceso rpido y directo a las filas.
11
ndices y diccionario
dba_indexes user_indexes
12
PL/SQL
Procedural Languaje SQL, adiciona funcionalidad a SQL por incorporar estructuras de control, manipulacin de errores, control transaccional y capacidad de procesar objetos.
Totalmente portable e interoperable Minimiza el trfico en un ambiente de red y el intercambio con la BD Aumenta la seguridad de la BD
13
Entornos
PL/SQL es un motor que interpreta y ejecuta sentencias procedurales. Forma parte de cada aplicacin Cliente y del servidor ORACLE
14
Bloque PL/SQL
Declare declaraciones Begin Cuerpo del bloque Exception Manipuladores de excepciones End;
15
Procedimientos y funciones
Procedimientos
Un bloque PL/SQL con nombre que puede aceptar parmetros y retorna valores a travs de estos. ( void function en C, SUBROUTINES en VB, etc) Se invocan como una sentencia independiente, no pueden formar parte de una expresin
17
Funciones
Un bloque PL/SQL con nombre que puede aceptar parmetros y retorna un valor Se invoca en el contexto de alguna expresin: Edad:=getEdad(Ramon);
Paquetes
Construccin que permite agrupar funciones y procedimientos relacionados. Los paquetes permiten igualmente declarar variables GLOBALES a una sesin.
Tienen dos partes: el encabezamiento (spec) y el cuerpo (body) En la declaracin se admiten variables, tipos de datos y firma de procedimientos pblicos.
19
Encabezamiento
CREATE PACKAGE estudiante IS edad number(2); FUNCTION getEdad ( id VARCHAR2); FUNCTION getEdad ( num NUMBER ); END;
20
Cuerpo
En el cuerpo se admiten declaraciones, bloques ejecutables y manipuladores de excepciones para cada una de las funciones y/o procedimientos declarados en el encabezamiento En el cuerpo se implementan las funciones. Todo lo que se declare en el cuerpo es invisible fuera del paquete
21
Inicializacin
El cuerpo del paquete puede tener una seccin de inicializacin (constructor) que se ejecuta la primera vez que se hace referencia al mismo. Puede utilizarse para inicializar variables GLOBALES dinmicamente en tiempo de ejecucin. Puede existir un paquete sin cuerpo. Las variables GLOBALES se consideran de sesin. Cada sesin mantiene una copia propia. Son persistentes a la sesin.
22
Ventajas
Mejoran el rendimiento pues ante la primera referencia se carga completo en memoria Facilitan la administracin y el mantenimiento
Permiten la implementacin de funciones y procedimientos cuyos parmetros y/o valores de retorno puedan ser de tipos no primitivos
23
Referencia
Los datos pblicos de un paquete se referencian utilizando notacin de punto Paquete.funcin; Paquete.variable;
24
Sobrecarga de mtodos
Se redefinen mtodos a partir de su firma
25
Triggers
Unidad de programa que se ejecuta automticamente cuando ocurre el evento al cual est asociado. Cualquier comando SQL-DML que modifique los datos constituye un evento de trigger.
26
Usos comunes
Generar valores derivados. Prevenir la ejecucin de transacciones invlidas. Control de acceso adicional. Cumplimiento de reglas de integridad sofisticadas. Estadsticas.
27
Partes
Evento: DML: UPDATE, INSERT, DELETE. DDL: CREATE, DROP, ALTER, DATABASE Restriccin: condicin que limita al evento asociado. Accin: determina lo que se hace cuando se dispara.
28
Tipos
Row triggers: Actan sobre cada fila afectada. Statement triggers: Actan slo una vez.
29
Clasificacin
Before triggers: se disparan antes de que se ejecute el evento. After trigger: se disparan despus de la ejecucin del evento.
30
Estado
31
Ejemplo1
CREATE TRIGGER t1 AFTER UPDATE OF salario ON personal WHEN DPTO = GPP FOR EACH ROW BEGIN UPDATE estat SET total_filas = total_filas + 1 WHERE tabla = PERSONAL; END;
32
Ejemplo2
CREATE TRIGGER log_errors AFTER SERVERERROR ON DATABASE BEGIN IF (IS_SERVERERROR (1017)) THEN <special processing of logon error> ELSE <log error number> END IF; END;
33
Ejemplo3
CREATE VIEW order_info AS SELECT c.customer_id, c.cust_last_name, c.cust_first_name, o.order_id, o.order_date, o.order_status FROM customers c, orders o WHERE c.customer_id = o.customer
CREATE OR REPLACE TRIGGER order_info_insert INSTEAD OF INSERT ON order_info DECLARE duplicate_info EXCEPTION; PRAGMA EXCEPTION_INIT (duplicate_info, -00001); BEGIN INSERT INTO customers (customer_id, cust_last_name, cust_first_name) VALUES ( :new.customer_id, :new.cust_last_name, :new.cust_first_name); INSERT INTO orders (order_id, order_date, customer_id) VALUES ( :new.order_id, :new.order_date, :new.customer_id); EXCEPTION WHEN duplicate_info THEN RAISE_APPLICATION_ERROR ( num=> -20107, msg=> 'Duplicate customer or order ID'); END order_info_insert;
34
Ejemplo4
CREATE OR REPLACE TRIGGER drop_trigger BEFORE DROP ON hr.SCHEMA BEGIN RAISE_APPLICATION_ERROR ( num => -20000, msg => 'Cannot drop object'); END;
35
Programas y diccionario
dba_source user_source
36