Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 为什么此PL/PgSql无效?_Postgresql_Plpgsql - Fatal编程技术网

Postgresql 为什么此PL/PgSql无效?

Postgresql 为什么此PL/PgSql无效?,postgresql,plpgsql,Postgresql,Plpgsql,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: s

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"

我做错了什么?

您需要从
开始/结束
块中删除
声明

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


啊。正确的。所以你不能在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

您需要从
begin/end
块中删除
declare

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


啊。正确的。所以你不能在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

啊。正确的。因此,您不能在
BEGIN…END
块中声明变量吗?@ShaulBehr您可以在
declare
part.Correct中声明它。您可以在BEGIN.Ah前面的declare部分声明变量。正确的。因此,您不能在
BEGIN…END
块中声明变量吗?@ShaulBehr您可以在
declare
part.Correct中声明它。您可以在BEGIN之前的declare部分声明变量。