PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвам `RETURN NEXT` в PL/pgSQL правилно?

Даденият пример може да бъде изцяло заменен с RETURN QUERY :

BEGIN
    RETURN QUERY SELECT y_.y, 'hi' FROM generate_series(1,10,1) AS y_(y)
END;

което ще бъде много по-бързо.

Като цяло трябва да избягвате итерация, когато е възможно, и вместо това да предпочитате операции, ориентирани към множество.

Където return next през цикъл е неизбежно (което е много рядко и най-вече ограничено до когато имате нужда от обработка на изключения) трябва да зададете OUT стойности на параметри или параметри на таблица, след което return next без аргументи.

В този случай вашият проблем е редът SELECT yr.y, 'hi'; което не прави нищо. Вие приемате, че неявната дестинация на SELECT е изходящите параметри, но това не е така. Ще трябва да използвате изходящите параметри като променливи за цикъл, както направи @peterm, да използвате присвоявания или да използвате SELECT INTO :

FOR yr IN SELECT * FROM generate_series(1,10,1) AS y_(y) 
LOOP
    RAISE NOTICE 'Computing %', yr.y;
    y := yr.y;
    result := 'hi';
    RETURN NEXT;
END LOOP;
RETURN;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаването не може да се ангажира, когато е активирано автоматично изключение при работа с CachedRowSet в JDBC

  2. Актуализация на Postgresql с присъединяване

  3. Изберете произволен ред за всяка група

  4. Създаване на високодостъпна база данни за Moodle с помощта на PostgreSQL

  5. Как да изтриете много редове от често посещавана таблица