Está en la página 1de 14

UNIDAD12.

Introducción al
lenguaje PL/SQL
1. INTRODUCCIÓN
2. ESTRUCTURA DE UN PROGRAMA EN PL/SQL
3. VARIABLES Y DEFINICIÓN DE DATOS
4. OPERADORES
5. FUNCIONES
6. SOPORTE PARA CONSULTA
7. INTERACCION CON EL USUARIO
8. ESTRUCTURAS DE CONTROL
9. SUBPROGRAMAS: PROCEDIMEINTOS Y FUNCIONES
Unidad Temática 12 Introducción PL/SQL

1. INTRODUCCIÓN
Hasta ahora hemos utilizado SQL en modo interactivo o elaborando pequeños scripts, pero sin
control de la secuencia de instrucciones, módulos, iteraciones, etc., . Para este propósito Oracle
incorpora PL/SQL.

PL/SQL es un lenguaje procedimental diseñado por ORACLE para trabajar con la base de datos.
Esta incluido en el servidor y en algunas herramientas del cliente.

CARACTERÍSTICAS:
 Soporta todos los comandos de consulta y manipulación de datos, aportando a SQL las
estructuras de control (bucles, bifurcaciones, etc.,)

 Su unidad de trabajo es el bloque.

 Puede utilizar variables dentro de consultas.

 Es portable entre distintas versiones de ORACLE o entre distintas máquinas y Sistemas


Operativos.

 Mejora el rendimiento de Oracle enviando bloques de instrucciones al núcleo de la base de datos


para ser procesadas, en lugar de enviar instrucción a instrucción, lo que evita muchas
operaciones de entrada/salida.

2. ESTRUCTURA DE UN PROGRAMA EN PL/SQL

BLOQUES es la unidad básica de todos los programas PL/SQL. Su formato incluye tres
secciones:
 Zona declaraciones: donde se declaran objetos locales (variables, constantes, etc.,)
Suele ir precedida de la cl. DECLARE (IS/AS)
Es opcional.

 Zona instrucciones: comienza por cláusula BEGIN

 Zona tratamiento de excepciones: comienza con EXCEPTION. Nos permite gestionar


errores y excepciones. Es opcional.
Pag. 2 de 14
Unidad Temática 12 Introducción PL/SQL
 Zona instrucciones: acaba por cláusula END

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

Cada orden debe acabar con ;

Se pueden distinguir tres tipos de programas:


- BLOQUE ANÓNIMO: sin nombre, se ejecutan en el servidor pero no se guardan.

- SUBPROGRAMAS: procedimientos y funciones. Se guardan y se ejecutan en el servidor.

- DISPARADORES DE LA B.D.(TRIGGERS).

COMENTARIOS:
1- De varias líneas /* <comentario>/*
Ejemplo:
/* Este programa de prueba ha sido realizado por C.S./*

2- Al final de una línea de programa utilizando “--“


Ejemplo:
Total := total+dinero ; -- Total invertido en la cuenta
3. VARIABLES Y DEFINICIÓN DE DATOS

Las variables en PL/SQL se deben definir y declarar en la sección DECLARE. Para ello se utilizará el
siguiente formato:
Nombre_variable tipo_variable;

Tipos de datos:
PL/SQL dispone de tipos de datos compatibles con los que utilizan las columnas de SQL y
de otros propios.

 Igual que SQL: NUMBER, CHAR, VARCHAR2, LONG, RAW, LONG RAW y DATE.

 Propios:

Pag. 3 de 14
Unidad Temática 12 Introducción PL/SQL
BINARY_INTEGER: Enteros con signo. Usa números en formato binario lo que evita la
conversión como ocurriría con NUMBER. Se utiliza para definir índices en ARRAYS.

BOOLEAN: puede almacenar tres valores TRUE, FALSE o NULL.

Además PL/SQL maneja otros tipos más complejos:

 Tipos compuestos:registros, tablas y arrays

 Referencias – parecidas a punteros en C

 LOB (objetos de gran tamaño)

Asimismo permite que el programador defina sus propios subtipos.

Identificadores

Se utilizan para nombrar objetos que intervienen en un programa como variables,


constantes, cursores, procedimientos, excepciones, etc.,

Reglas para nombrarlos:

. Hasta 30 caracteres, empezando por letra que puede ir seguida de letra, nº, $,# y _.

. No distingue mayúsculas de minúsculas.

Declaración e inicialización de variables

En la sección DECLARE.

Formato:

<nombre_variable> <tipo> [NOT NULL] [{:=|DEFAULT} <valor>]

Ejemplo:
DECLARE
Importe Number(8,2);
Contador Number(2) DEFAULT 0;
Nombre Char(20) NOT NULL: =’MIGUEL’;
Nuevo Varchar2(15);
BEGIN..........

 Como podemos observar la asignación se realiza con los símbolos “:=” o la palabra DEFAULT.

Pag. 4 de 14
Unidad Temática 12 Introducción PL/SQL
 Podemos asignar a una variable la opción NOT NULL y por tanto ya en la definición debemos
asignar un valor.

 no se pueden poner una lista de variables para un tipo en una sola línea.

 Si no definimos valor por defecto, no debemos hacer referencia a la variable antes de


que se le asigne un valor.

Ámbito y viabilidad de las variables

El ámbito de una variable se ciñe al bloque en el que se declara y sus bloques hijos.

La var. será local para el bloque padre y global para los bloques hijos.

Las var. definidas en los bloques hijos no son accesibles desde el bloque padre.

Ejemplo:
DECLARE ------------------------------------- bloque padre
V1 char;
BEGIN
.................
DECLARE --------------------------- bloque hijo
V2 CHAR;
BEGIN
............................
V2 := 2;
V1 :=v2;
............................
END;
V2 := v1; -- --------------------Error :v2 es desconocida en este bloque
END;

ATRIBUTOS DE VARIABLES

Además de poder asignar a una variable un determinado tipo, tenemos la posibilidad de asignarle
uno de estos atributos: %TYPE y %ROWTYPE.

 %TYPE
Se puede declarar una variable del mismo tipo que otra o que una columna de una tabla
Ejemplo:
Cumple DATE;
Cumple1 cumple%TYPE;
/* asignarle el mismo tipo que una columna de una tabla*/

