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

Pętle PostgreSQL poza funkcjami. Czy to jest możliwe?

nie możesz DECLARE (globalne) zmienne ( obejścia ) ani loop ze zwykłym SQL - z wyjątkiem rekurencyjnych CTE dostarczonych przez @bma (co w rzeczywistości jest iteracją ponad rzędami, nie zapętlając się, mówiąc ściśle).

Jednak , istnieje DO oświadczenie dla takiego doraźnego kodeksu proceduralnego. Wprowadzony wraz z Postgresem 9.0. Działa jak funkcja jednorazowa, ale nie przyjmuje żadnych parametrów i niczego nie zwraca. Możesz RAISE uwagi i inni, więc twój przykład będzie działał dobrze:

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$

Jeśli nie określono inaczej, domyślnym językiem w treści jest plpgsql . Możesz użyć dowolnego zarejestrowanego języka proceduralnego chociaż, jeśli to zadeklarujesz (na przykład:LANGUAGE plpython ).

Postgres oferuje również generate_series() do generowania zestawów ad-hoc, co może w wielu przypadkach wyeliminować potrzebę zapętlania. Spróbuj poszukać przykładów tutaj w SO.

Możesz także użyć WHERE klauzula w CTE modyfikacji danych w zwykłym SQL do rozwidlenia przypadków i emulacji IF .. THEN .. ELSE .. END ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wysoki poziom Postgresa spadł z szybkością INSERT/UPDATE?

  2. Jak sprawdzić, która wersja Postgresa jest uruchomiona?

  3. Jak mam obsłużyć uszeregowane x z y danych w PostgreSQL?

  4. Jak rozwiązać problem z uprawnieniami podczas uruchamiania Postgresql z minikube?

  5. Czy sterownik JDBC Postgres ma sposób na ustawienie client_encoding, aby połączyć się z bazą danych?