声明postgres变量时的语法错误

时间:2019-12-26 17:28:34

标签: sql postgresql plpgsql

尝试在Postgresql中声明变量时出现SQL错误。在下面查看我的代码:

declare number int8;

begin
 select ID into number from public.People p where p."Name" = 'Jeff';
 if found then
   insert into public.Friends ("PeopleID", "Name", "PhoneNumber")
   values (number, 'Jeff', '205-123-4567')
 end if;
end;

当我尝试运行它时,它返回以下异常:

  

SQL错误[42601]:错误:“ int8”或附近的语法错误

我希望只有一个名称为“ Jeff”的条目,所以我不必担心“ number”可能有多个值。

1 个答案:

答案 0 :(得分:0)

与其他RDBMS(例如SQL Server或MySQL)不同,您无法在Postgres中的纯SQL中声明变量。

当我将其放入plgpsql过程中时,您的代码可以在this Postgres 12 db fiddle中正确编译(不过,对于变量,您应该考虑使用其他名称number)。

create procedure test_proc() language plpgsql AS '
declare number int8;
begin
    select ID into number from people p where p."Name" = ''Jeff'';
    if found then
        insert into friends ("PeopleID", "Name", "PhoneNumber")
            values (number, ''Jeff'', ''205-123-4567'');
    end if;
end;
';

或者在Postgres <11中使用a void function

create function test_proc() returns void language plpgsql AS '
declare number int8;
begin
    select ID into number from people p where p."Name" = ''Jeff'';
    if found then
        insert into friends ("PeopleID", "Name", "PhoneNumber")
            values (number, ''Jeff'', ''205-123-4567'');
    end if;
end;
';

您可能还需要考虑以下insert ... select查询,该查询在单个数据库调用中可以达到相同的目的:

insert into friends("PeopleID", "Name", "PhoneNumber")
select ID, "Name", '205-123-4567' from people where p."Name" = 'Jeff'