PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL mengulang fungsi di luar. Apakah itu mungkin?

Anda tidak bisa DECLARE variabel (global) (ada ada solusi ) atau loop dengan SQL biasa - dengan pengecualian CTE rekursif seperti yang disediakan oleh @bma (yang sebenarnya berulang lebih dari baris, tidak perulangan, sebenarnya).

Namun , ada DO pernyataan untuk kode prosedur ad-hoc tersebut. Diperkenalkan dengan Postgres 9.0. Ini berfungsi seperti fungsi satu kali, tetapi tidak mengambil parameter apa pun dan tidak mengembalikan apa pun. Anda dapat RAISE pemberitahuan et al, jadi contoh Anda akan berfungsi dengan baik:

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$

Jika tidak ditentukan lain, bahasa dalam isi default ke plpgsql . Anda dapat menggunakan bahasa prosedural apa pun yang terdaftar meskipun, jika Anda mendeklarasikannya (seperti:LANGUAGE plpython ).

Postgres juga menawarkan generate_series() untuk menghasilkan set ad-hoc, yang dapat meniadakan kebutuhan untuk perulangan dalam banyak kasus. Coba cari di sini di SO untuk contoh.

Anda juga dapat menggunakan WHERE klausa dalam CTE pengubah data dalam SQL biasa untuk memotong kasus dan meniru 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. Postgresql JSONB akan datang. Apa yang harus digunakan sekarang? toko? JSON? EAV?

  2. SQLAlchemy SELECT WITH klausa/pernyataan (pgsql)

  3. Rake tugas untuk memotong semua tabel di Rails 3

  4. pg permata '0.14.0' di Mountain Lion gagal

  5. PostgreSQL mengulang fungsi di luar. Apakah itu mungkin?