Vi que o Oracle tem uma forma de criar schedules por evento e é exatamente o que eu preciso, preciso que seja disparada uma procedure assim que um registro entra numa "Queue", pesquisei e cheguei neste cara "DBMS_SCHEDULER.CREATE_EVENT_SCHEDULE", porém não estou conseguindo criá-lo e não entendi muito bem como funciona o "event_condition" dele, alguém aqui já usou? Teria como me dar uma luz?
Criei a queue, criei a queue table com multiple_consumers = true e quando vou chamar o "CREATE_EVENT_SCHEDULE" dá erro...
BEGIN
SYS.DBMS_AQADM.CREATE_QUEUE_TABLE
(
QUEUE_TABLE => 'Q_TESTE_EVENT_TB'
,multiple_consumers => true
,QUEUE_PAYLOAD_TYPE => 'sys.aq$_jms_text_message'
);
END;
/
BEGIN
SYS.DBMS_AQADM.CREATE_QUEUE
(
QUEUE_NAME => 'Q_TESTE_EVENTO'
,QUEUE_TABLE => 'Q_TESTE_EVENTO_TB'
,QUEUE_TYPE => SYS.DBMS_AQADM.NORMAL_QUEUE
,max_retries => 48
,retry_delay => 1800
);
END;
/
begin
DBMS_AQADM.GRANT_QUEUE_PRIVILEGE
( privilege => 'ALL'
, queue_name => 'Q_TESTE_EVENTO'
, grantee => 'PUBLIC'
, grant_option => TRUE
);
END;
/
BEGIN
SYS.DBMS_AQADM.START_QUEUE
(
QUEUE_NAME => 'Q_TESTE_EVENTO'
,ENQUEUE => TRUE
,DEQUEUE => TRUE
);
END;
/
grant all on Q_TESTE_EVENTO to public;
--Tentativa de Criação do Evento
BEGIN
DBMS_SCHEDULER.CREATE_EVENT_SCHEDULE ( schedule_name => 'TESTE_SCHEDULE_EVENTO',
start_date => SYSTIMESTAMP,
event_condition => 'tab.user_data.event type = ''FILE_ARRIVAL''',
queue_spec => 'Q_TESTE_EVENTO' );
END;
/
Obrigado