首页 > 解决方案 > 为什么这个 PL/PgSql 无效?

问题描述

N00bie PL/PgSql 问题:

create or replace function foo() returns int as $$
declare fff int;
begin
    declare fff int;
    select count(*) into fff from mytable;
    return fff;
end 
$$ language plpgsql

输出:

ERROR:  syntax error at or near "*"
LINE 5:   select count(*) into fff from mytable;
                 ^
CONTEXT:  invalid type name "count(*) into fff from mytable"

我究竟做错了什么?

标签: postgresqlplpgsql

解决方案


您需要declarebegin/end块中删除:

create or replace function foo() returns int as $$
declare fff int;
begin
    --   declare fff int;
    select count(*) into fff from mytable;
    return fff;
end 
$$ language plpgsql

db<>小提琴

啊。正确的。那么你不能在 BEGIN...END 块中声明一个变量吗?

declare您在部分声明变量。如果需要,可以嵌套块:

create or replace function foo() returns int as $$
declare fff int;
begin
    declare xxx INT;
    begin
    select count(*) into xxx from mytable;
    return xxx;
    end;
end 
$$ language plpgsql

推荐阅读