Pag. 5 de 14
Unidad Temática 12 Introducción PL/SQL
nom alumnos.nombre%TYPE –tabla.columna%TYPE

 %ROWTYPE
Con él podemos declarar una variable para guardar una fila completa con %ROWTYPE.
MIFILA EMPLEADOS %ROWTYPE;
Podríamos hacer SELECT * INTO mifila FROM EMPLE;

(*) Para hacer una referencia a un elemento de MIFILA diremos MIFILA.<nombre_columna>

Al declarar una var. de esta forma esta heredará tipo y longitud pero no atributos NOT NULL o
valor por defecto, definidos en la columna de la tabla.

Constantes
Se declaran mediante el siguiente formato:
<nombre_constante> CONSTANT <tipo> := <valor>
Siempre hay que asignarles un valor.
Ejemplo:
Tipo_IVA CONSTANT number := 16;

4. OPERADORES
OPERADORES LÓGICOS

AND OR Y NOT

OPERADOR DE CONCATENACIÓN

||

OPERADORES DE COMPARACIÓN

< <= > >= != IS NULL BETWEEN IN LIKE

OPERADORES ARITMÉTICOS
+ - * / **
Pag. 6 de 14
Unidad Temática 12 Introducción PL/SQL
Con fechas se puede: f1-f2 f+n f-n

5 .FUNCIONES
Se utilizan todas las funciones de SQL (las de la unidad 9)

Tener en cuenta:

1.- Algunas funciones como las de agrupamiento sólo se pueden utilizar dentro de la
cláusula SELECT.

2.- Si a una función se le pasa el valor nulo normalmente devolverá un valor nulo.

6. SOPORTE PARA CONSULTA


FORMATO:
SELECT <columna/s> INTO <variable/s> FROM tabla WHERE........
Ejemplo:
SQL>SELECT COUNT(*) FROM EMPLE; --ERROR dentro de un bloque PL.
SQL>SELECT COUNT(*) INTO V_TOTAL_EMPLE FROM EMPLE;

7. INTERACCION CON EL USUARIO


PL/SQL no dispone de órdenes para introducir datos por teclado ni para visualizarlos por pantalla.
Oracle incorpora la cláusula DBMS_OUTPUT.
FORMATO:
DBMS_OUTPUT.PUT_LINE(<expresiones>);
Para que funcione la cláusula SERVEROUTPUT debe estar en ON.
SQL>SET SERVEROUTPUT ON;

Para poder ver los posibles errores utilizaremos:


SQL>SHOW ERRORS;

Para ejecutar un bloque anónimo cargado en memoria usaremos / o RUN.

8. ESTRUCTURAS DE CONTROL
Pag. 7 de 14
Unidad Temática 12 Introducción PL/SQL

