Nemáte tam řetězec (předpokládám str
je deklarován jako znak nějakého popisu). Pokud jste chtěli vložit řetězec, potřebujete další uvozovky, jinak bude v tomto případě interpretován jako sloupec. Něco jako:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
Vezměte prosím na vědomí, že jsem z konce vašeho řetězce odstranil středník; to není povinné (a je to pravděpodobně skutečná příčina vaší chyby).
Za zmínku také stojí, že je to trochu SQL- injekční ... měli byste používat bind variables spíše než zřetězení; to vše je popsáno v dokumentaci :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
V tomto kontextu však není nutné používat dynamické SQL; můžete jednoduše vložit hodnotu proměnné:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
Nakonec mě trochu znepokojuje váš COMMIT
; je neobvyklé zavázat se po zpracování chyby tímto způsobem. Bez dalšího kontextu si nelze být jisti, ale bylo by normálnější, kdyby se protokolování chyb provádělo na autonomní transakce