Questão de Banco de Dados — PL/SQL e Outras Extensões SQL — FUNDATEC 2023
Banco de Dados›PL/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.
Atake count(*) as qtd_filmes from filme;
Bselect count(*) set qtd_filmes from filme;
Cselect count(*) into qtd_filmes from filme;
Dset count(*) to qtd_filmes from filme;
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.
1SELECT expressão
2INTO variável
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.