2012-01-11 2 views
7

Является очень новым для триггеров Oracle. Предположим, что у меня есть триггер на вставке в таблице emp. Есть ли способ узнать, что было вставленной записью, которая запускала триггер. Я хотел, чтобы триггер имел код, который что-то делал, если вставленная запись была конкретным значением.Получение значения, вызвавшего триггер Oracle

ответ

10

Если у вас есть триггер на уровне строк, вы можете просто использовать :NEW псевдо-запись

CREATE TRIGGER name_of_trigger 
    BEFORE INSERT ON emp 
    FOR EACH ROW 
DECLARE 
    <<declare variables>> 
BEGIN 
    IF(:new.ename = 'JUSTIN') 
    THEN 
    <<do something if the newly inserted ENAME value is 'JUSTIN'>> 
    END IF; 
END; 

Для триггера DDL, подход совершенно иной. В этом случае псевдофункции ora_dict_obj_owner и ora_dict_obj_name вернут владельца и имя таблицы, в которой работает оператор DDL.

+0

Hey @ Justin Cave жаль беспокоить вас, но я понял, что мне действительно нужен триггер DDL или SYstem, а не триггер DML. Я бы назвал триггер каждый раз, когда новая таблица создается в схеме 'CREATE ИЛИ REPLACE TRIGGER drop_trigger ПОСЛЕ СОЗДАНИЯ НА hr.SCHEMA BEGIN END;' Как я получу имя созданной таблицы, которая активировала триггер сейчас? Это еще НОВЫЙ? – Eosphorus

+0

@ Eosphorus - Нет, триггеры DDL - очень разные животные. Обновлен мой ответ. –

+0

большое спасибо Джастин. Это довольно много раз, когда вы мне помогли. Я очень ценю это :) – Eosphorus

Смежные вопросы