none
Ajuda com Triggers e Procedures no SQL Server RRS feed

  • Pergunta

  • Boa tarde, bem estou terminando um trabalho da faculdade e me deparei com um problema, bem fiz um sistema de locadora, nada profissional, apenas fiz o que foi pedido no trabalho. Bem, fiz o sistema em VB.NET e todo o sistema está funcionando, incluir, alterar, incluir, deletar, listar, até os relatórios já estão prontos...

    Porém o meu problema agora são as Triggers e Procedures que devo fazer dentro do SQL Server, já pesquisei e tentei fazer, porém estou um pouco perdido com a lógica do problema e com a sintaxe, já que é primeira vez que faço uma Trigger com Procedure....

    Abaixo está a sintaxe de criação das tabelas, se alguém puder me ajudar apenas com a primeira, depois eu tento desenvolver o resto:

    CREATE TABLE Filme (
    titulo nvarchar(30),
    quantidade_disponivel_locacao int,
    faixa_etaria int,
    valor_diario money,
    cod_filme int PRIMARY KEY,
    quantidade_total char(1)
    )
    
    CREATE TABLE Cliente (
    cod_cliente int PRIMARY KEY,
    cpf nvarchar(11),
    valor_locado money,
    nome nvarchar(50),
    data_nascimento datetime
    )
    
    CREATE TABLE Funcionario (
    cod_funcionario int PRIMARY KEY,
    telefone nvarchar(10),
    cargo nvarchar(30),
    cpf nvarchar(11),
    nome nvarchar(50)
    )
    
    CREATE TABLE Exemplar (
    midia nvarchar(20),
    cod_exemplar int PRIMARY KEY,
    cod_filme int,
    FOREIGN KEY(cod_filme) REFERENCES Filme (cod_filme)
    )
    
    CREATE TABLE Locacao (
    cod_locacao int PRIMARY KEY,
    data_devolucao datetime,
    valor_total datetime,
    valor_pago datetime,
    data_locacao datetime,
    cod_cliente int,
    cod_funcionario int,
    FOREIGN KEY(cod_cliente) REFERENCES Cliente (cod_cliente),
    FOREIGN KEY(cod_funcionario) REFERENCES Funcionario (cod_funcionario)
    )
    
    CREATE TABLE Reserva (
    data_reserva datetime,
    cod_cliente int,
    cod_filme int,
    cod_funcionario int,
    PRIMARY KEY(cod_cliente,cod_filme,cod_funcionario)
    )
    
    CREATE TABLE Exemplares_Locados (
    cod_exemplar int,
    cod_locacao int,
    FOREIGN KEY(cod_exemplar) REFERENCES Exemplar (cod_exemplar),
    FOREIGN KEY(cod_locacao) REFERENCES Locacao (cod_locacao)
    )
    
    

    As Triggers e Procedures devem ser construídas para controlar as seguintes situações

    • A tabela FILME deve ter uma coluna para quantidade exemplares disponiveis (quantidade_disponivel_locacao) que toda locação realizada quando um exemplar for retirado ou colocado naquela locação em aberto este campo deve ser atualizado automaticamente

    • A tabela LOCAÇÃO com a coluna valor deve ter seu valor alterado automaticamente de acordo com os exemplares que estão sendo colocados ou retirados no momento da mesma

    • A tabela CLIENTE com a coluna valor locado que representa tudo que ele ja gastou em locações na locadora deve ser atualizado automaticamente toda vez que uma locação for encerrada (foram devolvidos todos os exemplares)

    • Quando uma tentativa de fazer reserva de um filme é realizada deve-se testar se a quantidade de reservas não é superior a quantidade de exemplares existentes no sistema (campo quantidade_total na tabela FILME) e disparar uma exceção caso nao seja possível realizar a reserva

    • O campo quantidade_total da tabela FILME deve ser atualizado toda vez que um exemplar é inserido, atualizado ou excluído do sistema

    Agradeço desde já a ajuda de todos, atenciosamente.

    Inácio Arantes M. P. Júnior

    quinta-feira, 14 de junho de 2012 20:55

