Oracle
 sql >> Baza danych >  >> RDS >> Oracle

błąd nieprawidłowego znaku podczas wykonywania natychmiastowego

Nie masz tam ciągu (zakładam str jest zadeklarowana jako postać pewnego opisu). Jeśli chcesz wstawić ciąg, potrzebujesz dodatkowych cudzysłowów, w przeciwnym razie zostanie on zinterpretowany jako kolumna w tym przypadku. Coś takiego:

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

Zwróć uwagę, że usunąłem średnik z końca twojego ciągu; nie jest to wymagane (i prawdopodobnie jest to rzeczywista przyczyna twojego błędu).

Warto również zauważyć, że jest to nieco SQL- zastrzyk ... powinieneś używać zmiennych wiązania zamiast konkatenacji; to wszystko jest opisane w dokumentacji :

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

Jednak w tym kontekście nie ma potrzeby używania dynamicznego SQL; możesz po prostu wstawić wartość zmiennej:

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

Wreszcie, jestem nieco zaniepokojony twoim COMMIT; zatwierdzenie po obsłudze błędu w ten sposób jest rzadkością. Bez większego kontekstu nie można być pewnym, ale bardziej normalne byłoby rejestrowanie błędów na transakcja autonomiczna



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można utworzyć wystąpienia błędu dostawcy OLE DB jako użytkownik uwierzytelniania systemu Windows

  2. Testowanie jednostkowe dla PL/SQL

  3. Generuj i wstawiaj duże pliki CLOB (1 MB) za pomocą SQL*Plus

  4. Oracle db Łączenia vs OD a,b,c

  5. Oracle SQL — generuj wiersze zagregowane dla niektórych wierszy za pomocą funkcji select