我正在尝试为我的查询创建一个存储过程:
SELECT count(DISTINCT account_number)
from account
NATURAL JOIN branch
WHERE branch.branch_city='Albany';
或
SELECT count(*)
from (
select distinct account_number
from account
NATURAL JOIN branch
WHERE branch.branch_city='Albany'
) as x;
我已经写了这个存储过程,但它返回列中所有记录的计数,而不是查询的结果,加上我需要在plpgsql中编写存储过程,而不是在SQL中。
CREATE FUNCTION account_count_in(branch_city varchar) RETURNS int AS $$
PERFORM DISTINCT count(account_number) from (account NATURAL JOIN branch)
WHERE (branch.branch_city=branch_city); $$ LANGUAGE SQL;
帮我用plpgsql写这种类型的存储过程,它返回位于指定城市的分支机构管理的帐户数。
3条答案
按热度按时间u2nhd7ah1#
PL/pgSQL版本可以看起来像这样:
电话:
避免命名冲突。使参数名称在查询中唯一或具有表限定的列。我两样都做了。
对于这样一个简单的查询,只需
RETURN
结果。函数声明为返回
integer
。通过将bigint
强制转换为int
,确保返回类型匹配。NATURAL JOIN
是短语法,但它可能不是最安全的形式。以后对基础表的更改很容易破坏这一点。最好显式地连接列名。PERFORM
仅在PL/pgSQL函数中有效,在SQL函数中无效,在这里没有用。2admgd592#
您可以使用此模板
jgzswidk3#