Buscar este blog

miércoles, 20 de noviembre de 2013

Ejercicios PL/SQL 1

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

create or replace 
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;

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

create or replace 
procedure 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