DBDD - Clase 2 - Programacion SQL
DBDD - Clase 2 - Programacion SQL
DISEO DE
BASE DE DATOS
Preliminares:
PL/SQL:
preliminares
Permite:
Manipular
Bloques
DECLARE
/* Declaraciones de uso local:
variables, cursores, y excepciones de Usuario */ BEGIN
/* Proceso: conjunto de sentencias ejecutables */
EXCEPTION
/* Excepciones: zona de control de errores */
END;
Expresiones y Tipos de
Variable
Tipos de expresiones:
Aritmticas :
+-*/
Comparaciones : = != < > >= <=
Concatenacin 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
Declaracin de Variables y
Constantes
Variables:
Se utilizan para almacenar valores devueltos por
una consulta o para realizar clculos intermedios
Constantes:
Son campos definidos e inalterables
Declaracin
<nom_variable> <tipo> [CONSTANT][NOT NULL] [:=VALOR];
[CONSTANT] Palabra reservada para definir constantes
[NOT NULL] obliga a tener valor
[:=VALOR] asigna el valor inicial (valor constante o expresin)
el <tipo> puede ser:
Tipo de datos: tipo de dato de la variable (de los tipos bsicos
SQL)
campo%TYPE: tipo de datos usado por una columna (o variable)
tabla%ROWTYPE: tipo de datos de la variable fila, con los
mismos campos (y
tipos) que los campos de la tabla
Declaracin de Variables y
Constantes
DECLARE
DNI
NUMBER (8,0);
Nombre VARCHAR (30);
Factor CONSTANT NUMBER(3,2):=0.10;
DNI2
DNI%TYPE;
Rcliente cliente%ROWTYPE;
/* (tendra los campos: Rcliente.DNI,
Rcliente.Nombre ) */
precio NUMBER:= 300; (inicializado a un valor)
IVA
NUMBER CONSTANT :=16;
Estructuras De Control
Realizan el control del flujo del bloque.
Son de varios tipos:
IF (condicionales):
Ejecuta una o varias sentencias dependiendo de una
condicin:
IF <condicin>
THEN <sentencias ejecutables>;
[ELSIF <condicin>
THEN <sentencias_ejecutable>]
[ELSE <sentencias_ejecutable>];
END IF;
<<etiqueta>>
GOTO <<etiqueta>>;
La sentencia puede ir a otro bloque o sub-bloque pero
nunca a la zona de excepciones.
No se pueden realizar saltos al interior de un bloque
condicional o al interior de un bucle.
La sentencia siguiente a la etiqueta debe ser ejecutable
NULL : sentencia ejecutable que no hace nada.
Ejemplo Go To
-- example with GOTO statement
DECLARE
v_last_name VARCHAR2(25);
v_emp_id NUMBER(6) := 120;
BEGIN
<<get_name>>
SELECT last_name INTO v_last_name FROM employees
WHERE employee_id = v_emp_id;
BEGIN
DBMS_OUTPUT.PUT_LINE (v_last_name);
v_emp_id := v_emp_id + 5;
IF v_emp_id < 120 THEN
GOTO get_name; -- branch to enclosing block
END IF;
END;
END;
Estructuras De Control
BUCLE:
Bloque cuya ejecucin se repite
Tipos:
Bucles simples (LOOP).
Bucles condicionales (WHILE).
Bucles numricos (FOR).
Bucles sobre cursores.
Bucles sobre sentencias SELECT.
Para romper el bucle se debe usar la instruccin EXIT
(aunque tambin se puede salir con GOTO o con
RAISE)
Ejemplo:
BEGIN
FOR v_contador IN 1..50 LOOP
INSERT INTO estudiante
VALUES (v_contador);
END LOOP;
END;
Ejercicio
La empresa Comerciales S.A. necesita crear en base de
datos un proceso de facturacin. Por medio de
procedimientos almacenados y transacciones, realice lo
siguiente:
Clientes: Utilizando un bucle, cree varios clientes con
nombres que terminen en nmeros correlativos.
Facturacin (nicamente registrar la fecha de la factura,
el cliente y el monto total)
Acreditacin de deudores: se asume que todas las ventas
sern al crdito, por lo cual se necesita que cuando se
realice una factura a un cliente, se actualice su monto de
crdito.
Finalmente se necesita que se realice un procedimiento
para que el cliente pueda hacer abonos a su cuenta de
crdito.
Triggers
definicin
Un trigger (disparador)
Define una accin que la base de datos
siempre debera realizar cuando ocurre algn
tipo de acontecimiento que la afecta.
triggers
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 estn asociados a una tabla.
Pueden afectar a n filas.
Se ejecutan de manera implcita ante eventos
(operacin de insercin, modificacin o
borrado)
Se compilan cada vez que se activan
Triggers: Sintaxis
create or replace trigger NombreTrigger
{before | after | instead of}
{delete | insert | update [of NombreColumna
[, NombreColumna] ...] }
[or {delete | insert | update [of NombreColumna
[, NombreColumna] ...] } ] ...
on {NombreTabla | Nombre-Vista}
[ [referencing { old [as] NombreViejo | new [as]
NombreNuevo} ...]
for each {row | statement} [when (Condicin)] ]
Bloque pl/sql
Triggers: Sintaxis
Eliminacin
DROP TRIGGER nombre_disparador;
Activacin/Desactivacin
ALTER TRIGGER nombre_disparador {DISABLE
| ENABLE};
ALTER TABLE nombre_tabla
{ENABLE | DISABLE} ALL TRIGGERS;
Ver errores de compilacin
SHOW ERRORS TRIGGER nombre_disparador;
Ejercicio
Se requiere que para la misma empresa
Comercial S.A. se creen los siguientes trigger:
Creacin automtica de id para nuevos
clientes.
Actualizacin de bitcora de pagos del
cliente.
Cuando el cliente haga un pago, si este es
mayor de Q1000.00, se le har un abono a
capital automtico de Q10.00 por
cumplimiento de pago.