Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Trigger Insert 
:(
    Опции темы
N1ko
Дата 29.7.2010, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Здравствуйте. Мне нужно повесить триггер, который будет выполняться на Insert. Перед вставкой данных в таблицу нужно проверить правильность данных( Допустим все значения полей типа number должны быть больше 20 и т.п.) Если проверка прошла успешно, нужно вставить данные, если же нет - ничего не делать. Не могли бы ли Вы привести маленький пример, дабы внести ясность как это делается. С тригерами работаю первый раз.
PM MAIL ICQ   Вверх
LSD
Дата 29.7.2010, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(N1ko @  29.7.2010,  17:57 Найти цитируемый пост)
сли проверка прошла успешно, нужно вставить данные, если же нет - ничего не делать.

Ничего не делать нельзя, единственный способ избежать вставки данных это выкинуть в триггере исключение.

Код

    CREATE OR REPLACE TRIGGER orders_before_insert
    BEFORE INSERT
        ON orders
        FOR EACH ROW

    DECLARE
        v_username varchar2(10);

    BEGIN

        if :new.some_column < 20 then
          raise_application_error(-20001, 'Shit happens!');
        end;

    END;



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 29.7.2010, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(N1ko @  29.7.2010,  16:57 Найти цитируемый пост)
Допустим все значения полей типа number должны быть больше 20 

конкренто для этого случая триггер не нужен, можно обойтись check 
Код

alter table my_table add constraint my_table$vals$chk check (val1 > 20 and val2 > 20 and val3 >20 ....)


LSD, smile  не находишь разницы между "больше двадцати" и "не меньшье двадцати"?

Это сообщение отредактировал(а) Zloxa - 30.7.2010, 07:47


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 30.7.2010, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Zloxa @  29.7.2010,  21:20 Найти цитируемый пост)
LSD, smile  не находишь разницы между "больше двадцати" и "не меньшье двадцати"?

А в чем проблема, вместо < надо <=?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 30.7.2010, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(LSD @  30.7.2010,  17:00 Найти цитируемый пост)
А в чем проблема,

null не меньше 20, потому по твоему условию эксепшн не поднимится.
Но null  и не больше 20 под услвовия ТС не подходит.

Правда и в предложенном мною чеке этот ньюанс не учтен... 
Просто сработал рефлекс на не равнозначную подмену условия. Однажды обжегшись....


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.