Analise o código Oracle PL/SQL. DECLARE s_mat aluno.matricula%type; s_nom aluno.nome%type; s_cur aluno.curso%type; CURSOR cur_alunos is ...; BEGIN OPEN cur_alunos; LOOP FETCH cur_alunos into s_mat, s_nom, s_cur; EXIT WHEN cur_alunos%notfound; dbms_output.put_line(s_mat || ' ' || s_nom || ' ' || s_cur); END LOOP; CLOSE cur_alunos; END; / Assinale a opção que apresenta o trecho que deve substitui corretamente os pontos “...” na sexta linha do código.
- A)GET aluno
Errada, porque "GET" não é a sintaxe usada para declarar cursor em PL/SQL.
- B)IMPORT FROM aluno TO cur_alunos
Errada, pois "IMPORT FROM ... TO ..." não existe nesse contexto de cursor Oracle.
- C)READ FROM aluno
Errada, já que "READ FROM" não é comando válido para definir a consulta do cursor.
- D)SELECT matricula, nome, curso FROM aluno
Certa, porque o cursor precisa ser declarado com uma consulta SELECT que retorne exatamente as colunas lidas no FETCH.
- E)WITH * FROM aluno
Errada, pois "WITH * FROM" não é uma forma válida de declarar cursor em Oracle PL/SQL.
Gabarito: D
Em PL/SQL, um cursor explícito funciona como uma “fila” de registros vindos de uma consulta SQL. Primeiro você declara o cursor com um SELECT, depois abre, faz FETCH linha a linha e, por fim, fecha. A lógica do bloco dado mostra exatamente isso: as variáveis s_mat, s_nom e s_cur recebem os campos retornados pela consulta do cursor cur_alunos. O ponto central da questão é que o trecho faltante na declaração do cursor precisa ser uma instrução SQL SELECT, porque é ela que define quais colunas serão lidas da tabela aluno. Como as variáveis foram tipadas com aluno.matricula%type, aluno.nome%type e aluno.curso%type, faz todo sentido buscar matricula, nome e curso nessa ordem. Por isso, o gabarito D está correto: "SELECT matricula, nome, curso FROM aluno". É exatamente esse comando que alimenta o cursor cur_alunos com três colunas compatíveis com o FETCH realizado depois. Sem esse SELECT, o cursor não tem fonte de dados e o bloco não fecha a conta. As demais alternativas inventam verbos que não pertencem à sintaxe Oracle PL/SQL para cursor. Em prova, a banca costuma cobrar essa base: cursor explícito = declaração com SELECT, OPEN, FETCH e CLOSE. Parece simples, e é mesmo - mas a FGV adora trocar o SELECT por palavras fantasiosas para ver se voce cai no conto.