Problemet här är att Oracles sätt att göra lagrade procedurer inte är JDBC-kompatibelt. Oracles SP:er returnerar resultatuppsättningsdata via OUT-parametrar eller returvärden som är markörer, och de måste hanteras speciellt. Det betyder att du inte kan använda någon av Springs JDBC-grejer som förutsätter överensstämmelse med JDBC, du måste göra det själv.
I praktiken betyder det att du måste använda JdbcTemplate
och CallableStatementCallback
, vilket innebär mycket mer manuell JDBC-kodning än vad du helst skulle vilja, men jag har ännu inte hittat något sätt att undvika detta.
På ett litet åsido så misstänker jag snarare att JDBC-specifikationen skrevs för att överensstämma med Sybase (och, genom associering, SQL Server) sätt att göra saker på, eftersom hur lagrade procedurer hanteras i JDBC är en anmärkningsvärt bra passform för de system (och en dålig passform för Oracles).