Notes - MIECT
Bases De Dados
Notes - MIECT
Bases De Dados
  • Bases de Dados
  • Introdução
    • Conceitos
    • Sistema de Gestão de Ficheiros (SGBD)
      • Vantagens e Desvantagens
      • Utilizadores
      • Dicionários
      • Interfaces (Aplicações)
      • Arquitetura ANSI/ SPARC
        • Independência dos Dados
      • Arquitetura Típica
    • Modelo de Base de Dados
      • Modelos NoSQL
      • Modelo Hierárquico
      • Modelo de Rede
  • Desenho de Base de Dados - Diagramas E/R
    • Desenho Base de Dados
    • Análise de Requisitos
    • Desenho Conceptual
    • Modelo Entidade/Relacionamento (E/R)
      • Entidade
      • Atributo
      • Relacionamento
        • Classificação
      • Restrições de Integridade
    • DER - Agregação
    • DER – Opções de Desenho
    • Generalização versus Especialização
      • Especialização
      • Generalização
    • Outras Notações DER
    • Casos de Estudo
      • Clínica Médica
      • Empresa
  • Modelo Relacional
    • Introdução
    • Conceitos
    • Relação
    • SuperChaves e Chaves Candidatas
    • Chave Primária
    • Restrições de Integridade
      • Regras de Codd
    • Conversão do DER em Modelo Relacional
      • Especialização
      • Agregação
      • Exemplo
  • Linguagem SQL - DDL
    • Linguagem SQL
    • Hierarquia de Objetos
    • Criar e Eliminar uma Base de Dados
    • Schema
    • Tipo de Dados
    • Definição de Domínio
    • Definição de Novo Tipo
    • Criar uma Tabela
    • Atributos
      • CHECK
      • PRIMARY KEY
      • UNIQUE
      • FOREIGN KEY
    • Tabela
    • Considerações Práticas
  • Álgebra Relacional
    • Operações Básicas
      • Seleção
      • Projeção
      • Encadeamento de Operações
      • Renomeação
      • União
      • Interseção
      • Diferença
      • Produto Cartesiano
      • Junção θ
      • Divisão
    • Operações Estendidas
      • Semi Join
      • Inner Vs. Outer Join
      • Outer Join
      • Agregação
    • Caso de Estudo
  • Linguagem SQL - DML
    • Projeção
    • Seleção
    • Inserção
    • Eliminação
    • Actualização
    • Renomeação
    • Queries
    • Operações com Conjuntos
      • Projeção
    • Renomeação
    • UNION
    • Produto Cartesiano
    • Junção de Relações
    • Queries
  • SQL DML - Consulta Simples
    • Operações com Conjuntos
    • Projeção
    • Seleção
    • Renomeação – Relação, Atributo e Aritmética
    • Reunião, Intersecção e Diferença
    • Produto Cartesiano
    • Junção de Relações
    • Junção
    • Queries
  • Consultas Avançadas
    • Tratamento dos NULL
    • NATURAL JOIN
    • OUTER JOIN
    • Encadeamento
    • Agregações
    • SubQueries
    • Pertença a Conjunto
    • Comparação de Conjuntos
    • EXISTS
    • UNIQUE
    • SubConsultas Não Correlacionadas
  • Linguagem SQL – View
    • View
    • Utilização
    • Query Modification
    • Alterar e Eliminar
    • Update de Dados
    • WITH CHECK OPTION
  • Normalização
    • Desenho de BD - Esquemas de Relação
    • Semântica dos atributos da relação
    • Redução dos NULLs nos tuplos
    • Junção de Relações baseada em PK e FK
    • Dependências Funcionais (DP)
    • Normalização
      • Primeira Forma Normal (1NF)
      • Segunda Forma Normal (2FN)
      • Terceira Forma Normal (3FN)
      • Boyce-Codd Normal Form (BCNF)
      • Ponto de Equilíbrio
      • 4FN e 5FN
      • Dependências de Junção
  • Indexação e Optimização
    • Introdução
    • Índices
      • Single-Level Ordered
      • Multilevel Index
    • Árvore de Pesquisa
    • SQL - Index
    • Seleção de Índices
      • Caso de Estudo
    • SQL Server - Indexing
    • SQL Server: Clustered index
    • SQL Server: Non-clustered index
    • B-Tree Page Split
    • Opções de Especialização
    • Heap vs Clustered Table
    • Escolha de um Clustered Index
    • Escolha de um Non-Clustered Index
    • B-Tree Tuning
    • Desfragmentação de Índices
  • SQL Programming
    • Script & Batch
    • Variáveis
    • PRINT
    • Instruções de Controlo de Fluxo
    • Tabelas Temporárias
    • Tabelas como Variáveis
    • Cursor
    • Stored Procedures
      • SQL Statement vs. Stored Procedure
      • Create
      • Update e Drop
      • Tipos
      • Execução
      • Parâmetros de Saída
      • Cifragem
    • T-SQL Error Handling
    • T-SQL RAISERROR
    • T-SQL: Try … Catch
    • User Defined Functions (UDF)
      • Tipos
    • Trigger
      • After
      • Instead of
      • Inserted e Deleted – Logical Tables
      • Colunas Alteradas
      • Limitações
      • Funcionalidades Úteis
  • Transações
    • Introdução
    • Transação – Operações de Leitura e Escrita
    • Transações em SQL Standard
    • Estado de uma Transação
    • Propriedades
  • Controlo de Concorrência
    • Transações
    • Escalonamento Concorrente
    • Métodos
  • Recuperação de Falhas
    • Introdução
    • Falhas de um SGBD
    • Escalonamento vs Recuperação de Falhas
    • Backups
    • Transactions Logs
    • Rollback – até que ponto?
    • Custos
  • SQL Server
    • Resumo da Sintaxe
    • Transações Encadeadas
    • Stored Procedures e Rollbacks
    • Transações
  • Aspectos de Segurança
    • Modelo de Segurança
    • Login e User
    • Segurança na Base de Dados
    • DB - Grant Access
    • Segurança dos Objetos da BD
    • Objetos
    • Stored Procedure
    • Cifragem de Atributos
    • SQL INJECTION
