Considere o script Oracle PL/SQL a seguir.DECLARE var_x(2);B...

Próximas questões
Com base no mesmo assunto
Q1993176 Banco de Dados
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
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a D - SQL%NOTFOUND / SQL%FOUND / SQL%ROWCOUNT. Para entendermos o porquê, precisamos conhecer algumas pseudo-colunas de status em PL/SQL que são utilizadas para verificar o resultado de comandos DML (Data Manipulation Language), como INSERT, UPDATE e DELETE.

As pseudo-colunas são:

  • SQL%NOTFOUND - Retorna TRUE se a última instrução DML executada não afetou nenhuma linha.
  • SQL%FOUND - Retorna TRUE se a última instrução DML executada afetou pelo menos uma linha.
  • SQL%ROWCOUNT - Retorna o número de linhas afetadas pela última instrução DML.

No script apresentado, o uso destas pseudo-colunas serve para:

  1. Verificar se o UPDATE não modificou nenhum registro (SQL%NOTFOUND).
  2. Verificar se o UPDATE modificou algum registro (SQL%FOUND).
  3. Atribuir à variável var_x o número de registros alterados pelo UPDATE (SQL%ROWCOUNT).

Portanto, substituindo os trechos pontilhados com estas pseudo-colunas, conseguimos verificar se registros foram alterados e exibir a quantidade correspondente, o que faz da opção D a correta para que o script funcione conforme esperado.

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

SQL%NOTFOUND / SQL%FOUND / SQL%ROWCOUNT

%NOTFOUND- Returns INVALID_CURSOR if cursor is declared, but not open; or if cursor has been closed.

- Return NULL if cursor is open, but fetch has not been executed.

- Returns FALSE if a successful fetch has been executed.

- Returns TRUE if no row was returned.

%ROWCOUNT- Returns INVALID_CURSOR if cursor is declared, but not open; or if cursor has been closed.

- Returns the number of rows fetched.

- The ROWCOUNT attribute doesn't give the real row count until you have iterated through the entire cursor. In other words, you shouldn't rely on this attribute to tell you how many rows are in a cursor after it is opened.

# Apenas trazendo o código com cada comando em uma linha para ajudar na interpretação

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;

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo