Jak uniknąć słowa zastrzeżonego w Oracle?


134

W TSQL mógłbym użyć czegoś w rodzaju Select [table] from tablenamewybrania kolumny o nazwie „tabela”.

Jak to zrobić dla słów zastrzeżonych w wyroczni?

Edycja: próbowałem nawiasów kwadratowych, podwójnych cudzysłowów, pojedynczych cudzysłowów i odwrotnych cudzysłowów, nie działają ...

Jako dalsze wyjaśnienie mam kolumnę, którą ktoś nazwał komentarzem. Ponieważ jest to zarezerwowane słowo, wyrocznia rzuca chwiejną próbę wybrania za jego pomocą, co kończy się niepowodzeniem podczas analizowania zapytania. Próbowałem Wybierz „komentarz” z nazwy tabeli, ale to nie zadziałało. Sprawdzę sprawę i wrócę.


Odpowiedzi:


200

Po szybkim wyszukiwaniu Oracle wydaje się używać podwójnych cudzysłowów ( "np. "table") I najwyraźniej wymaga poprawnej wielkości liter - podczas gdy dla każdego zainteresowanego MySQL domyślnie używa lewych apostrofów (`), z wyjątkiem sytuacji, gdy ustawiono używanie podwójnych cudzysłowów w celu zapewnienia zgodności.


2
Oznaczyłem cię, ponieważ próbowałem uciec od tego słowa za pomocą podwójnych cudzysłowów i to nie zadziałało.
Spence

14
Domyślnie Oracle zmieni duże litery na wszystkie identyfikatory. Jeśli więc potrzebujesz małych liter lub znaków specjalnych lub jeśli identyfikator jest słowem zastrzeżonym Oracle, należy go umieścić w cudzysłowie. Ponieważ podwójne cudzysłowy zachowują wielkość liter, identyfikator również musi być poprawny.
Metro

Utworzyłem tabelę z polem „alias” za pomocą SQL Developer v4 trafiającego do bazy danych Oracle 11g Release 2 Express. Mój wybór zadziałał, kiedy zamiast aliasu napisałem „ALIAS”.
Broken_Window

Nie działa dla wyzwalaczy, spróbuj utworzyć wyzwalacz dla tabeli o nazwie, która narusza ORA-30507 (np. DATABASE).
Fleuv

1
Spróbuj pisać wielkimi literami „TABELA”.
RSHAP

34

Oracle zwykle wymaga podwójnych cudzysłowów, aby oddzielić nazwy identyfikatorów w instrukcjach SQL, np

SELECT "MyColumn" AS "MyColAlias"
FROM "MyTable" "Alias"
WHERE "ThisCol" = 'That Value';

Jednak łaskawie pozwala na pominięcie podwójnych cudzysłowów, w takim przypadku po cichu konwertuje identyfikator na wielkie litery:

SELECT MyColumn AS MyColAlias
FROM MyTable Alias
WHERE ThisCol = 'That Value';

jest wewnętrznie konwertowany na coś takiego:

SELECT "ALIAS" . "MYCOLUMN" AS "MYCOLALIAS"
FROM "THEUSER" . "MYTABLE" "ALIAS"
WHERE "ALIAS" . "THISCOL" = 'That Value';

8

podwójne cudzysłowy działały w wyroczni, gdy jako jedną z nazw kolumn miałem słowo kluczowe.

na przykład:

select t."size" from table t 

3

Oracle używa cudzysłowów, ale najprawdopodobniej będziesz musiał wpisać nazwę obiektu wielkimi literami, np. „TABELA”. Domyślnie, jeśli tworzysz obiekt bez cudzysłowów, np

CREATE TABLE table AS ...

Oracle utworzyłoby obiekt jako wielkie litery . Jednak w odwołaniach nie jest rozróżniana wielkość liter, chyba że używasz cudzysłowów!


-8

musisz zmienić nazwę kolumny na inną, ponieważ TABLEjest zarezerwowana przez Oracle.

Możesz zobaczyć wszystkie zastrzeżone słowa Oracle w widoku Oracle V$RESERVED_WORDS.


Dostaję, ORA-00942kiedy próbuję select * from V$RESERVED_WORDS.
ceving
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.