Académique Documents
Professionnel Documents
Culture Documents
x‘ L’attribut MATCH(gagnant) est un INTEGER qui indique le joueur gagnant : 1 pour le 1er joueur ou 2
pour le 2eme joueur. L’attribut TERRAIN(capacité) désigne le nombre de places du terrain.
Correction :
IF SQL%ROWCOUNT = 0 THEN
RAISE_APPLICATION_ERROR(-20100, ’Le match n’existe pas.’);
END IF;
END
1
2) Écrivez une fonction PL/SQL qui prend en paramètre le nom d’un pays et qui retourne le nombre de
joueurs de cette nationalité qui remplissent les deux conditions suivantes :
— Ont l’age plus grand que la moyenne d’age (de ce pays) ;
— Ont gagné tous leurs matchs joués à Paris.
Utilisez un curseur avec paramètre. (4 points)
Correction :
Correction :
2
public class CorrectionExamen {
public static int verifieRolandGarros() {
try {
Connection conn = DriverManager.getConnection("jdbc:default:connection:");
// recuperer les ids des joueurs qui ont gagné le turnoi de Roland-Garros
String query = "SELECT j.id
FROM JOUEUR j, MATCH m
WHERE ((j.id = m.idJoueur1 AND gagnant = 1) OR
(j.id = m.idJoueur2 AND gagnant = 2)) AND
m.nomTournoi = ’Roland-Garros’";
Statement stmt = connexion.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(query);
// PreparedStatement paramétrée
String instrSQL = "SELECT SUM(prixBillet)
FROM MATCH m, BILLET b
WHERE m.idMatch = b.idMatch AND (idJoueur1 = ? OR idJoueur2 = ?)";
PreparedStatement pstmt conn.prepareStatement(instrSQL);
while(rs.next()) {
int jid = rs.getInt(1);
pstmt.setInt(1, jid);
pstmt.setInt(2, jid);
ResultSet r = pstmt.executeQuery();
r.next();
int nb = r.getInt(1);
System.out.println(nb);
r.close();
}
pstmt.close();
stmt.close();
} catch(SQLException e) {
System.err.println(’SQLException: ’ + ex.getMessage());
}}}