Есть триггер, который при создании таблицы добавляет столбец по-умолчанию с датой. Он полностью рабочий, проверено в 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 неприемлемо с точки зрения безопасности. Отсюда вопрос, как можно напрямую изменить создаваемую таблицу? И как сделать, чтобы добавлялся еще один столбец с именем пользователя, который добавил запись?
16 сентября 2009 в 13:04
Да, я уже понял свою ошибку=) Просто меня возмутило это, что и написал. Я вы мне очень помогли, за что большое спасибо!
16 сентября 2009 в 13:03
А кто тебе сказал, что тут изменяется что-либо из системных таблиц???!!!
sys.dictionary_obj_type и sys.dictionary_obj_name это системные атрибуты (фактически функции с возвращаемым типом VARCHAR2(30)) -
тип и имя объекта из словаря, действие с которым привело к активизации триггера. Изменяется тут как раз сама пользовательская таблица. А вот имя таблицы этой как раз и извлекается из атрибутов, по другому ты эту информацию хрен получишь.
Я ж тебе вроде рассказывал что там происходит когда-то – найди нашу переписку 3-х месячной давности.