PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Предайте множество стойности в един параметър

VARIADIC

Като @mu предоставено, VARIADIC е твой приятел. Още една важна подробност:

Вие същоможете извикване на функция с помощта на VARIADIC параметър с тип масив директно. Добавете ключовата дума VARIADIC в извикването на функция:

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

е еквивалентен на:

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

Други съвети

В Postgres 9.1 или по-нова версия right() с отрицателно дължината е по-бърза и по-лесна за изрязване на водещи знаци от низ:

right(j.status, -2)

е еквивалентен на:

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

Имате j."DeleteFlag" както и j.DeleteFlag (без двойни кавички) във вашата заявка. Това вероятно е неправилно. Вижте:

  • Грешка в PostgreSQL:Връзката вече съществува

"DeleteFlag" = '0' показва друг проблем. За разлика от други RDBMS, Postgres поддържа правилно boolean тип данни. Ако флагът съдържа boolean данни (true / false / NULL ) използвайте boolean Тип. Тип символ като text би било неподходящо/неефективно.

Правилна функция

Тук нямате нужда от PL/pgSQL. Вие можете използвайте по-проста SQL функция:

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<>цигулка тук
Стар sqlfiddle



  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?

  2. Писане на файл с помощта на множество нишки

  3. Извикването на съхранена функция или процедура няма да вмъкне и да запази промените

  4. Как да премахнете връщане на карета и нови редове в Postgresql?

  5. Как да създадете SQL изглед с SQLAlchemy?