DBDD - Clase 2 - Programacion SQL

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 13

PL/SQL

DISEÑO DE
BASE DE DATOS
Preliminares:
 PL/SQL:

Lenguaje de programación procedimental estructurado


en bloques que amplía el lenguaje estándar SQL.
preliminares
Permite:
 Manipular datos de una BD Oracle.
 Usar técnicas 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 básica de cualquier programa PL/SQL.
 Estructura básica de un bloque: tiene tres partes,
aunque
 sólo 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:
 Aritméticas : + - * /
 Comparaciones : = != < > >= <=
 Concatenación 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
Declaración de Variables y Constantes
Variables:
Se utilizan para almacenar valores devueltos por
una consulta o para realizar cálculos intermedios
Constantes:
Son campos definidos e inalterables

Declaración
<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 expresión)

el <tipo> puede ser:


Tipo de datos: tipo de dato de la variable (de los tipos básicos 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
Declaración 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;
/* (tendría 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 condición:
IF <condición>
THEN <sentencias ejecutables>;
[ELSIF <condición>
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.
Estructuras De Control
BUCLE:
Bloque cuya ejecución se repite
Tipos:
Bucles simples (LOOP).
Bucles condicionales (WHILE).
Bucles numéricos (FOR).
Bucles sobre cursores.
Bucles sobre sentencias SELECT.
Para romper el bucle se debe usar la instrucción EXIT
(aunque también 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 condición se evalúa antes de entrar en el bucle

[nombre_bucle] WHILE <condición> 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: numéricos (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;

También podría gustarte