A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.

Apresentações semelhantes


Apresentação em tema: "1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva."— Transcrição da apresentação:

1 1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva

2 2 Visões Uma visão é um objeto do SQL Server utilizado para dar nome a uma query. Os comandos que podem ser Utilizados dentro do código de criação de uma visão são: Join Union Group By com função de totalização subquery

3 3 Visões As visões podem ser usadas para diferentes propósitos: Restringir o uso de colunas e/ou linhas específicas de tabelas – isto é, para controlar o acesso a uma parte específica de uma ou mais tabelas. Para ocultar os detalhes de consultas complicadas Para restringir valores inseridos e atualizados a certas faixas

4 4 Visões Sintaxe CREATE VIEW Nome_da_view [WITH ENCRYPTION | WITH SCHEMABINDING] AS Select [WITH CHECK OPTION]

5 5 Visões Considere a estrutura de tabelas abaixo: PAI Cod_Pai Nome_Pai FILHO Cod_Filho Cod_Pai Nome_Filho Sexo_Filho NOTAS Num_Lanc Cod_Filho Nota_Filho 1 * 1 1

6 6 Visões SELECT Pai.Nome_Pai, Filho.Nome_Filho, Nota.Nota_Filho FROM Pai, Filho, Nota WHERE Pai.Cod_Pai = Filho.Cod_Pai AND Filho.Cod_Filho = Nota.Cod_Filho CREATE VIEW v_PaiFilhoNota AS SELECT Pai.Nome_Pai, Filho.Nome_Filho, Nota.Nota_Filho FROM Pai, Filho, Nota WHERE Pai.Cod_Pai = Filho.Cod_Pai AND Filho.Cod_Filho = Nota.Cod_Filho

7 7 Visões Lendo os dados pela visão Select * from v_PaiFilhoNota Nota: essa visão não ocupa espaço do seu disco, porque ela é internamente, um select.

8 8 Visões Criando campo de idade na tabela de funcionario alter table funcionario add Idade_func int null update funcionario set idade_func = cod_func * 10 + 10

9 9 Visões Ocultando linhas Para impedir que seus usuários acessem dados, por exemplo, dos funcionários cuja idade é mais de 40 anos, basta colocar uma cláusula Where, filtrando essas linhas no select dentro da visão CREATE VIEW v_Func AS SELECT Cod_Func, Idade_Func, Nome_Func FROM Funcionario WHERE Idade_Func <= 40

10 10 Visões Ocultando colunas Suponha que você queira liberar o acesso aos dados da tabela funcionário, mas não quer liberar o acesso aos dados da coluna Salário: ALTER VIEW v_Func AS SELECT Cod_Func, Idade_Func, Nome_Func FROM Funcionario

11 11 Visões Depois disso é só liberar o acesso aos dados através da visão Exec SP_AddLogin ‘JCUNHA’, ’123’ Use Banco Exec SP_GrantDBAccess JCUNHA –cria conta de usuário GRANT SELECT ON V_FUNC TO JCUNHA – Atribui permissão SELECT * FROM V_Func

12 12 Visões Inserindo, Alterando e Excluindo dados por meio de uma visão Por exemplo, suponha que você deseja inserir mais um funcionário na tabela Funcionario por meio da visão V_Func. Para realizar esta tarefa, você deve escrever o seguinte comando: INSERT V_FUNC VALUES (8, 25, 'Jairo Aparecido')

13 13 Visões Inserindo, Alterando e Excluindo dados por meio de uma visão Se você quisesse alterar dados da tabela Funcionário por meio da visão, deve escrever este comando: UPDATE V_FUNC SET Idade_Func = Idade_Func + 1 WHERE Cod_Func = 5

14 14 Visões Inserindo, Alterando e Excluindo dados por meio de uma visão Se precisasse excluir dados da tabela Funcionário por meio da visão, deve escrever este comando: DELETE V_FUNC WHERE Cod_Func = 5

15 15 Visões A cláusula With Check Option Se você quiser que as operações realizadas com os dados da tabela Funcionário por meio da visão V_Func obedeçam à cláusula “WHERE Idade_Func <= 30”, ao código de criação dessa visão acrescente a cláusula With Check Option: CREATE VIEW V_Func2 AS SELECT Cod_Func, Idade_Func, Nome_Func FROM Funcionario WHERE Idade_Func <= 40 With Check Option

