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

Lewati beberapa nilai dalam parameter tunggal

VARIADIC

Seperti yang diberikan @mu, VARIADIC adalah temanmu. Satu lagi detail penting:

Anda juga bisa memanggil fungsi menggunakan VARIADIC parameter dengan tipe array secara langsung. Tambahkan kata kunci VARIADIC dalam panggilan fungsi:

SELECT * FROM  f_test(VARIADIC '{1, 2, 3}'::int[]);

setara dengan:

SELECT * FROM  f_test(1, 2, 3);

Saran lainnya

Di Postgres 9.1 atau yang lebih baru right() dengan negatif panjang lebih cepat dan lebih sederhana untuk memangkas karakter utama dari string:

right(j.status, -2)

setara dengan:

substring(j.status, 3, char_length(jobs.status))

Anda memiliki j."DeleteFlag" serta j.DeleteFlag (tanpa tanda kutip ganda) dalam kueri Anda. Ini mungkin salah. Lihat:

  • Kesalahan PostgreSQL:Relasi sudah ada

"DeleteFlag" = '0' menunjukkan masalah lain. Tidak seperti RDBMS lainnya, Postgres dengan benar mendukung boolean tipe data. Jika bendera memegang boolean data (true / false / NULL ) gunakan boolean Tipe. Tipe karakter seperti text tidak tepat/tidak efisien.

Fungsi yang tepat

Anda tidak perlu PL/pgSQL di sini. Anda bisa gunakan fungsi SQL yang lebih sederhana:

CREATE OR REPLACE FUNCTION f_test(VARIADIC int[])
  RETURNS TABLE (id int, reference int, job_title text, status text)
  LANGUAGE sql AS
$func$
   SELECT j.id, j.reference, j.job_title
        , ltrim(right(j.status, -2)) AS status
   FROM   company c
   JOIN   job     j USING (id)
   WHERE  c.active
   AND    NOT c.delete_flag
   AND    NOT j.delete_flag
   AND   (j.id = ANY($1) OR '{-1}'::int[] = $1)
   ORDER  BY j.job_title
$func$;

db<>main biola di sini
sqlfiddle lama



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang dimaksud dengan pemindaian tumpukan Bitmap dalam paket kueri?

  2. Bagaimana cara mengambil komentar dari database PostgreSQL?

  3. CS50:Operator LIKE, substitusi variabel dengan % ekspansi

  4. Bisakah saya membuat fungsi plpgsql mengembalikan integer tanpa menggunakan variabel?

  5. Rails:Kesalahan saat menginstal permata pg