Ir para o conteúdo

5.3. Linguagem PL/pgSQL

A Linguagem PL/pgSQL é usada no PostgreSQL para criar funções e procedimentos armazenados. Ela combina a sintaxe SQL com recursos adicionais para programação procedural, como variáveis e estruturas de controle. Com a PL/pgSQL, é possível escrever lógica de programação complexa, armazenar valores temporários em variáveis e manipular dados usando instruções SQL.

Essa linguagem permite estender o PostgreSQL além das consultas simples de SQL, adicionando recursos de programação procedural. Ao utilizar a PL/pgSQL, os desenvolvedores podem criar funções e procedimentos personalizados para implementar lógica de negócios específica no banco de dados, tornando-o mais poderoso e flexível.

A PL/pgSQL é uma ferramenta poderosa para criar soluções personalizadas no PostgreSQL, permitindo a criação de funções avançadas e procedimentos armazenados. Com ela, é possível implementar lógica complexa e automatizar tarefas dentro do banco de dados.

Variáveis em PL/pgSQL

As variáveis em PL/pgSQL são usadas para armazenar valores temporários durante a execução de funções e procedimentos armazenados. Elas podem ser declaradas e atribuídas valores dentro do bloco de código PL/pgSQL. As variáveis podem ser de diferentes tipos de dados, como INTEGER, NUMERIC, VARCHAR, BOOLEAN, entre outros.

Aqui está um exemplo de declaração e atribuição de valores a variáveis em PL/pgSQL:

DECLARE
    <nome_variavel> <tipo_dado>;
BEGIN
    <nome_variavel> := valor;
    -- Resto do código...
END;

No exemplo acima, <nome_variavel> é o nome da variável, <tipo_dado> é o tipo de dado que a variável irá armazenar e valor é o valor atribuído à variável.

** Estruturas de Controle em PL/pgSQL

As estruturas de controle em PL/pgSQL permitem tomar decisões e repetir a execução de um bloco de código com base em condições específicas. Algumas das principais estruturas de controle disponíveis são:

IF-THEN-ELSE

A estrutura IF-THEN-ELSE permite executar um bloco de código se uma condição for verdadeira e outro bloco de código se a condição for falsa. Aqui está um exemplo:

IF condicao THEN
    -- Bloco de código se a condição for verdadeira
ELSE
    -- Bloco de código se a condição for falsa
END IF;

FOR LOOP

A estrutura FOR LOOP permite executar repetidamente um bloco de código um número específico de vezes. Aqui está um exemplo:

FOR contador IN [valor_inicial..valor_final] LOOP
    -- Bloco de código a ser repetido
END LOOP;

WHILE LOOP

A estrutura WHILE LOOP permite executar repetidamente um bloco de código enquanto uma condição for verdadeira. Aqui está um exemplo:

WHILE condicao LOOP
    -- Bloco de código a ser repetido
END LOOP;

CASE

A estrutura CASE permite tomar decisões com base em uma ou mais condições. Aqui está um exemplo:

CASE
    WHEN condicao1 THEN
        -- Bloco de código se a condicao1 for verdadeira
    WHEN condicao2 THEN
        -- Bloco de código se a condicao2 for verdadeira
    ELSE
        -- Bloco de código se nenhuma das condições anteriores for verdadeira
END CASE;

Essas são apenas algumas das estruturas de controle disponíveis em PL/pgSQL. Existem outras estruturas e recursos que podem ser utilizados para criar lógica de programação mais complexa dentro do PostgreSQL.

Cada estrutura de controle permite criar lógica de programação mais avançada, permitindo tomar decisões, repetir blocos de código e manipular dados de forma mais eficiente e flexível.

Declaração e Uso de Parâmetros em Funções PL/pgSQL

Além do uso de variáveis internas, as funções em PL/pgSQL também podem receber parâmetros. Os parâmetros são valores passados para a função durante sua chamada e podem ser utilizados dentro do bloco de código para realizar operações específicas.

