Plan du site  
français  English
pixel
pixel

Articles - Étudiants SUPINFO

Chapitre 06 - Manipuler les données

Data Manipulation Language (DML – Langage de Manipulation de Données) est une partie importante du SQL. Lorsque vous souhaitez ajouter, mettre à jour ou supprimer des données dans une base de données, vous exécutez des ordres DML. Une série d’ordres DML forme une unité logique de travail appelée transaction.

Considérons la base de données d’une banque. Lorsqu’un un client transfère l'argent à partir d'un compte épargne à un compte chèque, la transaction peut être décomposée en trois opérations distinctes : diminuer le compte épargne, augmenter le compte chèque et enregistrer la transaction dans un journal de transactions. Le serveur Oracle doit garantir que chacune des trois requêtes SQL est exécutée pour maintenir les comptes dans l'équilibre approprié. Quand quelque chose empêche une des requêtes de la transaction de s'exécuter, les autres requêtes doivent être annulées.

INSERT

Présentation

L’illustration suivante montre l’ajout d’un nouveau département dans la table DEPARTMENTS.

Syntaxe de l’ordre INSERT

Vous pouvez ajouter de nouvelles lignes dans une table en utilisant l’ordre INSERT :

INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);

Syntaxe :

  • table : est le nom de la table

  • column : est le nom de la colonne ciblée

  • value : est la valeur correspondante à la colonne

[Note]

Cet ordre avec la clause VALUES n’insère qu’une seule ligne à la fois.

Étant donné que vous pouvez insérer une nouvelle ligne qui contient une valeur pour chaque colonne, la liste des colonnes n’est pas nécessaire dans la clause INSERT. Cependant, si vous n’indiquez pas de liste de colonnes, les valeurs doivent être listées dans l’ordre par défaut des colonnes de la table et une valeur doit être spécifiée pour chaque colonne.

Pour insérer une ligne dans une table on doit connaitre sa structure. Pour afficher la structure d’une table, utilisez la commande DESCRIBE suivie du nom de la table

DESCRIBE departments

Pour plus de clarté, utilisez la liste de colonnes dans une clause INSERT.

Entourez les valeurs caractères et les valeurs dates d’apostrophes (' '), il est, en revanche, déconseillé d’entourer des nombres d’apostrophes, car la conversion implicite peut voir lieu pour des valeurs numériques assignées aux colonnes de type NUMBER.

INSERT INTO departments(department_id, department_name, manager_id, location_id)
VALUES     (70, 'Public Relations', 100, 1700);

1 row created.

Insertion de nouvelles lignes avec des valeurs NULL

Méthodes pour insérer des valeurs NULL

Méthode Description
Implicite Ne pas indiquer la colonne dans la liste de colonnes
Explicite Spécifier le mot clé NULL dans la liste VALUES; indiquer la chaîne vide ('') dans la liste VALUES pour les chaînes de caractères et les dates.
  • Méthode implicite :

    INSERT INTO departments (department_id, department_name)
    VALUES (30, 'Purchasing');
    
    1 row created.
  • Méthode Explicite :

    INSERT INTO departments
    VALUES (100, 'Finance', NULL, NULL);
    
    1 row created.

Assurez-vous qu’il est possible d’insérer une valeur NULL dans une colonne ciblée. Pour vérifier, utilisez la commande iSQL*Plus DESCRIBE en regardant dans la colonne Null?.

Le serveur Oracle vérifie automatiquement tous les types de données, plages des données et les contraintes d'intégrité. N'importe quelle colonne qui n'est pas énumérée explicitement obtient une valeur NULL dans la nouvelle ligne.

Certaines erreurs communes sont dues :

  • à une valeur manquante pour une colonne NOT NULL

  • à une valeur en double violant une contrainte UNIQUE

  • à une violation de contrainte clé étrangère (FOREIGN KEY)

  • à une violation de contrainte CHECK

  • à une discordance des types de données

  • à une valeur trop large pour une colonne

Insertion de valeurs spéciales

Vous pouvez utiliser des fonctions pour insérer des valeurs spéciales dans une table. L’exemple suivant enregistre des informations sur l’employé Popp dans la table EMPLOYEES. Il insère la date et l’heure courante dans la colonne HIRE_DATE. La fonction SYSDATE est utilisée pour récupérer la date et l’heure.

