Professional Documents
Culture Documents
Ingeniera de Sistemas
PL/SQL
PROCEDIMIENTOS Y FUNCIONES
1. FUNCIONES
Ej. Una funcin que devuelve el nmero de equipos que tiene un armario
Para ejecutarlo
DECLARE
num_armario NUMBER:=3;
BEGIN
DBMS_OUTPUT.PUT_LINE(El armario || num_armario || tiene || equipos_en_armario(num_armario)||
equipos);
END;
FUNDAMENTOS PLSQL
--INSERCION DE DATOS
INSERT INTO ARMARIO VALUES(1,'XL');
INSERT INTO ARMARIO VALUES(2,'XL');
INSERT INTO ARMARIO VALUES(3,'M');
UNSCH/CMQE Pgina 1 de 8
Administracin de Base de Datos IS-443
Ingeniera de Sistemas
NOMBRE VARCHAR2(25),
PASSWORD NUMBER(5),
CONSTRAINT PK_USUARIO PRIMARY KEY (ID_USUARIO) );
--INSERCION DE DATOS
INSERT INTO USUARIO VALUES(1,'DAVID PEREZ',1234);
INSERT INTO USUARIO VALUES(2,'PEDRO CAMACHO',1234);
INSERT INTO USUARIO VALUES(3,'DAVID ALVAREZ',1234);
INSERT INTO USUARIO VALUES(4,'LAURA GARCIA',1234);
INSERT INTO USUARIO VALUES(5,'JOSE ANTONIO PEREZ',1234);
INSERT INTO USUARIO VALUES(6,'ANA SUAREZ',1234);
INSERT INTO USUARIO VALUES(7,'JUANJO GALLO',1234);
--INSERCION DE DATOS
INSERT INTO RESERVA VALUES(5,3,'05/01/2013','05/03/2013',NULL);
INSERT INTO RESERVA VALUES(3,2,'05/01/2013','05/04/2013',NULL);
INSERT INTO RESERVA VALUES(6,1,'05/03/2013',NULL,NULL);
Tengo una duda. En el ejercicio que realiza a partir del minuto 36' la excepcin no seria 'Este usuario no existe'?
Corrijame si me equivoco y enhorabuena por lo tutoriales.
Tienes toda la razn, el mensaje debera haber sido el que comentas. Gracias por la correccin!
Nuva entidad Fecha_inicio: Para que un usuario pueda reservar un mismo equipo en pocas diferentes.
Ahora tenemos relacin ternaria.
Nuevo atributo periodo
UNSCH/CMQE Pgina 2 de 8
Administracin de Base de Datos IS-443
Ingeniera de Sistemas
Enunciado: vamos a crear la funcion PWD para obtener una contrasea del usuario. Es una funcin para
resetear contrasea. La contrasea nueva ser el nombre del usuario escrito al revs
password VARCHAR2(20);
v_nombre usuario.nombre%TYPE;
BEGIN
SELECT SUBSTR(nombre,1,INSTR(nombre,' ')) INTO v_nombre FROM usuario
WHERE ID_usuario=usr;
FOR i IN REVERSE 1..LENGTH(v_nombre) LOOP
password := password || SUBSTR(v_nombre,i,1);
END LOOP;
RETURN password;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 'USUARIO NO ENCONTRADO';
END;
/
Para llamarlo
BEGIN
DBMS_OUTPUT.PUT_LINE (La contrasea es||pwd(1));
END;
NOTA: Todo lo que se puede hacer con un FOR, se puede hacer con un Bucle WHILE
BEGIN
SELECT SUBSTR(nombre,1,INSTR(nombre, )) INTO v_nombre FROM usuario
WHERE ID_usuario=usr;
i:= LENGTH(v_nombre);
WHILE i>=1 LOOP
Password := password || SUBSTR(v_nombre,i,1);
i:=i-1;
END LOOP;
RETURN password;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN USUARIO NO ENCONTRADO;
END;
Para llamarlo
BEGIN
DBMS_OUTPUT.PUT_LINE (La contrasea es||pwd(1));
END;
CURSORES
UNSCH/CMQE Pgina 4 de 8
Administracin de Base de Datos IS-443
Ingeniera de Sistemas
o Definicin
o Tipos
o Atributos
o Bucles
o Parmetros
EXCEPCIONES
CONTROL DE TRANSACCIONES()
CURSORES IMPLICITOS
- Son los visto hasta ahor con sentencias SELECTINTO
- Deben devolver una sola fina, sino devolver error
CURSORES EXPLICITOS
- Se utilizar si la sentencia SELECT devuelve varios registros
- Se define como cualquier otra variable y admiten parmetros (est en la zona declarativa)
- Operaciones Bsicas
o Declaracin: CURSOR <nombre_c> IS <Sent_Select>
o Apertura: OPEN <nombre_c>
o Rcogida: FETCH <nombre_c> INTO (<var>|<lista_v>)
o Cierre: CLOSE <nombre_c>
Crear un procedimiento que saque por consola un informe de todas las reservas penalizadas
CREATE OR REPLACE PROCEDURE Informe_Penalizados
AS
CURSOR c_pen IS
SELECT * FROM reserva
WHERE periodo='Devuelto Con penalizacin';
v_reg_reserva c_pen%ROWTYPE; -- se declara del mismo tipo que una fila del cursor
BEGIN
OPEN c_pen;
FETCH c_pen INTO v_reg_reserva;
WHILE c_pen%FOUND LOOP
DBMS_OUTPUT.PUT_LINE('el usuario con id'|| v_reg_reserva.id_usuario||'devolvio el
equipo'||v_reg_reserva.id||'con penalizacion');
FETCH c_pen INTO v_reg_reserva;
END LOOP;
UNSCH/CMQE Pgina 5 de 8
Administracin de Base de Datos IS-443
Ingeniera de Sistemas
CLOSE c_pen;
END;
/
Los atributos del cursor nos van a servir para controlar la ejecucin de un cursor explcito
Crea un procedimiento que saque por consola un informe de todas las reservas que tiene un usuario que
se pasa por parmetro
UNSCH/CMQE Pgina 7 de 8
Administracin de Base de Datos IS-443
Ingeniera de Sistemas
Basndote en el inventrio, crea un procedimiento para mostrar un informe completo de las reservas de
todos los usuarios de la base de datos
UNSCH/CMQE Pgina 8 de 8