Linguagem PL/SQL PostgreSQL – Introdução e primeiros passos

A linguagem PL/SQL é uma linguagem procedural utilizada na criação de funções de diversos SGBD, como Oracle, SQL Server, PostgreSQL etc., porém em cada um destes SGBD possuem suas particularidades, entretando a sua essência não se altera, então uma função no PostgreSQL é facilmente adaptável a um banco Oracle.
Utilizaremos aqui o PL/PgSQL que é a implementação da PL/SQL do PostgreSQL.

Uma vantagem de se utilizar linguagem PL/SQL é reduzir o overhead de rede com o envio de informações desnecessárias e também overhead de processamento, pois toda a regra de negócio está sendo tratada diretamente em banco, sem necessidade de estar trocando informações constantemente entre aplicação e banco.
Isso é extremamente útil quando se trabalha com um sistema mobile que se comunica direto com o banco(apesar de não ser usual) e também com terminais burros onde a capacidade de processamento é limitada.
Outra vantagem é que a centralização da regra de negócio, então é possível fazer aplicações em diversas linguagens, Delphi, Java, Android, C e para finalidades diferentes.
Exemplo: Um sistema contabil que é escrito por um controle de vendas e um de folha de pagamentos.
Se o sistema contabil possuir uma funções especificas, o controle de vendas e folha de pagamentos não precisam saber da regra de negócio, nem mesmo implementar no código partes do contabil.

Mas chega de papo, e vamos para a ação.

Declaração

– rótulo — (nome da função e seus parametros)
DECLARE
– variáveis –
BEGIN
– comandos –
END;

Exemplo:

[sourcecode language="sql"]
CREATE OR REPLACE FUNCTION helloWord(nome text) RETURNS text AS $$
DECLARE
BEGIN
RETURN ‘Olá Mundo! Olá ‘ || nome;
END;
$$ LANGUAGE plpgsql;
[/sourcecode]

Explicação rápida:
Ao contrário das funções padrões de C, Java e etc, é escrito primeiro o nome da variavel e depois o seu tipo.

RETURNS indica o tipo de retorno, é essencial prestar atenção no tipo de retorno que está sendo mandado!

|| -> É o operador de concatenação de texto

Para executar:

SELECT helloWord(‘David’);

O resultado será:

helloword
———–
Olá Mundo! Olá David
(1 registro)

Observações:

Pode ser que seu banco de dados ainda não esteja com a linguagem plpgsql ativa. Caso ele retorne um erro dizendo: “Language plpgsql not exists”, execute o seguinte comando:
CREATE LANGUAGE plpgsql;

$$ -> é apenas um delimitador, sem um delimitador, o interpretador não saberia aonde termina sua função exatamente.

Tendo isso como molde, fica fácil pra aprender.

Atribuição de variáveis

A declaração de variaveis acontece logo depois de “DECLARE” e a atribuição de valores para variáveis é dada através do operador “:=

Exemplo:

[sourcecode language="sql"]
CREATE OR REPLACE FUNCTION helloWord(nome text) RETURNS text AS $$
DECLARE
meunome text;
BEGIN
meunome := ‘Pedreiro do Software’;
RETURN ‘Olá Mundo! Olá ‘ || nome || ‘!Eu sou o ‘ || meunome;
END;
$$ LANGUAGE plpgsql;
[/sourcecode]

Retorno:

SELECT helloWord(‘David’);

helloword
—————————————————-
Olá Mundo! Olá David!Eu sou o Pedreiro do Software
(1 registro)

Estruturas Condicionais

IF

IF condição THEN
– código –
END IF;

IF – ELSE

IF condição THEN
– código –
ELSE
– código –
END IF;

IF – ELSIF – ELSE

IF condição THEN
– código –
ELSIF condição THEN
– código –
ELSE
– código –
END IF;

Exemplo:

[sourcecode language="sql"]
CREATE OR REPLACE FUNCTION saudacao(nome text, hora integer) RETURNS text AS $$
DECLARE
BEGIN
IF hora < 12 THEN
RETURN ‘Bom Dia ‘ || nome;
ELSIF hora > 12 THEN
RETURN ‘Boa Tarde ‘ || nome;
ELSE
RETURN ‘É hora do almoço ‘ || nome;
END IF;
END;
$$ LANGUAGE plpgsql;
[/sourcecode]

Executando:

SELECT saudacao(‘David’,12);
saudacao
————————
É hora do almoço David
(1 registro)

Estrutura de Repetição

WHILE

WHILE condição LOOP
– código –
END LOOP;

Exemplo:

[sourcecode language="sql"]
variavel := 0;

WHILE variavel < 100 LOOP

variavel := variavel + 1;

END LOOP;
[/sourcecode]

FOR:

FOR variável IN início..fim LOOP
– código –
END LOOP;

Exemplo:

[sourcecode language="sql"]
FOR i IN 1..10 LOOP
INSERT INTO tabela VALUES(i);
END LOOP;
[/sourcecode]

RETURNING … INTO

Para retornar o resultado de uma consulta em variável simples (veremos como retornar resultados mais complexos em um próximo post) , é necessário usar um comando “RETURNING … INTO”.
Considerar a tabela:

[sourcecode language="sql"]
CREATE TABLE tabela(
cod serial,
nome text,
texto text
);
[/sourcecode]
[sourcecode language="sql"]
CREATE OR REPLACE FUNCTION inserirSaudacao(varnome text, hora integer) RETURNS text AS $$
DECLARE
codigo integer;
saudacao text;
BEGIN
IF hora < 12 THEN
saudacao := ‘Bom Dia ‘ || varnome;
ELSIF hora > 12 THEN
saudacao := ‘Boa Tarde ‘ || varnome;
ELSE
saudacao := ‘É hora do almoço ‘ || varnome;
END IF;

INSERT INTO tabela(nome,texto) VALUES(varnome,saudacao) RETURNING cod INTO codigo;

RETURN codigo;

END;
$$ LANGUAGE plpgsql;
[/sourcecode]

Executando:

SELECT inserirSaudacao(‘David’,12);
inserirsaudacao
—————–
2
(1 registro)

Detalhe, tome cuidado com nomes de campos com variáveis, podem dar dores de cabeça tremendas!

Este foi um pequeno resumo inicial sobre a Linguagem Pl/SQL existe muito mais a se aprofundar e realizarei isso em próximos artigos, porém qualquer dúvida, fiquem a vontade para deixar nos comentários!

6 thoughts on “Linguagem PL/SQL PostgreSQL – Introdução e primeiros passos

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>