Hallo allerseits,
wir arbeiten gerade daran, eine alte Server Application, die noch auf Eclipse basiert, zu einer Springboot-Anwendung "umzubauen". Im Prinzip funktioniert alles ganz gut, nur das manche PL/SQL Aufrufe teilweise falsche Ergebnisse oder sogar Exceptions zurückliefern. Nach allem, was wir bisher debuggt haben, sieht es so aus, als wäre das Problem, dass die Parameternamen nicht mehr richtig übergeben werden, sodass nur die Reihenfolge der übergebenen Parameter zählt. An mehreren Stellen, wo der Fehler schon aufgetreten ist, war es deshalb möglich, den Fehler dadurch zu beseitigen, dass wir die Reihenfolge im Javacode an die Reihenfolge der Parameter im DB-Package angepasst haben.
Es gibt aber auch Stellen, wo ein Aufruf zum Beispiel nicht funktioniert, weil die Funktion im Datenbankpackage überladen ist und sich die Parameter nur durch den Namen unterscheiden. Eine von diesen Stellen wirft zum Beispiel diesen Fehler:
Zum Hinzufügen der Parameter verwenden wir die Funkion StoredProcedureCall#addNamedArgument:
Weil sich wie gesagt bei dem generellen Aufbau der Abfragen nicht viel verändert hat, habe ich das Gefühl, dass der Fehler eher etwas damit zu tun hat, dass wir mit dem neuen Server auch eine neue Version von Eclipselink (3.0.2) und damit auch von Jakarta.Persistence (3.0.0, früher javax.persistence) verwenden.
Gibt es da vielleicht irgendwelche Parameter, die man zusätzlich Setzen muss, damit das Übergeben von Parameternamen funktioniert? Oder hat sich irgendwas an den neuen Versionen verändert, dasss es gar nicht mehr untersützt wird?
Mir ist in der Dokumentation vom StoredProcedureCall aufgefallen, dass es eine ganze Menge Überladungen von "addNamedArgument" gibt (https://www.eclipse.org/eclipselink/api/2.6/org/eclipse/persistence/queries/StoredProcedureCall.html). Könnte es etwas dait zu tun haben?
wir arbeiten gerade daran, eine alte Server Application, die noch auf Eclipse basiert, zu einer Springboot-Anwendung "umzubauen". Im Prinzip funktioniert alles ganz gut, nur das manche PL/SQL Aufrufe teilweise falsche Ergebnisse oder sogar Exceptions zurückliefern. Nach allem, was wir bisher debuggt haben, sieht es so aus, als wäre das Problem, dass die Parameternamen nicht mehr richtig übergeben werden, sodass nur die Reihenfolge der übergebenen Parameter zählt. An mehreren Stellen, wo der Fehler schon aufgetreten ist, war es deshalb möglich, den Fehler dadurch zu beseitigen, dass wir die Reihenfolge im Javacode an die Reihenfolge der Parameter im DB-Package angepasst haben.
Es gibt aber auch Stellen, wo ein Aufruf zum Beispiel nicht funktioniert, weil die Funktion im Datenbankpackage überladen ist und sich die Parameter nur durch den Namen unterscheiden. Eine von diesen Stellen wirft zum Beispiel diesen Fehler:
Code:
ORA-06550: Zeile 1, Spalte 14:
PLS-00307: Zu viele Deklarationen von 'CHECK_PERSON' entsprechen diesem Aufruf
ORA-06550: Zeile 1, Spalte 7:
PL/SQL: Statement ignored
Error Code: 6550
Call: {CALL ? := PCK_FIRMA.CHECK_PERSON(?, ?, ?, ?)}
bind => [=> FUNCTION_RESULT, Elvis, Presley, Graceland, USA]
Query: ValueReadQuery()
Code:
storedProcedureCall.addNamedArgument("pi_vorname", "pi_vorname", String.class);
storedProcedureCall.addNamedArgument("pi_nachname", "pi_nachname", String.class);
storedProcedureCall.addNamedArgument("pi_ort", "pi_ort", String.class);
storedProcedureCall.addNamedArgument("pi_land", "pi_land", String.class);
storedProcedureCall.setResult("FUNCTION_RESULT", String.class);
Weil sich wie gesagt bei dem generellen Aufbau der Abfragen nicht viel verändert hat, habe ich das Gefühl, dass der Fehler eher etwas damit zu tun hat, dass wir mit dem neuen Server auch eine neue Version von Eclipselink (3.0.2) und damit auch von Jakarta.Persistence (3.0.0, früher javax.persistence) verwenden.
Gibt es da vielleicht irgendwelche Parameter, die man zusätzlich Setzen muss, damit das Übergeben von Parameternamen funktioniert? Oder hat sich irgendwas an den neuen Versionen verändert, dasss es gar nicht mehr untersützt wird?
Mir ist in der Dokumentation vom StoredProcedureCall aufgefallen, dass es eine ganze Menge Überladungen von "addNamedArgument" gibt (https://www.eclipse.org/eclipselink/api/2.6/org/eclipse/persistence/queries/StoredProcedureCall.html). Könnte es etwas dait zu tun haben?