You are on page 1of 6

Ejercicios ORACLE PL/SQL -2007

Ejercicios PL/SQL de ORACLE


Nota: Recuerde guardar los scripts, utilice para ello un editor de texto

1. Variables y Entrada y Salida de Datos


1. Construya un bloque PL/SQL que pida al usuario su nombre por teclado y que
posteriormente lo visualice de la siguiente forma “El nombre introducido es:
NOMBRE”.

Dada la siguiente tabla:

-- tabla para almacenar las personas de la BD


CREATE TABLE Personas
(dni VARCHAR2(9) PRIMARY KEY,
nombre VARCHAR2(15),
edad NUMBER);

Inserte los siguientes datos de prueba el la tabla PERSONAS:

Dni nombre apellidos edad


11 Juan Álvarez 18
22 José Jiménez 22
33 Maria Pérez 35
44 Elena Martínez 20

2. Construya un bloque PL/SQL, que pida por teclado el dni de la persona y que
posteriormente se muestre el nombre y la edad de la persona correspondiente.

3. Construya un bloque PL/SQL con la misma funcionalidad pero utilizando un


registro para almacenar el nombre y la edad de la persona elegida.

Página 1
Ejercicios ORACLE PL/SQL -2007

2. Variables, Bloques y Estructuras de Control


1. Cree un bloque en el que se pida el nombre y la edad del usuario, se guarde en
variables y posteriormente se muestre por pantalla su contenido.

2. Cree una tabla Tabla_Numeros con un atributo valor de tipo INTEGER. Cree
un bloque que inserte números del 1 al 50. Compruebe los datos insertados en
la tabla Tabla_Numeros.
CREATE TABLE Tabla_Numeros (
valor INTEGER);

3. Borre el contenido de la tabla Tabla_Numeros utilizando la sentencia


DELETE. Cree un bloque que inserte 8 elementos en la tabla con valores del 1
al 10, excepto el 4 y el 5. Compruebe, de nuevo, los datos que contiene la
tabla Tabla_Numeros.

4. Cree una tabla Tabla_Articulos con los siguientes atributos: código,


nombre, precio e IVA. Introduzca datos de prueba utilizando la sentencia
INSERT.

CREATE TABLE Tabla_Articulos (


codigo VARCHAR(5) PRIMARY KEY,
nombre VARCHAR(20),
precio NUMBER,
IVA NUMBER);

a) Construya un bloque que compruebe si el precio del artículo cuyo código es


‘A001’ es mayor que 10 euros y en caso afirmativo, imprima el nombre y el
precio del artículo por pantalla.
b) Construya un bloque que seleccione el artículo de mayor precio que esté
almacenado en la tabla, almacene su valor en una variable y luego
imprímalo.
c) Construya un bloque que actualice el precio del artículo cuyo código es
‘A005’ según las siguientes indicaciones:
− Si el artículo tiene un precio menor de 1 euro, su precio debe ser
aumentado en 25 céntimos.
− Si está comprendido entre 1 euro y 10 euros su precio aumentará un
10 % .Si excede los 10 euros su precio aumentará en un 20 %.
− Si el precio es NULL, el aumento es 0.
d) Construya un bloque similar al del apartado 3c donde el usuario introduzca
por pantalla el código del artículo que desee modificar su precio.

Página 2
Ejercicios ORACLE PL/SQL -2007

3.Cursores
1. Dadas las siguientes tablas:

-- tabla para almacenar todos los alumnos de la BD


CREATE TABLE Alumnos
(numMatricula NUMBER PRIMARY KEY,
nombre VARCHAR2(15),
apellidos VARCHAR2(30),
titulacion VARCHAR2(15),
precioMatricula NUMBER);

-- tabla para los alumnos de informática


CREATE TABLE AlumnosInf
(IDMatricula NUMBER PRIMARY KEY,
nombre_apellidos VARCHAR2(50),
precio NUMBER);

Inserte los siguientes datos de prueba el la tabla ALUMNOS:

numMatricula nombre apellidos titulacion precioMatricula


1 Juan Álvarez Administrativo 1000
2 José Jiménez Informatica 1200
3 Maria Pérez Administrativo 1000
4 Elena Martínez Informatica 1200

Construya un cursor que inserte sólo los alumnos de informática en la tabla


ALUMNOSINF, teniendo en cuenta la estructura de esta tabla, así por ejemplo,
debe tener en cuenta que el atributo nombre_apellidos resulta de la concatenación
de los atributos nombre y apellidos. Antes de la inserción de cada tupla en la tabla
ALUMNOSINF debe mostrar por pantalla el nombre y el apellido que va a insertar.

Página 3
Ejercicios ORACLE PL/SQL -2007

