Diferència entre revisions de la pàgina «ASIX/M10/UF1/A06/E2»
Salta a la navegació
Salta a la cerca
| Línia 109: | Línia 109: | ||
Query OK, 2 rows affected (0.55 sec) | Query OK, 2 rows affected (0.55 sec) | ||
| + | </source> | ||
| + | |||
| + | ===Contingut de notes.csv=== | ||
| + | <source> | ||
| + | "Andreu","5.25" | ||
| + | "Guillem","8.25" | ||
</source> | </source> | ||
Revisió del 16:59, 15 feb 2018
Contingut
ASIX M10 UF1
Pt62. Cursors amb exportació
Guillem Solà i Boeck (host: PC05)
Enunciat
Solució
Procediment per afegir alumne
CREATE DEFINER=`root`@`localhost` PROCEDURE `afegir_alumne`(IN nomAlumne VARCHAR(50), IN dni INT)
BEGIN
DECLARE lletra CHAR;
DECLARE resto INT;
DECLARE division INT;
IF length(dni)=8 THEN
SET division=dni/23;
SET resto=dni-(division*23);
SET lletra = SUBSTR("TRWAGMYFPDXBNJZSQVHLCKE", MOD(dni, 23) + 1, 1);
INSERT INTO alumnes VALUES (CONCAT(dni,lletra),nomAlumne);
END IF;
END
Procediment per afegir assignatura
CREATE DEFINER=`root`@`localhost` PROCEDURE `afegir_assignatura`(IN idAssignatura VARCHAR(5), IN nomAssignatura VARCHAR(50)) BEGIN INSERT INTO assignatures VALUES (idAssignatura, nomAssignatura); END
Procediment per afegir nota a un alumne per a una assignatura
CREATE DEFINER=`root`@`localhost` PROCEDURE `afegir_nota`(IN dni INT, IN idAssignatura VARCHAR(5), nota DECIMAL (4,2))
BEGIN
DECLARE lletra CHAR;
DECLARE resto INT;
DECLARE division INT;
IF length(dni)=8 THEN
SET division=dni/23;
SET resto=dni-(division*23);
SET lletra = SUBSTR("TRWAGMYFPDXBNJZSQVHLCKE", MOD(dni, 23) + 1, 1);
INSERT INTO notes VALUES(idAssignatura, CONCAT(dni,lletra), nota);
END IF;
END
Procediment per veure la nota mitjana per a cada alumne i exportar a un arxiu CSV
CREATE DEFINER=`root`@`localhost` PROCEDURE `veure_nota_mitjana`()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE alumne VARCHAR(9);
DECLARE total DECIMAL(10,2);
DECLARE recompteNotes INTEGER;
DECLARE nomAlumne VARCHAR(50);
DECLARE cAlumne CURSOR FOR
SELECT idAlumne FROM alumnes;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DROP TABLE IF EXISTS temporal;
CREATE TABLE temporal (alumne VARCHAR(50),nota DECIMAL(4,2));
OPEN cAlumne;
bucle:LOOP
FETCH cAlumne INTO alumne;
IF done THEN LEAVE bucle; END IF;
SELECT nom FROM alumnes WHERE idAlumne=alumne INTO nomAlumne;
SELECT count(*) FROM notes WHERE idAlumne=alumne INTO recompteNotes;
SELECT sum(nota) from notes WHERE idAlumne=alumne INTO total;
INSERT INTO temporal VALUES (nomAlumne, total/recompteNotes);
ITERATE bucle;
END LOOP bucle;
SELECT * FROM temporal; #Mostro per pantalla el resultat
SELECT * FROM temporal INTO OUTFILE '/dades/export/notes.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
END
Execució
MariaDB [world]> call veure_nota_mitjana; +---------+------+ | alumne | nota | +---------+------+ | Andreu | 5.25 | | Guillem | 8.25 | +---------+------+ 2 rows in set (0.55 sec) Query OK, 2 rows affected (0.55 sec)
Contingut de notes.csv
"Andreu","5.25" "Guillem","8.25"