SIZE
- зарезервированное ключевое слово. Это означает, что мы не можем использовать его как идентификатор (если мы не поместим его в двойные кавычки, но double-quoted identifiers are Teh Suck!, так что не делайте этого). Измените имя столбца на ROOMSIZE
и your statement will run.
Отметьте, что TYPE
также является ключевым словом, но не зарезервировано. Таким образом, нам разрешено использовать его как идентификатор столбца. Типы не вводились до 8; сделав TYPE
зарезервированное ключевое слово сломало бы код в приложениях Oracle во всем мире, не в последнюю очередь в его собственном словаре данных.
В документации имеется полный список зарезервированных слов. Find it here.
Зачем использовать "SIZE"
быть такой плохой идеей? В конце концов, как говорит @JavaBeginner, стандарт SQL это разрешает.
Как только мы решили использовать двойные кавычки, чтобы обойти правила именования Oracle, мы осуждены использовать их всякий раз, когда ссылается на столбец. Следовательно, это не будет являться действительным запрос:
select no_room, size
from room
where size > 10
Мы должны написать вместо:
select no_room, "SIZE"
from room
where "SIZE" > 10
И он всегда должен быть "SIZE"
: "size"
является другой идентификатор. так и "Size"
.
Лучшей практикой является информированная интерпретация того, что позволяют стандарты. SQL позволяет нам делать то, чего мы не должны делать, если хотим создать надежную и поддерживаемую базу данных. В эту категорию попадают не используемые идентификаторы с двойными кавычками.
'SIZE' зарезервированное слово! Таким образом, им не разрешено использовать их как имя переменных или полей. Вы можете найти здесь http://docs.oracle.com/cd/B28359_01/appdev.111/b31231/appb.htm список зарезервированных слов для Oracle 11g. – RustamIS