多次重复使用参数

时间:2016-03-29 11:33:45

标签: postgresql birt with-statement

我正在BIRT写一份报告。我的数据集上有两个输入参数。

第二个参数我想在 where 子句中使用两次。我发现我使用 with 子句执行此操作。请注意,这是一个postgresql数据库,所以我不需要来自双

我的sql如下:

with "params" as (select ? as "sname", ? as "ename")
select "user"."fullName", "user"."address1", "user"."address2", "user"."city", "provinces"."abbreviation", "user"."postalcode", "client"."companyName"
from "user", "params"
LEFT JOIN "client" on "user"."client" = "client"."id" 
LEFT JOIN "provinces" on "user"."province" = "provinces"."id"
WHERE "user"."fullName" >= "params"."sname" and (("user"."fullName" <= "params"."ename") or ("params"."ename" =''))`

当我尝试在BIRT的编辑数据集界面中运行或预览结果时,我收到以下错误:

  

运行报告时发生错误。       在 ....   引起:org.eclipse.birt.report.data.adapter.api.AdapterException:处理期间发生异常。有关详细信息,请参阅以下消息:   无法为数据集准备查询执行:user   无法获取结果集元数据。       org.eclipse.birt.report.data.oda.jdbc.JDBCException:SQL语句不返回ResultSet对象。   SQL错误#1:错误:对表&#34;用户&#34;的FROM子句条目的无效引用     提示:表&#34; user&#34;有一个条目,但不能从查询的这一部分引用它。     职位:252;

我无法解决这个问题。从我看到的一切都应该有用。

1 个答案:

答案 0 :(得分:0)

您可以在Birt中的SQL-Query中添加多个参数,并根据需要重复使用Birt中的输入参数。 Compare my answer to this question

因此,您可以在不使用with-clause的情况下编写查询,并防止显式和隐式联接的混合:

select "user"."fullName", "user"."address1", "user"."address2", "user"."city", "provinces"."abbreviation", "user"."postalcode", "client"."companyName"
from "user"
LEFT JOIN "client" on "user"."client" = "client"."id" 
LEFT JOIN "provinces" on "user"."province" = "provinces"."id"
WHERE "user"."fullName" >= ? and (("user"."fullName" <= ?) or (? =''))