none
Trigger que valide se um campo foi informado no WHERE RRS feed

  • Pergunta

  • Olá Pessoal,

    Pesquisei muito antes de abrir a pergunta mas não encontrei a solução, nem se quer se existe a possibilidade.

    Eu quero criar uma Trigger que impeça o UPDATE ou DELETE caso o ID_CLIENTE não seja informado. Tenho um sistema multi-clientes e caso esqueça de mencionar o ID_CLIENTE irá alterar os dados de TODOS os clientes. 

    Ex:

    Quero bloquear caso a query seja:
    UPDATE produtos SET preco='100.00'

    E permitir, caso esteja corretamente informando o ID Cliente:
    UPDATE produtos SET preco='100.00' WHERE id_cliente='1133'

    Há como fazer isso? Tive problemas recentes com programadores que esqueceram de informar em uma query e tive que restaurar todos os dados.

    Obrigado!

    quinta-feira, 10 de janeiro de 2013 04:39

Respostas

  • Andrews, outra maneira seria encapsular o update em uma procedure, tendo como parâmetro o ID do cliente. Desta forma, o usuário sempre teria que passar o ID, pois o parametro seria obrigatório na procedure.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    • Sugerido como Resposta Roberson Naves segunda-feira, 14 de janeiro de 2013 11:57
    • Marcado como Resposta Ricardo Russo terça-feira, 15 de janeiro de 2013 11:55
    quinta-feira, 10 de janeiro de 2013 16:37

Todas as Respostas

  • Andrews,

    Pelo que você falou, acho que você precisa fazer uma trigger nessa tabela, do tipo INSTEAD OF UPDATE.

    Antes do update ser executado, você faz um "select count (distinct id_cliente)"  na tabela inserted. Se retornar maior que 1, é porque tem mais de um id_cliente na tabela, consequentemente, é um update para mais de um cliente.

    Caso retorne 1, é porque o update é para um cliente, então você re-executa o update.

    Porém uma intervenção deste tipo é perigosa, pois uma atualização de qualquer dado diferente, terá que ser realizada cliente por cliente...

    Espero ter ajudado.

    []'s

    quinta-feira, 10 de janeiro de 2013 16:24
  • Andrews, outra maneira seria encapsular o update em uma procedure, tendo como parâmetro o ID do cliente. Desta forma, o usuário sempre teria que passar o ID, pois o parametro seria obrigatório na procedure.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    • Sugerido como Resposta Roberson Naves segunda-feira, 14 de janeiro de 2013 11:57
    • Marcado como Resposta Ricardo Russo terça-feira, 15 de janeiro de 2013 11:55
    quinta-feira, 10 de janeiro de 2013 16:37