Databases Reference
In-Depth Information
db.plSQLFunktionAnlegen();
System.out.println("Bären: "+db.tiereZaehlen("Baer"));
System.out.println("Hasen: "+db.tiereZaehlen("Hase"));
so werden folgende Ergebnisse ausgegeben.
Bären: 4
Hasen: -1
Mit einem vergleichbaren Ansatz ist es auch möglich, statt ein-
zelner Werte eine Menge von Werten als Ergebnis zuliefern.
Dabei wird wieder der Ansatz mit dem Cursor benutzt. Wei-
terhin muss der Cursor dann als „IN OUT“-Parameter gekenn-
zeichnet werden. Hier wird später ein spezielles Java-Objekt
übergeben, das nacch dem Aufruf eine Referenz auf das Ergeb-
nis enthält. Eine Prozedur, die solch einen speziellen Cursor
vom Typ SYS_REFCURSOR zurückgibt, ist in folgender Java-
Methode enthalten, man erkennt, dass der zugehörige Cursor
in der Prozedur nur geöffnet wird.
Cursor zurück-
geben
public void plSQLProzedurAnlegen() {
if (con == null) {
System.out.println("keine Verbindung");
return;
}
try {
Statement stmt = con.createStatement();
stmt.executeUpdate("CREATE OR REPLACE "
+ "PROCEDURE ALLETIEREEINERGATTUNG("
+ " g IN Tier.Gattung%TYPE,"
+ " tiercursor IN OUT SYS_REFCURSOR) IS "
+ "BEGIN"
+ " OPEN tiercursor FOR"
+ " SELECT Tier.TNAME, Gehege.GNAME"
+ " FROM Tier, Gehege"
+ " WHERE Tier.GNR=Gehege.GNR"
+ " AND Tier.GATTUNG=g;"
+ "END;\n");
} catch (SQLException e) {
ausnahmeAusgeben(e);
}
}
Die Prozedur wird vergleichbar zum Prepared Statement ge-
nutzt. Man muss für den Cursor nur definieren, von welchem
Typ dieses Ergebnis sein soll. Danach kann man den Cursor als
normales ResultSet über die Methode getObject aus dem Er-
gebnis herauslesen. Eine mögliche Nutzung der letzten Proze-
dur kann dann in Java wie folgt aussehen.
301
Search WWH ::




Custom Search