Oracle PL / SQL: запланированная процедура, приводящая к срабатыванию триггера? - PullRequest
2 голосов
/ 25 ноября 2011

Хорошо, я новичок в Oracle PL / SQL, и я наткнулся на проблему, которую не могу понять. У меня есть процедура, которая приводит к переносу данных из одной таблицы в другую и триггер, который активируется при вставке во вторую таблицу. Я запланировал, что эта процедура будет выполняться каждую минуту (для тестирования - будет ежедневно, как только я это выясню), используя DBMS_JOB.SUBMIT - запланированная часть работает отлично, однако после завершения процедуры триггер не сработал. Я пытался с пунктами вставки до и после, но он все еще не работает. Если я вызываю процедуру напрямую, она работает и срабатывает триггер просто отлично. Итак ... Мне уже интересно, может ли запланированная процедура вообще сработать?

Это код расписания:

DECLARE
  VJOBN BINARY_INTEGER;
BEGIN
  DBMS_JOB.SUBMIT(
  JOB => VJOBN,
  INTERVAL => 'SYSDATE + 1/2880', 
  WHAT => 'BEGIN my_procedure(); END;'
  );
END;


create or replace TRIGGER TO_PRJ
AFTER INSERT ON PROJECTS
FOR EACH ROW
BEGIN
  IF INSERTING
  THEN DBMS_OUTPUT.PUT_LINE('INSERTED PROJECT WITH ID:  '||:NEW.PROJECT_ID||')
  END IF;
END;​

Таблица PROJECTS имеет идентификационный номер, имя varchar2 и некоторые другие, которые не важны. Процедура передает идентификатор и имя из заказов в проекты.

P.S. Я использую http://apex.oracle.com, и когда я получаю метку времени, время на самом деле отстает на 6 часов - не уверен, может ли оно иметь какое-либо значение ...

Ответы [ 2 ]

3 голосов
/ 25 ноября 2011

DBMS_OUTPUT и DBMS_JOB не работают так, как вы пытаетесь их использовать.Запланированное задание, вероятно, выполняется, триггер срабатывает, но так как DBMS_OUTPUT необходимо активировать в сеансе, который выполняет команды DBMS_OUTPUT (т. Е. Внутренний сеанс, используемый DBMS_JOB), вы никогда не увидите никакого вывода.

DBMS_OUTPUT вывод не виден в течение сеанса, поэтому сеанс, который выдает команду DBMS_JOB.submit, НЕ будет получать вывод, даже если для этого сеанса активирован DBMS_OUTPUT.

0 голосов
/ 25 ноября 2011

Попробуйте использовать планировщик, это намного лучше, чем задания.А приведи туда код триггера и таблицы, это может помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...