Schedule disparada por Evento

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
ballboas
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 98
Registrado em: Qui, 02 Ago 2007 3:06 pm
Localização: sp
Érico Balboa

A pergunta mais cretina é aquela que não é feita

Boa Tarde amigos,

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...

Selecionar tudo

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;
/
Não sei se os passos são estes, se está faltando algo ai... Preciso que seja chamado uma proc quando houver um enqueue nesta queue.

Obrigado
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Sou novo na parte de eventos de Queue.
Mas creio que esse documento pode te ajudar, pois tem um exemplo bem explicado:
http://www.databasejournal.com/features ... Part-1.htm
ballboas
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 98
Registrado em: Qui, 02 Ago 2007 3:06 pm
Localização: sp
Érico Balboa

A pergunta mais cretina é aquela que não é feita

Valeu pela resposta e desculpe a demora.

Ajudou demais, consegui fazer, mas não me atendeu, de alguma forma ele se perde se entram muitas linhas ao mesmo tempo, mas acho q é mais culpa do processo aqui. Obrigado.
Responder
  • Informação