Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Práctica de Proc, Func, Aserto, Trigger

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 2

PRÁCTICA DE PROCEDIMIENTOS, FUNCIONES, ASERCIONES Y TRIGGERS

1. Considérese el siguiente esquema relacional. Cada empleado puede trabajar en más de un


departamento; el campo tiempo parcial de la relación Trabaja muestra el porcentaje de tiempo
que cada empleado trabaja en los diferentes departamentos.
Emp(ide: integer, nombree: varchar2(40), edad: integer, sueldo: number(9,2))
Trabaja(ide: integer, idd: integer, tiempo parcial: integer)
Dep(idd: integer, presupuesto: number(10,2), idencargado: integer)
Escríba las aserciones para lo siguiente:
a) El porcentaje total de nombramientos (tiempo parcial) para cada empleado debe ser
inferior al 100%.
b) Los encargados siempre deben tener un sueldo más elevado que cualquier empleado que
dirijan.
Escriba los triggers (disparadores) para lo siguiente:
a) Siempre que se conceda un aumento a un empleado se debe incrementar el sueldo de los
encargados con el mismo importe.
b) Siempre que se conceda un aumento a un empleado se debe incrementar el sueldo de los
encargados para que sea, como mínimo, igual. Además, siempre que se conceda un
aumento a un empleado se debe incrementar el presupuesto de los departamentos con el
aumento del empleado. El presupuesto debe ser mayor que la suma de los sueldos de
todos los empleados del departamento. Abortar la operación update usando
raise_application_error con el mensaje respectivo, cuando no se cumplan las
restricciones.
2. Un esquema Compañía tiene las siguientes tablas (entre otras):
Empleado(NSS char(9), NombreP varchar(15), Apellido varchar(15), FechaN date,
Direccion varchar(30), Sexo char, Salario number(9,2), NSSSUPER char(9), ND int)
Deoartamento(Numerod int, NombreD varchar2(15), NSSGte char(9), FechaInicGte date)
Crear un procedimiento con dos parámetros: Nombre de departamento y Aumento
(porcentaje). El procedimiento va aumentar el salario de los empleados con ese Nombre de
departamento. Si no existe el Nombre del departamento en la tabla Departamento use el
bloque EXCEPTION y raise_application_error dentro de él con el mensaje respectivo.
3. Existe una tabla Informe_Notas(IdSeccion int, CodEstudiante int, Nota int) en el esquema
Educación. Crear un procedimiento con tres parámetros: Identificador de la Sección, código
del Estudiante y Nota. El procedimiento va insertar una fila a la tabla Informe_Notas.
Recuerde que IdSeccion debe existir en la tabla Sección, CodEstudiante debe existir en la
tabla Estudiante y no debe existir una fila en la tabla Informe_Notas con los mismos valores
de los argumentos de IdSeccion y CodEstudiante para poder insertar una nueva fila. Use
EXCEPTION y raise_application_error con el mensaje respectivo.
4. Usando el esquema del ejercicio 1 crear un procedimiento con un parámetro de entrada el idd
de un departamento y tres parámetros de salida: el número de empleados que trabajan en ese
departamento, la suma de los salarios de dichos empleados y el promedio de los salarios de
dichos empleados. Si no existe el idd en la tabla use el bloque EXCEPTION y
raise_application_error dentro de él con el mensaje respectivo.
5. Una tabla empleados tiene los atributos: cod_emp integer PRIMARY KEY, nom_emp
varchar2(30), salario number(9,2), fecha_nac date, comision number(3,2) (comision>=0 and
comision<=1), cod_jefe integer.
Crear un procedimiento para insertar un nuevo empleado en la tabla empleados. Los
argumentos del procedimiento son los valores de los atributos del empleado.
Utilizar la secuencia sec_emp para obtener el valor de la clave primaria del nuevo empleado.
6. Usando la tabla empleados de (5) crear una función para calcular el sueldo total de un
empleado pasando como parámetro su cod_emp. Tenga en cuenta que hay que añadir la
comisión (que es un porcentaje adicional del salario) al salario. La función retorna el sueldo
total calculado. Si no existe el cod_emp en la tabla empleados use el bloque EXCEPTION
para retornar 0.
7. Una tabla PedidosCabecera tiene los atributos: IdPedido Int PRIMARY KEY, Idcliente
varchar2(5), idEmpleado Int, fechaPedido date, fechaEntrega Date, fechaEnvio Date,
enviopedido char, destinatario varchar2(60), nombreDestinatario varchar2(30),
dirdestinatario varchar2(30).
Crear una función donde ingrese el id del empleado y retorne la cantidad de pedidos
registrados en el presente año por dicho empleado. Si no existe el idEmpleado en la tabla
PedidosCabecera use el bloque EXCEPTION para retornar 0.
8. Crear un trigger que se active antes de la operación update del salario de la tabla empleados
de (5). El disparador (trigger) aborta la operación update si se aumenta el salario en más de
un 20 %.
9. La tabla medicamentos( cod_med int, nom_med varchar2(20), precio number(4,2),
fecha_alta date DEFAULT SYSDATE). Crear un trigger Genera_Cod_Medicamento que se
dispara cada vez que se produce el evento Insert en la tabla medicamentos: solicita el
siguiente valor de la secuencia sec_med y lo asigna al nuevo código de medicamento.
10. Desarrollar un procedimiento para insertar un medicamento en la tabla del ejercicio 9
teniendo en cuenta la funcionalidad del trigger del ejercicio 9, esto es, la existencia de la
secuencia. La fecha_alta será la fecha actual.
11. Un esquema eBanca tiene las siguientes relaciones (tablas):
movimiento(id int, fecha datetime, cantidad int, dni_cliente char(8), cod_cuenta int)
sospechosos(id int, cod_cuenta int, fecha datetime, cantidad int, usuario varchar(20))
clientes(cod_cliente int, dni char(8), nombre varchar(20), apellido1 varchar(20), apellido2
varchar(20), direccion varchar(30))
cuenta(cod_cuenta int, tipo char, cod_cliente int, fecha date, saldo int)
Crear un trigger Agrega_Sospechosos que se dispara cada vez que se produce el evento Insert
en la tabla movimiento. Si los ingresos son mayores a 3000 o los retiros realizados mayores
a 1000 (cantidad menor que -1000) en la fila insertada entonces insertar una fila en la tabla
sospechosos. Usar la secuencia sec_sospechosos. En el atributo usuario se almacena el
nombre del cliente. En los atributos fecha, cantidad y cod_cuenta se almacenas los valores
respectivos de la tabla movimiento.
12. La tabla emp_control tiene los atributos: cod_emp int, fecha date, usuario varchar(20),
tipo_op varchar(15).Crear un trigger a nivel fila para los eventos insert. Update y delete
sobre la tabla empleados de (5). El trigger va almacenar en la tabla emp_control el cod_emp,
la fecha (sysdate), el nombre del usuario que emitió el evento (user) y el tipo de operación
que modificó la tabla empleados. Si se realizó insert almacena `inserción’ en tipo_op. Si se
realizó update, se almacena `actualización’ en tipo_op. Sí se realizó delete se almacena
`eliminación’ en tipo_op ( Use funciones inserting, updating y deleting).

También podría gustarte