PostgreSQL - Problema con ciclos anidados

 
Vista:

Problema con ciclos anidados

Publicado por Dunia (1 intervención) el 06/11/2020 22:54:42
Buenas tardes.
Estoy tratando de llenar una tabla con las horas y minutos del día.
Lo estoy intentando con ciclos anidados, el código se supone que debe correr todos los minutos para cada hora, pero en realidad sólo corre el minuto cero para cada hora. No he usado ciclos anidados antes en postgres, así que no estoy muy clara de en qué estoy fallando, es evidente que no está recorriendo los ciclos en el orden que quiero pero no sé cómo solucionarlo.Por favor alguien podría ayudarme?? Gracias de antemano. Este es el código que he creado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
do $$
 
 
declare
 
hora integer:=0;
 
do $$
declare
hora integer:=0;
minutt integer;
 
 
begin
 
while(hora<24) loop
 
minutt := 0;
begin
 
if(minutt<60)  then
 
 
     insert into mod_dimensiones.dim_minuto
     Select sum(hora+minutt) as idminuto,
     cast(minutt as character varying) as minuto,
     hora as numhora,
     cast (hora as character varying) as hora,
     case
         when (hora<12) then 'AM' else 'PM' end as partedeldia,
     case
         when(hora<12) then 1 else 2 end as numpartedeldia;
 
minutt := minutt + 1;
end if;
 
end;
 
hora := hora + 1;
 
end loop;
 
end;
 
 $$
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
Imágen de perfil de Francisco
Val: 256
Oro
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Problema con ciclos anidados

Publicado por Francisco (110 intervenciones) el 07/11/2020 20:08:32
Hola

La respuestas es que te falta otro ciclo para los segundos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
DO
$$
DECLARE
 
horas integer;
minutos integer;
segundos integer;
timestr varchar;
BEGIN
 
	DROP TABLE IF EXISTS reloj;
	CREATE TABLE reloj(
		id bigserial,
		minutero time,
		minuteros varchar,
		PRIMARY KEY (id)
	);
 
	horas := 0;
	WHILE horas < 24 LOOP
		minutos := 0;
		WHILE minutos < 60 LOOP
			segundos := 0;
			WHILE segundos < 60 LOOP
				timestr := LPAD(horas::varchar, 2, '0') || LPAD(minutos::varchar, 2, '0') || LPAD(segundos::varchar, 2, '0');
				INSERT
					INTO reloj(minutero, minuteros)
					VALUES(timestr::time, TO_CHAR(timestr::time, 'hh12:mi:ss AM'));
				segundos := segundos + 1;
			END LOOP;
			minutos :=  minutos+1;
		END LOOP;
		horas := horas + 1;
	END LOOP;
END;
$$
LANGUAGE plpgsql;
 
SELECT * FROM reloj;

Saludos
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