16 16 Visões A Cláusula With Check Option Em seguida, tente executar os comandos seguintes e, veja o que acontece. /*Tentando inserir um funcionario inválido */ INSERT V_FUNC2 VALUES(7, 45, 'Fábio') /*Tentando alterar a idade do funcionário 1 que tem mais de 40 anos */ UPDATE V_FUNC2 SET Idade_Func = Idade_Func + 1 WHERE Cod_Func = 5 /*Tentando alterar a idade para esta ultrapassar 40 anos */ UPDATE V_FUNC2 SET Idade_Func = Idade_Func + 5 WHERE Cod_Func = 3

17 17 Visões A cláusula With Encryption Quando você cria uma visão, algumas informações sobre ela são registradas nas tabelas do sistema: O nome da visão é registrado na tabela sysobjects. Os comandos de criação da visão são registrados na tabela do sistema syscomments. Qualquer usuário que tenha acesso às tabelas do sistema conseguirá ler o código de criação das suas visões.

18 18 Visões A cláusula With Encryption Execute os seguintes comandos para ver os códigos-fonte das visões: SELECT TEXT FROM SysComments WHERE Id in (SELECT ID from sysobjects where Name like 'V_Func%') SELECT TEXT FROM SysComments WHERE Id= (SELECT ID from sysobjects where Name = ‘V_PaiFilhoNota’)

19 19 Visões A cláusula With Encryption Se você quiser, pode criptografar o código de criação de suas visões com a cláusula With Encryption: CREATE VIEW V_FUNC3 WITH ENCRYPTION AS SELECT Cod_Func, Idade_Func, Sum(Sal_Func) AS Salario FROM Funcionario Group By Cod_Func, Idade_Func

20 20 Visões A cláusula With Schemabinding Esta cláusula indica que os objetos (tables e visões) referenciados dentro da visão não podem ter sua estrutura alterada e não podem ser eliminados. CREATE VIEW V_FUNC4 WITH SCHEMABINDING AS SELECT Cod_Func, Idade_Func, Nome_Func FROM dbo.Funcionario WHERE Idade_Func <= 30

21 21 Visões visão de visão Se for necessário, você pode criar uma visão que filtre dados de outra visão. Mas avalie bem a necessidade de criar visões aninhadas, porque esta prática pode deixar essa parte do seu sistema com problemas de performance. /* Primeira visão */ CREATE VIEW V_FUNC_UM AS SELECT Cod_Func, Nome_Func, Idade_Func, Nasc_Func FROM Funcionario /* Segunda visão */ CREATE VIEW V_FUNC_DOIS AS SELECT Nome_Func FROM V_FUNC_UM WHERE Idade_Func <=30

22 22 Visões Junções envolvendo Visões Visões podem ser utilizadas em junções. Para testar vamos criar a tabela de Regiao com os campos Regiao e Regiao_Descricao, populando-o com as regiões 1 (Norte) e 2 (Sul). /* Criando tabela de Regiao */ CREATE TABLE Nacionalidade( Nacionalidade [int] NOT NULL, Nacionalidade_Descricao [varchar](50) NULL) Insert Into Nacionalidade values (1, 'Brasil') Insert Into Nacionalidade values (2, 'Portugal') Insert Into Nacionalidade values (3, 'Argentina') Insert Into Nacionalidade values (4, 'Uruguai') /* Criando a visão */ CREATE VIEW V_FUNC5 AS SELECT Cod_Func, Idade_Func, Nome_Func, Nasc_Func FROM Funcionario WHERE Idade_Func <= 40

23 23 Visões Junções envolvendo Visões Visões podem ser utilizadas em junções. /* Realizando junção envolvendo uma tabela e uma visão*/ SELECT V_Func5.Cod_Func, V_Func5.Nome_Func, V_Func5.Nasc_Func, Nacionalidade.Nacionalidade_Descricao FROM V_Func5 INNER JOIN Nacionalidade ON V_Func5.Nasc_Func = Nacionalidade.Nacionalidade


Carregar ppt "1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva."

Apresentações semelhantes


Anúncios Google