//-----------------------------------------------------------------------------
// ExJDBC9b.java
// tourne le 14 avril 2021
//-----------------------------------------------------------------------------

import java.io.*;
import java.sql.*;

class ExJDBC5 {

    static void ex55(Connection c)
	throws SQLException {

	String texte = "delete "+lireClavier("nom table ?");
	// serait pareil si drop table
	System.out.println(texte);
	Statement s = c.createStatement();
	s.execute(texte);
	s.close();

	// nom fonction pas connu : int -> int (sans repetition) :
	texte = "{ ? = call "+lireClavier("nom fonction ?")+"(14)}";
	// texte = "{ call "+lireClavier("nom proc ?")+"(14,?)}";
	System.out.println(texte);
	CallableStatement cs = c.prepareCall(texte);
	cs.registerOutParameter(1, Types.INTEGER); 
	cs.execute();
	System.out.println(cs.getInt(1));
	cs.close();
	
	// nom procedure pas connu : int -> int avec repetition d'appel de
	// la meme fonction sur des valeurs differentes :

	texte = "{ call "+lireClavier("nom proc ?")+"(?,?)}";
	System.out.println(texte);
	CallableStatement cs = c.prepareCall(texte);
	cs.registerOutParameter(2, Types.INTEGER); 
	while(on continue ?) {
	    cs.setInt(1,Integer.parseInt(lireClavier("entrez un entier ?")));
	    cs.execute();
	    System.out.println(cs.getInt(2));
	}
	cs.close();
	
	// nom fonction pas connu : int -> int (sans repetition),
	// nom user pas connu : 
	String f = lireClavier("nom fonction ?");
	String u = lireClavier("login unix ");
	texte = "{ ? = call c##"+u+"_a."+f+"(14)}";
	System.out.println(texte);
	cs = c.prepareCall(texte);
	cs.registerOutParameter(1, Types.INTEGER); 
	cs.execute();
	System.out.println(cs.getInt(1));
	cs.close();
	
    }

    //-------------------------------------------------------------------------

    static String lireClavier(String message) {
	try {
            System.out.print(message);
	    BufferedReader clavier =
		new BufferedReader(new InputStreamReader(System.in));
	    return clavier.readLine();
	} catch (Exception e) {
	    return "erreur dans fonction lireClavier";
	}
    }

    //-------------------------------------------------------------------------
    public static void main(String[] args)
	throws SQLException, ClassNotFoundException {

	Class.forName("oracle.jdbc.driver.OracleDriver");
	Connection c = DriverManager.getConnection
	    ("jdbc:oracle:thin:c##ewaller_a/ewaller_a@tp-oracle:1522:dbinfo");

	while (true) {
	    System.out.println("-------------------------------");
	    System.out.println("Bienvenue dans ExJDBC1");
	    System.out.println("55 : SQL dynamique : ");
	    System.out.println("9 : deconnexion");
	    System.out.println("0 : terminer");
	    int n = Integer.parseInt(lireClavier("Entrez votre choix : "));
	    switch (n) {
	    case 55 : ex55(c); break;
	    case 9 : c.close(); break;
	    case 0 : return;
	    }
	}
    }
}

//-----------------------------------------------------------------------------

/*
create or replace function f55(n int)
    return int
is
begin
    return 12;
end;
/
set serveroutput on
exec dbms_output.put_line(f55(14))
*/
