我有一个表,我想在其中使用一个函数一次搜索所有记录。但是当我给它输入时,我的函数什么都不显示。如果您有任何想法,请如何编写一个函数以使其一次获取所有值并打印其结果。我正在与您分享我的桌子和功能。
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 ;
该功能很少有问题。即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''}')
由于将函数的所有参数都当作数组,因此您必须像上面那样在数组中提供它。您可以根据需要更改条件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句