将数组传递给postgresql中的函数

Passing array to a function in postgresql

我有一个 table,我想使用 function.but 一次搜索所有记录 我的函数在我输入时不显示任何内容。如果您知道如何为其编写一个函数以一次获取所有值并打印其结果,请告诉我。我正在与您分享我的 table 和功能。

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() and payment_type_id = ANY() and entered_date = (); end; $$ language plpgsql ;

函数中几乎没有问题。即 return query 不在函数中,您将 datedate[] 进行比较,这将引发错误。因此,使用相同逻辑修复错误后的函数查询如下所示:

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() 
and payment_type_id = ANY() 
and entered_date = any(); 
end; 
$$ 
language plpgsql;

现在你可以像下面这样调用它了:

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

DEMO

因为你已经将函数的所有参数都作为数组,所以你必须像上面那样在数组中提供它。你可以根据你的要求改变你的条件。