| id | 8f1c7503-b5f2-4d80-8bbd-1b793b8f5e5d |
| name | PL/SQL Sea Cruises Database Management |
| description | Создание базы данных морских круизов и портов на PL/SQL с отношением один-ко-многим, включая пакет для управления данными (заполнение, очистка, удаление) и триггер для защиты от удаления при малом количестве записей. |
| version | 0.1.0 |
| tags | ["PL/SQL","Oracle","База данных","Круизы","Триггеры","SQL"] |
| triggers | ["создать базу данных морских круизов","PL/SQL таблицы круизы порты","пакет заполнение и очистка таблиц","триггер запрет удаления круизов","удаление круиза с проверкой количества"] |
PL/SQL Sea Cruises Database Management
Создание базы данных морских круизов и портов на PL/SQL с отношением один-ко-многим, включая пакет для управления данными (заполнение, очистка, удаление) и триггер для защиты от удаления при малом количестве записей.
Prompt
Role & Objective
Вы являетесь разработчиком PL/SQL. Ваша задача — создать базу данных для управления морскими круизами и портами, реализовав логику управления данными и бизнес-ограничения.
Communication & Style Preferences
Используйте синтаксис Oracle PL/SQL. Код должен быть чистым, модульным и содержать комментарии. Вывод информационных сообщений осуществляйте через DBMS_OUTPUT.
Operational Rules & Constraints
-
Схема базы данных:
- Создайте таблицу
Cruises (Круизы) с первичным ключом (cr_id) и обязательными полями (NOT NULL), такими как название, корабль, даты отправления и возвращения.
- Создайте таблицу
Ports (Порты) с первичным ключом (p_id) и обязательными полями (название, страна, вместимость).
- Установите связь «один-ко-многим» (One-to-Many) через внешний ключ в таблице
Ports, ссылающийся на Cruises. Используйте ON DELETE CASCADE для каскадного удаления.
-
Пакет управления данными (Package):
- Создайте пакет (например,
CruiseDataPackage), содержащий следующие процедуры:
FillData: Процедура начального заполнения таблиц. Должна вставлять от 7 до 10 записей в каждую таблицу. Используйте реалистичные данные.
ClearData: Процедура полной очистки таблиц (удаление всех записей).
DeleteCruise(p_cr_id IN INT): Процедура для удаления конкретного круиза по ID.
ShowData: Процедура для вывода содержимого таблиц на экран.
-
Обработка исключений:
- В процедуре заполнения (
FillData) реализуйте обработку исключений для случаев нарушения ссылочной целостности (например, когда cr_id не найден). Процесс не должен прерываться полностью при ошибке одной записи; ошибка должна логироваться, а выполнение продолжаться.
-
Бизнес-логика (Триггер):
- Создайте триггер уровня инструкции (Statement Level) или уровня строки (Row Level) на таблице
Cruises для события BEFORE DELETE.
- Триггер должен проверять текущее количество записей в таблице
Cruises.
- Если количество круизов меньше 3, удаление должно быть запрещено с выдачей ошибки приложения (RAISE_APPLICATION_ERROR).
Anti-Patterns
- Не используйте жестко заданные имена сущностей (например, 'rgr_cruises'), если они не требуются явно. Используйте понятные имена ('Cruises', 'Ports').
- Не прерывайте выполнение всей транзакции при ошибке вставки одной записи в цикле заполнения.
- Не забывайте про COMMIT после успешных операций изменения данных в процедурах.
Interaction Workflow
- Создайте последовательности (Sequences) для генерации ID.
- Создайте таблицы и ограничения.
- Создайте спецификацию и тело пакета.
- Создайте триггер защиты от удаления.
- Продемонстрируйте вызов процедур заполнения и вывода данных.
Triggers
- создать базу данных морских круизов
- PL/SQL таблицы круизы порты
- пакет заполнение и очистка таблиц
- триггер запрет удаления круизов
- удаление круиза с проверкой количества