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

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

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

Вопрос: Найдите classid, dept_code и номер курса каждого класса бакалавриата (т. Е. Курс № <500), который был предложен в Spring 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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
67
1

Ответы 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 вместо

Я использовал одинарные кавычки. Тогда почему я получаю сообщение об ошибке?

Vagabond 26.10.2018 09:05

@Vagabond: как я уже сказал: идентификатор нельзя заключать в одинарные кавычки в SQL. Вам нужно либо использовать кавычки двойной ("), либо вообще не использовать кавычки для идентификатора

a_horse_with_no_name 26.10.2018 09:06

@a_horse_with_no_name. . . К сожалению, многие базы данных поддерживают одинарные кавычки для определения псевдонимов столбцов (даже некоторые базы данных, принадлежащие Oracle). Я просто добавил к ответу небольшое уточнение.

Gordon Linoff 26.10.2018 13:27

@GordonLinoff: утверждение, что "SQL" требует двойных кавычек для идентификаторов, все еще верно. Это то, что требует стандарт SQL. Насколько мне известно, только MySQL и SQL Server нарушают это требование. Какие еще «множество баз данных» поддерживают это?

a_horse_with_no_name 26.10.2018 13:30

Другие вопросы по теме