Як уникнути застереженого слова в Oracle?


134

У TSQL я міг би використовувати щось на кшталт Select [table] from tablenameвибору стовпця з назвою "таблиця".

Як це зробити для зарезервованих слів в оракулі?

Редагувати: Я спробував квадратні дужки, подвійні лапки, одинарні лапки та зворотні цитати, вони не працюють ...

Як додаткове уточнення, у мене є колонка, яку хтось назвав коментарем. Оскільки це зарезервоване слово, оракул маніпулює нескінченно, намагаючись вибрати з ним, його збій під час розбору запиту. Я спробував вибрати "коментар" з назви таблиці, але це не вийшло. Я перевірю справу і повернусь.


Відповіді:


195

Під час швидкого пошуку, як видається, Oracle використовує подвійні лапки ( "наприклад, "table") і, мабуть, вимагає правильного випадку - десь для всіх, хто цікавиться, MySQL за замовчуванням використовує задні посилання (`), за винятком випадків, коли для сумісності використовувати подвійні лапки.


2
Я позначив вас, бо спробував уникнути слова, використовуючи подвійні лапки, і це не вийшло.
Спенс

13
За замовчуванням Oracle замінить будь-які ідентифікатори. Тож якщо вам потрібні або малі літери, або спеціальні символи, або ідентифікатор - це слово, зарезервоване Oracle, його потрібно укласти в подвійні лапки. Оскільки подвійні лапки зберігають випадок, ідентифікатор також повинен бути правильним.
Метро

Я створив таблицю з полем "псевдонім" за допомогою SQL Developer v4, потрапивши в базу даних Oracle 11g Release 2 Express. Мій вибір працював, коли я писав "ALIAS" замість псевдоніму.
Broken_Window

Не працюючи на тригери, спробуйте створити тригер для таблиці з назвою, що порушує ORA-30507 (наприклад, DATABASE).
Фльов

Спробуйте це у великому регістрі "ТАБЛИЦЯ".
RSHAP

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 використовує подвійні лапки, але вам, швидше за все, потрібно розмістити ім'я об'єкта у верхньому регістрі, наприклад, "TABLE". За замовчуванням, якщо ви створюєте об'єкт без подвійних лапок, наприклад

CREATE TABLE table AS ...

Oracle створив би об'єкт у верхньому регістрі . Однак посилання не враховує регістр, якщо ви не використовуєте подвійні лапки!


-8

ви повинні перейменувати стовпець на інше ім’я, оскільки TABLEце зарезервовано Oracle.

Ви можете побачити всі зарезервовані слова Oracle у вікні oracle V$RESERVED_WORDS.


Я отримую, ORA-00942коли пробую select * from V$RESERVED_WORDS.
закінчення
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.