Postgresql - Modifier une chaine dans un champs (replace dans update)

, par  admin

Bonjour à tous,

Voici une exemple de requête basique pour modifier une partie seulement des valeurs contenues dans un champs :

UPDATE matable SET champs1 = REPLACE(champs1, 'Hello', 'Bonjour')

Maintenant, imaginons que nous souhaitons modifier les chaînes de ce champs en fonction d’une liste de valeurs dynamiques contenues dans une table de correspondance.

Exemple :
Ma table de correspondance comprend 2 champs, ancien_nom et nouveau_nom.
Nous souhaitons modifier le champs1 de notre précédente table seulement si sa valeur correspond à une valeur du champs ancien_nom de notre table de correspondance. Dans ce cas, nous remplacerons la valeur ancien_nom par nouveau_nom.

DECLARE

r table_correspondance%ROWTYPE;
ancien_nom text;
nouveau_nom text;

BEGIN
SET search_path TO crm;

for r IN SELECT * from table_correspondance LOOP
ancien_nom := r.ancien_nom;
nouveau_nom := r.nouveau_nom;
UPDATE matable SET champs1 = REPLACE(champs1, ancien_nom, nouveau_nom);
end loop;

Tout simplement ;)

Un peu de théorie... Tous les cours théoriques