Skip to Main Content

Java Development Tools

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

ViewObject with Bind Variables in DB2

JaveruJul 19 2018 — edited Jul 19 2018

Hello gurus,

My name is Marc. I'm facing an issue using ADF in JDEV 12.2.1.3 and also in 12.1.3 when working with DB2 view objects.

Whenever I add a where clause with a Bind Variable, I get the following error when pushing Test and Explain button:

java.sql.SQLException: [FMWGEN][DB2 JDBC Driver][DB2]NUMBER OF HOST VARIABLES SPECIFIED <> NUMBER OF PARAMETER MARKERS

There is only one parameter and one bind variable. Here is the source of my ViewObject:

<ViewObject

  xmlns="http://xmlns.oracle.com/bc4j"

  Name="MyView"

  Version="12.1.3.10.8"

  InheritPersonalization="merge"

  BindingStyle="JDBC"

  CustomQuery="true"

  PageIterMode="Full">

  <DesignTime>

    <Attr Name="_isExpertMode" Value="true"/>

  </DesignTime>

  <Variable

    Name="P_IDD"

    Kind="where"

    Type="java.lang.Integer">

  </Variable>

  <SQLQuery><![CDATA[SELECT MyTable.ID,

       MyTable.FIELD1,

       MyTable.FIELD2 

FROM  MY_TABLE MyTable

WHERE MyTable.ID = :P_IDD]]></SQLQuery>

In the part of source code I attach you can see there is a Variable called P_IDD and the same variable is the only one being used in the where clause of my SQL query.

If regardless of  that I go on with my application, wich is a simple bounded flow with ExecuteWithParameters method and a jspx page with an ADF form to display the record selected, the ExecuteWithParameters method fails, giving me this exception:

