Pular para o conteúdo principal

Questão de Banco de Dados — PL/SQL e Outras Extensões SQL — FUNDATEC 2023

Banco de DadosPL/SQL e Outras Extensões SQL
Código
qa537599
Banca
FUNDATEC
Órgão
COMUSA
Ano
2023
Cargo
Ana Sist ( )
Assinale a alternativa que apresenta uma forma adequada, na linguagem PL/pgSQL, de selecionar dados do banco de dados e atribuí-los a uma variável.
  1. Atake count(*) as qtd_filmes from filme;
  2. Bselect count(*) set qtd_filmes from filme;
  3. Cselect count(*) into qtd_filmes from filme;
  4. Dset count(*) to qtd_filmes from filme;
  5. Eset qtd_filmes = count(*) from filme;
Revelar gabarito e comentário

GabaritoC — select count(*) into qtd_filmes from filme;

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”.

PL/pgSQL: atribuição de resultado de consulta a variável

Gabarito: letra C. Na linguagem PL/pgSQL (extensão procedural do PostgreSQL), a forma correta de selecionar dados e atribuí-los a uma variável é usando a cláusula INTO logo após a lista de colunas do SELECT, como em SELECT count(*) INTO qtd_filmes FROM filme;. As demais alternativas usam palavras-chave inexistentes (take, set, to) ou uma sintaxe que não pertence ao comando SELECT.

A linguagem PL/pgSQL é a linguagem procedural do PostgreSQL, um SGBD objeto-relacional de código aberto. Ela estende o SQL padrão com construções de programação, como variáveis, estruturas de controle (IF, CASE, LOOP) e tratamento de exceções. Um bloco PL/pgSQL típico tem a estrutura DECLARE (opcional, para declarar variáveis), BEGIN (obrigatório, onde ficam os comandos executáveis) e END. É dentro da seção executável que usamos o SELECT ... INTO para capturar o resultado de uma consulta em uma variável.

A sintaxe fundamental é: SELECT expressão [,...] INTO variável [,...] FROM tabela [WHERE ...];. O INTO é a palavra-chave que faz a ponte entre o resultado da consulta e a variável declarada. Por exemplo, se declararmos qtd_filmes INTEGER;, o comando SELECT count(*) INTO qtd_filmes FROM filme; executará a contagem de registros da tabela filme e armazenará o valor inteiro resultante na variável qtd_filmes. É importante notar que, se a consulta retornar mais de uma linha ou nenhuma linha, o comportamento padrão é gerar uma exceção (TOO_MANY_ROWS ou NO_DATA_FOUND), a menos que se use INTO STRICT ou se trate a exceção.

A confusão que a banca explora aqui é misturar a sintaxe de atribuição de variáveis de outras linguagens (como SET do SQL padrão ou := de atribuição direta) com a sintaxe do SELECT. No PL/pgSQL, a atribuição direta de um valor a uma variável usa := (ex.: qtd_filmes := 10;), mas quando o valor vem de uma consulta ao banco, o INTO é obrigatório dentro do SELECT. As alternativas erradas usam take, set e to como se fossem palavras-chave do comando, o que não existe na sintaxe do PL/pgSQL.

Guarde o critério decisivo: para selecionar dados do banco e atribuir a uma variável em PL/pgSQL, a estrutura é sempre SELECT ... INTO ... FROM .... É exatamente essa estrutura que separa a alternativa correta das demais.

  1. 1SELECT expressão
  2. 2INTO variável
  3. 3FROM tabela
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A palavra take não existe na sintaxe do SQL ou do PL/pgSQL. O comando SELECT não usa take para iniciar uma consulta; ele usa diretamente a lista de colunas ou expressões. Além disso, falta a cláusula INTO para atribuir o resultado a uma variável.

Alternativa B — ❌ Incorreta

A palavra set não é usada dentro do comando SELECT para atribuição. No PL/pgSQL, SET é usado para configurar parâmetros de sessão (ex.: SET search_path TO ...), não para atribuir o resultado de uma consulta a uma variável. A forma correta seria SELECT count(*) INTO qtd_filmes FROM filme;.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta é a sintaxe exata do PL/pgSQL: SELECT count(*) INTO qtd_filmes FROM filme;. A cláusula INTO é a responsável por atribuir o valor retornado pela função de agregação count(*) à variável qtd_filmes. É a forma padrão e documentada de capturar o resultado de uma consulta em uma variável na linguagem procedural do PostgreSQL.

Alternativa D — ❌ Incorreta

A palavra set não inicia um comando de seleção de dados, e to não é uma palavra-chave válida para atribuição nesse contexto. A estrutura set ... to ... from não existe no PL/pgSQL para consultas. A atribuição de resultado de consulta exige o SELECT ... INTO.

Alternativa E — ❌ Incorreta

A sintaxe set qtd_filmes = count(*) from filme; mistura a atribuição direta (:= ou =) com uma consulta, mas não usa o comando SELECT. No PL/pgSQL, para obter um valor do banco, é obrigatório usar SELECT ... INTO. A atribuição direta qtd_filmes := valor; só funciona com valores já disponíveis em memória, não com consultas.

NÃO CAIA NESSA!

A banca tenta confundir a sintaxe de atribuição de variáveis de outras linguagens (como SET do SQL padrão ou = de atribuição) com a do PL/pgSQL. No PL/pgSQL, quando o valor vem de uma consulta, o INTO dentro do SELECT é obrigatório — não existe SELECT ... SET nem SELECT ... TO. Memorize a estrutura SELECT ... INTO ... FROM e você elimina essas pegadinhas na hora.

PEGA ESSA DICA!

Para fixar, compare as duas formas de atribuição no PL/pgSQL: (1) atribuição direta de valor em memória: var := expressão;; (2) atribuição a partir de consulta ao banco: SELECT expressão INTO var FROM ...;. A presença do FROM indica que há consulta, e aí o INTO é indispensável.

Gabarito: letra C

Link permanente: /questoes/qa537599