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 SobrinhoAperfeiç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.
- Representando dados em XML no SQL ServerSQL Server
- Diferenças entre SEQUENCES x IDENTITY no Microsoft SQL Server 2012SQL
- Utilizando FILETABLE no SQL Server 2012SQL Server
- NHibernate com o Delphi Prism: Acessando um Banco de Dados SQL ServerVisual Studio
- Novidades no SQL Server Codinome DenaliSQL Server