Procedimientos y excepciones

17
2 2011 Erwin Fischer Bases de Datos Unidad El Lenguaje PL/SQL (Procedimientos y Excepciones)

Transcript of Procedimientos y excepciones

Page 1: Procedimientos y excepciones

22011 Erwin Fischer

Bases de Datos

Unidad

El Lenguaje PL/SQL(Procedimientos y Excepciones)

Page 2: 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.

Page 3: Procedimientos y excepciones

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];

Page 4: Procedimientos y excepciones

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.

Page 5: Procedimientos y excepciones

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.

Page 6: Procedimientos y excepciones

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;

Page 7: Procedimientos y excepciones

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

Page 8: Procedimientos y excepciones

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

Page 9: Procedimientos y excepciones

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)

);

Page 10: Procedimientos y excepciones

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

Page 11: Procedimientos y excepciones

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;

Page 12: Procedimientos y excepciones

132011 Erwin Fischer

Llamada a un Procedimiento

• Para invocar un procedimiento, basta nombrarlo indicando los parámetros requeridos:

begin

verCliente('CR78');

end

Page 13: Procedimientos y excepciones

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>;

Page 14: Procedimientos y excepciones

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.

Page 15: Procedimientos y excepciones

162011 Erwin Fischer

Consulta

• ¿Cómo verificamos que un cliente existe, en la tabla Cliente?

Page 16: Procedimientos y excepciones

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;

Page 17: Procedimientos y excepciones

182011 Erwin Fischer

Unidad - PL/SQL

• Fin