// Programm 4-10c:  ./JDBCelementar/StoredProceduresRechnen.java
import java.sql.*;
public class StoredProceduresRechnen {
  public static void main(String[] args) throws Exception {
    int a = args.length >= 1 ? Integer.parseInt(args[0]) : 11;
    int b = args.length == 2 ? Integer.parseInt(args[1]) : 22;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection c = DriverManager.getConnection(
                   "jdbc:oracle:thin:@p30:1521:orcl",
                   "Kurse", "Oracle");
    Statement s = c.createStatement();
    String proz = "CREATE OR REPLACE PROCEDURE pAdd \n" +
                  "(a IN INTEGER, b IN INTEGER, " +
                  " s OUT INTEGER) IS \n" +
                  "BEGIN s := a + b; END;";
    s.execute(proz);
    CallableStatement cs;
    cs = c.prepareCall("{call pAdd(?,?,?)}");
    cs.registerOutParameter(3, Types.INTEGER);
    cs.setInt(1, a); cs.setInt(2, b);
    cs.execute();
    System.out.println(a + " + " + b + " = " + cs.getInt(3));
    String funk = "CREATE OR REPLACE FUNCTION fSub \n" +
                  "(a IN INTEGER, b IN INTEGER) \n" +
                  "RETURN INTEGER IS \n" +
                  "BEGIN RETURN a - b; END;";
    s.execute(funk);
     cs = c.prepareCall("{? = call fSub(?,?)}");
    cs.registerOutParameter(1, Types.INTEGER);
    cs.setInt(2, a); cs.setInt(3, b);
    cs.execute();
    System.out.println(a + " - " + b + " = " + cs.getInt(1));
  }
}                         // Ende class StoredProceduresRechnen
