database - 如何从 PostgreSQL 中的另一个函数调用表函数?

标签 database postgresql plpgsql postgresql-9.4

我是 PostgreSQL 新手。

我有一个函数

CREATE OR REPLACE FUNCTION func1 ( a_person_id integer) RETURNS TABLE (granted_group_id varchar(10)) AS $body$

          WITH v_granted_group_list AS (
          SELECT DISTINCT a.group_id 
                FROM a_table a
               )
        SELECT v.group_id FROM v_granted_group_list v;

$body$
LANGUAGE sql;

我想在其他函数 func2 中使用它的输出。

我尝试按照以下代码执行此操作,但出现错误。

我们可以使用什么来代替 v_access_groups 数组?

CREATE OR REPLACE FUNCTION func2 ( a_person_id IN integer,mhrc_emp_no IN varchar(50)) 
 RETURNS TABLE (granted_group_id varchar(10)) AS $body$
DECLARE

   v_access_groups varchar[];
BEGIN

      v_access_groups := func1(a_person_id);
      ---- this gives error
      ---ERROR:  malformed array literal: "LCCHG"
      ----DETAIL:  Array value must start with "{" or dimension information.
      --------CONTEXT:  PL/pgSQL function func2(integer,character varying) line 14 at SQL statement

      -- what can we you in place of v_access_groups array
    RETURN v_access_groups;
  END;
$body$
LANGUAGE PLPGSQL;

我想在选择查询的另一个函数中使用 func2 的结果

CREATE OR REPLACE FUNCTION func3 ( a_blurb_id integer, a_person_id integer,mhrc_emp_no varchar(20)) RETURNS boolean AS $body$
DECLARE

     v_acc_count         numeric;
     v_accessAllowed     boolean:=FALSE;
BEGIN
    SELECT COUNT(*) INTO v_acc_count
    FROM table1 agfa
    where  agfa.group_id IN (
        SELECT TO_CHAR(column_value) AS group_id
        FROM TABLE(func2(a_person_id,mhrc_emp_no))
    );
    RETURN TRUE;
  END;
$body$
LANGUAGE PLPGSQL;

如何在 PostgreSQL 中实现这一目标?

最佳答案

您可以像使用表一样在查询中使用集合返回函数(表函数)。

因此,要将结果分配给名为 v_access_groupstext[],您可以按以下步骤操作:

SELECT array_agg(granted_group_id) INTO v_access_groups FROM func1(a_person_id);

但是你的func2应该只包含:

RETURN QUERY SELECT * FROM func1(a_person_id);

如果省略 TABLE(...) 表达式,您的 func3 应该可以工作 - 只需将函数视为表格,无需其他语法。

关于database - 如何从 PostgreSQL 中的另一个函数调用表函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45454923/

相关文章:

PostgreSQL : Call a psql function with the return of a Select as a parameter

postgresql - 如何将参数传递给用 PL/pgSQL 编写的查询?

mysql - SQL 看不到别名

c# - 在 SQL Server 中以编程方式创建数据库

database - Dynamo DB 中的多个属性作为哈希键

postgresql - Python3 中 psycopg2 游标的问题

mysql - 数据库网页前端

sql - 字符串的 FIND_IN_SET 示例

sql - 如何将结果集转换为数组?

php - 适用于写读密集型站点的良好 NoSQL 数据库