Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
2 / 2 / 0
Регистрация: 08.09.2010
Сообщений: 44

Триггер на проверку диапазона дат

14.12.2011, 13:54. Показов 3950. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите, пожалуйста, с триггером:
Oracle 11 SQL
1
2
3
4
5
6
7
CREATE OR REPLACE TRIGGER АР_ВЕЩИ_B_IU_R
BEFORE INSERT OR UPDATE OF ДАТА_ВЗЯТИЯ, ДАТА_ВОЗВРАТА ON АРЕНДОВАННЫЕ_ВЕЩИ
FOR EACH ROW
BEGIN
  INSERT INTO TEMP_АР_ВЕЩИ
  VALUES (:NEW.АРЕНДОВАНН_ID, :NEW.ДАТА_ВЗЯТИЯ);
END АР_ВЕЩИ_B_IU_R;
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE OR REPLACE TRIGGER АР_ВЕЩИ_B_IU_S
BEFORE INSERT OR UPDATE OF ДАТА_ВЗЯТИЯ, ДАТА_ВОЗВРАТА ON АРЕНДОВАННЫЕ_ВЕЩИ
DECLARE
CURSOR ДАТЫ IS SELECT ОБЪЕКТ_АРЕ_ID, ДАТА_ВЗЯТИЯ
FROM   TEMP_АР_ВЕЩИ;
CURSOR ДАТЫ_СТ IS SELECT АРЕНДОВАНН_ID, ДАТА_ВЗЯТИЯ, ДАТА_ВОЗВРАТА
FROM АРЕНДОВАННЫЕ_ВЕЩИ;
BEGIN
FOR CUR_ДАТЫ IN ДАТЫ
LOOP
  FOR CUR_ДАТЫ_СТ IN ДАТЫ_СТ
  LOOP
  IF (CUR_ДАТЫ.ОБЪЕКТ_АРЕ_ID = CUR_ДАТЫ_СТ.АРЕНДОВАНН_ID AND 
      (CUR_ДАТЫ.ДАТА_ВЗЯТИЯ BETWEEN CUR_ДАТЫ_СТ.ДАТА_ВЗЯТИЯ AND CUR_ДАТЫ_СТ.ДАТА_ВОЗВРАТА))
  THEN RAISE_APPLICATION_ERROR (-20300, 'Объект уже взяли!');
  END IF;
  END LOOP;
END LOOP;
DELETE TEMP_АР_ВЕЩИ;
END АР_ВЕЩИ_B_IU_S;
Триггер срабатывает постоянно, даже если дата не лежит в диапазоне.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2011, 13:54
Ответы с готовыми решениями:

Есть ли в VBA функция, позволяющая определить пересечение одного диапазона дат с другим диапазоном дат?
Привет Все! Задача такова: имеем 1 диапазон даты, например, 01.10.10-30.10.10 имеем 2 диапазон даты, например, 15.09.10-15.10.10 ...

Триггер для сравнения дат
Необходимо создать триггер, который будет сравнивать даты и сообщать, если Дата_заезда больше чем Дата_выезда. Вот что я наскребла ...

Триггер на пересечение дат (T-SQL)
Задача: создать триггер, который запрещает создавать заказ на установку, которая в это время будет занята другим заказчиком. Есть таблица...

4
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
14.12.2011, 14:49
1. что значит "срабатывает постоянно"? И какой из 2 триггеров?
2. ты знаешь, в каком порядке будут срабатывать эти триггера?
3. не рекомендуется использовать в Oracle русские буквы для названия объектов. Формально это не запрещено, но по факту в любой момент могут полезть глюки. Хорошо, если к этому моменту будет еще мало наработано
0
2 / 2 / 0
Регистрация: 08.09.2010
Сообщений: 44
14.12.2011, 15:16  [ТС]
1. Если любую дату заносить, то триггер выдает ошибку. Второй триггер.
2. Сначала первый потом второй.
3. База в универе учебная, обкатана годами, преподаватели сами говорят пользоваться русским.
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
14.12.2011, 15:29
Цитата Сообщение от horrorman
2. Сначала первый потом второй.
Порядок срабатывания триггеров:
1. before statement
2. before row (для каждой строки)
3. after row (для каждой строки)
4. after statement
Так что сначала второй

Цитата Сообщение от horrorman
3. База в универе учебная, обкатана годами, преподаватели сами говорят пользоваться русским.
По шеям бы вашим преподавателям. Ведь человек, выйдя из ВУЗа, и на работе захочет так сделать.
А там это может быть совсем не так гладко.
Не говоря уж о том, что текст очень трудно читается/воспринимается

Теперь по тексту триггера.
Такие вещи (поиск значения в таблице) через курсоры не делают (тем более через 2), достаточно одного SELECT-а.
И, кстати, почему у тебя CURSOR называется ДАТЫ_СТ, а RECORD - CUR_ДАТЫ_СТ ? Нелогично как-то
1
2 / 2 / 0
Регистрация: 08.09.2010
Сообщений: 44
14.12.2011, 18:39  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Порядок срабатывания триггеров:
Спасибо, буду знать)

Цитата Сообщение от Grossmeister Посмотреть сообщение
Теперь по тексту триггера.
Такие вещи (поиск значения в таблице) через курсоры не делают (тем более через 2), достаточно одного SELECT-а.
И, кстати, почему у тебя CURSOR называется ДАТЫ_СТ, а RECORD - CUR_ДАТЫ_СТ ? Нелогично как-то
Даже не знаю все что ответить, проблема в том что PL\SQL нас не учили, дали лабу, дали 3 триггера для примера, и все делайте базу, пишите триггеры и времени на все это дело очень мало..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.12.2011, 18:39
Помогаю со студенческими работами здесь

Триггер на проверку старосты
Есть 2 таблицы Студенты(студ_ид, ФИО, груп_ид, староста_ид) и Группа(Груп_ид, груп_нейм)! Нужен триггер который будет проверять старосту...

Триггер на проверку значений столбца
Привет всем! Нужна ваша помощь, так как сам в триггерах не особо хорошо разбираюсь...Имеются 2 таблицы (комплектующие, ремонт) они связаны...

Триггер на проверку дня недели
Есть таблица Платежи, у таблицы Платежи есть поле Дата_платежа, в задании требуется написать триггер , который бы запрещал добавлять платеж...

Триггер на проверку добавляемой записи
Здравствуйте, мне нужен такой код, который проверял наличие записи. id_realtor это внешний ключ. Он может попадатся в таблице несколько раз...

Триггер на проверку вставляемых в таблицу значений
Доброго времени суток! есть такой вопрос, нужно написать триггер, который бы проверял название, вставляемое в таблицу. Например, мне нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru