sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL zacyklí vnější funkce. Je to možné?

Nemůžete DECLARE (globální) proměnné (existují zástupná řešení ) ani smyčka s prostým SQL – s výjimkou rekurzivních CTE poskytovaných @bma (což je ve skutečnosti iterace přes řádky, ne ve smyčce, přísně vzato).

Nicméně , existuje DO prohlášení pro takový procesní kodex ad hoc. Představeno s Postgres 9.0. Funguje jako jednorázová funkce, ale nebere žádné parametry a nic nevrací. Můžete RAISE notes et al, takže váš příklad by fungoval dobře:

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$

Pokud není uvedeno jinak, výchozí jazyk v těle je plpgsql . Můžete použít jakýkoli registrovaný procesní jazyk pokud to však deklarujete (jako:LANGUAGE plpython ).

Postgres také nabízí generate_series() generovat množiny ad-hoc, což může v mnoha případech odstranit potřebu smyčkování. Zkuste příklady vyhledat zde na SO.

Můžete také použít WHERE klauzule v CTE upravující data v prostém SQL pro rozvětvení případů a emulaci IF .. THEN .. ELSE .. END ...



  1. Vrácení výstupu skriptu Python CGI MySQL

  2. Jak reprezentovat Oracle Interval v Javě

  3. Jak nastavit replikaci MySQL v RHEL, Rocky a AlmaLinux

  4. Jak vložit záznamy do SQL s vyhledanými hodnotami?