A linguagem PL/pgSQL do PostgreSQL oferece várias funcionalidades, entre as quais se destacam o uso de cursores e loops.

Cursores

Um cursor é uma estrutura de controle de banco de dados que permite a manipulação de linhas retornadas por uma consulta SELECT. O cursor permite que as linhas sejam manipuladas uma a uma, o que pode ser útil em situações que exigem o tratamento individual de cada linha de resultado.

Exemplo de Cursor

Vamos considerar uma tabela ‘funcionarios’, que contém informações sobre os funcionários de uma empresa.

CREATE TABLE funcionarios (
    id serial PRIMARY KEY,
    nome VARCHAR (100),
    salario NUMERIC (10, 2)
);

INSERT INTO funcionarios (nome, salario)
VALUES ('Pedro', 2000.00), ('Ana', 3000.00), ('João', 2500.00);

Agora, vamos escrever um bloco de código PL/pgSQL que use um cursor para percorrer todas as linhas da tabela ‘funcionarios’ e imprimir o nome e salário de cada funcionário.

DO $$
DECLARE 
    cur CURSOR FOR SELECT nome, salario FROM funcionarios;
    rec RECORD;
BEGIN
    OPEN cur;

    LOOP
        FETCH NEXT FROM cur INTO rec;
        EXIT WHEN NOT FOUND;
        RAISE NOTICE 'Nome: %, Salário: %', rec.nome, rec.salario;
    END LOOP;

    CLOSE cur;
END $$;

Loops

Loops são estruturas de controle que permitem a execução repetida de um bloco de código.

Exemplo de Loop

Vamos considerar uma tabela ‘produtos’, que contém informações sobre os produtos de uma loja.

CREATE TABLE produtos (
    id serial PRIMARY KEY,
    nome VARCHAR (100),
    preco NUMERIC (10, 2)
);

INSERT INTO produtos (nome, preco)
VALUES ('Produto A', 20.00), ('Produto B', 30.00), ('Produto C', 25.00);

Agora, vamos escrever um bloco de código PL/pgSQL que use um loop FOR para percorrer todas as linhas da tabela ‘produtos’ e aumentar o preço de cada produto em 10%.

DO $$
DECLARE 
    rec produtos%ROWTYPE;
BEGIN
    FOR rec IN SELECT * FROM produtos
    LOOP
        UPDATE produtos SET preco = preco * 1.10 WHERE id = rec.id;
    END LOOP;
END $$;

Vantagens e Desvantagens

Vantagens:

  1. Controle Preciso: Cursores e loops permitem um controle muito preciso sobre o processamento de linhas, permitindo manipular cada linha individualmente.
  2. Flexibilidade: Os cursores podem ser usados para implementar lógicas complexas que seriam difíceis ou impossíveis de implementar usando apenas SQL.
  3. Performance: Em alguns casos, o uso de cursores pode ser mais eficiente do que a execução de múltiplas consultas SQL.

Desvantagens:

  1. Complexidade: Cursores e loops podem tornar o código mais complexo e difícil de entender.
  2. Performance: Em alguns casos, o uso de cursores e loops pode ser menos eficiente do que a execução de uma única consulta SQL bem otimizada.

Esperamos que esses exemplos tenham ajudado a entender como usar cursores e loops no PL/pgSQL. Lembre-se, a escolha de quando e como usar essas funcionalidades depende do problema específico que você está tentando resolver.

Sobre o autor

Pós graduado em Gestão de Projetos em Tecnologia da Informação pela UNIASSELVI.
Esposo e Pai, curto atividades ao ar livre (Bike, SUP, Natação, Caminhar, Brincar no campo)

Atua com Banco de Dados Oracle desde de 2007. Atualmente é DBA Senior na FLUIDATA Serviços em Banco de dados (www.fluidata.com.br)

Principais atividade Banco de dados:

Implementação, migração, gerenciamento e suporte a produtos Oracle (8i, 9i, 10g, 11g, 12c, 18c, 19c RAC), multiplataforma;
Implementação, migração, gerenciamento e suporte a produtos Microsoft SQL Server (2008 - 2019);
Implementação, migração, gerenciamento e suporte a produtos PostgreSQL (9.3 - 14);
Monitoramento de ambientes 24×7;
Backup e Recovery;
Performance e Tuning;
Alta disponibilidade (HA);
EM database/grid/cloud control;
Conversão de databases;
Standby database / Oracle Data Guard;

Certificações:

Oracle Cloud Infrastructure 2019 Certified Architect AssociateOracle Cloud Infrastructure 2019 Certified Architect Associate
Oracle Database 12c Administrator Certified ProfessionalOracle Database 12c Administrator Certified Professional
Exadata Database Machine Models X2-2 and X2-8 Technology Support SpecialistExadata Database Machine Models X2-2 and X2-8 Technology Support Specialist
Oracle Database 11g Support SpecialistOracle Database 11g Support Specialist
OCP 11g - Oracle Certified Professional AdministratorOCP 11g - Oracle Certified Professional Administrator
OPN Certified Specialist 10g - PartnerNetwork Certified SpecialistOPN Certified Specialist 10g - PartnerNetwork Certified Specialist
Oracle Database 10g Real Applications Clusters AdministratorCertified ExpertOracle Database 10g Real Applications Clusters AdministratorCertified Expert
Oracle Database 10g: Managing Oracle on Linux Certified ExpertOracle Database 10g: Managing Oracle on Linux Certified Expert
OCP 10g - Oracle Certified Professional AdministratorOCP 10g - Oracle Certified Professional Administrator

Principais atividades DEVOPS:

PHP
ASP.net
C#
Docker
Golang
C++
Delphi
Python
HTML5
JavaScript

Você também pode gostar: