🎞️ Slides 📝 Material ← Módulo
Projeto 6 · Engenharia de Software Plano de Ensino

Aula 4 — Tópicos de BD: Stored Procedures e Functions

Plano operacional do dia: lógica encapsulada no banco com PL/pgSQL — quando levar regra para o banco, quando manter na aplicação, e como evitar que isso vire dívida técnica.

← Voltar ao Módulo

Identificação

Curso
Engenharia de Software
Módulo
Projeto 6 — SOA Mobile
Aula
4 de 10
Carga horária do dia
6h (2h + 2h + 2h)
Modalidade
Presencial · Metodologia ativa
Pré-aula
Autoestudo guiado

Resumo

A aula 4 trabalha o banco de dados como camada ativa do sistema. Diferenciamos stored procedures (executam ações, não retornam valor) de functions (retornam valor, podem aparecer em SELECT). Aprofundamos PL/pgSQL com variáveis, controle de fluxo, exceções e cursores. Discutimos quando faz sentido empurrar lógica para o banco — por desempenho, integridade ou contrato — e quando isso é dívida técnica esperando para acontecer.

O fechamento conecta procedures ao recomendador: cálculos pré-computados que ficam ao lado dos dados.

Objetivos de aprendizagem

  • OA-1Diferenciar stored procedures e functions, escolhendo a forma certa para cada caso.
  • OA-2Escrever PL/pgSQL com variáveis, controle de fluxo e tratamento de exceção.
  • OA-3Implementar procedure que encapsula uma operação de domínio do projeto.
  • OA-4Justificar trade-offs (lógica no banco vs. aplicação) com argumento de manutenibilidade.
  • OA-5Avaliar impacto de procedures sobre testabilidade, deploy e versionamento.
  • OA-6Reconhecer riscos de SQL injection em procedures e mitigações.

Pré-requisitos

  • SQL operacional do módulo 2: CRUD, JOIN, agregação.
  • PostgreSQL local instalado e acessível pela equipe.
  • Esquema do banco do projeto na develop.

Cronograma do dia

📚 Bloco 1 · Autoestudo

10h00 — 12h00

Estudo individual orientado pelo material da aula 4.

  • Leitura completa do Material da Aula 4 (procedures, functions, PL/pgSQL).
  • Listar 3 operações do projeto que poderiam virar procedure (mostrar com SELECT antes/depois).
  • Validar que CREATE FUNCTION roda no banco da equipe.
  • Caderno de bordo: dúvidas concretas sobre PL/pgSQL.

🎓 Bloco 2 · Instrução PE — Aula em metodologia ativa

14h00 — 16h00

Encontro síncrono com o professor especialista.

  • 14h00 — 14h15 · Daily.
  • 14h15 — 16h00 · Procedure vs. function, PL/pgSQL, debate de trade-offs.

🍴 Intervalo · Almoço

12h00 — 14h00

Janela livre.

🛠️ Bloco 3 · Desenvolvimento do projeto

16h00 — 18h00

Janela de trabalho da equipe.

  • Implementar 1 procedure e 1 function relevantes para o domínio do parceiro em db/procedures/.
  • Migrar para db/migrations/ com versionamento (Flyway ou similar).
  • Atualizar 1 ADR justificando a decisão de empurrar a lógica para o banco.
  • Abrir Merge Request feat(db): procedures e functions.

Detalhamento da instrução PE (14h00 — 16h00)

14h00
14h15

DailyDaily de abertura

Cada aluno apresenta em 1 minuto: 1 operação que viraria procedure / minha hipótese de quando vale a pena / dúvida concreta.

14h15
14h30

TalkProcedure × Function · Para que servem?

Exposição (12 min) com tabela comparativa e exemplos: function aparece em SELECT, procedure aparece em CALL. Demo de função simples retornando valor calculado.

14h30
14h55

CodingPL/pgSQL na prática

Live coding: function que retorna média de rating de um item. Pares replicam para 1 entidade do projeto.

14h55
15h20

CodingProcedure com transação · OUT params · exceção

Live coding de procedure que aplica regra de negócio (ex.: registrar interação + atualizar contador). Tratamento de exceção via EXCEPTION WHEN ... THEN.

15h20
15h40

AtivaTrade-offs · Banco vs. aplicação

Em equipes: cada equipe recebe um caso (recálculo pesado, integridade entre tabelas, regra muito instável) e decide onde colocar a lógica. Apresentação de 3 equipes — debate sobre testabilidade e deploy.

15h40
15h55

TalkRiscos · SQL injection e versionamento

Demo de injection via concatenação de string em procedure dinâmica e como mitigar com EXECUTE ... USING. Falamos rápido sobre gerenciar versões com migrations.

15h55
16h00

AtivaSíntese

Cada aluno escreve "a aula 4 me ensinou que...". Anuncia-se a entrega: 1 procedure + 1 function reais.

Estratégias de metodologia ativa

  • Decisão guiada por trade-off — cada equipe defende onde a lógica deve viver com argumento de manutenibilidade.
  • Live coding incremental — function simples → procedure com transação → tratamento de exceção, sem saltos conceituais.
  • Risco como conteúdo — SQL injection é demonstrada na sala antes de virar regra do baseline.
Princípio orientador

Procedure útil: encapsula consistência ou desempenho. Procedure ruim: esconde regra de negócio em lugar onde nenhum desenvolvedor da app vai pensar em procurar.

Recursos e ferramentas

CategoriaRecursoUso
Slidesslides/slide-lesson-4.htmlExposição na instrução PE
Materialmaterials/lesson-4-material.htmlAutoestudo
SGBDPostgreSQL 15+ com PL/pgSQLProcedures e functions
MigrationsFlyway, Liquibase ou node-pg-migrateVersionamento do banco
ClienteDBeaver ou psqlExecução e teste

Verificação de aprendizagem

  • CR-1Diferenciou em par procedure de function com exemplo certo para cada caso.
  • CR-2Replicou function de cálculo agregado contra a base do projeto.
  • CR-3Implementou procedure com transação e tratamento de exceção.
  • CR-4Defendeu em equipe a decisão de empurrar (ou não) lógica para o banco.
  • CR-5Abriu Merge Request feat(db): procedures e functions com migration versionada até as 18h00.
Critério mínimo

Aluno que sair às 18h sem 1 procedure + 1 function rodando + ADR atualizado está em débito técnico para a aula 5 (transações e triggers).

Conexão com a aula 5

A aula 5 amplia o tema com transações em profundidade (níveis de isolamento, deadlocks) e triggers (BEFORE/AFTER) para reagir a eventos do banco.

  • Procedures escritas hoje serão envolvidas em transações na aula 5.
  • Triggers podem chamar procedures — começamos a montar o quebra-cabeça.
Para o autoestudo da aula 5

Antes das 10h: ler material da aula 5, induzir um deadlock proposital com 2 transações e estudar os 4 níveis de isolamento.

Inteli Logo