INSERT INTO employees 
               (employee_id,
                first_name, last_name,
                email, phone_number,
                hire_date, job_id, salary,
                commission_pct, manager_id,
                department_id)
VALUES (113, 
        'Louis', 'Popp',
        'LPOPP', '515.124.4567',
        SYSDATE, 'AC_ACCOUNT', 6900,
        NULL, 205, 100);

Vous pouvez également utiliser la fonction USER quand vous insérez des lignes dans une table. Cette fonction renvoie le nom d’utilisateur courant.

Vérifier l’ajout dans la table :

SELECT employee_id, last_name, job_id, hire_date, commission_pct
FROM   employees
WHERE  employee_id = 113;

Insertion des valeurs date et heure spécifiques :

Le format DD-MON-YY est le format par défaut utilisé pour insérer une valeur date. Rappelez-vous, qu’en utilisant ce format le siècle inséré est le siècle courant. L’heure par défaut est minuit (00:00:00) parce que la date contient également des informations sur l’heure.

Si la date doit être entrée dans un format différent du format par défaut (par exemple, avec un siècle ou une heure spécifique), vous devrez utiliser la fonction TO_DATE.

L’exemple suivant enregistre les informations de l’employé Raphaely dans la table EMPLOYEES. La date stockée dans la colonne HIRE_DATE est le 3 Février 1999.

INSERT INTO employees
VALUES (114,
        'Den', 'Raphealy',
        'DRAPHEAL', '515.127.4561',
        TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
        'AC_ACCOUNT', 11000, NULL, 100, 30);

Vérifier votre insertion :

Si vous utilisez la requête suivante à la place de l’exemple précédant, l’année d’embauche sera interprétée comme étant 2099.

INSERT INTO employees
VALUES (114,
        'Den', 'Raphealy',
        'DRAPHEAL', '515.127.4561',
        '03-FEB-99',
        'AC_ACCOUNT', 11000, NULL, 100, 30);

Si le format RR est utilisé, le système fournit automatiquement le siècle courant même si ce n’est pas le cas.

Créer un script pour manipuler les données

Vous pouvez sauvegarder des requêtes avec les variables de substitution dans un fichier pour les réutiliser. L’exemple suivant enregistre des informations dans la table DEPARTMENTS.

INSERT INTO departments
       (department_id, department_name, location_id)
VALUES (&department_id, '&department_name',&location);

Exécutez le fichier script, il vous sera demandé d’entrer une valeur pour chaque variable de substitution (&). Après avoir entré une valeur pour une variable de substitution cliquez sur le bouton Continue. Les valeurs rentrées remplacent les variables de substitution de votre requête. Cette démarche vous permet d’exécuter le même script plusieurs fois en fournissant des valeurs différentes à chaque exécution. Ainsi vous insérez plusieurs lignes.

Copier des lignes depuis une autre table

Vous pouvez utiliser l’ordre INSERT pour ajouter des lignes prévenant d’une table. Vous devez utiliser une sous-requête à la place du mot-clé VALUES.

Syntaxe :

INSERT INTO table [column (, column)] 
subquery;

Dans la syntaxe :

  • table : est le nom de la table

  • column : est le nom de la colonne dans la table cible

  • subquery : est la sous-requête qui retourne des lignes dans la table cible

Le nombre et les types de données des colonnes dans la clause INSERT doivent correspondre au nombre et aux types de données des colonnes retournées par la sous-requête. Pour faire une copie des lignes d’une table, utilisez la sous-requête SELECT * :

INSERT INTO copy_emp
  SELECT *
  FROM   employees;

UPDATE

Présentation

L’exemple suivant montre la modification du numéro de département pour les employés travaillant dans le département 60 en les réaffectant au département 30.

Syntaxe de l’ordre UPDATE

Vous pouvez modifier les lignes existantes en utilisant l’ordre UPDATE.

UPDATE table
SET    column = value [, column = value, ...]
[WHERE condition];

Dans la syntaxe :

  • table : est le nom de la table

  • column : est le nom de la colonne dans la table cible

  • value : est la valeur correspondante ou la sous-requête pour la colonne

  • condition : identifie les lignes qui doivent être mises à jour et qui sont composées des noms de colonne, des expressions, des constantes, des sous-requêtes et des opérateurs de comparaison.

