【发布时间】:2014-09-21 10:26:37
【问题描述】:
我需要创建一个函数来计算每个分支的帐户总和并进行比较 到分支余额。
我尝试过这样做:
CREATE OR REPLACE FUNCTION t3() RETURNS TABLE(bb integer, sum integer) AS $$
BEGIN
FOR i IN 1..50 LOOP
BEGIN
SELECT bbalance FROM branch WHERE branchid = i
union
SELECT sum(balance) FROM account WHERE branch = i;
END;
END LOOP;
END;
$$ LANGUAGE plpgsql;
我现在有点困惑......我希望它返回一个包含 2 列的表:一个具有分支中 bbalance 的值;第二个是该分支中每个余额的总和。
我需要一些可以用select * from t3() 打电话的东西。
这就是我在 pgAdmin 查询编辑器中写的:
CREATE OR REPLACE FUNCTION t3() RETURNS TABLE(bb integer, sum integer) AS $$
DECLARE
bal integer;
BEGIN
FOR i IN SELECT branchid FROM branch
LOOP
SELECT INTO bb bbalance FROM branch WHERE branchid = i;
SELECT INTO "sum" sum(balance) FROM account WHERE branch = i;
RETURN NEXT;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
错误是:
ERRORE: variabile del ciclo sulle righe deve essere una variabile di tipo row o record o una lista di variabili scalari
LINE 5: FOR i IN SELECT branchid FROM branch
^
********** Error **********
ERRORE: variabile del ciclo sulle righe deve essere una variabile di tipo row o record o una lista di variabili scalari
SQL state: 42601
Character: 119
意大利语 - 翻译为:
对行进行循环的循环变量必须是记录或行变量或标量变量列表。
【问题讨论】:
-
在会话中运行
SET lc_messages = 'C';以获取英文错误消息。
标签: sql function postgresql loops plpgsql