Professional Documents
Culture Documents
Un comercio almacena los datos de los artículos que tiene para la venta en una tabla
denominada "articulos". En otra tabla denominada "ventas" almacena el código de cada
artículo, la cantidad que se vende y la fecha.
5- Cree un trigger que coloque el siguiente valor de una secuencia para el código de
"articulos" cada vez que se ingrese un nuevo artículo
Podemos ingresar un nuevo registro en "articulos" sin incluir el código porque lo
ingresará el disparador luego de calcularlo. Si al ingresar un registro en "articulos"
incluimos un valor para código, será ignorado y reemplazado por el valor calculado por
el disparador.
9- Recupere todos los artículos para ver cómo se almacenó los códigos
Ignora los códigos especificados ingresando el siguiente de la secuencia.
- controlar que el código del artículo exista en "articulos" (lo hacemos con la restricción
"foreign key" establecida en "ventas");
- controlar que exista stock, lo cual no puede controlarse con una restricción "foreign
key" porque el campo "stock" no es clave primaria en la tabla "articulos"; cree un
trigger. Si existe stock, debe disminuirse en "articulos".
Cree un trigger a nivel de fila sobre la tabla "ventas" para el evento se inserción. Cada
vez que se realiza un "insert" sobre "ventas", el disparador se ejecuta. El disparador
controla que la cantidad que se intenta vender sea menor o igual al stock del articulo y
actualiza el campo "stock" de "articulos", restando al valor anterior la cantidad vendida.
Si la cantidad supera el stock, debe producirse un error, revertirse la acción y mostrar un
mensaje
13- Ingrese un registro en "ventas" cuyo código exista en "articulos" y del cual haya
suficiente stock
Note que el trigger se disparó, aparece el texto "tr_insertar_ventas activado".
14- Verifique que el trigger se disparó consultando la tabla "articulos" (debe haberse
disminuido el stock) y se agregó un registro en "ventas"
15- Ingrese un registro en "ventas" cuyo código exista en "articulos" y del cual NO haya
suficiente stock
Aparece el mensaje mensaje de error 20001 y el texto que muestra que se disparó el
trigger.
17- El comercio quiere que se realicen las ventas de lunes a viernes de 8 a 18 hs.
Reemplace el trigger creado anteriormente "tr_insertar_ventas" para que No permita que
se realicen ventas fuera de los días y horarios especificados y muestre un mensaje de
error
20- Ingrese un registro en "ventas", un día permitido fuera del horario permitido (si es
necesario, modifique la fecha y hora del sistema)
Se muestra un mensaje de error.
22- El comercio quiere que los registros de la tabla "articulos" puedan ser ingresados,
modificados y/o eliminados únicamente los sábados de 8 a 12 hs. Cree un trigger
"tr_articulos" que No permita que se realicen inserciones, actualizaciones ni
eliminaciones en "articulos" fuera del horario especificado los días sábados, mostrando
un mensaje de error. Recuerde que al ingresar un registro en "ventas", se actualiza el
"stock" en "articulos"; el trigger debe permitir las actualizaciones del campo "stock" en
"articulos" de lunes a viernes de 8 a 18 hs. (horario de ventas)
28- Consulte el diccionario "user_triggers" para ver cuántos trigger están asociados a
"articulos" y a "ventas" (3 triggers)
set serveroutputon;
execute dbms_output.enable (20000);
Segundo problema:
Una empresa almacena los datos de sus empleados en una tabla denominada
"empleados" y en otra tabla llamada "secciones", el código de la sección y el sueldo
máximo de cada una de ellas.
5- En cada disparador que cree próximamente muestre un mensaje por pantalla que
indique su nombre.
6- Cree un disparador para que se ejecute cada vez que una instrucción "insert" ingrese
datos en "empleados"; el mismo debe verificar que el sueldo del empleado no sea mayor
al sueldo máximo establecido para la sección, si lo es, debe mostrar un mensaje
indicando tal situación y deshacer la transacción
12- Cree un disparador para que se ejecute cada vez que una instrucción "update"
aumente el sueldo de "empleados"; el mismo debe verificar que el sueldo del empleado
no supere al sueldo máximo establecido para la sección, si lo es, debe mostrar un
mensaje indicando tal situación y deshacer la transacción
13- Modifique el sueldo de un empleado, debe ser menor o igual al establecido para la
sección
El trigger se disparó.
19- Modifique el código de sección del empleado cuyo documento es "22222222" a "3"
Note que el cambio se realizó, y ahora existe un empleado de la sección "Secretaria"
con sueldo "1350" cuando el máximo para esa sección es de "1000". Debe crear el
trigger "tr_empleados_update_seccion", que se dispare cada vez que se modifique la
seccion de un empleado y verifique que el sueldo no supere el máximo de la nueva
sección, si lo supera, la transacción debe deshacerse
20- Modifique el código de sección del empleado cuyo documento es "22222222" a "1"
El trigger se disparó, como el sueldo no supera el máximo permitido para la nueva
sección, el cambio se realizó.
22- Modifique el código de sección del empleado cuyo documento es "23333333" a "3"
El trigger se disparó y mostró el mensaje de error, la transacción se deshizo.
30- Verifique que se modificó el sueldo máximo en "secciones" pero ningún registro en
"empleados"
37- Consulte el diccionario "user_triggers" para ver cuántos trigger están asociados a
"empleados" y a "secciones"
40- Cree un trigger sobre "secciones", para el evento de actualización que realice todas
las acciones que ejecutaban los 2 triggers que "secciones" tenía asociados
anteriormente; es decir:
41- Probarlo. Disminuir el sueldo máximo de una sección que no supere el sueldo de
ningun empleado:
Se activó el trigger de actualizacion de secciones pero ningún registro de "empleados"
fue modificado.
42- Disminuir el sueldo máximo de una sección de modo que supere el sueldo de algún
empleado
Se activó el trigger de actualizacion de secciones y 2 registros de "empleados" fueron
modificados.
44- Consulte el diccionario "user_triggers" para ver cuántos triggers están asociados a
las tablas "secciones" y "empleados"
47- Elimine la tabla "secciones" y consulte "user_triggers" para verificar que al borrar la
tabla "secciones" se eliminaron todos los desencadenadores asociados a ella