Oracle
 sql >> Base de données >  >> RDS >> Oracle

erreur de caractère non valide lors de l'exécution immédiate

Vous n'avez pas de chaîne ici (je suppose que str est déclaré comme un caractère d'une certaine description). Si vous vouliez insérer une chaîne, vous avez besoin de guillemets supplémentaires, sinon elle sera interprétée comme une colonne dans cette instance. Quelque chose comme :

begin
   ...
exception
   when others then
     sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
     execute immediate sqltext2;
end;
commit;

Veuillez noter que j'ai supprimé le point-virgule à la fin de votre chaîne ; ce n'est pas obligatoire (et c'est probablement la cause réelle de votre erreur).

Il convient également de noter que c'est un peu SQL- injection ... vous devriez utiliser variables de liaison plutôt que la concaténation ; tout est décrit dans la documentation :

begin
   ...
exception
   when others then
     execute immediate 'insert into error_table_shree select :1 from dual' 
                  using str;
end;
commit;

Cependant, il n'est pas nécessaire d'utiliser SQL dynamique dans ce contexte; vous pouvez simplement insérer la valeur de la variable :

begin
   ...
exception
   when others then
     insert into error_table_shree values (str);
end;
commit;

Enfin, je suis légèrement préoccupé par votre COMMIT; il est inhabituel de valider après avoir géré une erreur de cette manière. Sans plus de contexte, il est impossible d'être certain, mais il serait plus normal que la journalisation des erreurs soit effectuée dans un transaction autonome