J'ai une table que j'ai besoin de mettre à jour avec certaines données d'une feuille de calcul Excel. Je pense à une requête dans ce sens:Utilisation des instructions "WITH" et "UPDATE" dans la même requête SQL
WITH temp AS(
(SELECT 'abcd' AS oldvalue, 'defg' AS newvalue FROM dual) UNION
(SELECT .....) --About 300 lines of this, copied from Excel and then formatted into the SELECT statement
)
UPDATE mytable
SET name = (SELECT newvalue FROM temp WHERE mytable.name = temp.oldvalue)
Mais Oracle ne semble pas avoir comme une déclaration « AVEC » et « Mettre à Jour » dans la même requête. Je reçois une erreur disant "Mot-clé SELECT manquant". Je l'ai découvert que je peux mettre la définition de table temporaire dans l'instruction SELECT, à savoir
SET name = (SELECT newvalue FROM (
(SELECT 'abcd' AS oldvalue, 'defg' AS newvalue FROM dual) UNION
(SELECT .....)
) temp WHERE mytable.name = temp.oldvalue)
Mais c'est horriblement, horriblement le code désordre pour définir une table comme ça au milieu de la requête. Je grince juste en y pensant. Il doit y avoir une meilleure façon de faire cela. Devrais-je mettre en place une table temporaire globale? Ou est-ce que je manque juste une syntaxe simple qui ferait de ce travail la manière originale?
Je pense que créer une table temporaire est certainement la meilleure façon de le faire. –