Для этого вам нужно сделать весь CREATE TRIGGER
динамическим.Нечто подобное должно работать.Вероятно, вы хотите, чтобы имя триггера зависело от имени таблицы, предполагая, что может быть несколько таблиц, в которых ваш запрос к ALL_TABLES
может вернуть несколько строк.И вы, конечно, хотите, чтобы триггер что-то делал, а не имел пустое тело.
SQL> create table stg_12345( col1 number );
Table created.
SQL> begin
2 for x in (select *
3 from user_tables
4 where table_name like 'STG%')
5 loop
6 execute immediate
7 'create or replace trigger trg_foo ' ||
8 ' before insert on ' || x.table_name ||
9 ' for each row ' ||
10 'begin ' ||
11 ' null; ' ||
12 'end;';
13 end loop;
14 end;
15 /
PL/SQL procedure successfully completed.
SQL> select count(*) from user_triggers where trigger_name = 'TRG_FOO';
COUNT(*)
----------
1
Конечно, идея приложения, которое создает таблицы на лету, пугает меня до глубины души.Если у вас есть какой-то контроль над этим, я настоятельно рекомендую пересмотреть архитектуру.