Artigos recentes

Versão para impressãoEnviar para amigoVersão PDF


Próximos artigos:
- Criando Triggers
- Trabalhando com Views
- Criar funções em C no banco de dados
- Utilizando transações com SAVEPOINT
- Acessar banco de dados utilizando ESQL/C
- Entendendo o "optimistic lock"
- Teste prático de otimização de código count(*) x update x insert
- Teste prático de otimização de código, arrays x cursores

trigger de insert x email

Boa noite amigo, Gostaria de saber como posso criar uma trigger no informix para quando for inserido uma linha na tabela a mesma mande um e-mail.. tenho essa mas nao manda e-mail, fiz para criar um arquivo no UNIX.. montar uma shell para que a mesma possa ficar chegando de 3 em 3 minutos... Não tem como fazer diretamente pelo banco? segue, create procedure 'informix'.processoln(ass varchar(50),msg varchar(255), dest varchar(50)) returning char; DEFINE cmd1 lvarchar(300); DEFINE cmd2 lvarchar(300); DEFINE cmd3 lvarchar(300); DEFINE flag char(1); LET cmd1 = 'echo "'|| msg ||'" >> /tmp/msg'||substr(CURRENT,1,4)||substr(CURRENT,6,2)||substr(CURRENT,9,2) ||substr(CURRENT,12,2)||substr(CURRENT,15,2)||substr(CURRENT,18,2)||'.txt'; system cmd1; LET cmd2 = 'echo "'|| ass ||'" >> /tmp/ass'||substr(CURRENT,1,4)||substr(CURRENT,6,2)||substr(CURRENT,9,2) ||substr(CURRENT,12,2)||substr(CURRENT,15,2)||substr(CURRENT,18,2)||'.txt'; system cmd2; LET cmd3 = 'echo "'|| dest ||'" >> /tmp/dest'||substr(CURRENT,1,4)||substr(CURRENT,6,2)||substr(CURRENT,9,2) ||substr(CURRENT,12,2)||substr(CURRENT,15,2)||substr(CURRENT,18,2)||'.txt'; system cmd3; LET flag = 'S'; return flag; end procedure; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx begin; lock table 'baan'.ttccce015711 in exclusive mode; commit; create trigger ln INSERT ON 'baan'.ttccce015711 REFERENCING new AS N FOR EACH ROW WHEN (N.t_flag_o = 'N')( execute procedure processoln(N.t_assu_o,N.t_mess_o ,N.t_dest_o) INTO t_flag_o); begin; lock table 'baan'.ttccce015711 in share mode; commit;

EMAIL via TRIGGER

Olá,

Nativamente, não tem como.
Seria necessário executar um comando de S.O. para enviar o email, o que acabaria caindo na mesma situação que você está hoje.
E ainda assim não recomendaria utilizar uma chamada do system() em uma trigger, pois qualquer problema no S.O. que trave a chamada system() irá refletir sobre a sessão do usuário.
Lembre que está trabalhando com um banco de dados, ele não é um servidor/client de emails.
A solução que eu consideraria mais segura, é próxima a que você adotou , mas teria uma tabela de fila de envio de email, que seria alimentada pela trigger e então teria via dbScheduler do banco ou através de um agendar (crontab) no S.O. um programa/script para ler esta fila , enviar o email pendente e remover o registro da fila.
Assim qualquer problema com o envio do email, não afeta a execução do banco de dados.

Comentar

O conteúdo deste campo é privado não será exibido ao público.
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Você pode usar tags BBCode no texto.
  • Tags HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Mais informações sobre as opções de formatação

CAPTCHA
Este teste é para bloquear programas automatizados e previnir spams
CAPTCHA de Imagem
Digite o texto exibido na imagem.