DDL Создает триггер с помощью create inside. Oracle. Разработка Sql

#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 using execute immediate .

2. О, и вы, вероятно, хотите проконсультироваться ora_dict_obj_type , является ли создаваемый объект таблицей, и избавиться от бессмысленного бесконечного цикла.

3. Не мог сказать это лучше, чем @JustinCave 😉