2017-06-13 1 views
0

J'utilise la première fois la commande EXECUTE IMMEDIATE et je demande si vous pouvez m'aider.EXECUTE IMMEDIATE Requête de mise à jour avec colonne de variable

J'ai une colonne variable en raison de ce que je recherche sur Internet et a trouvé la commande d'exécution immédiate, mais il me donne l'erreur suivante:

ORA-00904: "ACTUATION": invalid identifier
ORA-06512: at line 9

Je suis vraiment confus, parce que ACTIONNEMENT est le « old_val "colonne et pas la colonne" column_name "peut-être vous pouvez m'aider. Voici le code:

declare 
cursor such is 
select column_name, old_val, CTN.ID from abc.firsttable 
ctn, def.secondtable#CC ctncc 
where CTN.bup#rev = CTNCC.bup#rev 
and ID in (127605689) 
and CTN.bup#changefrom > to_date ('08/06/2017', 'dd/MM/YYYY'); 
begin 
for srec in such loop 
EXECUTE IMMEDIATE 
'update firsttable ctn2 
set ctn.' || srec.column_name || ' = '|| srec.old_val ||' 
where CTN2.ID = '|| srec.id; 
end loop; 
end; 
+2

Construire la requête SQL et l'imprimer. 95% du temps, l'erreur est évidente. –

Répondre

0

je pense, vous devez ajouter plus ' entre params de chaîne:

montrer, dans votre code i ajouté 3 ' entre || srec.old_val ||

EXECUTE IMMEDIATE 
'update firsttable ctn2 
set ctn.' || srec.column_name || ' = '''|| srec.old_val ||''' 
where CTN2.ID = '|| srec.id; 
end loop; 
end; 
+0

Merci! Parfois, c'est si simple que vous ne pouvez pas voir le problème. – Xplosio

+0

Notez, cela échouera pour des valeurs comme 'ne pas le citer comme ceci' –

3

Essayez celui-ci:

EXECUTE IMMEDIATE 
    'update firsttable ctn2 
    set ctn.' || srec.column_name || ' = :OldVal 
    where CTN2.ID = :id' 
using srec.old_val, srec.id; 
+0

C'est mieux que la réponse acceptée, en termes de performance et d'évolutivité. –