PL SQL

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

Introducción al lenguaje

Oracle incorpora un gestor PL/SQL (basado en lenguaje ADA), incorpora todas las características de
lenguajes de tercera generación:
• Manejo de variables.
• Estructura modular (procedimientos y funciones).
• Estructuras de control (bifurcaciones, bucles y demás estructuras).
• Control de excepciones.
• Almacenamiento en la B.D. (para su posterior ejecución).
• Soporte para la programación orientada a objetos (POD).

La unidad de trabajo es el bloque, que es un conjunto de declaraciones, instrucciones y mecanismos de


gestión de errores y excepciones. Es la estructura básica característica de todos los programas PL/SQL, tiene
tres zonas claramente definidas:
• Zona de declaraciones declaración de variables, constantes, precedido por la clausula
DECLARE, es opcional.

• Conjunto de instrucciones precedido por la clausula BEGIN.

• Zona de excepciones precedido por la clausula EXCEPTION, es opcional también.

• Ejemplo: [ DECLARE
< declaraciones > ]
BEGIN
< ordenes >
[ EXCEPTION
< gestión de excepciones > ]
END ;

La utilización de bloques supone una notable mejora de rendimiento, ya que se envían los bloques
completos al servidor para que sean procesados, en lugar de cada sentencia SQL. También se pueden anidar:
DECLARE
….
BEGIN
…...
DECLARE comienzo bloque interior (un DECLARE dentro de otro)
…..
BEGIN
…..
EXCEPTION
…..
END ;
….
EXCEPTION
…...
END

Definición de datos compatibles con SQL


PL/SQL dispone de tipos de datos compatibles con los tipos utilizados para las columnas de las tablas:
NUMBER, VARCHAR2, DATE.

1
Las declaraciones de los datos deben hacerse en la sección de declaraciones:
Contador NUMBER2 ;
Nombre CHAR (20) ;
Nuevo VARCHAR2 (15) ;
BEGIN
…..

PL/SQL permite declarar una variable del mismo tipo que otra variable o que una columna de una tabla
mediante el atributo %TYPE.

También se puede declarar una variable para guardar una fila completa de una tabla mediante el atributo
%ROWTYPE.

Estructuras de control alternativas.

➢ Alternativa simple (IF)


Si la condición se cumple, se ejecutan las instrucciones que siguen a la clausula THEN

IF <condición> THEN
instrucciones;
END IF;

➢ Alternativa doble (IF ELSE)


Si la condición se cumple, se ejecutan las instrucciones que siguen a la clausula THEN, en caso
contrario, se ejecutaran las instrucciones que siguen a la clausula ELSE

IF <condición> THEN
instrucciones;
ELSE
instrucciones;
END IF;

➢ Alternativa múltiple (ELSIF)


Evalúa comenzando desde el principio cada condición, hasta encontrar alguna condición que se
cumpla, en cuyo caso se ejecutara las instrucciones que siguen al THEN correspondiente, la
clausula ELSE es opcional y se ejecuta si no se ha cumplido ninguna de las anteriores.

IF <condición> THEN
instrucciones;
ELSIF <condicion2> THEN
instrucciones;
ELSIF <condicion3> THEN
instrucciones;
…..
ELSE
instrucciones;
END IF;

2
➢ Alternativa múltiple (CASE de comprobación)
Calcula el resultado de la expresión que sigue a la clausula CASE, a continuación comprueba si el
valor obtenido coincide con alguno d ellos valores especificados detrás de las clausulas WHEN,
en cuyo caso ejecutara la instrucción/es correspondientes, ELSE es opcional.

CASE [<expresión>]
WHEN <test1> THEN
<instrucciones1>;
WHEN <test2> THEN
<instrucciones2>;
WHEN <test3> THEN
<instrucciones3>;
[ELSE
<otras-instrucciones>;]
END CASE;

➢ Alternativa múltiple (CASE de búsqueda)


Evalúa, comenzando desde el principio, cada condición, hasta encontrar alguna condición que se
cumpla, en cuyo caso ejecutara las instrucciones que siguen al THEN, el ELSE es opcional.

CASE
WHEN <condicion1> THEN
<instrucciones1>;
WHEN <condicion2> THEN
<instrucciones2>;
WHEN <condicion3> THEN
<instrucciones3>;
[ELSE
<otras-instrucciones>;]
END CASE;

Estructuras de control repetitivas.

