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

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

2/6/2016 José Antônio da Cunha - CEFET - RN1 Programação de Banco de Dados Funções.

Apresentações semelhantes


Apresentação em tema: "2/6/2016 José Antônio da Cunha - CEFET - RN1 Programação de Banco de Dados Funções."— Transcrição da apresentação:

1 2/6/2016 José Antônio da Cunha - CEFET - RN1 Programação de Banco de Dados Funções

2 2/6/2016 José Antônio da Cunha - CEFET - RN2 Funções O que é uma função É um tipo de programa, criado no Servidor SQL Server, dentro de um database específico, que tem como principal objetivo retornar um valor ou um conjunto de valores para um usuário ou para outra função, para store procedure ou aplicação.

3 2/6/2016 José Antônio da Cunha - CEFET - RN3 Funções Regras para a utilização de User Defined Functions(UDFs) 1.Uma função definida pelo usuário pode receber parâmetros de entrada. 2.Os parâmetros de entrada de uma função não podem ser do datatype timestamp, cursor ou table. 3.Uma função definida pelo usuário não aceita parâmetros de saída (parâmetro output). 4.Uma função retorna um valor escalar ou os dados de uma tabela.

4 2/6/2016 José Antônio da Cunha - CEFET - RN4 Funções Regras para a utilização de User Defined Functions(UDFs) 5.Dentro de uma UDF você não pode executar os comandos INSERT, UPDATE e DELETE. 6.Os comandos INSERT, UPDATE e DELETE podem ser utilizados para manipular dados de variáveis de memória do tipo tabela (table). 7.Para que um usuário possa executar uma UDF, ele deve ter permissão de SELECT nela.

5 2/6/2016 José Antônio da Cunha - CEFET - RN5 Funções Regras para a utilização de User Defined Functions(UDFs) 8.Para executar uma função, você deve utilizar o comando SELECT e o nome qualificado por duas partes, ou seja, deve utilizar o nome do proprietário da função antes do nome dela para executá-la. 9.As UDFs não podem executar as funções determinísticas internas do SQL Server (Funções Built-in).

6 2/6/2016 José Antônio da Cunha - CEFET - RN6 Funções Funções determinísticas FunçãoSignificado @@ERRORÉ uma variável global, também chamada de função, que retorna o erro ocorrido. @@IDENTITYÉ uma variável global, também chamada de função, que contém o último valor incrementado por uma propriedade identity em uma sessão. @@ROWCOUNTÉ uma variável global, também chamada de função, que contém o número de linhas de uma tabela afetadas pelo último comando SQL na sessão. @@CONNECTIONSRetorna o número de conexões ou de tentativas de conexões feitas no SQL Server desde a última vez que o SQL Server foi inicializado. @@TRANCOUNTRetorna o número de transações abertas na conexão corrente.

7 2/6/2016 José Antônio da Cunha - CEFET - RN7 Funções Funções determinísticas @@TOTAL_READRetorna o número total de leituras feitas pelo SQL Server desde o último startup. @@TOTAL_WRITERetorna o número total de gravações feitas pelo SQL Server desde o último startup. APP_NAME()Retorna o nome da aplicação da sessão corrente. CURRENT_TIMESTAMPRetorna a data e a hora corrente do sistema. Equivalente a Getdate(). CURRENT_USER()Retorna o nome do usuário corrente. Equivalente à função User_Name() ou a User. DATENAME()Retorna o nome de uma determinada parte de uma data enviada como parâmetro por essa função. GETANSINULL()Retorna a nulabilidade default para o database na sessão. GETDATE()Retorna a data e a hora do sistema.

8 2/6/2016 José Antônio da Cunha - CEFET - RN8 Funções Funções determinísticas @@IDENTITYRetorna o último valor incrementado em um identity em uma sessão. NEWID()Gera um valor único do datatype unique identifier. PERMISSIONSRetorna um valor que indica as permissões do usuário corrente. RAND()Gera um número randômico. SESSION_USERRetorna o nome do usuário corrente. STATS_DATERetorna a data em que a estatística de um determinado índice foi atualizado pela última vez. SYSTEM_USERRetorna o login do usuário corrente. TEXTPTRRetorna um ponteiro para as colunas text, ntext ou image para ser utilizado nos comandos READTEXT, WRITETEXT e UPDATETEXT. TEXTVALIDVerifica a validade de um ponteiro para as colunas text, ntext ou image. USER_NAMERetorna o nome do usuário corrente.

9 2/6/2016 José Antônio da Cunha - CEFET - RN9 Funções Tipos de User Defined Functions (UDF) Você pode criar três tipos de funções: Funções escalares; Funções in-line: contêm apenas um comando SELECT para retornar os dados de uma tabela; Funções que contêm vários comandos e retornam dados de uma tabela.