Vous pouvez vérifier les opérations de mise à jour en interrogeant la table pour afficher les lignes modifiées.

[Note]

En général, utilisez la clé primaire pour identifier une ligne spécifique. Si vous utilisez les autres colonnes, vous pouvez modifier plusieurs lignes accidentellement. Par exemple, identifier une seule ligne dans la table EMPLOYEES en utilisant le nom de l'employé peut être dangereux parce qu’il peut y avoir plusieurs employés portant le même nom.

Mettre à jour des lignes d'une table

L’ordre UPDATE modifie les lignes spécifiques si la clause WHERE est utilisée. L’exemple ci-dessous montre un transfert de l’employé 113 (Popp) dans le département 70.

UPDATE employees
SET    department_id = 70
WHERE  employee_id = 113;

1 row updated.

Si vous ne spécifiez pas la clause WHERE, toutes les lignes de la table sont modifiées.

Exemple :

UPDATE copy_emp
SET    department_id = 110;

22 rows updated.

SELECT last_name, department_id FROM copy_emp;
[Note]

La table COPY_EMP contient les mêmes données que la table EMPLOYEES.

Mettre à jour plusieurs colonnes avec des sous-requêtes

Vous pouvez mettre à jour plusieurs colonnes dans la clause SET d’un ordre UPDATE à l’aide de plusieurs sous-requêtes.

Syntaxe :

UPDATE table 
SET     column = (SELECT column
                  FROM   table
                  WHERE  condition)
    [ , column = (SELECT column
                  FROM   table
                  WHERE  condition)]
[WHERE condition ];
[Note]

Si aucune ligne n’a été mise à jour, le message "0 rows updated" est retourné.

La requête suivante met à jour l'identifiant du poste et le salaire de l’employé 114 pour correspondre aux valeurs de l’employé 205.

UPDATE employees
SET    job_id = (SELECT job_id 
                 FROM   employees 
                 WHERE  employee_id =205),
       salary = (SELECT salary 
                 FROM   employees 
                 WHERE  employee_id = 205)
WHERE  employee_id = 114;

1 row updated.

Mettre à jour les lignes basées sur une autre table

Vous pouvez utiliser des sous-requêtes dans l’ordre UPDATE pour mettre à jour les lignes dans une table. L’exemple ci-dessous montre une mise à jour de la table COPY_EMP basée sur les valeurs de la table EMPLOYEES. Il modifie le numéro de département, en assignant le numéro de département de l’employé 100, de tous les employés dont le poste est le même que celui de l’employé 200.

UPDATE copy_emp
SET    department_id = (SELECT department_id
                        FROM   employees
                        WHERE  employee_id = 100)
WHERE  job_id = (SELECT job_id
                 FROM   employees
                 WHERE  employee_id = 200);

1 row updated.

DELETE

Présentation

Le schéma suivant montre la suppression du département Finance de la table DEPARTMENTS (en considérant qu’aucune contrainte n’est définie sur la table DEPARTMENTS).

Syntaxe de l'ordre DELETE

Vous pouvez supprimer des lignes existantes grâce à l'ordre DELETE.

DELETE [FROM] table
[WHERE condition];

Dans la syntaxe :

  • table : est le nom de la table

  • condition : identifie les lignes qui seront supprimées et est composé des noms de colonne, des expressions, des constantes, des sous-requêtes et des opérateurs de comparaison.

[Note]

Si aucune ligne n’est supprimée, le message "0 rows deleted" est retourné.

Supprimer des lignes dans une table

Vous pouvez supprimer les lignes spécifiques en utilisant la clause WHERE dans la requête DELETE. L’exemple suivant montre la suppression du département Finance de la table DEPARTMENTS.

DELETE FROM departments
WHERE  department_name = 'Finance';

1 row deleted.

Vous pouvez vous assurer que l’opération de suppression a bien été réalisée en affichant les lignes supprimées à l’aide d’une requête SELECT.

SELECT *
FROM   departments
WHERE  department_name = 'Finance';

no rows selected.

Si vous ne spécifiez pas la clause WHERE, toutes les lignes de la table seront supprimées. L’exemple ci-dessous illustre cette situation. Toutes les lignes de la table COPY_EMP sont supprimées parce que la clause WHERE n’a pas été spécifiée.

DELETE FROM copy_emp;

22 rows deleted.

