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

Oracle SELECT — podwójne cudzysłowy czy brak podwójnych cudzysłowów?

Odpowiedzi i linki dotyczące wielkości liter są poprawne, ale Twoja sytuacja wykracza nieco poza prosty przypadek, zarówno dlatego, że nazwa Twojej kolumny zaczyna się od podkreślenia, jak i dlatego, że Twój klient najwyraźniej zwykle ukrywa przed Tobą cytat.

Jeśli próbowałeś utworzyć tabelę z kolumną o nazwie _id , bez cytowania, otrzymasz błąd „ORA-00911:nieprawidłowy znak”, którego tekst przyczyny mówi „identyfikatory nie mogą zaczynać się od żadnego znaku ASCII innego niż litery i cyfry”; co w rzeczywistości jest również błędne, ponieważ nie może również zaczynać się od liczby (na przykład 0_id daje „ORA-00904::nieprawidłowy identyfikator”). Potwierdzają to zasady nazewnictwa obiektów bazy danych :

Wygląda więc na to, że Aqua Data Studio postępuje zgodnie z konwencją polegającą na umieszczeniu w podwójnych cudzysłowach wersji nazwy obiektu pisanej wielkimi literami, co jest praktyką wspomnianą w jednym z powiązanych postów.

Z tego, co pokazałeś, select _id from ... zostaje przekazany do Oracle jako select "_ID" from ... , co jest w porządku, jeśli nazwa kolumny została utworzona jako "_ID" . Wygląda na to, że tak jest w przypadku table1 , ale table2 został utworzony jako "_id" - tak, że niezgodność wielkości liter generuje prawidłowe ORA-00904, które widzisz.

Twój klient nie modyfikuje nazwy kolumny, która jest już ujęta w cudzysłów, więc select "_id" from ... jest przekazywany do Oracle w stanie, w jakim jest, i działa dobrze dla table2 (ale odwrotnie, nie powiedzie się dla table1 ).

Oracle wymaga, aby nazwa była ujęta w podwójne cudzysłowy, jeśli nie jest zgodna z regułami dla niecytowanych identyfikatorów i jeśli została utworzona w cudzysłowie - chyba że oryginalna wartość w cudzysłowie i tak była prawidłowa, tj. jest zgodna z regułami niecytowanymi i została wpisana wielkimi literami. Ponieważ nazwa Twojej kolumny zaczyna się od podkreślenia, w przypadku Oracle wszystkie odniesienia do niej muszą być ujęte w cudzysłów, niezależnie od wielkości liter. Twój klient po prostu robi to w tle, jeśli sam tego nie cytowałeś.

Postępując zgodnie z radami innych, aby unikać cytowanych identyfikatorów i zawsze używać nazw, które są prawidłowe, nie cytowane, pozwoliłoby uniknąć takich problemów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwersja różnicy czasu do danego formatu w Oracle

  2. Dlaczego oracle nie pokazuje całkowitej części ułamka dziesiętnego

  3. Jak uniknąć dwóch różnych wątków odczytujących te same wiersze z bazy danych (Hibernacja i Oracle 10g)

  4. SQL Server zmienia wartość kolumny podczas wstawiania wyzwalacza

  5. Spraw, aby funkcja Oracle last_day była kompatybilna z bazą danych H2