postgresql - 如何从 ids 数组中获取 PostgreSQL 中的临时/虚拟表
问题描述
甲骨文查询:
CREATE OR REPLACE FUNCTION case_filter(p_account_id IN DOUBLE PRECISION
, p_case_type_id IN DOUBLE PRECISION
, p_activity IN VARCHAR(4000) DEFAULT NULL
, p_step IN VARCHAR(4000) DEFAULT NULL
, p_char_fld_obj IN ct_char_obj DEFAULT NULL
, p_num_fld_obj IN ct_num_obj DEFAULT NULL
, p_from_date_fld_obj IN ct_date_obj DEFAULT NULL
, p_to_date_fld_obj IN ct_date_obj DEFAULT NULL)
RETURNS number_tab_t
AS
$BODY$
DECLARE
l_case_ids number_tab_t;
l_case_ids_local number_tab_t;
BEGIN
select array_agg(ccase.case_id) INTO l_case_ids
from ct_case ccase
INNER JOIN ct_case_type casetype
on (casetype.case_type_id = ccase.case_type_id and casetype.account_id = p_account_id)
WHERE ccase.case_type_id = coalesce(p_case_type_id, ccase.case_type_id);
l_case_ids_local := l_case_ids;
IF p_employee IS NULL THEN
RETURN SET(l_case_ids);
ELSE
SELECT DISTINCT array_agg(case_id) INTO l_case_ids
FROM (SELECT case_id
FROM employee_data ed
INNER JOIN ct_case c
ON (c.employee_id = ed.employee_id AND ed.account_id = p_account_id)
INNER JOIN l_case_ids_local () bc
ON (c.case_id = bc.column_value)
WHERE REGEXP_REPLACE(UPPER(ed.last_name || ',' || ed.first_name || ed.middle_name), '[^A-Z,]', '') LIKE '%'|| replace(REGEXP_REPLACE(upper(p_employee), '[^A-Z,]',''),',','%,')|| '%') as re;
END IF;
RETURN SET(l_case_ids);
END;
$BODY$
LANGUAGE plpgsql;
由于我们正在将此查询迁移到 PostgreSQL,因此我们遇到了表函数的问题。PostgreSQL 不直接支持 table(collection of integer) 在 PostgreSQL 中是否有任何替代方案?谢谢。
解决方案
只需删除TABLE
操作员并使用l_case_ids_local()
INNER JOIN l_case_ids_local() bc
ON (c.case_id = bc.col) -- use the column name as
-- defined in the function.
推荐阅读
- python - 在 Pandas (Python) 中打印多列
- angular - Angular-2-material mat-ink-bar 不在默认选项卡上
- c++ - 如何继承方法然后向它们添加一些东西?
- apache-poi - 如何使用 apache poi ppt 居中对齐幻灯片中具有动态列的表格
- php - 时间数组php的总和 - 结果应该是没有DAY的H:m:i
- javascript - 当我添加组件标签时,添加新组件“服务器组件”的 Angular 7 不会出现在浏览器中?
- postgresql - 在 Postgresql 中存储基于环境的变量
- python - 如何使用 lambda 函数将 ms sql 数据库从 bak 文件自动恢复到 s3 中的 rds
- drupal - Drupal CMS 站点中的邮件配置,无需管理面板
- swift - 如何检索switch的值并传递给Object?