Aprenda SQL: Funções definidas pelo usuário

Aprenda SQL: Funções definidas pelo usuário

The data model we'll use to explain user-defined functions
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Você pode criar vários objetos definidos pelo usuário em um banco de dados. Uma delas é definitivamente funções definidas pelo usuário. Quando usados ​​como pretendido, eles são uma ferramenta muito poderosa em bancos de dados. No artigo de hoje, veremos como criar, alterar e removê-los do banco de dados, bem como usá-los. Então, vamos mergulhar no assunto.

Objetos do SQL Server

Como mencionado na introdução, existem diferentes tipos de objetos que você pode criar no banco de dados. Além de
    tabelas e chaves, outros objetos conhecidos são procedimentos, gatilhos e visualizações. E, é claro, definido pelo usuário
    funções, que são o tópico de hoje. A idéia principal por trás dos objetos é armazená-los no banco de dados e evitar escrever o mesmo código repetidamente. Além disso, você pode controlar qual é a entrada e definir a estrutura / tipo de saída. E por último, mas não menos importante, você pode definir permissões para decidir quem poderá usá-las e de que maneira
    ele será capaz de fazer isso.

Descreveremos todos eles nos próximos artigos, mas neste artigo, focaremos apenas o definido pelo usuário
    funções.

O Modelo

Vamos nos lembrar do modelo que estamos usando nesta série de artigos.

O modelo de dados que usaremos para explicar funções definidas pelo usuário

Desta vez, não usaremos esse modelo tão extensivamente como antes, devido à natureza das funções que declararemos,
    mas também devido à complexidade das consultas que usaremos (elas serão muito mais simples). Embora nossas consultas sejam simples,
    não há razão para que você também não use funções definidas pelo usuário em consultas muito mais complexas.

Função definida pelo usuário CREATE / ALTER / DROP

Sempre que estiver trabalhando com objetos de banco de dados, você usará estes comandos – CREATE (novo), ALTER (existente) e DROP
    (existir). A sintaxe é algo como CREATE / ALTER / DROP

COMO. Isso difere um pouco em relação ao tipo de objeto e também se você estiver criando, modificando ou excluindo o objeto.

Leia Também  Parabéns. Vocês levantaram US $ 8.919 para Médicos Sem Fronteiras em março.

Para funções definidas pelo usuário, essas sintaxes têm a seguinte aparência:

A maioria das coisas deve ser bastante óbvia aqui. A função:

  • Toma parâmetros como entrada

  • Faz algo com esses valores de entrada (SQL afirmações). Tecnicamente, ele usará valores fornecidos como parâmetros
            e combine-os com outros valores (variáveis ​​locais) ou objetos de banco de dados e, em seguida, retorne o resultado desses
            combinações / cálculos

  • Retorna o resultado do cálculo (Valor de retorno) com o tipo definido anteriormente (DEVOLUÇÃO tipo de dados)

ALTER é muito semelhante a CREATE e simplesmente modifica a função existente. Para excluir uma função, usaremos
    instrução DROP FUNCTION e o nome dessa função.

  • Nota: Se trabalharmos com os procedimentos, usaremos CREATE PROCEDURE, ALTER PROCEDURE e DROP PROCEDURE.

Uma função simples definida pelo usuário

Chegou a hora de criarmos nossa primeira e bem simples função definida pelo usuário. Queremos listar todas as cidades e anotar se elas são leste ou oeste quando comparadas a Londres (longitude = 0). As cidades a leste de Londres terão resultados positivos
city.long valores, enquanto aqueles a oeste de Londres terão esse valor negativo.

Usaremos o seguinte código para criar a função:

A primeira coisa que devemos notar, depois de executar este comando, é que nossa função agora é visível quando expandimos
    “Funções com valor escalar” no “Pesquisador de objetos” (para o banco de dados em que criamos essa função).

Funções com valor escalar do Object Explorer

Nossa função usa um número como parâmetro. O valor de retorno deve ser do tipo CHAR (4). O valor inicial
    (variável @return_value) é inicialmente definido como ‘mesmo’. Se o parâmetro (variável @long) for maior que 0,
    estavam ‘leste’ de Londres, e se for menor que 0, estamos ‘Oeste’ de Londres. Observe que, no caso de
    @long foi 0, nenhum desses dois Ifs alterará o valor, portanto, manterá o valor inicial -> ‘mesmo’.

Essa é realmente uma função simples, mas é uma boa maneira de mostrar o que as funções podem fazer.

Vamos agora ver como podemos usar essa função dentro de uma consulta. Para conseguir isso, usaremos a seguinte seleção simples
    declaração:

O resultado é mostrado na figura abaixo.

Função de teste

Você pode perceber facilmente que chamamos a função três vezes na mesma seleção e a saída foi conforme o esperado. Na verdade, isso estava testando se nossa função está funcionando como esperado.

  • Nota: Você chamará uma função simplesmente usando seu nome e fornecendo os parâmetros necessários. Se a função for
            com base em valores, você poderá usar esta função em qualquer lugar em que usaria um número, string,
            etc.

Agora, usaremos essa função na consulta mais complexa:

Resultado da consulta SELECT

O importante a ser observado aqui é que usamos a função como uma “coluna” em nossa consulta de seleção. Nós passamos
    parâmetro (city.long da linha relacionada) e a função retornou um resultado do cálculo.
    Isso é ótimo porque evitamos escrever cálculos complexos em uma consulta selecionada e também podemos reutilizar isso
    funcionar mais tarde em qualquer outra consulta.

Uma função definida pelo usuário retornando a tabela

Vamos agora examinar uma função mais complexa. Desta vez queremos passar grandes como argumento e esperamos que a função retorne uma tabela de todas as cidades ‘leste’ a partir do parâmetro fornecido.

Criamos a seguinte função:

Você também pode ver a função listada na seção “Funções com valor de tabela” no “Pesquisador de objetos”.

Funções com valor de tabela do Object Explorer

Agora, vamos usar a função

Função definida pelo usuário usada na parte FROM da consulta SELECT

Você pode perceber que usamos a função como uma tabela (é uma função com valor de tabela, portanto isso parece bastante lógico
    🙂)

Uma ideia para implementar

Eu não vou fazer isso agora, mas apenas lançando uma ideia. Isso é possível de outras maneiras (GROUP_CONCAT ou simulá-lo), mas a função e os loops realmente ajudariam muito aqui. Então, o que queremos fazer é seguir –
    Anote uma função que, para uma determinada cidade.id, encontre todas as cidades a leste e oeste dessa cidade. A função
    retornará uma string como “leste: ; oeste: . Você deve usar um loop nesta função. Você pode pesquisar no Google ou aguardar
    nosso artigo relacionado a loops no SQL Server.

Conclusão

Funções definidas pelo usuário são uma ferramenta muito poderosa. Você deve usá-los quando tiver um cálculo que repetirá em todo o banco de dados. Por exemplo. calcular o imposto sobre produtos diferentes com base em regras predefinidas (que podem mudar ao longo do tempo) é um bom candidato para a função. Você coloca todas as regras lá, passa parâmetros para a função,
    e, como resultado, obtenha o número desejado. Mas, como em todo o resto, não os use demais.

Índice

Emil Drkusic
Últimas mensagens de Emil Drkusic (ver todos)

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br