PostgreSQL - crear función en psql

 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado su posición en 4 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

crear función en psql

Publicado por jose (2 intervenciones) el 21/04/2019 14:14:42
Hola, estoy estudiando un FP y en la asignatura de Base de datos estamos haciendo psql, y tengo unas dudas, no tengo muy claro si en un update se puede recorrer fila por fila poniendo en nombre de la tupla y actualizando una columna, esto es lo que he echo pero no tengo muy claro como va, si me podríais echar una mano:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create or replace function ex12()
	returns void as $$
	DECLARE
		nombre CURSOR FOR SELECT sigles FROM partit_politic;
		tupla varchar(7);
	BEGIN
		FOR tupla IN nombre LOOP
			update partit_politic
			set vots_totals =
				(select sum(vots)
				from vots_adjudicats
				where partit = tupla)
			where sigles = tupla;
		END LOOP;
	END;
	$$ LANGUAGE plpgsql;


Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 3
Ha aumentado su posición en 4 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

crear función en psql

Publicado por jose (2 intervenciones) el 21/04/2019 15:46:12
Se me ha olvidado, lo que hace o quiero que haga la función es sumar los votos de un partido de la columna(vots) que está en la tabla vots_adjudicats y la suma de los votos ponerla en la columna vots_totals de la tabla partit_politic, los uno por partit y sigles que son los mismos nombres.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

crear función en psql

Publicado por Ratonaso (8 intervenciones) el 03/05/2019 21:29:32
Mira, no es necesario hacerlo registro por registro ya que realiza n consultas sumando un solo partido a la vez, es posible realizarlo en un solo paso el código es algo como esto. (no te lo puedo garantizar por que no tengo tus tablas para probar la información)

1
2
3
4
5
6
7
BEGIN
    update partit_politic set vots_totals=A.total_votos
        from (select partit, sum(vots) as total_votos
            from vots_adjudicats
                group by partit) A where A.partit=sigles
 
END;

en caso de que no te acepte la subtabla la puedes subtituir con una tabla temporal que creas con anterioridad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar