Oracle PL/SQL Insérer, mettre à jour, supprimer et sélectionner dans [Exemple]
⚡ Résumé intelligent
Instructions SQL à l'intérieur Oracle PL/SQL gère toutes les opérations de manipulation de données, permettant à un bloc d'insérer, de mettre à jour, de supprimer et de sélectionner directement des lignes. Les commandes INSERT, UPDATE, DELETE et SELECT INTO permettent de déplacer et de récupérer des données au sein de la base de données.

Transactions DML en PL/SQL
DML signifie Data Manipulation Language, le groupe de SQL commandes qui modifient les données stockées dans une table. Au sein d'une Bloc PL/SQLCes commandes effectuent les manipulations, tandis que PL/SQL fournit la logique sous-jacente. Le langage DML gère les opérations de bas niveau.
- Insertion de données
- Mise à jour des données
- Suppression de données
- Sélection des données
En PL/SQL, la manipulation des données s'effectue uniquement par le biais de commandes SQL.
Insertion de données
En PL/SQL, les lignes sont ajoutées à une table grâce à la commande SQL INSERT INTO. Cette commande prend en entrée le nom de la table, les colonnes cibles et les valeurs des colonnes, puis insère les valeurs dans la table de base.
La commande INSERT peut également extraire directement les valeurs d'une autre table à l'aide d'une instruction SELECT, sans avoir à spécifier les valeurs de chaque colonne. Grâce à une instruction SELECT, il est possible d'insérer simultanément autant de lignes que la table source en contient.
syntaxe:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) VALUES(<value1>,<value2>,...,<value_n>); END;
La syntaxe ci-dessus illustre la commande INSERT INTO. Le nom de la table et les valeurs sont obligatoires, tandis que les noms de colonnes sont facultatifs lorsque l'instruction INSERT fournit des valeurs pour chaque colonne de la table. Le mot-clé VALUES est obligatoire lorsque les valeurs sont fournies séparément, comme indiqué ci-dessus.
syntaxe:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>; END;
Cette deuxième forme de INSERT INTO récupère directement les valeurs depuis Utilisez la commande SELECT. Le mot-clé VALUES ne doit pas être présent ici car les valeurs ne sont pas fournies séparément.
Mise à jour des données
La mise à jour des données consiste à modifier la valeur d'une colonne dans une ligne existante. Cette opération s'effectue à l'aide de l'instruction UPDATE, qui prend en paramètres le nom de la table, le nom de la colonne et la nouvelle valeur, puis met à jour les données.
syntaxe:
BEGIN UPDATE <table_name> SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be updated>; END;
La syntaxe ci-dessus illustre l'instruction UPDATE. Le mot-clé SET indique au moteur PL/SQL de mettre à jour la colonne avec la valeur spécifiée. La clause WHERE est facultative ; si elle est omise, la valeur de la colonne mentionnée est mise à jour dans l'ensemble de la table.
Suppression de données
La suppression de données consiste à retirer un enregistrement complet de la table de base de données. La commande DELETE est utilisée à cette fin.
syntaxe:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be deleted>; END;
La syntaxe ci-dessus illustre la commande DELETE. Le mot-clé FROM est facultatif ; avec ou sans la clause FROM, la commande se comporte de la même manière. La clause WHERE est également facultative ; si elle est omise, la table entière sera vidée.
Sélection des données
La projection de données, ou extraction, consiste à récupérer les données nécessaires à partir d'une table de base de données. Ceci est réalisé grâce à la commande SELECT associée à la clause INTO. La commande SELECT extrait les valeurs de la base de données, et la clause INTO affecte ces valeurs aux variables locales du bloc PL/SQL.
Les points suivants doivent être pris en compte lors de l'utilisation d'une instruction SELECT avec INTO :
- Une instruction SELECT ne doit renvoyer qu'un seul enregistrement lorsqu'elle utilise la clause INTO, car une variable ne peut contenir qu'une seule valeur. Si la requête SELECT renvoie plusieurs lignes, Exception TOO_MANY_ROWS est soulevé.
- L'instruction SELECT assigne une valeur à la variable définie dans la clause INTO ; elle nécessite donc au moins un enregistrement pour initialiser cette valeur. Si aucun enregistrement n'est trouvé, l'exception NO_DATA_FOUND est levée.
- Le nombre de colonnes et leurs types de données dans la clause SELECT doivent correspondre au nombre de variables et à leurs types de données dans la clause INTO.
- Les valeurs sont récupérées et renseignées dans le même ordre que celui mentionné dans la déclaration.
- La clause WHERE est facultative et vous permet d'imposer des restrictions supplémentaires sur les enregistrements récupérés.
- Une instruction SELECT peut être utilisée dans la condition WHERE d'autres instructions DML pour définir les valeurs des conditions.
- Une instruction SELECT utilisée à l'intérieur d'instructions INSERT, UPDATE ou DELETE ne doit pas comporter de clause INTO, car elle ne remplit aucune variable dans ces cas.
syntaxe:
BEGIN SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
La syntaxe ci-dessus illustre la commande SELECT-INTO. Le mot-clé FROM est obligatoire et spécifie la table à partir de laquelle les données doivent être extraites. La clause WHERE est facultative ; si elle est omise, les données de l'ensemble de la table seront extraites.
Exemple 1: Dans cet exemple, nous verrons comment effectuer des opérations DML en PL/SQL. Nous insérerons les quatre enregistrements ci-dessous dans la table emp.
| EMP_NAME | EMP_NON | LE SALAIRE | DE VENTE |
|---|---|---|---|
| BBB | 1000 | 25000 | AAA |
| XXX | 1001 | 10000 | BBB |
| YYY | 1002 | 10000 | BBB |
| ZZZ | 1003 | 7500 | BBB |
Ensuite, nous mettrons à jour le salaire de 'XXX' à 15000, supprimerons l'enregistrement de l'employé 'ZZZ', et enfin afficherons les détails de l'employé 'XXX'.
La capture d'écran ci-dessous montre le bloc PL/SQL complet utilisé pour cet exemple.
DECLARE l_emp_name VARCHAR2(250); l_emp_no NUMBER; l_salary NUMBER; l_manager VARCHAR2(250); BEGIN INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('BBB',1000,25000,'AAA'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('XXX',1001,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('YYY',1002,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('ZZZ',1003,7500,'BBB'); COMMIT; Dbms_output.put_line('Values Inserted'); UPDATE EMP SET salary=15000 WHERE emp_name='XXX'; COMMIT; Dbms_output.put_line('Values Updated'); DELETE emp WHERE emp_name='ZZZ'; COMMIT; Dbms_output.put_line('Values Deleted'); SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX'; Dbms_output.put_line('Employee Detail'); Dbms_output.put_line('Employee Name:'||l_emp_name); Dbms_output.put_line('Employee Number:'||l_emp_no); Dbms_output.put_line('Employee Salary:'||l_salary); Dbms_output.put_line('Employee Manager Name:'||l_manager); END; /
Sortie :
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
Code Explication:
- Code lignes 2-5 : Déclaration des variables.
- Code lignes 7-14 : Insertion des enregistrements dans la table emp.
- Code ligne 15: Validation des transactions d'insertion.
- Code lignes 17-19 : Mise à jour du salaire de l'employé 'XXX' à 15000.
- Code ligne 20: Validation de la transaction de mise à jour.
- Code ligne 22: Suppression de l'enregistrement de 'ZZZ'.
- Code ligne 23: Validation de la transaction de suppression.
- Code ligne 25: Sélection de l'enregistrement de 'XXX' et remplissage des variables l_emp_name, l_emp_no, l_salary et l_manager.
- Code lignes 26-30 : Affichage des valeurs d'enregistrement récupérées.

