Melocuenta – FIB Edition
- Autor: Yeison Melo
- Proposito: compartir, aprender, enseñar, crecer!
- Estado: En desarrollo
- Licensia: MIT
- Contenido: Material sobre asignaturas de la Facultat de Informática de la UPC
- Aportaciones/Correciones: [email protected]
M2
Sin duda la asignatura que menos tiene que ver con la carrera de la fase inicial. Calculo puro y duro, especialmente
difícil para las personas que vienen de grado y no tienen la base matemática de bachillerato. Natalia S. la mejor profesora
que te puede toca, muy dispuesta a resolver dudas y consultas fuera de clase, no le gusta que hablen en sus clases nada.
No hay secreto más que practicar y practicar. Más adelante tenéis todos los apuntes del temario, excelentes!
XC
Mi recomendación es que si vas justo de tiempo te imprimas el libro de la asignatura y no vayas a clase,
esta todo explicado hasta el último detalle. Además tendrás que volvértelo a mirar todo al llegar a casa desde 0
así que es tiempo "perdido". Si te ha tocado D.C como profesor preparate para escuchar la palabra OKAY unas 10
veces por minuto, aveces hasta mas..
En cuanto a los laboratorios exámenes tipo test retorcidos, como todos los test de la asignatura. Normalmente
se empieza con notas altas y se va bajando lo importante es el examen final de laboratorio.
AC
Continuacon de IC, EC, CI, aquien haya "gustado" estas anteriores
tambien lo hará AC. La concentración de ejercicios para
hacer en casa es mayor al inicio del cuatri. Normalmente ponen el primer
examen muy asequible, el segundo lo ponen bastante chungo para
compensar las buenas notas del primero y que nadie pueda
tener la asignatura aprobada sin tener que ir al final, por tener buenas
todas de los dos primeros examenes y el laboratorio. Los examenes son
acumulativos.
El tercero no lo suelen regalar pero tampoco se ceban tanto como en el
segundo, almenos no consientemente...
EEE
Asignatura de relleno y asequible por cualquiera. Interesante sobretodo al principio pero el interés cae en picado a
medida que avanza el curso, puedes enviar las PECS de otros compañeros solo cambiando el nombre o hasta medio vacía
que no pasa nada, son demasiadas.. no se las miran. Mejor aprobarla lo antes posible con los exámenes continuos,
pero ojo la nota de la transversal es la media de los tres últimos exámenes!
PROP
Si te ha tocado de profesor del proyecto Rosa Gimenez desmatricula en la primera semana (te devuelven el dinero) o preparate
para conocer un nuevo nivel de esclavitud jamas visto y que no tiene nada que ver con el de otros grupos, si pasas por
su aro acabarás el cuatri con un nivel de Java y orientación a objetos bastante decente o avanzado. No le gusta
que le lleven la contraria ni que redundes en la misma pregunta.. no tendrá ningún problema en que notes que no le agradas.
IDI
Asignatura de esclavitud, carga de trabajo que no tiene nada que ver con
los creditos que vale. La única forma de sacarla
es currando bastante/mucho. Esta divida en dos partes OpenGl que es la
que mas trabajo practico tiene y la segunda de
diseño de interficies. Mi recomendación es que saqueis buena nota en el
juego (del cual no te van a dar ninguna clase
de programación ni introducción a android es en plan "buscate la vida") y
en el examen práctico de openGL de las practicas de lab,
para no necesitar notaza del final. Como profesor "destacar" a P.P se
pienza que el aula es su pequeño feudo en el que no puedes hacer nada,
absolutamente nada aparte de prestarle atención y alabar con risas su
"gran sentido del humor": desagradable y claro complejo de inferioridad.
IES
La calidad de las diapositivas aumenta según avanza el cuatri, las de
los primeros temas casi que te lo inventas. Si te ha tocado
Claudia Patricia de profesora enhorabuena tienes mucho hecho es
excelente, el resto de profes a gusto... Evaluación continua sin
examen final y 10% de participación si trabajas con regularidad esta
hecho.
GPS
"Sin comentarios" asignatura de relleno por excelencia, se podría
reducir en dos semanas o menos. Justamente esa sensación
de que es de relleno y facil es tu peor enemigo porque trabajas bajo
mínimos cuando podrias tener notaza dedicando la tercera parte
del tiempo que le dedicas a las otras.
DBD
Terrible, así como BD es unas asginatura interesante y necesaria DBD es
una continuación que nunca devió existir.
Las primeras partes son de consultas avanzas y nuevas funciones del SQL,
hasta aquí aceptable el resto del curso
se base en hacer de gesto de SQL tu, por lo que tienes que saber que
"hace" el gesto para resolver tu consulta.
Esto incluye calculo de bloques leidos, algoritmos empleados, indices en
tablas y así un monton de etc que no vas a utilizar nunca en
la vida real a menos que trabajes diseñando bases de datos a un nivel
muy detallado y quizas ni así. El lab vale un 70% y el final 20%...
Todos los juegos de pruebas pasados, en caso contrario el ejercicio tendrá una anotación.
SQL y Algebra relacional
Java Database Connectivity
----1ra Parte
1. Els efectes han sigut nulls donat que hem acabat amb un rollback desfen totes les modificaciones fetes.
2. S'ha afegit un nou professor a la taula: 333 ninna 3333
3. Sha produït la seguent excepció, es un error de clau primaria. No produeix cap efecte a la taula professors.
Excepcio:
El getSQLState es: 23505
El getMessage es: ERROR: duplicate key violates unique constraint "professors_pk
ey"
Podriam fer comprobar el tipus de error donat amb getSqlState() i si es el codi 23505 vol dir que hem comes un error d'aquest tipus:
catch (SQLException se)
{
if (se.getSQLState().equals("23505"))
System.out.println("El professor ja existeix");
}----2nda Parte
/* Imports de la classe */
import java.sql.*;
import java.io.*;
/* Capa de Control de Dades */
class CtrlDadesPublic extends CtrlDadesPrivat {
public ConjuntTuples consulta(Connection c,
Tuple params) throws BDException {
try {
ConjuntTuples ct = new ConjuntTuples();
ResultSet rs = null;
PreparedStatement ps = c.prepareStatement("select count(*) from assignacions a where a.dni=?;");
int i=1;
while (!(params.consulta(i).equals("-999"))){
ps.setString(1,
params.consulta(i));
rs= ps.executeQuery();
rs.next();
Tuple t=new Tuple(); t.afegir(params.consulta(i)); t.afegir(rs.getString(1));
ct.afegir(t);
++i;
}return ct;
}catch(SQLException se)
{
throw new BDException(11);
}
}
}
/* Imports de la classe */
import java.sql.*;
import java.io.*;
/* Capa de Control de Dades */
class CtrlDadesPublic extends CtrlDadesPrivat {
public ConjuntTuples consulta(Connection c,
Tuple params) throws BDException {
try {
ConjuntTuples ct = new ConjuntTuples();
Statement s=c.createStatement();
ResultSet rs = null;
rs=s.executeQuery("SELECT COUNT(*) FROM assignacions WHERE dni='"+params.consulta(1)+"';");
rs.next();
if (rs.getInt(1)>=5)
throw new BDException(14);
s.executeUpdate("UPDATE assignacions SET instantFi="+Integer.parseInt(params.consulta(4))+"-1 WHERE dni='"+params.consulta(1)+"' AND instantFi IS NULL;");
s.executeUpdate("INSERT INTO assignacions VALUES ('"+params.consulta(1)+"', '"+params.consulta(2)+"', '"+params.consulta(3)+"', "+Integer.parseInt(params.consulta(4))+", NULL);");
rs=s.executeQuery("SELECT COUNT(*) FROM assignacions WHERE instantFi IS NOT NULL AND dni='"+params.consulta(1)+"';");
rs.next();
Tuple t=new Tuple(); t.afegir(rs.getString(1));
s.close(); rs.close();
ct.afegir(t);
return ct;
}catch(SQLException se)
{
if (se.getSQLState().equals("23503"))
throw new BDException(12);
else if (se.getSQLState().equals("23505"))
throw new BDException(13);
else
throw new BDException(15);
}
}
}
//ATENCION: SEGURAMENTE ES POSIBLE UNA SOLUCIÓN MÁS EFICIENTE
/* Imports de la classe */
import java.sql.*;
import java.io.*;
/* Capa de Control de Dades */
class CtrlDadesPublic extends CtrlDadesPrivat {
public ConjuntTuples consulta(Connection c,
Tuple params) throws BDException {
try {
Statement s=c.createStatement();
ResultSet rs=null; ResultSet rb=null;
ConjuntTuples ct = new ConjuntTuples();
PreparedStatement p=c.prepareStatement("select modul, numero from assignacions where dni=? AND instantFi IS NULL;");
PreparedStatement h=c.prepareStatement("select modul, numero from assignacions where dni=? AND instantFi=(select max(instantFi) from assignacions where dni=? group by dni);");
rs=s.executeQuery("select dni from professors");
int i=0;
while(rs.next()){
//por cada profesor de la base de datos
Tuple t=new Tuple(); t.afegir(rs.getString(1));
p.setString(1,
rs.getString(1));
rb=p.executeQuery();
i=1;
if(!(rb.next())){
// si no tenia assignación pendiente intento encontrar una max entre las cerradas
h.setString(1,
rs.getString(1)); h.setString(2,
rs.getString(1));
rb=h.executeQuery();
if(!(rb.next())){
//si no encontro un max
t.afegir("XXX"); t.afegir("YYY");
i=2;
}
}if(i==1){
//añado el pendiente o max que encontre
t.afegir(rb.getString(1));
t.afegir(rb.getString(2));
}ct.afegir(t);
}if(i==0) throw new BDException(10);
return ct;
}catch(SQLException se)
{
throw new BDException(11);
}
}
}
Segunda entrega: Procedimientos / Disparadores
-----EX1
CREATE TYPE empl AS
( nom char(30),
sou integer);
CREATE OR REPLACE FUNCTION empl_departament(numdept integer) RETURNS setof empl AS $$
DECLARE
e empl;
missatge varchar(50);
quants integer;
BEGIN
quants=0;
FOR e IN SELECT nom_empl,
sou FROM empleats em WHERE em.num_dpt = numdept and em.ciutat_empl='SITGES'
LOOP
quants=quants+1;
RETURN NEXT e;
END LOOP;
IF quants=0 THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
RETURN;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
WHEN OTHERS THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=2;
RAISE EXCEPTION '%',
missatge;
END;
$$LANGUAGE plpgsql;
-----EX2
CREATE OR REPLACE FUNCTION eliminar_dept(numdept integer) RETURNS void AS $$
DECLARE
missatge varchar(50);
BEGIN
IF (EXISTS (SELECT num_empl FROM empleats WHERE num_dpt=numdept)) THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
DELETE FROM departaments WHERE num_dpt = numdept;
IF NOT FOUND THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=2;
RAISE EXCEPTION '%',
missatge;
END IF;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
WHEN OTHERS THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=3;
RAISE EXCEPTION '%',
missatge;
END;
$$LANGUAGE plpgsql;
-----EX3
CREATE TYPE lloguertreballador AS (
DNI_Treballador char(8),
Nom_Treballador char(30),
Sou_base real,
plus real,
Matricula char(10)
);
CREATE OR REPLACE FUNCTION llistat_treb(dni1 char(8),
dni2 char(8)) RETURNS SETOF lloguertreballador AS $$
DECLARE
m varchar(50);
d lloguertreballador;
BEGIN
FOR d IN SELECT t.dni,
t.nom,
t.sou_base,
t.plus FROM treballadors t WHERE dni1<=t.dni AND t.dni<=dni2 ORDER BY t.dni,
t.nom ASC
LOOP
IF (SELECT COUNT(*) FROM lloguers_actius l WHERE l.dni=d.DNI_Treballador)>=5 THEN
FOR d.Matricula IN SELECT l2.matricula FROM lloguers_actius l2 WHERE l2.dni=d.DNI_Treballador
LOOP
RETURN NEXT d;
END LOOP;
ELSE
RETURN NEXT d;
END IF;
END LOOP;
IF (NOT FOUND) THEN
SELECT texte INTO m FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
m;
END IF;
RETURN;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
WHEN OTHERS THEN
SELECT texte INTO m FROM missatgesExcepcions WHERE num=2;
RAISE EXCEPTION '%',
m;
END;
$$LANGUAGE plpgsql;
-----EX4
CREATE OR REPLACE FUNCTION assignar_individual(soci char(10),
club char(10)) RETURNS VOID AS $$
DECLARE
missatge varchar(50);
BEGIN
IF ((SELECT COUNT(*) FROM socisclubs sc1 WHERE sc1.nclub=club)>=10) THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
IF((SELECT sexe FROM socis s2 WHERE s2.nsoci=soci)='M' AND
(SELECT COUNT(*) FROM socis s3,
socisclubs sc3 WHERE sc3.nclub=club and s3.sexe='F' AND sc3.nsoci=s3.nsoci) <
(SELECT COUNT(*) FROM socis s3,
socisclubs sc3 WHERE sc3.nclub=club and s3.sexe='M' AND sc3.nsoci=s3.nsoci)+1) THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=2;
RAISE EXCEPTION '%',
missatge;
END IF;
IF (EXISTS(SELECT * FROM socisclubs sc2 WHERE sc2.nclub=club AND sc2.nsoci=soci)) THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=3;
RAISE EXCEPTION '%',
missatge;
END IF;
IF (NOT EXISTS(SELECT * FROM socis s1 WHERE s1.nsoci=soci)) OR
(NOT EXISTS(SELECT * FROM clubs c1 WHERE c1.nclub=club)) THEN
select texte INTO missatge FROM missatgesExcepcions WHERE num=4;
RAISE EXCEPTION '%',
missatge;
END IF;
INSERT INTO socisclubs VALUES (soci,
club);
IF (NOT EXISTS(SELECT * FROM clubs_amb_mes_de_5_socis where nclub=club)
AND (SELECT COUNT(*) FROM socisclubs WHERE nclub=club)>=5) THEN
INSERT INTO clubs_amb_mes_de_5_socis VALUES (club);
END IF;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
WHEN OTHERS THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=5;
RAISE EXCEPTION '%',
missatge;
END;
$$LANGUAGE plpgsql;
-----EX1
CREATE OR REPLACE FUNCTION registre2() RETURNS trigger AS $$
BEGIN
NEW.usuari:=(SELECT usuari FROM usuari_actual);
RETURN NEW;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER registret BEFORE INSERT ON treballadors FOR EACH ROW EXECUTE PROCEDURE registre2();
-----EX2
CREATE OR REPLACE FUNCTION auditoriarepast() RETURNS trigger AS $$
DECLARE
us char(10);
BEGIN
IF TG_OP='INSERT' THEN
us:=(SELECT usuari FROM usuari_actual);
INSERT INTO auditoria VALUES(NEW.num_treballador,
us);
ELSEIF TG_OP='DELETE' THEN
DELETE FROM auditoria WHERE num_treballador=OLD.num_treballador;
END IF;
RETURN NEW;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER auditoriarepast AFTER INSERT OR DELETE ON treballadors FOR EACH ROW EXECUTE PROCEDURE auditoriarepast();
-----EX3
CREATE or replace FUNCTION auditoria() RETURNS trigger AS $$
BEGIN
NEW.usuari:=(select usuari from usuari_actual);
RETURN NEW;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER ex172 BEFORE INSERT ON treballadors FOR EACH ROW EXECUTE PROCEDURE auditoria();
-----EX4
CREATE OR REPLACE FUNCTION empleat123f1() RETURNS TRIGGER AS $$
DECLARE
missatge varchar(100);
BEGIN
IF OLD.nempl=123 THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
RETURN OLD;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER empleat123t1 BEFORE DELETE ON empleats FOR EACH ROW EXECUTE PROCEDURE empleat123f1();
CREATE OR REPLACE FUNCTION empleat123f2() RETURNS TRIGGER AS $$
DECLARE
missatge varchar(100);
BEGIN
IF OLD.nempl=123 AND OLD.nempl<>NEW.nempl THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
RETURN NEW;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER empleat123t2 BEFORE UPDATE ON empleats FOR EACH ROW EXECUTE PROCEDURE empleat123f2();
-----EX5
CREATE OR REPLACE FUNCTION bdif() RETURNS TRIGGER AS $$
DECLARE
missatge varchar(50);
d char(10);
BEGIN
d:=(SELECT t.dia FROM dia t);
IF (d='dijous') THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
RETURN NULL;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER bdi BEFORE DELETE ON empleats FOR EACH STATEMENT EXECUTE PROCEDURE bdif();
-----EX6
CREATE OR REPLACE FUNCTION prog6_before() RETURNS TRIGGER AS $$
DECLARE
x INTEGER;
BEGIN
DELETE FROM TEMP;
SELECT SUM(salari) INTO x FROM empleats;
INSERT INTO TEMP VALUES (x,
0);
RETURN NULL;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER ex6_before BEFORE DELETE ON empleats FOR EACH STATEMENT EXECUTE PROCEDURE prog6_before();
CREATE OR REPLACE FUNCTION prog6_after() RETURNS TRIGGER AS $$
DECLARE
xi INTEGER;
yi INTEGER;
missatge varchar(50);
BEGIN
SELECT x INTO xi FROM TEMP;
UPDATE TEMP SET y = y + OLD.salari;
SELECT y INTO yi FROM TEMP;
IF (yi >= xi - yi) THEN -- borrados >= total-los_borrados=los_que quedan
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
RETURN NULL;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER ex6_after AFTER DELETE ON empleats FOR EACH ROW EXECUTE PROCEDURE prog6_after();
-----EX7
CREATE OR REPLACE FUNCTION ciutatempleatsf() RETURNS TRIGGER AS $$
DECLARE
missatge varchar(100);
BEGIN
IF(NOT EXISTS(SELECT * FROM empleats2 WHERE ciutat2=NEW.ciutat1)) THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
RETURN NEW;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER ciutatempleatst BEFORE INSERT ON empleats1 FOR EACH ROW EXECUTE PROCEDURE ciutatempleatsf();
CREATE OR REPLACE FUNCTION ciutatempleatsf2() RETURNS TRIGGER AS $$
DECLARE
missatge varchar(100);
BEGIN
IF OLD.ciutat1<>NEW.ciutat1 AND (NOT EXISTS(SELECT * FROM empleats2 WHERE ciutat2=NEW.ciutat1)) THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
RETURN NEW;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER ciutatempleatst2 BEFORE UPDATE ON empleats1 FOR EACH ROW EXECUTE PROCEDURE ciutatempleatsf2();
-----EX8
CREATE OR REPLACE FUNCTION ex7_empl2() RETURNS TRIGGER AS $$
DECLARE
missatge varchar(100);
BEGIN
IF (TG_OP = 'DELETE') THEN
IF NOT EXISTS (SELECT * FROM empleats2 WHERE ciutat2 = OLD.ciutat2) THEN
DELETE FROM empleats1 WHERE ciutat1 = OLD.ciutat2;
END IF;
ELSEIF (OLD.ciutat2<>NEW.ciutat2) THEN
IF NOT EXISTS (SELECT * FROM empleats2 WHERE ciutat2 = OLD.ciutat2) THEN
DELETE FROM empleats1 WHERE ciutat1 = OLD.ciutat2;
END IF;
END IF;
RETURN NULL;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER empl2 AFTER DELETE OR UPDATE ON empleats2 FOR EACH ROW EXECUTE PROCEDURE ex7_empl2();
CREATE or replace FUNCTION comprobar_ciutat2() RETURNS trigger AS $$
BEGIN
DELETE FROM empleats1 WHERE ciutat1=OLD.ciutat2 AND (SELECT count(*) FROM empleats2 WHERE ciutat2=OLD.ciutat2)=0;
RETURN NULL;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER compciutat2 AFTER DELETE OR UPDATE ON empleats2 FOR EACH ROW EXECUTE PROCEDURE comprobar_ciutat2();
CREATE OR REPLACE FUNCTION assignar_individual(nom char(10),
club char(10)) RETURNS void AS $$
DECLARE
missatge varchar(50);
BEGIN
IF (SELECT COUNT(*) FROM socisclubs WHERE nclub=club) >=10 THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
IF (SELECT COUNT(*) FROM socisclubs s,
socis s2 WHERE s.nsoci=s2.nsoci and s.nclub=club AND s2.sexe='F') <
((SELECT COUNT(*) FROM socisclubs s,
socis s2 WHERE s.nsoci=s2.nsoci and s.nclub=club AND s2.sexe='M')+1)
AND (SELECT sexe from socis WHERE nsoci=nom)='M' THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=2;
RAISE EXCEPTION '%',
missatge;
END IF;
IF (SELECT COUNT(*) FROM socisclubs WHERE nsoci=nom AND nclub=club)<>0 THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=3;
RAISE EXCEPTION '%',
missatge;
END IF;
IF (SELECT count(*) FROM socis WHERE nsoci=nom)=0 OR (SELECT COUNT(*) FROM clubs WHERE nclub=club)=0 THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=4;
RAISE EXCEPTION '%',
missatge;
END IF;
INSERT INTO socisclubs values(nom,
club);
IF (SELECT COUNT(*) FROM clubs_amb_mes_de_5_socis where nclub=club)=0 AND (SELECT COUNT(*) FROM socisclubs WHERE nclub=club)>=5 THEN
INSERT INTO clubs_amb_mes_de_5_socis VALUES (club);
END IF;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
WHEN OTHERS THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=5;
RAISE EXCEPTION '%',
missatge;
END;
$$LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION eliminar_dept(numdept integer) RETURNS void AS $$
DECLARE
missatge varchar(50);
BEGIN
IF ((select count(*) from empleats where num_dpt=numdept)>=1) THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
DELETE FROM departaments WHERE num_dpt = numdept;
IF NOT FOUND THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=2;
RAISE EXCEPTION '%',
missatge;
END IF;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
WHEN OTHERS THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=3;
RAISE EXCEPTION '%',
missatge;
END;
$$LANGUAGE plpgsql;
CREATE or replace FUNCTION comprobar_ciutat() RETURNS trigger AS $$
DECLARE
missatge varchar(100);
BEGIN
IF((select count(*) from empleats2 where ciutat2=NEW.ciutat1)=0) THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
RETURN NEW;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
WHEN OTHERS THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=3;
RAISE EXCEPTION '%',
missatge;
END;
$$LANGUAGE plpgsql;
CREATE or replace FUNCTION comprobar_ciutat2() RETURNS trigger AS $$
DECLARE
missatge varchar(100);
BEGIN
IF(NEW.ciutat1<>OLD.ciutat1 AND (select count(*) from empleats2 where ciutat2=NEW.ciutat1)=0) THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=1;
RAISE EXCEPTION '%',
missatge;
END IF;
RETURN NEW;
EXCEPTION
WHEN raise_exception THEN
RAISE EXCEPTION '%',
SQLERRM;
WHEN OTHERS THEN
SELECT texte INTO missatge FROM missatgesExcepcions WHERE num=3;
RAISE EXCEPTION '%',
missatge;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER compciutat2 BEFORE UPDATE ON empleats1 FOR EACH ROW EXECUTE PROCEDURE comprobar_ciutat2();
CREATE TRIGGER compciutat BEFORE INSERT ON empleats1 FOR EACH ROW EXECUTE PROCEDURE comprobar_ciutat();
¿Como funcionan? ¿Cual es la nota minima? Cada año se repiten las mismas preguntas respecto al tema
y desde tiempo immerables cada vez que se habla del tema se cuenta de una forma diferente. Hasta el día que
se haga un documento legítimo y definitivo que acabe con todas las tinieblas que oscurecen dicho tema. Des de
mi experiencia puedo decir que me convalidarón M2 con un 4 cuando hube cursado todas las asignaturas de la
fase selectiva. Si tienes la asignatura con nota => 4 cuando se va ha hacer la siguiente matricula sale
para marcar la asignatura como compensada y así por ejemplo poder matricular una que es prerequisito.
Igualmente recuerda que no sabras si te compensan hasta haber cursado todo el bloque curricular, por lo tanto
la asignatura permanecerá con un 4 en el expediente hasta dicho momento y en caso de compensación positiva pasará a un ser 5.
[Fuente FB grupo-Uni]
Alejandro Montero basicamente te compensan si:
-Tienes 1 asignatura con <4 (da igual el departamento)
-2 asignaturas con <4,5 y con mucha potra en la comisión
Una vez por bloque curricular:
-1 en primero
-1 en segundo
-1 en tercero + PAR + IDI
-1 resto de carrera
Y no bajan nota de ninguna asignatura. Si apruebas por
compensación no tienes ningun flag extraño, se considera aprobado
natural, inclusive para becas
Desde el curso 2012-2013 en la FIB se han empezado a hacer
recuperaciones a continuación tenéis documentos con la información que
se dio a los participantes sobre el método de evaluación y el guión de
clase que se seguiría, de algunas asignaturas.
Fundamentos matemáticos
Matemáticas 2