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.

  • ⚙️ Commandes DML : Les instructions INSERT, UPDATE, DELETE et SELECT INTO effectuent toutes les tâches de manipulation de données à l'intérieur d'un bloc PL/SQL.
  • Insertion de données : INSERT INTO ajoute des lignes à partir de valeurs explicites ou directement à partir d'une autre table à l'aide d'une instruction SELECT.
  • (I.e. Mise à jour des données : La fonction UPDATE avec SET modifie les valeurs des colonnes, tandis qu'une clause WHERE facultative limite les lignes affectées.
  • 🇧🇷 Suppression des données : La commande DELETE supprime les enregistrements correspondants, et l'omission de la clause WHERE efface toute la table.
  • (I.e. Sélectionner dans : La requête SELECT INTO doit renvoyer exactement une ligne, ou Oracle Lève les exceptions NO_DATA_FOUND ou TOO_MANY_ROWS.
  • 🤖 Assistance IA : Les assistants IA tels que GitHub Copilot rédigent les blocs DML et signalent les clauses WHERE ou COMMIT manquantes.

Oracle PL/SQL Insertion, mise à jour, suppression, sélection dans

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.

Oracle Bloc PL/SQL effectuant des opérations d'insertion, de mise à jour, de suppression et de sélection sur la table emp

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.

FAQ

Non. Le PL/SQL statique ne peut pas exécuter directement du DDL. Construisez l'instruction sous forme de chaîne de caractères et exécutez-la avec EXÉCUTER IMMÉDIATEMENT, qui gère les opérations CREATE, ALTER et DROP lors de l'exécution.

Une instruction SELECT INTO doit renvoyer exactement une ligne. Pour lire plusieurs lignes, utilisez une instruction SELECT INTO explicite. curseur avec une boucle FETCH, ou COLLECTEZ EN BULK DANS une collection.

DELETE est une instruction DML : elle supprime les lignes sélectionnées à l’aide d’une clause WHERE et peut être annulée. TRUNCATE est une instruction DDL : elle efface toutes les lignes instantanément, effectue une validation automatique et est irréversible.

Oui. Les modifications apportées par les commandes INSERT, UPDATE et DELETE restent dans votre session jusqu'à ce que vous les supprimiez. COMMETTREPL/SQL n'effectue pas de validation automatique. Utilisez COMMIT pour enregistrer ou ROLLBACK pour annuler.

MERGE effectue une mise à jour ou une insertion (upsert) — elle met à jour les lignes qui correspondent à une condition de jointure et insère celles qui n'y correspondent pas — en une seule instruction au lieu de passes UPDATE et INSERT séparées.

RETURNING INTO capture les valeurs des colonnes des lignes qu'une opération INSERT, UPDATE ou DELETE vient d'affecter et les stocke dans des variables, évitant ainsi une requête SELECT supplémentaire pour lire les données modifiées.

Oui. Copilote GitHub Ce module rédige les blocs INSERT, UPDATE, DELETE et SELECT INTO à partir d'un court commentaire, suggère des variables de liaison et complète les listes de colonnes, bien qu'il soit conseillé de vérifier la logique au préalable.

Des assistants IA analysent le code DML à la recherche de clauses WHERE manquantes, d'instructions COMMIT absentes et de concaténations non sécurisées, puis suggèrent des corrections et expliquent les erreurs. Cette analyse par apprentissage automatique permet de détecter les modifications risquées avant leur mise en production.

Résumez cet article avec :