sql >> Database >  >> RDS >> PostgreSQL

Hoe gebruik je `RETURN NEXT` in PL/pgSQL correct?

Het gegeven voorbeeld kan geheel worden vervangen door RETURN QUERY :

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

wat een veel zal zijn sneller.

Over het algemeen moet u iteratie waar mogelijk vermijden en in plaats daarvan de voorkeur geven aan set-georiënteerde bewerkingen.

Waar return next over een lus onvermijdelijk is (wat zeer zeldzaam is, en meestal beperkt tot wanneer u uitzonderingen moet behandelen) moet u OUT instellen parameterwaarden of tabelparameters, dan return next zonder argumenten.

In dit geval is uw probleem de regel SELECT yr.y, 'hi'; die niets doet. Je gaat ervan uit dat de impliciete bestemming van een SELECT is de out parameters, maar dat is niet het geval. Je zou de out-parameters moeten gebruiken als lusvariabelen zoals @peterm deed, toewijzingen gebruiken of SELECT INTO gebruiken :

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. Hoe MySQL op Ubuntu te installeren en configureren

  2. PostgreSQL uitvoeren met Amazon RDS

  3. MySQL-connectorfout De waarde van de servertijdzone Midden-Europese tijd

  4. Django-databaselaag gebruiken buiten Django?