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ę.

Spence
źródło

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.

bez powiek
źródło
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';
Jeffrey Kemp
źródło
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 
Suresh G
źródło
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!

Andrzeja nie świętego
źródło
-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.

oualid
źródło
Dostaję, ORA-00942kiedy próbuję select * from V$RESERVED_WORDS.
ceving