SQL状态:22P02递归PL / pgSQL函数中整数错误的输入语法无效

时间:2016-02-25 10:52:31

标签: postgresql stored-procedures recursion

我是PostgreSQL的新手,我目前正在编写一个递归函数来查找有轨电车时间。

我已将自定义类型定义为:

CREATE TYPE single_journey AS
   (tram_id integer,
    departure_station text,
    departure_time time without time zone,
    destination_station text,
    arrival_time time without time zone);

和功能......

CREATE OR REPLACE FUNCTION find_tram_same_line(text, text, time) returns single_journey AS  $$
DECLARE
     departure_station ALIAS FOR $1;
     destination_station ALIAS FOR $2;
     query_time ALIAS FOR $3;

     journey single_journey;
BEGIN
     journey.departure_station := departure_station;
     journey.destination_station := destination_station;

     SELECT tram_id, time 
     INTO journey.tram_id, journey.departure_time
     FROM station_departure_times
     JOIN stations on station_departure_times.station_id = stations.station_id
     WHERE stations.name = departure_station
     AND time > query_time
     ORDER BY time ASC
     LIMIT 1;

     SELECT time 
     INTO journey.arrival_time
     FROM station_departure_times
     JOIN stations on station_departure_times.station_id = stations.station_id
     WHERE stations.name = destination_station
     AND tram_id = journey.tram_id;

     IF journey.arrival_time IS NULL THEN
           SELECT find_tram_same_line(
                departure_station, 
                destination_station, 
                (query_time + interval '1 minute'))
           INTO journey;
     END IF;

     RETURN journey;

END;
$$ LANGUAGE plpgsql;

查询:

SELECT find_tram_same_line('GrimesDyke', 'CitySquare', '09:00:00');

每当我运行查询时,都会收到错误:

********** Error **********

ERROR: invalid input syntax for integer: "(24,GrimesDyke,09:07:00,CitySquare,10:19:00)"
SQL state: 22P02
Context: PL/pgSQL function find_tram_same_line(text,text,time without time zone) line 29 at SQL statement

我花了一些时间试图弄清楚为什么这无济于事。 single_journey类型中唯一的整数是tram_id,但我不确定为什么这会导致问题。有谁知道为什么会这样?

编辑:应该注意的是(24,GrimesDyke,09:07:00,CitySquare,10:19:00)是我所期待的。

0 个答案:

没有答案