函数 returns 空 table

Function returns empty table

我需要创建不同车站的火车返回时间表的功能。 我有这样的东西:

create or replace function f124(st varchar) returns table(odjazdy varchar, kierunek varchar, przewoznik varchar, peron varchar, tor int)
as
$$ declare s varchar; sta varchar:=st;
begin
drop table if exists f124p;
create table f124p(odjazdy varchar, kierunek varchar, przewoznik varchar, peron varchar, tor int);
select string_agg('insert into f124p select k."'||nr||'", ''stacja'', ''przewoznik'', t.peron, t.tor from gdymal_ic_kursy k inner join gdymal_ic_trasa t on k.stacja=t.stacja where t.stacja=''sta'';','') into s from generate_series(5110, 5118,2) as nr;
execute s;
return query select * from f124p;
end $$ language plpgsql;

问题是这个函数 returns 是空的 table。它不应该是那样的,因为这个 table 中必须包含一些信息。我觉得k附近有问题。"'||nr||'" 插入应将名为“5110”、“5112”的列中的数据作为 varchars。 (在 gdymal_ic_kursy 中有列“5110”、“5112”、...、“5118”)。也许这是一个问题。也许你有什么提示我应该如何修复这个功能?

我不知道它是什么意思,但它在这里有效:


\i tmp.sql

CREATE TABLE gdymal_ic_kursy
        ( stacja text
        , "5110" text
        , "5111" text
        , "5112" text
        , "5113" text
        , "5114" text
        , "5115" text
        , "5116" text
        , "5117" text
        , "5118" text
        );
INSERT INTO gdymal_ic_kursy VALUES ('sta', '1', '2', '3', '4', '5', '6', '7', '8');

CREATE TABLE gdymal_ic_trasa
        ( stacja text
        , peron text
        , tor integer
        );
INSERT INTO gdymal_ic_trasa(stacja,peron,tor) VALUES ('sta', 'one', 666 );

-- ------------------------------
create or replace function f124(st varchar)
    returns table(odjazdy varchar, kierunek varchar, przewoznik varchar, peron varchar, tor int)
as
$func$
declare s varchar; sta varchar := st;

begin

drop table if exists f124p;

create table f124p(odjazdy varchar, kierunek varchar, przewoznik varchar, peron varchar, tor int);

select string_agg('insert into f124p select k."'||nr||'", ''stacja'', ''przewoznik'', t.peron, t.tor
        from gdymal_ic_kursy k
        inner join gdymal_ic_trasa t on k.stacja=t.stacja
        where t.stacja=''sta'';','')
into s from generate_series(5110, 5118,2) as nr;

execute s;
return query select * from f124p;
end $func$ language plpgsql;

select *
FROM f124('OMG')
        ;

结果:


DROP SCHEMA
CREATE SCHEMA
SET
CREATE TABLE
INSERT 0 1
CREATE TABLE
INSERT 0 1
CREATE FUNCTION
NOTICE:  table "f124p" does not exist, skipping
 odjazdy | kierunek | przewoznik | peron | tor 
---------+----------+------------+-------+-----
 1       | stacja   | przewoznik | one   | 666
 3       | stacja   | przewoznik | one   | 666
 5       | stacja   | przewoznik | one   | 666
 7       | stacja   | przewoznik | one   | 666
         | stacja   | przewoznik | one   | 666
(5 rows)