Databases Reference
In-Depth Information
Statement stmt=con.createStatement();
stmt.executeUpdate(
"CREATE OR REPLACE FUNCTION "
+ " anzahlTiere(g Tier.Gattung%TYPE) "
+ "RETURN INTEGER "
+ "IS "
+ " ergebnis INTEGER; "
+ "BEGIN"
+ " IF g='Hase'"
+ " THEN "
+ " RAISE_APPLICATION_ERROR(-20300,"
+ " 'Hasen nicht zählbar');"
+ " END IF;"
+ " SELECT COUNT(*)"
+ " INTO ergebnis"
+ " FROM Tier"
+ " WHERE Tier.Gattung=g;"
+ " RETURN ergebnis;"
+ "END;\n"
);
} catch (SQLException e) {
ausnahmeAusgeben(e);
}
}
Zum Aufruf der Funktion wird ein CallableStatement-Objekt
benötigt. Dabei wird dieses Objekt analog zum
PreparedStatement erzeugt, wobei der zu nutzende Aufruf mit
prepareCall übergeben wird. Die Einbettung der Nutzung der
Funktion ist in folgender Methode beschrieben.
public int tiereZaehlen(String gattung){
int ergebnis=0;
if (con==null){
System.out.println("keine Verbindung");
return 0;
}
try {
CallableStatement stmt=con.prepareCall(
"{? = call anzahlTiere(?)}");
stmt.registerOutParameter(1,Types.INTEGER);
stmt.setString(2,gattung);
stmt.execute();
ergebnis=stmt.getInt(1);
} catch (SQLException e) {
if(e.getErrorCode()==20300)
ergebnis=-1;
else{
ausnahmeAusgeben(e);
ergebnis=Integer.MIN_VALUE;
299
Search WWH ::




Custom Search