Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有PL/pgSQL的PostgreSQL中迭代select结果_Sql_Postgresql_Plpgsql - Fatal编程技术网

在没有PL/pgSQL的PostgreSQL中迭代select结果

在没有PL/pgSQL的PostgreSQL中迭代select结果,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我目前正在开发一个系统,用于处理学校建筑中班级和隔间的不同预订。我的方式是,当你预订教室时,你会自动预订教室内的每个隔间 我需要在纯SQL中迭代select的结果,而不使用PL/pgSQL来实现这一保留,因为在查询之前还不清楚教室有多少隔间 我已经尝试过PL/pgSQL,虽然它工作得很好,但我需要一种不使用PL/pgSQL满足类需求的方法。下面是一个带有FOR关键字的PL/pgSQL实现示例 CREATE OR REPLACE FUNCTION createReservationClass(p_

我目前正在开发一个系统,用于处理学校建筑中班级和隔间的不同预订。我的方式是,当你预订教室时,你会自动预订教室内的每个隔间

我需要在纯SQL中迭代select的结果,而不使用PL/pgSQL来实现这一保留,因为在查询之前还不清楚教室有多少隔间

我已经尝试过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;

您可能不希望使用EXECUTE语句动态DDL,但希望使用EXECUTE语句。