You are not logged in.
Hallo zusammen,
ich würde gerne einen Datenquellen Parameter mit einer Mehrfachselektion in einer dynamischen Liste einbauen. Sprich einfach übergeben als Parameter an ein aufgerufenes Package in der Datenbank. Ich würde erwarten, dass aus dem Parameter ein String kommt, der z.B. folgendermaßen aufgebaut ist: 'Element1, Element2, Element3'. Dies scheint nicht der Fall zu sein.
Ich konnte es leider bisher nicht erreichen herauszufinden, was bei welchen Einstellungen und Aufrufen $!{Parameter}, $P{Parameter} etc. herauskommt. Gibt es hierzu eine Auflistung/Doku etc. oder kann mir jemand beantworten, wie ich in diesem Anwendungsfall vorgehen kann?
Meine eigene bisher einzige funktionierende Lösung ist sehr unschön mithilfe einer $X{IN, column, parameterkey}-Function und einiger Interaktionen mit der Datenbank und einer Listenaggregation. Ich würde hoffen, dass es auch eine schönere Lösung gibt und freue mich, falls mir jemand weiterhelfen kann.
Viele Grüße
Lennart Seeger
Offline
Hallo Lennart,
Du kannst mit $X{...} den mehrfach-Parameter verwenden. Siehe dazu auch hier:
https://reportserver.net/en/guides/admi … arameters/
Alternativ kannst Du in der Abfrage
SELECT *
FROM users
WHERE id IN ($!{param})
verwenden.
Beachte die Limits der Datenbank für IN Ausdrücke.
Gruß
Marcel
Offline
Hallo Marcel,
erstmal vielen Dank für die Antwort.
Ist es auch möglich, die Ausgabe einfach als String zu erhalten? Beispielsweise als kommaseparierte Liste? Ich würde gerne nur diesen String an ein Package in einer Datenbank senden, die dann nur ein Subset der Daten an den Reportserver sendet.
Ich habe eine etwas unschöne mögliche Vorgehensweise mit einer behelfsmäßigen Tabelle und einem Listagg, hoffe aber, dass ich den Parameter auch direkt als String auslesen kann. Ist das möglich?
Beste Grüße
Lennart Seeger
Offline
Hallo Lennart,
kannst Du das etwas genauer zeigen/beschreiben?
Du kannst den Parameter $!{PARAM} auch in einen String laufen lassen. Der ! Parameter wird vor der SQL Ausführung ins SQL eingebettet.
-- 1. Beispiel
SELECT '$!{PARAM}' PARM FROM DUAL
-- 2. Beispiel
SELECT * FROM TABLE(PCK.MY_TABLE_FUNC('$!{PARAM}'))
Viele Grüße
Marcel
Offline
Hallo Marcel,
danke dir erstmal. Ich habe den Ausdruck soeben ausprobiert, bekomme jedoch den Fehler:
Query konnte nicht ausgeführt werden: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden
Könnte es an der Version des Reportservers liegen? Bei mir handelt es sich noch um Version RS3.7.1-6052. Das Log anbei. Die Inhalte des Parameters waren 'vier' und 'zwei'. Wenn ich die Anführungszeichen entferne, bekomme ich eine Spalte mit dem Namen 'VIER' und dem Inhalt vier und eine Spalte mit dem Namen 'ZWEI' und Inhalt zwei. Dies ist aber wieder nicht direkt eine Liste.
Viele Grüße
Lennart
net.datenwerke.gxtdto.client.servercommunication.exceptions.NonFatalException: Query konnte nicht ausgeführt werden: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden<br>
<br> at net.datenwerke.rs.base.server.table.TableReportUtilityServiceImpl.loadColumnDefinition(TableReportUtilityServiceImpl.java:367)
<br> at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)
<br> at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)
<br> at jdk.internal.reflect.GeneratedMethodAccessor142.invoke(Unknown Source)
<br> at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
<br> at java.base/java.lang.reflect.Method.invoke(Method.java:566)
<br> at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:587)
<br> at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:333)
<br> at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)
<br> at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)
<br> at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:303)
<br> at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)
<br> at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)
<br> at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373)
<br> at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
<br> at javax.servlet.http.HttpServlet.service(HttpServlet.java:555)
<br> at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
<br> at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:109)
<br> at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)
<br> at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:290)
<br> at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:280)
<br> at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:184)
<br> at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:89)
<br> at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
<br> at com.google.inject.persist.PersistFilter.doFilter(PersistFilter.java:94)
<br> at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
<br> at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:121)
<br> at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133)
<br> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
<br> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
<br> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
<br> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
<br> at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
<br> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
<br> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
<br> at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
<br> at org.apache.catalina.valves.StuckThreadDetectionValve.invoke(StuckThreadDetectionValve.java:185)
<br> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
<br> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
<br> at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
<br> at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
<br> at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
<br> at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1790)
<br> at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
<br> at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
<br> at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
<br> at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
<br> at java.base/java.lang.Thread.run(Thread.java:834)
<br>Caused by: net.datenwerke.rs.core.service.reportmanager.exceptions.ReportExecutorException: Query konnte nicht ausgeführt werden: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden<br>
<br> at net.datenwerke.rs.base.service.datasources.table.impl.TableDBDataSource.open(TableDBDataSource.java:275)
<br> at net.datenwerke.rs.base.service.reportengines.table.TableReportEngine.createReport(TableReportEngine.java:278)
<br> at net.datenwerke.rs.base.service.reportengines.table.TableReportEngine.doExecuteNormal(TableReportEngine.java:203)
<br> at net.datenwerke.rs.base.service.reportengines.table.TableReportEngine.doExecuteNormal(TableReportEngine.java:158)
<br> at net.datenwerke.rs.base.service.reportengines.table.TableReportEngine.doExecute(TableReportEngine.java:89)
<br> at net.datenwerke.rs.core.service.reportmanager.engine.ReportEngine.execute(ReportEngine.java:143)
<br> at net.datenwerke.rs.core.service.reportmanager.ReportExecutorServiceImpl.execute(ReportExecutorServiceImpl.java:211)
<br> at net.datenwerke.rs.core.service.reportmanager.ReportExecutorServiceImpl.execute(ReportExecutorServiceImpl.java:144)
<br> at net.datenwerke.rs.core.service.reportmanager.ReportExecutorServiceImpl.execute(ReportExecutorServiceImpl.java:136)
<br> at net.datenwerke.rs.core.service.reportmanager.ReportExecutorServiceImpl.execute(ReportExecutorServiceImpl.java:131)
<br> at net.datenwerke.rs.base.service.reportengines.table.TableReportUtilsImpl.getReturnedColumns(TableReportUtilsImpl.java:201)
<br> at net.datenwerke.rs.base.service.reportengines.table.TableReportUtilsImpl.getReturnedPlainColumns(TableReportUtilsImpl.java:155)
<br> at net.datenwerke.rs.base.server.table.TableReportUtilityServiceImpl.loadColumnDefinition(TableReportUtilityServiceImpl.java:363)
<br> ... 47 more
<br>Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden<br>
<br> at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
<br> at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
<br> at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1052)
<br> at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:537)
<br> at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:255)
<br> at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:610)
<br> at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:253)
<br> at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:86)
<br> at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:765)
<br> at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:921)
<br> at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1099)
<br> at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3640)
<br> at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1384)
<br> at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3687)
<br> at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165)
<br> at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:1418)
<br> at net.datenwerke.rs.base.service.datasources.table.impl.TableDBDataSource.open(TableDBDataSource.java:270)
<br> ... 59 more
<br>Caused by: Error : 923, Position : 43, Sql = SELECT * FROM (SELECT * FROM (SELECT ''vier', 'zwei'' PARM FROM DUAL<br>) wrappedQry) limitQry WHERE ROWNUM < 0 /* user: 139175210 */ /* report: 142248709 */ /* token: 3d8c6622-9112-431c-bfe1-fdaeb512b01f */ /* currentuser: 139175210 */ , OriginalSql = SELECT * FROM (SELECT * FROM (SELECT ''vier', 'zwei'' PARM FROM DUAL<br>) wrappedQry) limitQry WHERE ROWNUM < 0 /* user: 139175210 */ /* report: 142248709 */ /* token: 3d8c6622-9112-431c-bfe1-fdaeb512b01f */ /* currentuser: 139175210 */ , Error Msg = ORA-00923: Schlüsselwort FROM nicht an erwarteter Stelle gefunden<br>
<br> at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498)
<br> ... 75 more
<br>
Offline
Hallo Lennart,
nein der Fehler bedeutet, dass im SQL ein Fehler ist.
Gruß
Marcel
Offline
Hallo Marcel,
danke erstmal. Ich habe es mir gerade nochmal angeschaut. Ganz unten in der Fehlermeldung wird fehlerhaftes SQL angezeigt, welches Zeichen in XML?! Kodierung anzeigt. Die habe ich nicht selbst geschrieben. Also müsste es da doch an der Transformation der Variable liegen, oder?
Viele Grüße
Lennart
Offline
Um einen Parameter mit Mehrfachauswahl in einer dynamischen Liste an ein Datenbankpaket zu übergeben, stellen Sie sicher, dass Ihr Parameter korrekt formatiert ist. Verwenden Sie `$X{IN, column, parameterkey}` zur Handhabung von Listen. Überprüfen Sie die Dokumentation Ihrer Datenbank für spezifische Informationen zur Parameterverarbeitung.
Skilled software engineer specializing in custom adapter development and system integration. Proficient in debugging, configuration management, and optimizing job scheduling systems. Explore career opportunities at Indeed Jobs
Offline