Considere o script Oracle PL/SQL a seguir. DECLARE var_x(2); BEGIN UPDATE calendario SET dia = dia + 1; IF ....... THEN dbms_output.put_line('Zero alterados.'); ELSIF ....... THEN var_x:= ....... ; dbms_output.put_line(var_x || ' alterados.'); END IF; END; Para que esse script funcione corretamente, os três trechos pontilhados devem ser substituídos, na ordem em que aparecem, por
- A).EMPTY / .OK / .RECORD_COUNT
Errada, porque EMPTY, OK e RECORD_COUNT nao sao atributos validos do cursor implícito SQL em PL/SQL.
- B).NOTFOUND / .FOUND / .COUNT
Errada, porque NOTFOUND e FOUND precisam do prefixo SQL% e COUNT nao e o atributo correto para quantidade de linhas afetadas.
- C)_NOTFOUND / _FOUND / _COUNT
Errada, porque os atributos do cursor implícito usam SQL% e nao o sufixo com underscore, alem de _COUNT nao existir assim.
- D)SQL%NOTFOUND / SQL%FOUND / SQL%ROWCOUNT
Certa, porque SQL%NOTFOUND testa zero linhas afetadas, SQL%FOUND testa se houve alteração e SQL%ROWCOUNT retorna a quantidade de linhas.
- E)SQL:EMPTY / SQL:OK / SQL:ROWCOUNT
Errada, porque SQL:EMPTY, SQL:OK e SQL:ROWCOUNT nao sao sintaxe valida de atributos em Oracle PL/SQL.
Gabarito: D
Em PL/SQL, quando voce executa um comando DML como UPDATE, o Oracle preenche automaticamente alguns atributos do cursor implícito chamado SQL. Eles servem para saber o resultado da operação sem precisar contar linha por linha: SQL%NOTFOUND indica que nenhuma linha foi afetada, SQL%FOUND indica que pelo menos uma linha foi afetada, e SQL%ROWCOUNT mostra quantas linhas foram atingidas. Nesta questão, o script faz um UPDATE em calendario e depois testa exatamente esse resultado. Se nada foi alterado, a condição deve usar SQL%NOTFOUND para imprimir "Zero alterados.". Se houve alteração, a segunda verificação deve usar SQL%FOUND e então guardar em var_x a quantidade de linhas afetadas com SQL%ROWCOUNT. Por isso o gabarito é a alternativa D: SQL%NOTFOUND / SQL%FOUND / SQL%ROWCOUNT. É o trio clássico do cursor implícito em Oracle PL/SQL, muito cobrado em prova. A lógica é simples: notfound para zero, found para algum resultado, rowcount para o número exato. Sem mistério, só o Oracle fazendo a contagem e você lendo o placar.