Blz ? Primeira coisa vc ** TEM ** que checar se as suas aplicações possuem um 
mecanismo para te avisar quando uma dada operação é feita : se seus aplicativos 
são ERPs, isso é bem comum, por exemplo no Oracle EBS vc tem o coneito de 
Business Events, no SAP vc tem os SAP Process Events.... É comum a aplicação já 
ter uma provisão para disparar um programa/rotina teu quando um evento/situação 
ocorrer....

 CASO nem todas (ou mesmo nenhuma) das aplicações , aí é o seguinte : ao que 
entendi esses eventos de 'emitir uma nota fiscal' e não sei o que mais  ** não 
** podem ser identificados de outra forma que não seja monitorar as tabelas que 
registram os dados referentes a tais processamentos, certo ? 

 Sendo isso, para Além das triggers (que são possíveis sim, e são facilmente 
criadas num LOOP com SQL dinâmico ou via script sqlplus criando script de DDLs, 
uma técnica comum pra DBAs),  vc TEM sim várias opções mas do mesmo modo que as 
triggers não seriam super-simples de escrever, do mesmo modo NENHUMA das outras 
alternativas é super-simples, para nenhuma basta vc passar a lista das tabelas 
e o nome da procedure que envia email/faz não-sei-o-que e ela já faria tudo - 
se vc espera algo nesse sentido imho vai ficar decepcionado..... TODAS elas 
envolvem algum setup/programação de sua parte, em alguns casos LONGOS e 
relativamente complexos....E *** não garanto ** que todas funcionem no 
capadinhoe restrito Standard Edition, veja lá...
 
  As opções principais seriam :

a) simplesmente criar um JOB seu que dispara a cada X minutos uma procedure sua 
que consulte se houve qualquer alteração nas tabelas que mantém os dados que vc 
quer, se houve a rotina/procedure sua envia os emails;faz o que vc quer e 
mantém uma tabela-histórico adequada para evitar re-envio... Provavelmente deve 
ser um tanto longo/demorado escrever uma rotina que consulte as tabelas todas 
que vc quer mas possível claro que é...

b) usa o conceito de DATA NOTIFICATION, ie, cria um programa que é AVISADO 
quando uma determinada query (que Consulte as tabelas que guardam os dados dos 
tais eventos como emitir nota ou outras coisas) tem seus resultados mudados : 
http://psoug.org/reference/dbms_change_notification.html descrever um pouco o 
conceito, e http://www.oracle.com/technetwork/testcontent/dcn-otn-085625.html 
demonstra com um programinha feito em Java... Com isso eu imagino a(s) 
query/queries fazendo COUNT das tabelas envolvidas, por exemplo, e quando esse 
resultado mudou. enviar os SMSs/email/não sei que que vc quer...
 Uma variação seia o RESULT CACHE, 
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1201993900346923339
 fala um pouco sobre ele...
 
c) pelo que entendi do seu cenário STREAMS não seria exatamente o que vc quer 
(STREAMS serve para replicação, tipo exemplificado em 
http://wedostreams.blogspot.com.br/2009/01/oracle-streams-101.html, e nesse 
tipo de uso não teria como vc indicar qualquer processamento além de replicar 
os dados) - pelo que imagino vc pensava em criar é um QUEUE de mensagens pelo 
Advanced Queue, tool essa que por trás usa o Streams para seus propósitos, 
certo ? Isso é explicitado no manual 11gR2 referente, online em  
https://docs.oracle.com/cd/E18283_01/server.112/e11013/aq_demo.htm#i1006841... 
  Eu creio que vc com ele pensa em usar as suas tabelas que registram os dados 
de emissão de nf e as outras coisas mais como fonte das mensagens e o processo 
de dequeue (que provavelmente ficaria rodando permanentemente em background ou 
seria cionado por job em intervalos) além de remover as mensagens dos queues 
(tipo 
https://dba.stackexchange.com/questions/25161/what-are-the-real-life-cases-for-using-oracle-advanced-queuing)
 além disso enviaria os emails/SMSs e outras coisas... Nunca usei assim mas 
CREIO que em tese possível é, sim....
  
d) uma alternativa de baixa tecnologia (que requer um pouco de pensamento fora 
da caixa mas pode ser interessante) é vc estabelecer uma AUDITORIA para DMLs 
nas tabelas em questão e aí OU ter uma trigger só nessa tabela de auditoria OU 
ter um job que a cada x minutos dispara uma rotina que vc escreveu e consulta a 
tabela de auditoria pra ver se houve DML nas tabelas que regstram os dados de 
NF ou o que mais te interessa, se detectou alterações envia SMS/email/whatever

e) usar o CDC (Change Data capture) - vide 
https://mdinh.wordpress.com/2010/11/20/my-change-data-capture-adventure-part1/para
 um exemplo...

f) criar  uma view materializada de REFRESH ON COMMIT que usa as tabelas todas 
em questão e ter uma trigger na view materializada que faça o envio de 
SMS/email/etc que vc quer


==> e algumas variações no tema, eventualmente mixando alguma(s) das técnicas 
acima ou variações delas...

[]s

  Chiappa

Responder a