sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL loopar externa funktioner. Är det möjligt?

Du kan inte DECLARE (globala) variabler (det finns lösningar ) eller loop med vanlig SQL - med undantag för rekursiva CTE:er som tillhandahålls av @bma (vilket faktiskt är iterating över rader, inte looping, strängt taget).

Men , det finns DO uttalande för en sådan ad hoc-processkod. Introducerad med Postgres 9.0. Den fungerar som en engångsfunktion, men tar inga parametrar och returnerar ingenting. Du kan RAISE notiser et al, så ditt exempel skulle bara fungera bra:

DO
$do$
DECLARE
   _counter int := 0;
BEGIN
   WHILE _counter < 10
   LOOP
      _counter := _counter + 1;
      RAISE NOTICE 'The counter is %', _counter;  -- coerced to text automatically
   END LOOP;
END
$do$

Om inget annat anges, är språket i brödtexten som standard plpgsql . Du kan använda alla registrerade procedurspråk dock om du deklarerar det (som:LANGUAGE plpython ).

Postgres erbjuder även generate_series() att generera uppsättningar ad-hoc, vilket kan undvika behovet av looping i många fall. Försök att söka här på SO för exempel.

Du kan också använda WHERE klausul i en datamodifierande CTE i vanlig SQL för att dela upp fall och emulera IF .. THEN .. ELSE .. END ...



  1. Hur ändrar man REFERENSER i PostgreSQL?

  2. UPDATE-sats med flera kopplingar i PostgreSQL

  3. MySQL och PHP - infoga NULL istället för tom sträng

  4. Hur man testar PHP MySQL-databasanslutning med skript