Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pablospfc

trigger atualizar coluna da mesma tabela em PostgreSQL

Recommended Posts

Olá pessoal boa tarde, estou tentando criar uma trigger para atualizar uma coluna da mesma tabela. Após inserir ou atualizar a tabela, a coluna irá receber o valor de outra coluna, mas em MD5.

 CREATE OR REPLACE FUNCTION setHash() RETURNS TRIGGER AS $hashCPF$
    BEGIN
       UPDATE tb_teste SET cpf_cnpj_hash = md5(NEW.cpf_cnpj::Text) WHERE cpf_cnpj = NEW.cpf_cnpj;
        RETURN new;
    END;
  $hashCPF$ language plpgsql;

   CREATE TRIGGER hashCPF AFTER INSERT OR UPDATE ON tb_teste
    FOR EACH ROW EXECUTE PROCEDURE setHash();

só que na hora de inserir os dados na tabela apresenta o seguinte erro:

ERROR:  stack depth limit exceeded
HINT:  Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.
CONTEXT:  SQL statement "UPDATE tb_teste SET cpf_cnpj_hash = md5(NEW.cpf_cnpj::Text) WHERE cpf_cnpj = NEW.cpf_cnpj"
PL/pgSQL function sethash() line 5 at SQL statement
SQL statement "UPDATE tb_teste SET cpf_cnpj_hash = md5(NEW.cpf_cnpj::Text) WHERE cpf_cnpj = NEW.cpf_cnpj"

