Oracle – Where Current Of

Cláusula WHERE CURRENT OF

Sintaxe
WHERE CURRENT OF cursor ;

• Usar cursores para atualizar ou deletar a linha atual.
• Incluir a cláusula FOR UPDATE na consulta de cursor para primeiro bloquear as linhas.
• Usar a cláusula WHERE CURRENT OF para fazer referência à linha atual a partir de um cursor explícito.

Ao fazer referência à linha atual de um cursor explícito, use a cláusula WHERE CURRENT OF. Isso permite que você aplique atualizações e deleções à linha que está sendo tratada no momento, sem necessidade de fazer referência explícita a ROWID. Você deve incluir a cláusula FOR UPDATE na consulta do cursor para que as linhas sejam bloqueadas em OPEN.

Na sintaxe:
cursor é o nome de um cursor declarado (O cursor deve ter sido declarado com a cláusula FOR UPDATE.)

A Cláusula WHERE CURRENT OF

Exemplo

DECLARE
  CURSOR cSql IS
    SELECT salario
    FROM funcionario
    WHERE cod_depto = 30
    FOR UPDATE OF salario NOWAIT;
  Registro cSql%rowtype;  
BEGIN
  FOR registro IN cSql 
  LOOP
    UPDATE funcionario SET 
    salario = Registro.salario * 1.15
    WHERE CURRENT OF cSql;
  END LOOP;
  COMMIT;
END;

Você pode atualizar linhas com base em critérios de um cursor.

Além disso, pode criar a instrução DELETE ou UPDATE para conter a cláusula WHERE CURRENT OF cursor_name para fazer referência à linha mais recente processada pela instrução FETCH. Ao utilizar essa cláusula, o cursor ao qual você faz referência precisa existir e deve conter a cláusula FOR UPDATE na consulta do cursor; caso contrário receberá um erro. Essa cláusula permite aplicar atualizações e deleções à linha atual sem que seja necessário fazer referência explícita à pseudocoluna ROWID.