【发布时间】:2015-07-07 06:10:00
【问题描述】:
我是 PostgreSQL 的新手,我必须在 SSRS 报告中使用内联查询来从 PostgreSQL 数据库中获取数据。
场景是:根据报告参数的选定值,我需要从不同的表中获取输出。请参阅下面的示例内联查询。
DO
$do$
BEGIN
IF ($1 = 'Monthly') THEN
SELECT *
FROM table1;
ELSE
SELECT *
FROM table2;
END IF;
END
$do$
以上查询报错,
错误:查询没有结果数据的目的地 SQL 状态:42601 提示:如果要丢弃 SELECT 的结果,请改用 PERFORM。 上下文:SQL 语句中的 PL/pgSQL 函数 inline_code_block 第 6 行
请注意,我不能使用存储过程或函数来检索所需的数据,我只能使用内联查询。
有人可以告诉我如何解决上述错误吗?
【问题讨论】:
-
选择的结果需要去某处 - 所以你需要把结果放到一个变量中。而且您的代码减少了很多,以至于不再有意义:
if (1 > 0)将始终为真,第二条语句将永远不会被执行。您可以将整个块替换为select * from table1 -
请在下面找到更新后的查询,DO $do$ BEGIN IF ($1 = 'Monthly') THEN SELECT * FROM table1; ELSE SELECT * FROM table2;万一;结束$do$
-
您不能将参数传递给匿名代码块,也不能从中返回结果。所以你的提议永远不会奏效。
-
感谢帕特里克的回复。那么是否有任何解决方法来实现所需的行为?这本来是 SQL Server 中的一个简单查询,但我发现 Postgresql 不支持类似的东西令人失望。
-
嗯,每个 DBMS 都是不同的。您总是会在一个 DBMS 中找到无法直接移植到另一个 DBMS 的东西。我可以说出许多 SQL Server 无法做到但在 Postgres 中非常简单的事情。此外:您也无法在 Oracle 或 DB2 中做类似的事情。
标签: postgresql plpgsql