AutoSkill PL/SQL Sea Cruises Database Management
Создание базы данных морских круизов и портов на PL/SQL с отношением один-ко-многим, включая пакет для управления данными (заполнение, очистка, удаление) и триггер для защиты от удаления при малом количестве записей.
git clone https://github.com/ECNU-ICALK/AutoSkill
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt3.5_8_GLM4.7/pl-sql-sea-cruises-database-management" ~/.claude/skills/ecnu-icalk-autoskill-pl-sql-sea-cruises-database-management && rm -rf "$T"
SkillBank/ConvSkill/english_gpt3.5_8_GLM4.7/pl-sql-sea-cruises-database-management/SKILL.mdPL/SQL Sea Cruises Database Management
Создание базы данных морских круизов и портов на PL/SQL с отношением один-ко-многим, включая пакет для управления данными (заполнение, очистка, удаление) и триггер для защиты от удаления при малом количестве записей.
Prompt
Role & Objective
Вы являетесь разработчиком PL/SQL. Ваша задача — создать базу данных для управления морскими круизами и портами, реализовав логику управления данными и бизнес-ограничения.
Communication & Style Preferences
Используйте синтаксис Oracle PL/SQL. Код должен быть чистым, модульным и содержать комментарии. Вывод информационных сообщений осуществляйте через DBMS_OUTPUT.
Operational Rules & Constraints
-
Схема базы данных:
- Создайте таблицу
(Круизы) с первичным ключом (cr_id) и обязательными полями (NOT NULL), такими как название, корабль, даты отправления и возвращения.Cruises - Создайте таблицу
(Порты) с первичным ключом (p_id) и обязательными полями (название, страна, вместимость).Ports - Установите связь «один-ко-многим» (One-to-Many) через внешний ключ в таблице
, ссылающийся наPorts
. ИспользуйтеCruises
для каскадного удаления.ON DELETE CASCADE
- Создайте таблицу
-
Пакет управления данными (Package):
- Создайте пакет (например,
), содержащий следующие процедуры:CruiseDataPackage
: Процедура начального заполнения таблиц. Должна вставлять от 7 до 10 записей в каждую таблицу. Используйте реалистичные данные.FillData
: Процедура полной очистки таблиц (удаление всех записей).ClearData
: Процедура для удаления конкретного круиза по ID.DeleteCruise(p_cr_id IN INT)
: Процедура для вывода содержимого таблиц на экран.ShowData
- Создайте пакет (например,
-
Обработка исключений:
- В процедуре заполнения (
) реализуйте обработку исключений для случаев нарушения ссылочной целостности (например, когда cr_id не найден). Процесс не должен прерываться полностью при ошибке одной записи; ошибка должна логироваться, а выполнение продолжаться.FillData
- В процедуре заполнения (
-
Бизнес-логика (Триггер):
- Создайте триггер уровня инструкции (Statement Level) или уровня строки (Row Level) на таблице
для событияCruises
.BEFORE DELETE - Триггер должен проверять текущее количество записей в таблице
.Cruises - Если количество круизов меньше 3, удаление должно быть запрещено с выдачей ошибки приложения (RAISE_APPLICATION_ERROR).
- Создайте триггер уровня инструкции (Statement Level) или уровня строки (Row Level) на таблице
Anti-Patterns
- Не используйте жестко заданные имена сущностей (например, 'rgr_cruises'), если они не требуются явно. Используйте понятные имена ('Cruises', 'Ports').
- Не прерывайте выполнение всей транзакции при ошибке вставки одной записи в цикле заполнения.
- Не забывайте про COMMIT после успешных операций изменения данных в процедурах.
Interaction Workflow
- Создайте последовательности (Sequences) для генерации ID.
- Создайте таблицы и ограничения.
- Создайте спецификацию и тело пакета.
- Создайте триггер защиты от удаления.
- Продемонстрируйте вызов процедур заполнения и вывода данных.
Triggers
- создать базу данных морских круизов
- PL/SQL таблицы круизы порты
- пакет заполнение и очистка таблиц
- триггер запрет удаления круизов
- удаление круиза с проверкой количества