声明 postgres 变量时出现语法错误
Syntax error when declaring a postgres variable
尝试在 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;
当我尝试 运行 这个时,它 returns 这个异常:
SQL Error [42601]: ERROR: syntax error at or near "int8"
我希望只有一个条目名称为 "Jeff",这样我就不必担心 "number".[=12= 有多个可能的值了]
您不能在 Postgres 中以纯 SQL 声明变量,这与其他 RDBMS(例如 SQL Server 或 MySQL.
不同
当我将代码放在 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'
尝试在 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;
当我尝试 运行 这个时,它 returns 这个异常:
SQL Error [42601]: ERROR: syntax error at or near "int8"
我希望只有一个条目名称为 "Jeff",这样我就不必担心 "number".[=12= 有多个可能的值了]
您不能在 Postgres 中以纯 SQL 声明变量,这与其他 RDBMS(例如 SQL Server 或 MySQL.
不同当我将代码放在 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'