Tenho uma função que retorna o resultado de um select. O problema ocorre quando 
aplico funções nos campos do select, aí retorna o seguinte erro:

 

ERRO:  sintaxe de entrada é inválida para integer: "18:53:00"

CONTEXTO:  PL/pgSQL function "fs_disponibilidade_barras_diario" line 21 at for 
over select rows

 

********** Erro **********

 

Para esse select, o retorno ocorre da maneira certa:

 

SELECT * FROM "DISPONIBILIDADE_EQ" AS X WHERE X."data"=data ORDER BY X."id_eq", 
X."data"

 

Para esse outro select dá erro:

 

SELECT X."id_eq", X."data", 

                        fs_convertsegundostohora(X."nseg_disp"), 

                        fs_convertsegundostohora(X."nseg_indisp"), 

                        CAST(X."disp" AS DECIMAL(5,2)), 

                        CAST(X."indisp" AS DECIMAL(5,2)),  

                        X."tolerancia", 

                        (SELECT tipo_dia FROM "DTF_TIPOS_DIAS" AS Y WHERE 
Y."id_tipo_dia"=X."id_tipo_dia")  

                        FROM "DISPONIBILIDADE_EQ" AS X WHERE 

                        X."data"=data ORDER BY X."id_eq", X."data"

 

 

 

Eis a função:

 

CREATE OR REPLACE FUNCTION fs_disponibilidade_barras_diario(barra character 
varying, data date, tolerancia integer)

  RETURNS SETOF "DISPONIBILIDADE_EQ" AS

$BODY$

 

DECLARE

 

r_sql_barras RECORD;

 

r "DISPONIBILIDADE_EQ"%ROWTYPE;

 

numero integer;

 

sql_barras text = '';

id_barra character varying(20);

 

BEGIN

 

IF ( barra = '-1' ) THEN  --Exibir para todas as barras em geral

            SELECT fs_calcular_detalhes_dtf_tipo2('-1', data, tolerancia) INTO 
numero;          

ELSE

            SELECT fs_calcular_detalhes_dtf_tipo2(barra, data, tolerancia) INTO 
numero;                  

END IF; 

 

FOR r IN  ( << SELECT >> ) LOOP        

            RETURN NEXT r;

END LOOP;

 

 

RETURN; 

 

END; $BODY$

  LANGUAGE 'plpgsql' VOLATILE;

ALTER FUNCTION fs_disponibilidade_barras_diario(character varying, date, 
integer) OWNER TO sage;

 

 

 

Tabela a ser retornada :

 

CREATE TABLE "DISPONIBILIDADE_EQ"

(

  id_eq character varying(20) NOT NULL,

  data date NOT NULL,

  nseg_disp integer,

  nseg_indisp integer,

  disp real,

  indisp real,

  tipo_relatorio character varying(20),

  tolerancia integer,

  id_tipo_dia integer,

  CONSTRAINT "pk-disponibilidade-eq" PRIMARY KEY (id_eq, data)

)

WITH (OIDS=FALSE);

 

 

PS: Não posso utilizar views, haja vista que a função é dinâmica - retorna 
dados a partir de uma data específica.

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a