➢ Mientras (WHILE)
Se evalúa la condición y si se cumple, se ejecutaran las instrucciones del bucle. El bucle se seguirá
ejecutando mientras se cumpla la condición, es una condición de continuación.

WHILE <condición>
LOOP
instrucciones;
END LOOP;

➢ Para (FOR)

<variablecontrol> es la variable de control del bucle que se declara (BINARY_INTEGER), esta


variable toma el valor especificado en valorinicio y se repite incrementándose en 1 hasta el valorfinal.
FOR <variablecontrol> IN <valorinicio> … <valorfinal>
LOOP
instrucciones;
END LOOP;

3
Se utiliza cuando se conoce o se puede conocer el numero de veces que se debe ejecutar el bucle.

4
➢ Para (FOR) en incrementos negativos.

FOR <variablecontrol> IN REVERSE <valorinicio> … <valorfinal>


LOOP
instrucciones;
END LOOP;

Donde <variablecontro> es la variable de control del bucle que se declara (tipo


BINARY_INTEGER), esta variable tomara el valor especificado en valorfinal y se repetirá
decrementandose en 1 hasta el valor inicial.

• Respecto de la variable de control en cualquiera de los FOR:


➢ No hay que declararla
➢ Es local al bucle y no accesible desde el exterior
➢ Se puede usar dentro del bucle en una expresión pero no se le pueden asignar valores.

➢ Iterar... fin iterar salir si...(LOOP)


Se trata de un bucle que se repetirá indefinidamente hasta que se encuentre una instrucción EXIT sin
condición o hasta que se cumpla la condición asociada a la clausula EXIT WHEN. Es una condición
de salida.

LOOP
instrucciones;
EXIT WHEN <condición>;
instrucciones;
END LOOP;

Desde PL/SQL se puede ejecutar cualquier orden de manipulación de datos.

Ejemplos:
• DELETE FROM clientes WHERE nif = v_nif;

• UPDATE productos SET stock_disponible := stock_disponible – unidades_vendidas WHERE


producto_no = v_producto;
:= se utiliza cuando se va a hacer una operación.

PL/SQL permite ejecutar cualquier consulta admitida por la base de datos. Pero cuando se ejecuta la consulta,
el resultado no se muestra automáticamente en el terminal del usuario, sino que se queda en un área de
memoria denominada cursor, a la que accederemos utilizando variables.

Utilizaremos una o mas variables (declaradas previamente) junto con la clausula INTO para poder acceder a
los datos devueltos por nuestra consulta (la consulta solo debe devolver una fila o dará error).
SELECT <columna/s> INTO <variable/s> FROM <tabla> WHERE …..];

5
Gestión de excepciones.

La excepciones sirven para tratar errores y mensajes de aviso.

• NO_DATA_FOUND una orden de tipo SELECT INTO no ha devuelto ningún valor.

• TOO_MANY_ROWS una orden SELECT INTO ha devuelto mas de una fila.

La sección EXCEPTION es la encargada de gestionar mediante los manejadores (WHEN) las excepciones
que puedan producirse durante la ejecución de un programa.

Cuando PL/SQL detecta una excepción, automáticamente pasa el control del programa a la sección
EXCEPTION del bloque PL/SQL.

PL/SQL permite que el programador defina sus propias excepciones.

Caso practico: Visualiza el apellido y el oficio del empleado con numero 7900
DECLARE
v_ape VARCHAR2 (10);
v_oficio VARCHAR2(10);
BEGIN
SELECT apellido, oficio INTO v_ape, v_oficio FROM EMPLEADOS WHERE EMP_NO = 7900 ;
DBMS_OUTPUT.PUT_LINE (v_ape || '*' || v_oficio) ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR (-20000,'ERROR no hay datos');
WHEN TOO_MANY_ROWS THEN
RAISE_APPLICATION_ERROR (-20000,'ERROR demasiados datos');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20000,'ERROR en la aplicación');
END ;
/ si se pone al final el bloque se almacena en el bufer y luego se ejecuta
. si se pone al final el bloque se almacena en el bufer pero no se ejecuta hasta poner / o RUN.

El resultado es:

Estructura modular, tipos de programas que se ejecutan en PL/SQL:

➢ Bloques anónimos (los ejemplos vistos)


• no tiene nombre, se ejecutan pero no se guardan
• La zona declaraciones comienza con DECLARE
• Son las estructuras de ejemplo vistas, pero sin utilización real.

➢ Subprogramas: (Procedimientos y funciones)


• Son bloques PL/SQL que tienen nombre por el que se invocan desde otros programas.
• Se compilan, almacén y ejecutan en la base de datos.
• Tienen una cabecera que incluye el nombre del subprograma.
✔ Se indica si es función o o procedimiento, así como los parámetros.
• La zona de declaraciones y el bloque del programa empiezan con IS o AS.
• Pueden ser de dos tipos Procedimientos y Funciones.
6
Procedimiento:
DBMS_OUTPUT.PUT_LINE ('BORRADO EMPLEADO'
PROCEDURE <nombreprocedimiento>| | '*' | | :old.emp_no
[( <lista de parámetros> )] | | '*' | | :old.apellido);
IS
[<declaración objetos locales>;]
BEGIN
<instrucciones>;
[EXCEPTION
<excepciones>;]
END [<nombreprocedimiento>] ;

Función:
FUNCTION <nombrefuncion>
[( <lista de parámetros> )]
RETURN <tipo valor devuelto>
IS
[<declaración objetos locales>;]
BEGIN
<instrucciones>;
RETURN <expresión>;
[EXCEPTION
<excepciones>;]
END [<nombrefuncion>] ;

Oracle utiliza el paquete DBMS_OUTPUT con fines de depuración. Este incluye entre otros el procedimiento
PUT_LINE que permite visualizar textos en la pantalla (para que funcione correctamente la variable de
entorno SERVEROUTPUT deberá estar en ON).

SQL> SET SERVEROUTPUT ON

➢ Podemos guardar el bloque del buffer con la orden SAVE:


✔ SAVE nombrefichero [REPLACE] REPLACE se usa si ya existía el fichero.

➢ Para cargar un bloque de un fichero en el buffer SQL se hace con GET:

7
✔ GET nombrefichero una vez cargado se ejecuta con RUN o /

➢ También se puede cargar y ejecutar con una sola orden con START o @:
✔ START nombre fichero
✔ @nombrefichero

8
Ejemplo:
CREATE OR REPLACE
PROCEDURE ver_depart [numdepart NUMBER]
AS
v_dnombre VARCHAR2(14);
v_localidad VARCHAR2(14);
BEGIN
SELECT dnombre, loc INTO v_dnombre, v_localidad
FROM depart
WHERE dept_no = numdepart;
DBMS_OUTPUT.PUT_LINE ('Num depart:' | | numdepart | | ' * Nombre dep:' | | v_dnombre | |
' * Localidad: ' | | v_localidad) ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE ('No encontrado departamento ') ;
END ver_depart ;
/

Para ejecutar este procedimiento creado se hace con EXECUTE nombre(dato), en modo terminal, ejemplo:
EXECUTE ver_depart(20); o BEGIN ver_depart(20) END ; en modo gráfico.

Colocar el símbolo & delante de una variable indica que se pedirá la introducción del dato especificado.

Fundamentos del lenguaje PL/SQL

Pl/SQL dispone de los mismos datos que SQL ademas de otros propios, estos datos se pueden clasificar en:
➢ Escalares Almacenan valores simples
✔ Carácter/cadena:
• CHAR (L) Cadenas de caracteres de longitud fija, posiciones no usadas son blancos
• NCHAR (L) similar al anterior
• VARCHAR2 (L) Cadenas de caracteres de longitud variable
• NVARCHAR2 (L)
• LONG (L) Almacena cadenas de longitud variable, se debe especificar el máximo
• RAW (L) Almacena datos binarios de longitud fija
• LONG RAW (L) Almacena datos binarios de longitud variable
• ROWID Almacena identificadores de direcciones de fila
• UROWID (L) Almacena identificadores de direcciones de fila, especificando nº bytes
✔ Numérico
• NUMBER (P, E) Numérico, P numero total de dígitos, E numero decimales
• BINARY_INTEGER Numérico entero, se almacena en memoria en formato binario
• PLS_INTEGER Similar al anterior pero mas rápido/da error si desbordamiento
• BINARY_DOUBLE Para el ámbito científico con cálculos muy precisos y complejos
• BINARY_FLOAT Para el ámbito científico con cálculos muy precisos y complejos
✔ Boolean Almacena valores lógicos, TRUE, FALSE, NULL
✔ Fecha/hora
• DATE Almacena fechas incluyendo la hora
• TIMESTAMP Almacena fechas incluyendo la hora y fracciones de segundo
• INTERVAL Intervalo de tiempo entre fechas
✔ Otros
• ROWID
• UROWIN

