Stored Procedures no PostgreSQL - PL/pgSQL e Sobrecarga de função

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (6)  (1)

Veja neste artigo a linguagem PL/pgSQL e o conceito de sobrecarga de função.

 

Olá pessoal,

 

continuando a escrever sobre stored procedures (esse foi o tema do último artigo), vamos abordar a linguagem PL/pgSQL e o conceito de sobrecarga de função.

 

A PL/pgSQL é uma linguagem estrutural estendida da SQL que tem por objetivo auxiliar as tarefas de programação no PostgreSQL. Ela incorpora à SQL características procedurais, como os benefícios e facilidades de controle de fluxo de programas que as melhores linguagens possuem. Por exemplo loops estruturados (for, while) e controle de decisão (if then else).

 

Dessa forma, programar em PL/pgSQL significa ter a disposição um ambiente procedural totalmente desenvolvido para aplicações de bancos de dados, beneficiando-se do controle transacional inerente das aplicações deste tipo.

 

Estrutura da linguagem:

 

A PL/pgSQL é estruturada em blocos, assim, todo o texto de definição de uma função precisa estar em um bloco. Os blocos possuem a seguinte sintaxe:

 

[<<label>>]

[DECLARE

         declarações]

BEGIN

         conteúdo 1;

         conteúdo 2;

         conteúdo n;

END;

 

DECLARE é a área para declaração de variáveis. As variáveis declaradas nessa sessão são inicializadas recebendo seus valores default sempre que existe uma entrada nesse bloco. Como na maior parte das linguagens existentes, na PL/pgSQL, variáveis com o mesmo nome possuem o seu escopo definido para o bloco imediatamente posterior à sua declaração.

 

Exemplo:

Create function mostra_valor() returns integer as

$$Declare

         valor integer := 30;

Begin

         Raise notice 'O valor da variável aqui é %', valor; --Valor será igual a 30

 

         --Sub bloco

         Declare

                   valor integer := 50;

         Begin

                   Raise notice 'O valor da variável aqui é %', valor; --Valor será igual a 50

         End;

 

         Raise notice 'O valor da variável aqui é %', valor; --Valor será novamente igual a 30

         return valor;

end;

$$ language 'plpgsql';

 

Crie a função do exemplo acima no psql. E após isso execute o comando "select mostra_valor();"

 

O resultado deve ser como o abaixo.


12-09-2007pic01.JPG 

 

Cada declaração e conteúdo dentro de um bloco é terminado por um ";"

 

Sobrecarga de função.

 

O conceito de sobrecarga de função na PL/pgSQL é o mesmo encontrado nas linguagens de programação orientadas a objeto. Abaixo um exemplo bem simples que ilustra esse conceito.

 

Imagine uma função soma.

 

Create function soma(num1 integer, num2 integer) returns integer as

$$

Declare

         resultado integer := 0;

Begin

         resultado := num1 + num2;

         return resultado;

End;

$$ language ‘plpgsql’;

 

Essa é uma função soma que recebe dois números inteiros. Mas e se o usuário passar dois dados do tipo caracter ao invés de números, qual seria o comportamento da minha função? Ai é que entra o conceito de sobrecarga de função. O PostgreSQL me permite ter uma função com o mesmo nome, mas com uma assinatura diferente. A assinatura é formada pelo nome + os parâmetros recebidos pela função. Por isso é que para remover uma função nós temos que utilizar o comando drop function + a assinatura da função e não somente o nome da função.

 

Para resolvermos o problema acima basta criarmos uma função soma da seguinte forma:

Create function soma(num1 text, num2 text) returns char as

$$

Declare

         resultado text;

Begin

         resultado := num1 || num2; --- || é o caracter para concatenação.

         return resultado;

End;

$$ language 'plpgsql';

 

Dessa forma, teríamos duas funções “soma”, uma que recebe dois inteiros e devolve o resultado da soma dos dois e outra que recebe dois caracteres e retorna a concatenação desses caracteres. O usuário só precisa saber que para concatenar caracteres ou somar valores basta chamar uma função soma.

 

12-09-2007pic02.JPG 

 

Baseado no tipo dos parâmetros passados, o PostgreSQL se encarrega de definir qual a função será utilizada.

 

Observações: Nas funções acima eu poderia ter suprimido a variável resultado e retornado os valores diretamente chamando “return num1 + num2;”. A intenção foi a de reforçar o conceito da declaração de variável.

 

O exemplo é bem simples o que quero mostrar é o conceito.

 

Grande abraço e até a próxima se Deus quiser.

 

Hesley Py

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?