Передача массива в функцию в postgresql

#arrays #postgresql #stored-procedures

#массивы #postgresql #хранимые процедуры

Вопрос:

У меня есть таблица, в которой я хочу выполнить поиск по всем записям одновременно с помощью функции. но моя функция ничего не отображает, когда я даю ей входные данные. Пожалуйста, если у вас есть какие-либо идеи, как написать функцию, чтобы она принимала все значения сразу и печатала результат. Я делюсь с вами своей таблицей и функцией, как указано ниже.

 select * from v_payments ;
 entity_name | patient_name | business_entity_id | payment_type_id | entered_date 
------------- -------------- -------------------- ----------------- --------------
 patient     | ali          |                  1 |               5 | 2020-01-01
 male        | baba         |                  2 |               4 | 2020-02-01
 female      | reshma       |                  7 |               8 | 2020-03-01
  

функция для него, как в

 create or replace function get_patient_data (b_entity_id[],p_type_id[],e_date date[]) returns table (
entity_first_name  TEXT,
  patient_first_name TEXT,
  business_entity_id INTEGER,
  payments_type_id  INTEGER,
  entry_date     DATE) as $$
begin
SELECT
  entity_name,
  patient_name,
  business_entity_id,
  payment_type_id,
  entered_date
FROM v_payments
WHERE business_entity_id = ANY($1) and payment_type_id = ANY($2) and entered_date = ($3); end; $$ language plpgsql ;
  

Комментарии:

1. Как вы вызываете вышеуказанный метод.

Ответ №1:

В функции есть несколько проблем. т. Е. return query Не было в функции, и вы сравниваете date , с date[] которой будет выдана ошибка. Таким образом, запрос функции после исправления ошибки с той же логикой выглядит следующим образом:

 create or replace function get_patient_data (b_entity_id int[],p_type_id int[],e_date date[]) 
returns table (
  entity_first_name  TEXT,
  patient_first_name TEXT,
  business_entity_id INTEGER,
  payments_type_id  INTEGER,
  entry_date     DATE) as $$
begin
return query
SELECT
  entity_name,
  patient_name,
  business_entity_id,
  payment_type_id,
  entered_date
FROM v_payments
WHERE business_entity_id = ANY($1) 
and payment_type_id = ANY($2) 
and entered_date = any($3); 
end; 
$$ 
language plpgsql;
  

Теперь вы можете вызвать его, как показано ниже:

 select * from get_patient_data('{1,2}','{5,4}','{''2020-01-01'',''2020-02-01''}')
  

ДЕМОНСТРАЦИЯ

Поскольку вы приняли все параметры функции в виде массива, вы должны предоставить его в виде массива, как указано выше. вы можете изменить свои условия в соответствии с вашими требованиями.

Комментарии:

1. Большое спасибо Ахилеш Мишра за ваш быстрый ответ, и моя проблема была решена. С моей стороны огромное спасибо и наилучшие пожелания …… Действительно ценится

2. Добро пожаловать. Пожалуйста, проголосуйте, если это соответствует вашим ожиданиям

3. я сделал это, братан, еще раз спасибо за ваш быстрый ответ….