Esse artigo faz parte da revista SQL Magazine edição 53. Clique aqui para ler todos os artigos desta edição

NG>SQL

UDFs e Funções Tabulares

Trabalhando com funções tabulares definidas pelo usuário

 

 

Recentemente apresentei um estudo sobre as funções escalares definidas pelo usuário. Funções escalares são aquelas que retornam um único valor como resultado. Vimos sua sintaxe, como usá-las e quais as vantagens que oferecem.

Porém, o padrão ANSI SQL prevê ainda outro tipo de função definida pelo usuário (UDF), que são as funções de tabela. UDFs tabulares são funções criadas pelo usuário que retornam uma tabela como resultado. Tais tabelas podem conter um ou mais campos, assim como um ou mais registros.

Como fazem parte do padrão ANSI SQL, elas existem na maioria dos sistemas gerenciadores de bancos de dados (SGBDs) disponíveis no mercado.

A seguir, vamos apresentar mais detalhes sobre como usá-las.

O que é UDF tabular

Uma função tabular recebe parâmetros e retorna uma tabela como resultado. No nosso caso, UDF tabular é uma função deste tipo que é definida pelo próprio usuário.

UDFs tabulares têm alguma semelhança com as visões (views), já que ambas retornam uma tabela virtual como resultado. De uma maneira simplista, podemos pensar que tanto elas como as visões trazem o resultado correspondente a uma declaração SELECT que faz parte do seu código. Mas as UDFs tabulares vão muito além disso:

1.      Aceitam o uso de parâmetros que definirão o resultado retornado;

2.      A sua lógica pode incluir laços (loops), testes de condição e até mesmo chamadas a outras funções.

 

Estas diferenças as tornam completamente distintas das visões. Mas aí surge outra dúvida. Os procedimentos armazenados (ou stored procedures) também aceitam parâmetros e também suportam os recursos de programação disponíveis na linguagem SQL.

Então, quando devemos usar a UDF tabular e quando usar o procedimento armazenado? Este é o tema para o próximo tópico.

Quando usar UDFs tabulares

As funções tabulares não são um recurso popular no universo dos bancos de dados. Nem mesmo a idéia de função tabular é algo intuitivo.

Existe muita confusão sobre quando usar uma UDF de tabela ao invés de um procedimento armazenado. A pergunta que sempre aparece é: quando devo usar um ao invés do outro?

A resposta depende do que você pretende fazer com a tabela resultante. Este assunto é tão discutido que mereceu um tópico específico na documentação de ajuda do SQL Server (veja lista de Links no final deste artigo).

UDFs oferecem duas vantagens marcantes sobre procedimentos armazenados, a saber:

1.      UDF tabular pode ser invocada dentro de uma declaração SQL; procedimentos armazenados não funcionam neste caso;

2.      UDF tabular pode ser invocada dentro de outra função, seja ela escalar ou tabular; novamente, os procedimentos armazenados não funcionam aqui.

 

Você pode considerar estes itens para apoiar sua decisão em utilizar ou não este recurso.

O SGBD estudado

Para este trabalho, usamos um banco de dados criado no SQL Server 2005. Portanto, os exemplos que apresentamos neste artigo usam a sintaxe adotada pelo Transact-SQL.

Devemos lembrar que UDFs são parte integrante do padrão ANSI SQL e são suportadas pela maioria dos SGBDs disponíveis no mercado. Porém, a sintaxe adotada para criação das funções varia ligeiramente.

Localizando as UDFs tabulares

No SQL Server 2005, toda UDF é vinculada ao banco de dados em que é criada. Dentro do Management Studio, elas são listadas junto de outros objetos programáveis do banco de dados, como procedimentos armazenados e gatilhos. Observe que o nó “Functions” se divide em vários outros nós, sendo um deles específico para as funções tabulares, como vemos na Figura 1 (“Table-valued Functions”).

 

Figura 1. Encontrando as UDFs dentro do Management Studio.

Criando UDFs tabulares

A sintaxe para criação de UDFs tabulares não é muito diferente daquela requerida para criação de UDFs escalares. A Listagem 1 apresenta um exemplo que cria uma função tabular para encontrar as duas raízes de uma equação de segundo grau. A sintaxe apresentada é chamada freqüentemente de sintaxe com declarações múltiplas.

 

Listagem 1. Criando uma função tabular

1 ...

Quer ler esse conteúdo completo? Tenha acesso completo