Declaração de Parâmetros

A declaração de parâmetros em funções PL/pgSQL é feita na lista de parâmetros da declaração da função. Cada parâmetro é definido com um nome e um tipo de dado correspondente. Aqui está um exemplo de declaração de função com parâmetros:

CREATE FUNCTION nome_funcao(parametro1 tipo1, parametro2 tipo2, ...) RETURNS tipo_retorno AS $$
DECLARE
    -- Variáveis internas
BEGIN
    -- Código da função
END;
$$ LANGUAGE plpgsql;

Uso de Parâmetros

Após declarar os parâmetros na lista de parâmetros da função, é possível utilizá-los dentro do bloco de código da função. Os parâmetros podem ser referenciados como variáveis dentro do código e utilizados em expressões e instruções SQL.

Aqui está um exemplo de como utilizar parâmetros em uma função PL/pgSQL:

CREATE FUNCTION calcular_valor_total(preco_unitario numeric, quantidade integer) RETURNS numeric AS $$
DECLARE
    valor_total numeric;
BEGIN
    valor_total := preco_unitario * quantidade;

    RETURN valor_total;
END;
$$ LANGUAGE plpgsql;

Nesse exemplo, a função "calcular_valor_total" recebe dois parâmetros: "preco_unitario" do tipo numeric e "quantidade" do tipo integer. Dentro do bloco de código, os parâmetros são utilizados para realizar o cálculo do valor total multiplicando o preço unitário pela quantidade. O resultado é armazenado na variável "valor_total" e, em seguida, retornado como resultado da função.

Ao chamar a função "calcular_valor_total", os argumentos correspondentes aos parâmetros devem ser passados na mesma ordem em que foram declarados:

SELECT calcular_valor_total(10.50, 5);

Isso retornará o valor total calculado pela função com os argumentos passados.

O uso de parâmetros em funções PL/pgSQL permite que as funções sejam mais flexíveis e reutilizáveis, uma vez que podem ser adaptadas para diferentes cenários ao receberem valores diferentes durante sua chamada. Isso proporciona uma maior modularidade e possibilita a criação de funções mais genéricas e versáteis.

Tratamento de Exceções e a Manipulação de Cursores em PL/pgSQL

A PL/pgSQL também suporta recursos avançados, como tratamento de exceções e manipulação de cursores. Esses recursos permitem lidar com situações excepcionais e percorrer conjuntos de resultados retornados por consultas.

O tratamento de exceções permite lidar com erros e situações inesperadas durante a execução de uma função em PL/pgSQL. É possível capturar e tratar erros específicos ou genéricos, fornecendo uma lógica personalizada para lidar com essas situações.

A manipulação de cursores é útil quando precisamos percorrer um conjunto de registros em um resultado de uma consulta SQL. Os cursores permitem que você acesse e manipule os dados um a um, em vez de retornar o resultado completo de uma só vez.

É importante mencionar que, embora a PL/pgSQL seja a linguagem procedural padrão do PostgreSQL, o banco de dados também suporta outras linguagens, como SQL simples, Python, Perl e muitas outras. Cada linguagem tem suas próprias características e recursos, e a escolha da linguagem depende das necessidades e preferências do desenvolvedor.

Ao utilizar a Linguagem PL/pgSQL, você pode criar funções e procedimentos armazenados personalizados para implementar lógica de negócios específica dentro do PostgreSQL. Isso oferece flexibilidade e poder para personalizar o comportamento do banco de dados de acordo com suas necessidades.

Na medida em que avançarmos nos tópicos sobre Funções e Procedimentos Armazenados, exploraremos mais recursos da Linguagem PL/pgSQL e como utilizá-los para criar lógica de programação avançada dentro do PostgreSQL.

Agora que você já sabe um pouco sobre a Linguagem PL/pgSQL, aconselhamos que você aprimore estes conhecimentos através das atividades que preparamo pra você, para isso clique aqui.