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

DBDD - Clase 2 - Programacion SQL

Este documento explica conceptos básicos de PL/SQL como bloques, variables, constantes, estructuras de control como bucles e if, y triggers. Describe la sintaxis y componentes de triggers para automatizar procesos en una base de datos.

Cargado por

Manolo Simaj Sut
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 PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
18 vistas

DBDD - Clase 2 - Programacion SQL

Este documento explica conceptos básicos de PL/SQL como bloques, variables, constantes, estructuras de control como bucles e if, y triggers. Describe la sintaxis y componentes de triggers para automatizar procesos en una base de datos.

Cargado por

Manolo Simaj Sut
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 PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 28

PL/SQL

DISEO DE
BASE DE DATOS

Preliminares:
PL/SQL:

Lenguaje de programacin procedimental


estructurado en bloques que ampla el
lenguaje estndar SQL.

preliminares
Permite:
Manipular

datos de una BD Oracle.


Usar tcnicas procedurales (bucles, ...).
Controlar las filas de una consulta, una a
una.
Controlar errores (excepciones) definidas por
el usuario o propios de Oracle (predefinidos).
Definir disparadores

Bloques

Es la unidad bsica de cualquier programa


PL/SQL.
Estructura bsica de un bloque: tiene tres partes,
aunque
slo es obligatoria la parte del conjunto de
sentencias ejecutables.

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;

Sentencia de cambio de control


GOTO y <etiquetas>:
Transfiere el control a un punto concreto dentro del bloque,
la sentencia o bloque siguiente a la etiqueta indicada

<<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)

Bucles: bucle simple


[etiqueta_nombre_bucle] LOOP
sentencias; ...
END LOOP;
SQL> create or replace procedure prueba is
2 v_contador number :=1;
3 begin
4 loop
5 insert into estudiante values (v_contador);
6 v_contador := v_contador + 1;
7 exit when v_contador > 50;
8 end loop;
9 end;
SQL> run
SQL> execute prueba
SQL> select * from estudiante;

Bucles: bucles condicionales


La condicin se evala antes de entrar en el bucle
[nombre_bucle] WHILE <condicin> LOOP
sentencias; ...
END LOOP;
Ejemplo:
DECLARE
v_contador NUMBER :=1;
BEGIN
WHILE v_contador <= 50 LOOP
INSERT INTO estudiante
VALUES (v_contador);
v_contador:=v_contador+1;
END LOOP;
END;

Bucles: numricos (acotados)


Se ejecutan una sola vez por cada elemento de
rango definido
[nombre_bucle] FOR <indice>
IN [REVERSE] <exp_n1>..<exp_n2>
LOOP
sentencias; ...

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.

Trigger: Uso y definicin


Se utilizan para
mantener la integridad referencial,
asegurar reglas de negocio complejas y
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 realizarn
cuando el trigger se ejecute.

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;

Triggers: Componentes (1)


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

Triggers: Componentes (2)


Nivel:
FOR EACH ROW: disparadores a nivel de fila. Se
activan una vez por cada fila afectada por el
evento
FOR EACH STATEMENT: disparadores a nivel de
orden. Se activan slo una vez (antes o
despus de la orden).

When: Slo tiene sentido a nivel de fila. La


condicin se evala (true o false).

Triggers: Componentes (3)


Cuerpo: bloque PL/SQL con las siguientes restricciones:
Un disparador no puede emitir ninguna orden de
control de transacciones (COMMIT, ROLLBACK o
SAVEPOINT)
Ningn procedimiento o funcin llamada por el
disparador puede emitir rdenes de control de
transacciones
No puede contener ninguna declaracin de variables
LONG o LONG RAW
No se puede acceder a cualquier tabla. Existen
restricciones (Tablas Mutantes)

No puede modificar las columnas que son Primary Key

Registros :old y :new

Un disparador a nivel de fila se ejecuta por cada


fila en
la que se produce el suceso.
:old y :new son registros que nos permiten acceder
a los
datos de la fila actual.

Ejemplo :old y :new


create sequence sec_estudiante start with 2;
create table estudiante (codigo number(2) primary key);
La forma habitual de incluir informacin en la tabla sera:
insert into estudiante values
(sec_estudiante.nextval);
Con este trigger se ignoran los valores que un usuario pudiera
introducir como cdigo de estudiante y se inserta el siguiente
valor de la secuencia.
create or replace trigger t_estudiante
before insert on estudiante for each row
begin
select sec_estudiante.nextval into :new.codigo from
dual;
end;
/

INSERTING, DELETING Y UPDATING


Predicados empleados para determinar qu
operacin se est
realizando en un disparador.
CREATE OR REPLACE TRIGGER Cambios
BEFORE INSERT OR DELETE ON Alumnos
FOR EACH ROW
DECLARE
Cambio_tipo CHAR(1);
BEGIN
/* Usa I para INSERT y D Para DELETE */
IF INSERTING THEN
Cambio_tipo := I;
ELSE
Cambio_tipo := D;
END IF;
END;

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.

También podría gustarte