Pular para o conteúdo principal

Questão de Banco de Dados — PL-SQL — FCC 2016

Banco de DadosPL-SQL
Código
fc029690
Banca
FCC
Órgão
PGE-MT
Ano
2016
Nível
Superior
Cargo
Analista - Analista de Sistemas
Um Analista de Sistemas que utiliza PL/SQL em um banco de dados Oracle afirma, corretamente, que
  1. Ase uma chamada recursiva a um procedure estiver dentro de um cursor FOR loop, cada cursor é aberto em cada chamada, podendo estourar o limite OPEN_LOOPS mas o mesmo não ocorre se o cursor estiver entre um OPEN e CLOSE.
  2. Bpodem ser utilizadas chamadas a subprogramas externos escritos em Java, embora haja a restrição de um Java stored procedure somente poder ser chamado de dentro de um package.
  3. Cum trigger pode ter dois estados: enabled ou disabled e, por default, é criado no estado enabled. Para criar um trigger no estado disabled deve-se usar a cláusula DISABLE na declaração CREATE TRIGGER.
  4. Dpackages podem ter duas partes: uma especificação e um corpo. A especificação define as queries para os cursores e o código dos subprogramas, já o corpo define a interface do package.
  5. Eem PL/SQL uma condição de erro é chamada exceção. As exceções são somente internas, geradas pelo run-time system. Todas possuem nomes predefinidos como DIVIDE_ZERO e ERROR_STORAGE.
Revelar gabarito e comentário

GabaritoC — um trigger pode ter dois estados: enabled ou disabled e, por default, é criado no estado enabled. Para criar um trigger no estado disabled deve-se usar a cláusula DISABLE na declaração CREATE TRIGGER.

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 – Triggers, Packages, Exceções

Gabarito: letra C. A alternativa C descreve corretamente os estados de um trigger (enabled/disabled) e a sintaxe para criá-lo desabilitado com a cláusula DISABLE, conforme a documentação do Oracle. As demais alternativas contêm erros conceituais ou invertem definições.

A questão cobra conhecimentos fundamentais de PL/SQL Oracle: estrutura de packages, comportamento de cursores recursivos, chamadas a Java stored procedures, estados de triggers e exceções.

PL/SQL Oracle
  • 1Trigger
    • Estados
      • Enabled (default)
      • Disabled (cláusula DISABLE)
    • Sintaxe: CREATE TRIGGER ... DISABLE
  • 2Package
    • Especificação (interface)
      • Tipos, variáveis, cursores
      • Subprogramas (declaração)
    • Corpo (implementação)
      • Código dos subprogramas
  • 3Exceções
    • Internas (run-time system)
    • Nomes predefinidos (ex.: DIVIDE_ZERO)
    • Podem ser definidas pelo usuário
  • 4Java stored procedure
    • Chamado de qualquer lugar
    • Não restrito a package
  • 5Cursor FOR loop recursivo
    • Novo cursor por chamada
    • Risco: estourar OPEN_CURSORS
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A afirmação sobre recursão em cursor FOR loop é imprecisa. Em PL/SQL, quando um procedimento recursivo abre um cursor FOR loop, um novo cursor é aberto a cada chamada, podendo exceder o limite de cursores abertos (parâmetro OPEN_CURSORS). Contudo, a situação descrita "cursor entre OPEN e CLOSE" também pode levar ao estouro se houver múltiplas aberturas sem fechamento. A redação é confusa e não reflete corretamente o comportamento.

Alternativa B — ❌ Incorreta

Java stored procedures podem ser chamados de qualquer lugar no banco de dados Oracle, não apenas de dentro de um package. A restrição mencionada é falsa; a chamada pode ocorrer de um bloco PL/SQL anônimo, de outro subprograma ou de um trigger, sem a necessidade de encapsulamento em um package.

Alternativa C — ✅ Correta ⟵ GABARITO

Triggers no Oracle podem estar habilitados (enabled) ou desabilitados (disabled). Por padrão, são criados no estado enabled. Para criar um trigger já desabilitado, utiliza-se a cláusula DISABLE no comando CREATE TRIGGER. Exemplo:

CREATE TRIGGER meu_trigger
AFTER INSERT ON tabela
DISABLE
BEGIN
 ...
END;

É possível também alterar o estado posteriormente com ALTER TRIGGER ... ENABLE/DISABLE. A alternativa está correta.

Alternativa D — ❌ Incorreta

Inverte os papéis da especificação e do corpo do package. Conforme a documentação do Oracle, a especificação (CREATE PACKAGE) é a interface pública, declarando tipos, variáveis, cursores e subprogramas visíveis externamente, sem incluir a implementação. Já o corpo (CREATE PACKAGE BODY) contém o código efetivo dos subprogramas (a implementação). O erro está em dizer que a especificação define queries e código, e o corpo define a interface.

Alternativa E — ❌ Incorreta

Exceções em PL/SQL podem ser internas (predefinidas) ou definidas pelo programador (exceções de usuário). Não são somente internas. Além disso, as exceções predefinidas não incluem DIVIDE_ZERO; a correta é ZERO_DIVIDE. ERROR_STORAGE também não é um nome padrão; a exceção para falha de memória é STORAGE_ERROR. Portanto, a alternativa é falsa.

Gabarito: letra C

Link permanente: /questoes/fc029690