AutoSkill PL/SQL Sea Cruises Database Management

Создание базы данных морских круизов и портов на PL/SQL с отношением один-ко-многим, включая пакет для управления данными (заполнение, очистка, удаление) и триггер для защиты от удаления при малом количестве записей.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
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"
manifest: SkillBank/ConvSkill/english_gpt3.5_8_GLM4.7/pl-sql-sea-cruises-database-management/SKILL.md
source content

PL/SQL Sea Cruises Database Management

Создание базы данных морских круизов и портов на PL/SQL с отношением один-ко-многим, включая пакет для управления данными (заполнение, очистка, удаление) и триггер для защиты от удаления при малом количестве записей.

Prompt

Role & Objective

Вы являетесь разработчиком PL/SQL. Ваша задача — создать базу данных для управления морскими круизами и портами, реализовав логику управления данными и бизнес-ограничения.

Communication & Style Preferences

Используйте синтаксис Oracle PL/SQL. Код должен быть чистым, модульным и содержать комментарии. Вывод информационных сообщений осуществляйте через DBMS_OUTPUT.

Operational Rules & Constraints

  1. Схема базы данных:

    • Создайте таблицу
      Cruises
      (Круизы) с первичным ключом (cr_id) и обязательными полями (NOT NULL), такими как название, корабль, даты отправления и возвращения.
    • Создайте таблицу
      Ports
      (Порты) с первичным ключом (p_id) и обязательными полями (название, страна, вместимость).
    • Установите связь «один-ко-многим» (One-to-Many) через внешний ключ в таблице
      Ports
      , ссылающийся на
      Cruises
      . Используйте
      ON DELETE CASCADE
      для каскадного удаления.
  2. Пакет управления данными (Package):

    • Создайте пакет (например,
      CruiseDataPackage
      ), содержащий следующие процедуры:
      • FillData
        : Процедура начального заполнения таблиц. Должна вставлять от 7 до 10 записей в каждую таблицу. Используйте реалистичные данные.
      • ClearData
        : Процедура полной очистки таблиц (удаление всех записей).
      • DeleteCruise(p_cr_id IN INT)
        : Процедура для удаления конкретного круиза по ID.
      • ShowData
        : Процедура для вывода содержимого таблиц на экран.
  3. Обработка исключений:

    • В процедуре заполнения (
      FillData
      ) реализуйте обработку исключений для случаев нарушения ссылочной целостности (например, когда cr_id не найден). Процесс не должен прерываться полностью при ошибке одной записи; ошибка должна логироваться, а выполнение продолжаться.
  4. Бизнес-логика (Триггер):

    • Создайте триггер уровня инструкции (Statement Level) или уровня строки (Row Level) на таблице
      Cruises
      для события
      BEFORE DELETE
      .
    • Триггер должен проверять текущее количество записей в таблице
      Cruises
      .
    • Если количество круизов меньше 3, удаление должно быть запрещено с выдачей ошибки приложения (RAISE_APPLICATION_ERROR).

Anti-Patterns

  • Не используйте жестко заданные имена сущностей (например, 'rgr_cruises'), если они не требуются явно. Используйте понятные имена ('Cruises', 'Ports').
  • Не прерывайте выполнение всей транзакции при ошибке вставки одной записи в цикле заполнения.
  • Не забывайте про COMMIT после успешных операций изменения данных в процедурах.

Interaction Workflow

  1. Создайте последовательности (Sequences) для генерации ID.
  2. Создайте таблицы и ограничения.
  3. Создайте спецификацию и тело пакета.
  4. Создайте триггер защиты от удаления.
  5. Продемонстрируйте вызов процедур заполнения и вывода данных.

Triggers

  • создать базу данных морских круизов
  • PL/SQL таблицы круизы порты
  • пакет заполнение и очистка таблиц
  • триггер запрет удаления круизов
  • удаление круиза с проверкой количества