Estava conversando com um colega meu de trabalho, quando ele estava contando um caso onde tinha um cursor que retornava uma excessiva quantidade de linhas e que ao termino da execução não dava erro, mas não retornava todas as linhas esperadas e isso levantou a seguinte dúvida: "O CURSOR tem um limite de retorno de linhas?".
Cheguei a levantar a hipótese que a capacidade do cursor é a mesma capacidade da quantidade de memória disponível, mas também não tenho certeza. Por isso, eis ai a dúvida. Será que alguém consegue esclarecer?
Abçs.,
Limite do tamanho do CURSOR
- stcoutinho
- Moderador
- Mensagens: 850
- Registrado em: Qua, 11 Mai 2011 5:15 pm
- Localização: são Paulo - SP
Tinho,
Já ia responder direto que não havia limite, mas resolvi pesquisar um pouquinho sobre o assunto. Nunca passei pelo problema descrito por você.
Aparentemente, não parece haver nenhum limite para a execução de cursores. Mas é provável considerar que possam existir limites como, por exemplo, o tamanho da SGA.
Mas consultei em foruns e manuais, e aparentemente este limite não deve ser tão fácil assim de ser alcançado, senão a ORACLE já teria incluido em sua documentação.
Mas você precisa levar em conta que um cursor com muitos registros e colunas (ex: 60 milhões) pode demorar um tempo considerável para ser processado, além de aumentarem os riscos de um erro do tipo "SNAPHOT TOO OLD".
O correto é você avaliar se precisa processar tantos registros assim (ex: adicionar filtros à sua querie de cursor para descartar os registros desnecessários) ou optar por recursos de PL/SQL que processem o cursor de forma muito mais rápida (Ex: COLLECTIONS).
Pode ser que outros foristas tenham uma opinião diferente da minha.
Abraços,
Sergio Coutinho
Já ia responder direto que não havia limite, mas resolvi pesquisar um pouquinho sobre o assunto. Nunca passei pelo problema descrito por você.
Aparentemente, não parece haver nenhum limite para a execução de cursores. Mas é provável considerar que possam existir limites como, por exemplo, o tamanho da SGA.
Mas consultei em foruns e manuais, e aparentemente este limite não deve ser tão fácil assim de ser alcançado, senão a ORACLE já teria incluido em sua documentação.
Mas você precisa levar em conta que um cursor com muitos registros e colunas (ex: 60 milhões) pode demorar um tempo considerável para ser processado, além de aumentarem os riscos de um erro do tipo "SNAPHOT TOO OLD".
O correto é você avaliar se precisa processar tantos registros assim (ex: adicionar filtros à sua querie de cursor para descartar os registros desnecessários) ou optar por recursos de PL/SQL que processem o cursor de forma muito mais rápida (Ex: COLLECTIONS).
Pode ser que outros foristas tenham uma opinião diferente da minha.
Abraços,
Sergio Coutinho
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Eu penso que se há de fato tantas linhas no cursor, provavelmente o melhor seria evitar o uso de cursor se possível, principalmente se houver UPDATES/INSERTS/DELETES e outros cursores dentro do Loop desse cursor.
-
- Rank: DBA Sênior
- Mensagens: 321
- Registrado em: Seg, 16 Nov 2009 4:50 pm
- Localização: São Paulo - SP
Camaradas, obrigado pela opinião. Infelizmente não tenho muito detalhes do caso, mas parece que o meu colega estava atualizando uma base de CPFs com muitos registros a partir de arquivos. Eu procurei por documentos oficiais que descrevessem algo a respeito mas não encontrei nada. Na ocasião, cheguei a sugerir que ele quebrasse isso em bloco, por exemplo, a cada quantidade de linhas processadas ele daria um commit, além de chegar a sugerir o uso de processamento paralelo, mas não sei se resolveria no caso dele.
De qualquer maneira mais uma vez agradeço a atenção de todos.
Abçs.,
De qualquer maneira mais uma vez agradeço a atenção de todos.
Abçs.,
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Google [Bot] e 4 visitantes