Oracle
 sql >> Database >  >> RDS >> Oracle

errore di carattere non valido durante l'esecuzione immediata

Non hai una stringa lì (presumo str è dichiarato come un personaggio di una certa descrizione). Se vuoi inserire una stringa hai bisogno di virgolette extra, altrimenti in questo caso verrà interpretata come una colonna. Qualcosa come:

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

Tieni presente che ho rimosso il punto e virgola dalla fine della stringa; questo non è richiesto (ed è probabilmente la vera causa del tuo errore).

Vale anche la pena notare che questo è un po' SQL- iniettabile ... dovresti usare associare le variabili piuttosto che concatenazione; tutto questo è descritto nella la documentazione :

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

Tuttavia, non è necessario utilizzare SQL dinamico in questo contesto; potresti semplicemente inserire il valore della variabile:

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

Infine, sono leggermente preoccupato per il tuo COMMIT; è insolito eseguire il commit dopo aver gestito un errore in questo modo. Senza più contesto è impossibile esserne certi, ma sarebbe più normale che la registrazione degli errori venga eseguita in un transazione autonoma