postgresql - 如何在 postgres 脚本中声明变量?
问题描述
我对 Postgres 还很陌生,我无法相信我发现仅仅声明一个变量有多么困难。我确实遇到过其他 SO 帖子,但没有一个对我的情况有帮助。我想要的只是在 postgres 中编写如下脚本:
declare @age int = 10;
select * from person p where p.age > @age;
根据此处的 SO 帖子,我尝试了:
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
如何声明一个变量并在后面的脚本中使用它?
解决方案
你在几个层面上感到困惑。
有查询语言 SQL,也有过程语言 PL/pgSQL。唯一的联系是
您可以从 PL/pgSQL 代码运行 SQL 语句
您可以在 SQL 语句的主体中包含 PL/pgSQL 代码,
DO
并且CREATE FUNCTION/PROCEDURE
.
PL/pgSQL中有变量,在
DECLARE
section中定义,但是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;
推荐阅读
- azure - Azure DevOps - 恢复数据库的管道发布任务
- html - 在 Django 中,如何使 div 仅在向下滚动到某个 px 时才可见
- admob - Google Admob:等待多少时间才能尝试请求另一个广告
- c# - 如何获取按钮事件的标签信息
- python - Jupyter Notebook 不会改变文本颜色!Windows 10 上的 termcolor 矿石 colorama
- generics - 如何使通用形式参数别名
- java - 带有 SOAP 的 InvocationTargetException
- javascript - JavaScript:向元素添加了 EventListener - 但是当我点击它时,目标是一个嵌套元素
- visual-foxpro - 我可以使用表达式生成器将 SQL 查询结果返回给变量吗?
- python - 遍历 ndarray 类型的 pandas 列