10 2/6/2016 José Antônio da Cunha - CEFET - RN10 Funções Funções Escalares Uma função escalar é semelhante a uma função interna do SQL Server (Built_in Function). Elas podem ou não receber parâmetros de entrada e retornar apenas um único valor.

11 2/6/2016 José Antônio da Cunha - CEFET - RN11 Funções Funções Escalares - Sintaxe Create FUNCTION [Proprietário_da_função].Nome_da_Função ([{@parametro [AS] datatype_escalar [=default ] } [,...n]]) RETURNS [WITH [ [,]...n] ] [AS] BEGIN Corpo da Função RETURN Valor_escalar END ::= { ENCRYPTION | SCHEMABINDING }

12 2/6/2016 José Antônio da Cunha - CEFET - RN12 Funções Exemplo de Função Escalar A função seguinte tem como objetivo calcular a área de um triângulo mediante os valores recebidos pelos parâmetros de entrada @base e @altura. Create FUNCTION F_AreaTriangulo (@base smallint, @altura smallint) RETURNS int AS BEGIN RETURN ( (@base * @altura) / 2 ) END ** Para executar a função ** SELECT dbo.F_AreaTriangulo(5,30)

13 2/6/2016 José Antônio da Cunha - CEFET - RN13 Funções Exemplo de Função Escalar – outro exemplo A função seguinte tem como objetivo calcular a área de uma circunferência mediante valores recebido pelo parâmetros de entrada @raio. Create FUNCTION F_AreaCirculo (@raio int) RETURNS Bigint AS BEGIN DECLARE @area Bigint SET @area = PI() * POWER(@raio,2) RETURN @area END

