Je hebt daar geen string (ik neem aan str
wordt gedeclareerd als een karakter van een beschrijving). Als je een string wilt invoegen, heb je extra aanhalingstekens nodig, anders wordt het in dit geval als een kolom geïnterpreteerd. Iets als:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
Houd er rekening mee dat ik de puntkomma aan het einde van je string heb verwijderd; dit is niet vereist (en is waarschijnlijk de werkelijke oorzaak van uw fout).
Het is ook vermeldenswaard dat dit een beetje SQL- injectieachtig ... je zou bindvariabelen in plaats van aaneenschakeling; dit wordt allemaal beschreven in de documentatie :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
In deze context is het echter niet nodig om dynamische SQL te gebruiken; je zou gewoon de variabele waarde kunnen invoegen:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
Ten slotte maak ik me een beetje zorgen over je COMMIT
; het is ongebruikelijk om vast te leggen nadat een fout op deze manier is afgehandeld. Zonder meer context is het onmogelijk om zeker te zijn, maar het zou meer normaal zijn om foutenregistratie uit te voeren in een autonome transactie