sql >> Database >  >> RDS >> Oracle

ongeldig tekenfout tijdens het uitvoeren van onmiddellijk

Je hebt daar geen string (ik neem aan str wordt gedeclareerd als een karakter van een beschrijving). Als je een string wilt invoegen, heb je extra aanhalingstekens nodig, anders wordt het in dit geval als een kolom geïnterpreteerd. Iets als:

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

Houd er rekening mee dat ik de puntkomma aan het einde van je string heb verwijderd; dit is niet vereist (en is waarschijnlijk de werkelijke oorzaak van uw fout).

Het is ook vermeldenswaard dat dit een beetje SQL- injectieachtig ... je zou bindvariabelen in plaats van aaneenschakeling; dit wordt allemaal beschreven in de documentatie :

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

In deze context is het echter niet nodig om dynamische SQL te gebruiken; je zou gewoon de variabele waarde kunnen invoegen:

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

Ten slotte maak ik me een beetje zorgen over je COMMIT; het is ongebruikelijk om vast te leggen nadat een fout op deze manier is afgehandeld. Zonder meer context is het onmogelijk om zeker te zijn, maar het zou meer normaal zijn om foutenregistratie uit te voeren in een autonome transactie



  1. De snelste manier om te controleren of sommige records in een databasetabel staan?

  2. MySQL DATE_ADD werkt niet

  3. Ontsnappen van waarden in Mysqljs

  4. Hex naar string converteren