oracle.jbo.InvalidOperException: JBO-25070: La variable de parámetro de cláusula where P_IDD necesita una matriz de índice ordinal.

  at oracle.jbo.server.ViewRowSetImpl.convertNamedWhereClauseParam(ViewRowSetImpl.java:4975)

  at oracle.jbo.server.ViewRowSetImpl.getParameters(ViewRowSetImpl.java:7033)

  at oracle.jbo.server.ViewRowSetImpl.getRowFilter(ViewRowSetImpl.java:684)

  at oracle.jbo.server.ViewRowSetImpl.execute(ViewRowSetImpl.java:1262)

  at oracle.jbo.server.ViewRowSetImpl.executeQueryForMasters(ViewRowSetImpl.java:1665)

  at oracle.jbo.server.ViewRowSetImpl.executeQueryForMode(ViewRowSetImpl.java:1549)

  at oracle.jbo.server.ViewRowSetImpl.executeQuery(ViewRowSetImpl.java:1529)

  at oracle.jbo.server.ViewObjectImpl.executeQuery(ViewObjectImpl.java:7728)

  at oracle.adf.model.bc4j.DCJboDataControl.executeIteratorBindingWithParams(DCJboDataControl.java:3171)

  at oracle.jbo.uicli.binding.JUCtrlActionBinding.doIt(JUCtrlActionBinding.java:1593)

  at oracle.adf.model.binding.DCDataControl.invokeOperation(DCDataControl.java:2218)

  at oracle.jbo.uicli.binding.JUCtrlActionBinding.invoke(JUCtrlActionBinding.java:784)

  at oracle.adf.controller.v2.lifecycle.PageLifecycleImpl.executeEvent(PageLifecycleImpl.java:410)

  at oracle.adfinternal.view.faces.model.binding.FacesCtrlActionBinding._execute(FacesCtrlActionBinding.java:254)

  at oracle.adfinternal.view.faces.model.binding.FacesCtrlActionBinding.execute(FacesCtrlActionBinding.java:212)

  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

  at java.lang.reflect.Method.invoke(Method.java:606)

  at com.sun.el.parser.AstValue.invoke(AstValue.java:254)

  at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)

  at oracle.adf.controller.internal.util.ELInterfaceImpl.invokeMethod(ELInterfaceImpl.java:181)

  at oracle.adfinternal.controller.activity.MethodCallActivityLogic.execute(MethodCallActivityLogic.java:186)

  at oracle.adfinternal.controller.engine.ControlFlowEngine.executeActivity(ControlFlowEngine.java:1241)

  at oracle.adfinternal.controller.engine.ControlFlowEngine.doRouting(ControlFlowEngine.java:1087)

  at oracle.adfinternal.controller.engine.ControlFlowEngine.doRouting(ControlFlowEngine.java:979)

  at oracle.adfinternal.controller.engine.ControlFlowEngine.invokeTaskFlow(ControlFlowEngine.java:253)

  at oracle.adfinternal.controller.application.RemoteTaskFlowCallRequestHandler.invokeTaskFlowByUrl(RemoteTaskFlowCallRequestHandler.java:103)

  at oracle.adfinternal.controller.application.RemoteTaskFlowCallRequestHandler.doCreateView(RemoteTaskFlowCallRequestHandler.java:64)

  at oracle.adfinternal.controller.application.BaseRequestHandlerImpl.createView(BaseRequestHandlerImpl.java:59)

  at org.apache.myfaces.trinidadinternal.application.InternalViewHandlingStrategy.createView(InternalViewHandlingStrategy.java:48)

  at com.sun.faces.application.view.MultiViewHandler.createView(MultiViewHandler.java:160)

  at javax.faces.application.ViewHandlerWrapper.createView(ViewHandlerWrapper.java:170)

  at org.apache.myfaces.trinidadinternal.application.ViewHandlerImpl.createView(ViewHandlerImpl.java:108)

  at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._restoreView(LifecycleImpl.java:847)

  at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:397)

  at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:225)

  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

  at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)

  at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)

  at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)

  at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)

  at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:192)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:105)

  at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:502)

  at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)

  at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:502)

  at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:327)

  at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:229)

  at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:137)

  at java.security.AccessController.doPrivileged(Native Method)

  at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)

  at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460)

  at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:120)

  at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:217)

  at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:81)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:220)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3436)

  at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402)

  at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

  at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)

  at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)

  at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285)

  at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201)

  at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)

  at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572)

  at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)

  at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)

  at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)

All that is using Weblogic DB2 JDBC Driver (weblogic.jdbc.db2.DB2Driver).

I've also tried using IBM DB2 Driver (com.ibm.db2.jcc.DB2Driver) and no success either, but the errors I'm getting instead are tthe following:

When I hit the Test and explain button:

com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-313, SQLSTATE=07004, SQLERRMC=null, DRIVER=3.57.82

When I execute my flow (same as with the other driver):

