Documentos de Académico
Documentos de Profesional
Documentos de Cultura
LABORATORIO CURSORES
Ejemplo de cursores en SQL
use negocio
go
create table cliente(
id int identity primary key,
apellidos varchar(30),
edad int
)
go
insert into cliente(apellidos,edad) values('Lopez',21);
insert into cliente(apellidos,edad) values('Linares',22);
insert into cliente(apellidos,edad) values('Lujan',23);
insert into cliente(apellidos,edad) values('Pinillos',21);
insert into cliente(apellidos,edad) values('Oblitas',21);
insert into cliente(apellidos,edad) values('Juarez',23);
insert into cliente(apellidos,edad) values('Aguilar',24);
insert into cliente(apellidos,edad) values('Bocanegra',25);
insert into cliente(apellidos,edad) values('Hilario',25);
go
-- crear un cursor para mostrar la informacion de la tabla Cliente dentro de un
SP
create procedure micursor1 as
begin
declare cursorEjm1 cursor
for select * from cliente
open cursorEjm1
fetch next from cursorEjm1
close curEjm1
deallocate cursorEjm1
end
go
-- ejecutando SP micursor1
exec micursor1
go
-- listar todos los registros de la tabla cliente con un SP
create procedure micursor2 as
begin
declare cursorEjm2 cursor
for select * from cliente
open cursorEjm2
while (@@FETCH_STATUS=0)
begin
fetch next from cursorEjm2
end
close cursorEjm2
deallocate cursorEjm2
end
go
exec micursor2
go
-- listar todos los registros de la tabla cliente con un SP considerando 3 varia-
bles
alter procedure micursor3 as
begin
declare @codigo int,
@ape varchar(30),
@ed int
declare @contador int
set @contador=0
declare cursorEjm3 cursor
for select id,apellidos,edad from cliente
open cursorEjm3
fetch cursorEjm3 into @codigo,@ape,@ed
while (@@FETCH_STATUS=0)
begin
set @contador=@contador+1
print 'Cliente '+cast(@contador as varchar(2))+'= '+cast(@codigo as var-
char(10))+' '+ @ape+ ' ' + cast(@ed as varchar(2))
fetch cursorEjm3 into @codigo,@ape,@ed
end
close cursorEjm3
deallocate cursorEjm3
end
go
exec micursor3
ACTIVIDADES
Utilizar cursores con procedimientos almacenados
Ejercicio 1:
Partiendo del siguiente esquema relacional, crea las tablas e introduce algunos registros de prueba:
SOCIOS
DNI VARCHAR2, tamaño 10 No Nulo
Nombre VARCHAR2, tamaño 20 No Nulo
Direccion VARCHAR2, tamaño 20
Penalizaciones NUMBER de 2 Por defecto, 0
LIBROS
RefLibro VARCHAR2, tamaño 10 No Nulo
Nombre VARCHAR2, tamaño 30 No Nulo
Autor VARCHAR2, tamaño 20 No Nulo
Genero VARCHAR2, tamaño 10
AñoPublicación NUMBER
Editorial VARCHAR2, tamaño 10
PRESTAMOS
DNI VARCHAR2, tamaño 10 No Nulo
RefLibro VARCHAR2, tamaño 10 No Nulo
FechaPrestamo FECHA No Nulo
Duración NUMERICO de 2 Por defecto, 24
DNISocion FechaPrestamoalSocion
Ejercicio 2
Partiendo del siguiente script, crea la BD correspondiente a los alumnos matriculados en algunos
de los módulos de 1º y 2º curso del Carrera Profesional de Sistemas y sus correspondientes notas:
Diseña un procedimiento al que pasemos como parámetro de entrada el nombre de uno de los
módulos existentes en la BD y visualice el nombre de los alumnos que lo han cursado junto a su
nota.
Al final del listado debe aparecer el nº de suspensos, aprobados, notables y sobresalientes.
Asimismo, deben aparecer al final los nombres y notas de los alumnos que tengan la nota más
alta y la más baja.
Debes comprobar que las tablas tengan almacenada información y que exista el módulo cuyo
nombre pasamos como parámetro al procedimiento.
Ejercicio 3
UnidadesVendidas NUMBER(3),
PRIMARY KEY (CodVenta)
);
a) Realiza un procedimiento que actualice la columna Stock de la tabla Productos a partir de los
registros de la tabla Ventas.
El citado procedimiento debe informarnos por pantalla si alguna de las tablas está vacía o si el
stock de un producto pasa a ser negativo, en cuyo caso se parará la actualización.
b) Realiza un procedimiento que presente por pantalla un listado de las ventas con el siguiente
formato:
.
Total Ventas: Importedetodaslaslineas