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