Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
THRUST SERVICES & TOOLS
CLOUD EDITIONS
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
Using a parameter in SQL Query
Jateel
Hi there<br />
<br />
Im using Freemarker (and fmpp) to generate a BIRT Report. TThe Birt report query makes use of a parameter called run_id to determine what data is used and displayed in a table of the report.<br />
<br />
The below query needs to be used:<br />
<br />
(<br />
select<br />
1 as mismatch,<br />
stagingbalance.bal_period as BAL_PERIOD,<br />
stagingbalance.netting_legal_entity as NETTING_LEGAL_ENTITY,<br />
sum(stagingbalance.bal_amount_ytd_close) as SUM,<br />
abs(sum(stagingbalance.bal_amount_ytd_close)),<br />
stagingbalance.bal_net as BAL_NET,<br />
count(*)<br />
from stagingtable<br />
left join stagingbalance on stagingtable.karta_staging_table_id = stagingbalance.karta_staging_table_id<br />
left join faslineresult_stagingbalance on stagingbalance.id = faslineresult_stagingbalance.stagingbalances_id<br />
left join faslineresult on faslineresult_stagingbalance.faslineresults_id = faslineresult.id<br />
left join faslinetemplate on faslineresult.faslinetemplate_id = faslinetemplate.id<br />
where stagingtable.faspackrun_id = <span style='color: #FF0000'><strong class='bbc'>run_id</strong></span><br />
and stagingbalance.account_code in ('503300')<br />
group by<br />
stagingbalance.bal_period,<br />
stagingbalance.netting_legal_entity,<br />
stagingbalance.bal_net<br />
having ( (stagingbalance.bal_net in ('EXPENSE') and sum(stagingbalance.bal_amount_ytd_close) < 0)<br />
or (stagingbalance.bal_net in ('INCOME') and sum(stagingbalance.bal_amount_ytd_close) >= 0) )<br />
)<br />
UNION<br />
(<br />
select<br />
0 as mismatch,<br />
stagingbalance.bal_period,<br />
stagingbalance.netting_legal_entity,<br />
sum(stagingbalance.bal_amount_ytd_close),<br />
abs(sum(stagingbalance.bal_amount_ytd_close)),<br />
stagingbalance.bal_net,<br />
count(*)<br />
from stagingtable<br />
left join stagingbalance on stagingtable.karta_staging_table_id = stagingbalance.karta_staging_table_id<br />
left join faslineresult_stagingbalance on stagingbalance.id = faslineresult_stagingbalance.stagingbalances_id<br />
left join faslineresult on faslineresult_stagingbalance.faslineresults_id = faslineresult.id<br />
left join faslinetemplate on faslineresult.faslinetemplate_id = faslinetemplate.id<br />
where stagingtable.faspackrun_id = <span style='color: #FF0000'><strong class='bbc'>run_id</strong></span><br />
and stagingbalance.account_code in ('503300')<br />
group by<br />
stagingbalance.bal_period,<br />
stagingbalance.netting_legal_entity,<br />
stagingbalance.bal_net<br />
having ( not (stagingbalance.bal_net in ('EXPENSE') and sum(stagingbalance.bal_amount_ytd_close) < 0)<br />
and not (stagingbalance.bal_net in ('INCOME') and sum(stagingbalance.bal_amount_ytd_close) >= 0) )<br />
)<br />
<br />
Note:<br />
The parameter is called run_id and is used in the query twice. I dont have a problem when a query only uses the parameter once (in such cases i replace the "run_id" with "?" and add the parameter do the dataset, this works). <br />
<br />
Im do not know how to use the same parameter twice in one query because doing the question mark thing, results in an error (something about the value of param2 being not defined)<br />
<br />
Im quite new to BIRT and Freemarker (and teh working world). I would very much appreciate it if you could help me.<br />
<br />
Thanks in advance<br />
JJ
Find more posts tagged with
Comments
XFabien
Hello Jateel,
Did u verifiy the type of the parameter is the same? or if use a Report parameter, u need is just select the same parameter. U should try more i think, it's not so hard.
Good day.
Yao
Jateel
<strong class='bbc'>Hi Yao<br />
<br />
Thank you for the quick reply.<br />
<br />
Ive been trieng several times but am yet to rectify this.<br />
<br />
How would one access the same parameter twice in the query. I've detailed the parameter in the data set XML:</strong><br />
<br />
<list-property name="parameters"><br />
<structure><br />
<property name="name">KARTA_RUNID</property><br />
<property name="paramName">KARTA_RUNID</property><br />
<property name="nativeName"></property><br />
<property name="dataType">integer</property><br />
<property name="nativeDataType">4</property><br />
<property name="position">1</property><br />
<expression name="defaultValue" type="javascript">1</expression><br />
<property name="isInput">true</property><br />
<property name="isOutput">false</property><br />
</structure><br />
</list-property><br />
<br />
F<strong class='bbc'>urthermore in the design value section of the birt report i have:</strong><br />
<br />
<DataSetParameters><br />
<parameter><br />
<design:ParameterDefinition><br />
<design:inOutMode>In</design:inOutMode><br />
<design:attributes><br />
<design:identifier><br />
<design:name></design:name><br />
<design:position>1</design:position><br />
</design:identifier><br />
<design:nativeDataTypeCode>4</design:nativeDataTypeCode><br />
<design:precision>0</design:precision><br />
<design:scale>0</design:scale><br />
<design:nullability>Unknown</design:nullability><br />
<#/design:attributes--><br />
<#/design:ParameterDefinition><br />
<#/parameter><br />
<#/DataSetParameters><br />
<strong class='bbc'><br />
I then also changed the query to (the same parameter with same type to "?"): </strong><br />
<br />
<br />
(<br />
select<br />
1 as mismatch,<br />
stagingbalance.bal_period as BAL_PERIOD,<br />
stagingbalance.netting_legal_entity as NETTING_LEGAL_ENTITY,<br />
sum(stagingbalance.bal_amount_ytd_close) as SUM,<br />
abs(sum(stagingbalance.bal_amount_ytd_close)),<br />
stagingbalance.bal_net as BAL_NET,<br />
count(*)<br />
from stagingtable<br />
left join stagingbalance on stagingtable.karta_staging_table_id = stagingbalance.karta_staging_table_id<br />
left join faslineresult_stagingbalance on stagingbalance.id = faslineresult_stagingbalance.stagingbalances_id<br />
left join faslineresult on faslineresult_stagingbalance.faslineresults_id = faslineresult.id<br />
left join faslinetemplate on faslineresult.faslinetemplate_id = faslinetemplate.id<br />
where stagingtable.faspackrun_id = <strong class='bbc'>?</strong><span style='color: #FF0000'></span><br />
and stagingbalance.account_code in ('503300')<br />
group by<br />
stagingbalance.bal_period,<br />
stagingbalance.netting_legal_entity,<br />
stagingbalance.bal_net<br />
having ( (stagingbalance.bal_net in ('EXPENSE') and sum(stagingbalance.bal_amount_ytd_close) < 0)<br />
or (stagingbalance.bal_net in ('INCOME') and sum(stagingbalance.bal_amount_ytd_close) >= 0) )<br />
)<br />
UNION<br />
(<br />
select<br />
0 as mismatch,<br />
stagingbalance.bal_period,<br />
stagingbalance.netting_legal_entity,<br />
sum(stagingbalance.bal_amount_ytd_close),<br />
abs(sum(stagingbalance.bal_amount_ytd_close)),<br />
stagingbalance.bal_net,<br />
count(*)<br />
from stagingtable<br />
left join stagingbalance on stagingtable.karta_staging_table_id = stagingbalance.karta_staging_table_id<br />
left join faslineresult_stagingbalance on stagingbalance.id = faslineresult_stagingbalance.stagingbalances_id<br />
left join faslineresult on faslineresult_stagingbalance.faslineresults_id = faslineresult.id<br />
left join faslinetemplate on faslineresult.faslinetemplate_id = faslinetemplate.id<br />
where stagingtable.faspackrun_id = <strong class='bbc'>?</strong><span style='color: #FF0000'></span><br />
and stagingbalance.account_code in ('503300')<br />
group by<br />
stagingbalance.bal_period,<br />
stagingbalance.netting_legal_entity,<br />
stagingbalance.bal_net<br />
having ( not (stagingbalance.bal_net in ('EXPENSE') and sum(stagingbalance.bal_amount_ytd_close) < 0)<br />
and not (stagingbalance.bal_net in ('INCOME') and sum(stagingbalance.bal_amount_ytd_close) >= 0) )<br />
)<br />
<br />
<strong class='bbc'>Running the report results in ther following error:</strong><br />
<br />
Table (id = 316): <br />
- Cannot execute the statement.<br />
org.eclipse.birt.report.data.oda.jdbc.JDBCException: SQL statement does not return a ResultSet object.<br />
SQL error #1:No value specified for parameter 2.<br />
;<br />
org.postgresql.util.PSQLException: No value specified for parameter 2. <br />
odaconsumer.CannotExecuteStatement ( 1 time(s) )<br />
detail : org.eclipse.birt.report.engine.api.EngineException: Cannot execute the statement.<br />
org.eclipse.birt.report.data.oda.jdbc.JDBCException: SQL statement does not return a ResultSet object.<br />
SQL error #1:No value specified for parameter 2.<br />
;<br />
org.postgresql.util.PSQLException: No value specified for parameter 2.<br />
at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1199)<br />
at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1178)<br />
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:96)<br />
at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:62)<br />
at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:43)<br />
at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:46)<br />
at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:34)<br />
at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:65)<br />
at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:90)<br />
at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:99)<br />
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:180)<br />
at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:77)<br />
at org.eclipse.birt.report.service.ReportEngineService.runAndRenderReport(ReportEngineService.java:928)<br />
at org.eclipse.birt.report.service.BirtViewerReportService.runAndRenderReport(BirtViewerReportService.java:973)<br />
at org.eclipse.birt.report.service.actionhandler.BirtGetPageAllActionHandler.__execute(BirtGetPageAllActionHandler.java:131)<br />
at org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(AbstractBaseActionHandler.java:90)<br />
at org.eclipse.birt.report.soapengine.processor.AbstractBaseDocumentProcessor.__executeAction(AbstractBaseDocumentProcessor.java:47)<br />
at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.executeAction(AbstractBaseComponentProcessor.java:143)<br />
at org.eclipse.birt.report.soapengine.processor.BirtDocumentProcessor.handleGetPageAll(BirtDocumentProcessor.java:183)<br />
at sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)<br />
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)<br />
at java.lang.reflect.Method.invoke(Unknown Source)<br />
at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.process(AbstractBaseComponentProcessor.java:112)<br />
at org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingImpl.getUpdatedObjects(BirtSoapBindingImpl.java:66)<br />
at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)<br />
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)<br />
at java.lang.reflect.Method.invoke(Unknown Source)<br />
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)<br />
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)<br />
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)<br />
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)<br />
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)<br />
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)<br />
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)<br />
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)<br />
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)<br />
at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(BirtSoapMessageDispatcherServlet.java:265)<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)<br />
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)<br />
at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.service(BirtSoapMessageDispatcherServlet.java:122)<br />
at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180)<br />
at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)<br />
at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:126)<br />
at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)<br />
at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:318)<br />
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)<br />
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)<br />
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)<br />
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)<br />
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)<br />
at org.mortbay.jetty.Server.handle(Server.java:326)<br />
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)<br />
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:939)<br />
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)<br />
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)<br />
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)<br />
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)<br />
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)<br />
Caused by: org.eclipse.birt.data.engine.odaconsumer.OdaDataException: Cannot execute the statement.<br />
org.eclipse.birt.report.data.oda.jdbc.JDBCException: SQL statement does not return a ResultSet object.<br />
SQL error #1:No value specified for parameter 2.<br />
;<br />
org.postgresql.util.PSQLException: No value specified for parameter 2.<br />
at org.eclipse.birt.data.engine.odaconsumer.ExceptionHandler.newException(ExceptionHandler.java:52)<br />
at org.eclipse.birt.data.engine.odaconsumer.ExceptionHandler.throwException(ExceptionHandler.java:108)<br />
at org.eclipse.birt.data.engine.odaconsumer.ExceptionHandler.throwException(ExceptionHandler.java:84)<br />
at org.eclipse.birt.data.engine.odaconsumer.PreparedStatement.execute(PreparedStatement.java:586)<br />
at org.eclipse.birt.data.engine.executor.DataSourceQuery.execute(DataSourceQuery.java:923)<br />
at org.eclipse.birt.data.engine.impl.PreparedOdaDSQuery$OdaDSQueryExecutor.executeOdiQuery(PreparedOdaDSQuery.java:441)<br />
at org.eclipse.birt.data.engine.impl.QueryExecutor.execute(QueryExecutor.java:1103)<br />
at org.eclipse.birt.data.engine.impl.ServiceForQueryResults.executeQuery(ServiceForQueryResults.java:232)<br />
at org.eclipse.birt.data.engine.impl.QueryResults.getResultIterator(QueryResults.java:173)<br />
at org.eclipse.birt.report.engine.data.dte.QueryResultSet.<init>(QueryResultSet.java:98)<br />
at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:168)<br />
at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:265)<br />
at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1890)<br />
at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java:80)<br />
... 57 more<br />
Caused by: org.eclipse.birt.report.data.oda.jdbc.JDBCException: SQL statement does not return a ResultSet object.<br />
SQL error #1:No value specified for parameter 2.<br />
;<br />
org.postgresql.util.PSQLException: No value specified for parameter 2.<br />
at org.eclipse.birt.report.data.oda.jdbc.Statement.executeQuery(Statement.java:471)<br />
at org.eclipse.datatools.connectivity.oda.consumer.helper.OdaQuery.doExecuteQuery(OdaQuery.java:469)<br />
at org.eclipse.datatools.connectivity.oda.consumer.helper.OdaQuery.executeQuery(OdaQuery.java:433)<br />
at org.eclipse.birt.data.engine.odaconsumer.PreparedStatement.execute(PreparedStatement.java:575)<br />
... 67 more<br />
Caused by: org.postgresql.util.PSQLException: No value specified for parameter 2.<br />
at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:146)<br />
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:183)<br />
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)<br />
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)<br />
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)<br />
at org.eclipse.birt.report.data.oda.jdbc.Statement.executeQuery(Statement.java:467)<br />
... 70 more<br />
<br />
<strong class='bbc'><br />
In cases where the query only uses the parametrer once. No errors are shown and it works well.<br />
<br />
You help is much appreciated<br />
<br />
Thank you in advance<br />
Jateel</strong>
Hans_vd
Hi Jateel,
Just put the two "?" in place and create two parameters on the dataset. You can bind the two parameters to the same report parameter.
Or you can take a look at this article:
http://enterprisesmartapps.wordpress.com/2011/01/10/re-using-parameters-in-birt-data-set/
It describes how to re-use dataset parameters using SQL "WITH" clause.
Regards
Hans
Jateel
Hi Hans
I will give it a try.
thank you very much.
Jateel