Cet exemple supprime les lignes identifiées par la clause WHERE :

DELETE FROM employees 
WHERE  employee_id = 114;
1 row deleted.

DELETE FROM departments 
WHERE  department_id IN (30, 40);
2 rows deleted.

Supprimer des lignes basées sur une autre table

Vous pouvez utiliser les sous-requêtes pour supprimer les lignes d’une table basées sur une autre table.

L’exemple suivant supprime tous les employés qui sont dans un département dont le nom de département contient la chaîne Public. La sous-requête renvoie les numéros de département dont le nom contient la chaine Public en recherchant dans la table DEPARTMENTS. La sous-requête retourne alors le numéro de département trouvé à la requête principale qui supprime les lignes correspondantes dans la table EMPLOYEES.

DELETE FROM employees
WHERE  department_id = (SELECT department_id
                        FROM   departments
                        WHERE  department_name LIKE '%Public%');

1 row deleted.

TRUNCATE

L’ordre TRUNCATE permet de vider plus efficacement une table. Vous pouvez utiliser cet ordre pour supprimer rapidement toutes les lignes d’une table ou d’un cluster.

Syntaxe :

TRUNCATE TABLE table_name;

Exemple :

TRUNCATE TABLE copy_emp;

La suppression des lignes avec l’ordre TRUNCATE est plus rapide qu’avec l’ordre DELETE pour les raisons suivantes :

  • L’ordre TRUNCATE est un ordre DDL (Data Definition Language) et ne génère aucune information de rollback. Les informations de rollback seront étudiées plus tard.

  • Le fait de tronquer une table n’exécute pas les triggers se déclenchant à la suppression de lignes.

  • Si une contrainte d’intégrité fait référence à la table, vous ne pouvez pas tronquer cette dernière. Vous devez désactiver ce type de contraintes avant d’exécuter l’ordre TRUNCATE. La désactivation des contraintes est abordée ultérieurement.

COMMIT et ROLLBACK

Présentation

Le serveur Oracle assure la consistance des données grâce à la gestion des transactions. Les transactions vous offrent un contrôle et une flexibilité plus étendue lorsque des données sont modifiées et assurent la consistance des données dans le cas d'une défaillance d'un processus utilisateur ou du système.

Les transactions sont composées de plusieurs ordres DML qui effectuent un seul changement consistant. Par exemple, un transfert de fonds entre deux comptes inclut le débit sur un compte ainsi que le crédit sur un autre compte de la même somme. Ces deux actions devraient échouer ou réussir ensemble; le crédit ne doit pas être validé sans le débit.

Types de transaction :

Type Description
Data Manipulation Language (DML) Composée de n’importe quel nombre d’ordres DML que le serveur Oracle gère comme une seule entrée ou une seule unité de travail
Data Definition Language (DDL) Composée d’un seul ordre DDL
Data Control Language (DCL) Composée d’un seul ordre DCL

Une transaction débute dès l'entrée du premier ordre DML et se termine dans un de ces cas :

  • Un ordre COMMIT ou ROLLBACK est effectué.

  • Un ordre DDL, tel que CREATE, est effectué.

  • Un ordre DCL est effectué.

  • L'utilisateur quitte iSQL*Plus.

  • Lors d'un problème matériel ou d’une défaillance du système.

Après la fin d'une transaction, la prochaine requête SQL démarre automatiquement la transaction suivante.

Un ordre DDL ou DCL est automatiquement validé et donc termine implicitement une transaction.

Contrôle des transactions

Vous pouvez contrôler la logique des transactions en utilisant les ordres COMMIT, SAVEPOINT, et ROLLBACK.

Ordre Description
COMMIT Termine la transaction courante en rendant toutes les modifications de données permanentes.
SAVEPOINT savepoint_name Crée un point de sauvegarde dans la transaction courante.
ROLLBACK Termine la transaction courante en annulant toutes les modifications de données en attente.
ROLLBACK TO [SAVEPOINT] savepoint_name Annule les modifications et supprime les points de sauvegarde effectués après le point de sauvegarde spécifié. Si vous ne spécifiez pas la clause TO [SAVEPOINT], l'ordre ROLLBACK annulera la transaction entière. Il n’est pas possible d’afficher les noms de sauvegardes créées.
[Note]

SAVEPOINT ne fait pas partie du standard SQL ANSI.

