Nie masz tam ciągu (zakładam str
jest zadeklarowana jako postać pewnego opisu). Jeśli chcesz wstawić ciąg, potrzebujesz dodatkowych cudzysłowów, w przeciwnym razie zostanie on zinterpretowany jako kolumna w tym przypadku. Coś takiego:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
Zwróć uwagę, że usunąłem średnik z końca twojego ciągu; nie jest to wymagane (i prawdopodobnie jest to rzeczywista przyczyna twojego błędu).
Warto również zauważyć, że jest to nieco SQL- zastrzyk ... powinieneś używać zmiennych wiązania zamiast konkatenacji; to wszystko jest opisane w dokumentacji :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
Jednak w tym kontekście nie ma potrzeby używania dynamicznego SQL; możesz po prostu wstawić wartość zmiennej:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
Wreszcie, jestem nieco zaniepokojony twoim COMMIT
; zatwierdzenie po obsłudze błędu w ten sposób jest rzadkością. Bez większego kontekstu nie można być pewnym, ale bardziej normalne byłoby rejestrowanie błędów na transakcja autonomiczna