我想知道是否有与变量和postgresql中的嵌套循环有关的工作与其他语言不同。postgresql中的嵌套循环问题
实施例:
CREATE OR REPLACE FUNCTION public.generate_syllables()
RETURNS integer AS
$BODY$
DECLARE
w RECORD;
s RECORD;
current_syllable integer := 1;
vowel_trigger integer := 0;
syllable_count integer := 1;
BEGIN
FOR w IN SELECT id FROM words LOOP
FOR s IN SELECT sound, id FROM sounds WHERE id = w.id ORDER BY ordering LOOP
IF (SELECT sr.vowel FROM sound_reference sr WHERE sr.sound = s.sound) = 1 AND vowel_trigger = 1 THEN
syllable_count := syllable_count + 1;
UPDATE sounds SET syllable = syllable_count WHERE id = s.id;
vowel_trigger := 0;
ELSIF (SELECT sr.vowel FROM sound_reference sr WHERE sr.sound = s.sound) = 1 THEN
vowel_trigger := 1;
UPDATE sounds SET syllable = syllable_count WHERE id = s.id;
ELSE
UPDATE sounds SET syllable = syllable_count WHERE id = s.id;
END IF;
END LOOP;
UPDATE words SET syllables = syllable_count WHERE id = w.id;
syllable_count := 1;
vowel_trigger := 0;
END LOOP;
RETURN 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
当我作为运行该函数,该函数不会进入在if语句的首要条件。我通过在第一个条件中添加return语句来测试它。起初我认为这肯定是一个逻辑错误,但我已经用我的数据集生成的例子手工完成了它,它应该按照需要工作。更奇怪的是,当我在外部循环中注释掉行时,对于vowel_trigger:= 0,那么它会输入第一个if语句。当然,逻辑也不能正常工作,并且从中我已经知道syllable_count在嵌套循环完成循环之前被设置为0,这也解释了为什么第一个条件从不输入,因为设置了vowel_trigger在循环返回到第一个条件之前回到0。
换句话说,在我看来,我的嵌套循环不像嵌套循环,而是嵌套循环在嵌套循环重新启动之前扩展到外部循环。我想我必须不知道如何正确地创建嵌套循环,或者他们只是不能在POSTGRESQL中以这种方式工作...任何建议将不胜感激。