Linstruction UPDATE
modifie les valeurs des colonnes spécifiées dans une ou plusieurs lignes dune table ou dune vue. Pour une description complète de linstruction SQL UPDATE
, consultez Oracle Database SQL Reference.
Syntaxe
update statement :: =
Description de lillustration update_statement.gif
Description des mots clés et paramètres
alias
Un autre nom (généralement court) pour la table ou la vue référencée, généralement utilisé dans la clause WHERE
.
nom_colonne
La colonne (ou lune des colonnes) à mettre à jour. Il doit sagir du nom dune colonne dans la table ou la vue référencée. Un nom de colonne ne peut pas être répété dans la liste column_name
. Les noms de colonnes ne doivent pas nécessairement apparaître dans linstruction UPDATE
dans le même ordre quils apparaissent dans la table ou la vue.
clause_retour
Renvoie les valeurs à partir des lignes mises à jour, éliminant le besoin de SELECT
les lignes par la suite. Vous pouvez récupérer les valeurs de colonne dans des variables ou des variables hôtes, ou dans des collections ou des tableaux dhôtes. Vous ne pouvez pas utiliser la clause RETURNING
pour les mises à jour à distance ou en parallèle. Si linstruction naffecte aucune ligne, les valeurs des variables spécifiées dans la clause RETURNING
ne sont pas définies. Pour la syntaxe de returning_clause
, voir « Clause RETURNING INTO ».
SET column_name = sql_expression
Cette clause attribue la valeur de sql_expression
à la colonne identifiée par column_name
. Si sql_expression
contient des références à des colonnes du tableau en cours de mise à jour, les références sont résolues dans le contexte de la ligne courante. Les anciennes valeurs de colonne sont utilisées sur le côté droit du signe égal.
SET nom_colonne = (sous-requête3)
Attribue la valeur extraite de la base de données par subquery3
à la colonne identifiée par column_name
. La sous-requête doit renvoyer exactement une ligne et une colonne.
SET (nom_colonne, nom_colonne, …) = (sous-requête4)
Attribue les valeurs extraites de la base de données par subquery4
aux colonnes de la liste column_name
. La sous-requête doit renvoyer exactement une ligne qui comprend toutes les colonnes répertoriées. Les valeurs de colonne renvoyées par la sous-requête sont affectées aux colonnes de la liste de colonnes dans lordre. La première valeur est affectée à la première colonne de la liste, la deuxième valeur est affectée à la deuxième colonne de la liste, et ainsi de suite.
sql_expression
Toute expression SQL valide. Pour plus dinformations, consultez Oracle Database SQL Reference.
sous-requête
Une instruction SELECT
qui fournit un ensemble de lignes à traiter. Sa syntaxe est similaire à celle de select_into_statement
sans la clause INTO
. Voir « Instruction SELECT INTO ».
table_reference
Une table ou une vue qui doit être accessible lorsque vous exécutez linstruction UPDATE
, et pour dont vous devez disposer des privilèges UPDATE
. Pour la syntaxe de table_reference
, voir « Instruction DELETE ».
TABLE (sous-requête2)
Lopérande de TABLE
est une instruction SELECT
qui renvoie une valeur de colonne unique, qui doit être une table imbriquée ou un varray. Lopérateur TABLE
informe Oracle que la valeur est une collection et non une valeur scalaire.
WHERE CURRENT OF cursor_name
Fait référence à la dernière ligne traité par linstruction FETCH
associée au curseur spécifié. Le curseur doit être FOR
UPDATE
et doit être ouvert et positionné sur une ligne. Si le curseur nest pas ouvert, la clause CURRENT
OF
provoque une erreur. Si le curseur est ouvert, mais quaucune ligne na été récupérée ou que la dernière extraction na renvoyé aucune ligne, PL / SQL lève lexception prédéfinie NO_DATA_FOUND
.
WHERE condition_recherche
Choisit les lignes à mettre à jour dans la table de base de données. Seules les lignes répondant à la condition de recherche sont mises à jour. Si vous omettez cette clause, toutes les lignes du tableau sont mises à jour.
Notes dutilisation
Vous pouvez utiliser UPDATE
WHERE
CURRENT
OF
instruction après une extraction depuis un curseur ouvert (y compris les récupérations effectuées par un curseur FOR
loop), à condition que la requête associée soit FOR
UPDATE
. Cette instruction met à jour la ligne qui vient dêtre extraite.
Le curseur implicite SQL
et les attributs du curseur %NOTFOUND
, %FOUND
, %ROWCOUNT
et %ISOPEN
vous permettent daccéder à des informations utiles sur lexécution dun UPDATE
Exemples
Lexemple 13-7 crée une table avec des ID demployés corrects mais des noms déformés. Ensuite, il exécute une instruction UPDATE
avec une requête corrélée, pour récupérer les noms corrects de la table EMPLOYEES
et corriger les noms dans la nouvelle table .
Pour des exemples, consultez ce qui suit:
Exemple 1-12, « Création dun sous-programme stocké »
Exemple 4-1, « Utilisation dune instruction IF-THEN simple »
Exemple 5-51, « Mise à jour dune ligne à laide dun enregistrement »
Exemple 5-52, « Utilisation de la clause RETURNING avec un enregistrement »
Exemple 6-1, « Manipulation de données avec PL / SQL »
Exemple 6-5, « Utilisation de CURRVAL et NEXTVAL »
Exemple 6-6, « Utilisation de ROWNUM »
Exemple 6-38, « Utilisation de SAVEPOINT avec ROLLBACK »
Exemple 6-41, « Utilisation de CURRENT OF pour mettre à jour la dernière ligne extraite dun curseur «
Exemple 7-1, » Exemples de SQL dynamique «
Exemple 7-5, » SQL dynamique avec clause RETURNING BULK COLLECT INTO «
Exemple 7-6 , « Instruction SQL dynamique à lintérieur de FORALL »
Exemple 11-6, « Utilisation des annulations avec FORALL »
Exemple 11-9, « Opération en masse qui se poursuit malgré les exceptions »
Rubriques connexes
« Manipulation de données »
« Instruction DELETE »
« Instruction FETCH »
« Instruction INSERT »