我想知道是否有與變量和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中以這種方式工作...任何建議將不勝感激。