【问题标题】:Passing array to a function in postgresql将数组传递给postgresql中的函数
【发布时间】:2020-10-15 11:11:24
【问题描述】:

我有一个表,我想使用一个函数一次搜索所有记录。但是当我给它输入时,我的函数不显示任何内容。请如果您知道如何编写一个函数来一次获取所有值并打印其结果。我正在与您分享我的桌子和功能。

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 ;

【问题讨论】:

  • 你是如何调用上述方法的。

标签: arrays postgresql stored-procedures


【解决方案1】:

函数中几乎没有问题。即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($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''}')

DEMO

由于您已将函数的所有参数作为数组,因此您必须像上面一样在数组中提供它。您可以根据需要更改条件。

【讨论】:

  • 非常感谢 Akhilesh Mishra 的及时回复,我的问题已经解决。来自我身边的一束感谢和最良好的祝愿......真的很感激
  • 欢迎您。如果符合您的期望,请点赞
  • 我再次做到了兄弟,感谢您的及时回复......
猜你喜欢
  • 2019-04-01
  • 2013-06-12
  • 1970-01-01
  • 2013-08-15
  • 2019-06-22
  • 2013-09-13
  • 2020-07-28
  • 1970-01-01
相关资源
最近更新 更多