Considere o banco de dados representado abaixo (a chave primária de cada tabela está em negrito e com o
caractere “#”).
#
#
#
#
#
#
1) Sabendo que um determinado usuário pode consultar o título e o preço de todos os livros cadastrados o
nome da editora e a descrição do assunto, crie uma VISÃO chamada LIVRO AUTOR1 adequada a este
usuário.
CREATE VIEW [LIVRO AUTOR1] AS
SELECT
TÍTULO, NOME, DESCRIÇÃO, PREÇO FROM LIVRO
LEFT JOIN EDITORA ON LIVRO.EDITORA=EDITORA.CÓDIGO
LEFT JOIN ASSUNTO ON LIVRO.ASSUNTO=ASSUNTO.SIGLA
2) Crie uma visão chamada LIVRO AUTOR2 adequada a um outro usuário que também pode ver todos os
livros cadastrados, mas não deve visualizar os livros cujo assunto ainda não foi indicado.
CREATE VIEW [LIVRO AUTOR2] AS
SELECT
TÍTULO, NOME, DESCRIÇÃO, PREÇO FROM LIVRO
LEFT JOIN EDITORA ON LIVRO.EDITORA=EDITORA.CÓDIGO
INNER JOIN ASSUNTO ON LIVRO.ASSUNTO=ASSUNTO.SIGLA
3) Considerando a tabela Livro, criar um procedimento armazenado chamado SP_Reajuste. O objetivo do
procedimento é atualizar o preço, conforme percentual de aumento e código de editora fornecidos como
parâmetros.
CREATE
AS
UPDATE
PROCEDURE
LIVRO
SET
SP_Reajuste
@TAXA
REAL,
@CODIGO
PREÇO=PREÇO + (PREÇO * @TAXA / 100)
INT
WHERE
EDITORA=@CODIGO
4) Escreva o comando necessário para um aumento de 15% nos livros da editora “Mirandela Editora”
usando o procedimento armazenado criado na questão anterior.
EXEC SP_Reajuste 15,1
5) Considerando o banco de dados do diagrama, crie uma trigger chamada TR_Bloq_Ins para impedir que
sejam feitas inclusões na tabela Editora.
Atenção: a trigger NÃO deve conter os comandos “begin” \ “end”.
CREATE TRIGGER TR_Bloq_Ins
ON
EDITORA
FOR INSERT
AS
IF EXISTS (SELECT * FROM INSERTED)
ROLLBACK
ELSE
COMMIT
6) Exclua a trigger criada no item anterior.
drop trigger tr_bloq_ins
7) Recriar a trigger do item 5. Agora, em caso de rollback, deve-se apresentar a mensagem “Não permitida
a inclusão”.
CREATE TRIGGER TR_Bloq_Ins2
ON
EDITORA FOR
IF EXISTS (SELECT * FROM INSERTED)
BEGIN
ROLLBACK
PRINT 'NAO PERMITIDA A INCLUSÃO'
END
ELSE
COMMIT
INSERT AS
8) Sabendo-se que a intercalação entre os comandos de duas ou mais transações pode produzir alguns
problemas, por que os SGBD implementam diferentes níveis de isolamento (permitindo a intercalação
citada)?
Para permitir concorrência, ou seja, execuções simultâneas. Evita que
transações tenham que, obrigatoriamente, esperar que outras terminem para
que uma delas inicie a execução (e as outras continuem aguardando na fila
até que a atual termine).
9) Quanto às visões, exemplifique uma situação onde seria útil a criação de uma visão em um
Banco de Dados.
PARA FACILITAR A TAREFA DE DAR ACESSO A USUÁRIOS QUE PRECISAM VER INFORMAÇÕES
ESPALHADAS EM VÁRIAS TABELAS. BASTA CRIAR A VISÃO QUE FAZ A JUNÇÃO DAS TABELAS E
DAR AO USUÁRIO O DIREITO DE ACESSO APENAS À VISÃO.
PERMITIR QUE OS PROGRAMADORES OU ADMINISTRADORES SE CONCENTEM APENAS NA
INFORMAÇÕES (COLUNAS E TABELAS) NECESSÁRIA À UMA ATIVIDADE, BASTA CRIAR UMA
VISÃO QUE MOSTRA O QUE SE DESEJA (PRECISA).
Download

Exercicio2013 gabaritox