Sunteți pe pagina 1din 5

Procedimientos almacenados

mysql> create procedure miproc()


-> begin
-> select nombre from mascotas;
-> end//
Lo llamamos
mysql> call miproc;
gedit mysql/procs.sql &
//dentro del gedit
drop procedure if exists listado;
delimiter //
create procedure listado(numero int)
begin
select * from mascotas where id < numero;
end//
delimiter ;

mysql> source mysql/procs5.sql


mysql> call listado_aleatorio('d');
mysql> call listado_aleatorio(100);

// ahora en lnea de comando


Source mysql/procs3.sql
Call listado;
Ejercicio..nos va a coger filas aleatorias de la tabla mascotas
Devuelve un procedimiento el numero de filas que tiene mascotas
drop procedure if exists numero_filas;
delimiter //
create procedure numero_filas(out filas int)
begin
select count(*) into filas from mascotas;
end//
delimiter ;
mysql>
mysql>
mysql>
mysql>

source mysql/procs5.sql
set @f=0;
call numero_filas(@f);
select @f;

+------+
| @f |
+------+
| 11 |
+------+
11 filas tiene la tabla mascotas
Ahora meteremos un parmetro
drop procedure if exists numero_filas;
delimiter //
create procedure numero_filas(in tabla varchar(10), out filas int)
begin
if tabla='mascotas' then
select count(*) into filas from mascotas;
else
select count(*) into filas from mascotas;
end if;
end//
delimiter ;

drop procedure if exists numero_filas;


delimiter //
create procedure numero_filas(in tabla varchar(10), out filas varchar(40))
begin
if tabla='mascotas' then
select count(*) into filas from mascotas;
elseif tabla='autor' then
select count(*) into filas from biblioteca.autor;
else
select concat('La tabla',tabla,'no existe') into filas;
end if;
end//
delimiter ;
pasamos el numero de filas que yo quiero ver de entrada y de salida nos
tiene que devolver el numero de filas que no he visto
drop procedure if exists entrada_salida;
delimiter //
create procedure entrada_salida(inout filas tinyint)
begin
if filas < 10 then
select * from mascotas limit 5;

else
select * from mascotas limit 10;
end if;
select count(*) into @a from mascotas;
set filas=@a-filas;
end//
delimiter ;

le pasamos un numero y ser el numero que quiero que aparezcan y


aparecern aquellos cuyo numero id=numero primo.
Creamos una tabla con un campo llamado nombre y un id
Los 20 primeros son nombres y 20 ultimos apellidos, creamos un
procedimiento almacenado que me genere una tabla que no esta creada y
se creara en el procedimiento almacenado, una tabla con id auto_increment,
nombre y apellidosx2, va a ener un parmetro de entrada que ser el
numero de filas que queremos que tenga esa tabla y la vamos a generar
aleatoriamente a partir de la tabla que vamos a crear ahora.
1. Una tabal creada con 20 nombre y 30 apellidos
drop funcion if exists numReg;
delimiter //
create funcion numReg(tabla varchar(20))
returns smallint
begin
declare numReg smallint;
if tabla = 'nombres' then
select count (*) into numReg from nombres;
elseif tabla = 'apellido' then
select count(*) into numReg apellido;
end if;
return numReg;
end//
delimiter ;
drop procedure if exists cargaAleatoria;
delimiter //
create procedure cargaAleatoria()
begin
declare numNombres, numApellido smallint;
select nomReg('nombres') as 'numero de nombres'
end//
delimiter ;
---------------------------------------------------------------------------drop procedure if exists cargaAleatoria;
delimiter //
create procedure cargaAleatoria(numero smallint)

begin
declare numNombres, numApellido smallint;
select nomReg('nombres') into numNombres;
select numReg('apellido') into numApellido
if numero > 0 then
set @a=0;
else
select 'El parmetro de entrada tiene que ser positivo distinto de 0' as
'mensaje de error';
end if;
end//
delimiter ;

drop procedure if exists cargaAleatoria;


delimiter //
create procedure cargaAleatoria(numero int)
begin
declare vueltas tinyint;
declare numNombres, numApellido,indice int;
declare auxNombre, auxApellido, contApellidos varchar(30);
select nomReg('nombres') into numNombres;
select numReg('apellido') into numApellido
if numero > 0 then
drop table if exists datos;
create table datos (nombre varchar (20) not null,apellidos varchar(30) not
null);
while numero > 0 do
set numero = numero - 1;
set indice = truncate(rand()*numNombres,0) + 1;
select nombre into auxNombre from nombres where id = indice;
set vueltas = 0;
set contApellidos = '';
while vueltas < 2 do
set vueltas = vueltas + 1;
set indice = truncate(rand()*numApellido,0)+1;
select apellido into auxApellido from apellido where id = indice;
set contApellido = concat(contApellido,' ',auxApellido);
end while;
insert into datos values (auxNombre,trim(contApellido));
end while;
else
select 'El parmetro de entrada tiene que ser positivo distinto de 0' as
'mensaje de error';
end if;

end//
delimiter ;

S-ar putea să vă placă și