O que é PL/pgSQL?

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).

Relacionado: Curso de SQL

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:

DECLARE

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.

Resultado do  comando select mostra_valor()
Resultado do comando select mostra_valor()

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.

Registro de Teste

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

Relacionado: Curso de PostgreSQL

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.

Links Úteis

  • Instalando o ACBr:
    Aqui você verá um tutorial completo de como instalar o ACBr mais recente no Delphi. Será apresentado o passo a passo, desde o download do site, passando por todas as telas do instalador até a verificação dos novos componentes que surgirão no Delphi.
  • JavaScript indexOf(): encontrando a posição de um caractere ou string:
    Em alguns casos, precisamos saber se existe algum caractere ou substring em uma string atribuída a uma variável. A partir da resposta obtida podemos tomar diferentes decisões de acordo com a lógica de negócio da aplicação.
  • Um bate-papo sobre Docker:
    Docker é uma plataforma que simplifica desde a codificação até a implantação de um programa. Curioso para saber mais sobre tudo isso? Assista nesse DevCast um bate papo sobre o Docker.

Saiba mais sobre PostgreSQL ;)

  • Guia Completo de PostgreSQL:
    Neste guia de consulta você encontrará diversos conteúdos que podem ser usados ao longo dos seus estudos sobre o banco de dados PostgreSQL. Consulte este guia para aprender mais sobre a administração e uso desse SGBD.
  • Guia Completo de SQL:
    Neste Guia de Referência você encontrará todo o conteúdo que precisa para aprender sobre a SQL, linguagem de consulta estruturada utilizada por programadores e DBAs para a execução de consultas e comandos nos principais SGBDs do mercado.
  • Banco de Dados para Programadores:
    Neste guia você encontrará os principais conteúdos que você precisa estudar, como desenvolvedor, para trabalhar com bancos de dados.
  • PostgreSQL: deixando seu banco de dados seguro e rápido:
    Este artigo traz uma abordagem prática, contextualizando problemas de performance e segurança, abordando soluções cotidianas que visam resolver os principais problemas durante a configuração do banco de dados.