oracle.jbo.InvalidOperException: JBO-25070: La variable de parámetro de cláusula where P_IDD necesita una matriz de índice ordinal.

  at oracle.jbo.server.ViewRowSetImpl.convertNamedWhereClauseParam(ViewRowSetImpl.java:4975)

  at oracle.jbo.server.ViewRowSetImpl.getParameters(ViewRowSetImpl.java:7033)

  at oracle.jbo.server.ViewRowSetImpl.getRowFilter(ViewRowSetImpl.java:684)

  at oracle.jbo.server.ViewRowSetImpl.execute(ViewRowSetImpl.java:1262)

  at oracle.jbo.server.ViewRowSetImpl.executeQueryForMasters(ViewRowSetImpl.java:1665)

  at oracle.jbo.server.ViewRowSetImpl.executeQueryForMode(ViewRowSetImpl.java:1549)

  at oracle.jbo.server.ViewRowSetImpl.executeQuery(ViewRowSetImpl.java:1529)

  at oracle.jbo.server.ViewObjectImpl.executeQuery(ViewObjectImpl.java:7728)

  at oracle.adf.model.bc4j.DCJboDataControl.executeIteratorBindingWithParams(DCJboDataControl.java:3171)

  at oracle.jbo.uicli.binding.JUCtrlActionBinding.doIt(JUCtrlActionBinding.java:1593)

  at oracle.adf.model.binding.DCDataControl.invokeOperation(DCDataControl.java:2218)

  at oracle.jbo.uicli.binding.JUCtrlActionBinding.invoke(JUCtrlActionBinding.java:784)

  at oracle.adf.controller.v2.lifecycle.PageLifecycleImpl.executeEvent(PageLifecycleImpl.java:410)

  at oracle.adfinternal.view.faces.model.binding.FacesCtrlActionBinding._execute(FacesCtrlActionBinding.java:254)

  at oracle.adfinternal.view.faces.model.binding.FacesCtrlActionBinding.execute(FacesCtrlActionBinding.java:212)

  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

  at java.lang.reflect.Method.invoke(Method.java:606)

  at com.sun.el.parser.AstValue.invoke(AstValue.java:254)

  at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)

  at oracle.adf.controller.internal.util.ELInterfaceImpl.invokeMethod(ELInterfaceImpl.java:181)

  at oracle.adfinternal.controller.activity.MethodCallActivityLogic.execute(MethodCallActivityLogic.java:186)

  at oracle.adfinternal.controller.engine.ControlFlowEngine.executeActivity(ControlFlowEngine.java:1241)

  at oracle.adfinternal.controller.engine.ControlFlowEngine.doRouting(ControlFlowEngine.java:1087)

  at oracle.adfinternal.controller.engine.ControlFlowEngine.doRouting(ControlFlowEngine.java:979)

  at oracle.adfinternal.controller.engine.ControlFlowEngine.invokeTaskFlow(ControlFlowEngine.java:253)

  at oracle.adfinternal.controller.application.RemoteTaskFlowCallRequestHandler.invokeTaskFlowByUrl(RemoteTaskFlowCallRequestHandler.java:103)

  at oracle.adfinternal.controller.application.RemoteTaskFlowCallRequestHandler.doCreateView(RemoteTaskFlowCallRequestHandler.java:64)

  at oracle.adfinternal.controller.application.BaseRequestHandlerImpl.createView(BaseRequestHandlerImpl.java:59)

  at org.apache.myfaces.trinidadinternal.application.InternalViewHandlingStrategy.createView(InternalViewHandlingStrategy.java:48)

  at com.sun.faces.application.view.MultiViewHandler.createView(MultiViewHandler.java:160)

  at javax.faces.application.ViewHandlerWrapper.createView(ViewHandlerWrapper.java:170)

  at org.apache.myfaces.trinidadinternal.application.ViewHandlerImpl.createView(ViewHandlerImpl.java:108)

  at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._restoreView(LifecycleImpl.java:847)

  at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:397)

  at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:225)

  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

  at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)

  at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)

  at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)

  at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)

  at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:192)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:105)

  at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:502)

  at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)

  at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:502)

  at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:327)

  at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:229)

  at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:137)

  at java.security.AccessController.doPrivileged(Native Method)

  at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)

  at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460)

  at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:120)

  at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:217)

  at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:81)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:220)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)

  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)

  at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3436)

  at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402)

  at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

  at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)

  at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)

  at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285)

  at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201)

  at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)

  at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572)

  at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)

  at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)

  at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)

- Am I doing something wrong? same example but using Oracle DB works like a charm.

- Is it some kind of limitation of ADF using DB2? Or perhaps a BUG in ADF that could be patch in future releases? Perhaps I'm not using the right DB2 drivers?

- Do you know a possible workarround? If I create the view object without the where clause and the bind variable it works fine, even if I set programatically the where clause to the view object, but for my use case I need to use the forementioned flow and the build in ExecuteWithParameters method.

Thanks a lot.

Marc

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 16 2018
Added on Jul 19 2018
3 comments
281 views