【发布时间】:2013-12-14 20:25:53
【问题描述】:
尝试启动以下函数,在 LOOP 语句中使用 SELECT 来获取其他表记录:
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;
我有错误:
ERROR: missing FROM-clause entry for table "reserved_parts"
LINE 1: SELECT spareparts_qty = reserved_parts.quantity
^
QUERY: SELECT spareparts_qty = reserved_parts.quantity
CONTEXT: PL/pgSQL function "clearExpiredReserves" line 10 at IF
我哪里错了?
谢谢。
【问题讨论】:
-
这里:
spareparts_qty = reserved_parts.quantity-->reserved_parts是游标名,你必须使用记录名reserve_record.quantity,而不是游标。
标签: postgresql postgresql-9.1 plpgsql