Como cualquier otro lenguaje procedimental PL/SQL dispone de órdenes para establecer controles y
condiciones a nuestros programas.
La mayoría de estas estructuras requieren evaluar una condición, que en PL/SQL pueda dar 3
resultados TRUE, FALSE o NULL. A estos efectos NULL=FALSE, la condición se cumplirá si es
TRUE.

ESTRUCTURAS DE CONTROL ALTERNATIVAS


Alternativa Simple Alternativa Doble Alternativa Múltiple
IF <condición> THEN IF <condición> THEN IF <condición> THEN
Instrucciones; Instrucciones; Instrucciones;
END IF; ELSE ELSIF <condición 2> THEN
Instrucciones Instrucciones;
END IF; ELSIF <condición 3> THEN
Instrucciones;
.........................
[ELSE instruccionesotras;]
END IF;

Ejemplo:
SELECT SUM(matricula) INTO renta FROM ALUMNOS WHERE codigo_curso=3;
IF renta>1000000 THEN
INSERT INTO temp(COL3) values (‘Rentable’);
ELSE
IF renta > 500000 THEN
INSERT INTO TEMP (col3) VALUES (‘No rentable’)
ELSE
INSERT INTO TEMP (col3) VALUES (‘Cerrarla’)
END IF;
END IF;

Pag. 8 de 14
Unidad Temática 12 Introducción PL/SQL

ESTRUCTURAS DE CONTROL REPETITIVAS


Mientras Para
WHILE <condición> LOOP FOR <variable_control> IN [REVERSE] <valor
inicio>..<valor final> LOOP
Instrucciones;
Instrucciones;
END LOOP;
END LOOP;
Se ejecuta mientras se cumple la cond.. Variablecontrol- es una var. De tipo
Se evalúa la cond., y si se cumple se realizan las BINARY__INTEGER que se declara de manera
instrucciones. implícita como variable local del bucle.
No se puede utilizar fuera de él.
Dentro del bucle se puede usar en una
expresión pero no se le pueden asignar valores.
Cuando se especifica REVERSE va del v. Final
al inicial.
Iterar Case
LOOP CASE expressión
[instrucciones;] WHEN <valorcomprbac1> THEN instrucciones1;
{IF <condición> THEN WHEN <valorcomprbac2> THEN instrucciones2;
EXIT; WHEN <valorcomprbac3> THEN instrucciones3;
ENDIF; | ……..
EXIT WHEN <condición>} [ELSE instruccionesotras;]
Instrucciones; END CASE;
END LOOP;

Ejemplos:
LOOP LOOP
C := c+1; c:= c+1;
IF c=100 THEN EXIT WHEN c=100;
EXIT END LOOP;
END IF;
END LOOP;

Pag. 9 de 14
Unidad Temática 12 Introducción PL/SQL

Consideraciones para el manejo de bucles

Los bucles se pueden etiquetar para conseguir mayor legibilidad:


Ejemplo1:
<<mibucle>>
LOOP
<secuencia de instrucciones>
END LOOP mibucle;

Ejemplo2:
<<mibucle>>
LOOP
...........
LOOP
. ..........
EXIT mibucle WHEN ............ –se sale de ambos
END LOOP
END LOOP mibucle;

Pag. 10 de 14
Unidad Temática 12 Introducción PL/SQL
9. SUBPROGRAMAS: PROCEDIMIENTOS Y FUNCIONES
Los procedimientos y las funciones son bloques en PL que tienen un nombre pudiendo recibir y
devolver valores. Se guardan en la base de datos y podemos ejecutarlos, invocándolos desde
otros programas.

PROCEDIMIENTOS
FORMATO:
CREATE [OR REPLACE] PROCEDURE <nbprocedimiento>
[(<lista de parámetros>)]
IS Variables que van dentro del EXECUTE
[<declaraciones>] Van con su tipo de datos sin longitud y
separadas por comas
BEGIN
<instrucciones>;
[EXCEPTION Variables que se utilizan
<excepciones>;] dentro del procedimiento
END [<nbprocedimiento>]; declaradas de forma normal

FUNCIONES
FORMATO:
CREATE [OR REPLACE] FUNCTION <nbfuncion>
[(<lista de parámetros>)]
RETURN <tipo de valor devuelto> tipo de datos que devuelve la funcion
IS
[<declaraciones>]
BEGIN
<instrucciones>;
RETURN <expresión>;

[EXCEPTION
<excepciones>;]
END [<nbfuncion>];
RETURN de la cabecera especifica el tipo de valor que retorna la función (tipo de datos que devuelve
la funcion).
RETURN en el cuerpo del programa devuelve el control al programa que llamo la función, asignando
el valor de la expresión (que sigue al return) a la variable que figura en la llamada de la función.

