sql - 在没有 PL/pgSQL 的情况下迭代 PostgreSQL 中的选择结果
问题描述
我目前正在开发一个系统,用于处理学校建筑中不同的班级和隔间预订。我有这样一种方式,当您预订教室时,您会自动预订其中的每个隔间。
我需要在不使用 PL/pgSQL 的情况下迭代纯 SQL 中的选择结果来实现此保留,因为在查询之前并不清楚教室有多少个隔间。
我已经尝试过 PL/pgSQL,虽然它运行良好,但我需要一种不使用 PL/pgSQL 来满足类要求的方法。这是我的带有FOR
关键字的 PL/pgSQL 实现的示例。
CREATE OR REPLACE FUNCTION createReservationClass(p_codeBuilding CHAR(2),p_codeClass INT,p_CIP VARCHAR(8),p_date DATE,p_startPeriod INT,p_endPeriod INT,p_description VARCHAR(1024))
RETURNS VOID
AS $$
FOR temprow IN SELECT CODE_CUBICULE FROM public.CUBICULE where CODE_BUILDING = p_codeBuilding AND CODE_CLASS = p_codeClass
LOOP
SELECT createReservationCubicule(p_codeBuilding, p_codeClass, temprow.CODE_CUBICULE, p_CIP, p_date, p_startPeriod, p_endPeriod, p_description);
END LOOP;
END;
$$
LANGUAGE PLPGSQL;
我希望当我得到一个建筑物编号和一个教室编号时,它会自动保留它也有的每个隔间。我不确定我是否有正确的方法来解决是否有更简单的方法。
唯一的要求是我不允许使用 PL/pgSQL 来编写我的函数。
解决方案
为什么不使用 PL/pgSQL的奇怪要求?但是,您可以使用 SQL 函数轻松完成。
停止程序化思考,开始思考 SQL。您想要做的事情可以通过没有(显式)循环的单个查询来完成:
SELECT createReservationCubicule(
p_codeBuilding,
p_codeClass,
CODE_CUBICULE,
p_CIP,
p_date,
p_startPeriod
p_endPeriod,
p_description
)
FROM public.CUBICULE
where CODE_BUILDING = p_codeBuilding
AND CODE_CLASS = p_codeClass;
推荐阅读
- asp.net-core - ASP.Net Core WebApi - 存储 ActionFilter 中的值以在控制器中访问
- ruby - caller_method 返回的不是我期望的值
- javascript - 三JS | 检测一个物体何时离开另一个物体
- php - PHP foreach xml列出所有出现
- mysql - MySQL Docker Image:使用 K8S Secret 的 env 变量初始化
- python - Odoo 13 中的页码
- javascript - Mongoose + GraphQL 无法填充模型
- xml - Eclipse 中 plugin.xml 文件的格式不起作用
- c# - 将 Web 项目 (ASP.NET Core 3) 设置为 IdentityServer 的客户端和 ApiResource
- php - 使用 Eval 函数时无法捕获异常