Em relação à Linguagem PL/SQL, todas as afrmativas abaixo es...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta para a questão é a D - Os cursores são bidirecionais, ou seja, a partir do registro corrente do cursor é possível obter o registro anterior ou o próximo.
Para entender melhor o contexto da questão, vamos explorar cada alternativa com base no conhecimento de PL/SQL no Oracle:
- Alternativa A: Afirma que uma função armazenada pode ser utilizada em um comando SQL do Oracle da mesma maneira que as funções SQL nativas. Isso é verdadeiro, pois no Oracle, funções definidas pelo usuário podem de fato ser invocadas em instruções SQL assim como funções internas, como LENGTH ou TO_DATE, por exemplo.
- Alternativa B: Gatilhos de banco de dados (triggers) não podem conter os comandos COMMIT ou ROLLBACK. Isso também é verdadeiro. Gatilhos são projetados para serem automáticos e devem funcionar de maneira transparente em relação às transações. Incluir um COMMIT ou ROLLBACK dentro de um gatilho poderia interferir com a transação que o ativou, o que não é permitido.
- Alternativa C: A linguagem suporta tratamento de exceções. Esta afirmação é correta. A PL/SQL fornece uma estrutura robusta para o tratamento de exceções, permitindo que os programas capturem e respondam a erros de runtime de forma controlada.
- Alternativa D: Os cursores são bidirecionais, ou seja, a partir do registro corrente do cursor é possível obter o registro anterior ou o próximo. Esta é a alternativa incorreta e, portanto, o gabarito da questão. Em PL/SQL, os cursores são, por padrão, unidirecionais, o que significa que você pode somente avançar para o próximo registro. Não há suporte nativo para voltar ao registro anterior sem reexecutar o cursor ou sem implementar uma lógica específica para esse propósito.
Assim, é importante lembrar que, em PL/SQL, os cursores facilitam a navegação e processamento de linhas retornadas por uma consulta. No entanto, a natureza unidirecional padrão dos cursores é um aspecto fundamental que deve ser considerado ao projetar soluções envolvendo navegação em conjuntos de resultados.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Só é possível recuperar de um cursor aberto o registro seguinte ao atual e nunca o anterior.
É utilizada a instrução FETCH para pegar o próximo registro ou abrir um cursor dentro de uma estrutura de LOOP.
DECLARE
CURSOR c1 IS SELECT ename, job FROM emp WHERE sal < 3000;
my_record c1%ROWTYPE;
...
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO my_record;
EXIT WHEN c1%NOTFOUND;
-- process data record
END LOOP;
CLOSE c1;
...END;
Cursor não anda pra trás
Acho que é a opção B pq com esse comando eu consigo dar commit dentro de uma trigger. PRAGMA AUTONOMOUS_TRANSACTION;
Fiz um teste e commitou sussegado (em uma tabela de historico), e eu consigo sim consultar um registro anterior do cursor normalmente. estou aprendendo ainda mas consegui testar esses dois. se estiver errado alguem da uma luz...
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo