Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1.
Creaci
on de la base de datos y la tabla.
Primero se debe crear una base de datos, que se llamara Contabilidad para la creacion de la
tabla, de la siguiente manera:
CREATE DATABASE C o n t a b i l i d a d ;
Luego se fija la base de datos Contabilidad con la sentencia USE y se creara la tabla salarios
con la sentencia CREATE TABLE, que contendra la informacion de 10 trabajadores con ciertos
atributos especificados en la siguiente instruccion:
USE C o n t a b i l i d a d ;
CREATE TABLE s a l a r i o s (
trabajadorID
nombre
apellido
rut
sueldo
cargo
fecha de inicio del contrato
fecha de termino del contrato
PRIMARY KEY ( t r a b a j a d o r I D )
);
INT UNSIGNED
VARCHAR( 2 0 )
VARCHAR( 2 0 )
INT( 8 )
FLOAT( 8 )
VARCHAR( 5 0 )
DATE
DATE
7. fecha de termino del contrato: Es la fecha en que se inicio el contrato de la persona. Si los
nuevos registros no contienen un valor para este atributo, por defecto se rellena con 0000-00-00.
8. fecha de inicio del contrato: Es la fecha en que el contrato de la persona terminara. Si los
nuevos registros no contienen un valor para este atributo, por defecto se rellena con 0000-00-00.
Luego con las sentencias SHOW TABLES se muestran todas las tablas de Contabilidad y
DESCRIBE salarios describe las columnas de la tabla salarios.
SHOW TABLES ;
DESCRIBE s a l a r i o s ;
2.
2.1.
Inserci
on de informaci
on y consultas
Inserci
on
Primero se insertar
an valores para todas las filas con la sentencia INSERT INTO salarios VALUES:
INSERT INTO s a l a r i o s VALUES
( 1 0 0 1 , Pedro , P i c a p i e d r a , 1 5 8 9 2 7 4 8 , 5 0 0 0 0 0 , Ayudante de c o c i n a , 20120624 ,
20171231 ) ,
(NULL, Pablo , Marmol , 1 6 8 9 2 7 4 8 , 3 0 0 0 0 0 , C o n s e r j e , 20131005 , 20160928 ) ,
(NULL, F r a n c i s c a , L i r a , 1 7 3 4 5 9 8 2 , 4 5 0 0 0 0 , Ayudante de c o c i n a , 20160401 ,
20180610 ) ,
(NULL, D a n i e l , Lopez , 1 8 6 7 8 4 2 3 , 5 0 0 0 0 0 , C a j e r o , 20160215 , 20170123 ) ,
(NULL, E l v i s , Cochuelo , 1 4 7 5 6 3 4 5 , 5 0 0 0 0 0 0 , Gerente , 20110620 , 20191014 ) ,
(NULL, P e n e l o p e , Cruz , 1 8 3 4 6 9 3 1 , 7 0 0 0 0 0 , Gerente , 20131005 , 20160928 ) ,
(NULL, Z o i l a , Cerda , 1 7 3 4 5 8 7 6 , 1 0 0 0 0 0 0 , Chef , 20090722 , 20161111 ) ,
(NULL, Juan , Topo , 1 4 1 2 3 5 8 7 , 6 0 0 0 0 0 , C a j e r o , 20140222 , 20190813 ) ,
(NULL, Camila , G a r c i a , 1 6 8 5 3 7 9 5 , 4 0 0 0 0 0 , Ayudante de c o c i n a , 20171201 ,
20180929 ) ,
(NULL, W i l l , Smith , 1 4 1 2 3 5 8 7 , 2 0 0 0 0 0 0 , Chef , 20080301 , 20200701 ) ;
Todos los datos expuestos anteriormente entran en los dominios de cada atributo, sin generar
errores e informacion sin sentido.
2.2.
1.
Consultas.
Muestra a todos los trabajadores que tengan un sueldo mayor a $500.000 desde la tabla salarios,
ordenados por su sueldo de manera descendiente.
2.
Muestra el nombre, apellido y sueldo de aquellos trabajadores en que su nombre comienze con la
letra P desde la tabla salarios.
3.
Muestra los sueldos mas altos por cargo, donde la clausura HAVING MAX(sueldo) filtra los
sueldos mas altos que son menores a 1000000.
4.
Rescata aquellos RUT de los trabajadores para los cuales el contrato dura al menos dos a
nos y
tres das, donde la funci
on DATEDIFF calcula la diferencia entre dos fechas y entrega el valor
en das.
3.
Funci
on
La siguiente funci
on tiene como objetivo calcular el monto total a pagar en imposisciones (20 %
sobre el salario bruto) durante todo el periodo de contrato para un trabajador determinado. Note que
el resultado mostrar
a a todos los trabajadores.
DELIMITER |
CREATE FUNCTION t o t a l i m p o ( x FLOAT, y DATE, z DATE)
RETURNS FLOAT
DETERMINISTIC
BEGIN
DECLARE TI FLOAT;
SET TI = ( 0 . 2 ) x (PERIOD DIFF( EXTRACT( YEAR MONTH FROM y ) ,
EXTRACT( YEAR MONTH FROM z ) ) ) ;
RETURN TI ;
END;
| DELIMITER
En donde la funci
on llamada total impo es creada por la clausula CREATE FUNCTION con los
parametros x de tipo flotante y z e y de tipo fecha. La funcion es DETERMINISTIC para que produsca el mismo resultado con los mismos parametros ingresados y retorna en un valor de tipo flotante.
El cuerpo de la funci
on incia con la instruccion BEGIN, luego se declara la variable TI de tipo
flotante, que ser
a el total de imposiciones. Despues se define el calculo de TI mediante:
TI = ( 0 . 2 ) x (PERIOD DIFF( EXTRACT( YEAR MONTH FROM y ) ,EXTRACT( YEAR MONTH FROM z ) ) ) ;
Ahora se ejecutara
a la funci
on con el siguiente comando:
SELECT nombre , a p e l l i d o , t o t a l i m p o ( s u e l d o , f e c h a d e t e r m i n o d e l c o n t r a t o ,
fecha de inicio del contrato )
AS m o n t o t o t a l a p a g a r e n i m p o s i c i o n e s FROM s a l a r i o s ORDER BY nombre ;
En donde se seleccionan las columnas nombre, apellido desde la tabla salarios, se crea una nueva
llamada monto total a pagar en imposiciones que es la funcion total impo antes se
nalada, y se
ordena todo por el nombre.
4.
Gatillante o trigger.
El siguiente trigger tiene como objetivo actualizar el sueldo de un empleado siempre y cuando este
sea superior al antiguo, sino no actualizar
a y lanzara un mensaje de error. Tiene la siguiente forma:
DELIMITER //
CREATE TRIGGER n u e v o s u e l d o
BEFORE UPDATE ON s a l a r i o s
FOR EACH ROW
BEGIN
DECLARE a VARCHAR( 2 0 ) ;
DECLARE s u e l d o FLOAT( 8 ) ;
DECLARE b VARCHAR( 3 0 ) ;
IF (NEW. s u e l d o > OLD. s u e l d o ) THEN SET s u e l d o=NEW. s u e l d o ;
ELSEIF (NEW. s u e l d o = OLD. s u e l d o ) THEN SET b = El s u e l d o e s e l mismo ;
SIGNAL SQLSTATE 45000 SET MESSAGE TEXT = b ;
ELSE SET a = El s u e l d o ha ba jad o ;
SIGNAL SQLSTATE 45000 SET MESSAGE TEXT = a ;
END IF ;
END
// DELIMITER ;
Donde el trigger llamado nuevo sueldo es creado con la clausula CREATE TRIGGER, es
disparado antes de la actualizaci
on con BEFORE UPDATE ON sobre la tabla salarios y se ejecutar
a
por cada fila. El cuerpo del trigger se incia con la instruccion BEGIN, se declaran tres variables
llamadas a, sueldo, b,que son de tipo c
aracter de tama
no 20, flotante de tama
no 8 y caracter de
tama
no 30 respectivamente. Luego el trigger procedera segun las siguientes condiciones, que se inician
con la instrucci
on IF o ELSEIF:
1. Si el usuario actualiza el sueldo, siendo este mayor que el antiguo sueldo, el trigger reemplazar
a el
antiguo sueldo por el nuevo sueldo.
IF (NEW. s u e l d o > OLD. s u e l d o ) THEN SET s u e l d o=NEW. s u e l d o ;
2. Si el usuario actualiza el sueldo, siendo este igual al antiguo sueldo, el trigger no permitir
a la
actualizacion y el editor de mysql lanzara el siguiente mensaje de error El sueldo es el mismo.
ELSEIF (NEW. s u e l d o = OLD. s u e l d o ) THEN SET b = El s u e l d o e s e l mismo ;
SIGNAL SQLSTATE 45000 SET MESSAGE TEXT = b ;
En donde la instruccion SIGNAL SQLSTATE 45000 es una forma para que retorne un error
con el mensaje El sueldo es el mismo con la instruccion SET MESSAGE TEXT.
3. Si el usuario actualiza el sueldo, siendo este menor al antiguo sueldo, el trigger no permitir
a la
actualizacion y el editor de mysql lanzara el siguiente mensaje de error El sueldo ha bajado.
ELSE SET a = El s u e l d o ha ba jad o ;
SIGNAL SQLSTATE 45000 SET MESSAGE TEXT = a ;
Cambia a:
Se produce un error: