Array
(
)

Cursor

Emersonn
   - 01 set 2005

Olá,

Estou com um problema, tenho uma procedure que criar um cursor com mais de 60.000 registros para eu poder atualizar varias tabelas, o problema ocorre que o cursor se perde no meio do caminho e as tabelas não são atualizadas como deveriam.

Já ouvi falar que no SQL cursores com mais de 10.000 linhas dão esse problema, alguem sabe se isso é verdade e como poderia resolver esse problema.

Muito obrigado.
Emerson

Emerson
   - 02 set 2005

publique a instrução completa. quem sabe assim alguém pode dar uma solução...

Rjun
   - 02 set 2005

Uma tabela temporária não resolveria seu problema?

Marcus.magalhaes
   - 03 set 2005

bom dia.

Como vc está declarando o cursor, procure declara-lo como estático, assim vc não tem o risco de alguém atualizar a tabela à qual o seu cursor faz referencia.

Esse problema eu encontrei com versões mais antigas do SS, porém, não estou certo de sua correção em versões novas.

Porém a sugestão do nosso colega de utilizar tabela temporária é bastante válida, uma vez q o cursor tem um custo de CPU bastante grande, o q pode causar perda de performance.

Espero ter ajudado.

Att,

Emersonn
   - 03 set 2005

Ola...

Eu já pensei em criar uma tabela temporária mas nesse caso não nada, porque eu preciso ler essa qtd de registro e para cada linha lida eu vou atualizar outras linhas em outras tabelas, com isso tenho que ficar dentro de um loop.

Tem outra maneira de criar um loop sem ser pelo cursor.

Esse problema só ocorre com um volume muito grande de registro, tenho outros cursores menores que vão que é uma beleza.

Marcus.magalhaes
   - 07 set 2005

Boa noite,

Vc poderia utilizar a tabela temporária e fazer os updates utilizando Join.

Ex.:
Update td
set coluna = valor
From tabele_temp temp Inner join tabela_desejada td On temp.col = td.coluna
Where condição

Espero ter ajudado.

Att,