Kbase 51110: Comandos ORACLE para cada tipo de LOCK do comando ABL FOR EACH
Autor |
  Eloi Rene Pscheidt - CAT |
Acesso |
  Público |
Publicação |
  19/06/2015 |
|
Aqui apresento os comandos DML gerados pelo Dataserver Oracle para cada tipo de LOCK utilizado nos comandos FOR EACH.
FOR EACH <tabela> NO-LOCK
Executa 1 vez: SELECT <todas as colunas> FROM <tabela>
FOR EACH <tabela> EXCLUSIVE-LOCK
Executa 1 vez: SELECT progress_recid from <tabela>
Para cada registro do select anterior: SELECT <todas as colunas> FROM <tabela> WHERE progress_recid = <recid> FOR UPDATE OF <coluna>
Para cada registro alterado: UPDATE <tabela> SET <campo> = <valor> WHERE progress_recid = <recid>
FOR EACH <tabela> SHARE-LOCK
Executa 1 vez: SELECT <todas as colunas> from <tabela>
Para cada registro alterado: SELECT <todas as colunas> FROM <tabela> WHERE progress_recid = <recid> FOR UPDATE OF <coluna> NOWAIT
Para cada registro alterado: UPDATE <tabela> SET <campo> = <valor> WHERE progress_recid = <recid>
Conclusões do ponto de vista de desempenho:
Se você NÃO vai alterar registros, utilize NO-LOCK.
Se for alterar APENAS alguns registros do seu FOR EACH, prefira SHARE-LOCK.
Se for alterar TODOS os registros do seu FOR EACH, tanto faz utilizar SHARE-LOCK ou EXCLUSIVE-LOCK.