【发布时间】:2019-07-26 11:10:25
【问题描述】:
在 PostgreSQL 11 数据库中,我有 6 列的表。 Next 函数返回已定义列的静态数量。
CREATE FUNCTION CALCULATION(INTEGER)
RETURNS TABLE(
ORGANIZATION_ID INT4,
ORGANIZATION_NAME VARCHAR,
ORGANIZATION_RANG INT4,
PARENT_ORGANIZATION_ID INT4,
PARENT_ORGANIZATION_NAME VARCHAR,
PARENT_ORGANIZATION_RANG INT4
) AS $$
SELECT * FROM ANALYTICS;
$$ LANGUAGE SQL;
如何在 Postgres 11 中创建一个 SQL 函数,根据传入的参数返回具有动态列数的结果集?
例如,如果我调用SELECT * FROM CALCULATION(2);,函数会返回前 2 列。
如果使用 SQL 函数无法做到这一点,是否可以使用 PL/pgSQL 函数?
【问题讨论】:
-
不,这在 Postgres 中是不可能的。在这些情况下,我倾向于将“动态列”作为单个 JSON 值返回 - 也许这对您也有用?
-
@a_horse_with_no_name 听起来很有趣,你能发个例子吗?
-
如果您提供更多关于您需要什么样的“动态列”以及如何计算它们的详细信息。
-
@a_horse_with_no_name 正如我之前所说的,在我的情况下,
ANALYTICS表有 6 列。例如,如果我在函数中将2作为参数传递,我想要这样的json[{"organization_id": 15, "organization_name": "Google"}, {"organization_id": 16, "organization_name": "Apple"}, {"organization_id": 17, "organization_name": "Tesla"}]。换句话说,一个对象数组。每个对象对应于数据库中的一条记录。由于我将 2 作为参数传递,因此每个对象内将有 2 列。希望你能理解我。 -
听起来您总是想选择可用列的子集。那么 Morris de Oryx 的答案似乎就是您要寻找的。span>
标签: sql postgresql stored-functions