gpt4 book ai didi

postgresql - 在 PL/pgSQL block 中运行 SELECT

转载 作者:行者123 更新时间:2023-11-29 11:38:22 25 4
gpt4 key购买 nike

我是 PostgreSQL 的新手,我必须在 SSRS 报告中使用内联查询从 PostgreSQL 数据库中获取数据。

场景是:根据报告参数的选定值,我需要从不同的表中获取输出。请参阅下面的示例内联查询。

    DO
$do$

BEGIN
IF ($1 = 'Monthly') THEN

SELECT *
FROM table1;

ELSE

SELECT *
FROM table2;

END IF;

END
$do$

上面的查询给出了错误,

ERROR: query has no destination for result data SQL state: 42601 Hint: If you want to discard the results of a SELECT, use PERFORM instead. Context: PL/pgSQL function inline_code_block line 6 at SQL statement

请注意,我不能使用存储过程或函数来检索所需的数据,我只能使用内联查询。

谁能告诉我如何解决上述错误?

最佳答案

你的例子有两个问题——不支持 DO 语句(匿名 block )

  1. 参数
  2. 返回结果。

PostgreSQL 不支持 T-SQL 或 MS-SQL 中使用的称为未绑定(bind)查询的技术。每个查询都必须有指定的目标。您可以改用函数(table1table2 应该具有相同的结构):

CREATE OR REPLACE FUNCTION foo(frequency)
RETURNS SETOF table1 AS $$
BEGIN
IF $1 = 'Monthly' THEN
RETURN QUERY SELECT * FROM table1;
ELSE
RETURN QUERY SELECT * FROM table2;
END IF;
RETURN;
END;
$$ LANGUAGE plpgsql;

SELECT * FROM foo('Monthly');

关于postgresql - 在 PL/pgSQL block 中运行 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com