Vous pouvez créer un point de sauvegarde dans la transaction courante en utilisant l’ordre SAVEPOINT qui divise la transaction en plusieurs parties. Ensuite, vous pouvez annuler les changements en attente jusqu’au point de sauvegarde en utilisant ROLLBACK TO SAVEPOINT.

L’exemple suivant crée un point de sauvegarde dans la transaction courante.

UPDATE...
SAVEPOINT update_done;
Savepoint created.

L’ordre ci-dessous annule toutes les modifications effectuées après le point de sauvegarde update_done.

INSERT...
ROLLBACK TO update_done;
Rollback complete.

Traitement implicite des transactions

Une transaction peut être validée ou annulée automatiquement suite aux événements suivants :

Statut Événements
COMMIT automatique Un ordre DDL ou DCL est exécuté. iSQL*Plus se termine normalement, sans qu’ordre COMMIT ou ROLLBACK soit exécuté explicitement.
ROLLBACK automatique iSQL*Plus se termine anormalement ou une défaillance système a lieu.
[Note]

Une troisième commande est disponible dans iSQL*Plus. La commande AUTOCOMMIT peut être en état ON ou OFF. Lorsque autocommit est activé (grâce à la commande iSQL*Plus SET AUTOCOMMIT ON), chaque ordre DML est validé dès son exécution. Vous ne pouvez pas annuler les changements avec un ROLLBACK. Si autocommit est désactivé (état par défaut : SET AUTOCOMMIT OFF), l'ordre COMMIT peut toujours être utilisé de manière explicite. De plus, l'ordre COMMIT est exécuté lors d'une requête DDL ou lors de la fermeture de iSQL*Plus.

Défaillance système

Lorsqu'une transaction est interrompue par une erreur système, la transaction entière est automatiquement annulée. Cela prévient des changements indésirables des données et retourne la table à son état lors de la dernière validation (COMMIT). Ainsi, le serveur Oracle protège l'intégrité des données des tables.

Dans iSQL*Plus, une sortie normale de la session est accomplie en cliquant sur le bouton Exit ou bien en exécutant la commande EXIT dans le prompt. Le faite de fermer la fenêtre du navigateur est interprété comme une sortie anormale.

Etat des données avant un COMMIT ou un ROLLBACK

Tout changement de données pendant une transaction est temporaire jusqu'à ce que la transaction soit validée.

L'état des données avant que l’ordre COMMIT ou ROLLBACK ne soit exécuté peut être décrit ainsi :

  • Les opérations de manipulation de données affectent premièrement le buffer de la base de données; ainsi, l'état précédent des données peut être récupéré.

  • L'utilisateur courant peut vérifier les résultats des opérations de manipulation de données en interrogeant les tables.

  • Les autres utilisateurs ne peuvent pas voir les résultats des opérations de manipulation de données effectuées par l'utilisateur courant. Le serveur Oracle fournit une consistance de lecture qui assure que chaque utilisateur voit les données telles qu'elles étaient au moment du dernier COMMIT.

  • Les lignes affectées sont verrouillées, les autres utilisateurs ne peuvent pas changer les données dans les lignes affectées.

Etat des données après un COMMIT

Vous rendez permanents tous les changements en attente de validation en utilisant la clause COMMIT. Voici ce qui se passe après un ordre COMMIT :

  • Les changements sont écrits dans la base de données.

  • L'état précédent des données n'est plus disponible avec des requêtes SQL normales.

  • Tous les utilisateurs peuvent voir les résultats de la transaction.

  • Les verrous sur les lignes affectées sont supprimés; les lignes sont donc accessibles aux autres utilisateurs et ils peuvent y apporter de nouvelles modifications.

  • Tous les points de sauvegarde sont supprimés.

Exemples :

L'exemple ci-dessous supprime une ligne de la table EMPLOYEES et ajoute une nouvelle ligne dans la table DEPARTMENTS. On rend, ensuite, les changements permanents en exécutant un ordre COMMIT.

DELETE FROM employes
WHERE  employee_id = 99999;
1 row deleted.

INSERT INTO departments
VALUES (290,’Corporate Tax’,NULL,1700);
1 row created.

COMMIT;
Commit complete.

Dans l’exemple suivant, on supprime les départements 290 et 300 de la table DEPARTMENTS et on met à jour une ligne de la table COPY_EMP. Enfin, on valide les changements.

