arrays - 将数组传递给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 ;
解决方案
该功能几乎没有问题。即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''}')
由于您已将函数的所有参数作为数组,因此您必须像上面一样在数组中提供它。您可以根据您的要求更改条件。
推荐阅读
- spring-boot - 如何增加 Vaadin 中的最大文件上传 - Spring Boot
- r - R中数据可视化顺序问题
- c++ - code::blocks 智能感知/自动完成不适用于命名空间
- sql - Oracle Live SQL:SQL 命令未正确结束
- c# - .net 5 项目需要安装 .net core 3.1
- api - 有没有办法通过代码更改 Redragon 产品的 RGB 设置?
- javascript - 如何从预测数据中获取映射数组中显示的温度数据以及一周中的所有日期?
- python - TensorFlow 会利用 GPU 进行预测分析吗?
- node.js - 使用 localhost 节点项目访问服务器上的数据库
- javascript - 第二个案例在满足条件后运行,带有 JS 开关案例