2017-01-06 5 views
0

я пытаюсь создать эту функцию, но я получаю эту ошибку: ERROR: «Макс» не является известной переменнойPostgreSQL агрегатная функция внутри цикла

, но, если я использую один из агрегатных функций работает отлично, но не обе функции в то же время

CREATE OR REPLACE FUNCTION "GerarTeste"() 
    RETURNS BOOL AS 
    $BODY$ 
    DECLARE  
      inicio date; 
      fim date; 
      rResult record;  
    BEGIN 
     FOR rResult IN 
      SELECT DISTINCT lote 
      FROM fatura 
      ORDER BY lote 
     LOOP 
      SELECT 
       MIN(fatura.inicio) INTO inicio ,MAX(fatura.inicio) into fim 
      FROM fatura 
      WHERE lote = rResult.lote;  

      RAISE NOTICE '%',inicio; 

     END LOOP; 
     RETURN true; 
    END; 
$BODY$ 
LANGUAGE 'plpgsql'; 
+0

Я не понимаю, цель этой функции. Это чрезвычайно сложный и дорогой способ написать 'return true; ' –

+0

И нет необходимости в цикле. Вы можете просто сделать 'select .. where lote in (select lote from fatura)' и избавиться от медленного цикла –

+0

- это всего лишь пример .... –

ответ

0

Если у вас есть несколько столбцов, до сих пор только один into

 SELECT MIN(fatura.inicio), MAX(fatura.inicio) 
      into inicio, fim --<< here 
     FROM fatura 
     WHERE lote = rResult.lote; 
Смежные вопросы