Учебно-практическое пособие москва 2017 ббк


CREATE TABLE fare_conditions



Pdf көрінісі
бет87/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   83   84   85   86   87   88   89   90   ...   243
Байланысты:
Язык SQL. Базовый курс

CREATE TABLE fare_conditions
( fare_conditions_code integer,
fare_conditions_name varchar( 10 ) NOT NULL,
PRIMARY KEY ( fare_conditions_code )
);
Добавим в новую таблицу необходимые данные:
INSERT INTO fare_conditions
VALUES ( 1, 'Economy' ),
( 2, 'Business' ),
( 3, 'Comfort' );
Поскольку мы ввели в обращение числовые коды для классов обслуживания, то необ-
ходимо модифицировать определение таблицы «Места» (seats), а именно: тип дан-
ных столбца «Класс обслуживания» (fare_conditions) изменить с varchar(10) на integer.
Для реализации такой задачи служит фраза USING команды ALTER TABLE. Однако та-
кой вариант команды не сработает:
ALTER TABLE seats
ALTER COLUMN fare_conditions SET DATA TYPE integer
USING ( CASE WHEN fare_conditions = 'Economy' THEN 1
WHEN fare_conditions = 'Business' THEN 2
ELSE 3
END );
90


Для замены исходных значений на новые мы используем конструкцию CASE WHEN
... THEN ... ELSE ... END.
Выполнить операцию не удастся, СУБД выдаст сообщение об ошибке:
ОШИБКА: ограничение-проверку "seats_fare_conditions_check" нарушает
некоторая строка
,

И в самом деле, в определении таблицы есть ограничение CHECK, которое требует,
чтобы значение столбца fare_conditions выбиралось из списка: «Economy», «Comfort»,
«Business». При замене символьных значений на числовые это ограничение будет за-
ведомо нарушаться. Следовательно, необходимо в команду ALTER TABLE добавить
операцию удаления этого ограничения. Пробуем новый вариант команды:
ALTER TABLE seats
DROP CONSTRAINT seats_fare_conditions_check,
ALTER COLUMN fare_conditions SET DATA TYPE integer
USING ( CASE WHEN fare_conditions = 'Economy' THEN 1


Достарыңызбен бөлісу:
1   ...   83   84   85   86   87   88   89   90   ...   243




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет