Du har ingen sträng där (jag antar str
deklareras som en karaktär av någon beskrivning). Om du vill infoga en sträng behöver du extra citattecken annars kommer den att tolkas som en kolumn i det här fallet. Något i stil med:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
Observera att jag har tagit bort semikolonet från slutet av din sträng; detta krävs inte (och är förmodligen den faktiska orsaken till ditt fel).
Det är också värt att notera att detta är lite SQL- injektion ... du bör använda bindningsvariabler snarare än sammanlänkning; allt detta beskrivs i dokumentationen :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
Det finns dock inget behov av att använda dynamisk SQL i detta sammanhang; du kan helt enkelt infoga variabelvärdet:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
Slutligen är jag lite orolig över din COMMIT
; det är ovanligt att begå efter att ha hanterat ett fel på detta sätt. Utan mer sammanhang är det omöjligt att vara säker men det skulle vara mer normalt att felloggning utförs på en autonom transaktion