Procedimientos y excepciones
-
Upload
fabian-alexander-moya -
Category
Education
-
view
1.876 -
download
3
Transcript of Procedimientos y excepciones
22011 Erwin Fischer
Bases de Datos
Unidad
El Lenguaje PL/SQL(Procedimientos y Excepciones)
32011 Erwin Fischer
SubprogramasFunciones 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.
42011 Erwin Fischer
Create Procedure
CREATE [OR REPLACE] PROCEDURE procedure_name
[ (parameter [,parameter]) ]
IS | AS
[declaration_section]
BEGIN
executable_section
[EXCEPTION
exception_section]
END [function_name];
52011 Erwin Fischer
SubprogramasFunciones 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.
62011 Erwin Fischer
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.
72011 Erwin Fischer
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;
82011 Erwin Fischer
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
92011 Erwin Fischer
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/dream-home-completo.html
102011 Erwin Fischer
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)
);
112011 Erwin Fischer
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
122011 Erwin Fischer
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;
132011 Erwin Fischer
Llamada a un Procedimiento
• Para invocar un procedimiento, basta nombrarlo indicando los parámetros requeridos:
begin
verCliente('CR78');
end
142011 Erwin Fischer
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>;
152011 Erwin Fischer
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.
162011 Erwin Fischer
Consulta
• ¿Cómo verificamos que un cliente existe, en la tabla Cliente?
172011 Erwin Fischer
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;
182011 Erwin Fischer
Unidad - PL/SQL
• Fin