Questão de Banco de Dados — PL/SQL e Outras Extensões SQL — VUNESP 2023
Banco de Dados›PL/SQL e Outras Extensões SQL
Código
vu195551
Banca
VUNESP
Órgão
EPC
Ano
2023
Cargo
Ana ( )
Considere a seguinte tabela de um banco de dados relacional: Produto (ID_Prod, Nome, Estoque) Considere que previamente foi criada uma variável denominada item, do tipo caractere, assim como o atributo Nome. O comando do PL/SQL para atribuir a essa variável o nome do produto de ID igual a 200 é:
Aitem = SELECT Nome FROM Produto WHERE ID_Prod = 200;
BMAKE item AS SELECT Nome FROM Produto WHERE ID_Prod = 200;
CSELECT Nome INTO item FROM Produto WHERE ID_Prod = 200;
DMAKE Nome INTO item FROM Produto WHERE ID_Prod = 200;
EINCLUDE IN item Nome FROM Produto WHERE ID_Prod = 200;
Revelar gabarito e comentário▾
GabaritoC — SELECT Nome INTO item
FROM Produto
WHERE ID_Prod = 200;
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/SQL: atribuição de valor com SELECT INTO
Gabarito: letra C. No PL/SQL, a forma correta de atribuir a uma variável o valor de uma coluna retornada por uma consulta é a cláusula SELECT ... INTO, que captura o resultado da consulta e o armazena na variável indicada — exatamente o que a alternativa C faz. As demais alternativas usam comandos que não existem na sintaxe do PL/SQL (MAKE, INCLUDE IN) ou uma atribuição com = que não é válida para receber o resultado de um SELECT.
O PL/SQL é a extensão procedural da Oracle para o SQL. Ele permite que comandos SQL sejam embutidos em blocos de código com lógica de programação (variáveis, loops, condicionais, tratamento de exceções). A estrutura básica de um bloco PL/SQL é:
DECLARE
-- declaração de variáveis
BEGIN
-- comandos executáveis (incluindo SQL)
EXCEPTION
-- tratamento de exceções
END;
A questão pede justamente o comando que, dentro da seção executável (BEGIN), atribui a uma variável item (do tipo caractere, igual ao atributo Nome) o valor do nome do produto cujo ID_Prod é 200. A sintaxe correta para isso é o SELECT INTO:
SELECT Nome INTO item
FROM Produto
WHERE ID_Prod = 200;
Essa instrução executa a consulta e, se ela retornar exatamente uma linha, o valor da coluna Nome é copiado para a variável item. Se a consulta retornar mais de uma linha, ocorre a exceção TOO_MANY_ROWS; se não retornar nenhuma, ocorre NO_DATA_FOUND. Por isso, o SELECT INTO é usado quando se espera um único valor.
A pegadinha da banca está em confundir o SELECT INTO do PL/SQL com outras sintaxes que parecem plausíveis, mas não existem. O comando MAKE não faz parte do PL/SQL nem do SQL padrão. O INCLUDE IN também não existe. E a atribuição com = (alternativa A) é usada em outras linguagens, mas no PL/SQL a atribuição de variáveis é feita com := — e, mesmo assim, não é assim que se captura o resultado de uma consulta; para isso, usa-se o SELECT INTO.
É importante distinguir o SELECT INTO do PL/SQL do SELECT INTO do SQL Server. No SQL Server, SELECT ... INTO cria uma nova tabela a partir do resultado da consulta. No PL/SQL (Oracle), SELECT ... INTO atribui o resultado a uma variável. Essa diferença é clássica em provas.
Guarde a estrutura: SELECT <coluna> INTO <variável> FROM <tabela> WHERE <condição>; — é essa a sintaxe que resolve a questão.
1SELECT coluna
2INTO variável
3FROM tabela
4WHERE condição
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Usa item = SELECT ..., que não é uma sintaxe válida no PL/SQL. A atribuição de variáveis em PL/SQL é feita com o operador :=, e não com =. Além disso, para capturar o resultado de uma consulta em uma variável, é obrigatório usar o SELECT INTO, não uma atribuição direta.
Alternativa B — ❌ Incorreta
Usa MAKE item AS SELECT .... O comando MAKE não existe no PL/SQL nem no SQL padrão. Não há nenhuma instrução com essa palavra-chave para atribuição de valores.
Alternativa C — ✅ Correta ⟵ GABARITO
Usa a sintaxe correta do PL/SQL: SELECT Nome INTO item FROM Produto WHERE ID_Prod = 200;. O SELECT INTO executa a consulta e armazena o valor da coluna Nome na variável item, que é do mesmo tipo (caractere). É exatamente o que o enunciado pede.
Alternativa D — ❌ Incorreta
Usa MAKE Nome INTO item .... Além de usar o comando inexistente MAKE, a ordem está invertida: o correto é SELECT <coluna> INTO <variável>, não MAKE <coluna> INTO <variável>.
Alternativa E — ❌ Incorreta
Usa INCLUDE IN item Nome .... O comando INCLUDE IN não existe no PL/SQL. Não há nenhuma instrução com essa sintaxe para atribuição de valores.
NÃO CAIA NESSA!
A banca explora a confusão entre o SELECT INTO do PL/SQL (que atribui valor a uma variável) e o SELECT INTO do SQL Server (que cria uma nova tabela). Além disso, tenta induzir o candidato a aceitar comandos inventados como MAKE e INCLUDE IN, que não fazem parte da linguagem. Fique atento: no PL/SQL, a atribuição de variável é := e a captura de resultado de consulta é SELECT ... INTO.
PEGA ESSA DICA!
Para memorizar, lembre-se da estrutura: SELECT <coluna> INTO <variável> FROM <tabela> WHERE <condição>;. Essa é a forma de atribuir um valor único a uma variável no PL/SQL. Se a consulta retornar mais de uma linha, use SELECT ... BULK COLLECT INTO para coleções.