postgresql - 函数返回空表
问题描述
我需要创建不同车站的火车返回时间表。我有类似的东西:
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;
问题是这个函数返回空表。它不应该是那样的,因为这个表中必须有一些信息。我认为 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)
推荐阅读
- python - 不是此平台错误上支持的轮子
- swift - SwiftUI - 弹出到详细视图
- karate - karate.match with contains 不起作用
- python - 通过 yeojohnson 转换数据但有错误
- python - 如何通过 GridSearchCV 和管道在 sklearn 中的贝叶斯岭预测上获取 return_std
- visual-studio-code - 如何使用 VSCode 查看 Rust 依赖项的源代码?
- c - 打印使用 while 循环的正数、负数和所有条目
- flutter - 小部件颤动到坚持左,右
- python-3.x - Django PasswordResetConfirmView 密码重置失败不起作用
- node.js - 使用带有用户 ID 的 Rest API 提取用户数据