Создать представление в ORACLE - PullRequest
0 голосов
/ 15 января 2019

Есть ли разница между двумя утверждениями Заявление одно:

CREATE OR REPLACE VIEW ABC AS
SELECT "ORDER_NO","OBJKEY"
FROM TEST_TABLE;

Заявление два:

CREATE OR REPLACE VIEW ABC AS
SELECT ORDER_NO,OBJKEY
FROM TEST_TABLE;

Второе утверждение не имеет двойных кавычек. Я хотел бы знать, в чем разница, Oracle не жалуется, что компилирует оба кода.

1 Ответ

0 голосов
/ 15 января 2019

Они точно такие же в вашем примере. Из документации :

Каждый объект базы данных имеет имя. В операторе SQL вы представляете имя объекта с заключенным в кавычки идентификатором или не заключенным в кавычки идентификатором .

  • Идентификатор в кавычках начинается и заканчивается двойными кавычками ("). Если вы называете объект схемы с помощью идентификатора в кавычках, то вы должны использовать двойные кавычки, когда ссылаетесь на этот объект.

  • Идентификатор без кавычек не заключен в знаки препинания.

Вы можете использовать идентификаторы в кавычках или без кавычек для именования любого объекта базы данных. ...

и

Идентификаторы без кавычек не чувствительны к регистру. Oracle интерпретирует их как прописные. Идентификаторы в кавычках чувствительны к регистру.

Таким образом, ORDER_NO не заключен в кавычки и не учитывает регистр, и Oracle обрабатывает имя как заглавную - так эффективно, когда он ищет в словаре данных соответствующее имя столбца (в представлении all_tab_columns), он ищет точное строковое значение 'ORDER_NO'. Это также относится к случаю, если у вас не было кавычек order_no или Order_No или любого другого сочетания падежа; поскольку он не заключен в кавычки, Oracle по-прежнему рассматривает его как прописные и ищет внутри 'ORDER_NO'.

"ORDER_NO" указан в кавычках, поэтому он чувствителен к регистру, но, так как он в любом случае заглавным, он не имеет значения Oracle все еще ищет в словаре данных столбец с именем 'ORDER_NO'.

Если фактический идентификатор объекта (например, имя столбца) находится в верхнем регистре в словаре данных, то не имеет значения, если вы в любом случае предоставляете его как идентификатор без кавычек или как идентификатор в кавычках в верхнем регистре.

То, что вы не можете сделать, это использовать кавычки и другой регистр. "ORDER_NO" в порядке; "order_no" или "Order_No" или любой другой в кавычках смешанный регистр не будет соответствовать тому, что есть в словаре данных.

Хотя вы можете создавать объекты с указанными в кавычках идентификаторами, которые не в верхнем регистре (или которые включают или начинаются с иным образом недопустимых символов, как показано в правилах, перечисленных в этой документации), обычно это считается плохой идеей, так как тогда всегда должны использовать кавычки и точно такой же регистр. А так же документация также отмечает:

Oracle не рекомендует использовать заключенные в кавычки идентификаторы для имен объектов базы данных. Эти указанные в кавычках идентификаторы принимаются SQL * Plus, но они могут быть недействительными при использовании других инструментов, управляющих объектами базы данных.

...