sql >> Base de Datos >  >> RDS >> Oracle

error de carácter no válido al ejecutar inmediato

No tienes una cadena allí (supongo que str se declara como un carácter de alguna descripción). Si desea insertar una cadena, necesita comillas adicionales; de lo contrario, se interpretará como una columna en esta instancia. Algo como:

begin
   ...
exception
   when others then
     sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
     execute immediate sqltext2;
end;
commit;

Tenga en cuenta que eliminé el punto y coma del final de su cadena; esto no es obligatorio (y probablemente sea la causa real de su error).

También vale la pena señalar que esto es un poco SQL- inyectable ... debería usar vincular variables en lugar de concatenación; todo esto se describe en la documentación :

begin
   ...
exception
   when others then
     execute immediate 'insert into error_table_shree select :1 from dual' 
                  using str;
end;
commit;

Sin embargo, no hay necesidad de usar SQL dinámico en este contexto; simplemente puede insertar el valor de la variable:

begin
   ...
exception
   when others then
     insert into error_table_shree values (str);
end;
commit;

Por último, estoy un poco preocupado por su COMMIT; es inusual comprometerse después de manejar un error de esta manera. Sin más contexto es imposible estar seguro, pero sería más normal que el registro de errores se realizara en un transacción autónoma