Banco de Dados - SQL Server

Aperfeiçoar UPDATE e DELETE x Cursores

Para melhorar o desempenho das suas rotinas PL/SQL quando for necessário atualizar (delete ou update)...

por Roberto Fernandes Sobrinho



Aperfeiçoar UPDATE e DELETE x Cursores

Aperfeiçoar UPDATE e DELETE x Cursor

Para melhorar o desempenho das suas rotinas PL/SQL quando for necessário atualizar (delete ou update) registros que são retornados em um cursor sempre utilizar o comando for update of para dar um lock nos registros do cursor que somente será liberado para outras sessões após um commit ou rollback.

    Código 01

DECLARE

   CURSOR c1_emp

   IS

      SELECT a.empno, a.sal

        FROM emp a

      FOR UPDATE OF a.sal;

BEGIN

   FOR x IN c1_emp

   LOOP

      UPDATE emp b

         SET b.sal = b.sal + (b.sal * 0.25)

       WHERE CURRENT OF c1_emp;

   END LOOP;

   COMMIT;

END;

Observem que o código 01 foi usado na clausula where uma referencia direta ao cursor c1_emp otimizando o seu comando update  (WHERE CURRENT OF c1_emp) que por sua vez não precisara buscar o registro a ser atualizado pelo índice na tabela pois o mesmo já esta sendo acessado pelo cursor, ou seja, ao se utilizar o comando current of  garantimos o acesso direto ao dado sem o uso de índices para localização do registro.

Vejam abaixo como esta rotina normalmente é escrita pelos programadores:

    Código 02

DECLARE

   CURSOR c1_emp

   IS

      SELECT a.empno, a.sal

        FROM emp a;

BEGIN

   FOR x IN c1_emp

   LOOP

      UPDATE emp b

         SET b.sal = b.sal + (b.sal * 0.25)

             WHERE b.empno = x.empno;

   END LOOP;

   COMMIT;

END;

Observem que o código 02 foi usado na clausula where uma referencia a chave primaria da tabela emp  fazendo com que o comando update acesse a tabela emp  pelo índice no momento do update e o cursor c1_emp não da lock no registro portanto se algum outro processo requisitar um update ou delete na linha irá ocorrer uma espera da manipulação da outra sessão.

Roberto Fernandes Sobrinho

Roberto Fernandes Sobrinho - Graduado em Ciência da Computação, Possui 08 anos de experiência com tecnologia Oracle especialista em análise e desenvolvimento de aplicações baseados em estrutura Oracle atuando fortemente com desenvolvimento PL/SQL, PL/SQL Web Toolkit,, Forms & Reports (4.5, 6i, 6i Web, 10g, 11g) e integrações sistêmicas entre Oracle E-Business Suite, Synchro Solução Fiscal, Synchro Nota Fiscal Eletrônica. Atualmente atua como analista de sistemas sênior em uma grande Editora brasileira e é responsável pelo sistema de faturamento nota fiscal eletrônica, além disso, presta consultorias pontuais de análise, desenvolvimento, Tuning de Aplicação para diversas empresas através da sua consultoria Fast Systems LTDA.