Нямате низ там (предполагам, че str
се декларира като символ на някакво описание). Ако искате да вмъкнете низ, имате нужда от допълнителни кавички, в противен случай той ще бъде интерпретиран като колона в този случай. Нещо като:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
Моля, обърнете внимание, че премахнах точката и запетая от края на вашия низ; това не е задължително (и вероятно е действителната причина за вашата грешка).
Също така си струва да се отбележи, че това е малко SQL- инжектиране ... трябва да използвате свързващи променливи а не конкатенация; всичко това е описано в документацията :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
Въпреки това, няма нужда да използвате динамичен SQL в този контекст; можете просто да вмъкнете стойността на променливата:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
И накрая, малко съм загрижен за вашия COMMIT
; необичайно е да се ангажирате след обработка на грешка по този начин. Без повече контекст е невъзможно да бъдем сигурни, но би било по-нормално регистрирането на грешки да се извършва в автономна транзакция