首页 > 解决方案 > 如何从 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 中是否有任何替代方案?谢谢。

标签: postgresqlplpgsql

解决方案


只需删除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. 

推荐阅读