Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-2131

Missing IN or OUT parameter exception with OracleDictionary

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.1.1
    • Fix Version/s: 2.0.2, 2.1.2, 2.2.1.1, 2.2.3, 2.3.0
    • Component/s: jdbc
    • Labels:
      None
    • Environment:
      Windows with Oracle 11g
    • Patch Info:
      Patch Available

      Description

      We have generate query with

      Query q = em.createQuery("select e._name, e._id, sum(case when e._status=:pending then e._count else 0 end) from Exceptions e, Historty h where e._guid = :guid and .....
      then set paramenters for both :pending (in select) and :guid (in where), and call q.setMaxResults(100);

      with DB2, everything works fine, and DBDictionary.getSelects() and SQLBuffer.append() will invoke correctly and set parameter of :pending

      with Oracle implementation, OracleDictionary.getSelects(Select sel, boolean distinctIdentifiers, boolean forUpdate) will invoke and SQLBuffer.getSQL() get to call (as two if checks are not satisfied and gos to create a new SQLBuffer instance), but this time :pending parameter will missing to add to _param List,
      Eventually, we'll get Missing IN or OUT parameter exception from to execute query by preparedStatement

      This bug exist in both this branch and trunk.
      We have a work around, after SQLBuffer.getSQL() call, add some code to reset _param list.

        Attachments

        1. OPENJPA-2131.22x.patch
          3 kB
          Albert Lee
        2. OracleInOutParameterIssue.patch
          3 kB
          Zilin Chen

          Activity

            People

            • Assignee:
              allee8285 Albert Lee
              Reporter:
              zilin_chen Zilin Chen
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: