#oracle
#Oracle
Вопрос:
Я хочу создать триггер, который после создания таблицы создаст другой table_backup с тем же значением. Возможно ли это?
create or replace trigger aftercreatebackup
after create on schema
begin
loop
create table ora_dict_obj_name || '_backup' as select * from ora_dict_obj_name where 1=0;
end loop;
end;
цикл здесь, потому что ошибка PLS-00103
Комментарии:
1. Во-первых, почему? Какую проблему вы решаете, создавая новую таблицу? Во-вторых, если вы собираетесь это сделать, вам нужно будет отправить задание, которое выполняет
create table
. И вам понадобится способ предотвратить бесконечное повторение триггера (т. Е. Не создавать резервную таблицу, если имя таблицы уже_backup
есть). В-третьих, поскольку идентификаторы ограничены 30 символами, что делать, если имя таблицы содержит более 23 символов, так что вы не можете добавить 7-символьный суффикс? В-четвертых, вам нужно будет использовать динамический SQL в задании, которое выполняетcreate table
usingexecute immediate
.2. О, и вы, вероятно, хотите проконсультироваться
ora_dict_obj_type
, является ли создаваемый объект таблицей, и избавиться от бессмысленного бесконечного цикла.3. Не мог сказать это лучше, чем @JustinCave 😉