Ir para conteúdo

POWERED BY:

Arquivado

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

Ewerton Bittencourt

Erro #1442

Recommended Posts

Estou com um problema.

Estou desenvolvendo meu TCC em PHP usando conexão com BD para armazenagem de dados.

E sim, o problema está no BD. estou usando o MySQL do phpmyadmin.

 

Bom, sem mais delongas, a mensagem de erro é esta:

#1442 - Can't update table 'documentacao' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

 

 

E esse é o código:

CREATE TABLE IF NOT EXISTS `documentacao` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` date DEFAULT NULL,
  `nome` varchar(25) NOT NULL,
  `tipo` varchar(10) NOT NULL,
  `arquivo` text NOT NULL,
  `id_estagio` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

DELIMITER //
CREATE TRIGGER `documentacao_arruma_hora` AFTER INSERT ON `documentacao`
 FOR EACH ROW BEGIN
UPDATE documentacao SET data = (SELECT DATE_FORMAT(now(), '%Y/%m/%d'))
WHERE data IS NULL;
END
//
DELIMITER ;

 

O erro aparece quando vou inserir os dados no banco.

INSERT INTO documentacao (id, nome, tipo, arquivo, id_estagio) VALUES ('1', 'Contrato', 'Contrato', 'documentos/1/1.pdf', '1');

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que eu entendi, voce quer que se a data for null, que insira a DATE_FORMAT(now(), '%Y/%m/%d') no campo nulo

 

caso seja ISSO,voce poderia fazer algo assim:

 

CREATE TRIGGER `documentacao_arruma_hora` BEFORE INSERT ON `documentacao` 
FOR EACH ROW BEGIN 
    IF(NEW.data IS NULL) THEN
        SET NEW.data = (SELECT DATE_FORMAT(now(), '%Y/%m/%d'))
END

 

note que esta trigger é before insert

 

o mysql traz dentro das triggers o NEW e o OLD, que contém os valores novos e antigos, respectivamente, dos dados da linha em questão. o OLD vai existir no update por exemplo.

 

No exemplo que eu citei, a gente seta o NEW.data com o default que a gente quer, caso ele seja nulo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro aparece quando vou inserir os dados no banco.

 

Só lembrando: 1) se um campo é "auto increment", os valores são inseridos automaticamente; 2) como campos "Int" são números, normalmente não se usa aspas.. d 1 verificada nisso..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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