函数 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)
我需要创建不同车站的火车返回时间表的功能。 我有这样的东西:
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)