none
Cadastro de livro - stored procedure e triggers RRS feed

  • Discussão Geral

  • Olá.
    Eu estou criando um sistema para cadastro e venda de livros. Entretanto, estou com dificuldade quando se trata de inserir dados nas tabelas.

    Modelagem

    http://postimage.org/image/6ls0q3aqv/

    http://www.freeimagehosting.net/8if17

    http://tinypic.com/view.php?pic=359ih5f&s=5

    Eu criei uma procedure para inserir dados nas tabelas, porem eu tenho que atualizar a tabela livro apartir das outras tabelas: autor, editora, categoria.

    CREATE PROCEDURE INSERE_NOME_SP (@TITULO VARCHAR(100), @ISBN INT , @NOME_AUTOR VARCHAR(100),@NOME_EDITORA VARCHAR(100), @NOME_CATEGORIA VARCHAR(100))
    AS
    BEGIN
    
    	INSERT INTO LIVRO (TITULO, ISBN) VALUES (@TITULO,@ISBN)
    	INSERT INTO AUTOR (NOME) VALUES (@NOME_AUTOR)
    	INSERT INTO EDITORA (NOME) VALUES (@NOME_EDITORA)
    	INSERT INTO CATEGORIA (NOME) VALUES (@NOME_CATEGORIA)
    	
    
    END


    Eu pensei em criar uma trigger para cada vez que inserir na tbl_autor por exemplo, a tabela livro seja atualizada. Só que uns erros continuam aparecendo e eu nao sei o como evitar.

    CREATE TRIGGER TR_ATUALIZA_LIVRO ON AUTOR FOR INSERT
    AS
    DECLARE @AUTOR_ID INT
    
    SELECT @AUTOR_ID = INSERTED.AUTOR_ID FROM INSERTED
    
    INSERT INTO LIVRO (AUTOR_ID) VALUES (@AUTOR_ID)


    • Editado Daniel O. Farias segunda-feira, 13 de fevereiro de 2012 12:05 xD
    • Tipo Alterado Eder Costa quarta-feira, 29 de fevereiro de 2012 14:52
    segunda-feira, 13 de fevereiro de 2012 01:42

Todas as Respostas

  • Acabei de pensar em adicionar alguns campos na tabela livro: nome_editora, nome_autor, nome_categoria. E apartir dai criar alguns triggers para atualizar as outras tabelas.
    segunda-feira, 13 de fevereiro de 2012 01:48
  • Olá Daniel,

    Poste seu diagrama como imagem pra facilitar, não consegui abrir o link que você deixou aqui na empresa.


    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com

    segunda-feira, 13 de fevereiro de 2012 10:20
  • Daniel,

    Comentar sobre a modelagem é complicado, pois alem de ser unica, representa o seu negocio, cujo qual não conhecemos.

    Voce comentou sobre a trigger estar gerando um erro, por favor, poste o erro e talvez possamos te ajudar mais.

    Vi que sua trigger faz um insert do autor na tabela de livro, o que não entendi direito, o que voce quer representar efetivamente?


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    segunda-feira, 13 de fevereiro de 2012 10:29
    Moderador
  • Já coloquei o modelo fisico. E agora?
    segunda-feira, 13 de fevereiro de 2012 13:49
  • Olá Daniel,

    Vi seu modelo, primeiramente vamos por partes.

    Pelo modelo sua tabela Livro possui FK's para as tabelas AUTOR,EDITORA,CATEGORIA e VENDA.

    Acredito que esses cadastros sejam independentes certo? ou seja, você deve ter uma tela para manter os dados dos autores, categorias etc...

    Na trigger que você mencionou, após a inserção de um registro na tabela autor você está tentando inserir um livro novo e não atualizar um livro existente.

    Minha sugestão:

    Partindo do ponto que um livro é escrito por algum autor, a FK existente na tabela LIVRO não deve permitir NULL pois não existe livro sem autor, entretanto é como o Fabrizzio comentou, não conhecemos a regra do seu negócio.

    Analisando o problema da TRIGGER o que você deveria fazer neste caso é alterá-la para um UPDATE invés de um INSERT, mas como você vai saber qual livro deve ser atualizado partindo do ponto de que um autor pode escrever vários livros?


    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com


    • Editado David Silva terça-feira, 14 de fevereiro de 2012 00:25
    terça-feira, 14 de fevereiro de 2012 00:25