我是PostgreSQL的新手,我必须在SSRS报告中使用内联查询来从PostgreSQL DB中获取数据。
场景是:根据报表参数的选定值,我需要从不同的表中获取输出。请参阅以下示例内联查询。
DO
$do$
BEGIN
IF ($1 = 'Monthly') THEN
SELECT *
FROM table1;
ELSE
SELECT *
FROM table2;
END IF;
END
$do$
以上查询给出了错误
错误:查询没有结果数据的目的地 SQL状态:42601 提示:如果要丢弃SELECT的结果,请改用PERFORM。 上下文:PL / pgSQL函数inline_code_block第6行SQL语句
请注意,我无法使用存储过程或函数来检索所需数据,我只能使用内联查询。
有人可以告诉我如何解决上述错误吗?
答案 0 :(得分:7)
您的示例有两个问题 - DO语句(匿名阻止)不支持
PostgreSQL不支持T-SQL或MS-SQL中使用的称为未绑定查询的技术。每个查询都必须具有指定的目标。您可以改为使用函数(table1
和table2
应具有相同的结构):
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');
答案 1 :(得分:2)
假设表具有相同的列结构,您可以使用union在单个查询中执行这两个选项。
<Window x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<WindowsFormsHost Name="f_WindowsFormsHost"/>
</Window>
答案 2 :(得分:0)
您可以创建一个临时表来获取结果,但不能传递参数:
DO
$$
BEGIN
IF <> THEN
CREATE TEMPORARY TABLE foo AS
SELECT *FROM ...
ELSE
....
END IF;
END
$$
SELECT * FROM FOO;