Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ungültiger Zeichenfehler beim sofortigen Ausführen

Sie haben dort keinen String (ich nehme an, str als ein Charakter mit einer Beschreibung deklariert wird). Wenn Sie eine Zeichenfolge einfügen möchten, benötigen Sie zusätzliche Anführungszeichen, da sie sonst in diesem Fall als Spalte interpretiert wird. Etwas wie:

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

Bitte beachten Sie, dass ich das Semikolon am Ende Ihrer Zeichenfolge entfernt habe. dies ist nicht erforderlich (und ist wahrscheinlich die eigentliche Ursache Ihres Fehlers).

Es ist auch erwähnenswert, dass dies ein bisschen SQL- Injektiony ... sollten Sie Bind-Variablen eher als Verkettung; dies ist alles in der Dokumentation beschrieben :

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

In diesem Zusammenhang ist es jedoch nicht erforderlich, dynamisches SQL zu verwenden. Sie könnten einfach den Variablenwert einfügen:

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

Abschließend bin ich etwas besorgt über Ihr COMMIT; Es ist ungewöhnlich, nach der Behandlung eines Fehlers auf diese Weise zu committen. Ohne mehr Kontext ist es unmöglich, sicher zu sein, aber es wäre normaler, wenn die Fehlerprotokollierung auf einem autonome Transaktion