Pag. 11 de 14
Unidad Temática 12 Introducción PL/SQL

Los procedimientos serán almacenados en la b.d. donde quedarán disponibles para ser ejecutados
mediante la cláusula EXECUTE.
SQL>EXECUTE nbproc (valor/es); solo para los procedimientos
Para que funcione la cláusula SERVEROUTPUT debe estar ON.
SQL>SET SERVEROUTPUT ON;
Para ejecutar las funciones hay que hacer un bloque anonimo o invocarlos.
Para invocar a los procedimientos o las funciones desde otro bloque, procedimiento o función:
Nombredelprocedimientoalquellamamos (lista de parámetros)

Pag. 12 de 14
Unidad Temática 12 Introducción PL/SQL

EJERCICIOS PROPUESTOS

1-Construye un bloque PL/SQL que escriba el texto HOLA.

2- Construye un bloque PL/SQL para contar el numero de filas que hay en la tabla EMPLE
depositar el resultado en la variable v_num y visualizar el resultado.
NUM_FILAS= 14

3- Construye un bloque PL/SQL para visualizar el apellido y el oficio del empleado 7900.
JIMENO ES EMPLEADO

4- Construye un bloque PL/SQL que muestre el precio de costo del articulo Canutillos de categoría
Primera.
PRECIO=1,5
5- Realizar un programa que solicite la introducción de un número de empleado(variables de
acoplamiento &var que no se declara) y visualizara el nombre correspondiente al número
introducido. Para declarar el nombre del empleado utilizaremos la variable %TYPE.
Introduzca un valor para vn_emp: 7900
JIMENO

6- Escribir un bloque PL/SQL que muestre la fecha actual y la hora con minutos y segundos.
LUNES DIA 19 DE ABRIL DE 2021 A LAS :12:06:55

7- Modificar el salario de un empleado especificado en función del número de empleados que


tiene a su cargo:
- Si no tiene ningún empleado a su cargo la subida será de 50€.
- Si tiene un empleado la subida será de 80€.
- Si tiene dos la subida será de 100€.
- Si tiene mas de tres la subida será de 110€.
Además si el empleado es PRESIDENTE se incrementara en 30€.
Resolverlo con IF….ELSE y con CASE.
Introduzca un valor para vt_empno: 7839
140
es presidente y tiene tres empleados a su cargo 30+110=140
7839 rey nulos 4100 PRESIDENTE antes de ejecutar
7839 rey nulos 4240 PRESIDENTE despues de ejecutar

8- Construir un bloque PL/SQL para que escriba la cadena HOLA al revés. Utilizando FOR,
WHILE y LOOP.
ALOH

Pag. 13 de 14
Unidad Temática 12 Introducción PL/SQL

9- Escribir un bloque PL/SQL que introduzca dos números y los sume.


Introduzca un valor para v_num1: 20
Introduzca un valor para v_num2: 20
SUMA=40

EJERCICIOS PROCEDITMIENTOS (ETIQUETAR LOS DATOS DE SALIDA)


10- Escribe un procedimiento que reciba dos números y visualice la suma.

11- Escribir un procedimiento para consultar los datos de los departamentos mediante el número
del departamento (dept_no). Usar el bloque de EXCEPTION para que el programa funcione si no
encuentra el departamento.

12- Crear un procedimiento que reciba un número de empleado y una cadena correspondiente a
su nuevo oficio. El procedimiento deberá localizar el empleado, modificar el oficio y visualizar los
cambios realizados.

13- Escribir un procedimiento que modifique el precio de costo de un artículo pasándole el nb del
artículo, el nuevo precio y la categoría. El procedimiento comprobará que la variación del precio no
supere el 2%. Usar el bloque de EXCEPTION para que el programa funcione si no encuentra el
artículo.
EJEMPLO: Mantequilla 2 Segunda

14- Codifica un procedimiento que reciba una cadena y la visualice al revés.

EJERCICIOS FUNCIONES

15- Crear una función que sume dos números.

16-Crear una función que visualice una cadena al revés.

17- Escribe una función que reciba una fecha y devuelva el año, en número, correspondiente a
esa fecha.

18-Escribir una función que devuelva el valor con IVA de una cantidad que se pasara como primer
parámetro. La función podrá recoger un segundo parámetro, que será el tipo de IVA siendo el
valor por defecto 16.

19- Utilizar la función anterior para obtener el salario de los empleados con el iva de la función.

Pag. 14 de 14

También podría gustarte