Um Analista de Sistemas que utiliza PL/SQL em um banco de dados Oracle afirma, corretamente, que
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.
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.
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.
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.
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.