Você não tem uma string lá (presumo que
str
é declarado como um personagem de alguma descrição). Se você quiser inserir uma string, precisará de aspas extras, caso contrário, será interpretada como uma coluna nesta instância. Algo como:begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
Observe que eu removi o ponto e vírgula do final de sua string; isso não é necessário (e provavelmente é a causa real do seu erro).
Também vale a pena notar que isso é um pouco SQL- injeção ... você deve usar variáveis de ligação a> em vez de concatenação; tudo isso está descrito na documentação :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
No entanto, não há necessidade de usar SQL dinâmico neste contexto; você pode simplesmente inserir o valor da variável:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
Por fim, estou um pouco preocupado com seu
COMMIT
; é incomum cometer depois de lidar com um erro dessa maneira. Sem mais contexto, é impossível ter certeza, mas seria mais normal que o registro de erros fosse executado em um transação autônoma