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

Catatan berbasis kursor di PostgreSQL

1. Kursor implisit

Hampir selalu lebih baik menggunakan kursor implisit dari FOR lingkaran daripada menggunakan kursor eksplisit yang agak lambat dan berat. Saya telah menulis ribuan fungsi plpgsql dan hanya beberapa kali kursor eksplisit yang masuk akal.

CREATE OR REPLACE FUNCTION avoidable_states()
  RETURNS SETOF varchar AS
$func$
DECLARE
    rec record;
BEGIN   
   FOR rec IN
      SELECT *
      FROM   address ad
      JOIN   city    ct USING (city_id)
   LOOP
      IF rec.city LIKE '%hi%' THEN
          RETURN NEXT rec.city;               
      END IF;
   END LOOP;
END
$func$  LANGUAGE plpgsql STABLE;

Selain:tidak ada fungsi yang membutuhkan volatilitas VOLATILE . Gunakan STABLE .

2. Pendekatan berbasis himpunan

Hampir selalu lebih baik menggunakan pendekatan berbasis himpunan jika memungkinkan . Gunakan RETURN QUERY untuk kembali sebagai set dari kueri secara langsung.

CREATE OR REPLACE FUNCTION avoidable_states()
  RETURNS SETOF varchar AS
$func$
BEGIN   
   RETURN QUERY
   SELECT ct.city
   FROM   address ad
   JOIN   city    ct USING (city_id)
   WHERE  ct.city LIKE '%hi%';
END
$func$  LANGUAGE plpgsql STABLE;

3. Fungsi SQL

Untuk kasus sederhana (mungkin penyederhanaan), Anda juga dapat menggunakan fungsi SQL sederhana atau bahkan hanya kueri:

CREATE OR REPLACE FUNCTION avoidable_states()
  RETURNS SETOF varchar AS
$func$
   SELECT ct.city
   FROM   address ad
   JOIN   city    ct USING (city_id)
   WHERE  ct.city LIKE '%hi%';
$func$  LANGUAGE sql STABLE;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dengan sqlalchemy cara mengikat secara dinamis ke mesin database berdasarkan permintaan

  2. Membuat indeks unik parsial dengan sqlalchemy di Postgres

  3. Temukan objek dependen untuk tabel atau tampilan

  4. RPAD() Fungsi di PostgreSQL

  5. Penyortiran angka manusiawi atau alami dari string kata-dan-angka campuran