Pular para o conteúdo principal

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

Banco de DadosPL/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 é:
  1. Aitem = SELECT Nome FROM Produto WHERE ID_Prod = 200;
  2. BMAKE item AS SELECT Nome FROM Produto WHERE ID_Prod = 200;
  3. CSELECT Nome INTO item FROM Produto WHERE ID_Prod = 200;
  4. DMAKE Nome INTO item FROM Produto WHERE ID_Prod = 200;
  5. 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.

  1. 1SELECT coluna
  2. 2INTO variável
  3. 3FROM tabela
  4. 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.

Gabarito: letra C

Link permanente: /questoes/vu195551