PostgreSQL中的选择循环内错误

PostgreSQL中的选择循环内错误,postgresql,postgresql-9.1,plpgsql,Postgresql,Postgresql 9.1,Plpgsql,正在尝试使用SELECT in LOOP语句为其他表记录启动以下函数的工作: CREATE OR REPLACE FUNCTION parts."clearExpiredReserves"() RETURNS void AS $BODY$DECLARE reserved_parts CURSOR FOR SELECT id, part_id, quantity FROM parts.operations_reg WHERE operation_type = 300 A

正在尝试使用SELECT in LOOP语句为其他表记录启动以下函数的工作:

CREATE OR REPLACE FUNCTION parts."clearExpiredReserves"()
  RETURNS void AS
$BODY$DECLARE
    reserved_parts CURSOR FOR SELECT id, part_id, quantity FROM parts.operations_reg WHERE operation_type = 300
        AND operation_date < CURRENT_TIMESTAMP - interval '72 hours';

    spareparts_qty INT;
BEGIN
    FOR reserve_record IN reserved_parts LOOP
        SELECT p.quantity FROM parts.spareparts p WHERE p.id = reserve_record.part_id INTO spareparts_qty;

        IF spareparts_qty = reserved_parts.quantity THEN
            UPDATE parts.spareparts SET is_reserved = FALSE;
        END IF;

        DELETE FROM parts.operations_reg WHERE id = reserved_parts.id;
    END LOOP;

END;$BODY$
  LANGUAGE plpgsql VOLATILE SECURITY DEFINER
  COST 100;
我哪里错了


谢谢。

在FOR循环中引用当前记录时,您需要使用变量reserve_记录,而不是绑定的游标var reserved_部分

代替

IF spareparts_qty = reserved_parts.quantity THEN
使用


此处:
spareparts\u qty=reserved\u parts.quantity
-->
reserved\u parts
是光标名称,您必须使用记录名称
reserve\u record.quantity
,而不是光标。您是对的。我应该更加小心,不要在晚上工作:)
IF spareparts_qty = reserved_parts.quantity THEN
IF spareparts_qty = reserved_record.quantity THEN