我对Postgres还是陌生的,我不敢相信仅仅声明一个变量有多困难。我确实遇到过其他SO职位,但是在我的情况下他们都没有帮助。我只想在postgres中编写一个如下所示的脚本:
declare @age int = 10;
select * from person p where p.age > @age;
基于SO帖子here,我尝试了:
DO
$$
DECLARE
overTheAgeOf int := 15;
BEGIN
select *
from person
where age > overTheAgeOf;
END
$$;
这给了我错误:[42601] ERROR: query has no destination for result data
然后我尝试返回脚本的结果:
return (select *
from person
where age > overTheAgeOf);
那给了我另一个错误:ERROR: RETURN cannot have a parameter in function returning void
如何声明变量并在随后的脚本中使用它?
答案 0 :(得分:1)
您在多个层面上感到困惑。
有查询语言SQL,有过程语言PL / pgSQL。唯一的联系是
您可以从PL / pgSQL代码运行SQL语句
您可以在SQL语句DO
和CREATE FUNCTION/PROCEDURE
的主体中包含PL / pgSQL代码。
PL / pgSQL中有DECLARE
部分中定义的变量,但SQL中没有变量。
DO
语句不能返回任何值。
如果要使用PL / pgSQL变量,并且想返回值,则必须使用一个函数。一个例子:
CREATE FUNCTION getpersons() RETURNS SETOF person
LANGUAGE plpgsql AS
$$DECLARE
overTheAgeOf int := 15;
BEGIN
RETURN QUERY
SELECT *
FROM person
WHERE age > overTheAgeOf;
END;$$;
SELECT getpersons();
可以在客户端上使用变量。使用psql
客户端,您可以使用:
\set overTheAgeOf 15
SELECT *
FROM person
WHERE age > :overTheAgeOf;
答案 1 :(得分:0)
好的结构是这样的:
DO
LANGUAGE plpgsql $$
DECLARE
variable int := 0;
BEGIN
-- your code
raise notice '%', variable::varchar;
END;
$$;