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

ugyldig tegnfejl under udførelse med det samme

Du har ikke en streng der (jeg går ud fra str er erklæret som en karakter af en eller anden beskrivelse). Hvis du vil indsætte en streng, skal du bruge ekstra anførselstegn, ellers vil den blive fortolket som en kolonne i dette tilfælde. Noget som:

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

Bemærk venligst, at jeg har fjernet semikolon fra enden af ​​din streng; dette er ikke påkrævet (og er sandsynligvis den faktiske årsag til din fejl).

Det er også værd at bemærke, at dette er lidt SQL- injektion ... du burde bruge bindingsvariabler snarere end sammenkædning; alt dette er beskrevet i dokumentationen :

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

Der er dog ingen grund til at bruge dynamisk SQL i denne sammenhæng; du kan blot indsætte variabelværdien:

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

Til sidst er jeg lidt bekymret over din COMMIT; det er usædvanligt at begå efter håndtering af en fejl på denne måde. Uden mere kontekst er det umuligt at være sikker, men det ville være mere normalt, at fejllogning udføres på en autonom transaktion



  1. Oracle Advanced Queuing med .Net

  2. Opret kommentarer til visninger i mysql

  3. Hvad er det maksimale antal rækker, en enkelt SQL Server-tabel kan gemme?

  4. MySQL Sorter efter 2 kolonner