Pular para o conteúdo
  • Este tópico contém 7 respostas, 5 vozes e foi atualizado pela última vez 15 anos, 1 mês atrás por fsitja.
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #98159
    Roldao
    Participante

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

      #98161
      Gilkauer
      Participante

        Que tal fazer a geração do email com uma trigger?

        #98162
        leandrolbs
        Participante

          quer 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

          #98163
          Roldao
          Participante

            Grato a vocês, mas o problema é que a empresa pediu para fazer um processo, isso que esta me matando.

            #98164
            burga
            Participante

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

              #98170
              fsitja
              Participante

                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…

                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.

                #98172
                Gilkauer
                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.

                  #98173
                  fsitja
                  Participante

                    Opa, 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. 😉

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.