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

PostgreSQL sløjfer eksterne funktioner. Er det muligt?

Du kan ikke DECLARE (globale) variabler (der er løsninger ) eller loop med almindelig SQL - med undtagelse af rekursive CTE'er som leveret af @bma (hvilket faktisk er iterating over rækker, ikke looping, strengt taget).

Men , der er DO erklæring for sådanne ad hoc-procedureregler. Introduceret med Postgres 9.0. Den fungerer som en engangsfunktion, men tager ingen parametre og returnerer ikke noget. Du kan RAISE bemærkninger et al, så dit eksempel ville bare fungere fint:

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$

Hvis ikke andet er angivet, er sproget i brødteksten som standard plpgsql . Du kan bruge ethvert registreret proceduresprog dog, hvis du erklærer det (som:LANGUAGE plpython ).

Postgres tilbyder også generate_series() at generere sæt ad-hoc, hvilket kan undgå behovet for looping i mange tilfælde. Prøv en søgning her på SO for eksempler.

Du kan også bruge WHERE klausul i en datamodificerende CTE i almindelig SQL for at fordele sager og efterligne IF .. THEN .. ELSE .. END ...



  1. En oversigt over ProxySQL Clustering i ClusterControl

  2. Er der nogen ækvivalent til Postgresql HVER aggregatfunktion på andre RDBMS?

  3. Bitvis eksklusiv ELLER i Oracle

  4. SQL Server Dynamic Pivot i UDF, der returnerer tabel