PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chuyển nhiều giá trị trong một tham số duy nhất

VARIADIC

Giống như @mu đã cung cấp, VARIADIC là bạn của bạn. Một chi tiết quan trọng nữa:

Bạn cũng có thể gọi một hàm bằng VARIADIC tham số với kiểu mảng trực tiếp. Thêm từ khóa VARIADIC trong lệnh gọi hàm:

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

tương đương với:

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

Lời khuyên khác

Trong Postgres 9.1 trở lên right() với một phủ định độ dài nhanh hơn và đơn giản hơn để cắt các ký tự đầu khỏi một chuỗi:

right(j.status, -2)

tương đương với:

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

Bạn có j."DeleteFlag" cũng như j.DeleteFlag (không có dấu ngoặc kép) trong truy vấn của bạn. Điều này có lẽ không chính xác. Xem:

  • Lỗi PostgreSQL:Đã tồn tại mối quan hệ

"DeleteFlag" = '0' chỉ ra một vấn đề khác. Không giống như các RDBMS khác, Postgres hỗ trợ đúng cách boolean loại dữ liệu. Nếu cờ giữ boolean dữ liệu (true / false / NULL ) sử dụng boolean gõ phím. Một loại ký tự như text sẽ không phù hợp / không hiệu quả.

Chức năng phù hợp

Bạn không cần PL / pgSQL ở đây. Bạn có thể sử dụng một hàm SQL đơn giản hơn:

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 <> fiddle here
Sqlfiddle cũ



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thay đổi mã hóa cơ sở dữ liệu cho cơ sở dữ liệu PostgreSQL bằng sql hoặc phpPgAdmin?

  2. SQL động (EXECUTE) làm điều kiện cho câu lệnh IF

  3. Khung thực thể PostgreSQL

  4. Chạy Kho dữ liệu trên PostgreSQL

  5. Kiểu dữ liệu nào cho vĩ độ và kinh độ?