Pular para o conteúdo principal

Questão de Banco de Dados — PostgreSQL — CESGRANRIO 2024

Banco de DadosPostgreSQL
Código
cg057872
Banca
CESGRANRIO
Órgão
IPEA
Ano
2024
Cargo
TPP ( )
Considere que, em um banco de dados, há uma tabela com dados de indústrias, contendo os seguintes atributos:   INDUSTRIA (cnpj, razao-social, capital-social, qtd-alteracoes)   Nessa tabela, a chave primária é o atributo cnpj.   Foi criada a seguinte stored procedure, codificada segundo a sintaxe do PostgreSQL:   CREATE PROCEDURE atualiza_capital_social (id varchar(14), capital float) LANGUAGE plpgsql AS $$ DECLARE    industria_cadastrada BOOLEAN; BEGIN    SELECT TRUE INTO industria_cadastrada    FROM INDUSTRIA    WHERE cnpj = id;    IF industria_cadastrada THEN        UPDATE INDUSTRIA        SET             capital-social = capital,             qtd-alteracoes = qtd-alteracoes + 1        WHERE cnpj = id;        COMMIT;    END IF; END; $$;   Ao ser executada, essa procedure
  1. Aaltera o capital social de todas as indústrias.
  2. Bbusca as empresas com mais de uma alteração.
  3. Cregistra a quantidade de alterações realizadas em todas as indústrias.
  4. Dincrementa a quantidade de alterações de todas as indústrias de São Paulo.
  5. Eatualiza o capital social de uma indústria e registra quantas alterações foram realizadas nesse capital social.
Revelar gabarito e comentário

GabaritoE — atualiza o capital social de uma indústria e registra quantas alterações foram realizadas nesse capital social.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Stored Procedure em PostgreSQL: Atualização Condicional

Gabarito: letra E. A procedure atualiza_capital_social recebe um CNPJ e um novo valor de capital, verifica se a indústria existe e, em caso positivo, atualiza o capital social e incrementa o contador de alterações apenas para aquele registro específico — exatamente o que descreve a alternativa E. A lógica é condicionada pela variável industria_cadastrada, que só é verdadeira quando o SELECT encontra uma linha com o CNPJ informado.

O que a procedure faz, passo a passo: primeiro, ela declara uma variável booleana industria_cadastrada. Em seguida, executa um SELECT TRUE INTO industria_cadastrada FROM INDUSTRIA WHERE cnpj = id. Esse comando atribui TRUE à variável se existir pelo menos uma linha com aquele CNPJ; caso contrário, a variável fica NULL (que é tratado como falso no IF). Depois, o IF industria_cadastrada THEN só executa o bloco de atualização se a indústria foi encontrada. Dentro do bloco, o UPDATE altera o capital-social para o novo valor e soma 1 ao qtd-alteracoes, mas somente na linha onde cnpj = id. O COMMIT confirma a transação. Se o CNPJ não existir, nada é feito — a procedure termina sem alterar nenhum registro.

O ponto central é o WHERE cnpj = id no UPDATE: ele restringe a operação a uma única linha, a da indústria cujo CNPJ foi passado como parâmetro. Sem esse filtro, o UPDATE afetaria todas as linhas da tabela — mas não é o caso aqui. A variável industria_cadastrada funciona como uma guarda: ela impede que o UPDATE seja executado para um CNPJ inexistente, evitando uma atualização silenciosa de zero linhas (o que não seria um erro, mas também não faria nada).

A pegadinha que a banca explora é justamente a combinação entre a verificação condicional e o filtro por chave primária. Alternativas como "altera o capital social de todas as indústrias" ou "incrementa a quantidade de alterações de todas as indústrias" ignoram o WHERE cnpj = id, que limita o escopo a um único registro. Outras, como "busca as empresas com mais de uma alteração" ou "incrementa a quantidade de alterações de todas as indústrias de São Paulo", introduzem elementos que não existem na procedure — não há filtro por quantidade de alterações nem por localização geográfica.

Guarde o critério decisivo: a procedure opera sobre uma única indústria, identificada pelo CNPJ, e somente se ela existir. É essa combinação de condição (IF) e filtro (WHERE) que separa a alternativa correta das demais.

Alternativa A — ❌ Incorreta

Afirma que a procedure altera o capital social de todas as indústrias. Isso seria verdade se o UPDATE não tivesse cláusula WHERE, mas o comando é UPDATE INDUSTRIA SET ... WHERE cnpj = id, que restringe a atualização à linha cujo CNPJ é igual ao parâmetro id. A palavra "todas" é o erro: a operação é pontual, não massiva.

Alternativa B — ❌ Incorreta

Diz que a procedure "busca as empresas com mais de uma alteração". A procedure não faz nenhuma consulta com filtro por qtd-alteracoes — ela apenas verifica se o CNPJ existe (SELECT TRUE ... WHERE cnpj = id) e, se existir, atualiza o capital e incrementa o contador. Não há lógica de busca ou seleção baseada na quantidade de alterações.

Alternativa C — ❌ Incorreta

Afirma que a procedure "registra a quantidade de alterações realizadas em todas as indústrias". O incremento de qtd-alteracoes só ocorre para a indústria cujo CNPJ foi passado como parâmetro, e apenas se ela existir. Não há atualização em massa — o WHERE cnpj = id limita o efeito a uma única linha.

Alternativa D — ❌ Incorreta

Menciona "todas as indústrias de São Paulo". A procedure não possui nenhum filtro por localização geográfica — não há atributo de cidade, estado ou região na tabela INDUSTRIA nem na lógica da procedure. O único filtro é por CNPJ. Essa alternativa introduz um elemento completamente alheio ao código.

Alternativa E — ✅ Correta ⟵ GABARITO

Descreve com precisão o comportamento: a procedure atualiza o capital social de uma indústria (a identificada pelo CNPJ passado como parâmetro) e registra quantas alterações foram realizadas nesse capital, incrementando qtd-alteracoes em 1 a cada execução bem-sucedida. A condição IF industria_cadastrada garante que a atualização só ocorra se a indústria existir, e o WHERE cnpj = id restringe a operação a um único registro.

Gabarito: letra E

Link permanente: /questoes/cg057872