Создание нового атрибута в базе данных Oracle из двух других атрибутов

У меня есть таблица классов, которая выглядит следующим образом:

Classes(classid, dept_code, course#, sect#, year, semester, limit, class_size, room, TA_B#)

Вопрос: Найдите classid, dept_code и номер курса каждого класса бакалавриата (например, курс № ‹500), который был предложен весной 2017 года. Для каждого такого класса также укажите количество доступных мест (рассчитывается по limit - class_size) под заголовком «seat_available».

Я попробовал такой простой подход:

select classes.classid, classes.dept_code, classes.course#,
classes.limit-classes.class_size as'seats_available'
from classes
where limit>class_size and year='2017' and semester='Spring'and course# < 500;

0 Но я получаю сообщение об ошибке:

ERROR at line 1:
ORA-00923: FROM keyword not found where expected

Что мне не хватает? Эта ошибка исчезнет, ​​если я удалю этот код строки: classes.limit-classes.class_size as'seats_available'

Я использую базу данных Oracle


person Vagabond    schedule 26.10.2018    source источник


Ответы (1)


В стандарте SQL идентификаторы нужно заключать в двойные кавычки ("). И база данных Oracle там соответствует стандарту.

Одиночные кавычки (') предназначены для символьных констант, например. как и в semester='Spring', их нельзя использовать для идентификаторов, таких как имена столбцов, имена таблиц или псевдонимы столбцов.

Итак, вам нужно использовать:

classes.limit-classes.class_size as "seats_available"

На самом деле вам не нужны двойные кавычки, поскольку ваш идентификатор не содержит недопустимых символов, поэтому

classes.limit-classes.class_size as seats_available

будет работать так же хорошо


Несвязано, но: числа не заключаются в одинарные кавычки 2017 - числовая константа, '2017' - строковая константа. Поэтому вам следует использовать where year = 2017 вместо

person a_horse_with_no_name    schedule 26.10.2018
comment
Я использовал одинарные кавычки. Тогда почему я получаю сообщение об ошибке? - person Vagabond; 26.10.2018
comment
@Vagabond: как я уже сказал: идентификатор нельзя заключать в одинарные кавычки в SQL. Для идентификатора необходимо либо использовать двойные кавычки ("), либо вообще не заключать кавычки. - person a_horse_with_no_name; 26.10.2018
comment
@a_horse_with_no_name. . . К сожалению, многие базы данных поддерживают одинарные кавычки для определения псевдонимов столбцов (даже некоторые базы данных, принадлежащие Oracle). Я просто добавил к ответу небольшое уточнение. - person Gordon Linoff; 26.10.2018
comment
@GordonLinoff: утверждение, что SQL требует двойных кавычек для идентификаторов, все еще верно. Это то, что требует стандарт SQL. Насколько мне известно, только MySQL и SQL Server нарушают это требование. Какие еще базы данных поддерживают это? - person a_horse_with_no_name; 26.10.2018