Cursor
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
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
Emersonn
Curtidas 0
Respostas
Emerson Nascimento
01/09/2005
publique a instrução completa. quem sabe assim alguém pode dar uma solução...
GOSTEI 0
Rjun
01/09/2005
Uma tabela temporária não resolveria seu problema?
GOSTEI 0
Marcus.magalhaes
01/09/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,
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,
GOSTEI 0
Emersonn
01/09/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.
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.
GOSTEI 0
Marcus.magalhaes
01/09/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,
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,
GOSTEI 0