Não sei o que está acontecendo, alguém pode dar uma luz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por dfoliveira82
      Bom dia senhores,
       
      sou novo no Oracle, antes trabalhava com SQL SERVER, e me deparei com algo que ja estou a horas tentando solucionar mas nao consegui.
      Nessa Trigger que vou postar, quando mando compilar ela, fala que esta faltando uma virgula, apos o values, mas nao precisa dela e nao acho onde pode ser essa virgula faltante.
      CREATE OR REPLACE TRIGGER JOBS_CL_INSERE_USUARIO AFTER INSERT OR UPDATE OF EXPORTADA_AVA ON SITE_USUARIOS REFERENCING NEW AS NEW BEGIN INSERT INTO BLACKBEAN.TBL_USERS VALUES (NULL, 'INSERT', NULL, 'db', '0', '0', '0', TO_CHAR(:NEW.CPF), MD5(:NEW.CPF||'port@l'), TO_CHAR(:NEW.CPF), SUBSTRING(:NEW.NOME, 1, INSTR(:NEW.NOME, ' ')-1), SUBSTRING(:NEW.NOME, INSTR(:NEW.NOME, ' ')+1, LEN(:NEW.NOME)), 'email@email.com', NULL, NULL, DATE_TO_UNIX_TS(SYSDATE), NULL, NULL); END; / Se alguem puder me ajudar agradeceria.
    • Por Carlos Antoliv
      Senhores, bom dia.
       
      tenho um campo status. Então, a ideia é mudar o status. Consigo alterar o status quando necessário. Daí, pensei em todas vez que alterar, salvar o id do usuário, data, hora, o último status alterado...
      consigo fazer isso com INSERT, depois do UPDATE.
       
      Nao uso trigger. Até tentei fazer, mas não saiu como eu queria.
       
      Então, para os maiores entendedores do assunto, a melhor prática seria a TRIGGER ou INSERT ? Melhor prática ou o que mais funciona na prática ?
       
      Alguém poderia dissertar sobre isso ?
      Vlw..abço
    • Por mateus.andriollo
      Gostaria de saber se alguém tem uma trigger para fazer log de qualquer tipo de transação de dados em qualquer tabela do banco. Porém, preciso carregar um campo UserName que será setado a cada conexão via login php
      SET @UserName = 'ZeBala' Achei vários exemplos porém tenho q criar um trigger para cada tabela
       
      CREATE TRIGGER roles_audit_au AFTER UPDATE ON `<nome_tabela>` Existe uma forma de não ser direcionada?
    • Por manolegal
      Olá amigos(as) do Fórum.
      Tenho um número inteiro no PHP e preciso inseri-lo no Postgresql com 02 casas decimais.
      Defini o campo no Postgresql do tipo numeric(14,2)
      O valor está assim no PHP:
      2961966 Preciso gravar no BD da seguinte maneira:
      29619.66 Porém está gravando da seguinte forma:
      2961966.00 Tentei utilizando number_format, porém não consegui:
      $numero_bd = number_format($numero, '.', ''); $numero_bd = number_format($numero,2,"."); $numero_bd = number_format($numero,2,","numerovalor_ref_15,2,",","."); Caso alguém possa me ajudar, desde já agradeço.
    • Por Carlos Antoliv
      Então, eh algo até simples, problema de lógica e tudo.  Eu tinha feito, mas o codigo sumiu do nada e nao lembro mais da lógica que eu empregara.
       
      O enredo éh assim
       
      tabela_grupo_produtos
      e
      tabela tabela_produtos
       
      Na tabela_grupo_produtos tem:
      - informatica;
      - eletrodomestico;
      - brinquedos;
       
      na  tabela_produtos tem os podutos que são ligados a tabela de grupo de grupo de produtos:
       
      - informatica->notebook
      - informatica->computador
      - informatica->roteador
       
      - eletrodomestico->geladeira
      - eletrodomestico->microondas
      - eletrodomestico->fogao
       
      - brinquedos->lego
      - brinquedos->boneca
      - brinquedos->carrinhos
       
      O que estou tentando fazer é o seguinte:
       
      - informatica->notebook
                              ->computador
                              ->roteador
       
      - eletrodomestico->geladeira
                                     ->microondas
                                     ->fogao
       
      - brinquedos- >lego
                             -> boneca
                             ->carrinhos
       
       
      Ou seja, mostra na tela pelo "GRUPO" de produtos.
       
      fiz um select no banco....
      e tambem um foreach, mas tem algo que ta errado.
       
      Cheguei até executar dois selects distintos:
      EXEMPLO:

      <!--#################### CÓDIGO SESSÃO ################################ --> 
      <?php     session_start();     echo "Usuario: ". $_SESSION['usuarioNome'];         echo "<br>";     echo "Codigo:  ". $idSessao = $_SESSION['usuarioId']; ?>
      <br>
       
      <a href="sair.php">Sair</a> <!-- #####################FIM CODIGO SESSÃO ############################### --> <?php      $servername = "localhost"; $username = "root"; $password = ""; $database = ""; try {     $conexao2 = new PDO('mysql:host=localhost;dbname=banco', $username, $password);       $conexao2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   } catch(PDOException $e) {       echo 'ERROR: ' . $e->getMessage();   }          $sql2 = "SELECT pdos.fk_usuarios, pdos.nome_prod, pdo.nome_produto, nome_grupo_prod, pdos.foto, pdos.desc_prod, pdos.peso_liq_prod, pdos.qtd_prod, pdos.id_prod, pdos.un_medida     FROM tb_produtos AS pdos     JOIN tb_produto AS pdo ON pdos.nome_prod = pdo.id_produto     JOIN tb_grupo_prod AS gpdo      ON gpdo.id_grupo_prod = pdos.fk_tb_grupo_prod      INNER JOIN usuarios As usu     ON pdos.fk_usuarios = usu.id  ";     $stm2 = $conexao2->prepare($sql2);     $stm2->execute();     $kit3 = $stm2->fetchAll(PDO::FETCH_OBJ); ?> <?php require 'database/conexao.php'; // Recebe o termo de pesquisa se existir $termo = (isset($_GET['termo'])) ? $_GET['termo'] : ''; // Verifica se o termo de pesquisa está vazio, se estiver executa uma consulta completa if (empty($termo)):     $conexao = conexao::getInstance();     $sql = 'SELECT DISTINCT item.fk_tb_produtos, usu.nome, prod.nome_produto, prods.desc_prod, prods.peso_liq_prod, prods.un_medida, item.fk_tb_kit, kit.nome_kit, kit.preco_kit, prods.qtd_prod, kit.id_nome_kit, kit.desc_kit FROM tb_itemprodkit item /* tb_itemprodkit*/ INNER JOIN usuarios usu        /* usuarios*/ ON item.fk_usuarios = usu.id INNER JOIN tb_produtos prods  /* tb_produtos */ ON item.fk_tb_produtos = prods.id_prod INNER JOIN tb_kit kit       /*tb_kit */ ON item.fk_tb_kit = kit.id_nome_kit INNER JOIN tb_produto prod ON prods.nome_prod = prod.id_produto  WHERE fk_usuario = 5 GROUP BY kit.id_nome_kit  ';     $stm = $conexao->prepare($sql);     $stm->execute();     $kit = $stm->fetchAll(PDO::FETCH_OBJ); else:     // Executa uma consulta baseada no termo de pesquisa passado como parâmetro     $conexao = conexao::getInstance();     $sql = 'SELECT * FROM tb_kit WHERE nome_kit LIKE :nome_kit OR desc_kit LIKE :desc_kit';     $stm = $conexao->prepare($sql);     $stm->bindValue(':nome_kit', $termo.'%');     $stm->bindValue(':desc_kit', $termo.'%');     $stm->execute();     $kit = $stm->fetchAll(PDO::FETCH_OBJ); endif; ?> <!DOCTYPE html> <html> <head>     <meta charset="utf-8">     <title>Listagem KITs </title>     <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">     <link rel="stylesheet" type="text/css" href="css/custom.css"> </head> <body>     <div class='container'>         <fieldset>             <!-- Cabeçalho da Listagem -->             <legend><h1>Listagem de Kits</h1></legend>             <!-- Formulário de Pesquisa -->             <form action="" method="get" id='form-contato' class="form-horizontal col-md-10">                 <label class="col-md-2 control-label" for="termo">Pesquisar</label>                 <div class='col-md-7'>                     <input type="text" class="form-control" id="termo" name="termo" placeholder="Infome o Nome ou E-mail">                 </div>                 <button type="submit" class="btn btn-primary">Pesquisar</button>                 <a href='index.php' class="btn btn-primary">Ver Todos</a>             </form>             <!-- Link para página de cadastro -->             <a href='kit_cadastro.php' class="btn btn-success pull-right">Cadastrar Kit</a>             <div class='clearfix'></div>             <?php if(!empty($kit)):?>                 <!-- Tabela de Clientes -->                 <table class="table table-striped">                     <tr class='active'>                         <th>Foto</th>                         <th>produto</th>                         <th>Nome</th>                         <th>Descrição</th>                         <th>Preço</th>                         <th>Ação</th>                     </tr>                     <?php foreach($kit as $kit2):?>                         <tr>                             <td><img src='fotos/<?=$kit2->foto?>' height='40' width='40'></td>                                                                                      <?php foreach($kit3 as $kit4):?>                             <td>                                  <?=$kit4->nome_produto.'<br>'; ?>                                                                                     </td><?php endforeach; ?>                                                                                      <td><?=$kit2->nome_kit?></td>                                 </td>                             <td><?=$kit2->desc_kit?></td>                             <td><?='R$ '.$kit2->preco_kit.',00'?></td>                                                          <td>                                 <a href='kit_editar.php?id_nome_kit=<?=$kit2->id_nome_kit?>' class="btn btn-primary">Editar</a>                                 <a href='javascript:void(0)' class="btn btn-danger link_exclusao" rel="<?=$kit2->id_nome_kit?>">Excluir</a>                             </td>                         </tr>                                                                                                                                                    <?php endforeach;?>                 </table>             <?php else: ?>                 <!-- Mensagem caso não exista clientes ou não encontrado  -->                 <h3 class="text-center text-primary">Não existe Kit cadastrados!</h3>             <?php endif; ?>         </fieldset>     </div>     <script type="text/javascript" src="js/custom.js"></script> </body> </html>  
      ....se alguem puder ajudar...
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.