Respostas

  • Vamos lá...

    // TRIGGERS

    Create Trigger NomeTrigger                                   // CRIA A TRIGGER

                On schema.NomeTabela                            // ASSOCIADA A TABELA....

                AFTER INSERT                                            // APÓS HAVER QUALQUER INSERT NESTA TABELA

                AS PRINT 'HOUVE UM INSERT NA TABELA'  // IMPRIME NA TELA "....."

       


    Gilberto Herminio Analista de Desenvolvimento de Sistemas Mogi das Cruzes-SP desenvolvedor.ti@r7.com / gil_haf@ig.com.br

    • Sugerido como Resposta Heloisa Pires segunda-feira, 25 de junho de 2012 16:29
    • Marcado como Resposta Heloisa Pires quarta-feira, 27 de junho de 2012 11:52
    sexta-feira, 15 de junho de 2012 23:31
  • PROCEDURE...

    CREATE PROCEDURE MINHA_PROC                                     ///CRIA A PROCEDURE DE NOME MINHA_PROC

                 @NOME VARCHAR(30)                                            //DECLARA A VARIAVEL QUE IRA RECEBER O PARAMETRO 

                 AS SELECT * FROM SCHEMA.NOMETABELA            // AÇÃO A SER APLICADA

                 WHERE NOMECLIENTE=@NOME                           // CONDIÇÃO DESTA AÇÃO

    ....minha_proc 'BAR DA MARIA'         /// CHAMANDO A PROCEDURE


    Gilberto Herminio Analista de Desenvolvimento de Sistemas Mogi das Cruzes-SP desenvolvedor.ti@r7.com / gil_haf@ig.com.br

    • Sugerido como Resposta Heloisa Pires segunda-feira, 25 de junho de 2012 16:29
    • Marcado como Resposta Heloisa Pires quarta-feira, 27 de junho de 2012 11:52
    sexta-feira, 15 de junho de 2012 23:38

Todas as Respostas

  • Olá Inácio, boa noite!

    Deixa eu te perguntar uma coisa. Independente do problema acima, você sabe fazer uma Procedure ou mesmo 

    uma Triggers ? Tem conhecimento sobre isso ?


    Gilberto Herminio Analista de Desenvolvimento de Sistemas Mogi das Cruzes-SP desenvolvedor.ti@r7.com / gil_haf@ig.com.br

    sexta-feira, 15 de junho de 2012 01:01
  • Olá Gilberto_Mogi, então é a primeira vez que vou fazer um Trigger e uma Procedure em um banco de dados, apenas li e vi alguns exemplos de código, tentei fazer a 1º Trigger chamando uma Procedure, porém não funcionou.....


    Gostaria apenas de uma ajuda, cm um exemplo dentro do contexto deste trabalho, sei que quando eu fizer um Insert ou Delete na tabela Exemplares_Locados, deve haver um Trigger que vai disparar a Procedure para dar baixa, ou adicionar mais um no campo quantidade_disponivel_locacao da tabela Filme.

    sexta-feira, 15 de junho de 2012 04:03
  • Vamos lá...

    // TRIGGERS

    Create Trigger NomeTrigger                                   // CRIA A TRIGGER

                On schema.NomeTabela                            // ASSOCIADA A TABELA....

                AFTER INSERT                                            // APÓS HAVER QUALQUER INSERT NESTA TABELA

                AS PRINT 'HOUVE UM INSERT NA TABELA'  // IMPRIME NA TELA "....."

       


    Gilberto Herminio Analista de Desenvolvimento de Sistemas Mogi das Cruzes-SP desenvolvedor.ti@r7.com / gil_haf@ig.com.br

    • Sugerido como Resposta Heloisa Pires segunda-feira, 25 de junho de 2012 16:29
    • Marcado como Resposta Heloisa Pires quarta-feira, 27 de junho de 2012 11:52
    sexta-feira, 15 de junho de 2012 23:31
  • PROCEDURE...

    CREATE PROCEDURE MINHA_PROC                                     ///CRIA A PROCEDURE DE NOME MINHA_PROC

                 @NOME VARCHAR(30)                                            //DECLARA A VARIAVEL QUE IRA RECEBER O PARAMETRO 

                 AS SELECT * FROM SCHEMA.NOMETABELA            // AÇÃO A SER APLICADA

                 WHERE NOMECLIENTE=@NOME                           // CONDIÇÃO DESTA AÇÃO

    ....minha_proc 'BAR DA MARIA'         /// CHAMANDO A PROCEDURE


    Gilberto Herminio Analista de Desenvolvimento de Sistemas Mogi das Cruzes-SP desenvolvedor.ti@r7.com / gil_haf@ig.com.br

    • Sugerido como Resposta Heloisa Pires segunda-feira, 25 de junho de 2012 16:29
    • Marcado como Resposta Heloisa Pires quarta-feira, 27 de junho de 2012 11:52
    sexta-feira, 15 de junho de 2012 23:38