#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. я сделал это, братан, еще раз спасибо за ваш быстрый ответ….