Du har ikke en streng der (jeg går ud fra str
er erklæret som en karakter af en eller anden beskrivelse). Hvis du vil indsætte en streng, skal du bruge ekstra anførselstegn, ellers vil den blive fortolket som en kolonne i dette tilfælde. Noget som:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
Bemærk venligst, at jeg har fjernet semikolon fra enden af din streng; dette er ikke påkrævet (og er sandsynligvis den faktiske årsag til din fejl).
Det er også værd at bemærke, at dette er lidt SQL- injektion ... du burde bruge bindingsvariabler snarere end sammenkædning; alt dette er beskrevet i dokumentationen :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
Der er dog ingen grund til at bruge dynamisk SQL i denne sammenhæng; du kan blot indsætte variabelværdien:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
Til sidst er jeg lidt bekymret over din COMMIT
; det er usædvanligt at begå efter håndtering af en fejl på denne måde. Uden mere kontekst er det umuligt at være sikker, men det ville være mere normalt, at fejllogning udføres på en autonom transaktion