sql >> Databáze >  >> RDS >> Oracle

Chyba neplatného znaku při provádění okamžitého

Nemáte tam řetězec (předpokládám str je deklarován jako znak nějakého popisu). Pokud jste chtěli vložit řetězec, potřebujete další uvozovky, jinak bude v tomto případě interpretován jako sloupec. Něco jako:

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

Vezměte prosím na vědomí, že jsem z konce vašeho řetězce odstranil středník; to není povinné (a je to pravděpodobně skutečná příčina vaší chyby).

Za zmínku také stojí, že je to trochu SQL- injekční ... měli byste používat bind variables spíše než zřetězení; to vše je popsáno v dokumentaci :

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

V tomto kontextu však není nutné používat dynamické SQL; můžete jednoduše vložit hodnotu proměnné:

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

Nakonec mě trochu znepokojuje váš COMMIT; je neobvyklé zavázat se po zpracování chyby tímto způsobem. Bez dalšího kontextu si nelze být jisti, ale bylo by normálnější, kdyby se protokolování chyb provádělo na autonomní transakce



  1. Funkce NLS_CHARSET_NAME() v Oracle

  2. PHP MySQL vyhledávání s více kritérii

  3. proč mi to dává špatné customerNumber?

  4. lepší přístup než ukládání hesla mysql v prostém textu v konfiguračním souboru?