PostgreSQL - Error extraño en función

 
Vista:
sin imagen de perfil
Val: 39
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Error extraño en función

Publicado por José Vicente (28 intervenciones) el 02/10/2019 22:16:32
Tengo la función:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE FUNCTION dias_sin()
 RETURNS int AS $$
 
DECLARE
 
 	diferencia INT;
	contador int := 1;
 
BEGIN
 
     while contador < (select salida_num from datos order by salida_num desc limit 1) loop
 
      SELECT max(DT2.FECHA::DATE - DT1.FECHA::DATE) INTO  diferencia
 
      FROM DATOS DT1, DATOS DT2  WHERE DT1.SALIDA_NUM = DT2.SALIDA_NUM + 1
 
    	end loop;
 
    RETURN COALESCE(diferencia,0);
 
end;
 
$$ LANGUAGE plpgsql;
Al ejecutarla me devuelve el error:
SQL Error [42601]: Unterminated dollar quote started at position 0 in SQL $$ LANGUAGE plpgsql;. Expected terminating $$.
¿Qué tengo mal? 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
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

Error extraño en función

Publicado por Francisco (110 intervenciones) el 05/12/2019 14:53:59
Hola

Te falta un punto y coma (;) al final de la sentencia SELECT interna del bucle


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE OR REPLACE FUNCTION dias_sin()
    RETURNS int AS
$$
DECLARE
 	diferencia INT;
	contador int := 1;
BEGIN
    WHILE contador < (SELECT salida_num FROM datos ORDER BY salida_num DESC LIMIT 1)
    LOOP
        SELECT MAX(DT2.FECHA::DATE - DT1.FECHA::DATE) INTO  diferencia
        FROM DATOS DT1, DATOS DT2
        WHERE DT1.SALIDA_NUM = DT2.SALIDA_NUM + 1;
    END LOOP;
    RETURN COALESCE(diferencia,0);
END;
$$
LANGUAGE plpgsql;

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 39
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Error extraño en función

Publicado por José Vicente (28 intervenciones) el 07/12/2019 10:57:56
Gracias, al final la hice así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE OR REPLACE FUNCTION dias_sin()
 RETURNS integer
 LANGUAGE plpgsql
AS $function$
DECLARE
 
 	days int;
 
BEGIN
     WITH dias AS (
	SELECT
	    t.id,
	    t.fecha - LAG(t.fecha,1) OVER(PARTITION BY t.id ORDER BY t.fecha) diff
 
	FROM (SELECT 1 id, fecha::date fecha
		FROM datos ORDER BY fecha::date) t)
 
SELECT MAX(d.diff) INTO days
 
FROM dias d;
RETURN days;
end;
$function$
;
De todas formas, gracias por tu ayuda y tu tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar