1. Bases de Datos
Unidad
El Lenguaje PL/SQL
(Procedimientos y Excepciones)
2011 Erwin Fischer 2
2. Subprogramas
Funciones y Procedimientos almacenados
Los subprogramas son Bloques PL/SQL nominados que
pueden tomar parámetros y ser invocados a voluntad por
el programador. PL/SQL tiene dos tipos de subprogramas,
denominados funciones y procedimientos (almacenados)
Tanto las funciones y los procedimientos admiten un
conjunto de parámetros que serán especificados por el
programa que realice la invocación, y llevan a cabo un
conjunto de acciones
Ambos pueden modificar los datos pasados como
parámetros, la diferencia entre ambos es que la función
siempre retorna un único valor, mientras que un
procedimiento no.
2011 Erwin Fischer 3
3. Create Procedure
CREATE [OR REPLACE] PROCEDURE procedure_name
[ (parameter [,parameter]) ]
IS | AS
[declaration_section]
BEGIN
executable_section
[EXCEPTION
exception_section]
END [function_name];
2011 Erwin Fischer 4
4. Subprogramas
Funciones y Procedimientos almacenados
Los parámetros tienen un nombre distintivo
y un tipo de datos, pero también pueden
especificarse como:
IN El parámetro se utiliza únicamente como
entrada
OUT El parámetro se utiliza únicamente como
valor de salida
IN OUT El parámetro se utiliza en ambos
sentidos.
2011 Erwin Fischer 5
5. Variables de sustitución
• En Los bloques PL/SQL se pueden
utilizar variables de sustitución, que
nos pedirán datos por pantalla antes de
ejecutar el bloque.
• Esta variable tienen que ir antepuesta
del & para que funcionen.
2011 Erwin Fischer 6
6. Bloque que nos pide el Id de un
empleado y nos muestra su nombre
DECLARE
Vnombre Cliente.nombre%TYPE;
BEGIN
select nombre into Vnombre
from Cliente
where numCliente = '&VnumCliente’;
DBMS_OUTPUT.PUT_LINE (Vnombre);
END;
2011 Erwin Fischer 7
7. Crear un procedimiento
• Diseñe un procedimiento, que
reciba como parámetro el numero
de cliente y muestre por consola,
el numero, el nombre y el apellido.
• En caso que no lo encuentre que
indique un mensaje
2011 Erwin Fischer 8
8. Preparando los datos
• Para cargar la tabla Cliente, puede
usar el script que se encuentra en
orahelp.blogspot.com bajo la
entrada Dream home completo
http://orahelp.blogspot.com/2007/07/dre
am-home-completo.html
2011 Erwin Fischer 9
9. Creando la tabla Cliente
create table CLIENTE (
NUMCLIENTE CHAR(4) not null,
NOMBRE CHAR(30),
APELLIDO CHAR(30),
DIRECCION CHAR(35),
TELEFONO CHAR(10),
TIPOPREF CHAR(25),
MAXRENT FLOAT,
constraint PK_CLIENTE primary key
(NUMCLIENTE)
);
2011 Erwin Fischer 10
10. Insertando Registros
begin
insert into cliente values('CR78','Juan','Kayser','55 High
ST,Londonn,SW14EH','0207774564','Departamento',450);
insert into cliente values('CR57','Alicia','Soto','63 Fern
Dr,. GlasgowG42 OBL','0141324183','Departamento',350);
insert into cliente values('CR72','Miguel','Torres','62
Well St, Glasgow,G42','0141943740','Casa',750);
insert into cliente values('CR63','Maria','Perez','13 Park
PI, Glasgow,G4 0QR','0141225741','Departamento',600);
end
2011 Erwin Fischer 11
11. Procedimiento verCliente
CREATE OR REPLACE PROCEDURE verCliente (pNumCliente VARCHAR2)
IS
vNumCliente Cliente.numCliente%TYPE;
vNombre Cliente.nombre%TYPE;
vApellido Cliente.apellido%type;
BEGIN
select numCliente, nombre, apellido
into vnumCliente, vNombre, vApellido
from cliente
where numCliente = pNumCliente;
DBMS_OUTPUT.PUT_LINE('NumCliente : ' ||vNumCliente||' Nombre
: '||trim(vNombre)||' Apellido : ' ||vApellido);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No hemos encontrado al Cliente ' ||
pNumCliente);
END;
2011 Erwin Fischer 12
12. Llamada a un Procedimiento
• Para invocar un
procedimiento, basta nombrarlo
indicando los parámetros
requeridos:
begin
verCliente('CR78');
end
2011 Erwin Fischer 13
13. Para descubrir qué procedimientos y
funciones ha creado
Utilice la siguiente consulta de SQL:
select object_type, object_name
from user_objects
where object_type = 'PROCEDURE' or
object_type = 'FUNCTION';
Para eliminar un procedimiento/función:
drop procedure <procedure_name>;
drop function <function_name>;
2011 Erwin Fischer 14
14. Diseño Procedimiento
• Diseñe un Procedimiento que
ingrese los datos de una visita a
una propiedad, esto es ingresar los
datos a la tabla visita:
• Cada uno de los atributos de la tabla, deben ser
pasados al procedimiento como parámetros, y se
debe validar que exista el cliente y la propiedad.
2011 Erwin Fischer 15
15. Consulta
• ¿Cómo verificamos que un cliente
existe, en la tabla Cliente?
2011 Erwin Fischer 16
16. Primero creamos función que
valida que el cliente exista
CREATE OR REPLACE Function validaCliente (pNumCliente
VARCHAR2)
return boolean
IS
vNumCliente Cliente.numCliente%TYPE;
BEGIN
select numCliente into vnumCliente
from cliente
where numCliente = pNumCliente;
return TRUE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return FALSE;
END;
2011 Erwin Fischer 17