Ejercicios PL/SQL 1
Ejercicios PL/SQL
Crea estos ejercicios sobre la bd de logística.
Ejercicio1
Desarrolla un prodecimiento almacenado que genere un número aleatorio entre 1 y 10 y a continuación en una estructura case/when saque lo siguiente: si el número es 4 muestra por pantall la palabra "Defensa", si el número es 7 muestra por pantalla la palabra "Raúl", si el número es el 9 muestra la palabra "Ariete", si es un 10 muestra la palabre "Puñal" y para cualquier otro caso muestra la palabra "Dorsal desconocido"
-------------------------------------------------------------------------------------------------------
create or replace PROCEDURE Numero_aleatrorio
IS
-- Creamos dos variables: Una para recoger el numero y otra para la respuesta.
aleatorio integer;
respuesta varchar2(100);
BEGIN
-- Le damos un valor aleatorio entre 1 y 10.
aleatorio:=DBMS_RANDOM.VALUE(1,10);
CASE aleatorio
WHEN 0 THEN respuesta:='defensa';
WHEN 7 THEN respuesta:='Raul';
WHEN 9 THEN respuesta:='Ariete';
WHEN 10 THEN respuesta:='Puñal';
ELSE respuesta:='Cualquier otro dorsal';
END CASE;
-- Mostramos el resultado segun el numero aleatorio
DBMS_OUTPUT.PUT_LINE(aleatorio || respuesta);
END Numero_aleatrorio;
IS
-- Creamos dos variables: Una para recoger el numero y otra para la respuesta.
aleatorio integer;
respuesta varchar2(100);
BEGIN
-- Le damos un valor aleatorio entre 1 y 10.
aleatorio:=DBMS_RANDOM.VALUE(1,10);
CASE aleatorio
WHEN 0 THEN respuesta:='defensa';
WHEN 7 THEN respuesta:='Raul';
WHEN 9 THEN respuesta:='Ariete';
WHEN 10 THEN respuesta:='Puñal';
ELSE respuesta:='Cualquier otro dorsal';
END CASE;
-- Mostramos el resultado segun el numero aleatorio
DBMS_OUTPUT.PUT_LINE(aleatorio || respuesta);
END Numero_aleatrorio;
-------------------------------------------------------------------------------------------------------
Ejercicio2
Desarrolla un procedimiento almacenado que muestre por pantalla todos los caracteres ASCII del 1 al 128 utilizando para ello la función CHR.
-------------------------------------------------------------------------------------------------------
create procedure Lista_Ascii
is
-- Creamos el valor que recorrerá todos los valores ASCII.
valor integer;
begin
-- Recorremos todos los valores ASCII con un for y los mostramos con la función CHR.
FOR valor IN 1..128 [REVERSE] LOOP
dbms_output.put_line('Numero: ' || valor || 'corresponde a ASCII: ' || chr(valor));
END LOOP;
-------------------------------------------------------------------------------------------------------
Ejercicio3
Desarrolla una función llamada nameString que dada una cadena varchar2(100) devuelva la misma cadena sin espacios en blanco por delante ni por detrás y devuelva la primera letra de cada palabra en mayúsculas.
-------------------------------------------------------------------------------------------------------
create or replace FUNCTION nameString (cadena1 varchar2)
RETURN varchar2
IS
cadena2 varchar2(100);
BEGIN
-- Eliminamos espacios a la izquierda
cadena2:=LTRIM(cadena1,' ');
-- Eliminamos espacios a la derecha
cadena2:=RTRIM(cadena2,' ');
-- Cambiamos a mayusculas el primer caracter de cada palabra.
cadena2:=initcap(cadena2);
-- Mostramos por pantalla
dbms_output.put_line( cadena2);
return cadena2;
END nameString ;
-------------------------------------------------------------------------------------------------------
Ejercicio4
Desarrolla una función llamada completeNameString que dadas tres cadenas varchar2(100) te hace lo mismo que la función anterior en cada una y además te concatena las tres cadenas separadas por un espacio en blanco.
-------------------------------------------------------------------------------------------------------
FUNCTION completeNameString (cadena1 varchar2,cadena2 varchar2,cadena3 varchar2)
RETURN varchar2
IS
resultado varchar2(400);
BEGIN
resultado:=namestring(cadena1);
resultado:=resultado || ' ' || namestring(cadena2);
resultado:=resultado || ' ' || namestring(cadena3);
dbms_output.put_line(resultado);
return resultado;
END completeNameString ;
-------------------------------------------------------------------------------------------------------
Ejercicio5
Desarrolla una función llamada generateName que dado un número de sílabas genere un varchar(30) que esté compuesto por cadenas formadas por Consonante-VocalConsonante-Vocal...
Mejora: añade un parámetro para que la palabra empiece por vocal en lugar de consonante.
Mejora2: haz la función sin parámetros de tal forma que devuelva nombres con una o más sílabas y comiencen por vocal o no.
-------------------------------------------------------------------------------------------------------
-- Mejora
create or replace
FUNCTION generateName (numero integer, vocal integer default 0)
RETURN varchar2
IS
nombre varchar2(30):='';
num integer;
Type VOCAL_ARRAY IS varray(5) OF VARCHAR2(20);
Type CONSO_ARRAY IS varray(21) OF VARCHAR2(20);
vocales vocal_array:= VOCAL_ARRAY('a','e','i','o','u');
consonantes conso_array:=CONSO_ARRAY('b','c','d','f','g','h','j','k','l','m','ñ','p','q','r','s','t','w','v','x','y','z');
BEGIN
if vocal=1 then
for num in 1..numero loop
nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
end loop;
else
for num in 1..numero loop
nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
end loop;
end if
dbms_output.put_line(nombre);
return nombre;
END generateName;
-- Mejora2
create or replace
FUNCTION generateName2
RETURN varchar2
IS
nombre varchar2(30):='';
num integer;
numero integer:= round(dbms_random.value(1,15));
vocal integer:=round(dbms_random.value(0,1));
Type VOCAL_ARRAY IS varray(5) OF VARCHAR2(20);
Type CONSO_ARRAY IS varray(21) OF VARCHAR2(20);
vocales vocal_array:= VOCAL_ARRAY('a','e','i','o','u');
consonantes conso_array:=CONSO_ARRAY('b','c','d','f','g','h','j','k','l','m','ñ','p','q','r','s','t','w','v','x','y','z');
BEGIN
dbms_output.put_line(vocal || 'hola');
if vocal=1 then
for num in 1..numero loop
nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
end loop;
else
for num in 1..numero loop
nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
end loop;
end if;
dbms_output.put_line(nombre);
return nombre;
END generateName2;
create or replace
FUNCTION generateName (numero integer, vocal integer default 0)
RETURN varchar2
IS
nombre varchar2(30):='';
num integer;
Type VOCAL_ARRAY IS varray(5) OF VARCHAR2(20);
Type CONSO_ARRAY IS varray(21) OF VARCHAR2(20);
vocales vocal_array:= VOCAL_ARRAY('a','e','i','o','u');
consonantes conso_array:=CONSO_ARRAY('b','c','d','f','g','h','j','k','l','m','ñ','p','q','r','s','t','w','v','x','y','z');
BEGIN
if vocal=1 then
for num in 1..numero loop
nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
end loop;
else
for num in 1..numero loop
nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
end loop;
end if
dbms_output.put_line(nombre);
return nombre;
END generateName;
-- Mejora2
create or replace
FUNCTION generateName2
RETURN varchar2
IS
nombre varchar2(30):='';
num integer;
numero integer:= round(dbms_random.value(1,15));
vocal integer:=round(dbms_random.value(0,1));
Type VOCAL_ARRAY IS varray(5) OF VARCHAR2(20);
Type CONSO_ARRAY IS varray(21) OF VARCHAR2(20);
vocales vocal_array:= VOCAL_ARRAY('a','e','i','o','u');
consonantes conso_array:=CONSO_ARRAY('b','c','d','f','g','h','j','k','l','m','ñ','p','q','r','s','t','w','v','x','y','z');
BEGIN
dbms_output.put_line(vocal || 'hola');
if vocal=1 then
for num in 1..numero loop
nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
end loop;
else
for num in 1..numero loop
nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
end loop;
end if;
dbms_output.put_line(nombre);
return nombre;
END generateName2;
-------------------------------------------------------------------------------------------------------
Ejercicio6
Desarrolla una función que genere fechas aleatorias, anteriores o posteriores a la fecha actual.
-------------------------------------------------------------------------------------------------------
-- Fechas aleatorias..... hasta que año.....create or replace
FUNCTION fechas_aleatorias (dato integer)
RETURN varchar2
IS
fecha date;
dias integer;
BEGIN
dias:=DBMS_RANDOM.VALUE(-1000,1000);
fecha:=add_months(current_date,dias);
dbms_output.put_line(fecha);
return fecha;
END fechas_aleatorias;
-------------------------------------------------------------------------------------------------------
Ejercicio7
Desarrolla un procedimiento almacenado para rellenar las tablas de la BD de logística. Debes utilizar las funciones creadas en los pasos anteriores.
-------------------------------------------------------------------------------------------------------
Procedimiento que genera 10 registros en la tabla clientesprocedure agregar_usuarios
is
codigo integer:= 16;
nombre varchar2(30);
direccion varchar2(100);
telefono integer;
fecha date;
n integer;
d integer;
N_clientes integer;
begin
for n_clientes in 1..10 loop
d:=1;
telefono:=1;
codigo:= codigo+1;
nombre:=generatename(5);
direccion:=generatename(13);
for n in 1..8 loop
d:=d*10;
telefono:=telefono + d*(round(DBMS_RANDOM.VALUE(1,9)));
end loop;
fecha:=fechas_aleatorias;
INSERT INTO clientes VALUES (codigo,nombre,direccion,telefono,fecha);
--select * cliente where códigocliente=codigo;
end loop;
end agregar_usuarios;
-------------------------------------------------------------------------------------------------------
No hay comentarios:
Publicar un comentario