Проблемы связанные с выполнением тригера в одной схеме и вызовом через него процедуры в другой схеме.
Входные данные.схемы: test1 и test2
тригеры: test_exec (расположен в схеме test1)
процедуры: crt_table (расположена в схеме test2)
таблицы: out_name (расположена в схеме test1)
Задача.Создавать таблицы в схеме test2 путем срабатывания тригера на таблице test1.out_name и взятием входного параметра за имя таблицы.
Решение.1. Создать таблицу out_name в схеме test1 с параметрами name varchar.
2. Создать тригер test_execute и повешать на эту таблицу, ждать insert'а в эту таблицу.
3. Создать процедуру crt_table в ней выполнять создание таблиц в схеме test2 с именами переданными в качестве параметра.
ВАЖНО.Внутри схемы где расположена процедура и там же будем создавать таблицу, дать права на выполнение этой процедуры пользователю из другой схемы, где хранится тригер.
sqlplus test2/test2@XE
grant execute on crt_table to test1;
Выполение.sqlplus test1/test1@XE
SQL> insert into out_name values('first');
ИТОГО.
в схеме test2 создается таблица first.
CREATE OR REPLACE PROCEDURE test2.crt_table(name_in varchar2)
IS
pragma autonomous_transaction;
BEGIN
execute immediate 'create table '||name_in||' (a varchar2(20))';
commit;
END;
/
CREATE OR REPLACE TRIGGER test1.test_exec
AFTER UPDATE OR INSERT
ON test1.out_name
FOR EACH ROW
BEGIN
test2.crt_table(:NEW.name);
END;
/