sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan bruger man `RETURN NEXT` i PL/pgSQL korrekt?

Det angivne eksempel kan erstattes fuldstændigt med RETURN QUERY :

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

hvilket vil være en masse hurtigere.

Generelt bør du undgå iteration, hvor det er muligt, og i stedet foretrække sæt-orienterede operationer.

Hvor return next over en loop er uundgåelig (hvilket er meget sjældent og for det meste begrænset til, når du har brug for undtagelseshåndtering), skal du indstille OUT parameterværdier eller tabelparametre, og derefter return next uden argumenter.

I dette tilfælde er dit problem linjen SELECT yr.y, 'hi'; som intet gør. Du antager, at den implicitte destination for en SELECT er ud-parametrene, men det er ikke tilfældet. Du skal bruge ud-parametrene som sløjfevariabler som @peterm gjorde, bruge tildelinger eller bruge 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. org.hibernate.Query .iterate() VS .getResultList() forespørgselsgenerering

  2. Hvordan bruger man aliaser i matematiske operatorer i SQL?

  3. Hvordan kan jeg liste har samme id-data med while-løkke i PHP?

  4. python pymysql.err.OperationalError:(2013, 'Mistet forbindelse til MySQL-server under forespørgsel')