Update multi-tables

Bonjour,

4D me signale une erreur de syntaxe sur cette requette :
update conv
set conv.Libelle=concat(concat(nom.Code,’ : '),nom.Libelle)
from convention conv, nomenclature nom
where nom.ID_nomenclature = conv.Dependant_De);

:

Erreur lors de l’exécution de la méthode “TESTS” à la ligne 71

Generic parsing error. Parsing failed in or around the following
substring interval - ( 97, 102 ) - …le) from c…

Error code: 1301 (SQLS)
Generic parsing error. Parsing failed in or around the following
substring interval - ( 97, 102 ) - …le) from c…
component: ‘SQLS’
task -6, name: ‘P_2’

N’est’il pas possible d’utiliser deux tables pour réaliser un update ?

Merci !!

Bonjour à tous,

J’ai tenté aussi update convention conv, nomenclature nom
set conv.Libelle=concat(concat(nom.Code,’ : '),nom.Libelle)
where nom.ID_nomenclature = conv.Dependant_De); sans plus de succès…

sans garantie, je ferai plutot un truc dans le genre :

update conv
set conv.Libelle=concat(concat(nom.Code ,’ : '),nom.Libelle)
where nom.ID_nomenclature = conv.Dependant_De);

mais d’après la doc, suis pas sur que tu puises le faire car la doc dit : ‘La commande UPDATE est prise en charge dans les requêtes et les sous-requêtes. Toutefois, l’instruction UPDATE positionnée n’est pas permise.’

Bonjour Patrick,

Dans ce cas 4D me signale que “La table ‘nom’ n’est pas déclarée dans la clause FROM”

essaye de rajouter le nom des autres tables, mais je ne suis pas sur

Bonjour,

A mon avis l’update en SQL pourrait se faire à l’aide d’un select :

update convention
set Libelle=(select CONCAT(CONCAT(nom.code, ‘:’), nom.libelle) from
nomenclature nom where
nom.ID_nomenclature = convention.Dependant_De );

Pour de meilleures performances, il faudrait penser à une table temporaire peut-être.

En espérant avoir aidé…

Avec une sous-sélection je retombe sur une “Generic parsing error” sur “e=(selec” malheureusement.
4D-SQL n’aime pas les sous-sélections dans un update :frowning:

: Patrick EMANUEL

essaye de rajouter le nom des autres tables, mais je ne suis pas sur
J’ai essayé en effet de rajouter la deuxième table dans la clause update, mais c’est pareil : refus catégorique de 4D… :frowning:

Comme cela je dirai que les mises à jour doivent être simple

donc, :
update conv
set conv.Libelle=concat(concat(nom.Code,’ : '),nom.Libelle)
from convention conv, nomenclature nom
where nom.ID_nomenclature = conv.Dependant_De);

peut devenir:

select ID_nomenclature, CONCAT(CONCAT(code, ‘:’), libelle) from nom where
nom.ID_nomenclature = convention.Dependant_De ) into :[$id], :[$libelle];

set conv.Libelle :[$libelle]
from convention
where convention.Dependant_De = :$;

A voir