Uma tabela chamada [exemplares_emprestimos_biblioteca]. Quando executo uma rotina de renovação de exemplares, insiro um novo registro nessa tabela apontando para o registro anterior (id_exemplar_emprestimo_vinculado), assim consigo saber que o exemplar é vinculado a um empréstimo anterior. Ocorre que preciso alterar um campo dessa mesma tabela indicando que o empréstimo anterior foi encerrado. Observei que não posso utilizar triggers para a mesma tabela portanto criei um tabela auxiliar chamada [renovações_exemplares_emprestimos_biblioteca]. Aí criei uma stored procedure e uma trigger para inserir nesta tabela auxiliar toda vez que o registro tem exemplar vinculado. Em seguida criei uma outra stored procedure e uma outra trigger sobre essa tabela auxiliar para alterar a flag que preciso mas observei que caio no mesmo problema pois me retorna o mesmo erro. Erro SQL (1452).
Alguém sugere alguma solução para o problema?
Abraços
CREATE TRIGGER TriggerExemplaresEmprestimosBibliotecaAI BEFORE INSERT ON exemplares_emprestimos_biblioteca FOR EACH ROW
BEGIN
IF (NEW.id_exemplar_emprestimo_biblioteca_vinculado IS NOT NULL) THEN
CALL SPInsertRenovacaoExemplarEmprestimoBiblioteca(NEW.id_exemplar_emprestimo_biblioteca, NEW.id_exemplar_emprestimo_biblioteca_vinculado);
END IF;
END ;
CREATE TRIGGER TriggerRenovacoesExemplaresEmprestimosBibliotecaAI AFTER INSERT ON renovacoes_exemplares_emprestimos_biblioteca FOR EACH ROW
BEGIN
CALL SPUpdateStatusExemplarEmprestimoBiblioteca(NEW.id_exemplar_emprestimo_biblioteca_vinculado, 'R');
END ;
Pergunta
Luiz Fernando Rodrigues
Boa tarde.
Tenho o seguinte cenário.
Uma tabela chamada [exemplares_emprestimos_biblioteca]. Quando executo uma rotina de renovação de exemplares, insiro um novo registro nessa tabela apontando para o registro anterior (id_exemplar_emprestimo_vinculado), assim consigo saber que o exemplar é vinculado a um empréstimo anterior. Ocorre que preciso alterar um campo dessa mesma tabela indicando que o empréstimo anterior foi encerrado. Observei que não posso utilizar triggers para a mesma tabela portanto criei um tabela auxiliar chamada [renovações_exemplares_emprestimos_biblioteca]. Aí criei uma stored procedure e uma trigger para inserir nesta tabela auxiliar toda vez que o registro tem exemplar vinculado. Em seguida criei uma outra stored procedure e uma outra trigger sobre essa tabela auxiliar para alterar a flag que preciso mas observei que caio no mesmo problema pois me retorna o mesmo erro. Erro SQL (1452).
Alguém sugere alguma solução para o problema?
Abraços
Luiz Fernando.
Segue abaixo meus códigos:
CREATE TABLE `exemplares_emprestimos_biblioteca` (
`id_exemplar_emprestimo_biblioteca` INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
`data_cadastro` DATETIME NOT NULL,
`id_usuario_cadastro` INT(10) UNSIGNED ZEROFILL NOT NULL,
`data_alteracao` DATETIME NULL DEFAULT NULL,
`id_usuario_alteracao` INT(10) UNSIGNED ZEROFILL NULL DEFAULT NULL,
`id_exemplar_titulo` INT(10) UNSIGNED ZEROFILL NOT NULL,
`id_emprestimo_biblioteca` INT(10) UNSIGNED ZEROFILL NOT NULL,
`data_devolucao_exemplar_titulo` DATE NOT NULL,
`hora_devolucao_exemplar_titulo` TIME NOT NULL,
`status_exemplar_emprestimo_biblioteca` ENUM('E','D','R') NOT NULL DEFAULT 'E',
`id_exemplar_emprestimo_biblioteca_vinculado` INT(10) UNSIGNED ZEROFILL NULL DEFAULT NULL,
PRIMARY KEY (`id_exemplar_emprestimo_biblioteca`),
UNIQUE INDEX `id_exemplar_emprestimo_biblioteca_UNIQUE` (`id_exemplar_emprestimo_biblioteca`),
INDEX `fk_exemplares_emprestimos_biblioteca_idx1` (`id_usuario_cadastro`),
INDEX `fk_exemplares_emprestimos_biblioteca_idx2` (`id_usuario_alteracao`),
INDEX `fk_exemplares_emprestimos_biblioteca_idx3` (`id_exemplar_titulo`),
INDEX `fk_exemplares_emprestimos_biblioteca_idx4` (`id_emprestimo_biblioteca`),
INDEX `fk_exemplares_emprestimos_biblioteca_idx5` (`id_exemplar_emprestimo_biblioteca_vinculado`),
CONSTRAINT `fk_exemplares_emprestimos_biblioteca_idx1` FOREIGN KEY (`id_usuario_cadastro`) REFERENCES `usuarios` (`id_usuario`) ON UPDATE CASCADE,
CONSTRAINT `fk_exemplares_emprestimos_biblioteca_idx2` FOREIGN KEY (`id_usuario_alteracao`) REFERENCES `usuarios` (`id_usuario`) ON UPDATE CASCADE,
CONSTRAINT `fk_exemplares_emprestimos_biblioteca_idx3` FOREIGN KEY (`id_exemplar_titulo`) REFERENCES `exemplares_titulos` (`id_exemplar_titulo`) ON
UPDATE CASCADE,
CONSTRAINT `fk_exemplares_emprestimos_biblioteca_idx4` FOREIGN KEY (`id_emprestimo_biblioteca`) REFERENCES `emprestimos_biblioteca` (`id_emprestimo_biblioteca`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `fk_exemplares_emprestimos_biblioteca_idx5` FOREIGN KEY (`id_exemplar_emprestimo_biblioteca_vinculado`) REFERENCES `exemplares_emprestimos_biblioteca` (`id_exemplar_emprestimo_biblioteca`) ON UPDATE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=27;
CREATE TABLE `renovacoes_exemplares_emprestimos_biblioteca` (
`id_exemplar_emprestimo_biblioteca` INT(10) UNSIGNED ZEROFILL NOT NULL,
`id_exemplar_emprestimo_biblioteca_vinculado` INT(10) UNSIGNED ZEROFILL NOT NULL,
PRIMARY KEY (`id_exemplar_emprestimo_biblioteca`, `id_exemplar_emprestimo_biblioteca_vinculado`),
INDEX `fk_renovacoes_exemplares_emprestimos_biblioteca_idx1` (`id_exemplar_emprestimo_biblioteca`),
INDEX `fk_renovacoes_exemplares_emprestimos_biblioteca_idx2` (`id_exemplar_emprestimo_biblioteca_vinculado`),
CONSTRAINT `fk_renovacoes_exemplares_emprestimos_biblioteca_idx1` FOREIGN KEY (`id_exemplar_emprestimo_biblioteca`) REFERENCES `exemplares_emprestimos_biblioteca` (`id_exemplar_emprestimo_biblioteca`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `fk_renovacoes_exemplares_emprestimos_biblioteca_idx2` FOREIGN KEY (`id_exemplar_emprestimo_biblioteca_vinculado`) REFERENCES `exemplares_emprestimos_biblioteca` (`id_exemplar_emprestimo_biblioteca_vinculado`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
CREATE TRIGGER TriggerExemplaresEmprestimosBibliotecaAI BEFORE INSERT ON exemplares_emprestimos_biblioteca FOR EACH ROW
BEGIN
IF (NEW.id_exemplar_emprestimo_biblioteca_vinculado IS NOT NULL) THEN
CALL SPInsertRenovacaoExemplarEmprestimoBiblioteca(NEW.id_exemplar_emprestimo_biblioteca, NEW.id_exemplar_emprestimo_biblioteca_vinculado);
END IF;
END ;
CREATE TRIGGER TriggerRenovacoesExemplaresEmprestimosBibliotecaAI AFTER INSERT ON renovacoes_exemplares_emprestimos_biblioteca FOR EACH ROW
BEGIN
CALL SPUpdateStatusExemplarEmprestimoBiblioteca(NEW.id_exemplar_emprestimo_biblioteca_vinculado, 'R');
END ;
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados