Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Где ошибка? создание джобы в триггере  [new]
туплю :(
Guest
CREATE TABLE TEST (a NUMBER);

CREATE OR REPLACE TRIGGER trg_test
	AFTER INSERT OR DELETE OR UPDATE
	ON TEST
	FOR EACH ROW
DECLARE
	jobname   VARCHAR2 (500);
BEGIN
	jobname := DBMS_SCHEDULER.generate_job_name ('test_');

	IF INSERTING
	THEN
		DBMS_SCHEDULER.create_job (
	 	 job_name => jobname,
	 	 job_type => 'PLSQL_BLOCK',
 	 	 job_action => 'BEGIN NULL; END;',
 	 	 number_of_arguments => 0,
 	 	 auto_drop => TRUE,
 	 	 enabled => TRUE
 	 	);
	END IF;
END;

insert into test values (1);

оракел
18:13:02 ORA-04092: cannot in a trigger
18:13:02 ORA-06512: at "SYS.DBMS_ISCHED", line 99
18:13:02 ORA-06512: at "SYS.DBMS_SCHEDULER", line 262
18:13:02 ORA-06512: at "IPPORT.TRG_TEST", line 9
18:13:02 ORA-04088: error during execution of trigger 'IPPORT.TRG_TEST'


Такое ощущение, что create_job хочет закоммитить текущую транзакцию. Автономные транзакции не катят - мне нужно чтобы создание джобы откатывалось или фиксировалось вместе с основной транзакцией, в которой происходит инсерт в табличку.
3 июн 08, 18:19    [5754713]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
ORA-04092: cannot string in a trigger
Cause: A trigger attempted to commit or rollback.
Action: Rewrite the trigger so it does not commit or rollback.
3 июн 08, 18:23    [5754746]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
stax..
Guest
imxo
в древних версиях JOB ето другая сессия поетому
"откатывалось или фиксировалось вместе с основной транзакцией"
не получится
.....
stax
3 июн 08, 18:25    [5754758]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Создать job == записать в системные таблицы (и, естественно, закоммитить). Обойти этот принцип, ИМХО, никак.
3 июн 08, 18:29    [5754784]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
туплю :(
..
Такое ощущение, что create_job хочет закоммитить текущую транзакцию. Автономные транзакции не катят - мне нужно чтобы создание джобы откатывалось или фиксировалось вместе с основной транзакцией, в которой происходит инсерт в табличку.

и всё-таки это - всё, что у вас есть..
Выкручивайтесь. Можно попробовать наладить с джобом синхронизацию, но во всяком случае -
понимайте, что он суть другая (не только транзакция, но и) сессия
3 июн 08, 18:32    [5754804]     Ответить | Цитировать Сообщить модератору
 туплю или Кайт позорный врун? :)  [new]
туплю :(
Guest
У него во второй книге, в главе про автономные транзакции и ЯОД в них как раз и упоминается дбмс_джоб как правильная альтернатива (мол создаём джоб в триггере, откатывается транзакция - откатывается создание джоба, коммитится транзакция - джоб создаётся и выполняется)

О! Бляха муха! Он же про dbms_job рассказывал, а я юзаю dbms_scheduler! Может в этом проблема? Ну-ка ща попробую
3 июн 08, 18:37    [5754824]     Ответить | Цитировать Сообщить модератору
 Re: туплю или Кайт позорный врун? :)  [new]
Goldminer
Member

Откуда:
Сообщений: 553
туплю :(
Он же про dbms_job рассказывал, а я юзаю dbms_scheduler! Может в этом проблема? Ну-ка ща попробую

Точно. dbms_job сам ничего не коммитит. НО, после него нужно обязательно.
3 июн 08, 18:46    [5754866]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
туплю :(
Guest
именно это мне и нужно
осталось решить вопрос с автодропом
3 июн 08, 18:48    [5754877]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
Goldminer
Member

Откуда:
Сообщений: 553
автодроп != rollback ?
3 июн 08, 19:14    [5754993]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
туплю :(
именно это мне и нужно
осталось решить вопрос с автодропом
А зачем вам решать "вопрос с автодропом"?
Если не указана периодичность выполнения, то JOB исчезнет самостоятельно...
3 июн 08, 19:33    [5755054]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
туплю :(
Guest
нее :)
автодроп это

dbms_job.submit(jn, 'begin something_useful; DBMS_JOB.remove(job); END;', sysdate);
3 июн 08, 19:34    [5755062]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
туплю :(
Guest
SQL*Plus
туплю :(
именно это мне и нужно
осталось решить вопрос с автодропом
А зачем вам решать "вопрос с автодропом"?
Если не указана периодичность выполнения, то JOB исчезнет самостоятельно...


Ваша правда. Спасибо
3 июн 08, 19:40    [5755080]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
туплю :(
нее :)
автодроп это
dbms_job.submit(jn, 'begin something_useful; DBMS_JOB.remove(job); END;', sysdate);
ОК. А теперь своими словами, без какого либо программного кода,
объясните, пожалуйста, что такое в вашем понимании "автодроп"?
3 июн 08, 19:40    [5755082]     Ответить | Цитировать Сообщить модератору
 Re: Где ошибка? создание джобы в триггере  [new]
туплю :(
Guest
"автодропом" я назвал организацию поведения, аналогичную установлению параметра auto_drop процедуры create_job из пакета dbms_scheduler:

dbms_scheduler.create_job(
job_name            IN VARCHAR2,
job_type            IN VARCHAR2,
job_action          IN VARCHAR2,
number_of_arguments IN PLS_INTEGER DEFAULT 0,
start_date          IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
repeat_interval     IN VARCHAR2    DEFAULT NULL,
end_date            IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
job_class           IN VARCHAR2    DEFAULT 'DEFAULT_JOB_CLASS',
enabled             IN BOOLEAN     DEFAULT FALSE,
auto_drop           IN BOOLEAN     DEFAULT TRUE, <--------------------------------
comments            IN VARCHAR2    DEFAULT NULL);

уж простите за выдумку :)
3 июн 08, 20:12    [5755168]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить