Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

erro de caractere inválido ao executar imediato


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