14 2/6/2016 José Antônio da Cunha - CEFET - RN14 Funções Funções In-line que Retornam Dados de uma Tabela Create FUNCTION [Proprietário_da_função].Nome_da_Função ([{@parametro [AS] datatype_escalar [=default ] } [,...n]]) RETURNS TABLE [WITH [ [,]...n] [AS] RETURN [ ( ] Comando SELECT [ ) ]

15 2/6/2016 José Antônio da Cunha - CEFET - RN15 Funções Exemplo De acordo com a tabela Funcionário e seus dados apresentados em seguida, a função F_DataCadastro() recebe uma data como parâmetro e retorna, da tabela Funcionário, todos os funcionários que foram cadastrados nessa data. Cod_FuncNome_FuncSexo_FuncSal_FuncData_FuncNum_Regiao 1Manda ChuvaM500001/01/981 2ChuchuM300001/01/991 3BacanaM200001/01/002 4EspetoM250001/01/012 5BatatinhaF400001/01/023

16 2/6/2016 José Antônio da Cunha - CEFET - RN16 Funções Comandos para criar as tabelas Funcionario e Regiao CREATE TABLE [Funcionario]( [Cod_Func] [int] NOT NULL, [Nome_Func] [varchar](100) NULL, [Sexo_Func] [char](1) NULL, [Sal_Func] [float] NULL, [Data_Func] [datetime] NULL, [Num_Regiao] [int] NULL ) CREATE TABLE [Regiao]( [Num_Regiao] [int] NOT NULL, [Regiao] [varchar](50) NULL )

17 2/6/2016 José Antônio da Cunha - CEFET - RN17 Funções Comandos para popular as tabelas Funcionario e Regiao insert into funcionario values(1,'Manda Chuva','M',5000, '1998-01-01 00:00:00.000',1) insert into funcionario values(2,'Chuchu','M',3000, '1999-01-01 00:00:00.000',1) insert into funcionario values(3,'Bacana','M',2000, '2000-01-01 00:00:00.000',2) insert into funcionario values(4,'Espeto','M',2500, '2001-01-01 00:00:00.000',2) insert into funcionario values(5,'Batatinha','F',4000, '2002-01-01 00:00:00.000',3) insert into Regiao values (1,'Norte') insert into Regiao values (2,'Sul') insert into Regiao values (3,'Leste') insert into Regiao values (4,'Oeste')

18 2/6/2016 José Antônio da Cunha - CEFET - RN18 Funções Exemplo – solução Create FUNCTION F_DataCadastro (@data smallDatetime) RETURNS TABLE AS RETURN (SELECT * FROM dbo.Funcionario WHERE Data_Func = @data) ** Para executar a função F_DataCadastro ** SELECT * FROM F_DataCadastro(’01/01/98’) ** Fazendo um JOIN com o resultado da função F_DataCadastro ** select F.*, Regiao.Regiao from F_DataCadastro('01/01/98') as F, Regiao where F.Num_Regiao = Regiao.Num_Regiao

19 2/6/2016 José Antônio da Cunha - CEFET - RN19 Funções Funções que contêm vários comandos e Retornam Dados de uma Tabela Create FUNCTION [Proprietário_da_função].Nome_da_Função ([{@parametro [AS] datatype_escalar [=default ] } [,...n]]) RETURNS @Nome_Variável_Retornada TABLE [WITH [ [,]...n] [AS] BEGIN Corpo_da_Função RETURN END ::= {ENCRYPTION | SCHEMABINDING } ::= ( { Definição_da_Coluna | Constraint } [,...n ])

20 2/6/2016 José Antônio da Cunha - CEFET - RN20 Funções Exemplo: a tabela “Usuario” a seguir é utilizada no próximo exemplo. User_NameNum_Regiao Dbo10 Ana1 Maria2 José3 Rita4 João1

21 2/6/2016 José Antônio da Cunha - CEFET - RN21 Funções Exemplo: a tabela “Usuario” a seguir é utilizada no próximo exemplo. CREATE TABLE [dbo].[Usuario]( [User_Name] [varchar](50) NULL, [Num_Regiao] [int] NULL ) insert into usuario values ('george',1) insert into usuario values ('dbo',10) insert into usuario values ('ana',2)

22 2/6/2016 José Antônio da Cunha - CEFET - RN22 Funções A função seguinte obtém o código da região do usuário corrente da tabela Usuario apresentada anteriormente e testa. Se o número da região for 10, significa que o usuário é o dbo (database owner) e pode ler todos os dados da tabela Funcionário. Se não, o usuário corrente, que deve existir na tabela Usuario, pode ler dados da tabela funcionario, mas apenas da região da qual ele recebeu permissão por meio do Número da região. Se o usuário corrente não estiver na tabela Usuario, a função retorna apenas as colunas da tabela Funcionario, mas sem valor algum.

23 2/6/2016 José Antônio da Cunha - CEFET - RN23 Funções Create FUNCTION F_Func2 ( ) RETURNS @Func Table ( Nome_Funcvarchar(100) not null, Sal_Funcdecimal(10,2) not null ) AS BEGIN DECLARE @numreg tinyint SELECT @numreg = Num_Regiao FROM Usuario WHERE User_name = User IF @numreg IS NOT NULL AND @numreg <> 10 INSERT @Func SELECT Nome_Func, Sal_Func FROM Funcionario WHERE Num_regiao = @numreg ELSE IF @numreg = 10 INSERT @Func SELECT Nome_Func, Sal_Func FROM Funcionario RETURN END

24 2/6/2016 José Antônio da Cunha - CEFET - RN24 Funções ** Código que executa a função *** SELECT * FROM dbo.F_Func2( ) Para testar a função, crie os usuários seguintes e atribua as permissões: Sp_addlogin 'Ana','abc123_' Sp_addlogin 'George','abc123_' Sp_GrantDBAccess 'Ana' Sp_GrantDBAccess 'George' Grant SELECT ON F_Func2 TO Ana Grant SELECT ON F_Func2 TO George

25 2/6/2016 José Antônio da Cunha - CEFET - RN25 Funções Em seguida, conecte-se como Ana, depois como Maria, José, Rita e João e execute a função F_Func2() da seguinte maneira: SELECT * FROM dbo.F_Func2 () É possível fazer JOIN com a tabela de resultado, da mesma forma apresentada nas funções in-line SELECT F.*, Funcionario.Data_Func FROM F_Func2() as F, Funcionario WHERE F.Nome_Func = Funcionario.Nome_Func

26 2/6/2016 José Antônio da Cunha - CEFET - RN26 Funções A opção “With Encryption” Use esta cláusula para criptografar o “código-fonte” das suas funções na tabela syscomments, da mesma forma como acontece com as views.

27 2/6/2016 José Antônio da Cunha - CEFET - RN27 Funções A opção “With SchemaBinding” Esta cláusula indica que os objetos referenciados dentro da função não podem ter sua estrutura alterada e não podem ser eliminados. Esta cláusula pode ser colocada em uma função apenas se: As funções e views referenciadas pela função em questão também tiverem sido criadas com a cláusula WITH SCHEMABINDING; Os objetos utilizados pela função forem referenciados com o nome qualificado por duas partes; O usuário que criar a função deve ter permissão de REFERENCES em todos os objetos referenciados pela função.

28 2/6/2016 José Antônio da Cunha - CEFET - RN28 Funções Observação: Para executar funções internas do sistema (Built_in) que retornam dados de uma tabela, você deve usar dois pontos antes do nome da função. Veja: SELECT * FROM ::fn_helpcollations()

29 2/6/2016 José Antônio da Cunha - CEFET - RN29 Funções Os comandos Create, Alter e Drop Function Como você observou anteriormente, para cria uma função utiliza-se o comando CREATE FUNCTION. Para alterar a estrutura de uma função sem perder as permissões já atribuídas aos usuários, você utiliza o comando ALTER FUNCTION e para eliminar uma função do database, utilize comando DROP FUNCTION. Fim


Carregar ppt "2/6/2016 José Antônio da Cunha - CEFET - RN1 Programação de Banco de Dados Funções."

Apresentações semelhantes


Anúncios Google