// Programm 4-13b:./JDBCelementar/StoredProceduresTabellen.java
import java.sql.*;
import oracle.jdbc.driver.*;

public class StoredProceduresTabellen {
  public static void main(String[] args) throws Exception {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection c = DriverManager.getConnection(
                   "jdbc:oracle:thin:@p30:1521:orcl",
                   "Kurse", "Oracle");
    Statement s = c.createStatement();
    s.execute("CREATE OR REPLACE PACKAGE spKurse IS "+ 
      "TYPE rsdozenten IS REF CURSOR RETURN Dozenten%ROWTYPE;"+
      "PROCEDURE pDozenten(rsp OUT spKurse.rsdozenten); END;");
    s.execute("CREATE OR REPLACE " + 
      "PROCEDURE pDozenten (rsp OUT spKurse.rsdozenten) IS "+
      "BEGIN OPEN rsp FOR SELECT * FROM Dozenten; END;");
    CallableStatement cs;
    cs = c.prepareCall("{call pDozenten(?)}");
    cs.registerOutParameter(1, 
                        oracle.jdbc.driver.OracleTypes.CURSOR);
    cs.execute();
    ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);
    int x = rs.getMetaData().getColumnCount();
    while(rs.next()) {
      for (int i = 1; i <= x; i++) {
        System.out.print(rs.getString(i));
        if (i != x) System.out.print(", ");
        else System.out.print("\n");
      }
    }
  }
}                        // Ende class StoredProceduresTabellen
