将数组传递给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
不在函数中,您将 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()
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''}')
因为你已经将函数的所有参数都作为数组,所以你必须像上面那样在数组中提供它。你可以根据你的要求改变你的条件。
我有一个 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
不在函数中,您将 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()
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''}')
因为你已经将函数的所有参数都作为数组,所以你必须像上面那样在数组中提供它。你可以根据你的要求改变你的条件。