Как мне избежать зарезервированного слова в Oracle?


134

В TSQL я мог бы использовать что-то вроде Select [table] from tablenameвыбора столбца с именем «таблица».

Как мне сделать это для зарезервированных слов в Oracle?

Изменить: я пробовал квадратные скобки, двойные кавычки, одинарные кавычки и обратные кавычки, они не работают ...

В качестве дополнительного пояснения у меня есть столбец, который кто-то назвал комментарием. Поскольку это зарезервированное слово, оракул отбрасывает шаткую попытку выбора с его помощью, что не удается при синтаксическом анализе запроса. Я пробовал выбрать "комментарий" из имени таблицы, но это не сработало. Я проверю кейс и вернусь.


Ответы:


195

Быстрый поиск показывает, что Oracle использует двойные кавычки ( "например "table") и, по-видимому, требует правильного регистра - в то время как для всех, кого это интересует, MySQL по умолчанию использует обратные кавычки (`), за исключением случаев, когда для совместимости заданы двойные кавычки.


2
Я пометил вас, потому что я пытался избежать слова, используя двойные кавычки, и это не сработало.
Spence

13
По умолчанию Oracle обрабатывает любые идентификаторы. Поэтому, если вам нужны символы нижнего регистра или специальные символы, или идентификатор является зарезервированным словом Oracle, его необходимо заключить в двойные кавычки. Поскольку двойные кавычки сохраняют регистр, идентификатор также должен быть правильным.
Metro

Я создал таблицу с полем «псевдоним», используя SQL Developer v4, обращаясь к базе данных Oracle 11g Release 2 Express. Мой выбор сработал, когда я написал «АЛИАС» вместо псевдонима.
Broken_Window,

Не работая для триггеров, попробуйте создать триггер для таблицы с именем, нарушающим ORA-30507 (например, БАЗА ДАННЫХ).
Fleuv

Попробуйте ввести заглавные буквы «ТАБЛИЦА».
РШАП

34

Oracle обычно требует двойных кавычек для разделения имен идентификаторов в операторах SQL, например

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

Однако он любезно позволяет опустить двойные кавычки, и в этом случае он незаметно преобразует идентификатор в верхний регистр:

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

внутренне преобразуется во что-то вроде:

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

8

двойные кавычки работали в oracle, когда у меня было ключевое слово в качестве имени столбца.

например:

select t."size" from table t 

3

Oracle действительно использует двойные кавычки, но вам, скорее всего, потребуется поместить имя объекта в верхний регистр, например "ТАБЛИЦА". По умолчанию, если вы создаете объект без двойных кавычек, например

CREATE TABLE table AS ...

Oracle создаст объект в верхнем регистре . Однако при ссылках регистр не учитывается, если вы не используете двойные кавычки!


-8

вам необходимо переименовать столбец в другое имя, поскольку TABLEоно зарезервировано Oracle.

Вы можете увидеть все зарезервированные слова Oracle в представлении оракула V$RESERVED_WORDS.


Я получаю, ORA-00942когда пытаюсь select * from V$RESERVED_WORDS.
ceve
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.