Maison > Article > base de données > Pouvons-nous appeler une fonction à l'aide de l'instruction Callable ? Pouvez-vous l'expliquer à l'aide d'un exemple JDBC ?
Comme les procédures, vous pouvez également créer des fonctions dans la base de données et les stocker.
Voici la syntaxe pour créer une fonction dans une base de données (MySQL) :
Voici la syntaxe pour créer une fonction dans une base de données (MySQL) : p>
CREATE FUNCTION Function_Name(input_arguments) RETURNS output_parameter BEGIN declare variables; statements . . . . . . . . . . return data_type; END
Supposons qu'il y ait est une base de données nommée Emp's table avec le contenu suivant :
+--------+------------+----------------+ | Name | DOB | Location | +--------+------------+----------------+ | Amit | 1970-01-08 | Hyderabad | | Sumith | 1970-01-08 | Vishakhapatnam | | Sudha | 1970-01-05 | Vijayawada | +--------+------------+----------------+
Un exemple de création de fonction est donné ci-dessous. Ici, nous créons une fonction appelée getDob() qui accepte le nom de l'employé, récupère et renvoie la valeur de la colonne DOB.
CREATE FUNCTION getDob(emp_name VARCHAR(50)) RETURNS DATE BEGIN declare dateOfBirth DATE; select DOB into dateOfBirth from EMP where Name = emp_name; return dateOfBirth; END
Vous pouvez appeler une fonction à l'aide d'un objet CallableStatement tout comme une procédure stockée pour appeler une fonction à l'aide du programme JDBC dont vous avez besoin.
Connectez-vous à la base de données.
Créez un objet PreparedStatement et transmettez son constructeur pour appeler la fonction au format chaîne.
Définissez la valeur comme espace réservé.
Exécutez l'instruction Callable.
Voici la requête qui appelle la fonction depuis JDBC :
{? = call getDob(?)}
Comme vous pouvez le constater, la requête contient des espaces réservés (?), tout comme les instructions préparées et les instructions appelables.
Dans la requête ci-dessus, le premier espace réservé représente la valeur de retour de la fonction et le deuxième espace réservé représente l'entrée
Vous devez utiliser la méthode registerOutParameter() de l'interface CallableStatement pour placer l'espace réservé représentant la valeur de retour Enregistré comme paramètre de sortie. Pour cette méthode, vous devez transmettre une valeur entière représentant la position de l'espace réservé et une variable entière représentant le type SQL (du paramètre)
cstmt.registerOutParameter(1, Types.DATE);
Utilisez la méthode setString() pour définir la valeur du paramètre d'entrée. (Car la fonction getDoc() accepte les valeurs de type VARCHAR).
Le programme JDBC suivant exécute la fonction getDob et récupère le résultat : p>
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Types; public class CallingFunctionsUsingCallable2 { public static void main(String args[]) throws SQLException { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Preparing a CallableStatement CallableStatement cstmt = con.prepareCall("{? = call getDob(?)}"); cstmt.registerOutParameter(1, Types.DATE); cstmt.setString(2, "Amit"); cstmt.execute(); System.out.print("Date of birth: "+cstmt.getDate(1)); } }
Connection established...... Date of birth: 1970-01-08
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!