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

ORA-01036:nieprawidłowa nazwa/numer zmiennej podczas uruchamiania zapytania przez C#

Główna przyczyna

W Oracle masz trzy rodzaje instrukcji SQL (a dodatkowo istnieją bloki PL/SQL):

  • Oświadczenia w języku definicji danych (DDL). Instrukcje te modyfikują strukturę bazy danych. Zwykle zaczynają się od czasowników „ALTER” lub „CREATE”
  • Oświadczenia w języku modyfikacji danych (DML). Te instrukcje modyfikują zawartość wewnątrz tabel, pozostawiając strukturę każdej tabeli niezmienioną. Wypowiedzi te zwykle zaczynają się od „INSERT”, „MERGE” lub „DELETE”.
  • Wypowiedzi w tym, co nazywam „językiem zapytań” (wydaje się, że nie ma dla nich nazwy kanonicznej). Te stwierdzenia zaczynają się od czasownika „SELECT”.

Zmienne wiązania w Oracle są dozwolone tylko w niektórych specjalnych miejscach w instrukcjach DML i zapytaniach. Próbujesz użyć zmiennych wiążących w miejscach, w których nie są one dozwolone. Stąd błąd.

Rozwiązanie

Zbuduj swoje oświadczenie bez zmiennych wiążących. Zamiast tego zbuduj pełny ciąg zapytania, używając konkatenacji ciągów.

Jeśli chcesz oczyścić dane wejściowe przed połączeniem ciągu, użyj pakietu DBMS_ASSERT.

Tło

Zmiennych wiązania można używać tylko wtedy, gdy Oracle może zbudować plan zapytania bez znajomości wartości zmiennej. W przypadku instrukcji DDL nie ma planu kwerend. Dlatego zmienne wiązania nie są dozwolone.

W instrukcjach DML i zapytaniach zmienne wiązania są dozwolone tylko wtedy, gdy są używane wewnątrz krotki (zgodnie z podstawową teorią zbiorów), tj. gdy wartość zostanie porównana z wartością w tabeli lub gdy wartość zostanie wstawiona do tabeli . Nie mogą zmieniać struktury planu wykonania (np. zmieniać tabeli docelowej lub zmieniać liczby porównań).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest domyślny rozmiar danych wejściowych varchar2 do procedury składowanej Oracle i czy można go zmienić?

  2. Czy w niektórych wersjach Oracle istnieje limit zagnieżdżania skorelowanych podzapytań?

  3. Konwertuj uniksowy znacznik czasu na wartość daty w Oracle

  4. Jak utworzyć PL/SQL SYS_REFCURSOR w bazie danych Oracle

  5. Przekaż i zwróć niestandardowy obiekt tablicy w ibatis i oracle w java