Non hai una stringa lì (presumo str
è dichiarato come un personaggio di una certa descrizione). Se vuoi inserire una stringa hai bisogno di virgolette extra, altrimenti in questo caso verrà interpretata come una colonna. Qualcosa come:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
Tieni presente che ho rimosso il punto e virgola dalla fine della stringa; questo non è richiesto (ed è probabilmente la vera causa del tuo errore).
Vale anche la pena notare che questo è un po' SQL- iniettabile ... dovresti usare associare le variabili piuttosto che concatenazione; tutto questo è descritto nella la documentazione :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
Tuttavia, non è necessario utilizzare SQL dinamico in questo contesto; potresti semplicemente inserire il valore della variabile:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
Infine, sono leggermente preoccupato per il tuo COMMIT
; è insolito eseguire il commit dopo aver gestito un errore in questo modo. Senza più contesto è impossibile esserne certi, ma sarebbe più normale che la registrazione degli errori venga eseguita in un transazione autonoma