singlepost

триггер Oracle << На главную или назад  

Есть триггер, который при создании таблицы добавляет столбец по-умолчанию с датой. Он полностью рабочий, проверено в 10 версии.

CREATE OR REPLACE TRIGGER my_trigger AFTER CREATE
ON D?4??4??1?BASE
declare
v_ddl varchar2(4000);
v_job number;
begin
if sys.dictionary_obj_type='TABLE' then
v_ddl := 'alter table ' || sys.dictionary_obj_name ||' add dt date default sysdate';
dbms_job.submit(v_job, 'execute immediate ''' || v_ddl || ''';', sysdate+(1/24/60/60));
end if;
end

Мне сказали, что изменение системной таблицы sys.dictionary_obj_name неприемлемо с точки зрения безопасности. Отсюда вопрос, как можно напрямую изменить создаваемую таблицу? И как сделать, чтобы добавлялся еще один столбец с именем пользователя, который добавил запись?

12 ответов в теме “триггер Oracle”

  1. 2
    Виталий Лисапов ответил:

    Да, я уже понял свою ошибку=) Просто меня возмутило это, что и написал. Я вы мне очень помогли, за что большое спасибо!

  2. 1
    Виктор Ручкин ответил:

    А кто тебе сказал, что тут изменяется что-либо из системных таблиц???!!!

    sys.dictionary_obj_type и sys.dictionary_obj_name это системные атрибуты (фактически функции с возвращаемым типом VARCHAR2(30)) -
    тип и имя объекта из словаря, действие с которым привело к активизации триггера. Изменяется тут как раз сама пользовательская таблица. А вот имя таблицы этой как раз и извлекается из атрибутов, по другому ты эту информацию хрен получишь.

    Я ж тебе вроде рассказывал что там происходит когда-то – найди нашу переписку 3-х месячной давности.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.