我想将整列发送到我的功能!像函数min()
或max()
这样的东西有可能吗?
如何逐行检查查询结果?我写了类似的东西:
CREATE OR REPLACE FUNCTION gowno.kiki(temppp INTEGER ) RETURNS INTEGER AS
$$
DECLARE
val INTEGER := 0;
i tyczka%ROWTYPE;
BEGIN
FOR i IN (SELECT adres FROM tyczka)
LOOP
RETURN CAST(i.adres AS INTEGER);
IF CAST(i.adres AS INTEGER) > val THEN
val = CAST(i.adres_ AS INTEGER);
END IF;
END LOOP;
RETURN val;
END
$$
LANGUAGE 'plpgsql'
例如,我有类似下表的内容。我想计算列poziom_wody
中字段与id相同的字段之间的差异。
答案 0 :(得分:0)
您的函数的语法将如下所示:
CREATE OR REPLACE FUNCTION foo(temppp int)
RETURNS INTEGER AS
$func$
DECLARE
val int := 0;
i tyczka;
BEGIN
FOR i IN
SELECT * FROM tyczka
LOOP
RETURN i.adres::int;
IF i.adres::int > val THEN
val := i.adres::int;
END IF;
END LOOP;
RETURN val;
END
$func$ LANGUAGE plpgsql;
根据您的表格定义,这可以进一步简化。
根据您想要达到的目标,可能有一种优越的基于集合的方法。循环通常是关系数据库中的最后手段。
这是最好的场合,但是来自程序语言的人往往会过度使用循环。
使用相同的poziom_wody
得出最大值和最小值id_rzeki
之间的差异:
SELECT max(poziom_wody) - min(poziom_wody) AS diff
FROM tbl
WHERE id_rzeki = 2;
这适用于任意数量的行。