- Este tópico contém 7 respostas, 5 vozes e foi atualizado pela última vez 15 anos, 1 mês atrás por
fsitja.
-
AutorPosts
-
4 de fevereiro de 2011 às 11:13 pm #98159
Roldao
ParticipanteBoa Tarde, Galera.
Estou com uma pequena dificuldade de montar um procedimento,
tenho duas tabelas sendo uma de “Cliente” e a outra “email”, sendo que quando inserir um cliente novo quando executar a procedure tem que automaticamente criar um email, sendo que tem clientes cadastrado, só quero para os novos.
gratoo, galera, ajude-me.
4 de fevereiro de 2011 às 11:22 pm #98161Gilkauer
ParticipanteQue tal fazer a geração do email com uma trigger?
4 de fevereiro de 2011 às 11:27 pm #98162leandrolbs
Participantequer uma procedure que é chamada ao cadastrar um cliente novo ?
acho que uma trigger fará o que precisa.
create table jr.yy_cliente (
codigo number,
nome varchar2(60));create table jr.yy_email (
codigo number,
codigo_cliente number,
email varchar2(255));create or replace trigger TG_AI_YY_CLIENTE
after insert on yy_cliente
for each row
declare
-- local variables here
begin
insert into yy_email (codigo,codigo_cliente,email) values (1,:new.codigo,:new.nome||'@d.com.br');
end TG_AI_YY_CLIENTE;insert into jr.yy_cliente(codigo,nome) values (1,'leandro');
select * from jr.yy_email
4 de fevereiro de 2011 às 11:43 pm #98163Roldao
ParticipanteGrato a vocês, mas o problema é que a empresa pediu para fazer um processo, isso que esta me matando.
5 de fevereiro de 2011 às 2:12 am #98164burga
ParticipanteOi Roldao,
Ao meu ver processo =/= procedimento.
Sendo assim, é possível que a trigger indicada pelos colegas atenda sem problemas a requisição da sua empresa. Onde a trigger deve fazer parte deste processo.
Caso haja a necessidade de implementar um procedimento para cadastrar e-mails apenas para registros novos E que estes cadastros sejam realizados somente na chamada do procedimento, então existe a necessidade de se criar um coluna indicando quais são os novos registros da tabela cliente que devem receber este novo e-mail e, dentro do procedimento, buscar por estes novos clientes, criar o e-mail correspondente e desmarcar a “coluna indicadora”.
Outra opção, que também dá a entender pela sua primeira mensagem, é que é o procedimento que cadastrará novos clientes e então os e-mails correspondentes. Mas acredito que pela simplicidade não deve ser este o caso… 😆
A questão é você discutir com o responsável pela requisição e explicar como o problema pode ser resolvido (através de triggers) e ver se atende. Pois o que dá a entender é que existe uma falta de entendimento entre as partes. Ou pediram do jeito errado, ou você entendeu do jeito errado.
7 de fevereiro de 2011 às 4:48 pm #98170fsitja
ParticipanteTem um problema sério em usar triggers para e-mail: se o procedimento der rollback, você não tem como fazer rollback no e-mail. O cliente já recebeu…
Evite usar trigger nesse caso. Automaticamente geralmente rima com confusamente. Deixe claro e aparente no procedimento de inserção que um email é enviado, pois o próximo desenvolvedor que for mexer no programa deve ter ciência disso.
A trigger geralmente oculta isso e dificulta a manutenção, além de introduzir o erro que mencionei acima.
O mais simples seria fazer em stored procedure um schedule para enviar o e-mail via DBMS_JOB que agende o envio do e-mail. Resolve o problema e tem mais desempenho.
7 de fevereiro de 2011 às 5:29 pm #98172Gilkauer
Participante[quote=”fsitja”:1v9zkt9g]Tem um problema sério em usar triggers para e-mail: se o procedimento der rollback, você não tem como fazer rollback no e-mail. O cliente já recebeu…[/quote]
Realmente, caso ele precise enviar um email pode ocultar diversos erros, mas pelo que eu havia entendido ele precisaria apenas criar um endereço de e-mail para o novo cliente. Neste caso para não ter que mecher na estrutura dos dados (criando uma coluna de controle) não vejo motivos para não usar trigger.
Ele tambem poderia criar um procedimento que criasse o endereço de email e o linkasse ao novo cliente, mas teria que incluir a chamada desta rotina em todos os locais que existe a possibilidade de incluir um novo cliente. O que pode ser problematico caso ele não tenha bem mapeado os locais onde se pode cadastrar clientes.
7 de fevereiro de 2011 às 6:46 pm #98173fsitja
ParticipanteOpa, foi mal camarada! Falha minha no entendimento do problema. Quando li criar e-mail eu entendi enviar e-mail… 😆
Sendo uma inserção de tabela é factível, pois não quebra a transação. 😉
-
AutorPosts
- Você deve fazer login para responder a este tópico.