← Questões de Banco de Dados

Banco de Dados · FGV · 2022

Questão comentada de Banco de Dados

No contexto do uso de cursores por meio do Oracle PL/SQL, analise o script a seguir. DECLARE v_CPF pessoa.CPF%type; v_nome pessoa.nome%type; ----------- BEGIN OPEN teste; LOOP ----------- EXIT WHEN teste %notfound; EXEC sp_inclui_beneficio(v_CPF); END LOOP; CLOSE teste; END; As linhas que substituem corretamente os trechos tracejados na quarta e na oitava linhas do script acima são, respectivamente:

Gabarito: A

Em PL/SQL, cursores servem para percorrer um conjunto de linhas retornado por uma consulta. A lógica clássica é: declarar o cursor com a consulta, abrir o cursor, buscar linha a linha com FETCH, testar se acabou com %NOTFOUND e, ao final, fechar o cursor. Aqui, o script mostra exatamente essa sequência: OPEN teste; depois vem o FETCH com as variáveis v_CPF e v_nome, e em seguida o EXIT WHEN teste%NOTFOUND. No Oracle, a declaração correta de um cursor explícito usa a palavra-chave CURSOR, assim como em "CURSOR teste IS SELECT CPF, nome FROM pessoa;". Já o FETCH precisa trazer os campos do cursor para variáveis compatíveis, no caso "FETCH teste INTO v_CPF, v_nome;". Isso combina com os tipos definidos por %TYPE, o que ajuda a evitar erro de incompatibilidade de tipo. Perceba que o cursor só pode ser consultado depois de aberto, e o teste de fim de dados com %NOTFOUND é um padrão bem comum em prova. Se você conhece a triade abre, busca, fecha, metade do caminho já está andando. O resto é o Oracle fazendo seu teatro procedural habitual. Portanto, a alternativa A está correta porque completa o código com a declaração do cursor e com o FETCH adequado ao uso de cursor explícito em PL/SQL.

Continue treinando

Questões relacionadas