Já quebrei a cabeça para fazer algo que identifique alterações em determinados campos em uma tabela...
Explicando melhor, tenho uma tabela assim:
CREATE TABLE `teste`.`compra` (
`idcompra` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`codigo` VARCHAR(14) NOT NULL DEFAULT 'codigoean?',
`nome` VARCHAR(40) NOT NULL DEFAULT 'descriçao?',
`unidade` VARCHAR(3) NOT NULL DEFAULT 'un?',
`saldo` DECIMAL(10,2) NOT NULL DEFAULT 0,
`preço` DECIMAL(10,2) NOT NULL DEFAULT 0,
`pedir` TINYINT UNSIGNED NOT NULL DEFAULT 0,
`flag` VARCHAR(4) NOT NULL DEFAULT '0000',
PRIMARY KEY (`idteste`)
)
ENGINE = InnoDB;
Bom... o que eu preciso é de algo como um evento automático controlado pelo próprio MySQL que:
a) quando crio um registro, automaticamente o campo `flag` é "setado" para '0000';
B) se eu alterar o codigo de um produto, o primeiro "bit" do campo flag passa a ser "1"... mas só se realmente o conteúdo for modificado... isto é... se o campo continha "78928201" e eu fizer um 'update `compra` set codigo="78928201';" sei que o proprio MySQL não efetuará a operação...
c) se eu alterar o nome, o segundo "bit" passa para "1" e assim por diante... ou seja, se eu quiser saber se um campo, dentre estes quatro, sofreu alteração, basta olhar o campo flag...
Pensei em algo assim, que seria executado pelo próprio MySQL antes ou após um update na tabela:
delimiter |
create trigger teste_upd after update on teste
for each row begin
if (old.codigo!=new.codigo) then
update teste set flag=concat('1', substring(flag, 2, 3));
end if;
end;
|
delimiter;
Mas... como implementá-la? quando tento fazer um update (update teste set codigo="39393";), aparece uma mensagem de erro... can't update table 'teste' in stored funcion/trigger because it is already used by statement which invoked this stored function/trigger.
Pergunta
paulobergo
Olá pessoal...
Já quebrei a cabeça para fazer algo que identifique alterações em determinados campos em uma tabela...
Explicando melhor, tenho uma tabela assim:
Bom... o que eu preciso é de algo como um evento automático controlado pelo próprio MySQL que: a) quando crio um registro, automaticamente o campo `flag` é "setado" para '0000'; B) se eu alterar o codigo de um produto, o primeiro "bit" do campo flag passa a ser "1"... mas só se realmente o conteúdo for modificado... isto é... se o campo continha "78928201" e eu fizer um 'update `compra` set codigo="78928201';" sei que o proprio MySQL não efetuará a operação... c) se eu alterar o nome, o segundo "bit" passa para "1" e assim por diante... ou seja, se eu quiser saber se um campo, dentre estes quatro, sofreu alteração, basta olhar o campo flag... Pensei em algo assim, que seria executado pelo próprio MySQL antes ou após um update na tabela:Mas... como implementá-la? quando tento fazer um update (update teste set codigo="39393";), aparece uma mensagem de erro... can't update table 'teste' in stored funcion/trigger because it is already used by statement which invoked this stored function/trigger.
Grato por qualquer ajuda!!!
Abraços!
Editado por Denis CourcyLink para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados