Repository navigation
[OPENJPA-3028] Stored procedures on Oracle: REF CURSOR and numeric OUT types - #279
Merged
Merged
Conversation
… Oracle Oracle reports a SYS_REFCURSOR parameter of a stored procedure with the generic type OTHER and the type name REF CURSOR, and its driver rejects registerOutParameter(OTHER) with ORA-17004, so no procedure returning a result set through a REF CURSOR could be called. OracleDictionary now registers such parameters as Types.REF_CURSOR; the existing handling of cursor OUT parameters then reads the result set.
getOutputParameterValue() returned the value as the driver reported it and ignored the Java type the parameter was registered with. On Oracle an INTEGER parameter is a NUMBER, so an OUT parameter registered as Integer came back as a BigDecimal. A numeric value is now converted to the registered numeric type. The conversion to an integral type (Byte, Short, Integer, Long, BigInteger) is exact: a value with a fraction or outside the range of the registered type is returned unchanged, as before, instead of being truncated. A conversion to Float or Double follows the usual floating point rounding. Non-numeric values are returned unchanged. This applies to all databases.
solomax
approved these changes
Nov 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Registers Oracle
SYS_REFCURSORparameters asREF_CURSOR(failed with ORA-17004). Numeric OUT values are returned in their registered type, converting only when exact, so nothing is truncated.Oracle TCK: +19 passing tests, no regressions.