Vous n'êtes pas identifié(e).
Pages : 1
Après avoir retourné le problème dans tous les sens, l'erreur est toute bête.
Il faut simplement mettre %% à la place de % comme indiqué dans le résultat d'erreur
Merci rjuju pour le placement du CASE car je ne savais pas comment faire.
Merci pour votre retour.
Quelle condition exactement? Vous n'avez aucune clause where donc la mise à jour va s'effectuer sur toutes les lignes, que le contenu change ou non.
Si la route contient un 'G' ça le remplace par '_G'
Utiliser ce CASE dans votre SET "ROUTE" ne fonctionne pas ? Quelle est l'erreur ?
En integrant CASE dans SET ci-dessous :
DO
$do$
DECLARE
sch text := 'test'; -- your schema here
tbl text;
BEGIN
FOR tbl IN
SELECT tablename FROM pg_catalog.pg_tables
WHERE schemaname = sch
LOOP
EXECUTE format($$UPDATE %I.%I SET "ROUTE" =
CASE
WHEN "ROUTE" = '10 D0001G' THEN '10 D0001G'
WHEN "ROUTE" LIKE '%G%' THEN replace ("ROUTE" , 'G', '_G')
WHEN "ROUTE" LIKE '%E_%' THEN REPLACE ("ROUTE" , 'E', '_E')
WHEN "ROUTE" LIKE '%B_' THEN REPLACE ("ROUTE" , 'B', '_B')
ELSE "ROUTE"
END
$$, sch, tbl);
END LOOP;
END
$do$;
J'ai l'erreur :
ERREUR: spécificateur de type « G » pour format() non reconnu
HINT: Pour un unique "%" utilisez "%%".
CONTEXT: fonction PL/pgsql inline_code_block, ligne 1 à EXECUTE
Bonjour,
je dois remplacer les valeurs du champ "ROUTE" champ dans toutes les tables du schéma "test".
Ma requête est :
DO
$do$
DECLARE
sch text := 'test';
tbl text;
BEGIN
FOR tbl IN
SELECT tablename FROM pg_catalog.pg_tables
WHERE schemaname = sch
LOOP
EXECUTE format($$UPDATE %I.%I SET "ROUTE" = replace("ROUTE", 'G', '_G')$$, sch, tbl);
END LOOP;
END
$do$;
Mais ça remplace toutes les routes remplissant cette condition.
En réalité, ma requête dois remplir toutes les conditions suivantes mais je n'arrive pas à imbriquer les 2 codes.
CASE
WHEN "ROUTE" = '10 D0001G' THEN '10 D0001G'
WHEN "ROUTE" LIKE '%G%' THEN replace ("ROUTE" , 'G', '_G')
WHEN "ROUTE" LIKE '%E_%' THEN REPLACE ("ROUTE" , 'E', '_E')
WHEN "ROUTE" LIKE '%B_' THEN REPLACE ("ROUTE" , 'B', '_B')
ELSE "ROUTE"
END
Savez-vous comment faire ?
Merci par avance pour votre aide.
Pages : 1