2. Dadas las siguientes tablas:

CREATE TABLE Tabla_Departamento (


Num_Depart Number(2) PRIMARY KEY,
Nombre_Depart VARCHAR2(15),
Ubicación VARCHAR2(15),
Presupuesto NUMBER(10,2),
Media_Salarios NUMBER(10,2),
Total_Salarios NUMBER(10,2));

CREATE TABLE Tabla_Empleado(


Num_Empleado Number(4) PRIMARY KEY,
Nombre_Empleado VARCHAR(25),
Categoría VARCHAR(10), -- Gerente, Comercial, …
Jefe Number(4),
Fecha_Contratacion DATE,
Salario Number(7,2),
Comision Number(7,2),
Num_Depart NUMBER(2),
FOREIGN KEY (Jefe) REFERENCES Tabla_Empleado,
FOREIGN KEY (Num_Depart) REFERENCES Tabla_Departamento);

2.1 Construya un bloque que calcule el presupuesto del departamento para el


año próximo. Se almacenará el mismo en la tabla Tabla_Departamento
en la columna Presupuesto. Hay que tener en cuenta las siguientes
subidas de sueldo:

Gerente + 20%
Comercial + 15%

Los demás empleados que no estén en ninguna de las categorías anteriores


se les subirá el sueldo un 10%.

2.2 Construya un bloque que actualice el campo Total_Salarios y el campo


Media_Salarios de la tabla Tabla_Departamento, siendo el total la suma
del salario de todos los empleados, igualmente con la media. Para ello:

− Cree un cursor C1, que devuelva todos los departamentos

− Cree un cursor C2, que devuelva el salario y el código de todos los


empleados de su departamento.

Página 4
Ejercicios ORACLE PL/SQL -2007

2.3 Cree una tabla NOTAS con los atributos que estime necesarios y construya
un bloque que inserte en la tabla NOTAS cuatro filas para cada alumno
matriculado, estas filas corresponderán a las tres convocatorias ordinarias y
la última para la convocatoria extraordinaria de junio. Antes de insertar se
comprobará que no están ya creadas. Las filas deberán inicializarse a nulo.

2.4 Cree un bloque que almancene en la tabla AUX_ARTICULOS (debe crearse


previamente) un número dado de los artículos con mayor precio de los
existentes en la tabla Tabla_Articulos. El número de artículos a almacenarse
debe ser dado por teclado.

2.5 Escriba un bloque que recupere todos los provedores por países. El
resultado debe almacenarse en una nueva tabla Tabla_Aux que permita
almacenar datos del tipo:
Proveedor: ONCE – País: España
Utilice un cursor para recuperar cada país de la tabla Tabla_Proveedores y
pasar dicho país a un cursor que obtenga el nombre de los proveedores en
él. Una vez que se tiene el nombre del proveedor y su país, debe añadirse a
la nueva tabla en el formato especificado.
NOTA: En primer lugar, debe crear las tablas Tabla_Proveedores y
Tabla_Aux e insertar en las mismas datos de prueba.

Página 5
Ejercicios ORACLE PL/SQL -2007

4. Procedimientos y Funciones Almacenados


1. Defina un procedimiento almacenado Mensaje que escriba un mensaje por
pantalla. Cree posteriormente un bloque PL/SQL desde el que invoque dicho
procedimiento.

2. Defina un procedimiento almacenado Mostrar que reciba como parámetro de


entrada un cadena de caracteres y que muestre dicha cadena. Cree
posteriormente un bloque PL/SQL desde el que invoque dicho procedimiento
pasándole una cadena que el usuario haya introducido por teclado.

3. Defina un procedimiento para que inserte en la tabla Departamento


(previamente creada) una fila con los tres valores que se le pasan por parámetro:
código, nombre y localidad. Si el departamento que se le pasa por parámetro ya
existe, se debe insertar en la tabla temporal (que también debe crear
previamente). Cree posteriormente un bloque PL/SQL desde el que invoque dicho
procedimiento pasándole los parámetros que desee insertar en la tabla.

4. Defina una función a la que le pasamos una convocatoria y nos devuelve el


nombre de la asignatura con más suspensos. Para ello debe crear previamente una
tabla Asignatura con los atributos: código y nombre y otra tabla Notas, que
contiene el código de la asignatura, la convocatoria, el alumno y su nota. Cree
posteriormente un bloque PL/SQL que visualice el nombre de la asignatura con
más suspensos.

5. Defina una función que devuelva el factorial de un número que se le pasa a la


función por parámetro. Cree posteriormente un bloque PL/SQL que visualice el
resultado del factorial del número introducido por teclado.

Página 6

You might also like