2016-03-29 7 views
1

Ich schreibe einen Bericht in BIRT. Ich habe zwei Eingabeparameter in meinem Datensatz.Parameter mehrfach verwenden

Der zweite Parameter möchte ich zweimal in meinem wo Klausel verwenden. Ich fand, dass ich Cam dies unter Verwendung einer mit Klausel tun. Beachten Sie, das ist eine Postgresql-Datenbank, so dass ich von Dual nicht brauche.

My SQL ist wie folgt:

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" =''))` 

Wenn ich versuche, dies zu laufen oder die Ergebnisse in BIRT-Bildschirm bearbeiten Datensatz Vorschau bekomme ich folgende Fehlermeldung:

Error happened while running the report. at .... Caused by: org.eclipse.birt.report.data.adapter.api.AdapterException: An exception occurred during processing. Please see the following message for details: Failed to prepare the query execution for the data set: user Cannot get the result set metadata. org.eclipse.birt.report.data.oda.jdbc.JDBCException: SQL statement does not return a ResultSet object. SQL error #1:ERROR: invalid reference to FROM-clause entry for table "user" Hint: There is an entry for table "user", but it cannot be referenced from this part of the query. Position: 252;

Ich kann nicht geh dadurch. Von allem, was ich gesehen habe, sollte es funktionieren.

+0

Unrelated, aber: Sie können den CTE tun noch kürzer: 'mit params (sname, ename) als (Werte (?,?)) ... ' –

+0

Mögliches Duplikat von [Das Mischen von expliziten und impliziten Joins schlägt fehl mit" Es gibt einen Eintrag für Tabelle ... aber es kann nicht von diesem Teil der Abfrage aus referenziert werden "] (http: //stackoverflow.com/questions/6347897/mixing-explicit-and-implicit-join-fails-with-there-is-anentry-for-table-b) –

Antwort

0

Sie können mehrere Parameter in Ihrer SQL-Abfrage in Birt hinzufügen und einen Eingabeparameter von Birt beliebig oft wiederverwenden. Compare my answer to this question.

So können Sie Ihre Abfrage ohne die with-clause schreiben und die Vermischung von expliziten verhindern und implizite verbindet:

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 (? ='')) 
+0

Diese Art von arbeitete. Obwohl Birt nicht aufging, war mein zweiter Parameter = ''. Also habe ich den Parameter auf null gesetzt und das Ende der where-Klausel auf 'select" user "geändert." FullName "," user "." Address1 "," user "." Address2 "," user "." Stadt "," Provinzen "." Abkürzung "," Benutzer "." Postleitzahl "," Kunde "." Firmenname " von" Benutzer " LINKER JOIN" Kunde "auf" Benutzer "." Klient "=" Klient ". "ID" LINKE VERBINDUNG "Provinzen" auf "Benutzer". "Provinz" = "Provinzen". "ID" WHERE "Benutzer". "FullName"> =? und (("user". "fullName" <=?) oder (? ist null)) ' – farley

+0

Ich habe jetzt alles gelöst. Vielen Dank für Ihre Hilfe. Ich wünschte, ich hätte deine frühere Lösung gefunden. – farley