DELETE FROM departments
WHERE  department_id IN (290, 300);
1 row deleted.

UPDATE employees
SET    department_id = 80
WHERE  employee_id = 206;
1 row updated.

COMMIT;
Commit Complete.

État des données après un ROLLBACK

En utilisant la commande ROLLBACK, vous annulez tous les changements courants :

  • Les changements des données sont annulés

  • L’état précédant des données est restauré

  • Les verrous sur les lignes affectées sont levés

Exemple :

En essayant de supprimer un enregistrement de la table TEST, vous avez accidentellement vidés la table. Pour corriger cette erreur, vous annulez les changements, ré-exécutez la requête appropriée et, finalement, validez les modifications effectués.

DELETE FROM test;      
25,000 rows deleted.

ROLLBACK;
Rollback complete.

DELETE FROM test WHERE id = 100;
1 row deleted.

SELECT * FROM test 
WHERE  id = 100;

No rows selected.

COMMIT;
Commit complete.

Statement-Level Rollback

Une partie de la transaction peut être annulée par un rollback implicite si une erreur est détectée pendant l’exécution de la requête. Si un seul ordre DML échoue durant l’exécution de la transaction, son effet est annulé par un statement-level rollback, or, les changements réalisés par les ordres DML précédents ne seront pas annulés. Ils peuvent être annulés ou validés explicitement par l’utilisateur.

Le serveur Oracle réalise un COMMIT implicite avant et après un ordre DDL. Ainsi, même si votre ordre DDL ne s’exécute pas avec succès, vous ne pouvez pas annuler la requête (DML) précédente parce que le serveur a réalisé un COMMIT.

Terminez vos transactions de façon explicite en exécutant un ordre COMMIT ou ROLLBACK.

Lecture consistante

Les utilisateurs accèdent à la base de données de deux manières :

  • Lors des opérations de lecture (requête SELECT)

  • Lors des opérations d’écriture (requête INSERT, UPDATE, DELETE)

Vous avez besoin d’une lecture consistante pour les cas suivants :

  • Les utilisateurs de la base de données (réalisant des opérations de lecture ou d’écriture) sont assurés d’avoir vue consistante des données.

  • Les utilisateurs interrogeant la base de données ne voient pas les données qui sont en cours de modification.

  • Les utilisateurs désirant écrire dans la base de données sont assurés que les changements sur la base des données sont réalisés de manière cohérente.

  • Les changements effectués par un utilisateur réalisant des opérations d’écriture ne perturbent pas et ne rentrent pas en conflit avec les modifications faites par un autre utilisateur.

Le but de la lecture consistante est d’assurer que chaque utilisateur voit les données dans l'état dans lequel elles étaient lors du dernier COMMIT, avant qu’une opération DML ne soit exécutée.

La lecture consistante est une implémentation automatique. Elle garde une copie partielle de la base de données dans les segments undo (undo ou défaire). L’image de consistance de lecture (read-consistent image) est faite de données validées provenant d’une table et d’anciennes données qui ont été modifiées mais pas encore validées provenant d’un segment undo.

Quand une opération telle qu’INSERT, UPDATE ou DELETE est exécutée, le serveur Oracle garde une copie des données avant que celles-ci ne soient modifiées et les écrit dans un segment undo.

Tous les utilisateurs interrogeant la base de données, à l’exception de celui qui a apporté les modifications, voient toujours la base de données telle qu’elle existait avant le début des modifications. Ils voient un snapshot (une photo) des données contenues dans le segment undo.

Avant que les changements ne soient validés par un ordre COMMIT, seul l’utilisateur qui est en train de modifier les données voit les modifications effectuées. Les autres utilisateurs ne voient que des snapshot du segment undo. Cela garantie que les utilisateurs interrogeant la base de données visualisent des données consistantes, pas les données subissant des changements.

Quand un ordre DML est validé, les changements faits sur la base de données deviennent visibles à tout le monde. L’espace occupé par les anciennes données dans le segment undo est libéré pour réutilisation.

Si un ordre ROLLBACK est exécuté, tous les changements sont annulés :

  • Les valeurs originales (les valeurs antérieures) des données stockées dans les segments undo sont réécrites dans la table.

  • Tous les utilisateurs voient la base de données telle qu’elle existait avant que la transaction ne commence.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels