Immer den return-Wert einer PL/SQL-Funktion, die über Hibernate
Habe ich eine PL/SQL-Funktion einer Oracle-Datenbank, die ich nicht ändern kann. Diese Funktion nimmt einen parameter identifiziert eine Entität, erstellt eine Kopie von dieser Entität und gibt dann die ID der Kopie. Das sieht etwas wie
FUNKTION copy_entity(id NUMBER) RETURN NUMBER
Brauche ich, um diese Funktion aufrufen aus dem Ruhezustand. Ich habe versucht, erstellen Sie eine benannte SQL-Abfragen mit so etwas wie
CALL copy_entity(:id)
als die Abfrage, aber ich kann nicht scheinen, um den Rückgabewert der Funktion. Hibernate ist "return-Skalare" und ähnliche Optionen erfordern eine Spalte name, um zurückzukehren und ich habe nicht den Namen einer Spalte aus. Dies führte mich zu
WÄHLEN Sie copy_entity(:id) ALS newEntityId
mit "return-Skalare" mit newEntityId als Spaltenname, aber das hat auch nicht funktioniert, da Oracle wirft dann eine exception, die kann ich nicht aufrufen, EINFÜGEN (zum speichern der Kopie) in eine Auswahl.
Gibt es eine Möglichkeit, um die Rückkehr Wert solch eines PL/SQL-Funktion? Die Funktion ist tatsächlich sehr viel komplexer und Bedarf noch andere Teile von der app und neu zu schreiben es ist nicht wirklich eine option.
- Nicht "WÄHLEN Sie copy_entity(id) als rtnID von DUAL" zu arbeiten?
- Nein, diese Ergebnisse in einer ORA-14551 Ausnahme, da es nicht erlaubt ist, um insert-oder update-aus ein Sie WÄHLEN.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hoffe/denke, dass Sie können verwenden Sie einen anonymen PL/SQL block:
beginnen
:myresult = copy_entity(:id);
end;
Jetzt haben Sie 'column name' myresult mit dem Ergebnis.
Habe ich noch nie verwendet, hibernate, so dass ich hoffe, dass es funktioniert. Ich weiß nicht, wie flexibel Ruhezustand ist.
Ich denke, Sie stecken mit den geraden JDBC. Die Hibernate-Dokumentation hat dies im Abschnitt Einschränkungen für Oracle:
Da diese Funktion akzeptiert eine Zahl und gibt eine Zahl zurück, sind Sie kein Glück mit Hibernate und wäre es vielleicht besser eine einfache JDBC -
CallableStatement
.