9
➢ Compuestos compuestos de otros simples
✔ Tablas indexadas
✔ Tablas anidadas
✔ Varrays
✔ Objetos

➢ Referencias difieren de los anteriores por características de manejo y almacenamiento.


✔ REF CURSOR Son referencias a cursores
✔ REF Son punteros a objetos

➢ LOB almacenan objetos de grandes dimensiones (de hasta 128 terabytes, sustituyen a LONG RAW)

Los Identificadores se utilizan para nombrar los objetos que intervienen en un programa:
• Variables, constantes, cursores, excepciones, procedimientos, funciones, etiquetas....
• Pueden tener entre 1 y 30 caracteres de longitud
• El primer carácter ha de ser una letra
• El resto de caracteres han de ser alfanuméricos
• No pueden incluir signos de puntuación, espacios, etc.
• No se diferencia entre mayúsculas o minúsculas.

La opción DEFAULT o := sirve para asignar valores por defecto a la variable tras su creación.

La opción NOT NULL fuerza a que la variable tenga siempre un valor.

Atributo %TYPE declara una variable del mismo tipo que otra (nombre_variable nombre_objeto%TYPE;)

Atributo %ROWTYPE declara una variable de registro cuyos campos se corresponden con las columnas de
una tabla (nombre_variable nombre_objeto%ROWTYPE;).

Las variables se crean al comienzo del bloque y dejan de existir una vez finalizada la ejecución del bloque
en que han sido declaradas, el ámbito de una variable incluye el bloque en el que se declara y sus bloques
hijos.

Las variables declaradas en los bloques hijos no son accesibles desde el bloque padre.

Al declarar constantes se deberá asignar un valor: <nombre_constante> CONSTANT <tipo> := <valor> ;

Los literales representan valores constantes directamente, se utilizan para visualizar valores.
Carácter 'A', 'a', '*'
Cadena 'Cliente Nº:'
Numérico 567, 2.23, -8.75
Booleano v_cobrado := TRUE;
Fecha/hora DATE '2005-11-09'

Los operadores se utilizan para asignar valores y formar expresiones:


➔ Asignación := Asigna un valor a una variable Edad := 19
➔ Concatenación || Une dos o mas cadenas 'Buenos' || 'dias'
➔ Comparación = , != , < , > , <= , >= , IN , IS NULL , LIKE , BETWEEN
➔ Aritméticos + , - , * , / , **
• f1 – f2 Devuelve el numero de días que hay entre las fechas f1 y f2.
• f + n Devuelve una fecha que es el resultado de sumar n días a la fecha f.
• f - n Devuelve una fecha que es el resultado de restar n días a la fecha f.
10
➔ Lógicos AND , OR , NOT
➔ Otros indicadores
• () Delimitador de expresiones
• '' Delimitador de literales de cadena
• ““ Delimitador de identificadores
• << >> Etiquetas
• /* */ Delimitador comentarios de varias lineas
• -- Indicador de comentario de una linea
• % Indicador de atributo (TYPE, ROWTYPE, FOUND, …)
• : Indicador de variables de transferencia
• , Separador de item de lista
• ; Terminador de instrucción
• @ Indicador de enlace de bases de datos

11
INSTRUCCIONES

- Los valores nulos en las expresiones siempre dan como resultado un valor nulo

Instrucción Definición Ejemplos


. ED Invoca al Editor del Sistema.
. CLEAR SCR Borra la pantalla
. START fichero Ejecuta el contenido almacenado en
fichero.sql. Hay que especificar la ruta
completa
. RUN Repite la ejecución de la última sentencia o . RUN
de lo que hay en el buffer .R
. LIST Visualiza el contenido del buffer ó el . LIST
contenido de la linea n . LIST n
.Ln
. SAVE fichero Almacena el contenido del buffer en
fichero.sql
. GET fichero Recupera al buffer el contenido del fichero
fichero.sql
. INPUT Añade una línea a continuación de la actual
activa
. DEL Elimina la línea actual

. SPOOL fichero Todas las salidas por pantalla se almacenan


en fichero.lst
. SPOOL OFF Libera el almacenamiento de salidas por
pantalla

12
13

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy