PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak poprawnie używać `RETURN NEXT` w PL/pgSQL?

Podany przykład można w całości zastąpić przez RETURN QUERY :

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

co będzie dużo szybciej.

Ogólnie rzecz biorąc, powinieneś unikać iteracji, gdy tylko jest to możliwe, i zamiast tego preferować operacje zorientowane na zbiór.

Gdzie return next nad pętlą jest nieuniknione (co jest bardzo rzadkie i najczęściej ogranicza się do sytuacji, gdy potrzebujesz obsługi wyjątków) musisz ustawić OUT wartości parametrów lub parametry tabeli, a następnie return next bez argumentów.

W tym przypadku Twoim problemem jest linia SELECT yr.y, 'hi'; który nic nie robi. Zakładasz, że niejawne miejsce docelowe SELECT to parametry wyjściowe, ale tak nie jest. Musiałbyś użyć parametrów out jako zmiennych pętli, tak jak zrobił to @peterm, użyć przypisań lub użyć 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. Klucze obce POSTGRESQL Odwołujące się do kluczy podstawowych dwóch różnych tabel

  2. Postgres właśnie losowo przestał działać (Rails, PGSQL.5432)

  3. Jak ocenić wyrażenie w instrukcji select w Postgres

  4. Data PostgreSQL C# DateTime

  5. Jak naprawić make 'PHP' w Mac OS X (10.9.4)?