Powered by GitBook
On this page
  • Escalar
  • Sintaxe
  • Exemplos
  • Limitações
  • Inline Table-valued
  • Sintaxe
  • Exemplo
  • UDF Multi-statement Table-Valued
  • Sintaxe
  • Exemplo
  1. SQL Programming
  2. User Defined Functions (UDF)

Tipos

Escalar

Sintaxe

CREATE FUNCTION function_name
[@param_name data_type] [=default] [READONLY] [,...,n]
RETURN return_data_type
AS
T-SQL_statements(s)

Aceiram múltiplos parâmetros.

Retornam um único valor.

  • Instrução RETURN

Podem ser utilizados dentro de qualquer expressão T-SQL incluindo check constraint.

Exemplos

CREATE FUNCTION dbo.Revenue_Day (@Date datetime) RETURNS money
AS
BEGIN
    DECLARE @total money
    SELECT @total = sum(sali_Quantity * sali_price)
    FROM Sales_Orders s, Sales_Orders_Items si
    WHERE s.sal_number = si.sal_number and year(sal_date) = year(@Date)
        and month(sal_date) = month(@Date) and day(sal_date)= day(@Date)
    RETURN @total
END
GO
SELECT dbo.Revenue_Day(GETDATE())



CREATE FUNCTION dbo.fsMultiply (@A INT, @B INT = 3) RETURNS INT
AS
BEGIN
    RETURN @A * @B;
END;
GO
SELECT dbo.fsMultiply (3,4), dbo.fsMultiply (7, DEFAULT);
SELECT dbo.fsMultiply (3,4) * dbo.fsMultiply (7, DEFAULT);

Nota: O nome da schema (dbo) é obrigatório na invocação da UDF

Limitações

Determinísticas

  • Os mesmos parâmetros de entrada produzem o mesmo valor de retorno.

  • Não são permitidas funções não-determinísticas dentro das UDF.

    • newid,

    • rand(),

    • etc

Não são permitidos updates à base de dados ou invocação do comando DBCC.

Em termos de valor de retorno não permite:

  • BLOB (binary large object) - text, ntext, timestamp, image data- type, etc;

  • Table variables;

  • Cursores.

Não permite TRY...CATCH ou RAISERROR.

Recursividade limitada a 32 níveis.

Inline Table-valued

Sintaxe

CREATE FUNCTION function_name
[@param_name data_type] [= default] [ READONLY ][,...,n]
RETURNS TABLE
AS
T-SQL_statement {RETURN SELECT statement}

Similares a vistas

Ambas são wrapers para construções SELECT;

Tem as mais valias das vistas acrescido do facto de suportar parâmetros de entrada.

Exemplo

CREATE FUNCTION dbo.AveragePricebyItems (@price money = 0.0) RETURNS Table
AS
    RETURN (SELECT Ite_Description, Ite_Price
                FROM Items
                WHERE Ite_Price > @price)
GO
SELECT * FROM dbo.AveragePricebyItems (15.00)



CREATE FUNCTION dbo.ftPriceList (@Code CHAR(10) = Null, @PriceDate DateTime)
RETURNS Table
AS
            RETURN(SELECT Code, Price.Price
                        FROM dbo.Price JOIN dbo.Product AS P
                                    ON Price.ProductID = P.ProductID
                        WHERE EffectiveDate = (SELECT MAX(EffectiveDate)
                                                FROM dbo.Price
                                                WHERE ProductID = P.ProductID
                                                            AND EffectiveDate <= @PriceDate)
                                    AND (Code = @Code OR @Code IS NULL));
GO
SELECT * FROM dbo.ftPriceList(DEFAULT, ‘20020220’);

UDF Multi-statement Table-Valued

Sintaxe

CREATE FUNCTION function_name
[ @param_name data_type] [= default] [ READONLY ][,...,n]
RETURNS @return_variable TABLE <table_type_definition>
AS
T-SQL_statement

Combina a capacidade das funções escalares (conter código complexo) com a capacidade das inline table-valued (retornar um conjunto).

Cria uma table variable, introduz-lhe tuplos e retorna-a.

  • Tabela retornada pode ser utilizada num SELECT

Exemplo

CREATE FUNCTION dbo.AveragePricebyItems2 (@price money = 0.0) RETURNS @table TABLE (Description varchar(50) null, Price money null)
AS
    BEGIN
        INSERT @table SELECT Ite_Description, Ite_Price
            FROM Items WHERE Ite_Price > @price;
        RETURN;
    END;
GO
SELECT * FROM dbo.AveragePricebyItems2 (15.00);
SP
UDF

return - zero, single or multiple values

return - single value (scalar or table)

input/output param

input param

cannot use SELECT/ WHERE/ HAVING statement

can use SELECT/ WHERE/ HAVING statement

call SP – OK

call SP – NOK

exception handling - OK

exception handling - NOK

transactions – OK

transactions – NOK

PreviousUser Defined Functions (UDF)NextTrigger

Last updated 2 years ago